You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/06/29 05:48:51 UTC

[44/50] kylin git commit: minor, project renaming also copy ACL information

minor, project renaming also copy ACL information


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

Branch: refs/heads/master
Commit: 450845c6377c131db801f9eca9c4e062fd67fc0e
Parents: 6f8a91c
Author: Roger Shi <ro...@hotmail.com>
Authored: Mon Jun 26 21:19:43 2017 +0800
Committer: Hongbin Ma <ma...@kyligence.io>
Committed: Tue Jun 27 11:18:03 2017 +0800

----------------------------------------------------------------------
 .../kylin/metadata/project/ProjectManager.java  | 52 +++++++++++---------
 .../rest/controller/ProjectController.java      |  6 ++-
 .../rest/controller2/ProjectControllerV2.java   | 10 ++--
 .../java/org/apache/kylin/rest/msg/Message.java |  4 --
 .../kylin/rest/service/ProjectService.java      | 24 ++++++++-
 5 files changed, 62 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/450845c6/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
index d4b3ff4..213b136 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
@@ -47,6 +47,7 @@ import org.apache.kylin.metadata.realization.RealizationType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
@@ -216,35 +217,40 @@ public class ProjectManager {
         }
     }
 
-    //update project itself
-    public ProjectInstance updateProject(ProjectInstance project, String newName, String newDesc,
+    // rename project
+    public ProjectInstance renameProject(ProjectInstance project, String newName, String newDesc,
             LinkedHashMap<String, String> overrideProps) throws IOException {
-        if (!project.getName().equals(newName)) {
-            ProjectInstance newProject = this.createProject(newName, project.getOwner(), newDesc, overrideProps);
-
-            newProject.setCreateTimeUTC(project.getCreateTimeUTC());
-            newProject.recordUpdateTime(System.currentTimeMillis());
-            newProject.setRealizationEntries(project.getRealizationEntries());
-            newProject.setTables(project.getTables());
-            newProject.setModels(project.getModels());
-            newProject.setExtFilters(project.getExtFilters());
+        Preconditions.checkArgument(!project.getName().equals(newName));
+        ProjectInstance newProject = this.createProject(newName, project.getOwner(), newDesc, overrideProps);
+
+        newProject.setUuid(project.getUuid());
+        newProject.setCreateTimeUTC(project.getCreateTimeUTC());
+        newProject.recordUpdateTime(System.currentTimeMillis());
+        newProject.setRealizationEntries(project.getRealizationEntries());
+        newProject.setTables(project.getTables());
+        newProject.setModels(project.getModels());
+        newProject.setExtFilters(project.getExtFilters());
+
+        removeProject(project);
+        updateProject(newProject);
 
-            removeProject(project);
-            updateProject(newProject);
+        return newProject;
+    }
 
-            return newProject;
-        } else {
-            project.setName(newName);
-            project.setDescription(newDesc);
-            project.setOverrideKylinProps(overrideProps);
+    //update project itself
+    public ProjectInstance updateProject(ProjectInstance project, String newName, String newDesc,
+            LinkedHashMap<String, String> overrideProps) throws IOException {
+        Preconditions.checkArgument(project.getName().equals(newName));
+        project.setName(newName);
+        project.setDescription(newDesc);
+        project.setOverrideKylinProps(overrideProps);
 
-            if (project.getUuid() == null)
-                project.updateRandomUuid();
+        if (project.getUuid() == null)
+            project.updateRandomUuid();
 
-            updateProject(project);
+        updateProject(project);
 
-            return project;
-        }
+        return project;
     }
 
     private void updateProject(ProjectInstance prj) throws IOException {

http://git-wip-us.apache.org/repos/asf/kylin/blob/450845c6/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 89c8b23..74e806e 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
@@ -172,7 +172,11 @@ public class ProjectController extends BasicController {
                 throw new InternalErrorException("The project named " + formerProjectName + " does not exists");
             }
 
-            updatedProj = projectService.updateProject(projectDesc, currentProject);
+            if (projectDesc.getName().equals(currentProject.getName())) {
+                updatedProj = projectService.updateProject(projectDesc, currentProject);
+            } else {
+                updatedProj = projectService.renameProject(projectDesc, currentProject);
+            }
         } catch (Exception e) {
             logger.error("Failed to deal with the request.", e);
             throw new InternalErrorException(e.getLocalizedMessage());

http://git-wip-us.apache.org/repos/asf/kylin/blob/450845c6/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java b/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java
index 6dea4e3..a25e5b1 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java
@@ -138,12 +138,12 @@ public class ProjectControllerV2 extends BasicController {
             throw new BadRequestException(String.format(msg.getPROJECT_NOT_FOUND(), formerProjectName));
         }
 
-        // cannot modify project name if it's not empty
-        if (!currentProject.getName().equals(projectDesc.getName()) && !isProjectEmpty(currentProject.getName())) {
-            throw new BadRequestException(msg.getRENAME_PROJECT_NOT_EMPTY());
+        ProjectInstance updatedProj;
+        if (projectDesc.getName().equals(currentProject.getName())) {
+            updatedProj = projectService.updateProject(projectDesc, currentProject);
+        } else {
+            updatedProj = projectService.renameProject(projectDesc, currentProject);
         }
-
-        ProjectInstance updatedProj = projectService.updateProject(projectDesc, currentProject);
         return new EnvelopeResponse(ResponseCode.CODE_SUCCESS, updatedProj, "");
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/450845c6/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java b/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java
index 9ed38bb..45c1a65 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java
@@ -249,10 +249,6 @@ public class Message {
         return "Cannot delete non-empty project";
     }
 
-    public String getRENAME_PROJECT_NOT_EMPTY() {
-        return "Cannot rename non-empty project";
-    }
-
     // Table
     public String getHIVE_TABLE_NOT_FOUND() {
         return "Cannot find Hive table '%s'.";

http://git-wip-us.apache.org/repos/asf/kylin/blob/450845c6/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java b/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java
index f71097b..c6bd6cf 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java
@@ -28,6 +28,7 @@ import javax.annotation.Nullable;
 
 import org.apache.directory.api.util.Strings;
 import org.apache.kylin.cube.CubeInstance;
+import org.apache.kylin.metadata.draft.Draft;
 import org.apache.kylin.metadata.project.ProjectInstance;
 import org.apache.kylin.metadata.project.ProjectManager;
 import org.apache.kylin.metadata.realization.RealizationType;
@@ -94,6 +95,10 @@ public class ProjectService extends BasicService {
 
     @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#currentProject, 'ADMINISTRATION') or hasPermission(#currentProject, 'MANAGEMENT')")
     public ProjectInstance updateProject(ProjectInstance newProject, ProjectInstance currentProject) throws IOException {
+        if (!newProject.getName().equals(currentProject.getName())) {
+            return renameProject(newProject, currentProject);
+        }
+
         String newProjectName = newProject.getName();
         String newDescription = newProject.getDescription();
         LinkedHashMap<String, String> overrideProps = newProject.getOverrideKylinProps();
@@ -101,10 +106,27 @@ public class ProjectService extends BasicService {
         ProjectInstance updatedProject = getProjectManager().updateProject(currentProject, newProjectName, newDescription, overrideProps);
 
         logger.debug("Project updated.");
-
         return updatedProject;
     }
 
+    @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#currentProject, 'ADMINISTRATION')")
+    public ProjectInstance renameProject(ProjectInstance newProject, ProjectInstance currentProject) throws IOException {
+        String newProjectName = newProject.getName();
+        String newDescription = newProject.getDescription();
+        LinkedHashMap<String, String> overrideProps = newProject.getOverrideKylinProps();
+
+        // rename project but keep UUID, acl keeps the same
+        ProjectInstance renamedProject = getProjectManager().renameProject(currentProject, newProjectName, newDescription, overrideProps);
+
+        // rebind draft and project
+        for (Draft draft : getDraftManager().list(currentProject.getName())) {
+            draft.setProject(newProjectName);
+        }
+
+        logger.debug("Project rename.");
+        return renamedProject;
+    }
+
     @PostFilter(Constant.ACCESS_POST_FILTER_READ)
     public List<ProjectInstance> listProjects(final Integer limit, final Integer offset) {
         List<ProjectInstance> projects = listAllProjects(limit, offset);