You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by zh...@apache.org on 2015/12/25 12:16:13 UTC
kylin git commit: KYLIN-1254 cube model will be overridden while
creating a new cube with the same name
Repository: kylin
Updated Branches:
refs/heads/1.x-staging 35988e3ce -> 95ef74fa3
KYLIN-1254 cube model will be overridden while creating a new cube with the same name
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/95ef74fa
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/95ef74fa
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/95ef74fa
Branch: refs/heads/1.x-staging
Commit: 95ef74fa34fa59d9e7d7d6b999a34729cc64ee3a
Parents: 35988e3
Author: jian <ji...@apache.org>
Authored: Fri Dec 25 19:15:34 2015 +0800
Committer: jian <ji...@apache.org>
Committed: Fri Dec 25 19:15:58 2015 +0800
----------------------------------------------------------------------
.../kylin/rest/controller/CubeController.java | 86 +++++++++++---------
1 file changed, 47 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/95ef74fa/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 85cbae7..2538f57 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
@@ -87,17 +87,17 @@ public class CubeController extends BasicController {
@Autowired
private AccessService accessService;
-
+
@Autowired
private JobService jobService;
- @RequestMapping(value = "", method = { RequestMethod.GET })
+ @RequestMapping(value = "", method = {RequestMethod.GET})
@ResponseBody
public List<CubeInstance> getCubes(@RequestParam(value = "cubeName", required = false) String cubeName, @RequestParam(value = "projectName", required = false) String projectName, @RequestParam(value = "limit", required = false) Integer limit, @RequestParam(value = "offset", required = false) Integer offset) {
return cubeService.getCubes(cubeName, projectName, limit, offset);
}
- @RequestMapping(value = "/{cubeName}", method = { RequestMethod.GET })
+ @RequestMapping(value = "/{cubeName}", method = {RequestMethod.GET})
@ResponseBody
public CubeInstance getCube(@PathVariable String cubeName) {
CubeInstance cube = cubeService.getCubeManager().getCube(cubeName);
@@ -115,7 +115,7 @@ public class CubeController extends BasicController {
* @throws UnknownHostException
* @throws IOException
*/
- @RequestMapping(value = "/{cubeName}/segs/{segmentName}/sql", method = { RequestMethod.GET })
+ @RequestMapping(value = "/{cubeName}/segs/{segmentName}/sql", method = {RequestMethod.GET})
@ResponseBody
public GeneralResponse getSql(@PathVariable String cubeName, @PathVariable String segmentName) {
CubeInstance cube = cubeService.getCubeManager().getCube(cubeName);
@@ -138,7 +138,7 @@ public class CubeController extends BasicController {
* @throws IOException
* @throws CubeIntegrityException
*/
- @RequestMapping(value = "/{cubeName}/notify_list", method = { RequestMethod.PUT })
+ @RequestMapping(value = "/{cubeName}/notify_list", method = {RequestMethod.PUT})
@ResponseBody
public void updateNotifyList(@PathVariable String cubeName, @RequestBody List<String> notifyList) {
CubeInstance cube = cubeService.getCubeManager().getCube(cubeName);
@@ -156,7 +156,7 @@ public class CubeController extends BasicController {
}
- @RequestMapping(value = "/{cubeName}/cost", method = { RequestMethod.PUT })
+ @RequestMapping(value = "/{cubeName}/cost", method = {RequestMethod.PUT})
@ResponseBody
public CubeInstance updateCubeCost(@PathVariable String cubeName, @RequestParam(value = "cost") int cost) {
try {
@@ -168,7 +168,7 @@ public class CubeController extends BasicController {
}
}
- @RequestMapping(value = "/{cubeName}/coprocessor", method = { RequestMethod.PUT })
+ @RequestMapping(value = "/{cubeName}/coprocessor", method = {RequestMethod.PUT})
@ResponseBody
public Map<String, Boolean> updateCubeCoprocessor(@PathVariable String cubeName, @RequestParam(value = "force") String force) {
try {
@@ -186,7 +186,7 @@ public class CubeController extends BasicController {
*
* @throws IOException
*/
- @RequestMapping(value = "/{cubeName}/segs/{segmentName}/refresh_lookup", method = { RequestMethod.PUT })
+ @RequestMapping(value = "/{cubeName}/segs/{segmentName}/refresh_lookup", method = {RequestMethod.PUT})
@ResponseBody
public CubeInstance rebuildLookupSnapshot(@PathVariable String cubeName, @PathVariable String segmentName, @RequestParam(value = "lookupTable") String lookupTable) {
try {
@@ -204,7 +204,7 @@ public class CubeController extends BasicController {
* @return
* @throws IOException
*/
- @RequestMapping(value = "/{cubeName}/rebuild", method = { RequestMethod.PUT })
+ @RequestMapping(value = "/{cubeName}/rebuild", method = {RequestMethod.PUT})
@ResponseBody
public JobInstance rebuild(@PathVariable String cubeName, @RequestBody JobBuildRequest jobBuildRequest) {
try {
@@ -221,7 +221,7 @@ public class CubeController extends BasicController {
}
}
- @RequestMapping(value = "/{cubeName}/disable", method = { RequestMethod.PUT })
+ @RequestMapping(value = "/{cubeName}/disable", method = {RequestMethod.PUT})
@ResponseBody
public CubeInstance disableCube(@PathVariable String cubeName) {
try {
@@ -239,7 +239,7 @@ public class CubeController extends BasicController {
}
}
- @RequestMapping(value = "/{cubeName}/purge", method = { RequestMethod.PUT })
+ @RequestMapping(value = "/{cubeName}/purge", method = {RequestMethod.PUT})
@ResponseBody
public CubeInstance purgeCube(@PathVariable String cubeName) {
try {
@@ -257,9 +257,9 @@ public class CubeController extends BasicController {
}
}
- @RequestMapping(value = "/{cubeName}/clone", method = { RequestMethod.PUT })
+ @RequestMapping(value = "/{cubeName}/clone", method = {RequestMethod.PUT})
@ResponseBody
- public CubeInstance cloneCube(@PathVariable String cubeName,@RequestBody CubeRequest cubeRequest) {
+ public CubeInstance cloneCube(@PathVariable String cubeName, @RequestBody CubeRequest cubeRequest) {
String targetCubeName = cubeRequest.getCubeName();
String project = cubeRequest.getProject();
@@ -283,7 +283,7 @@ public class CubeController extends BasicController {
try {
newModel = metaManager.createDataModelDesc(modelDesc);
} catch (IOException e) {
- throw new InternalErrorException("failed to clone DataModelDesc",e);
+ throw new InternalErrorException("failed to clone DataModelDesc", e);
}
cubeDesc.setName(targetCubeName);
@@ -292,14 +292,14 @@ public class CubeController extends BasicController {
cubeDesc.setModelName(targetCubeName);
CubeInstance newCube = null;
try {
- newCube = cubeService.createCubeAndDesc(targetCubeName,project,cubeDesc);
+ 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("New model already created and failed to rollback", e);
}
- throw new InternalErrorException("failed to clone DataModelDesc",e);
+ throw new InternalErrorException("failed to clone DataModelDesc", e);
}
return newCube;
@@ -307,7 +307,7 @@ public class CubeController extends BasicController {
}
- @RequestMapping(value = "/{cubeName}/enable", method = { RequestMethod.PUT })
+ @RequestMapping(value = "/{cubeName}/enable", method = {RequestMethod.PUT})
@ResponseBody
public CubeInstance enableCube(@PathVariable String cubeName) {
try {
@@ -324,7 +324,7 @@ public class CubeController extends BasicController {
}
}
- @RequestMapping(value = "/{cubeName}", method = { RequestMethod.DELETE })
+ @RequestMapping(value = "/{cubeName}", method = {RequestMethod.DELETE})
@ResponseBody
public void deleteCube(@PathVariable String cubeName) {
CubeInstance cube = cubeService.getCubeManager().getCube(cubeName);
@@ -347,7 +347,7 @@ public class CubeController extends BasicController {
* @return cubeRequest cube change request
* @throws IOException
*/
- @RequestMapping(value = "", method = { RequestMethod.POST })
+ @RequestMapping(value = "", method = {RequestMethod.POST})
@ResponseBody
public CubeRequest saveCubeDesc(@RequestBody CubeRequest cubeRequest) {
//Update Model
@@ -360,23 +360,10 @@ public class CubeController extends BasicController {
if (StringUtils.isEmpty(modelDesc.getName())) {
return errorRequest(cubeRequest, "Missing modelName.");
}
-
- try {
- DataModelDesc existingModel = metaManager.getDataModelDesc(modelDesc.getName());
- if (existingModel == null) {
- metaManager.createDataModelDesc(modelDesc);
- } else {
- modelDesc.setLastModified(existingModel.getLastModified());
- metaManager.updateDataModelDesc(modelDesc);
- }
- } catch (IOException e) {
- logger.error("Failed to deal with the request:" + e.getLocalizedMessage(), e);
- throw new InternalErrorException("Failed to deal with the request: " + e.getLocalizedMessage());
- }
CubeDesc desc = deserializeCubeDesc(cubeRequest);
if (desc == null) {
- return cubeRequest;
+ return errorRequest(cubeRequest, "Missing CubeDesc data in the request.");
}
if (StringUtils.isEmpty(desc.getName())) {
@@ -385,20 +372,41 @@ public class CubeController extends BasicController {
}
try {
+ metaManager.createDataModelDesc(modelDesc);
+ } catch (IOException e) {
+ logger.error("Failed to deal with the request:" + e.getLocalizedMessage(), e);
+ throw new InternalErrorException("Failed to deal with the request: " + e.getLocalizedMessage());
+ }
+
+ boolean updateCubeSuccess = false;
+
+ try {
+
desc.setUuid(UUID.randomUUID().toString());
String projectName = (null == cubeRequest.getProject()) ? ProjectInstance.DEFAULT_PROJECT_NAME : cubeRequest.getProject();
CubeInstance createdCube = cubeService.createCubeAndDesc(desc.getName(), projectName, desc);
+ updateCubeSuccess = true;
accessService.init(createdCube, AclPermission.ADMINISTRATION);
ProjectInstance project = cubeService.getProjectManager().getProject(projectName);
accessService.inherit(createdCube, project);
+
} catch (Exception e) {
logger.error("Failed to deal with the request.", e);
throw new InternalErrorException(e.getLocalizedMessage(), e);
- }
+ } finally {
+ if (!updateCubeSuccess) {
+ try {
+ metaManager.dropModel(modelDesc);
+ } catch (IOException e) {
+ logger.error("Failed to drop model " + modelDesc.getName() + " after cube created:" + e.getLocalizedMessage(), e);
+ throw new InternalErrorException("Failed to deal with the request: " + e.getLocalizedMessage());
+ }
+ }
+ }
cubeRequest.setUuid(desc.getUuid());
cubeRequest.setSuccessful(true);
return cubeRequest;
@@ -410,7 +418,7 @@ public class CubeController extends BasicController {
* @return cubeRequest cube change request
* @throws JsonProcessingException
*/
- @RequestMapping(value = "", method = { RequestMethod.PUT })
+ @RequestMapping(value = "", method = {RequestMethod.PUT})
@ResponseBody
public CubeRequest updateCubeDesc(@RequestBody CubeRequest cubeRequest) throws JsonProcessingException {
CubeDesc desc = deserializeCubeDesc(cubeRequest);
@@ -490,7 +498,7 @@ public class CubeController extends BasicController {
logger.error("Failed to deal with the request:" + e.getLocalizedMessage(), e);
throw new InternalErrorException("Failed to deal with the request: " + e.getLocalizedMessage());
} finally {
- if (updateModelSuccess == true && updateCubeSuccess == false ) {
+ if (updateModelSuccess == true && updateCubeSuccess == false) {
// recover data model
try {
oldModelDesc.setLastModified(modelDesc.getLastModified());
@@ -514,7 +522,7 @@ public class CubeController extends BasicController {
* @return true
* @throws IOException
*/
- @RequestMapping(value = "/{cubeName}/hbase", method = { RequestMethod.GET })
+ @RequestMapping(value = "/{cubeName}/hbase", method = {RequestMethod.GET})
@ResponseBody
public List<HBaseResponse> getHBaseInfo(@PathVariable String cubeName) {
List<HBaseResponse> hbase = new ArrayList<HBaseResponse>();
@@ -593,7 +601,7 @@ public class CubeController extends BasicController {
*/
private String omitMessage(List<String> errors) {
StringBuffer buffer = new StringBuffer();
- for (Iterator<String> iterator = errors.iterator(); iterator.hasNext();) {
+ for (Iterator<String> iterator = errors.iterator(); iterator.hasNext(); ) {
String string = (String) iterator.next();
buffer.append(string);
buffer.append("\n");