You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2020/05/20 14:50:19 UTC

[cassandra] branch trunk updated: Provide ability to configure IAuditLogger

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 <st...@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-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org