You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2016/11/09 06:11:25 UTC

kylin git commit: KYLIN-1826, unify hive concept, forbid modify hive name.

Repository: kylin
Updated Branches:
  refs/heads/KYLIN-1826 4b4e0b8ee -> 726fb8fd6


KYLIN-1826, unify hive concept, forbid modify hive name.

Signed-off-by: terry <hz...@corp.netease.com>
Signed-off-by: shaofengshi <sh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/726fb8fd
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/726fb8fd
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/726fb8fd

Branch: refs/heads/KYLIN-1826
Commit: 726fb8fd6da8b933cfe29dc3ddcb3995553dedd2
Parents: 4b4e0b8
Author: terry <hz...@corp.netease.com>
Authored: Tue Nov 1 23:47:51 2016 +0800
Committer: shaofengshi <sh...@apache.org>
Committed: Wed Nov 9 14:11:13 2016 +0800

----------------------------------------------------------------------
 .../kylin/job/constant/ExecutableConstants.java |  2 +-
 .../apache/kylin/metadata/model/TableDesc.java  |  2 ++
 .../rest/controller/ProjectController.java      | 23 +++++++++++++-------
 .../rest/request/CreateProjectRequest.java      |  5 ++++-
 .../rest/request/UpdateProjectRequest.java      |  5 ++++-
 .../kylin/source/hive/external/HiveManager.java |  2 +-
 .../app/partials/projects/project_create.html   |  4 ++--
 7 files changed, 29 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/726fb8fd/core-job/src/main/java/org/apache/kylin/job/constant/ExecutableConstants.java
----------------------------------------------------------------------
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";

http://git-wip-us.apache.org/repos/asf/kylin/blob/726fb8fd/core-metadata/src/main/java/org/apache/kylin/metadata/model/TableDesc.java
----------------------------------------------------------------------
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;
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/726fb8fd/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
----------------------------------------------------------------------
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.");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/726fb8fd/server-base/src/main/java/org/apache/kylin/rest/request/CreateProjectRequest.java
----------------------------------------------------------------------
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) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/726fb8fd/server-base/src/main/java/org/apache/kylin/rest/request/UpdateProjectRequest.java
----------------------------------------------------------------------
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) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/726fb8fd/source-hive/src/main/java/org/apache/kylin/source/hive/external/HiveManager.java
----------------------------------------------------------------------
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());
         }
         

http://git-wip-us.apache.org/repos/asf/kylin/blob/726fb8fd/webapp/app/partials/projects/project_create.html
----------------------------------------------------------------------
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 @@
                 </div>
             </div>
             <div class="form-group">
-                <label><b>Project External Hive</b></label>
+                <label><b>Hive Name</b></label>
  
                 <div class="clearfix">
                      <input name="description_input" type="text" class="form-control"
-                               placeholder="External hive that the project take as input source, ignore it if you are using default hive."
+                               placeholder="External hive name that the project take as input source, ignore it if you are using default hive."
                                ng-model="proj.hive"></textarea>
                 </div>
             </div>