This is an automated email from the ASF dual-hosted git repository. xxyu pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
commit 36fa31b6b983edaa5f50879ae3c31fe6e353530e Author: Zhong, Yanghong <nju_y...@apache.org> AuthorDate: Tue Jun 9 10:18:52 2020 +0800 KYLIN-4485 Minor fix --- .../java/org/apache/kylin/common/KConstants.java | 23 ------------------- .../org/apache/kylin/common/KylinConfigBase.java | 26 ++++++++++++++++++---- .../src/main/resources/kylin-defaults.properties | 3 +++ .../kylin/metadata/TableMetadataManager.java | 2 +- .../kylin/rest/service/MigrationService.java | 2 +- .../apache/kylin/rest/service/TableService.java | 2 +- .../kylin/rest/service/AdminServiceTest.java | 1 + .../org/apache/kylin/tool/CubeMigrationCLI.java | 4 ++-- webapp/app/js/services/kylinProperties.js | 8 +++++++ webapp/app/partials/cubes/cubes.html | 6 ++--- 10 files changed, 42 insertions(+), 35 deletions(-) diff --git a/core-common/src/main/java/org/apache/kylin/common/KConstants.java b/core-common/src/main/java/org/apache/kylin/common/KConstants.java deleted file mode 100644 index 5e1723c..0000000 --- a/core-common/src/main/java/org/apache/kylin/common/KConstants.java +++ /dev/null @@ -1,23 +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; - -public class KConstants { - public static final int DEFAULT_SERVICE_PORT = 7070; -} 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 7db46a6..041f545 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 @@ -204,6 +204,15 @@ public abstract class KylinConfigBase implements Serializable { } } + final protected String[] getRawStringArray(String prop, String[] dft) { + final String property = properties.getProperty(prop); + if (!StringUtils.isBlank(property)) { + return property.split("\\s*,\\s*"); + } else { + return dft; + } + } + final protected int[] getOptionalIntArray(String prop, String[] dft) { String[] strArray = getOptionalStringArray(prop, dft); int[] intArray = new int[strArray.length]; @@ -711,7 +720,7 @@ public abstract class KylinConfigBase implements Serializable { } public boolean isRowKeyEncodingAutoConvert() { - return Boolean.parseBoolean(getOptional("kylin.cube.kylin.cube.rowkey-encoding-auto-convert", "true")); + return Boolean.parseBoolean(getOptional("kylin.cube.rowkey-encoding-auto-convert", "true")); } public String getSegmentAdvisor() { @@ -2136,6 +2145,10 @@ public abstract class KylinConfigBase implements Serializable { return getOptionalStringArray("kylin.server.cluster-servers", new String[0]); } + public String[] getRawRestServers() { + return getRawStringArray("kylin.server.cluster-servers", new String[0]); + } + public String getServerRestAddress() { return getOptional("kylin.server.host-address", "localhost:7070"); } @@ -2250,6 +2263,7 @@ public abstract class KylinConfigBase implements Serializable { public String getPropertiesWhiteList() { return getOptional("kylin.web.properties.whitelist", "kylin.web.timezone,kylin.query.cache-enabled,kylin.env," + + "kylin.cube.migration.enabled," + "kylin.web.hive-limit,kylin.storage.default," + "kylin.engine.default,kylin.web.link-hadoop,kylin.web.link-diagnostic," + "kylin.web.contact-mail,kylin.web.help.length,kylin.web.help.0,kylin.web.help.1,kylin.web.help.2," @@ -2367,6 +2381,10 @@ public abstract class KylinConfigBase implements Serializable { // ============================================================================ // CUBE MIGRATION // ============================================================================ + public boolean isMigrationCubeEnabled() { + return Boolean.parseBoolean(getOptional("kylin.cube.migration.enabled", FALSE)); + } + public int getMigrationRuleExpansionRateThreshold() { return Integer.parseInt(getOptional("kylin.cube.migration.expansion-rate", "5")); } @@ -2395,12 +2413,12 @@ public abstract class KylinConfigBase implements Serializable { return getOptional("kylin.cube.migration.target-address", "sandbox:80"); } - public String getMigrationEmailSuffix() { - return getOptional("kylin.cube.migration.mail-suffix", "@mail.com"); + public String getNotificationMailSuffix() { + return getOptional("kylin.cube.notification-mail-suffix", "@mail.com"); } public boolean isMigrationApplyQueryLatencyRule() { - return Boolean.parseBoolean(getOptional("kylin.cube.migration.rule-query-latency-enabled", "true")); + return Boolean.parseBoolean(getOptional("kylin.cube.migration.rule-query-latency-enabled", TRUE)); } // ============================================================================ diff --git a/core-common/src/main/resources/kylin-defaults.properties b/core-common/src/main/resources/kylin-defaults.properties index 1dee90f..c16419a 100644 --- a/core-common/src/main/resources/kylin-defaults.properties +++ b/core-common/src/main/resources/kylin-defaults.properties @@ -77,6 +77,9 @@ kylin.web.link-diagnostic= kylin.web.contact-mail= kylin.server.external-acl-provider= +### CUBE MIGRATION +kylin.cube.migration.enabled=false + # Default time filter for job list, 0->current day, 1->last one day, 2->last one week, 3->last one year, 4->all kylin.web.default-time-filter=1 diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/TableMetadataManager.java b/core-metadata/src/main/java/org/apache/kylin/metadata/TableMetadataManager.java index ec903d4..0d84c34 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/TableMetadataManager.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/TableMetadataManager.java @@ -327,7 +327,7 @@ public class TableMetadataManager { public void reloadTableExtQuietly(String table, String project) { try (AutoLock lock = srcExtMapLock.lockForWrite()) { - srcExtCrud.reloadQuietly(TableExtDesc.concatResourcePath(table, project)); + srcExtCrud.reloadQuietly(TableDesc.makeResourceName(table, project)); } } diff --git a/cube-migration/src/main/java/org/apache/kylin/rest/service/MigrationService.java b/cube-migration/src/main/java/org/apache/kylin/rest/service/MigrationService.java index ca1e71b..67fce7e 100644 --- a/cube-migration/src/main/java/org/apache/kylin/rest/service/MigrationService.java +++ b/cube-migration/src/main/java/org/apache/kylin/rest/service/MigrationService.java @@ -169,7 +169,7 @@ public class MigrationService extends BasicService { logger.info("ProjectUUID : " + prjInstance.getUuid()); Acl acl = accessService.getAcl(ae); - String mailSuffix = KylinConfig.getInstanceFromEnv().getMigrationEmailSuffix(); + String mailSuffix = KylinConfig.getInstanceFromEnv().getNotificationMailSuffix(); List<String> cubeAdmins = Lists.newArrayList(); if (acl != null) { for (AccessControlEntry ace : acl.getEntries()) { diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/TableService.java b/server-base/src/main/java/org/apache/kylin/rest/service/TableService.java index 0420ad8..0d3f9f0 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/TableService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/TableService.java @@ -141,7 +141,7 @@ public class TableService extends BasicService { hiveTableDesc = pair.getFirst(); } catch (Exception e) { logger.error("Fail to get metadata for hive table {} due to ", tableDesc.getIdentity(), e); - throw new RuntimeException("Fail to get metadata for hive table" + tableDesc.getIdentity()); + throw new RuntimeException("Fail to get metadata for hive table " + tableDesc.getIdentity()); } TableSchemaUpdateChecker.CheckResult result = getSchemaUpdateChecker().allowMigrate(tableDesc, hiveTableDesc); diff --git a/server/src/test/java/org/apache/kylin/rest/service/AdminServiceTest.java b/server/src/test/java/org/apache/kylin/rest/service/AdminServiceTest.java index dd098de..e732580 100644 --- a/server/src/test/java/org/apache/kylin/rest/service/AdminServiceTest.java +++ b/server/src/test/java/org/apache/kylin/rest/service/AdminServiceTest.java @@ -63,6 +63,7 @@ public class AdminServiceTest extends ServiceTestBase { "kylin.cube.cubeplanner.enabled=true\n" + "kylin.web.help=\n" + "kylin.web.export-allow-other=true\n" + + "kylin.cube.migration.enabled=false\n" + "kylin.web.link-hadoop=\n" + "kylin.web.hide-measures=RAW\n" + "kylin.htrace.show-gui-trace-toggle=false\n" + diff --git a/tool/src/main/java/org/apache/kylin/tool/CubeMigrationCLI.java b/tool/src/main/java/org/apache/kylin/tool/CubeMigrationCLI.java index 9212d08..e8123dd 100644 --- a/tool/src/main/java/org/apache/kylin/tool/CubeMigrationCLI.java +++ b/tool/src/main/java/org/apache/kylin/tool/CubeMigrationCLI.java @@ -645,10 +645,10 @@ public class CubeMigrationCLI extends AbstractApplication { } private void updateMeta(KylinConfig config, String projectName, String cubeName, DataModelDesc model) { - String[] nodes = config.getRestServers(); + String[] nodes = config.getRawRestServers(); Map<String, String> tableToProjects = new HashMap<>(); for (TableRef tableRef : model.getAllTables()) { - tableToProjects.put(tableRef.getTableIdentity(), tableRef.getTableDesc().getProject()); + tableToProjects.put(tableRef.getTableIdentity(), projectName); } for (String node : nodes) { diff --git a/webapp/app/js/services/kylinProperties.js b/webapp/app/js/services/kylinProperties.js index 05fce98..4762753 100644 --- a/webapp/app/js/services/kylinProperties.js +++ b/webapp/app/js/services/kylinProperties.js @@ -66,6 +66,14 @@ KylinApp.service('kylinConfig', function (AdminService, $log) { return false; } + this.isCubeMigrationEnabled = function(){ + var status = this.getProperty("kylin.cube.migration.enabled").trim(); + if(status!=='false'){ + return true; + } + return false; + } + //deprecated this.getDeployEnv = function () { this.deployEnv = this.getProperty("kylin.env"); diff --git a/webapp/app/partials/cubes/cubes.html b/webapp/app/partials/cubes/cubes.html index dba3c8b..605f4e5 100644 --- a/webapp/app/partials/cubes/cubes.html +++ b/webapp/app/partials/cubes/cubes.html @@ -102,7 +102,7 @@ <li ng-if="cube.status=='DISABLED' && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="startDeleteSegment(cube)">Delete Segment</a></li> <li ng-if="cube.status=='DISABLED' && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="purge(cube)">Purge</a></li> <li ng-if="cube.status!='DESCBROKEN' && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="cloneCube(cube)">Clone</a></li> - <li ng-if="cube.status=='READY' && (userService.hasRole('ROLE_ADMIN') || hasPermission(cube, permissions.ADMINISTRATION.mask) || hasPermission(cubeProjectEntity, permissions.ADMINISTRATION.mask))"><a ng-click="startMigrateCube(cube, 0);">Migrate</a></li> + <li ng-if="cube.status=='READY' && kylinConfig.isCubeMigrationEnabled() && (userService.hasRole('ROLE_ADMIN') || hasPermission(cube, permissions.ADMINISTRATION.mask) || hasPermission(cubeProjectEntity, permissions.ADMINISTRATION.mask))"><a ng-click="startMigrateCube(cube, 0);">Migrate</a></li> </ul> <ul ng-if="(userService.hasRole('ROLE_ADMIN') || hasPermission('cube', cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask, permissions.OPERATION.mask)) && cube.streamingV2 && actionLoaded" class="dropdown-menu" role="menu" style="right:0;left:auto;"> @@ -132,8 +132,8 @@ <ul class="dropdown-menu" role="menu" style="right:0;left:auto;"> <li ng-if="cube.status!='READY'"><a href="cubes/edit/{{cube.name}}/descriptionjson">Edit CubeDesc</a></li> <li><a href="cubes/view/{{cube.name}}/instancejson">View Cube</a></li> - <li ng-if="cube.status=='READY' && kylinConfig.getDeployEnv().indexOf('QA') > -1"><a ng-click="startMigrateCube(cube, 1)">Approve Migration</a></li> - <li ng-if="cube.status=='READY' && kylinConfig.getDeployEnv().indexOf('QA') > -1"><a ng-click="startMigrateCube(cube, -1)">Reject Migration</a></li> + <li ng-if="cube.status=='READY' && kylinConfig.isCubeMigrationEnabled()"><a ng-click="startMigrateCube(cube, 1)">Approve Migration</a></li> + <li ng-if="cube.status=='READY' && kylinConfig.isCubeMigrationEnabled()"><a ng-click="startMigrateCube(cube, -1)">Reject Migration</a></li> </ul> </div> </td>