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);