You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2015/06/29 07:53:31 UTC
incubator-kylin git commit: KYLIN-807 bug fix on writing conflict
Repository: incubator-kylin
Updated Branches:
refs/heads/0.8 c2bb3a763 -> 5a4f5b979
KYLIN-807 bug fix on writing conflict
Project: http://git-wip-us.apache.org/repos/asf/incubator-kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kylin/commit/5a4f5b97
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kylin/tree/5a4f5b97
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kylin/diff/5a4f5b97
Branch: refs/heads/0.8
Commit: 5a4f5b979c08d3afe710ab590ca320b6f5b744c2
Parents: c2bb3a7
Author: shaofengshi <sh...@apache.org>
Authored: Mon Jun 29 13:52:58 2015 +0800
Committer: shaofengshi <sh...@apache.org>
Committed: Mon Jun 29 13:52:58 2015 +0800
----------------------------------------------------------------------
.../java/org/apache/kylin/cube/CubeManager.java | 22 +++++++++++++-------
1 file changed, 14 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/5a4f5b97/cube/src/main/java/org/apache/kylin/cube/CubeManager.java
----------------------------------------------------------------------
diff --git a/cube/src/main/java/org/apache/kylin/cube/CubeManager.java b/cube/src/main/java/org/apache/kylin/cube/CubeManager.java
index 02f6211..f9a0f11 100644
--- a/cube/src/main/java/org/apache/kylin/cube/CubeManager.java
+++ b/cube/src/main/java/org/apache/kylin/cube/CubeManager.java
@@ -279,17 +279,23 @@ public class CubeManager implements IRealizationProvider {
List<String> toRemoveResources = Lists.newArrayList();
if (cubeBuilder.getToRemoveSegs() != null) {
- cube.getSegments().removeAll(Arrays.asList(cubeBuilder.getToRemoveSegs()));
-
- for (CubeSegment toRemoveSeg : cubeBuilder.getToRemoveSegs()) {
- toRemoveResources.add(toRemoveSeg.getStatisticsResourcePath());
+ Iterator<CubeSegment> iterator = cube.getSegments().iterator();
+ while (iterator.hasNext()) {
+ CubeSegment currentSeg = iterator.next();
+ for (CubeSegment toRemoveSeg : cubeBuilder.getToRemoveSegs()) {
+ if(currentSeg.getUuid().equals(toRemoveSeg.getUuid())) {
+ iterator.remove();
+ toRemoveResources.add(toRemoveSeg.getStatisticsResourcePath());
+ }
+ }
}
+
}
if (cubeBuilder.getToUpdateSegs() != null) {
for (CubeSegment segment : cubeBuilder.getToUpdateSegs()) {
for (int i = 0; i < cube.getSegments().size(); i++) {
- if (cube.getSegments().get(i).getName().equals(segment.getName())) {
+ if (cube.getSegments().get(i).getUuid().equals(segment.getUuid())) {
cube.getSegments().set(i, segment);
}
}
@@ -300,7 +306,7 @@ public class CubeManager implements IRealizationProvider {
Collections.sort(cube.getSegments());
if (!validateReadySegments(cube)) {
- return cube;
+ throw new IllegalStateException("Has invalid Ready segments in cube " + cube.getName());
}
if (cubeBuilder.getStatus() != null) {
@@ -318,7 +324,7 @@ public class CubeManager implements IRealizationProvider {
try {
getStore().putResource(cube.getResourcePath(), cube, CUBE_SERIALIZER);
} catch (IllegalStateException ise) {
-
+ logger.warn("Write conflict to update cube " + cube.getName() + " at try " + retry + ", will retry...");
if (retry >= 7) {
logger.error("Retried 7 times till got error, abandoning...", ise);
throw ise;
@@ -645,7 +651,7 @@ public class CubeManager implements IRealizationProvider {
toRemoveSegs.add(segment);
}
- logger.info("Promoting cube " + cube + ", new segments " + newSegments);
+ logger.info("Promoting cube " + cube + ", new segments " + Arrays.toString(newSegments) + ", to remove segments " + toRemoveSegs);
CubeBuilder cubeBuilder = new CubeBuilder(cube);
cubeBuilder.setToRemoveSegs(toRemoveSegs.toArray(new CubeSegment[toRemoveSegs.size()])).setToUpdateSegs(newSegments).setStatus(RealizationStatusEnum.READY);