minor, refine kylin config Signed-off-by: Hongbin Ma <mahong...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0301da01 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0301da01 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0301da01 Branch: refs/heads/KYLIN-2360 Commit: 0301da01b3669d92ad4bd07facfc8f79b7b0e0eb Parents: 8edf234 Author: Cheng Wang <cheng.w...@kyligence.io> Authored: Fri Mar 10 18:42:45 2017 +0800 Committer: Hongbin Ma <mahong...@apache.org> Committed: Sat Mar 11 17:06:22 2017 +0800 ---------------------------------------------------------------------- .../org/apache/kylin/common/KylinConfigExt.java | 2 +- .../security/PasswordPlaceholderConfigurer.java | 19 ++++++++++- .../apache/kylin/rest/service/AdminService.java | 33 +++++++++++++++++++- 3 files changed, 51 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/0301da01/core-common/src/main/java/org/apache/kylin/common/KylinConfigExt.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigExt.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigExt.java index 6062d91..0ad24be 100644 --- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigExt.java +++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigExt.java @@ -61,7 +61,7 @@ public class KylinConfigExt extends KylinConfig { return super.getOptional(prop, dft); } - public Properties getAllProperties() { + protected Properties getAllProperties() { Properties result = new Properties(); result.putAll(super.getAllProperties()); result.putAll(overrides); http://git-wip-us.apache.org/repos/asf/kylin/blob/0301da01/server-base/src/main/java/org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java b/server-base/src/main/java/org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java index 092d73a..5bb6d54 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java +++ b/server-base/src/main/java/org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java @@ -21,6 +21,7 @@ package org.apache.kylin.rest.security; import java.io.InputStream; import java.io.PrintWriter; import java.io.StringWriter; +import java.lang.reflect.Method; import java.nio.charset.Charset; import java.util.Properties; @@ -30,6 +31,7 @@ import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import org.apache.kylin.common.KylinConfig; +import org.apache.kylin.common.KylinConfigBase; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; @@ -51,7 +53,8 @@ public class PasswordPlaceholderConfigurer extends PropertyPlaceholderConfigurer */ public PasswordPlaceholderConfigurer() { Resource[] resources = new Resource[1]; - Properties prop = KylinConfig.getKylinProperties(); + //Properties prop = KylinConfig.getKylinProperties(); + Properties prop = getAllKylinProperties(); StringWriter writer = new StringWriter(); prop.list(new PrintWriter(writer)); String propString = writer.getBuffer().toString(); @@ -61,6 +64,20 @@ public class PasswordPlaceholderConfigurer extends PropertyPlaceholderConfigurer this.setLocations(resources); } + public Properties getAllKylinProperties() { + // hack to get all config properties + Properties allProps = null; + try { + KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv(); + Method getAllMethod = KylinConfigBase.class.getDeclaredMethod("getAllProperties"); + getAllMethod.setAccessible(true); + allProps = (Properties) getAllMethod.invoke(kylinConfig); + } catch (Exception e) { + throw new RuntimeException(e); + } + return allProps; + } + public static String encrypt(String strToEncrypt) { try { Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); http://git-wip-us.apache.org/repos/asf/kylin/blob/0301da01/server-base/src/main/java/org/apache/kylin/rest/service/AdminService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/AdminService.java b/server-base/src/main/java/org/apache/kylin/rest/service/AdminService.java index a02804e..4cacb6b 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/AdminService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/AdminService.java @@ -20,6 +20,7 @@ package org.apache.kylin.rest.service; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.lang.reflect.Method; import java.util.Map; import java.util.Properties; import java.util.TreeMap; @@ -27,6 +28,7 @@ import java.util.TreeMap; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.kylin.common.KylinConfig; +import org.apache.kylin.common.KylinConfigBase; import org.apache.kylin.common.util.OrderedProperties; import org.apache.kylin.rest.constant.Constant; import org.apache.kylin.rest.exception.InternalErrorException; @@ -94,7 +96,7 @@ public class AdminService extends BasicService { logger.debug("Get Kylin Runtime Config"); try { - return KylinConfig.getInstanceFromEnv().getConfigAsString(); + return getAllConfigAsString(); } catch (IOException e) { throw new InternalErrorException("Failed to get Kylin Runtime Config", e); } @@ -110,4 +112,33 @@ public class AdminService extends BasicService { throw new InternalErrorException(e.getMessage(), e); } } + + private String getAllConfigAsString() throws IOException { + Properties allProps; + try { + KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv(); + Method getAllMethod = KylinConfigBase.class.getDeclaredMethod("getAllProperties"); + getAllMethod.setAccessible(true); + allProps = (Properties) getAllMethod.invoke(kylinConfig); + } catch (Exception e) { + throw new RuntimeException(e); + } + + OrderedProperties orderedProperties = KylinConfig.getKylinOrderedProperties(); + + final StringBuilder sb = new StringBuilder(); + + for (Map.Entry<Object, Object> entry : allProps.entrySet()) { + String key = entry.getKey().toString(); + String value = entry.getValue().toString(); + if (!orderedProperties.containsProperty(key)) { + orderedProperties.setProperty(key, value); + } else if (!orderedProperties.getProperty(key).equalsIgnoreCase(value)) + orderedProperties.setProperty(key, value); + } + for (Map.Entry<String, String> entry : orderedProperties.entrySet()) { + sb.append(entry.getKey() + "=" + entry.getValue()).append('\n'); + } + return sb.toString(); + } }