From ced3f51c71fce99e8e4f75ad0ce310103d5ccd1f Mon Sep 17 00:00:00 2001 From: terry Date: Tue, 1 Nov 2016 23:47:51 +0800 Subject: [PATCH] KYLIN-1826, unify hive concept, forbid modify hive name. Signed-off-by: terry --- .../kylin/job/constant/ExecutableConstants.java | 2 +- .../org/apache/kylin/metadata/model/TableDesc.java | 2 ++ .../kylin/rest/controller/ProjectController.java | 23 +++++++++++++------- .../kylin/rest/request/CreateProjectRequest.java | 5 ++++- .../kylin/rest/request/UpdateProjectRequest.java | 5 ++++- .../kylin/source/hive/external/HiveManager.java | 2 +- webapp/app/partials/projects/project_create.html | 4 ++-- 7 files changed, 29 insertions(+), 14 deletions(-) diff --git a/core-job/src/main/java/org/apache/kylin/job/constant/ExecutableConstants.java b/core-job/src/main/java/org/apache/kylin/job/constant/ExecutableConstants.java index 669e4a8..5cac792 100644 --- a/core-job/src/main/java/org/apache/kylin/job/constant/ExecutableConstants.java +++ b/core-job/src/main/java/org/apache/kylin/job/constant/ExecutableConstants.java @@ -35,7 +35,7 @@ public final class ExecutableConstants { public static final int DEFAULT_SCHEDULER_INTERVAL_SECONDS = 60; public static final String STEP_NAME_BUILD_DICTIONARY = "Build Dimension Dictionary"; - public static final String STEP_NAME_CREATE_FLAT_HIVE_TABLE = "Create Intermediate Flat Hive Table in Local Hive"; + public static final String STEP_NAME_CREATE_FLAT_HIVE_TABLE = "Create Intermediate Flat Hive Table"; public static final String STEP_NAME_CREATE_FLAT_HIVE_TABLE_IN_DEFAULT = "Create Intermediate Flat Hive Table in Default Hive"; public static final String STEP_NAME_COPY_HIVE_DATA = "Copy Intermediate Table To Local Hadoop"; public static final String STEP_NAME_MATERIALIZE_HIVE_VIEW_IN_LOOKUP = "Materialize Hive View in Lookup Tables"; diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TableDesc.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TableDesc.java index bb9987e..f647d59 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TableDesc.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TableDesc.java @@ -238,6 +238,8 @@ public class TableDesc extends RootPersistentEntity implements ISourceAware { @Override public int getSourceType() { + if(!(ISourceAware.ID_HIVE == sourceType || ISourceAware.ID_EXTERNAL_HIVE == sourceType)) + return this.sourceType; return hive == null ? ISourceAware.ID_HIVE : ISourceAware.ID_EXTERNAL_HIVE; } diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java index bee4a63..f85638a 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java @@ -202,7 +202,7 @@ public class ProjectController extends BasicController { } String hiveName = projectRequest.getHive(); - checkHiveIsValid(hiveName); + checkHiveIsValid(hiveName, null); ProjectInstance createdProj = null; try { createdProj = projectService.createProject(projectRequest); @@ -220,7 +220,7 @@ public class ProjectController extends BasicController { if (StringUtils.isEmpty(projectRequest.getFormerProjectName())) { throw new InternalErrorException("A project name must be given to update a project"); } - checkHiveIsValid(projectRequest.getNewHiveName()); + checkHiveIsValid(projectRequest.getNewHiveName(), projectRequest.getFormerProjectName()); ProjectInstance updatedProj = null; try { ProjectInstance currentProject = projectService.getProjectManager().getProject(projectRequest.getFormerProjectName()); @@ -262,20 +262,27 @@ public class ProjectController extends BasicController { * Check input hive name is valid * @param hiveName */ - private void checkHiveIsValid(String hiveName) { + private void checkHiveIsValid(String hiveName, String projectName) { try { if(HiveManager.getInstance().isSupportExternalHives()) { HiveManager.getInstance().getHiveCommand(hiveName); HiveManager.getInstance().getHiveConfigFile(hiveName); - return; + } else if(hiveName != null) { + throw new InternalErrorException(HiveManager.NOT_SUPPORT_ERROR_MESSAGE); } - } catch (Exception e) { + } catch (IllegalArgumentException e) { logger.error("Can not find hive " + hiveName + ", support hives : " + - HiveManager.getInstance().getExternalHiveName()); + HiveManager.getInstance().getExternalHiveName(), e); throw new InternalErrorException("Can not find hive " + hiveName + " by current external hives configuration"); } - if(hiveName != null) { - throw new InternalErrorException(HiveManager.NOT_SUPPORT_ERROR_MESSAGE); + + if(projectName == null) + return ; + ProjectInstance project = projectService.getProjectManager().getProject(projectName); + if(project != null && !project.getRealizationEntries().isEmpty() && project.getHive() != hiveName) { + logger.warn("Update project {} from hive {} to {} may cause error, you can create a new project instead.", + projectName, project.getHive(), hiveName); + throw new InternalErrorException("It is not allow to modify hive name when cube exists in project."); } } } diff --git a/server-base/src/main/java/org/apache/kylin/rest/request/CreateProjectRequest.java b/server-base/src/main/java/org/apache/kylin/rest/request/CreateProjectRequest.java index 745172f..51f100e 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/request/CreateProjectRequest.java +++ b/server-base/src/main/java/org/apache/kylin/rest/request/CreateProjectRequest.java @@ -45,7 +45,10 @@ public class CreateProjectRequest { } public String getHive() { - return hive; + if(this.hive == null || this.hive.trim().isEmpty()) { + return null; + } + return this.hive.trim(); } public void setHive(String hive) { diff --git a/server-base/src/main/java/org/apache/kylin/rest/request/UpdateProjectRequest.java b/server-base/src/main/java/org/apache/kylin/rest/request/UpdateProjectRequest.java index 8dca4d9..6bc077b 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/request/UpdateProjectRequest.java +++ b/server-base/src/main/java/org/apache/kylin/rest/request/UpdateProjectRequest.java @@ -55,7 +55,10 @@ public class UpdateProjectRequest { } public String getNewHiveName() { - return newHiveName; + if(this.newHiveName == null || this.newHiveName.trim().isEmpty()) { + return null; + } + return this.newHiveName.trim(); } public void setNewHiveName(String newHiveName) { diff --git a/source-hive/src/main/java/org/apache/kylin/source/hive/external/HiveManager.java b/source-hive/src/main/java/org/apache/kylin/source/hive/external/HiveManager.java index 5fbf111..cc2ad8b 100644 --- a/source-hive/src/main/java/org/apache/kylin/source/hive/external/HiveManager.java +++ b/source-hive/src/main/java/org/apache/kylin/source/hive/external/HiveManager.java @@ -132,7 +132,7 @@ public class HiveManager { return client; String configFileLocation = getHiveConfigFile(hiveName); if(configFileLocation == null) { - throw new IllegalArgumentException("Can not find hive " + hiveName + " config file in local hive root directory " + + throw new IllegalArgumentException("Can not find hive " + hiveName + " config file in external hive root directory " + this.externalHiveRootDir.getAbsolutePath()); } diff --git a/webapp/app/partials/projects/project_create.html b/webapp/app/partials/projects/project_create.html index f9e33ea..cd150b1 100644 --- a/webapp/app/partials/projects/project_create.html +++ b/webapp/app/partials/projects/project_create.html @@ -36,11 +36,11 @@
- +
-- 1.7.10.4