Repository: kylin Updated Branches: refs/heads/1.x-staging b0c5fd3bc -> 9ad77cca8
KYLIN-1128 clone cube metadata Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/9ad77cca Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/9ad77cca Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/9ad77cca Branch: refs/heads/1.x-staging Commit: 9ad77cca832dfabb562b8e12d5e28e9e505e245d Parents: d18b73a Author: jian <jiat...@163.com> Authored: Fri Dec 4 12:48:38 2015 +0800 Committer: jian <jiazh...@apache.org> Committed: Tue Dec 8 11:03:05 2015 +0800 ---------------------------------------------------------------------- .../apache/kylin/metadata/MetadataManager.java | 21 ++++++++++++++++++++ .../kylin/rest/controller/CubeController.java | 15 ++++++++++---- webapp/app/js/controllers/cubes.js | 4 +--- webapp/app/partials/cubes/cube_clone.html | 13 ------------ 4 files changed, 33 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/9ad77cca/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java ---------------------------------------------------------------------- diff --git a/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java b/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java index b540588..800ea44 100644 --- a/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java +++ b/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java @@ -40,6 +40,7 @@ import org.apache.kylin.common.restclient.CaseInsensitiveStringCache; import org.apache.kylin.common.util.JsonUtil; import org.apache.kylin.metadata.model.DataModelDesc; import org.apache.kylin.metadata.model.TableDesc; +import org.apache.kylin.metadata.project.ProjectManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -341,6 +342,26 @@ public class MetadataManager { return saveDataModelDesc(desc); } + // sync on update + public DataModelDesc dropModel(DataModelDesc desc) throws IOException { + logger.info("Dropping model '" + desc.getName() + "'"); + ResourceStore store = getStore(); + if (desc != null) + store.deleteResource(desc.getResourcePath()); + // clean model cache + this.afterModelDropped(desc); + return desc; + } + + private void afterModelDropped(DataModelDesc desc) { + removeModelCache(desc); + } + + private void removeModelCache(DataModelDesc desc) { + dataModelDescMap.remove(desc.getName()); + } + + private DataModelDesc saveDataModelDesc(DataModelDesc dataModelDesc) throws IOException { dataModelDesc.init(this.getAllTablesMap()); http://git-wip-us.apache.org/repos/asf/kylin/blob/9ad77cca/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java ---------------------------------------------------------------------- diff --git a/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java index b35a35c..95169da 100644 --- a/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java +++ b/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java @@ -27,6 +27,7 @@ import java.util.Map; import java.util.UUID; import org.apache.commons.lang.StringUtils; +import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.util.JsonUtil; import org.apache.kylin.cube.CubeInstance; import org.apache.kylin.cube.CubeSegment; @@ -260,7 +261,6 @@ public class CubeController extends BasicController { @ResponseBody public CubeInstance cloneCube(@PathVariable String cubeName,@RequestBody CubeRequest cubeRequest) { String targetCubeName = cubeRequest.getCubeName(); - String targetModelName = cubeRequest.getModelDescData(); String project = cubeRequest.getProject(); CubeInstance cube = cubeService.getCubeManager().getCube(cubeName); @@ -275,11 +275,13 @@ public class CubeController extends BasicController { DataModelDesc modelDesc = metaManager.getDataModelDesc(modelName); - modelDesc.setName(targetModelName); + //model name same as cube + modelDesc.setName(targetCubeName); modelDesc.setLastModified(0); modelDesc.setUuid(UUID.randomUUID().toString()); + DataModelDesc newModel = null; try { - metaManager.createDataModelDesc(modelDesc); + newModel = metaManager.createDataModelDesc(modelDesc); } catch (IOException e) { throw new InternalErrorException("failed to clone DataModelDesc",e); } @@ -287,11 +289,16 @@ public class CubeController extends BasicController { cubeDesc.setName(targetCubeName); cubeDesc.setLastModified(0); cubeDesc.setUuid(UUID.randomUUID().toString()); - cubeDesc.setModelName(targetModelName); + cubeDesc.setModelName(targetCubeName); CubeInstance newCube = null; try { newCube = cubeService.createCubeAndDesc(targetCubeName,project,cubeDesc); } catch (IOException e) { + try { + metaManager.dropModel(newModel); + } catch (IOException e1) { + throw new InternalErrorException("New model already created and failed to rollback",e); + } throw new InternalErrorException("failed to clone DataModelDesc",e); } http://git-wip-us.apache.org/repos/asf/kylin/blob/9ad77cca/webapp/app/js/controllers/cubes.js ---------------------------------------------------------------------- diff --git a/webapp/app/js/controllers/cubes.js b/webapp/app/js/controllers/cubes.js index 9f538b0..aada1ee 100755 --- a/webapp/app/js/controllers/cubes.js +++ b/webapp/app/js/controllers/cubes.js @@ -395,8 +395,7 @@ var cubeCloneCtrl = function ($scope, $modalInstance, CubeService, MessageServic $scope.projectModel = ProjectModel; $scope.targetObj={ - cubeName:cube.descriptor+"_clone", - modelName:cube.model.name+"_clone" + cubeName:cube.descriptor+"_clone" } $scope.cancel = function () { @@ -407,7 +406,6 @@ var cubeCloneCtrl = function ($scope, $modalInstance, CubeService, MessageServic $scope.cubeRequest = { cubeName:$scope.targetObj.cubeName, - modelDescData:$scope.targetObj.modelName, project:$scope.projectModel.selectedProject } http://git-wip-us.apache.org/repos/asf/kylin/blob/9ad77cca/webapp/app/partials/cubes/cube_clone.html ---------------------------------------------------------------------- diff --git a/webapp/app/partials/cubes/cube_clone.html b/webapp/app/partials/cubes/cube_clone.html index a20555b..2a5f485 100644 --- a/webapp/app/partials/cubes/cube_clone.html +++ b/webapp/app/partials/cubes/cube_clone.html @@ -55,19 +55,6 @@ </div> <div class="col-md-2"></div> </div> - <div class="row"> - <div class="col-md-2"></div> - <div class="col-md-8"> - <div class="row"> - <div class="form-group"> - <b>New Model Name:</b> - <br/> - <input type="text" class="form-control" ng-model="targetObj.modelName"/> - </div> - </div> - </div> - <div class="col-md-2"></div> - </div> </div> <div class="modal-footer"> <button class="btn btn-success" ng-click="cloneCube()">Submit</button>