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-HBase1.1.3
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>

Reply via email to