You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2016/03/02 22:04:09 UTC
[08/16] cassandra git commit: Only log yaml config once, at startup
Only log yaml config once, at startup
patch by jasobrown, reviewed by Paulo Motta for CASSANDRA-11217
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/621f446c
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/621f446c
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/621f446c
Branch: refs/heads/cassandra-3.5
Commit: 621f446ca4a319adcb50d2479e3fa7121eac6ebd
Parents: 49a33e4
Author: Jason Brown <ja...@gmail.com>
Authored: Fri Feb 12 14:55:27 2016 -0800
Committer: Jason Brown <ja...@gmail.com>
Committed: Wed Mar 2 12:59:37 2016 -0800
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/config/Config.java | 48 ++++++++++++++++++++
.../cassandra/config/DatabaseDescriptor.java | 12 ++++-
.../config/YamlConfigurationLoader.java | 18 --------
4 files changed, 59 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/621f446c/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index b77d811..819fa22 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -21,6 +21,7 @@
properly (CASSANDRA-11050)
* Fix NPE when using forceRepairRangeAsync without DC (CASSANDRA-11239)
Merged from 2.2:
+ * Only log yaml config once, at startup (CASSANDRA-11217)
* Reference leak with parallel repairs on the same table (CASSANDRA-11215)
* Range.compareTo() violates the contract of Comparable (CASSANDRA-11216)
* Avoid NPE when serializing ErrorMessage with null message (CASSANDRA-11167)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/621f446c/src/java/org/apache/cassandra/config/Config.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java
index ca5bcea..32c0bfa 100644
--- a/src/java/org/apache/cassandra/config/Config.java
+++ b/src/java/org/apache/cassandra/config/Config.java
@@ -17,11 +17,21 @@
*/
package org.apache.cassandra.config;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.TreeMap;
import java.util.concurrent.TimeUnit;
+import com.google.common.base.Joiner;
import com.google.common.collect.Sets;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import org.apache.cassandra.config.EncryptionOptions.ClientEncryptionOptions;
import org.apache.cassandra.config.EncryptionOptions.ServerEncryptionOptions;
@@ -32,6 +42,8 @@ import org.apache.cassandra.config.EncryptionOptions.ServerEncryptionOptions;
*/
public class Config
{
+ private static final Logger logger = LoggerFactory.getLogger(Config.class);
+
/*
* Prefix for Java properties for internal Cassandra configuration options
*/
@@ -383,4 +395,40 @@ public class Config
ssd,
spinning
}
+
+ private static final List<String> SENSITIVE_KEYS = new ArrayList<String>() {{
+ add("client_encryption_options");
+ add("server_encryption_options");
+ }};
+ public void log()
+ {
+ Map<String, String> configMap = new TreeMap<>();
+ for (Field field : getClass().getFields())
+ {
+ // ignore the constants
+ if (Modifier.isFinal(field.getModifiers()))
+ continue;
+
+ String name = field.getName();
+ if (SENSITIVE_KEYS.contains(name))
+ {
+ configMap.put(name, "<REDACTED>");
+ continue;
+ }
+
+ String value;
+ try
+ {
+ // Field.get() can throw NPE if the value of the field is null
+ value = field.get(this).toString();
+ }
+ catch (NullPointerException | IllegalAccessException npe)
+ {
+ value = "null";
+ }
+ configMap.put(name, value);
+ }
+
+ logger.info("Node configuration:[" + Joiner.on("; ").join(configMap.entrySet()) + "]");
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/621f446c/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index c903775..7bcfb97 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -53,7 +53,6 @@ import org.apache.cassandra.scheduler.IRequestScheduler;
import org.apache.cassandra.scheduler.NoScheduler;
import org.apache.cassandra.service.CacheService;
import org.apache.cassandra.thrift.ThriftServer;
-import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.memory.*;
@@ -101,6 +100,7 @@ public class DatabaseDescriptor
private static String localDC;
private static Comparator<InetAddress> localComparator;
+ private static boolean hasLoggedConfig;
public static void forceStaticInitialization() {}
static
@@ -132,7 +132,15 @@ public class DatabaseDescriptor
ConfigurationLoader loader = loaderClass == null
? new YamlConfigurationLoader()
: FBUtilities.<ConfigurationLoader>construct(loaderClass, "configuration loading");
- return loader.loadConfig();
+ Config config = loader.loadConfig();
+
+ if (!hasLoggedConfig)
+ {
+ hasLoggedConfig = true;
+ config.log();
+ }
+
+ return config;
}
private static InetAddress getNetworkInterfaceAddress(String intf, String configName, boolean preferIPv6) throws ConfigurationException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/621f446c/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java b/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java
index 917eaeb..435377c 100644
--- a/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java
+++ b/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java
@@ -27,9 +27,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.TreeMap;
-import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -113,8 +111,6 @@ public class YamlConfigurationLoader implements ConfigurationLoader
throw new AssertionError(e);
}
- logConfig(configBytes);
-
Constructor constructor = new CustomConstructor(Config.class);
MissingPropertiesChecker propertiesChecker = new MissingPropertiesChecker();
constructor.setPropertyUtils(propertiesChecker);
@@ -165,20 +161,6 @@ public class YamlConfigurationLoader implements ConfigurationLoader
}
}
- private void logConfig(byte[] configBytes)
- {
- Map<Object, Object> configMap = new TreeMap<>((Map<?, ?>) new Yaml().load(new ByteArrayInputStream(configBytes)));
- // these keys contain passwords, don't log them
- for (String sensitiveKey : new String[] { "client_encryption_options", "server_encryption_options" })
- {
- if (configMap.containsKey(sensitiveKey))
- {
- configMap.put(sensitiveKey, "<REDACTED>");
- }
- }
- logger.info("Node configuration:[{}]", Joiner.on("; ").join(configMap.entrySet()));
- }
-
private static class MissingPropertiesChecker extends PropertyUtils
{
private final Set<String> missingProperties = new HashSet<>();