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);