From 800df5ccfa723deef1268eb39e974748e31c728b Mon Sep 17 00:00:00 2001 From: cguttapalem Date: Fri, 16 Feb 2018 13:46:24 -0800 Subject: [PATCH 1/2] Dump config - add utility method to AbstractConfiguration to return config as string and log it - dump the config during the start of the BookieServer --- .../bookkeeper/conf/AbstractConfiguration.java | 18 ++++++++++++++++++ .../apache/bookkeeper/proto/BookieServer.java | 2 ++ 2 files changed, 20 insertions(+) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java index e772c7917f5..2accf4143c3 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java @@ -618,4 +618,22 @@ public String getTLSEnabledProtocols() { * Trickery to allow inheritance with fluent style. */ protected abstract T getThis(); + + /** + * converts the config into string format, by appending the config values + * and separated by 'separator'. + * + * @param separator + * separator to separate the configs in string + */ + public String configAsString(String separator) { + StringBuilder configString = new StringBuilder(); + Iterator keys = this.getKeys(); + while (keys.hasNext()) { + String key = (String) keys.next(); + Object value = getProperty(key); + configString.append(key + "=" + value + separator); + } + return configString.toString(); + } } diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java index 602134a98d7..059ed177469 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java @@ -81,6 +81,8 @@ public BookieServer(ServerConfiguration conf, StatsLogger statsLogger) BookieException, UnavailableException, CompatibilityException, SecurityException { this.conf = conf; validateUser(conf); + String configAsString = conf.configAsString(System.getProperty("line.separator")); + LOG.info(configAsString); this.statsLogger = statsLogger; this.nettyServer = new BookieNettyServer(this.conf, null); try { From af980042fe8aae9027b348fc8d9ae1d232f34bb3 Mon Sep 17 00:00:00 2001 From: cguttapalem Date: Tue, 20 Feb 2018 13:38:58 -0800 Subject: [PATCH 2/2] Dump config - add utility method to AbstractConfiguration to return string representation of JSON string format of this config and log it - de-dupe the code --- .../conf/AbstractConfiguration.java | 34 ++++++++++++------- .../apache/bookkeeper/proto/BookieServer.java | 11 ++++-- .../http/service/ConfigurationService.java | 17 +--------- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java index 2accf4143c3..7d537a8fe2f 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java @@ -20,13 +20,18 @@ import static org.apache.bookkeeper.conf.ClientConfiguration.CLIENT_AUTH_PROVIDER_FACTORY_CLASS; import java.net.URL; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; + import javax.net.ssl.SSLEngine; import org.apache.bookkeeper.feature.Feature; import org.apache.bookkeeper.meta.LedgerManagerFactory; import org.apache.bookkeeper.util.EntryFormatter; +import org.apache.bookkeeper.util.JsonUtil; +import org.apache.bookkeeper.util.JsonUtil.ParseJsonException; import org.apache.bookkeeper.util.LedgerIdFormatter; import org.apache.bookkeeper.util.ReflectionUtils; import org.apache.bookkeeper.util.StringEntryFormatter; @@ -620,20 +625,25 @@ public String getTLSEnabledProtocols() { protected abstract T getThis(); /** - * converts the config into string format, by appending the config values - * and separated by 'separator'. + * returns the string representation of json format of this config. * - * @param separator - * separator to separate the configs in string + * @return + * @throws ParseJsonException */ - public String configAsString(String separator) { - StringBuilder configString = new StringBuilder(); - Iterator keys = this.getKeys(); - while (keys.hasNext()) { - String key = (String) keys.next(); - Object value = getProperty(key); - configString.append(key + "=" + value + separator); + public String asJson() throws ParseJsonException { + return JsonUtil.toJson(toMap()); + } + + private Map toMap() { + Map configMap = new HashMap<>(); + Iterator iterator = this.getKeys(); + while (iterator.hasNext()) { + String key = iterator.next().toString(); + Object property = this.getProperty(key); + if (property != null) { + configMap.put(key, property.toString()); + } } - return configString.toString(); + return configMap; } } diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java index 059ed177469..4765c449657 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java @@ -46,6 +46,7 @@ import org.apache.bookkeeper.tls.SecurityException; import org.apache.bookkeeper.tls.SecurityHandlerFactory; import org.apache.bookkeeper.tls.SecurityProviderFactoryFactory; +import org.apache.bookkeeper.util.JsonUtil.ParseJsonException; import org.apache.zookeeper.KeeperException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -81,8 +82,14 @@ public BookieServer(ServerConfiguration conf, StatsLogger statsLogger) BookieException, UnavailableException, CompatibilityException, SecurityException { this.conf = conf; validateUser(conf); - String configAsString = conf.configAsString(System.getProperty("line.separator")); - LOG.info(configAsString); + String configAsString; + try { + configAsString = conf.asJson(); + LOG.info(configAsString); + } catch (ParseJsonException pe) { + LOG.error("Got ParseJsonException while converting Config to JSONString", pe); + } + this.statsLogger = statsLogger; this.nettyServer = new BookieNettyServer(this.conf, null); try { diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/ConfigurationService.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/ConfigurationService.java index 983da4aca2b..2ac9e8e6a0e 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/ConfigurationService.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/ConfigurationService.java @@ -21,7 +21,6 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import org.apache.bookkeeper.conf.ServerConfiguration; @@ -48,8 +47,7 @@ public HttpServiceResponse handle(HttpServiceRequest request) throws Exception { HttpServiceResponse response = new HttpServiceResponse(); // GET if (HttpServer.Method.GET == request.getMethod()) { - Map configMap = toMap(conf); - String jsonResponse = JsonUtil.toJson(configMap); + String jsonResponse = conf.asJson(); response.setBody(jsonResponse); return response; } else if (HttpServer.Method.PUT == request.getMethod()) { @@ -75,17 +73,4 @@ public HttpServiceResponse handle(HttpServiceRequest request) throws Exception { } } - - private Map toMap(ServerConfiguration conf) { - Map configMap = new HashMap<>(); - Iterator iterator = conf.getKeys(); - while (iterator.hasNext()) { - String key = iterator.next().toString(); - Object property = conf.getProperty(key); - if (property != null) { - configMap.put(key, property.toString()); - } - } - return configMap; - } }