minor refactor: avoid exposing cubedesc's getError public api
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/59d50646 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/59d50646 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/59d50646 Branch: refs/heads/sync Commit: 59d5064673282ba36783e0796523ad83c2dc5e8c Parents: 16236ef Author: Hongbin Ma <m...@kyligence.io> Authored: Fri Jan 26 19:13:12 2018 +0800 Committer: Li Yang <liy...@apache.org> Committed: Fri Jan 26 22:54:58 2018 +0800 ---------------------------------------------------------------------- .../org/apache/kylin/cube/CubeDescManager.java | 2 +- .../org/apache/kylin/cube/CubeInstance.java | 29 ++++++++++-------- .../org/apache/kylin/cube/model/CubeDesc.java | 13 ++------ .../kylin/rest/controller/CubeController.java | 32 ++++++++++++-------- .../apache/kylin/rest/service/CubeService.java | 12 ++++---- 5 files changed, 47 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/59d50646/core-cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java index cd43f15..1db66e1 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java @@ -198,7 +198,7 @@ public class CubeDescManager { postProcessCubeDesc(cubeDesc); // Check base validation - if (!cubeDesc.getError().isEmpty()) { + if (cubeDesc.isBroken()) { return cubeDesc; } // Semantic validation http://git-wip-us.apache.org/repos/asf/kylin/blob/59d50646/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java index a299203..6395abd 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java @@ -6,15 +6,15 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. -*/ + */ package org.apache.kylin.cube; @@ -130,13 +130,13 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, // default constructor for jackson public CubeInstance() { } - + public CubeInstance latestCopyForWrite() { CubeManager mgr = CubeManager.getInstance(config); CubeInstance latest = mgr.getCube(name); // in case this object is out-of-date return mgr.copyForWrite(latest); } - + void init(KylinConfig config) { CubeDesc cubeDesc = CubeDescManager.getInstance(config).getCubeDesc(descName); checkNotNull(cubeDesc, "cube descriptor '%s' (for cube '%s') not found", descName, name); @@ -144,9 +144,7 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, if (cubeDesc.isBroken()) { setStatus(RealizationStatusEnum.DESCBROKEN); logger.error("cube descriptor {} (for cube '{}') is broken", cubeDesc.getResourcePath(), name); - for (String error : cubeDesc.getError()) { - logger.error("Error: {}", error); - } + logger.error("Errors: {}", cubeDesc.getErrorsAsString()); } else if (getStatus() == RealizationStatusEnum.DESCBROKEN) { setStatus(RealizationStatusEnum.DISABLED); logger.info("cube {} changed from DESCBROKEN to DISABLED", name); @@ -217,7 +215,7 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, return (getStatus() == RealizationStatusEnum.DISABLED || getStatus() == RealizationStatusEnum.DESCBROKEN) && segments.isEmpty(); } - + @Override public String resourceName() { return name; @@ -301,7 +299,12 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, public int getCost() { int countedDimensionNum = getRowKeyColumnCount(); int c = countedDimensionNum * COST_WEIGHT_DIMENSION + getMeasures().size() * COST_WEIGHT_MEASURE; - for (JoinTableDesc join : getModel().getJoinTables()) { + DataModelDesc model = getModel(); + if (model == null) { + //in case broken cube + return 0; + } + for (JoinTableDesc join : model.getJoinTables()) { if (join.getJoin().isInnerJoin()) c += CubeInstance.COST_WEIGHT_INNER_JOIN; } @@ -356,7 +359,7 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, } return null; } - + public CubeSegment[] regetSegments(CubeSegment... segs) { CubeSegment[] r = new CubeSegment[segs.length]; for (int i = 0; i < segs.length; i++) { @@ -477,6 +480,7 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, /** * Get cuboid level count except base cuboid + * * @return */ public int getBuildLevel() { @@ -562,7 +566,8 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, } public SegmentRange autoMergeCubeSegments() throws IOException { - return segments.autoMergeCubeSegments(needAutoMerge(), getName(), getDescriptor().getAutoMergeTimeRanges(), getDescriptor().getVolatileRange()); + return segments.autoMergeCubeSegments(needAutoMerge(), getName(), getDescriptor().getAutoMergeTimeRanges(), + getDescriptor().getVolatileRange()); } public Segments calculateToBeSegments(CubeSegment newSegment) { http://git-wip-us.apache.org/repos/asf/kylin/blob/59d50646/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java index 2369629..dbd8708 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java @@ -82,6 +82,7 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.base.Joiner; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -1215,16 +1216,8 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { this.errors.add(message); } - public List<String> getError() { - return this.errors; - } - - public String getErrorMsg() { - StringBuffer sb = new StringBuffer(); - for (String error : errors) { - sb.append(error + " "); - } - return sb.toString(); + public String getErrorsAsString() { + return Joiner.on("; ").join(errors); } public HBaseMappingDesc getHbaseMapping() { http://git-wip-us.apache.org/repos/asf/kylin/blob/59d50646/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java index 89c11a8..ff9ecf7 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java @@ -6,15 +6,15 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. -*/ + */ package org.apache.kylin.rest.controller; @@ -93,7 +93,6 @@ import org.springframework.web.bind.annotation.ResponseBody; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; -import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -209,7 +208,7 @@ public class CubeController extends BasicController { /** * Get SQL of a Cube segment * - * @param cubeName Cube Name + * @param cubeName Cube Name * @param segmentName Segment Name * @return * @throws IOException @@ -319,7 +318,9 @@ public class CubeController extends BasicController { } } - /** Build/Rebuild a cube segment */ + /** + * Build/Rebuild a cube segment + */ @RequestMapping(value = "/{cubeName}/build", method = { RequestMethod.PUT }, produces = { "application/json" }) @ResponseBody public JobInstance build(@PathVariable String cubeName, @RequestBody JobBuildRequest req) { @@ -328,7 +329,9 @@ public class CubeController extends BasicController { /** Build/Rebuild a cube segment */ - /** Build/Rebuild a cube segment */ + /** + * Build/Rebuild a cube segment + */ @RequestMapping(value = "/{cubeName}/rebuild", method = { RequestMethod.PUT }, produces = { "application/json" }) @ResponseBody public JobInstance rebuild(@PathVariable String cubeName, @RequestBody JobBuildRequest req) { @@ -336,7 +339,9 @@ public class CubeController extends BasicController { req.getBuildType(), req.isForce() || req.isForceMergeEmptySegment()); } - /** Build/Rebuild a cube segment by source offset */ + /** + * Build/Rebuild a cube segment by source offset + */ @RequestMapping(value = "/{cubeName}/build2", method = { RequestMethod.PUT }, produces = { "application/json" }) @ResponseBody public JobInstance build2(@PathVariable String cubeName, @RequestBody JobBuildRequest2 req) { @@ -355,7 +360,9 @@ public class CubeController extends BasicController { return rebuild2(cubeName, req); } - /** Build/Rebuild a cube segment by source offset */ + /** + * Build/Rebuild a cube segment by source offset + */ @RequestMapping(value = "/{cubeName}/rebuild2", method = { RequestMethod.PUT }, produces = { "application/json" }) @ResponseBody public JobInstance rebuild2(@PathVariable String cubeName, @RequestBody JobBuildRequest2 req) { @@ -415,7 +422,7 @@ public class CubeController extends BasicController { /** * Send a optimize cube segment job * - * @param cubeName Cube ID + * @param cubeName Cube ID * @param segmentID for segment to be optimized */ @RequestMapping(value = "/{cubeName}/recover_segment_optimize/{segmentID}", method = { RequestMethod.PUT }) @@ -661,8 +668,8 @@ public class CubeController extends BasicController { throw new InternalErrorException("Failed to deal with the request: " + e.getLocalizedMessage()); } - if (!desc.getError().isEmpty()) { - updateRequest(cubeRequest, false, Joiner.on("\n").join(desc.getError())); + if (desc.isBroken()) { + updateRequest(cubeRequest, false, desc.getErrorsAsString()); return cubeRequest; } @@ -959,6 +966,7 @@ public class CubeController extends BasicController { /** * Initiate the very beginning of a streaming cube. Will seek the latest offests of each partition from streaming * source (kafka) and record in the cube descriptor; In the first build job, it will use these offests as the start point. + * * @param cubeName * @return */ http://git-wip-us.apache.org/repos/asf/kylin/blob/59d50646/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java index 186b1ed..c01308d 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java @@ -203,8 +203,8 @@ public class CubeService extends BasicService implements InitializingBean { createdDesc = getCubeDescManager().createCubeDesc(desc); - if (!createdDesc.getError().isEmpty()) { - throw new BadRequestException(createdDesc.getErrorMsg()); + if (createdDesc.isBroken()) { + throw new BadRequestException(createdDesc.getErrorsAsString()); } int cuboidCount = CuboidCLI.simulateCuboidGeneration(createdDesc, false); @@ -633,8 +633,8 @@ public class CubeService extends BasicService implements InitializingBean { throw new ForbiddenException(msg.getUPDATE_CUBE_NO_RIGHT()); } - if (!desc.getError().isEmpty()) { - throw new BadRequestException(desc.getErrorMsg()); + if (desc.isBroken()) { + throw new BadRequestException(desc.getErrorsAsString()); } return desc; @@ -683,8 +683,8 @@ public class CubeService extends BasicService implements InitializingBean { throw new ForbiddenException(msg.getUPDATE_CUBE_NO_RIGHT()); } - if (!desc.getError().isEmpty()) { - throw new BadRequestException(desc.getErrorMsg()); + if (desc.isBroken()) { + throw new BadRequestException(desc.getErrorsAsString()); } return desc;