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