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
commit 5c814ecb22e24ff61388dac4de6e3366a5d0cb7b Author: hongrong.cao <hongrong....@kyligence.io> AuthorDate: Tue Nov 14 17:21:35 2023 +0800 License Limitation related --------- Co-authored-by: longfei.jiang <longfei.ji...@kyligence.io> --- .../kylin/rest/controller/NAdminController.java | 20 ++++++--- .../kylin/rest/controller/NBasicController.java | 26 ++++++++--- .../rest/controller/NBasicControllerTest.java | 46 +++++++++++++++++++- .../org/apache/kylin/common/KylinConfigBase.java | 10 ++++- .../kylin/common/exception/ServerErrorCode.java | 1 + .../kylin/common/extension/KylinInfoExtension.java | 50 ++++++++++++++++++++++ .../org/apache/kylin/common/msg/CnMessage.java | 10 +++++ .../java/org/apache/kylin/common/msg/Message.java | 8 ++++ .../resources/kylin_errorcode_conf_en.properties | 1 + .../resources/kylin_errorcode_conf_zh.properties | 1 + .../common/extension/KylinInfoExtensionTest.java | 41 ++++++++++++++++++ .../apache/kylin/rest/service/JobServiceTest.java | 2 + .../kylin/rest/service/ModelServiceTest.java | 6 +++ .../apache/kylin/rest/MultiTenantModeFilter.java | 2 +- 14 files changed, 207 insertions(+), 17 deletions(-) diff --git a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NAdminController.java b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NAdminController.java index 77365f1e9e..fb6882b74c 100644 --- a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NAdminController.java +++ b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NAdminController.java @@ -32,16 +32,15 @@ import java.util.TimeZone; import org.apache.commons.lang3.StringUtils; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.exception.KylinException; -import org.apache.kylin.rest.response.EnvelopeResponse; +import org.apache.kylin.guava30.shaded.common.collect.Lists; +import org.apache.kylin.guava30.shaded.common.collect.Maps; import org.apache.kylin.metadata.resourcegroup.ResourceGroupManager; +import org.apache.kylin.rest.response.EnvelopeResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import org.apache.kylin.guava30.shaded.common.collect.Lists; -import org.apache.kylin.guava30.shaded.common.collect.Maps; - import io.swagger.annotations.ApiOperation; @Controller @@ -70,7 +69,6 @@ public class NAdminController extends NBasicController { propertyKeys.add("kylin.favorite.import-sql-max-size"); propertyKeys.add("kylin.model.suggest-model-sql-limit"); propertyKeys.add("kylin.query.query-history-download-max-size"); - propertyKeys.add("kylin.streaming.enabled"); propertyKeys.add("kylin.model.measure-name-check-enabled"); propertyKeys.add("kylin.security.remove-ldap-custom-security-limit-enabled"); propertyKeys.add("kylin.source.ddl.logical-view.enabled"); @@ -90,7 +88,8 @@ public class NAdminController extends NBasicController { propertyKeys.add("kylin.security.allow-non-admin-generate-query-diag-package"); } - final String config = KylinConfig.getInstanceFromEnv().exportToString(propertyKeys) + addPropertyInMetadata(); + final String config = KylinConfig.getInstanceFromEnv().exportToString(propertyKeys) + + addPropertyWithKylinInfoCheck() + addPropertyInMetadata(); return new EnvelopeResponse<>(KylinException.CODE_SUCCESS, config, ""); } @@ -112,6 +111,10 @@ public class NAdminController extends NBasicController { Properties properties = new Properties(); ResourceGroupManager manager = ResourceGroupManager.getInstance(KylinConfig.getInstanceFromEnv()); properties.put("resource_group_enabled", manager.isResourceGroupEnabled()); + return getPropertyString(properties); + } + + private String getPropertyString(Properties properties) { final StringBuilder sb = new StringBuilder(); for (Map.Entry<Object, Object> entry : properties.entrySet()) { sb.append(entry.getKey()).append("=").append(entry.getValue()).append('\n'); @@ -119,4 +122,9 @@ public class NAdminController extends NBasicController { return sb.toString(); } + private String addPropertyWithKylinInfoCheck() { + Properties properties = new Properties(); + properties.put("kylin.streaming.enabled", KylinConfig.getInstanceFromEnv().streamingEnabled()); + return getPropertyString(properties); + } } diff --git a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java index ac5ee3b536..e88ce19d72 100644 --- a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java +++ b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java @@ -18,8 +18,6 @@ package org.apache.kylin.rest.controller; -import static org.apache.kylin.guava30.shaded.common.net.HttpHeaders.ACCEPT_ENCODING; -import static org.apache.kylin.guava30.shaded.common.net.HttpHeaders.CONTENT_DISPOSITION; import static org.apache.kylin.common.exception.ServerErrorCode.ACCESS_DENIED; import static org.apache.kylin.common.exception.ServerErrorCode.EMPTY_ID; import static org.apache.kylin.common.exception.ServerErrorCode.EMPTY_PROJECT_NAME; @@ -27,6 +25,7 @@ import static org.apache.kylin.common.exception.ServerErrorCode.FAILED_CONNECT_C import static org.apache.kylin.common.exception.ServerErrorCode.FAILED_DOWNLOAD_FILE; import static org.apache.kylin.common.exception.ServerErrorCode.INCORRECT_PROJECT_MODE; import static org.apache.kylin.common.exception.ServerErrorCode.INVALID_PARAMETER; +import static org.apache.kylin.common.exception.ServerErrorCode.LOW_LEVEL_LICENSE; import static org.apache.kylin.common.exception.ServerErrorCode.UNSUPPORTED_STREAMING_OPERATION; import static org.apache.kylin.common.exception.code.ErrorCodeServer.ARGS_TYPE_CHECK; import static org.apache.kylin.common.exception.code.ErrorCodeServer.DATETIME_FORMAT_EMPTY; @@ -41,6 +40,8 @@ import static org.apache.kylin.common.exception.code.ErrorCodeServer.TIME_INVALI import static org.apache.kylin.common.exception.code.ErrorCodeServer.TIME_INVALID_RANGE_IN_RANGE; import static org.apache.kylin.common.exception.code.ErrorCodeServer.TIME_INVALID_RANGE_LESS_THAN_ZERO; import static org.apache.kylin.common.exception.code.ErrorCodeServer.USER_UNAUTHORIZED; +import static org.apache.kylin.guava30.shaded.common.net.HttpHeaders.ACCEPT_ENCODING; +import static org.apache.kylin.guava30.shaded.common.net.HttpHeaders.CONTENT_DISPOSITION; import java.io.File; import java.io.FileInputStream; @@ -71,19 +72,22 @@ import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang.exception.ExceptionUtils; +import org.apache.commons.lang3.ArrayUtils; 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.exception.ServerErrorCode; +import org.apache.kylin.common.extension.KylinInfoExtension; import org.apache.kylin.common.msg.Message; import org.apache.kylin.common.msg.MsgPicker; import org.apache.kylin.common.persistence.transaction.TransactionException; import org.apache.kylin.common.util.EncryptUtil; import org.apache.kylin.common.util.JsonUtil; import org.apache.kylin.common.util.Pair; +import org.apache.kylin.guava30.shaded.common.base.Preconditions; +import org.apache.kylin.guava30.shaded.common.collect.Lists; import org.apache.kylin.job.constant.JobStatusEnum; import org.apache.kylin.job.dao.ExecutablePO; import org.apache.kylin.job.execution.JobTypeEnum; @@ -132,9 +136,6 @@ import org.springframework.web.client.ResponseExtractor; import org.springframework.web.client.RestTemplate; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; -import org.apache.kylin.guava30.shaded.common.base.Preconditions; -import org.apache.kylin.guava30.shaded.common.collect.Lists; - import lombok.SneakyThrows; import lombok.val; @@ -381,7 +382,8 @@ public class NBasicController { return data; } - public Map<String, Object> setCustomDataResponse(String name, Pair<List<TableDesc>, Integer> result, int offset, int limit) { + public Map<String, Object> setCustomDataResponse(String name, Pair<List<TableDesc>, Integer> result, int offset, + int limit) { Map<String, Object> data = new HashMap<>(); data.put(name, PagingUtil.cutPage(result.getFirst(), offset, limit)); data.put("size", result.getSecond()); @@ -667,4 +669,14 @@ public class NBasicController { } return host; } + + public void checkKylinInfo(boolean enableSecondStorage) { + if (enableSecondStorage) { + boolean checkKylinInfo = KylinInfoExtension.getFactory().checkKylinInfo(); + if (!checkKylinInfo) { + Message msg = MsgPicker.getMsg(); + throw new KylinException(LOW_LEVEL_LICENSE, msg.getLowLevelLicenseMessage()); + } + } + } } diff --git a/src/common-server/src/test/java/org/apache/kylin/rest/controller/NBasicControllerTest.java b/src/common-server/src/test/java/org/apache/kylin/rest/controller/NBasicControllerTest.java index a6f8ab3484..5b15c539d3 100644 --- a/src/common-server/src/test/java/org/apache/kylin/rest/controller/NBasicControllerTest.java +++ b/src/common-server/src/test/java/org/apache/kylin/rest/controller/NBasicControllerTest.java @@ -19,6 +19,7 @@ package org.apache.kylin.rest.controller; import static org.apache.kylin.common.exception.CommonErrorCode.UNKNOWN_ERROR_CODE; +import static org.apache.kylin.common.exception.ServerErrorCode.LOW_LEVEL_LICENSE; import static org.apache.kylin.common.exception.code.ErrorCodeServer.DATETIME_FORMAT_EMPTY; import static org.apache.kylin.common.exception.code.ErrorCodeServer.DATETIME_FORMAT_PARSE_ERROR; import static org.apache.kylin.common.exception.code.ErrorCodeServer.INTEGER_NON_NEGATIVE_CHECK; @@ -30,6 +31,7 @@ import static org.apache.kylin.common.exception.code.ErrorCodeServer.TIME_INVALI import static org.apache.kylin.common.exception.code.ErrorCodeServer.USER_AUTH_INFO_NOTFOUND; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -40,6 +42,8 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.apache.kylin.common.exception.KylinException; +import org.apache.kylin.common.extension.KylinInfoExtension; +import org.apache.kylin.common.msg.CnMessage; import org.apache.kylin.common.msg.Message; import org.apache.kylin.common.msg.MsgPicker; import org.apache.kylin.common.util.NLocalFileMetadataTestCase; @@ -57,14 +61,25 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import org.springframework.security.access.AccessDeniedException; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import lombok.val; + +@RunWith(PowerMockRunner.class) +@PowerMockIgnore({ "javax.management.*", "javax.script.*", "org.apache.hadoop.*", "javax.security.*", + "javax.crypto.*" }) +@PrepareForTest({ KylinInfoExtension.class }) public class NBasicControllerTest extends NLocalFileMetadataTestCase { private MockMvc mockMvc; @@ -306,12 +321,12 @@ public class NBasicControllerTest extends NLocalFileMetadataTestCase { Object tableData = mockDataResponse.get("table"); if (tableData instanceof List<?>) { for (Object tableDatum : (List<?>) tableData) { - Assert.assertEquals("table1", ((TableDesc)tableDatum).getName().toLowerCase(Locale.ROOT)); + Assert.assertEquals("table1", ((TableDesc) tableDatum).getName().toLowerCase(Locale.ROOT)); } } Assert.assertEquals(3, mockDataResponse.get("size")); } - + @Test public void testEncodeAndDecodeHost() { Assert.assertTrue(nBasicController.encodeHost("").isEmpty()); @@ -324,4 +339,31 @@ public class NBasicControllerTest extends NLocalFileMetadataTestCase { Assert.assertEquals("ip", nBasicController.decodeHost("ip")); } + @Test + public void testCheckLicenseLevel() throws Exception { + nBasicController.checkKylinInfo(false); + + PowerMockito.mockStatic(KylinInfoExtension.class); + val factory = Mockito.mock(KylinInfoExtension.Factory.class); + Mockito.when(factory.checkKylinInfo()).thenReturn(true); + PowerMockito.when(KylinInfoExtension.getFactory()).thenReturn(factory); + nBasicController.checkKylinInfo(true); + + checkErrorMessage(factory, "en", Message.getInstance()); + checkErrorMessage(factory, "cn", CnMessage.getInstance()); + } + + private void checkErrorMessage(KylinInfoExtension.Factory factory, String lang, Message message) { + try { + MsgPicker.setMsg(lang); + Mockito.when(factory.checkKylinInfo()).thenReturn(false); + nBasicController.checkKylinInfo(true); + fail(); + } catch (Exception e) { + Assert.assertTrue(e instanceof KylinException); + val kylinException = (KylinException) e; + Assert.assertEquals(LOW_LEVEL_LICENSE.toErrorCode(), kylinException.getErrorCode()); + Assert.assertEquals(message.getLowLevelLicenseMessage(), kylinException.getMessage()); + } + } } 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 a683e66a59..8e8a82164e 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 @@ -59,6 +59,7 @@ import org.apache.hadoop.fs.Path; import org.apache.kylin.common.annotation.ThirdPartyDependencies; import org.apache.kylin.common.constant.NonCustomProjectLevelConfig; import org.apache.kylin.common.exception.KylinRuntimeException; +import org.apache.kylin.common.extension.KylinInfoExtension; import org.apache.kylin.common.lock.DistributedLockFactory; import org.apache.kylin.common.persistence.metadata.HDFSMetadataStore; import org.apache.kylin.common.util.AddressUtil; @@ -1669,7 +1670,9 @@ public abstract class KylinConfigBase implements Serializable { } public boolean streamingEnabled() { - return Boolean.parseBoolean(getOptional("kylin.streaming.enabled", FALSE)); + boolean checkKylinInfo = KylinInfoExtension.getFactory().checkKylinInfo(); + boolean enable = Boolean.parseBoolean(getOptional("kylin.streaming.enabled", FALSE)); + return enable && checkKylinInfo; } public Map<String, String> getStreamingSparkConfigOverride() { @@ -3980,4 +3983,9 @@ public abstract class KylinConfigBase implements Serializable { public void setJdbcShareStateUrl(String jdbcShareStateUrl) { setProperty(KYLIN_JDBC_SHARE_STATE_URL, jdbcShareStateUrl); } + + public String getKylinInfoExtensionFactory() { + String defaultValue = "org.apache.kylin.common.extension.KylinInfoExtension$Factory"; + return getOptional("kylin.extension.info.factory", defaultValue); + } } diff --git a/src/core-common/src/main/java/org/apache/kylin/common/exception/ServerErrorCode.java b/src/core-common/src/main/java/org/apache/kylin/common/exception/ServerErrorCode.java index 5c90c5db1d..881a6c1f7f 100644 --- a/src/core-common/src/main/java/org/apache/kylin/common/exception/ServerErrorCode.java +++ b/src/core-common/src/main/java/org/apache/kylin/common/exception/ServerErrorCode.java @@ -142,6 +142,7 @@ public enum ServerErrorCode implements ErrorCodeSupplier { LICENSE_FILE_NOT_EXIST("KE-010015001"), // EMPTY_LICENSE_CONTENT("KE-010015002"), // INVALID_LICENSE("KE-010015003"), // + LOW_LEVEL_LICENSE("KE-010015004"), // // 10016XXX email EMPTY_EMAIL("KE-010016001"), // diff --git a/src/core-common/src/main/java/org/apache/kylin/common/extension/KylinInfoExtension.java b/src/core-common/src/main/java/org/apache/kylin/common/extension/KylinInfoExtension.java new file mode 100644 index 0000000000..0a2e849ee3 --- /dev/null +++ b/src/core-common/src/main/java/org/apache/kylin/common/extension/KylinInfoExtension.java @@ -0,0 +1,50 @@ +/* + * 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.extension; + +import org.apache.kylin.common.KylinConfig; + +public class KylinInfoExtension { + private static final ExtensionFactoryLoader<KylinInfoExtension.Factory> loader = new ExtensionFactoryLoader<>(); + private static KylinInfoExtension.Factory extensionFactory = null; + + private KylinInfoExtension() { + } + + public static Factory getFactory() { + if (extensionFactory == null) { + synchronized (KylinInfoExtension.class) { + extensionFactory = loader.loadFactory(KylinInfoExtension.Factory.class, + KylinConfig.getInstanceFromEnv().getKylinInfoExtensionFactory()); + } + } + return extensionFactory; + } + + public static class Factory { + + public Factory() { + // Do nothing + } + + public boolean checkKylinInfo() { + return true; + } + } +} diff --git a/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java b/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java index 203eece840..c62f52156d 100644 --- a/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java +++ b/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java @@ -540,6 +540,16 @@ public class CnMessage extends Message { return "配置列表不能为空。请检查后重试。"; } + @Override + public String getLowLevelLicenseMessage() { + return "无法使用分层存储,如需使用请先升级为 Kyligence 高级版"; + } + + @Override + public String getRestartNoticeMessage() { + return "部分功能需重启后再试"; + } + @Override public String saveModelFail() { return "模型 “%s” 保存失败。请确保模型中使用的列 “%s” 在源表 “%s” 中存在。"; diff --git a/src/core-common/src/main/java/org/apache/kylin/common/msg/Message.java b/src/core-common/src/main/java/org/apache/kylin/common/msg/Message.java index 4a76464ce2..79e267eab1 100644 --- a/src/core-common/src/main/java/org/apache/kylin/common/msg/Message.java +++ b/src/core-common/src/main/java/org/apache/kylin/common/msg/Message.java @@ -632,6 +632,14 @@ public class Message { return UNKNOWN_ERROR; } + public String getLowLevelLicenseMessage() { + return "Tiered Storage cannot be used. Please upgrade to Kyligence Premium version if you want to use the function."; + } + + public String getRestartNoticeMessage() { + return "Some functions need to restart and try again."; + } + public String saveModelFail() { return "Can’t save model \"%s\". Please ensure that the used column \"%s\" exist in source table \"%s\"."; } diff --git a/src/core-common/src/main/resources/kylin_errorcode_conf_en.properties b/src/core-common/src/main/resources/kylin_errorcode_conf_en.properties index 664c1b8d01..b82744456d 100644 --- a/src/core-common/src/main/resources/kylin_errorcode_conf_en.properties +++ b/src/core-common/src/main/resources/kylin_errorcode_conf_en.properties @@ -132,6 +132,7 @@ KE-010014004=Empty Sql Expression KE-010015001=License File Not Exist KE-010015002=Empty License Content KE-010015003=Invalid License +KE-010015004=Low Level License KE-010016001=Empty Email KE-010016002=Invalid Email KE-010017001=File Not Exist diff --git a/src/core-common/src/main/resources/kylin_errorcode_conf_zh.properties b/src/core-common/src/main/resources/kylin_errorcode_conf_zh.properties index f5e12bc109..9f04bec06f 100644 --- a/src/core-common/src/main/resources/kylin_errorcode_conf_zh.properties +++ b/src/core-common/src/main/resources/kylin_errorcode_conf_zh.properties @@ -132,6 +132,7 @@ KE-010014004=查询语句为空 KE-010015001=许可证文件不存在 KE-010015002=许可证未空 KE-010015003=非法许可证 +KE-010015004=低版本许可证 KE-010016001=邮箱名为空 KE-010016002=非法邮箱 KE-010017001=文件不存在 diff --git a/src/core-common/src/test/java/org/apache/kylin/common/extension/KylinInfoExtensionTest.java b/src/core-common/src/test/java/org/apache/kylin/common/extension/KylinInfoExtensionTest.java new file mode 100644 index 0000000000..b737d3e7f9 --- /dev/null +++ b/src/core-common/src/test/java/org/apache/kylin/common/extension/KylinInfoExtensionTest.java @@ -0,0 +1,41 @@ +/* + * 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.extension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.apache.kylin.junit.annotation.MetadataInfo; +import org.junit.jupiter.api.Test; + +import lombok.val; + +@MetadataInfo +class KylinInfoExtensionTest { + + @Test + void test() { + val factory = KylinInfoExtension.getFactory(); + assertEquals("org.apache.kylin.common.extension.KylinInfoExtension$Factory", factory.getClass().getName()); + + assertTrue(factory.checkKylinInfo()); + + assertEquals(factory, KylinInfoExtension.getFactory()); + } +} \ No newline at end of file diff --git a/src/data-loading-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java b/src/data-loading-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java index 53e332f15a..3d82dc7e45 100644 --- a/src/data-loading-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java +++ b/src/data-loading-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java @@ -1578,6 +1578,7 @@ public class JobServiceTest extends NLocalFileMetadataTestCase { }, project); // SecondStorageUtil.initModelMetaData(project, model); // Assert.assertTrue(SecondStorageUtil.isModelEnable(project, model)); +// Assert.assertTrue(SecondStorageUtil.isModelEnableWithoutCheckKylinInfo(project, model)); val job3 = new DefaultExecutable(); job3.setProject(getProject()); @@ -1610,6 +1611,7 @@ public class JobServiceTest extends NLocalFileMetadataTestCase { }, project); // SecondStorageUtil.initModelMetaData(project, model); // Assert.assertTrue(SecondStorageUtil.isModelEnable(project, model)); +// Assert.assertTrue(SecondStorageUtil.isModelEnableWithoutCheckKylinInfo(project, model)); val manager = NExecutableManager.getInstance(KylinConfig.getInstanceFromEnv(), getProject()); val job = new DefaultExecutable(); diff --git a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java index 5f618da57a..58beefba66 100644 --- a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java +++ b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java @@ -3966,6 +3966,7 @@ public class ModelServiceTest extends SourceTestCase { }, defaultProject); // SecondStorageUtil.initModelMetaData(defaultProject, modelId); // Assert.assertTrue(SecondStorageUtil.isModelEnable(defaultProject, modelId)); +// Assert.assertTrue(SecondStorageUtil.isModelEnableWithoutCheckKylinInfo(defaultProject, modelId)); List<NDataSegment> overlapSegments31 = modelService.checkSegmentToBuildOverlapsBuilt(defaultProject, dataModelDesc, new SegmentRange.TimePartitionedSegmentRange(1309891513770L, 1509891513770L), true, null); @@ -4308,6 +4309,7 @@ public class ModelServiceTest extends SourceTestCase { when(changedResponse.hasTableIndexChange()).thenReturn(true); modelService.changeSecondStorageIfNeeded(project, request, () -> true); Assert.assertTrue(SecondStorageUtil.isModelEnable(project, model)); +// Assert.assertTrue(SecondStorageUtil.isModelEnableWithoutCheckKylinInfo(project, model)); val modelRequest = modelService.convertToRequest(modelService.getModelById(model, project)); Assert.assertTrue(modelRequest.isWithSecondStorage()); @@ -4326,6 +4328,7 @@ public class ModelServiceTest extends SourceTestCase { Assert.assertTrue(indexPlanManager.getIndexPlan(model).containBaseTableLayout()); SecondStorageUtil.initModelMetaData(project, model); Assert.assertTrue(SecondStorageUtil.isModelEnable(project, model)); +// Assert.assertTrue(SecondStorageUtil.isModelEnableWithoutCheckKylinInfo(project, model)); { List<NDataSegmentResponse> segments = modelService.getSegmentsResponse(model, project, "0", "" + Long.MAX_VALUE, "", null, null, true, "start_time", false, null, null); @@ -4383,6 +4386,7 @@ public class ModelServiceTest extends SourceTestCase { }, project); Assert.assertTrue(indexPlanManager.getIndexPlan(model).containBaseTableLayout()); Assert.assertFalse(SecondStorageUtil.isModelEnable(project, model)); +// Assert.assertFalse(SecondStorageUtil.isModelEnableWithoutCheckKylinInfo(project, model)); { List<NDataSegmentResponse> segments = modelService.getSegmentsResponse(model, project, "0", "" + Long.MAX_VALUE, "", null, null, true, "start_time", false, @@ -5280,9 +5284,11 @@ public class ModelServiceTest extends SourceTestCase { }, project); SecondStorageUtil.initModelMetaData(project, model); Assert.assertTrue(SecondStorageUtil.isModelEnable(project, model)); +// Assert.assertTrue(SecondStorageUtil.isModelEnableWithoutCheckKylinInfo(project, model)); val mockModel = RandomUtil.randomUUIDStr(); Assert.assertFalse(SecondStorageUtil.isModelEnable(project, mockModel)); +// Assert.assertFalse(SecondStorageUtil.isModelEnableWithoutCheckKylinInfo(project, mockModel)); val segment = Mockito.mock(NDataSegment.class); modelService.checkSegmentSecondStorage(mockModel, project, segment); diff --git a/src/server/src/main/java/org/apache/kylin/rest/MultiTenantModeFilter.java b/src/server/src/main/java/org/apache/kylin/rest/MultiTenantModeFilter.java index 7af0ececb5..dffefc5a5e 100644 --- a/src/server/src/main/java/org/apache/kylin/rest/MultiTenantModeFilter.java +++ b/src/server/src/main/java/org/apache/kylin/rest/MultiTenantModeFilter.java @@ -54,7 +54,7 @@ import lombok.extern.slf4j.Slf4j; @Component @Order(Ordered.HIGHEST_PRECEDENCE + 4) public class MultiTenantModeFilter extends BaseFilter { - private static final Set<String> NOT_ROUTE_APIS = com.google.common.collect.Sets.newHashSet(); + private static final Set<String> NOT_ROUTE_APIS = Sets.newHashSet(); private static final Set<String> ASYNC_QUERY_APIS = Sets.newHashSet(); private static final Set<String> ROUTES_APIS = Sets.newHashSet(); private static final Set<String> JOB_APIS = Sets.newHashSet();