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 2019/03/08 10:17:44 UTC

[kylin] branch master updated: KYLIN-3818 After Cube disabled, auto-merge cube job still running

This is an automated email from the ASF dual-hosted git repository.

shaofengshi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/master by this push:
     new fb52a1d  KYLIN-3818 After Cube disabled, auto-merge cube job still running
fb52a1d is described below

commit fb52a1df65e72d78f90eaf8b50cb0bc3c51c6a4a
Author: GinaZhai <na...@kyligence.io>
AuthorDate: Tue Feb 19 16:20:18 2019 +0800

    KYLIN-3818 After Cube disabled, auto-merge cube job still running
---
 .../java/org/apache/kylin/cube/CubeInstance.java   |   2 +-
 .../org/apache/kylin/cube/CubeManagerTest.java     | 174 +++++++++++----------
 2 files changed, 91 insertions(+), 85 deletions(-)

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 9c24a59..4599cf6 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
@@ -604,7 +604,7 @@ public class CubeInstance extends RootPersistentEntity implements IRealization,
             return false;
 
         return this.getConfig().isAutoMergeEnabled() && this.getDescriptor().getAutoMergeTimeRanges() != null
-                && this.getDescriptor().getAutoMergeTimeRanges().length > 0;
+                && this.getDescriptor().getAutoMergeTimeRanges().length > 0 && this.getStatus() == RealizationStatusEnum.READY;
     }
 
     public SegmentRange autoMergeCubeSegments() throws IOException {
diff --git a/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java b/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java
index deb7add..7a102bb 100644
--- a/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java
+++ b/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java
@@ -36,6 +36,7 @@ import org.apache.kylin.metadata.model.SegmentRange.TSRange;
 import org.apache.kylin.metadata.model.SegmentStatusEnum;
 import org.apache.kylin.metadata.project.ProjectInstance;
 import org.apache.kylin.metadata.project.ProjectManager;
+import org.apache.kylin.metadata.realization.RealizationStatusEnum;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -103,25 +104,26 @@ public class CubeManagerTest extends LocalFileMetadataTestCase {
         cube.getDescriptor().setAutoMergeTimeRanges(new long[] { 2000, 6000 });
         mgr.updateCube(new CubeUpdate(cube));
 
-        assertTrue(cube.needAutoMerge());
+        if (cube.getStatus() == RealizationStatusEnum.READY) {
+            assertTrue(cube.needAutoMerge());
 
-        // no segment at first
-        assertEquals(0, cube.getSegments().size());
-
-        // append first
-        CubeSegment seg1 = mgr.appendSegment(cube, new TSRange(0L, 1000L), null, null, null);
-        mgr.updateCubeSegStatus(seg1, SegmentStatusEnum.READY);
+            // no segment at first
+            assertEquals(0, cube.getSegments().size());
 
-        CubeSegment seg2 = mgr.appendSegment(cube, new TSRange(1000L, 2000L), null, null, null);
-        mgr.updateCubeSegStatus(seg2, SegmentStatusEnum.READY);
+            // append first
+            CubeSegment seg1 = mgr.appendSegment(cube, new TSRange(0L, 1000L), null, null, null);
+            mgr.updateCubeSegStatus(seg1, SegmentStatusEnum.READY);
 
-        cube = mgr.getCube(cube.getName());
-        assertEquals(2, cube.getSegments().size());
+            CubeSegment seg2 = mgr.appendSegment(cube, new TSRange(1000L, 2000L), null, null, null);
+            mgr.updateCubeSegStatus(seg2, SegmentStatusEnum.READY);
 
-        SegmentRange mergedSeg = cube.autoMergeCubeSegments();
+            cube = mgr.getCube(cube.getName());
+            assertEquals(2, cube.getSegments().size());
 
-        assertTrue(mergedSeg != null);
+            SegmentRange mergedSeg = cube.autoMergeCubeSegments();
 
+            assertTrue(mergedSeg != null);
+        }
     }
 
     @Test
@@ -265,50 +267,52 @@ public class CubeManagerTest extends LocalFileMetadataTestCase {
         cube.getDescriptor().setAutoMergeTimeRanges(new long[] { 2000, 6000 });
         mgr.updateCube(new CubeUpdate(cube));
 
-        assertTrue(cube.needAutoMerge());
+        if (cube.getStatus() == RealizationStatusEnum.READY) {
+            assertTrue(cube.needAutoMerge());
 
-        // no segment at first
-        assertEquals(0, cube.getSegments().size());
+            // no segment at first
+            assertEquals(0, cube.getSegments().size());
 
-        // append first
-        CubeSegment seg1 = mgr.appendSegment(cube, new TSRange(0L, 1000L));
-        mgr.updateCubeSegStatus(seg1, SegmentStatusEnum.READY);
+            // append first
+            CubeSegment seg1 = mgr.appendSegment(cube, new TSRange(0L, 1000L));
+            mgr.updateCubeSegStatus(seg1, SegmentStatusEnum.READY);
 
-        CubeSegment seg3 = mgr.appendSegment(cube, new TSRange(2000L, 4000L));
-        mgr.updateCubeSegStatus(seg3, SegmentStatusEnum.READY);
+            CubeSegment seg3 = mgr.appendSegment(cube, new TSRange(2000L, 4000L));
+            mgr.updateCubeSegStatus(seg3, SegmentStatusEnum.READY);
 
-        cube = mgr.getCube(cube.getName());
-        assertEquals(2, cube.getSegments().size());
+            cube = mgr.getCube(cube.getName());
+            assertEquals(2, cube.getSegments().size());
 
-        SegmentRange mergedSeg = cube.autoMergeCubeSegments();
+            SegmentRange mergedSeg = cube.autoMergeCubeSegments();
 
-        assertTrue(mergedSeg == null);
+            assertTrue(mergedSeg == null);
 
-        // append a new seg which will be merged
+            // append a new seg which will be merged
 
-        CubeSegment seg4 = mgr.appendSegment(cube, new TSRange(4000L, 8000L));
-        mgr.updateCubeSegStatus(seg4, SegmentStatusEnum.READY);
+            CubeSegment seg4 = mgr.appendSegment(cube, new TSRange(4000L, 8000L));
+            mgr.updateCubeSegStatus(seg4, SegmentStatusEnum.READY);
 
-        cube = mgr.getCube(cube.getName());
-        assertEquals(3, cube.getSegments().size());
+            cube = mgr.getCube(cube.getName());
+            assertEquals(3, cube.getSegments().size());
 
-        mergedSeg = cube.autoMergeCubeSegments();
+            mergedSeg = cube.autoMergeCubeSegments();
 
-        assertTrue(mergedSeg != null);
-        assertTrue((Long) mergedSeg.start.v == 2000 && (Long) mergedSeg.end.v == 8000);
+            assertTrue(mergedSeg != null);
+            assertTrue((Long) mergedSeg.start.v == 2000 && (Long) mergedSeg.end.v == 8000);
 
-        // fill the gap
+            // fill the gap
 
-        CubeSegment seg2 = mgr.appendSegment(cube, new TSRange(1000L, 2000L));
-        mgr.updateCubeSegStatus(seg2, SegmentStatusEnum.READY);
+            CubeSegment seg2 = mgr.appendSegment(cube, new TSRange(1000L, 2000L));
+            mgr.updateCubeSegStatus(seg2, SegmentStatusEnum.READY);
 
-        cube = mgr.getCube(cube.getName());
-        assertEquals(4, cube.getSegments().size());
+            cube = mgr.getCube(cube.getName());
+            assertEquals(4, cube.getSegments().size());
 
-        mergedSeg = cube.autoMergeCubeSegments();
+            mergedSeg = cube.autoMergeCubeSegments();
 
-        assertTrue(mergedSeg != null);
-        assertTrue((Long) mergedSeg.start.v == 0 && (Long) mergedSeg.end.v == 8000);
+            assertTrue(mergedSeg != null);
+            assertTrue((Long) mergedSeg.start.v == 0 && (Long) mergedSeg.end.v == 8000);
+        }
     }
 
     @Test
@@ -321,70 +325,72 @@ public class CubeManagerTest extends LocalFileMetadataTestCase {
         CubeDescManager.getInstance(getTestConfig()).updateCubeDesc(desc);
 
         cube = mgr.getCube(cube.getName());
-        assertTrue(cube.needAutoMerge());
+        if (cube.getStatus() == RealizationStatusEnum.READY) {
+            assertTrue(cube.needAutoMerge());
 
-        // no segment at first
-        assertEquals(0, cube.getSegments().size());
+            // no segment at first
+            assertEquals(0, cube.getSegments().size());
 
-        // append first
-        CubeSegment seg1 = mgr.appendSegment(cube, new TSRange(0L, 1000L));
-        mgr.updateCubeSegStatus(seg1, SegmentStatusEnum.READY);
+            // append first
+            CubeSegment seg1 = mgr.appendSegment(cube, new TSRange(0L, 1000L));
+            mgr.updateCubeSegStatus(seg1, SegmentStatusEnum.READY);
 
-        CubeSegment seg3 = mgr.appendSegment(cube, new TSRange(2000L, 4000L));
-        mgr.updateCubeSegStatus(seg3, SegmentStatusEnum.READY);
+            CubeSegment seg3 = mgr.appendSegment(cube, new TSRange(2000L, 4000L));
+            mgr.updateCubeSegStatus(seg3, SegmentStatusEnum.READY);
 
-        cube = mgr.getCube(cube.getName());
-        assertEquals(2, cube.getSegments().size());
+            cube = mgr.getCube(cube.getName());
+            assertEquals(2, cube.getSegments().size());
 
-        SegmentRange mergedSeg = cube.autoMergeCubeSegments();
-        assertTrue(mergedSeg == null);
+            SegmentRange mergedSeg = cube.autoMergeCubeSegments();
+            assertTrue(mergedSeg == null);
 
-        assertEquals(2, cube.getSegments().size());
+            assertEquals(2, cube.getSegments().size());
 
-        // append a new seg
-        CubeSegment seg4 = mgr.appendSegment(cube, new TSRange(4000L, 8000L));
-        mgr.updateCubeSegStatus(seg4, SegmentStatusEnum.READY);
+            // append a new seg
+            CubeSegment seg4 = mgr.appendSegment(cube, new TSRange(4000L, 8000L));
+            mgr.updateCubeSegStatus(seg4, SegmentStatusEnum.READY);
 
-        cube = mgr.getCube(cube.getName());
-        assertEquals(3, cube.getSegments().size());
+            cube = mgr.getCube(cube.getName());
+            assertEquals(3, cube.getSegments().size());
 
-        cube.getDescriptor().setVolatileRange(10000);
+            cube.getDescriptor().setVolatileRange(10000);
 
-        mergedSeg = cube.autoMergeCubeSegments();
-        assertTrue(mergedSeg == null);
+            mergedSeg = cube.autoMergeCubeSegments();
+            assertTrue(mergedSeg == null);
 
-        //will merge after change the volatile_range
+            //will merge after change the volatile_range
 
-        cube.getDescriptor().setVolatileRange(0);
+            cube.getDescriptor().setVolatileRange(0);
 
-        mergedSeg = cube.autoMergeCubeSegments();
-        assertTrue(mergedSeg != null);
-        assertTrue((Long) mergedSeg.start.v == 2000 && (Long) mergedSeg.end.v == 8000);
+            mergedSeg = cube.autoMergeCubeSegments();
+            assertTrue(mergedSeg != null);
+            assertTrue((Long) mergedSeg.start.v == 2000 && (Long) mergedSeg.end.v == 8000);
 
-        // fill the gap
-        CubeSegment seg2 = mgr.appendSegment(cube, new TSRange(1000L, 2000L));
-        mgr.updateCubeSegStatus(seg2, SegmentStatusEnum.READY);
+            // fill the gap
+            CubeSegment seg2 = mgr.appendSegment(cube, new TSRange(1000L, 2000L));
+            mgr.updateCubeSegStatus(seg2, SegmentStatusEnum.READY);
 
-        cube = mgr.getCube(cube.getName());
-        assertEquals(4, cube.getSegments().size());
+            cube = mgr.getCube(cube.getName());
+            assertEquals(4, cube.getSegments().size());
 
-        cube.getDescriptor().setVolatileRange(10000);
+            cube.getDescriptor().setVolatileRange(10000);
 
-        mergedSeg = cube.autoMergeCubeSegments();
-        assertTrue(mergedSeg == null);
+            mergedSeg = cube.autoMergeCubeSegments();
+            assertTrue(mergedSeg == null);
 
-        //will merge after change the volatile_range
-        cube.getDescriptor().setVolatileRange(0);
+            //will merge after change the volatile_range
+            cube.getDescriptor().setVolatileRange(0);
 
-        mergedSeg = cube.autoMergeCubeSegments();
-        assertTrue(mergedSeg != null);
-        assertTrue((Long) mergedSeg.start.v == 0 && (Long) mergedSeg.end.v == 8000);
+            mergedSeg = cube.autoMergeCubeSegments();
+            assertTrue(mergedSeg != null);
+            assertTrue((Long) mergedSeg.start.v == 0 && (Long) mergedSeg.end.v == 8000);
 
-        cube.getDescriptor().setVolatileRange(1000);
+            cube.getDescriptor().setVolatileRange(1000);
 
-        mergedSeg = cube.autoMergeCubeSegments();
-        assertTrue(mergedSeg != null);
-        assertTrue((Long) mergedSeg.start.v == 0 && (Long) mergedSeg.end.v == 2000);
+            mergedSeg = cube.autoMergeCubeSegments();
+            assertTrue(mergedSeg != null);
+            assertTrue((Long) mergedSeg.start.v == 0 && (Long) mergedSeg.end.v == 2000);
+        }
     }
 
     @Test