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);