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 2015/12/23 03:26:26 UTC
[22/50] [abbrv] kylin git commit: KYLIN-1128 clone cube metadata
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 <ji...@163.com>
Authored: Fri Dec 4 12:48:38 2015 +0800
Committer: jian <ji...@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>