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 2018/02/04 00:51:21 UTC

[18/50] [abbrv] kylin git commit: Deep copy segment when duplicate cube instance

Deep copy segment when duplicate cube instance

(cherry picked from commit 4d5cf906fbe4cd840e2daf7333be8c52c7ccfb29)


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/73554fa7
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/73554fa7
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/73554fa7

Branch: refs/heads/sync
Commit: 73554fa71cd4bb519b19dab3c9e4a19e19d33d1e
Parents: ce1775a
Author: Yifan Zhang <ev...@gmail.com>
Authored: Wed Jan 24 18:45:34 2018 +0800
Committer: Li Yang <li...@apache.org>
Committed: Fri Jan 26 22:54:58 2018 +0800

----------------------------------------------------------------------
 .../org/apache/kylin/cube/CubeInstance.java     |  9 +++++++-
 .../org/apache/kylin/cube/CubeInstanceTest.java | 22 +++++++++++++++++---
 2 files changed, 27 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/73554fa7/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 6395abd..27918bc 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
@@ -191,6 +191,9 @@ public class CubeInstance extends RootPersistentEntity implements IRealization,
     }
 
     public CubeDesc getDescriptor() {
+        if (config == null) {
+            return null;
+        }
         return CubeDescManager.getInstance(config).getCubeDesc(descName);
     }
 
@@ -297,6 +300,10 @@ public class CubeInstance extends RootPersistentEntity implements IRealization,
 
     @Override
     public int getCost() {
+        if (getDescriptor() == null) {
+            //in case not initialized
+            return 0;
+        }
         int countedDimensionNum = getRowKeyColumnCount();
         int c = countedDimensionNum * COST_WEIGHT_DIMENSION + getMeasures().size() * COST_WEIGHT_MEASURE;
         DataModelDesc model = getModel();
@@ -348,7 +355,7 @@ public class CubeInstance extends RootPersistentEntity implements IRealization,
     }
 
     public void setSegments(Segments segments) {
-        this.segments = segments;
+        this.segments = new Segments<>(segments);
     }
 
     public CubeSegment getSegmentById(String segmentId) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/73554fa7/core-cube/src/test/java/org/apache/kylin/cube/CubeInstanceTest.java
----------------------------------------------------------------------
diff --git a/core-cube/src/test/java/org/apache/kylin/cube/CubeInstanceTest.java b/core-cube/src/test/java/org/apache/kylin/cube/CubeInstanceTest.java
index 9e517b9..dd3b12b 100644
--- a/core-cube/src/test/java/org/apache/kylin/cube/CubeInstanceTest.java
+++ b/core-cube/src/test/java/org/apache/kylin/cube/CubeInstanceTest.java
@@ -18,17 +18,18 @@
 
 package org.apache.kylin.cube;
 
-import static org.junit.Assert.assertNotNull;
-
 import java.io.DataInputStream;
 import java.io.FileInputStream;
 import java.io.InputStream;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 import org.apache.kylin.common.persistence.JsonSerializer;
 import org.apache.kylin.cube.cuboid.TreeCuboidScheduler;
+import org.apache.kylin.metadata.model.SegmentStatusEnum;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -56,6 +57,21 @@ public class CubeInstanceTest {
         for (Long cuboid : cuboids) {
             System.out.println(cuboid + ":" + cuboidsWithRowCnt.get(cuboid));
         }
-        assertNotNull(cuboidsWithRowCnt.get(255L));
+        Assert.assertNotNull(cuboidsWithRowCnt.get(255L));
+    }
+
+    @Test
+    public void copyCubeSegmentTest() {
+        int origSegCount = cubeInstance.getSegments().size();
+        CubeInstance newCubeInstance = CubeInstance.getCopyOf(cubeInstance);
+
+        CubeSegment mockSeg = new CubeSegment();
+        mockSeg.setUuid(UUID.randomUUID().toString());
+        mockSeg.setStorageLocationIdentifier(UUID.randomUUID().toString());
+        mockSeg.setStatus(SegmentStatusEnum.READY);
+        newCubeInstance.getSegments().add(mockSeg);
+
+        Assert.assertEquals(origSegCount, cubeInstance.getSegments().size());
+        Assert.assertEquals(origSegCount + 1, newCubeInstance.getSegments().size());
     }
 }