This is an automated email from the ASF dual-hosted git repository. marcuse pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push: new dd1c811 Provide ability to configure IAuditLogger dd1c811 is described below commit dd1c811f8796487f49e92ff4701917420caf49c0 Author: Stefan Miklosovic <stefan.mikloso...@instaclustr.com> AuthorDate: Wed Apr 22 09:23:16 2020 +0200 Provide ability to configure IAuditLogger Patch by Stefan Miklosovic; reviewed by Vinay Chella and marcuse for CASSANDRA-15748 --- CHANGES.txt | 1 + conf/cassandra.yaml | 3 ++- doc/source/new/auditlogging.rst | 25 ++++++++++++++++++++-- .../apache/cassandra/audit/AuditLogManager.java | 25 +++++++++++++--------- .../apache/cassandra/audit/AuditLogOptions.java | 6 +++++- .../org/apache/cassandra/audit/BinAuditLogger.java | 3 ++- .../audit/DiagnosticEventAuditLogger.java | 7 ++++++ .../apache/cassandra/audit/FileAuditLogger.java | 4 +++- .../apache/cassandra/audit/NoOpAuditLogger.java | 7 ++++++ .../apache/cassandra/db/virtual/SettingsTable.java | 2 +- .../apache/cassandra/service/StorageService.java | 13 ++++++++--- .../cassandra/service/StorageServiceMBean.java | 1 + src/java/org/apache/cassandra/tools/NodeProbe.java | 7 +++++- .../org/apache/cassandra/utils/FBUtilities.java | 15 +++++++++---- .../cassandra/audit/AuditLoggerAuthTest.java | 3 ++- .../apache/cassandra/audit/AuditLoggerTest.java | 10 +++++---- .../apache/cassandra/audit/BinAuditLoggerTest.java | 3 ++- .../cassandra/audit/InMemoryAuditLogger.java | 7 +++++- .../cassandra/db/virtual/SettingsTableTest.java | 3 ++- .../service/StorageServiceServerTest.java | 10 ++++----- .../cassandra/transport/CQLUserAuditTest.java | 3 ++- 21 files changed, 119 insertions(+), 39 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 88d633b..b0e7224 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.0-alpha5 + * Provide ability to configure IAuditLogger (CASSANDRA-15748) * Fix nodetool enablefullquerylog blocking param parsing (CASSANDRA-15819) * Add isTransient to SSTableMetadataView (CASSANDRA-15806) * Fix tools/bin/fqltool for all shells (CASSANDRA-15820) diff --git a/conf/cassandra.yaml b/conf/cassandra.yaml index e1d2d2d..6db9557 100644 --- a/conf/cassandra.yaml +++ b/conf/cassandra.yaml @@ -1284,7 +1284,8 @@ back_pressure_strategy: # on audit_logging for full details about the various configuration options. audit_logging_options: enabled: false - logger: BinAuditLogger + logger: + - class_name: BinAuditLogger # audit_logs_dir: # included_keyspaces: # excluded_keyspaces: system, system_schema, system_virtual_schema diff --git a/doc/source/new/auditlogging.rst b/doc/source/new/auditlogging.rst index 0a15a9f..0842810 100644 --- a/doc/source/new/auditlogging.rst +++ b/doc/source/new/auditlogging.rst @@ -120,7 +120,8 @@ The audit logger is set with the ``logger`` option. :: - logger: BinAuditLogger + logger: + - class_name: BinAuditLogger Two types of audit loggers are supported: ``FileAuditLogger`` and ``BinAuditLogger``. ``BinAuditLogger`` is the default setting. The ``BinAuditLogger`` is an efficient way to log events to file in a binary format. @@ -129,6 +130,25 @@ Two types of audit loggers are supported: ``FileAuditLogger`` and ``BinAuditLogg The ``NoOpAuditLogger`` is a No-Op implementation of the audit logger to be used as a default audit logger when audit logging is disabled. +It is possible to configure your custom logger implementation by injecting a map of property keys and their respective values. Default `IAuditLogger` +implementations shipped with Cassandra do not react on these properties but your custom logger might. They would be present as +a parameter of logger constructor (as `Map<String, String>`). In ``cassandra.yaml`` file, you may configure it like this: + +:: + + logger: + - class_name: MyCustomAuditLogger + parameters: + - key1: value1 + key2: value2 + +When it comes to configuring these parameters, you can use respective ``enableAuditLog`` method in ``StorageServiceMBean``. +There are two methods of same name with different signatures. The first one does not accept a map where your parameters would be. This method +is used primarily e.g. from JConsole or similar tooling. JConsole can not accept a map to be sent over JMX so in order to be able to enable it +from there, even without any parameters, use this method. ``BinAuditLogger`` does not need any parameters to run with so invoking this method is fine. +The second one does accept a map with your custom parameters so you can pass them programmatically. ``enableauditlog`` command of ``nodetool`` uses +the first ``enableAuditLog`` method mentioned. Hence, currently, there is not a way how to pass parameters to your custom audit logger from ``nodetool``. + Setting the Audit Logs Directory ******************************** The audit logs directory is set with the ``audit_logs_dir`` option. A new directory is not created automatically and an existing directory must be set. Audit Logs directory can be configured using ``cassandra.logdir.audit`` system property or default is set to ``cassandra.logdir + /audit/``. A user created directory may be set. As an example, create a directory for the audit logs and set its permissions. @@ -344,7 +364,8 @@ To demonstrate audit logging enable and configure audit logs with following sett audit_logging_options: enabled: true - logger: BinAuditLogger + logger: + - class_name: BinAuditLogger audit_logs_dir: "/cassandra/audit/logs/hourly" # included_keyspaces: # excluded_keyspaces: system, system_schema, system_virtual_schema diff --git a/src/java/org/apache/cassandra/audit/AuditLogManager.java b/src/java/org/apache/cassandra/audit/AuditLogManager.java index c21274e..bd6d10d 100644 --- a/src/java/org/apache/cassandra/audit/AuditLogManager.java +++ b/src/java/org/apache/cassandra/audit/AuditLogManager.java @@ -20,7 +20,9 @@ package org.apache.cassandra.audit; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.UUID; import javax.annotation.Nullable; @@ -31,6 +33,7 @@ import org.slf4j.LoggerFactory; import org.apache.cassandra.auth.AuthEvents; import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.config.ParameterizedClass; import org.apache.cassandra.cql3.CQLStatement; import org.apache.cassandra.cql3.QueryEvents; import org.apache.cassandra.cql3.QueryOptions; @@ -60,18 +63,20 @@ public class AuditLogManager implements QueryEvents.Listener, AuthEvents.Listene private AuditLogManager() { - if (DatabaseDescriptor.getAuditLoggingOptions().enabled) + final AuditLogOptions auditLogOptions = DatabaseDescriptor.getAuditLoggingOptions(); + + if (auditLogOptions.enabled) { logger.info("Audit logging is enabled."); - auditLogger = getAuditLogger(DatabaseDescriptor.getAuditLoggingOptions().logger); + auditLogger = getAuditLogger(auditLogOptions.logger); } else { logger.debug("Audit logging is disabled."); - auditLogger = new NoOpAuditLogger(); + auditLogger = new NoOpAuditLogger(Collections.emptyMap()); } - filter = AuditLogFilter.create(DatabaseDescriptor.getAuditLoggingOptions()); + filter = AuditLogFilter.create(auditLogOptions); } public void initialize() @@ -80,14 +85,14 @@ public class AuditLogManager implements QueryEvents.Listener, AuthEvents.Listene registerAsListener(); } - private IAuditLogger getAuditLogger(String loggerClassName) throws ConfigurationException + private IAuditLogger getAuditLogger(ParameterizedClass logger) throws ConfigurationException { - if (loggerClassName != null) + if (logger.class_name != null) { - return FBUtilities.newAuditLogger(loggerClassName); + return FBUtilities.newAuditLogger(logger.class_name, logger.parameters == null ? Collections.emptyMap() : logger.parameters); } - return FBUtilities.newAuditLogger(BinAuditLogger.class.getName()); + return FBUtilities.newAuditLogger(BinAuditLogger.class.getName(), Collections.emptyMap()); } @VisibleForTesting @@ -142,7 +147,7 @@ public class AuditLogManager implements QueryEvents.Listener, AuthEvents.Listene { unregisterAsListener(); IAuditLogger oldLogger = auditLogger; - auditLogger = new NoOpAuditLogger(); + auditLogger = new NoOpAuditLogger(Collections.emptyMap()); oldLogger.stop(); } @@ -159,7 +164,7 @@ public class AuditLogManager implements QueryEvents.Listener, AuthEvents.Listene // next, check to see if we're changing the logging implementation; if not, keep the same instance and bail. // note: auditLogger should never be null IAuditLogger oldLogger = auditLogger; - if (oldLogger.getClass().getSimpleName().equals(auditLogOptions.logger)) + if (oldLogger.getClass().getSimpleName().equals(auditLogOptions.logger.class_name)) return; auditLogger = getAuditLogger(auditLogOptions.logger); diff --git a/src/java/org/apache/cassandra/audit/AuditLogOptions.java b/src/java/org/apache/cassandra/audit/AuditLogOptions.java index 06577cc..e8691df 100644 --- a/src/java/org/apache/cassandra/audit/AuditLogOptions.java +++ b/src/java/org/apache/cassandra/audit/AuditLogOptions.java @@ -17,14 +17,18 @@ */ package org.apache.cassandra.audit; +import java.util.Collections; +import java.util.Map; + import org.apache.commons.lang3.StringUtils; +import org.apache.cassandra.config.ParameterizedClass; import org.apache.cassandra.utils.binlog.BinLogOptions; public class AuditLogOptions extends BinLogOptions { public volatile boolean enabled = false; - public String logger = BinAuditLogger.class.getSimpleName(); + public ParameterizedClass logger = new ParameterizedClass(BinAuditLogger.class.getSimpleName(), Collections.emptyMap()); public String included_keyspaces = StringUtils.EMPTY; // CASSANDRA-14498: By default, system, system_schema and system_virtual_schema are excluded, but these can be included via cassandra.yaml public String excluded_keyspaces = "system,system_schema,system_virtual_schema"; diff --git a/src/java/org/apache/cassandra/audit/BinAuditLogger.java b/src/java/org/apache/cassandra/audit/BinAuditLogger.java index ac846a6..95a53f1 100644 --- a/src/java/org/apache/cassandra/audit/BinAuditLogger.java +++ b/src/java/org/apache/cassandra/audit/BinAuditLogger.java @@ -18,6 +18,7 @@ package org.apache.cassandra.audit; import java.nio.file.Paths; +import java.util.Map; import com.google.common.annotations.VisibleForTesting; import com.google.common.primitives.Ints; @@ -40,7 +41,7 @@ public class BinAuditLogger implements IAuditLogger private volatile BinLog binLog; - public BinAuditLogger() + public BinAuditLogger(Map<String, String> params) { AuditLogOptions auditLoggingOptions = DatabaseDescriptor.getAuditLoggingOptions(); diff --git a/src/java/org/apache/cassandra/audit/DiagnosticEventAuditLogger.java b/src/java/org/apache/cassandra/audit/DiagnosticEventAuditLogger.java index 1a0b6cf..9a154ae 100644 --- a/src/java/org/apache/cassandra/audit/DiagnosticEventAuditLogger.java +++ b/src/java/org/apache/cassandra/audit/DiagnosticEventAuditLogger.java @@ -18,10 +18,17 @@ package org.apache.cassandra.audit; +import java.util.Map; + import org.apache.cassandra.diag.DiagnosticEventService; public class DiagnosticEventAuditLogger implements IAuditLogger { + public DiagnosticEventAuditLogger(Map<String, String> params) + { + + } + public void log(AuditLogEntry logMessage) { AuditEvent.create(logMessage); diff --git a/src/java/org/apache/cassandra/audit/FileAuditLogger.java b/src/java/org/apache/cassandra/audit/FileAuditLogger.java index b872c8f..a5fffcb 100644 --- a/src/java/org/apache/cassandra/audit/FileAuditLogger.java +++ b/src/java/org/apache/cassandra/audit/FileAuditLogger.java @@ -18,6 +18,8 @@ package org.apache.cassandra.audit; +import java.util.Map; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,7 +32,7 @@ public class FileAuditLogger implements IAuditLogger private volatile boolean enabled; - public FileAuditLogger() + public FileAuditLogger(Map<String, String> params) { enabled = true; } diff --git a/src/java/org/apache/cassandra/audit/NoOpAuditLogger.java b/src/java/org/apache/cassandra/audit/NoOpAuditLogger.java index 876b645..8f159d0 100644 --- a/src/java/org/apache/cassandra/audit/NoOpAuditLogger.java +++ b/src/java/org/apache/cassandra/audit/NoOpAuditLogger.java @@ -17,11 +17,18 @@ */ package org.apache.cassandra.audit; +import java.util.Map; + /** * No-Op implementation of {@link IAuditLogger} to be used as a default audit logger when audit logging is disabled. */ public class NoOpAuditLogger implements IAuditLogger { + public NoOpAuditLogger(Map<String, String> params) + { + + } + @Override public boolean isEnabled() { diff --git a/src/java/org/apache/cassandra/db/virtual/SettingsTable.java b/src/java/org/apache/cassandra/db/virtual/SettingsTable.java index 048d4ba..b26a63d 100644 --- a/src/java/org/apache/cassandra/db/virtual/SettingsTable.java +++ b/src/java/org/apache/cassandra/db/virtual/SettingsTable.java @@ -145,7 +145,7 @@ final class SettingsTable extends AbstractVirtualTable AuditLogOptions value = (AuditLogOptions) getValue(f); result.row(f.getName() + "_enabled").column(VALUE, Boolean.toString(value.enabled)); - result.row(f.getName() + "_logger").column(VALUE, value.logger); + result.row(f.getName() + "_logger").column(VALUE, value.logger.class_name); result.row(f.getName() + "_audit_logs_dir").column(VALUE, value.audit_logs_dir); result.row(f.getName() + "_included_keyspaces").column(VALUE, value.included_keyspaces); result.row(f.getName() + "_excluded_keyspaces").column(VALUE, value.excluded_keyspaces); diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index dfc1da9..0e42904 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -47,6 +47,7 @@ import com.google.common.base.Predicates; import com.google.common.collect.*; import com.google.common.util.concurrent.*; +import org.apache.cassandra.config.ParameterizedClass; import org.apache.cassandra.dht.RangeStreamer.FetchReplica; import org.apache.cassandra.fql.FullQueryLogger; import org.apache.cassandra.fql.FullQueryLoggerOptions; @@ -5444,14 +5445,20 @@ public class StorageService extends NotificationBroadcasterSupport implements IE public void enableAuditLog(String loggerName, String includedKeyspaces, String excludedKeyspaces, String includedCategories, String excludedCategories, String includedUsers, String excludedUsers) throws ConfigurationException, IllegalStateException { - loggerName = loggerName != null ? loggerName : DatabaseDescriptor.getAuditLoggingOptions().logger; + enableAuditLog(loggerName, Collections.emptyMap(), includedKeyspaces, excludedKeyspaces, includedCategories, excludedCategories, includedUsers, excludedUsers); + } + + public void enableAuditLog(String loggerName, Map<String, String> parameters, String includedKeyspaces, String excludedKeyspaces, String includedCategories, String excludedCategories, + String includedUsers, String excludedUsers) throws ConfigurationException, IllegalStateException + { + loggerName = loggerName != null ? loggerName : DatabaseDescriptor.getAuditLoggingOptions().logger.class_name; Preconditions.checkNotNull(loggerName, "cassandra.yaml did not have logger in audit_logging_option and not set as parameter"); Preconditions.checkState(FBUtilities.isAuditLoggerClassExists(loggerName), "Unable to find AuditLogger class: "+loggerName); AuditLogOptions auditLogOptions = new AuditLogOptions(); auditLogOptions.enabled = true; - auditLogOptions.logger = loggerName; + auditLogOptions.logger = new ParameterizedClass(loggerName, parameters); auditLogOptions.included_keyspaces = includedKeyspaces != null ? includedKeyspaces : DatabaseDescriptor.getAuditLoggingOptions().included_keyspaces; auditLogOptions.excluded_keyspaces = excludedKeyspaces != null ? excludedKeyspaces : DatabaseDescriptor.getAuditLoggingOptions().excluded_keyspaces; auditLogOptions.included_categories = includedCategories != null ? includedCategories : DatabaseDescriptor.getAuditLoggingOptions().included_categories; @@ -5463,7 +5470,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE logger.info("AuditLog is enabled with logger: [{}], included_keyspaces: [{}], excluded_keyspaces: [{}], " + "included_categories: [{}], excluded_categories: [{}], included_users: [{}], " - + "excluded_users: [{}], archive_command: [{}]", loggerName, auditLogOptions.included_keyspaces, auditLogOptions.excluded_keyspaces, + + "excluded_users: [{}], archive_command: [{}]", auditLogOptions.logger, auditLogOptions.included_keyspaces, auditLogOptions.excluded_keyspaces, auditLogOptions.included_categories, auditLogOptions.excluded_categories, auditLogOptions.included_users, auditLogOptions.excluded_users, auditLogOptions.archive_command); diff --git a/src/java/org/apache/cassandra/service/StorageServiceMBean.java b/src/java/org/apache/cassandra/service/StorageServiceMBean.java index 7574010..f8488c7 100644 --- a/src/java/org/apache/cassandra/service/StorageServiceMBean.java +++ b/src/java/org/apache/cassandra/service/StorageServiceMBean.java @@ -740,6 +740,7 @@ public interface StorageServiceMBean extends NotificationEmitter /** Clears the history of clients that have connected in the past **/ void clearConnectionHistory(); public void disableAuditLog(); + public void enableAuditLog(String loggerName, Map<String, String> parameters, String includedKeyspaces, String excludedKeyspaces, String includedCategories, String excludedCategories, String includedUsers, String excludedUsers) throws ConfigurationException; public void enableAuditLog(String loggerName, String includedKeyspaces, String excludedKeyspaces, String includedCategories, String excludedCategories, String includedUsers, String excludedUsers) throws ConfigurationException; public boolean isAuditLogEnabled(); public String getCorruptedTombstoneStrategy(); diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java index f911eb5..4ea301b 100644 --- a/src/java/org/apache/cassandra/tools/NodeProbe.java +++ b/src/java/org/apache/cassandra/tools/NodeProbe.java @@ -1784,9 +1784,14 @@ public class NodeProbe implements AutoCloseable ssProxy.disableAuditLog(); } + public void enableAuditLog(String loggerName, Map<String, String> parameters, String includedKeyspaces ,String excludedKeyspaces ,String includedCategories ,String excludedCategories ,String includedUsers ,String excludedUsers) + { + ssProxy.enableAuditLog(loggerName, parameters, includedKeyspaces, excludedKeyspaces, includedCategories, excludedCategories, includedUsers, excludedUsers); + } + public void enableAuditLog(String loggerName, String includedKeyspaces ,String excludedKeyspaces ,String includedCategories ,String excludedCategories ,String includedUsers ,String excludedUsers) { - ssProxy.enableAuditLog(loggerName, includedKeyspaces, excludedKeyspaces, includedCategories, excludedCategories, includedUsers, excludedUsers); + this.enableAuditLog(loggerName, Collections.emptyMap(), includedKeyspaces, excludedKeyspaces, includedCategories, excludedCategories, includedUsers, excludedUsers); } public void enableOldProtocolVersions() diff --git a/src/java/org/apache/cassandra/utils/FBUtilities.java b/src/java/org/apache/cassandra/utils/FBUtilities.java index 9b39f2d..367138a 100644 --- a/src/java/org/apache/cassandra/utils/FBUtilities.java +++ b/src/java/org/apache/cassandra/utils/FBUtilities.java @@ -66,8 +66,6 @@ import org.apache.cassandra.io.util.DataOutputBuffer; import org.apache.cassandra.io.util.DataOutputBufferFixed; import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.locator.InetAddressAndPort; -import org.apache.cassandra.net.AsyncOneResponse; - public class FBUtilities @@ -634,11 +632,20 @@ public class FBUtilities return FBUtilities.construct(className, "network authorizer"); } - public static IAuditLogger newAuditLogger(String className) throws ConfigurationException + public static IAuditLogger newAuditLogger(String className, Map<String, String> parameters) throws ConfigurationException { if (!className.contains(".")) className = "org.apache.cassandra.audit." + className; - return FBUtilities.construct(className, "Audit logger"); + + try + { + Class<?> auditLoggerClass = Class.forName(className); + return (IAuditLogger) auditLoggerClass.getConstructor(Map.class).newInstance(parameters); + } + catch (Exception ex) + { + throw new ConfigurationException("Unable to create instance of IAuditLogger.", ex); + } } public static boolean isAuditLoggerClassExists(String className) diff --git a/test/unit/org/apache/cassandra/audit/AuditLoggerAuthTest.java b/test/unit/org/apache/cassandra/audit/AuditLoggerAuthTest.java index 66d8295..bbd8561 100644 --- a/test/unit/org/apache/cassandra/audit/AuditLoggerAuthTest.java +++ b/test/unit/org/apache/cassandra/audit/AuditLoggerAuthTest.java @@ -36,6 +36,7 @@ import com.datastax.driver.core.exceptions.UnauthorizedException; import org.apache.cassandra.OrderedJUnit4ClassRunner; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.config.OverrideConfigurationLoader; +import org.apache.cassandra.config.ParameterizedClass; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.locator.InetAddressAndPort; import org.apache.cassandra.service.EmbeddedCassandraService; @@ -70,7 +71,7 @@ public class AuditLoggerAuthTest config.role_manager = "CassandraRoleManager"; config.authorizer = "CassandraAuthorizer"; config.audit_logging_options.enabled = true; - config.audit_logging_options.logger = "InMemoryAuditLogger"; + config.audit_logging_options.logger = new ParameterizedClass("InMemoryAuditLogger", null); }); CQLTester.prepareServer(); diff --git a/test/unit/org/apache/cassandra/audit/AuditLoggerTest.java b/test/unit/org/apache/cassandra/audit/AuditLoggerTest.java index e3b93ec..ac0170f 100644 --- a/test/unit/org/apache/cassandra/audit/AuditLoggerTest.java +++ b/test/unit/org/apache/cassandra/audit/AuditLoggerTest.java @@ -21,6 +21,7 @@ import org.junit.After; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Map; import org.junit.Assert; import org.junit.Before; @@ -36,6 +37,7 @@ import com.datastax.driver.core.exceptions.SyntaxError; import net.openhft.chronicle.queue.RollCycles; import org.apache.cassandra.auth.AuthEvents; import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.config.ParameterizedClass; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.cql3.QueryEvents; import org.apache.cassandra.exceptions.ConfigurationException; @@ -61,7 +63,7 @@ public class AuditLoggerTest extends CQLTester { AuditLogOptions options = new AuditLogOptions(); options.enabled = true; - options.logger = "InMemoryAuditLogger"; + options.logger = new ParameterizedClass("InMemoryAuditLogger", null); DatabaseDescriptor.setAuditLoggingOptions(options); requireNetwork(); } @@ -89,7 +91,7 @@ public class AuditLoggerTest extends CQLTester String includedUsers = options.included_users; String excludedUsers = options.excluded_users; - StorageService.instance.enableAuditLog(loggerName, includedKeyspaces, excludedKeyspaces, includedCategories, excludedCategories, includedUsers, excludedUsers); + StorageService.instance.enableAuditLog(loggerName, null, includedKeyspaces, excludedKeyspaces, includedCategories, excludedCategories, includedUsers, excludedUsers); } private void disableAuditLogOptions() @@ -676,7 +678,7 @@ public class AuditLoggerTest extends CQLTester disableAuditLogOptions(); AuditLogOptions options = new AuditLogOptions(); DatabaseDescriptor.setAuditLoggingOptions(options); - StorageService.instance.enableAuditLog(null, options.included_keyspaces, options.excluded_keyspaces, options.included_categories, options.excluded_categories, options.included_users, options.excluded_users); + StorageService.instance.enableAuditLog(null, null, options.included_keyspaces, options.excluded_keyspaces, options.included_categories, options.excluded_categories, options.included_users, options.excluded_users); try { assertEquals(1, QueryEvents.instance.listenerCount()); @@ -704,7 +706,7 @@ public class AuditLoggerTest extends CQLTester { assertEquals(1, QueryEvents.instance.listenerCount()); assertEquals(0, AuthEvents.instance.listenerCount()); - StorageService.instance.enableAuditLog(null, options.included_keyspaces, options.excluded_keyspaces, options.included_categories, options.excluded_categories, options.included_users, options.excluded_users); + StorageService.instance.enableAuditLog(null, null, options.included_keyspaces, options.excluded_keyspaces, options.included_categories, options.excluded_categories, options.included_users, options.excluded_users); fail("Conflicting directories - should throw exception"); } catch (ConfigurationException e) diff --git a/test/unit/org/apache/cassandra/audit/BinAuditLoggerTest.java b/test/unit/org/apache/cassandra/audit/BinAuditLoggerTest.java index e93ac15..a450cbf 100644 --- a/test/unit/org/apache/cassandra/audit/BinAuditLoggerTest.java +++ b/test/unit/org/apache/cassandra/audit/BinAuditLoggerTest.java @@ -30,6 +30,7 @@ import net.openhft.chronicle.queue.ChronicleQueueBuilder; import net.openhft.chronicle.queue.ExcerptTailer; import net.openhft.chronicle.queue.RollCycles; import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.config.ParameterizedClass; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.utils.binlog.BinLogTest; @@ -50,7 +51,7 @@ public class BinAuditLoggerTest extends CQLTester AuditLogOptions options = new AuditLogOptions(); options.enabled = true; - options.logger = "BinAuditLogger"; + options.logger = new ParameterizedClass("BinAuditLogger", null); options.roll_cycle = "TEST_SECONDLY"; options.audit_logs_dir = tempDir.toString(); DatabaseDescriptor.setAuditLoggingOptions(options); diff --git a/test/unit/org/apache/cassandra/audit/InMemoryAuditLogger.java b/test/unit/org/apache/cassandra/audit/InMemoryAuditLogger.java index c9e4990..f9a4038 100644 --- a/test/unit/org/apache/cassandra/audit/InMemoryAuditLogger.java +++ b/test/unit/org/apache/cassandra/audit/InMemoryAuditLogger.java @@ -17,8 +17,8 @@ */ package org.apache.cassandra.audit; -import java.nio.file.Path; import java.util.LinkedList; +import java.util.Map; import java.util.Queue; public class InMemoryAuditLogger implements IAuditLogger @@ -26,6 +26,11 @@ public class InMemoryAuditLogger implements IAuditLogger final Queue<AuditLogEntry> inMemQueue = new LinkedList<>(); private boolean enabled = true; + public InMemoryAuditLogger(Map<String, String> params) + { + + } + @Override public boolean isEnabled() { diff --git a/test/unit/org/apache/cassandra/db/virtual/SettingsTableTest.java b/test/unit/org/apache/cassandra/db/virtual/SettingsTableTest.java index d34878d..de5f514 100644 --- a/test/unit/org/apache/cassandra/db/virtual/SettingsTableTest.java +++ b/test/unit/org/apache/cassandra/db/virtual/SettingsTableTest.java @@ -34,6 +34,7 @@ import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Row; import org.apache.cassandra.config.Config; import org.apache.cassandra.config.EncryptionOptions.ServerEncryptionOptions.InternodeEncryption; +import org.apache.cassandra.config.ParameterizedClass; import org.apache.cassandra.cql3.CQLTester; public class SettingsTableTest extends CQLTester @@ -186,7 +187,7 @@ public class SettingsTableTest extends CQLTester check(pre + "enabled", "true"); check(pre + "logger", "BinAuditLogger"); - config.audit_logging_options.logger = "logger"; + config.audit_logging_options.logger = new ParameterizedClass("logger", null); check(pre + "logger", "logger"); config.audit_logging_options.audit_logs_dir = "dir"; diff --git a/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java b/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java index 6e7704a..3e188ed 100644 --- a/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java +++ b/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java @@ -666,11 +666,11 @@ public class StorageServiceServerTest @Test public void testAuditLogEnableLoggerNotFound() throws Exception { - StorageService.instance.enableAuditLog(null, null, null, null, null, null, null); + StorageService.instance.enableAuditLog(null, null, null, null, null, null, null, null); assertTrue(AuditLogManager.instance.isEnabled()); try { - StorageService.instance.enableAuditLog("foobar", null, null, null, null, null, null); + StorageService.instance.enableAuditLog("foobar", null, null, null, null, null, null, null); Assert.fail(); } catch (IllegalStateException ex) @@ -682,19 +682,19 @@ public class StorageServiceServerTest @Test public void testAuditLogEnableLoggerTransitions() throws Exception { - StorageService.instance.enableAuditLog(null, null, null, null, null, null, null); + StorageService.instance.enableAuditLog(null, null, null, null, null, null, null, null); assertTrue(AuditLogManager.instance.isEnabled()); try { - StorageService.instance.enableAuditLog("foobar", null, null, null, null, null, null); + StorageService.instance.enableAuditLog("foobar", null, null, null, null, null, null, null); } catch (ConfigurationException | IllegalStateException e) { e.printStackTrace(); } - StorageService.instance.enableAuditLog(null, null, null, null, null, null, null); + StorageService.instance.enableAuditLog(null, null, null, null, null, null, null, null); assertTrue(AuditLogManager.instance.isEnabled()); StorageService.instance.disableAuditLog(); } diff --git a/test/unit/org/apache/cassandra/transport/CQLUserAuditTest.java b/test/unit/org/apache/cassandra/transport/CQLUserAuditTest.java index c11b06f..32717bf 100644 --- a/test/unit/org/apache/cassandra/transport/CQLUserAuditTest.java +++ b/test/unit/org/apache/cassandra/transport/CQLUserAuditTest.java @@ -46,6 +46,7 @@ import org.apache.cassandra.audit.AuditLogEntryType; import org.apache.cassandra.audit.AuditLogManager; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.config.OverrideConfigurationLoader; +import org.apache.cassandra.config.ParameterizedClass; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.diag.DiagnosticEventService; import org.apache.cassandra.locator.InetAddressAndPort; @@ -69,7 +70,7 @@ public class CQLUserAuditTest config.role_manager = "CassandraRoleManager"; config.diagnostic_events_enabled = true; config.audit_logging_options.enabled = true; - config.audit_logging_options.logger = "DiagnosticEventAuditLogger"; + config.audit_logging_options.logger = new ParameterizedClass("DiagnosticEventAuditLogger", null); }); CQLTester.prepareServer(); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org