You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by xx...@apache.org on 2022/09/28 02:04:14 UTC

[kylin] branch kylin5 updated: Kylin 5256 Add a cache for the system property get by the optional config in KylinConfigBase (#1969)

This is an automated email from the ASF dual-hosted git repository.

xxyu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/kylin5 by this push:
     new ce5c40393a Kylin 5256 Add a cache for the system property get by the optional config in KylinConfigBase (#1969)
ce5c40393a is described below

commit ce5c40393a73664344a9275e9f31af4722d651f7
Author: zznlime <68...@users.noreply.github.com>
AuthorDate: Wed Sep 28 10:04:07 2022 +0800

    Kylin 5256 Add a cache for the system property get by the optional config in KylinConfigBase (#1969)
    
    * KYLIN-5256 Add a cache for the system property get by the optional config in KylinConfigBase limitation during loading properties to Kylin config.
    
    * KYLIN-5256 Add ICachedExternalConfigLoader.
    
    * KYLIN-5256 Fix UT
    
    * Revert "KYLIN-5256 Add ICachedExternalConfigLoader."
    
    This reverts commit 3231653d
    
    * KYLIN-5256 Fix UT
    
    * KYLIN-5256 Fix UT
---
 .../rest/controller/NEpochControllerTest.java      |  3 +-
 .../org/apache/kylin/common/KylinConfigBase.java   | 69 ++++++++++++++++------
 .../org/apache/kylin/common/AbstractTestCase.java  |  4 +-
 .../org/apache/kylin/junit/MetadataExtension.java  |  3 +-
 .../apache/kylin/junit/OverwritePropExtension.java |  9 +--
 .../controller/StreamingJobControllerTest.java     |  3 +-
 .../rest/service/StreamingTableServiceTest.java    |  3 +-
 .../kylin/rest/controller/KafkaControllerTest.java |  3 +-
 .../controller/StreamingTableControllerTest.java   |  3 +-
 .../open/OpenStreamingJobControllerTest.java       |  3 +-
 .../kylin/source/hive/HiveCmdBuilderTest.java      |  7 ++-
 .../utils/HiveTransactionTableHelperTest.java      |  5 +-
 .../rest/service/StreamingJobServiceTest.java      |  3 +-
 13 files changed, 81 insertions(+), 37 deletions(-)

diff --git a/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java b/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java
index d2c70b6910..83eb177b76 100644
--- a/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java
+++ b/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java
@@ -19,6 +19,7 @@ package org.apache.kylin.rest.controller;
 
 import static org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_JSON;
 
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.rest.constant.Constant;
 import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
 import org.apache.kylin.rest.service.EpochService;
@@ -62,7 +63,7 @@ public class NEpochControllerTest extends NLocalFileMetadataTestCase {
 
     @Before
     public void setupResource() {
-        System.setProperty("HADOOP_USER_NAME", "root");
+        KylinConfigBase.setSystemProperty("HADOOP_USER_NAME", "root");
         createTestMetadata();
     }
 
diff --git a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index fedbd83f9d..57cd5e6306 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -111,6 +111,43 @@ public abstract class KylinConfigBase implements Serializable {
 
     protected static final Map<String, String> STATIC_SYSTEM_ENV = new ConcurrentHashMap<>(System.getenv());
 
+    // It's a workaround to avoid lock in bottom hash table
+    // It can be removed after updating JDK to 11
+    protected static final ConcurrentHashMap<Object, Object> STATIC_SYSTEM_PROPERTY = new ConcurrentHashMap<>(
+            System.getProperties());
+
+    protected static String getSystemProperty(String key) {
+        checkKey(key);
+        Object oval = STATIC_SYSTEM_PROPERTY.get(key);
+        return (oval instanceof String) ? (String) oval : null;
+    }
+
+    protected static String getSystemProperty(String key, String defaultValue) {
+        String val = getSystemProperty(key);
+        return (val == null) ? defaultValue : val;
+    }
+
+    // Mainly invoked in tests
+    public static String setSystemProperty(String key, String value) {
+        System.setProperty(key, value);
+        return (String) STATIC_SYSTEM_PROPERTY.put(key, value);
+    }
+
+    // Mainly invoked in tests
+    public static void clearSystemProperty(String key) {
+        System.clearProperty(key);
+        STATIC_SYSTEM_PROPERTY.remove(key);
+    }
+
+    private static void checkKey(String key) {
+        if (key == null) {
+            throw new NullPointerException("key can't be null");
+        }
+        if (key.equals("")) {
+            throw new IllegalArgumentException("key can't be empty");
+        }
+    }
+
     /*
      * DON'T DEFINE CONSTANTS FOR PROPERTY KEYS!
      *
@@ -119,8 +156,8 @@ public abstract class KylinConfigBase implements Serializable {
      * For 3), key literals usually appear only once.
      */
 
-    public static String vendor(){
-        if(VENDOR != null) {
+    public static String vendor() {
+        if (VENDOR != null) {
             return VENDOR;
         } else {
             return DEFAULT_VENDOR;
@@ -138,7 +175,7 @@ public abstract class KylinConfigBase implements Serializable {
     public static String getKylinHomeWithoutWarn() {
         String kylinHome = System.getenv("KYLIN_HOME");
         if (StringUtils.isEmpty(kylinHome)) {
-            kylinHome = System.getProperty("KYLIN_HOME");
+            kylinHome = getSystemProperty("KYLIN_HOME");
         }
         return kylinHome;
     }
@@ -146,7 +183,7 @@ public abstract class KylinConfigBase implements Serializable {
     public static String getKylinConfHome() {
         String confHome = System.getenv("KYLIN_CONF");
         if (StringUtils.isEmpty(confHome)) {
-            confHome = System.getProperty("KYLIN_CONF");
+            confHome = getSystemProperty("KYLIN_CONF");
         }
         return confHome;
     }
@@ -160,7 +197,7 @@ public abstract class KylinConfigBase implements Serializable {
         return getKylinHome() + File.separator + "spark";
     }
 
-    public Map<String, String> getReadonlyProperties(){
+    public Map<String, String> getReadonlyProperties() {
         val substitutor = getSubstitutor();
         HashMap<String, String> config = Maps.newHashMap();
         for (Entry<Object, Object> entry : this.properties.entrySet()) {
@@ -201,7 +238,7 @@ public abstract class KylinConfigBase implements Serializable {
     }
 
     protected String getOptional(String prop, String dft) {
-        final String property = System.getProperty(prop);
+        final String property = getSystemProperty(prop);
         return property != null ? getSubstitutor().replace(property)
                 : getSubstitutor().replace(properties.getProperty(prop, dft));
     }
@@ -248,7 +285,7 @@ public abstract class KylinConfigBase implements Serializable {
                 result.put(key.substring(prefix.length()), (String) entry.getValue());
             }
         }
-        for (Entry<Object, Object> entry : System.getProperties().entrySet()) {
+        for (Entry<Object, Object> entry : STATIC_SYSTEM_PROPERTY.entrySet()) {
             String key = (String) entry.getKey();
             if (key.startsWith(prefix)) {
                 result.put(key.substring(prefix.length()), (String) entry.getValue());
@@ -267,7 +304,7 @@ public abstract class KylinConfigBase implements Serializable {
     }
 
     protected final String[] getSystemStringArray(String prop, String[] dft) {
-        final String property = System.getProperty(prop);
+        final String property = getSystemProperty(prop);
         if (!StringUtils.isBlank(property)) {
             return property.split("\\s*,\\s*");
         } else {
@@ -1006,7 +1043,7 @@ public abstract class KylinConfigBase implements Serializable {
 
     public String getQueryExtensionFactory() {
         String dft = "org.apache.kylin.query.QueryExtension$Factory";
-        if(vendor().equals("kyligence")) {
+        if (vendor().equals("kyligence")) {
             dft = "io.kyligence.kap.query.QueryExtensionFactoryEnterprise";
         }
         return getOptional("kylin.extension.query.factory", dft);
@@ -1396,12 +1433,11 @@ public abstract class KylinConfigBase implements Serializable {
     public List<String> getSparkBuildConfExtraRules() {
         String rules = getOptional("kylin.engine.spark.build-conf-extra-rules");
         if (StringUtils.isEmpty(rules)) {
-            return Collections.<String>emptyList();
+            return Collections.<String> emptyList();
         }
         return Lists.newArrayList(rules.split(","));
     }
 
-
     public String getSparkTableSamplingClassName() {
         return getOptional("kylin.engine.spark.sampling-class-name",
                 "org.apache.kylin.engine.spark.stats.analyzer.TableAnalyzerJob");
@@ -1606,7 +1642,7 @@ public abstract class KylinConfigBase implements Serializable {
     }
 
     public boolean asyncProfilingEnabled() {
-        return !Boolean.parseBoolean(System.getProperty("spark.local", FALSE))
+        return !Boolean.parseBoolean(getSystemProperty("spark.local", FALSE))
                 && Boolean.parseBoolean(getOptional("kylin.query.async-profiler-enabled", TRUE));
     }
 
@@ -1944,10 +1980,8 @@ public abstract class KylinConfigBase implements Serializable {
 
     public String[] getTableDetectorTransformers() {
         String value = getOptional("kylin.query.table-detect-transformers");
-        return value == null
-                ? new String[] { "org.apache.kylin.query.util.PowerBIConverter",
-                        "org.apache.kylin.query.util.DefaultQueryTransformer",
-                        "org.apache.kylin.query.util.EscapeTransformer" }
+        return value == null ? new String[] { "org.apache.kylin.query.util.PowerBIConverter",
+                "org.apache.kylin.query.util.DefaultQueryTransformer", "org.apache.kylin.query.util.EscapeTransformer" }
                 : getOptionalStringArray("kylin.query.table-detect-transformers", new String[0]);
     }
 
@@ -1955,8 +1989,7 @@ public abstract class KylinConfigBase implements Serializable {
         String value = getOptional("kylin.query.transformers");
         return value == null ? new String[] { "org.apache.kylin.query.util.ReplaceStringWithVarchar",
                 "org.apache.kylin.query.util.PowerBIConverter", "org.apache.kylin.query.util.DefaultQueryTransformer",
-                "org.apache.kylin.query.util.EscapeTransformer",
-                "org.apache.kylin.query.util.ConvertToComputedColumn",
+                "org.apache.kylin.query.util.EscapeTransformer", "org.apache.kylin.query.util.ConvertToComputedColumn",
                 "org.apache.kylin.query.util.KeywordDefaultDirtyHack", "org.apache.kylin.query.security.RowFilter" }
                 : getOptionalStringArray("kylin.query.transformers", new String[0]);
     }
diff --git a/src/core-common/src/test/java/org/apache/kylin/common/AbstractTestCase.java b/src/core-common/src/test/java/org/apache/kylin/common/AbstractTestCase.java
index 96a9735fd6..f2b25edd48 100644
--- a/src/core-common/src/test/java/org/apache/kylin/common/AbstractTestCase.java
+++ b/src/core-common/src/test/java/org/apache/kylin/common/AbstractTestCase.java
@@ -80,9 +80,9 @@ public abstract class AbstractTestCase {
     /** Clear system property in test method with annotation {@link org.junit.Test} */
     public final void restoreSystemProp(String property) {
         if (!METHOD_PROPERTY_MAP.containsKey(property) || METHOD_PROPERTY_MAP.get(property) == null) {
-            System.clearProperty(property);
+            KylinConfigBase.clearSystemProperty(property);
         } else {
-            System.setProperty(property, METHOD_PROPERTY_MAP.get(property));
+            KylinConfigBase.setSystemProperty(property, METHOD_PROPERTY_MAP.get(property));
         }
         METHOD_PROPERTY_MAP.remove(property);
     }
diff --git a/src/core-common/src/test/java/org/apache/kylin/junit/MetadataExtension.java b/src/core-common/src/test/java/org/apache/kylin/junit/MetadataExtension.java
index 05c0d3aec9..e519fb6c63 100644
--- a/src/core-common/src/test/java/org/apache/kylin/junit/MetadataExtension.java
+++ b/src/core-common/src/test/java/org/apache/kylin/junit/MetadataExtension.java
@@ -25,6 +25,7 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.QueryContext;
 import org.apache.kylin.common.Singletons;
 import org.apache.kylin.common.persistence.ResourceStore;
@@ -100,7 +101,7 @@ public class MetadataExtension implements BeforeEachCallback, BeforeAllCallback,
             cleanSingletonInstances();
 
             val kylinHomePath = new File(getTestConfig().getMetadataUrl().toString()).getParentFile().getAbsolutePath();
-            System.setProperty("KYLIN_HOME", kylinHomePath);
+            KylinConfigBase.setSystemProperty("KYLIN_HOME", kylinHomePath);
             val jobJar = org.apache.kylin.common.util.FileUtils.findFile(
                     new File(kylinHomePath, "../../../assembly/target/").getAbsolutePath(), "kylin-assembly(.?)\\.jar");
             getTestConfig().setProperty("kylin.engine.spark.job-jar", jobJar == null ? "" : jobJar.getAbsolutePath());
diff --git a/src/core-common/src/test/java/org/apache/kylin/junit/OverwritePropExtension.java b/src/core-common/src/test/java/org/apache/kylin/junit/OverwritePropExtension.java
index d071d1199b..1afe225934 100644
--- a/src/core-common/src/test/java/org/apache/kylin/junit/OverwritePropExtension.java
+++ b/src/core-common/src/test/java/org/apache/kylin/junit/OverwritePropExtension.java
@@ -19,6 +19,7 @@ package org.apache.kylin.junit;
 
 import java.util.Map;
 
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.util.Unsafe;
 import org.apache.kylin.junit.annotation.OverwriteProp;
 import org.junit.jupiter.api.extension.AfterEachCallback;
@@ -64,9 +65,9 @@ public class OverwritePropExtension implements BeforeEachCallback, AfterEachCall
         val keys = Sets.newHashSet(overwritten.keySet());
         for (String property : keys) {
             if (!overwritten.containsKey(property) || overwritten.get(property) == null) {
-                System.clearProperty(property);
+                KylinConfigBase.clearSystemProperty(property);
             } else {
-                System.setProperty(property, overwritten.get(property));
+                KylinConfigBase.setSystemProperty(property, overwritten.get(property));
             }
         }
         context.getStore(NAMESPACE).remove(OVERWRITE_PROP_BEFORE_EACH_KEY);
@@ -82,9 +83,9 @@ public class OverwritePropExtension implements BeforeEachCallback, AfterEachCall
     /** Clear system property in test method with annotation {@link org.junit.Test} */
     public final void restoreSystemProp(Map<String, String> overwritten, String property) {
         if (!overwritten.containsKey(property) || overwritten.get(property) == null) {
-            System.clearProperty(property);
+            KylinConfigBase.clearSystemProperty(property);
         } else {
-            System.setProperty(property, overwritten.get(property));
+            KylinConfigBase.setSystemProperty(property, overwritten.get(property));
         }
         overwritten.remove(property);
     }
diff --git a/src/data-loading-server/src/test/java/org/apache/kylin/rest/controller/StreamingJobControllerTest.java b/src/data-loading-server/src/test/java/org/apache/kylin/rest/controller/StreamingJobControllerTest.java
index dbdb410209..29cd3392af 100644
--- a/src/data-loading-server/src/test/java/org/apache/kylin/rest/controller/StreamingJobControllerTest.java
+++ b/src/data-loading-server/src/test/java/org/apache/kylin/rest/controller/StreamingJobControllerTest.java
@@ -26,6 +26,7 @@ import java.util.HashMap;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.job.execution.JobTypeEnum;
 import org.apache.kylin.metadata.model.SegmentRange;
@@ -102,7 +103,7 @@ public class StreamingJobControllerTest extends NLocalFileMetadataTestCase {
 
     @Before
     public void setupResource() {
-        System.setProperty("HADOOP_USER_NAME", "root");
+        KylinConfigBase.setSystemProperty("HADOOP_USER_NAME", "root");
         createTestMetadata();
     }
 
diff --git a/src/datasource-service/src/test/java/org/apache/kylin/rest/service/StreamingTableServiceTest.java b/src/datasource-service/src/test/java/org/apache/kylin/rest/service/StreamingTableServiceTest.java
index 977c7020da..d991183adc 100644
--- a/src/datasource-service/src/test/java/org/apache/kylin/rest/service/StreamingTableServiceTest.java
+++ b/src/datasource-service/src/test/java/org/apache/kylin/rest/service/StreamingTableServiceTest.java
@@ -22,6 +22,7 @@ import java.util.Locale;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.exception.KylinException;
 import org.apache.kylin.common.msg.MsgPicker;
 import org.apache.kylin.common.scheduler.EventBusFactory;
@@ -94,7 +95,7 @@ public class StreamingTableServiceTest extends NLocalFileMetadataTestCase {
         projectManager.forceDropProject("broken_test");
         projectManager.forceDropProject("bad_query_test");
 
-        System.setProperty("HADOOP_USER_NAME", "root");
+        KylinConfigBase.setSystemProperty("HADOOP_USER_NAME", "root");
 
         ReflectionTestUtils.setField(aclEvaluate, "aclUtil", aclUtil);
         ReflectionTestUtils.setField(streamingTableService, "aclEvaluate", aclEvaluate);
diff --git a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/KafkaControllerTest.java b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/KafkaControllerTest.java
index 18aa515840..2b29d266fd 100644
--- a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/KafkaControllerTest.java
+++ b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/KafkaControllerTest.java
@@ -23,6 +23,7 @@ import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.HashMap;
 
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.rest.constant.Constant;
 import org.apache.kylin.rest.util.AclEvaluate;
@@ -84,7 +85,7 @@ public class KafkaControllerTest extends NLocalFileMetadataTestCase {
 
     @Before
     public void setupResource() {
-        System.setProperty("HADOOP_USER_NAME", "root");
+        KylinConfigBase.setSystemProperty("HADOOP_USER_NAME", "root");
         createTestMetadata();
     }
 
diff --git a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/StreamingTableControllerTest.java b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/StreamingTableControllerTest.java
index ae8bb2f94a..2e0f000715 100644
--- a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/StreamingTableControllerTest.java
+++ b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/StreamingTableControllerTest.java
@@ -21,6 +21,7 @@ package org.apache.kylin.rest.controller;
 import static org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_JSON;
 
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.metadata.model.TableDesc;
 import org.apache.kylin.rest.constant.Constant;
@@ -90,7 +91,7 @@ public class StreamingTableControllerTest extends NLocalFileMetadataTestCase {
 
     @Before
     public void setupResource() {
-        System.setProperty("HADOOP_USER_NAME", "root");
+        KylinConfigBase.setSystemProperty("HADOOP_USER_NAME", "root");
         createTestMetadata();
     }
 
diff --git a/src/server-base/src/test/java/org/apache/kylin/rest/controller/open/OpenStreamingJobControllerTest.java b/src/server-base/src/test/java/org/apache/kylin/rest/controller/open/OpenStreamingJobControllerTest.java
index 9198ff47f3..de40ca662c 100644
--- a/src/server-base/src/test/java/org/apache/kylin/rest/controller/open/OpenStreamingJobControllerTest.java
+++ b/src/server-base/src/test/java/org/apache/kylin/rest/controller/open/OpenStreamingJobControllerTest.java
@@ -24,6 +24,7 @@ import static org.apache.kylin.common.exception.code.ErrorCodeServer.REQUEST_PAR
 import java.util.Collections;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
 import org.apache.kylin.job.execution.JobTypeEnum;
@@ -80,7 +81,7 @@ public class OpenStreamingJobControllerTest extends NLocalFileMetadataTestCase {
 
     @Before
     public void setupResource() {
-        System.setProperty("HADOOP_USER_NAME", "root");
+        KylinConfigBase.setSystemProperty("HADOOP_USER_NAME", "root");
         createTestMetadata();
     }
 
diff --git a/src/source-hive/src/test/java/org/apache/kylin/source/hive/HiveCmdBuilderTest.java b/src/source-hive/src/test/java/org/apache/kylin/source/hive/HiveCmdBuilderTest.java
index dd0853a2ff..b98af52dd8 100644
--- a/src/source-hive/src/test/java/org/apache/kylin/source/hive/HiveCmdBuilderTest.java
+++ b/src/source-hive/src/test/java/org/apache/kylin/source/hive/HiveCmdBuilderTest.java
@@ -45,6 +45,7 @@ import java.nio.charset.Charset;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.util.CliCommandExecutor;
 import org.apache.kylin.common.util.ShellException;
 import org.junit.Before;
@@ -54,15 +55,15 @@ public class HiveCmdBuilderTest {
 
     @Before
     public void setup() {
-        System.setProperty("log4j.configuration", "file:../build/conf/kylin-tools-log4j.properties");
-        System.setProperty("KYLIN_CONF", "../examples/test_case_data/localmeta");
+        KylinConfigBase.setSystemProperty("log4j.configuration", "file:../build/conf/kylin-tools-log4j.properties");
+        KylinConfigBase.setSystemProperty("KYLIN_CONF", "../examples/test_case_data/localmeta");
     }
 
     @Test
     public void testBeeline() throws IOException, ShellException {
         String lineSeparator = java.security.AccessController
                 .doPrivileged(new sun.security.action.GetPropertyAction("line.separator"));
-        System.setProperty("kylin.source.hive.beeline-params", "-u jdbc_url");
+        KylinConfigBase.setSystemProperty("kylin.source.hive.beeline-params", "-u jdbc_url");
 
         HiveCmdBuilder hiveCmdBuilder = new HiveCmdBuilder(KylinConfig.getInstanceFromEnv());
         hiveCmdBuilder.addStatement("USE default;");
diff --git a/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/utils/HiveTransactionTableHelperTest.java b/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/utils/HiveTransactionTableHelperTest.java
index f190d34e08..e0693e8b4d 100644
--- a/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/utils/HiveTransactionTableHelperTest.java
+++ b/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/utils/HiveTransactionTableHelperTest.java
@@ -43,6 +43,7 @@ import java.util.UUID;
 
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.util.HadoopUtil;
 import org.apache.kylin.metadata.model.ColumnDesc;
 import org.apache.kylin.metadata.model.PartitionDesc;
@@ -96,8 +97,8 @@ public class HiveTransactionTableHelperTest extends NLocalWithSparkSessionTest {
     @Test
     public void testDoGetQueryHiveTemporaryTableSql() {
         // Init needed variable parameters
-        System.setProperty("kylin.source.provider.9", "org.apache.kylin.engine.spark.source.NSparkDataSource");
-        System.setProperty("kylin.build.resource.read-transactional-table-enabled", "true");
+        KylinConfigBase.setSystemProperty("kylin.source.provider.9", "org.apache.kylin.engine.spark.source.NSparkDataSource");
+        KylinConfigBase.setSystemProperty("kylin.build.resource.read-transactional-table-enabled", "true");
         KylinBuildEnv kylinBuildEnv = KylinBuildEnv.getOrCreate(getTestConfig());
         NTableMetadataManager tableMgr = NTableMetadataManager.getInstance(getTestConfig(), "tdh");
         TableDesc fact = tableMgr.getTableDesc("TDH_TEST.LINEORDER_PARTITION");
diff --git a/src/streaming-service/src/test/java/org/apache/kylin/rest/service/StreamingJobServiceTest.java b/src/streaming-service/src/test/java/org/apache/kylin/rest/service/StreamingJobServiceTest.java
index 000358c653..9f3c76ca1f 100644
--- a/src/streaming-service/src/test/java/org/apache/kylin/rest/service/StreamingJobServiceTest.java
+++ b/src/streaming-service/src/test/java/org/apache/kylin/rest/service/StreamingJobServiceTest.java
@@ -41,6 +41,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.exception.KylinException;
 import org.apache.kylin.common.msg.MsgPicker;
 import org.apache.kylin.common.scheduler.EventBusFactory;
@@ -121,7 +122,7 @@ public class StreamingJobServiceTest extends CSVSourceTestCase {
     @Before
     public void setup() {
         super.setup();
-        System.setProperty("HADOOP_USER_NAME", "root");
+        KylinConfigBase.setSystemProperty("HADOOP_USER_NAME", "root");
 
         ReflectionTestUtils.setField(aclEvaluate, "aclUtil", aclUtil);
         ReflectionTestUtils.setField(streamingJobService, "aclEvaluate", aclEvaluate);