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

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

commit 0bbb74ee794beb17a8a501f5df5dfcc421bfd2a1
Author: Pengfei Zhan <dethr...@gmail.com>
AuthorDate: Tue Oct 31 11:11:03 2023 +0800

    KYLIN-5845 Avoid model initialization for multi-thread
---
 .../main/java/org/apache/kylin/common/util/AddressUtil.java |  4 ++++
 .../java/org/apache/kylin/common/util/AddressUtilTest.java  |  1 +
 .../org/apache/kylin/metadata/model/ColExcludedChecker.java | 13 +++++++------
 .../java/org/apache/kylin/metadata/model/NDataModel.java    |  4 ----
 .../org/apache/kylin/metadata/model/NDataModelManager.java  |  4 ----
 .../java/org/apache/kylin/tool/MetadataToolTestFixture.java |  2 +-
 6 files changed, 13 insertions(+), 15 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/util/AddressUtil.java 
b/src/core-common/src/main/java/org/apache/kylin/common/util/AddressUtil.java
index 71cd033143..bbb80a332f 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/util/AddressUtil.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/util/AddressUtil.java
@@ -107,4 +107,8 @@ public class AddressUtil {
     public static String concatInstanceName() {
         return AddressUtil.getLocalHostExactAddress() + ":" + 
KylinConfig.getInstanceFromEnv().getServerPort();
     }
+
+    public static void clearLocalIpAddressCache() {
+        localIpAddressCache = null;
+    }
 }
diff --git 
a/src/core-common/src/test/java/org/apache/kylin/common/util/AddressUtilTest.java
 
b/src/core-common/src/test/java/org/apache/kylin/common/util/AddressUtilTest.java
index 5277bec0c6..0112d7b2ba 100644
--- 
a/src/core-common/src/test/java/org/apache/kylin/common/util/AddressUtilTest.java
+++ 
b/src/core-common/src/test/java/org/apache/kylin/common/util/AddressUtilTest.java
@@ -72,6 +72,7 @@ public class AddressUtilTest {
         val old = getTestConfig().getServerIpAddress();
         val mockIp = "192.168.1.101";
         getTestConfig().setProperty("kylin.env.ip-address", mockIp);
+        AddressUtil.clearLocalIpAddressCache();
         val servIp = AddressUtil.getLocalHostExactAddress();
         Assert.assertEquals(servIp, mockIp);
         if (!StringUtils.isEmpty(old)) {
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColExcludedChecker.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColExcludedChecker.java
index 3f63975bc4..ab2ae1e877 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColExcludedChecker.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColExcludedChecker.java
@@ -29,12 +29,11 @@ import java.util.stream.Collectors;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
-import org.apache.kylin.metadata.project.NProjectManager;
-import org.apache.kylin.metadata.project.ProjectInstance;
-
 import org.apache.kylin.guava30.shaded.common.collect.Lists;
 import org.apache.kylin.guava30.shaded.common.collect.Maps;
 import org.apache.kylin.guava30.shaded.common.collect.Sets;
+import org.apache.kylin.metadata.project.NProjectManager;
+import org.apache.kylin.metadata.project.ProjectInstance;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -84,11 +83,13 @@ public class ColExcludedChecker {
         collectExcludedComputedColumns(config, project, model);
     }
 
-    private void collectExcludedComputedColumns(KylinConfig config, String 
project, NDataModel model) {
-        if (model == null || model.isBroken()) {
+    private void collectExcludedComputedColumns(KylinConfig config, String 
project, NDataModel originModel) {
+        if (originModel == null || originModel.isBroken()) {
             return;
         }
-        if (!model.isInitAlready()) {
+        NDataModel model = originModel;
+        if (originModel.getAllTables().isEmpty() || 
originModel.getEffectiveCols() == null) {
+            model = NDataModelManager.getInstance(config, 
project).copyForWrite(originModel);
             model.init(config, project, Lists.newArrayList());
         }
         model.getAllTables().stream().filter(Objects::nonNull) //
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModel.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModel.java
index 183b5ebc59..3e981ade03 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModel.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModel.java
@@ -286,9 +286,6 @@ public class NDataModel extends RootPersistentEntity {
     // mark this model as used for model save checking
     private boolean saveCheck = false;
 
-    // mark this model has invoked init() function
-    private boolean initAlready = false;
-
     public enum ColumnStatus {
         TOMB, EXIST, DIMENSION
     }
@@ -1040,7 +1037,6 @@ public class NDataModel extends RootPersistentEntity {
             throw new KylinException(TABLE_JOIN_RELATIONSHIP_ERROR,
                     MsgPicker.getMsg().getDimensionTableUsedInThisModel());
         }
-        this.setInitAlready(true);
     }
 
     public ComputedColumnUtil.CCConflictInfo checkCCFailAtEnd(KylinConfig 
config, String project,
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModelManager.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModelManager.java
index 0fe43411d8..0e11b35ade 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModelManager.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModelManager.java
@@ -331,10 +331,6 @@ public class NDataModelManager {
         return crud.copyForWrite(nDataModel);
     }
 
-    public NDataModel copy(NDataModel nDataModel) {
-        return copyBySerialization(nDataModel);
-    }
-
     /**
      * copyBySerialization will not use cache
      */
diff --git 
a/src/tool/src/test/java/org/apache/kylin/tool/MetadataToolTestFixture.java 
b/src/tool/src/test/java/org/apache/kylin/tool/MetadataToolTestFixture.java
index db34af1149..71274e0535 100644
--- a/src/tool/src/test/java/org/apache/kylin/tool/MetadataToolTestFixture.java
+++ b/src/tool/src/test/java/org/apache/kylin/tool/MetadataToolTestFixture.java
@@ -48,7 +48,7 @@ public class MetadataToolTestFixture {
         val dataModel2 = 
dataModelMgr.getDataModelDescByAlias("nmodel_basic_inner");
         dataModelMgr.dropModel(dataModel2);
 
-        val dataModel3 = dataModelMgr.copy(dataModel2);
+        val dataModel3 = dataModelMgr.copyBySerialization(dataModel2);
         dataModel3.setUuid(RandomUtil.randomUUIDStr());
         dataModel3.setAlias("data_model_3");
         dataModel3.setMvcc(-1L);

Reply via email to