minor, code clean up in KylinConfig
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/4b3a44b9 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/4b3a44b9 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/4b3a44b9 Branch: refs/heads/master Commit: 4b3a44b92442e9be056baa953e2543078ea0ec20 Parents: 7f47b51 Author: Li Yang <liy...@apache.org> Authored: Sun Aug 6 21:48:25 2017 +0800 Committer: Hongbin Ma <m...@kyligence.io> Committed: Fri Sep 1 17:51:08 2017 +0800 ---------------------------------------------------------------------- .../org/apache/kylin/common/KylinConfig.java | 227 ++++++++----------- .../apache/kylin/common/KylinConfigBase.java | 4 +- .../org/apache/kylin/common/KylinConfigExt.java | 6 +- .../kylin/common/persistence/ResourceStore.java | 2 +- .../common/HotLoadKylinPropertiesTestCase.java | 64 ++++++ .../apache/kylin/common/KylinConfigTest.java | 3 +- .../util/HotLoadKylinPropertiesTestCase.java | 64 ------ .../kylin/cube/CubeSpecificConfigTest.java | 4 +- .../apache/kylin/job/JobEngineConfigTest.java | 4 +- .../engine/mr/common/AbstractHadoopJob.java | 2 +- .../spark/SparkBatchCubingJobBuilder2.java | 2 +- .../kylin/engine/spark/SparkExecutable.java | 13 +- .../kylin/job/BaseTestDistributedScheduler.java | 4 +- .../kylin/rest/controller/AdminController.java | 2 +- .../kylin/rest/controller/CacheController.java | 2 +- .../rest/controller2/AdminControllerV2.java | 2 +- .../rest/controller2/CacheControllerV2.java | 2 +- .../apache/kylin/rest/service/AdminService.java | 4 +- .../hbase/cube/v2/CubeHBaseEndpointRPC.java | 2 +- .../org/apache/kylin/tool/KylinConfigCLI.java | 3 +- 20 files changed, 186 insertions(+), 230 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java index dfb9a28..a003638 100644 --- a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java +++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java @@ -34,12 +34,10 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.PrintWriter; import java.io.StringReader; import java.net.URL; import java.nio.ByteOrder; import java.nio.charset.Charset; -import java.util.Enumeration; import java.util.Map; import java.util.Properties; @@ -111,7 +109,7 @@ public class KylinConfig extends KylinConfigBase { if (SYS_ENV_INSTANCE == null) { try { config = new KylinConfig(); - config.reloadKylinConfig(getKylinProperties()); + config.reloadKylinConfig(buildSiteProperties()); logger.info("Initialized a new KylinConfig from getInstanceFromEnv : " + System.identityHashCode(config)); @@ -124,7 +122,7 @@ public class KylinConfig extends KylinConfigBase { } } - //Only used in test cases!!! + // Only used in test cases!!! public static void destroyInstance() { synchronized (KylinConfig.class) { logger.info("Destroy KylinConfig"); @@ -134,6 +132,26 @@ public class KylinConfig extends KylinConfigBase { } } + private static void dumpStackTrace() { + + //uncomment below to start debugging + + // Thread t = Thread.currentThread(); + // int maxStackTraceDepth = 20; + // int current = 0; + // + // StackTraceElement[] stackTrace = t.getStackTrace(); + // StringBuilder buf = new StringBuilder("This is not a exception, just for diagnose purpose:"); + // buf.append("\n"); + // for (StackTraceElement e : stackTrace) { + // if (++current > maxStackTraceDepth) { + // break; + // } + // buf.append("\t").append("at ").append(e.toString()).append("\n"); + // } + // logger.info(buf.toString()); + } + public enum UriType { PROPERTIES_FILE, REST_ADDR, LOCAL_FOLDER, HDFS_FILE } @@ -260,25 +278,16 @@ public class KylinConfig extends KylinConfigBase { return kylinConfig; } - public static String getKylinConfPath() { - String kylinConfHome = System.getProperty(KYLIN_CONF); - if (!StringUtils.isEmpty(kylinConfHome)) { - logger.info("Use KYLIN_CONF=" + kylinConfHome); - return kylinConfHome; - } - - String kylinHome = getKylinHome(); - if (StringUtils.isEmpty(kylinHome)) - throw new KylinConfigCannotInitException("Didn't find KYLIN_CONF or KYLIN_HOME, please set one of them"); - - return kylinHome + File.separator + "conf"; + public static File getKylinConfDir() { + return getSitePropertiesFile().getParentFile(); } - public static File getKylinPropertiesFile() { + // should be private; package visible for test only + static File getSitePropertiesFile() { String kylinConfHome = System.getProperty(KYLIN_CONF); if (!StringUtils.isEmpty(kylinConfHome)) { logger.info("Use KYLIN_CONF=" + kylinConfHome); - return getKylinPropertiesFile(kylinConfHome); + return existFile(kylinConfHome); } logger.debug("KYLIN_CONF property was not set, will seek KYLIN_HOME env variable"); @@ -288,13 +297,25 @@ public class KylinConfig extends KylinConfigBase { throw new KylinConfigCannotInitException("Didn't find KYLIN_CONF or KYLIN_HOME, please set one of them"); String path = kylinHome + File.separator + "conf"; - return getKylinPropertiesFile(path); + return existFile(path); } - public static Properties getKylinProperties() { + /** + * Return a File only if it exists + */ + private static File existFile(String path) { + if (path == null) { + return null; + } + + return new File(path, KYLIN_CONF_PROPERTIES_FILE); + } + + // build kylin properties from site deployment, a.k.a KYLIN_HOME/conf/kylin.properties + private static Properties buildSiteProperties() { Properties conf = new Properties(); - OrderedProperties orderedProperties = getKylinOrderedProperties(); + OrderedProperties orderedProperties = buildSiteOrderedProps(); for (Map.Entry<String, String> each : orderedProperties.entrySet()) { conf.put(each.getKey(), each.getValue()); } @@ -302,27 +323,8 @@ public class KylinConfig extends KylinConfigBase { return conf; } - /** - * will close the passed in inputstream - */ - private static void loadPropertiesFromInputStream(InputStream inputStream, OrderedProperties properties) { - Preconditions.checkNotNull(properties); - BufferedReader confReader = null; - try { - confReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); - OrderedProperties temp = new OrderedProperties(); - temp.load(confReader); - temp = BCC.check(temp); - - properties.putAll(temp); - } catch (Exception e) { - throw new RuntimeException(e); - } finally { - IOUtils.closeQuietly(confReader); - } - } - - private static OrderedProperties getKylinOrderedProperties() { + // build kylin properties from site deployment, a.k.a KYLIN_HOME/conf/kylin.properties + private static OrderedProperties buildSiteOrderedProps() { try { // 1. load default configurations from classpath. @@ -344,7 +346,7 @@ public class KylinConfig extends KylinConfigBase { // 2. load site conf, to keep backward compatibility it's still named kylin.properties // actually it's better to be named kylin-site.properties - File propFile = getKylinPropertiesFile(); + File propFile = getSitePropertiesFile(); if (propFile == null || !propFile.exists()) { logger.error("fail to locate " + KYLIN_CONF_PROPERTIES_FILE); throw new RuntimeException("fail to locate " + KYLIN_CONF_PROPERTIES_FILE); @@ -363,39 +365,24 @@ public class KylinConfig extends KylinConfigBase { } } - public String getConfigAsString() throws IOException { - Properties allProps = getAllProperties(); - 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(); - } - /** - * Check if there is kylin.properties exist - * - * @param path - * @return the properties file + * will close the passed in inputstream */ - private static File getKylinPropertiesFile(String path) { - if (path == null) { - return null; - } + private static void loadPropertiesFromInputStream(InputStream inputStream, OrderedProperties properties) { + Preconditions.checkNotNull(properties); + BufferedReader confReader = null; + try { + confReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); + OrderedProperties temp = new OrderedProperties(); + temp.load(confReader); + temp = BCC.check(temp); - return new File(path, KYLIN_CONF_PROPERTIES_FILE); + properties.putAll(temp); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + IOUtils.closeQuietly(confReader); + } } public static void setSandboxEnvIfPossible() { @@ -423,17 +410,35 @@ public class KylinConfig extends KylinConfigBase { super(props, force); } - public void writeProperties(Properties props, File file) throws IOException { - FileOutputStream fos = null; - try { - fos = new FileOutputStream(file); - props.store(fos, file.getAbsolutePath()); - } finally { - IOUtils.closeQuietly(fos); + public Properties exportToProperties() { + Properties all = getAllProperties(); + Properties copy = new Properties(); + copy.putAll(all); + return copy; + } + + public String exportToString() throws IOException { + Properties allProps = getAllProperties(); + OrderedProperties orderedProperties = KylinConfig.buildSiteOrderedProps(); + + 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(); } - public void writeProperties(File file) throws IOException { + public void exportToFile(File file) throws IOException { FileOutputStream fos = null; try { fos = new FileOutputStream(file); @@ -443,6 +448,10 @@ public class KylinConfig extends KylinConfigBase { } } + public synchronized void reloadFromSiteProperties() { + reloadKylinConfig(buildSiteProperties()); + } + public KylinConfig base() { return this; } @@ -464,60 +473,4 @@ public class KylinConfig extends KylinConfigBase { return this.base() == ((KylinConfig) another).base(); } - public static void writeOverrideProperties(Properties properties) throws IOException { - File propFile = getKylinPropertiesFile(); - File overrideFile = new File(propFile.getParentFile(), propFile.getName() + ".override"); - overrideFile.createNewFile(); - FileInputStream fis2 = null; - Properties override = new Properties(); - try { - fis2 = new FileInputStream(overrideFile); - override.load(fis2); - for (Map.Entry<Object, Object> entries : properties.entrySet()) { - override.setProperty(entries.getKey().toString(), entries.getValue().toString()); - } - } catch (IOException e) { - throw new RuntimeException(e); - } finally { - IOUtils.closeQuietly(fis2); - } - - PrintWriter pw = null; - try { - pw = new PrintWriter(overrideFile); - Enumeration<?> e = override.propertyNames(); - while (e.hasMoreElements()) { - String key = (String) e.nextElement(); - pw.println(key + "=" + override.getProperty(key)); - } - pw.close(); - } finally { - IOUtils.closeQuietly(pw); - } - - } - - private static void dumpStackTrace() { - - //uncomment below to start debugging - - // Thread t = Thread.currentThread(); - // int maxStackTraceDepth = 20; - // int current = 0; - // - // StackTraceElement[] stackTrace = t.getStackTrace(); - // StringBuilder buf = new StringBuilder("This is not a exception, just for diagnose purpose:"); - // buf.append("\n"); - // for (StackTraceElement e : stackTrace) { - // if (++current > maxStackTraceDepth) { - // break; - // } - // buf.append("\t").append("at ").append(e.toString()).append("\n"); - // } - // logger.info(buf.toString()); - } - - public synchronized void hotLoadKylinProperties() { - reloadKylinConfig(getKylinProperties()); - } } http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java index 0e990df..e5fc3d6 100644 --- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java +++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java @@ -147,7 +147,7 @@ abstract public class KylinConfigBase implements Serializable { return intArray; } - final public String getRequired(String prop) { + final protected String getRequired(String prop) { String r = getOptional(prop); if (StringUtils.isEmpty(r)) { throw new IllegalArgumentException("missing '" + prop + "' in conf/kylin.properties"); @@ -156,7 +156,7 @@ abstract public class KylinConfigBase implements Serializable { } /** - * Use with care, properties should be read-only. This is for testing mostly. + * Use with care, properties should be read-only. This is for testing only. */ final public void setProperty(String key, String value) { logger.info("Kylin Config was updated with " + key + " : " + value); http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/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 786f467..0e1b6b9 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 @@ -27,7 +27,7 @@ import java.util.Properties; @SuppressWarnings("serial") public class KylinConfigExt extends KylinConfig { - final private Map<String, String> overrides; + final Map<String, String> overrides; final KylinConfig base; public static KylinConfigExt createInstance(KylinConfig kylinConfig, Map<String, String> overrides) { @@ -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); @@ -71,7 +71,7 @@ public class KylinConfigExt extends KylinConfig { public Map<String, String> getExtendedOverrides() { return overrides; } - + @Override public KylinConfig base() { return this.base; http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java index ac29dc0..ae16bca 100644 --- a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java +++ b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java @@ -454,7 +454,7 @@ abstract public class ResourceStore { // write kylin.properties File kylinPropsFile = new File(metaDir, "kylin.properties"); - kylinConfig.writeProperties(kylinPropsFile); + kylinConfig.exportToFile(kylinPropsFile); ResourceStore from = ResourceStore.getStore(kylinConfig); KylinConfig localConfig = KylinConfig.createInstanceFromUri(metaDir.getAbsolutePath()); http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/core-common/src/test/java/org/apache/kylin/common/HotLoadKylinPropertiesTestCase.java ---------------------------------------------------------------------- diff --git a/core-common/src/test/java/org/apache/kylin/common/HotLoadKylinPropertiesTestCase.java b/core-common/src/test/java/org/apache/kylin/common/HotLoadKylinPropertiesTestCase.java new file mode 100644 index 0000000..ecbac33 --- /dev/null +++ b/core-common/src/test/java/org/apache/kylin/common/HotLoadKylinPropertiesTestCase.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +package org.apache.kylin.common; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.Properties; + +import org.apache.kylin.common.util.LocalFileMetadataTestCase; +import org.junit.After; +import org.junit.Before; + +/** + * @author kangkaisen + */ + +public class HotLoadKylinPropertiesTestCase extends LocalFileMetadataTestCase { + @Before + public void setUp() throws Exception { + this.createTestMetadata(); + } + + @After + public void after() throws Exception { + this.cleanupTestMetadata(); + } + + protected void updateProperty(String key, String value) { + File propFile = KylinConfig.getSitePropertiesFile(); + Properties conf = new Properties(); + + //load + try (FileInputStream is = new FileInputStream(propFile)) { + conf.load(is); + conf.setProperty(key, value); + } catch (Exception e) { + System.err.println(e.getMessage()); + } + + //store + try (FileOutputStream out = new FileOutputStream(propFile)) { + conf.store(out, null); + } catch (Exception e) { + System.err.println(e.getMessage()); + } + } +} http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java ---------------------------------------------------------------------- diff --git a/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java b/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java index f20ed7c..6da854b 100644 --- a/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java +++ b/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java @@ -27,7 +27,6 @@ import static org.junit.Assert.assertTrue; import java.util.Map; import java.util.Properties; -import org.apache.kylin.common.util.HotLoadKylinPropertiesTestCase; import org.junit.Test; import com.google.common.collect.Maps; @@ -85,7 +84,7 @@ public class KylinConfigTest extends HotLoadKylinPropertiesTestCase { assertEquals("who...@kylin.apache.org", config.getKylinOwner()); updateProperty("kylin.storage.hbase.owner-tag", "ky...@kylin.apache.org"); - KylinConfig.getInstanceFromEnv().hotLoadKylinProperties(); + KylinConfig.getInstanceFromEnv().reloadFromSiteProperties(); assertEquals("ky...@kylin.apache.org", config.getKylinOwner()); } http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/core-common/src/test/java/org/apache/kylin/common/util/HotLoadKylinPropertiesTestCase.java ---------------------------------------------------------------------- diff --git a/core-common/src/test/java/org/apache/kylin/common/util/HotLoadKylinPropertiesTestCase.java b/core-common/src/test/java/org/apache/kylin/common/util/HotLoadKylinPropertiesTestCase.java deleted file mode 100644 index 9f5b278..0000000 --- a/core-common/src/test/java/org/apache/kylin/common/util/HotLoadKylinPropertiesTestCase.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -package org.apache.kylin.common.util; - -import org.apache.kylin.common.KylinConfig; -import org.junit.After; -import org.junit.Before; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.util.Properties; - -/** - * @author kangkaisen - */ - -public class HotLoadKylinPropertiesTestCase extends LocalFileMetadataTestCase { - @Before - public void setUp() throws Exception { - this.createTestMetadata(); - } - - @After - public void after() throws Exception { - this.cleanupTestMetadata(); - } - - protected void updateProperty(String key, String value) { - File propFile = KylinConfig.getKylinPropertiesFile(); - Properties conf = new Properties(); - - //load - try (FileInputStream is = new FileInputStream(propFile)) { - conf.load(is); - conf.setProperty(key, value); - } catch (Exception e) { - System.err.println(e.getMessage()); - } - - //store - try (FileOutputStream out = new FileOutputStream(propFile)) { - conf.store(out, null); - } catch (Exception e) { - System.err.println(e.getMessage()); - } - } -} http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/core-cube/src/test/java/org/apache/kylin/cube/CubeSpecificConfigTest.java ---------------------------------------------------------------------- diff --git a/core-cube/src/test/java/org/apache/kylin/cube/CubeSpecificConfigTest.java b/core-cube/src/test/java/org/apache/kylin/cube/CubeSpecificConfigTest.java index 17c02cc..baaf813 100644 --- a/core-cube/src/test/java/org/apache/kylin/cube/CubeSpecificConfigTest.java +++ b/core-cube/src/test/java/org/apache/kylin/cube/CubeSpecificConfigTest.java @@ -20,8 +20,8 @@ package org.apache.kylin.cube; import static org.junit.Assert.assertEquals; +import org.apache.kylin.common.HotLoadKylinPropertiesTestCase; import org.apache.kylin.common.KylinConfig; -import org.apache.kylin.common.util.HotLoadKylinPropertiesTestCase; import org.apache.kylin.cube.model.CubeDesc; import org.junit.Test; @@ -55,7 +55,7 @@ public class CubeSpecificConfigTest extends HotLoadKylinPropertiesTestCase { //hot load Properties updateProperty("kylin.job.max-concurrent-jobs", "20"); - KylinConfig.getInstanceFromEnv().hotLoadKylinProperties(); + KylinConfig.getInstanceFromEnv().reloadFromSiteProperties(); CubeDescManager.getInstance(baseConfig).reloadCubeDescLocal("ssb"); //test cubeDescConfig http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/core-job/src/test/java/org/apache/kylin/job/JobEngineConfigTest.java ---------------------------------------------------------------------- diff --git a/core-job/src/test/java/org/apache/kylin/job/JobEngineConfigTest.java b/core-job/src/test/java/org/apache/kylin/job/JobEngineConfigTest.java index 77914ef..6660c47 100644 --- a/core-job/src/test/java/org/apache/kylin/job/JobEngineConfigTest.java +++ b/core-job/src/test/java/org/apache/kylin/job/JobEngineConfigTest.java @@ -18,8 +18,8 @@ package org.apache.kylin.job; +import org.apache.kylin.common.HotLoadKylinPropertiesTestCase; import org.apache.kylin.common.KylinConfig; -import org.apache.kylin.common.util.HotLoadKylinPropertiesTestCase; import org.apache.kylin.job.engine.JobEngineConfig; import org.junit.Test; @@ -40,7 +40,7 @@ public class JobEngineConfigTest extends HotLoadKylinPropertiesTestCase { assertEquals(10, jobEngineConfig.getMaxConcurrentJobLimit()); updateProperty("kylin.job.max-concurrent-jobs", "20"); - KylinConfig.getInstanceFromEnv().hotLoadKylinProperties(); + KylinConfig.getInstanceFromEnv().reloadFromSiteProperties(); assertEquals(20, jobEngineConfig.getMaxConcurrentJobLimit()); } http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java ---------------------------------------------------------------------- diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java index 54f77c0..9950c69 100644 --- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java +++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java @@ -501,7 +501,7 @@ public abstract class AbstractHadoopJob extends Configured implements Tool { // write kylin.properties File kylinPropsFile = new File(metaDir, "kylin.properties"); - kylinConfig.writeProperties(kylinPropsFile); + kylinConfig.exportToFile(kylinPropsFile); if (prj != null) { dumpList.add(ProjectManager.getInstance(kylinConfig).getProject(prj).getResourcePath()); http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkBatchCubingJobBuilder2.java ---------------------------------------------------------------------- diff --git a/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkBatchCubingJobBuilder2.java b/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkBatchCubingJobBuilder2.java index f1e6aea..779f340 100644 --- a/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkBatchCubingJobBuilder2.java +++ b/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkBatchCubingJobBuilder2.java @@ -49,7 +49,7 @@ public class SparkBatchCubingJobBuilder2 extends BatchCubingJobBuilder2 { sparkExecutable.setParam(SparkCubingByLayer.OPTION_SEGMENT_ID.getOpt(), seg.getUuid()); sparkExecutable.setParam(SparkCubingByLayer.OPTION_INPUT_TABLE.getOpt(), seg.getConfig().getHiveDatabaseForIntermediateTable() + "." + flatTableDesc.getTableName()); sparkExecutable.setParam(SparkCubingByLayer.OPTION_META_URL.getOpt(), getSegmentMetadataUrl(seg.getConfig(), seg.getUuid())); - sparkExecutable.setParam(SparkCubingByLayer.OPTION_CONF_PATH.getOpt(), KylinConfig.getKylinConfPath()); + sparkExecutable.setParam(SparkCubingByLayer.OPTION_CONF_PATH.getOpt(), KylinConfig.getKylinConfDir().getAbsolutePath()); sparkExecutable.setParam(SparkCubingByLayer.OPTION_OUTPUT_PATH.getOpt(), cuboidRootPath); StringBuilder jars = new StringBuilder(); http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkExecutable.java ---------------------------------------------------------------------- diff --git a/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkExecutable.java b/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkExecutable.java index c211ec5..d369e3d 100644 --- a/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkExecutable.java +++ b/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkExecutable.java @@ -18,6 +18,7 @@ package org.apache.kylin.engine.spark; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.util.LinkedHashSet; import java.util.Map; @@ -164,13 +165,15 @@ public class SparkExecutable extends AbstractExecutable { JobRelatedMetaUtil.dumpResources(kylinConfig, metaDir, dumpList); // write kylin.properties - File kylinPropsFile = new File(metaDir, "kylin.properties"); - Properties properties = kylinConfig.getAllProperties(); + Properties props = kylinConfig.exportToProperties(); String metadataUrl = this.getParam(SparkCubingByLayer.OPTION_META_URL.getOpt()); - properties.setProperty("kylin.metadata.url", metadataUrl); - kylinConfig.writeProperties(properties, kylinPropsFile); + props.setProperty("kylin.metadata.url", metadataUrl); + File kylinPropsFile = new File(metaDir, "kylin.properties"); + try (FileOutputStream os = new FileOutputStream(kylinPropsFile)) { + props.store(os, kylinPropsFile.getAbsolutePath()); + } - KylinConfig dstConfig = KylinConfig.createKylinConfig(properties); + KylinConfig dstConfig = KylinConfig.createKylinConfig(props); //upload metadata ResourceTool.copy(KylinConfig.createInstanceFromUri(metaDir.getAbsolutePath()), dstConfig); } http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java ---------------------------------------------------------------------- diff --git a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java index 1ea6507..644b2b3 100644 --- a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java +++ b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java @@ -79,8 +79,8 @@ public class BaseTestDistributedScheduler extends HBaseMetadataTestCase { localMetaDir = Files.createTempDir(); backup = srcConfig.getMetadataUrl().toString(); srcConfig.setProperty("kylin.metadata.url", localMetaDir.getAbsolutePath()); - srcConfig.writeProperties(new File(confDstPath1)); - srcConfig.writeProperties(new File(confDstPath2)); + srcConfig.exportToFile(new File(confDstPath1)); + srcConfig.exportToFile(new File(confDstPath2)); kylinConfig1 = KylinConfig.createInstanceFromUri(new File(confDstPath1).getAbsolutePath()); kylinConfig2 = KylinConfig.createInstanceFromUri(new File(confDstPath2).getAbsolutePath()); http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/server-base/src/main/java/org/apache/kylin/rest/controller/AdminController.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/AdminController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/AdminController.java index 1252775..eec9fa5 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/AdminController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/AdminController.java @@ -75,7 +75,7 @@ public class AdminController extends BasicController { @RequestMapping(value = "/config", method = { RequestMethod.GET }, produces = { "application/json" }) @ResponseBody public GeneralResponse getConfig() throws IOException { - String config = adminService.getConfigAsString(); + String config = adminService.exportToString(); GeneralResponse configRes = new GeneralResponse(); configRes.put("config", config); http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/server-base/src/main/java/org/apache/kylin/rest/controller/CacheController.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CacheController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CacheController.java index 092220c..992094b 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/CacheController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CacheController.java @@ -69,7 +69,7 @@ public class CacheController extends BasicController { @RequestMapping(value = "/announce/config", method = { RequestMethod.POST }, produces = { "application/json" }) public void hotLoadKylinConfig() throws IOException { - KylinConfig.getInstanceFromEnv().hotLoadKylinProperties(); + KylinConfig.getInstanceFromEnv().reloadFromSiteProperties(); cacheService.notifyMetadataChange(Broadcaster.SYNC_ALL, Broadcaster.Event.UPDATE, Broadcaster.SYNC_ALL); } http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/server-base/src/main/java/org/apache/kylin/rest/controller2/AdminControllerV2.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller2/AdminControllerV2.java b/server-base/src/main/java/org/apache/kylin/rest/controller2/AdminControllerV2.java index a1028d7..9395fb6 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller2/AdminControllerV2.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller2/AdminControllerV2.java @@ -68,7 +68,7 @@ public class AdminControllerV2 extends BasicController { @ResponseBody public EnvelopeResponse getConfigV2() throws IOException { - return new EnvelopeResponse(ResponseCode.CODE_SUCCESS, adminService.getConfigAsString(), ""); + return new EnvelopeResponse(ResponseCode.CODE_SUCCESS, adminService.exportToString(), ""); } @RequestMapping(value = "/metrics/cubes", method = { RequestMethod.GET }, produces = { http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/server-base/src/main/java/org/apache/kylin/rest/controller2/CacheControllerV2.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller2/CacheControllerV2.java b/server-base/src/main/java/org/apache/kylin/rest/controller2/CacheControllerV2.java index fa786b6..73d6a4f 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller2/CacheControllerV2.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller2/CacheControllerV2.java @@ -81,7 +81,7 @@ public class CacheControllerV2 extends BasicController { @ResponseBody public void hotLoadKylinConfigV2() throws IOException { - KylinConfig.getInstanceFromEnv().hotLoadKylinProperties(); + KylinConfig.getInstanceFromEnv().reloadFromSiteProperties(); cacheService.notifyMetadataChange(Broadcaster.SYNC_ALL, Broadcaster.Event.UPDATE, Broadcaster.SYNC_ALL); } http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/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 f9bb7e6..ae004cf 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 @@ -81,10 +81,10 @@ public class AdminService extends BasicService { * Get Java config info as String */ // @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN) // this is a critical security issue, see KYLIN-1664 - public String getConfigAsString() throws IOException { + public String exportToString() throws IOException { logger.debug("Get Kylin Runtime Config"); - return KylinConfig.getInstanceFromEnv().getConfigAsString(); + return KylinConfig.getInstanceFromEnv().exportToString(); } @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN) http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeHBaseEndpointRPC.java ---------------------------------------------------------------------- diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeHBaseEndpointRPC.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeHBaseEndpointRPC.java index af8754d..4ac237b 100644 --- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeHBaseEndpointRPC.java +++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeHBaseEndpointRPC.java @@ -156,7 +156,7 @@ public class CubeHBaseEndpointRPC extends CubeHBaseRPC { builder.addHbaseColumnsToGT(intList); } builder.setRowkeyPreambleSize(cubeSeg.getRowKeyPreambleSize()); - builder.setKylinProperties(kylinConfig.getConfigAsString()); + builder.setKylinProperties(kylinConfig.exportToString()); final String queryId = queryContext.getQueryId(); if (queryId != null) { builder.setQueryId(queryId); http://git-wip-us.apache.org/repos/asf/kylin/blob/4b3a44b9/tool/src/main/java/org/apache/kylin/tool/KylinConfigCLI.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/KylinConfigCLI.java b/tool/src/main/java/org/apache/kylin/tool/KylinConfigCLI.java index 88905ef..7c7b318 100644 --- a/tool/src/main/java/org/apache/kylin/tool/KylinConfigCLI.java +++ b/tool/src/main/java/org/apache/kylin/tool/KylinConfigCLI.java @@ -34,7 +34,8 @@ public class KylinConfigCLI { System.exit(1); } - Properties config = KylinConfig.getKylinProperties(); + Properties config = KylinConfig.getInstanceFromEnv().exportToProperties(); + BackwardCompatibilityConfig bcc = new BackwardCompatibilityConfig(); String key = bcc.check(args[0].trim()); if (!key.endsWith(".")) {