APACHE-KYLIN-2783: move method isValid from Cuboid to CuboidScheduler

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

Branch: refs/heads/yaho-cube-planner
Commit: b6ec7e93dec0efc01ba67916a928b289d3d67280
Parents: 9b67d58
Author: Zhong <[email protected]>
Authored: Thu Aug 17 21:13:51 2017 +0800
Committer: Zhong <[email protected]>
Committed: Fri Sep 8 11:31:38 2017 +0800

----------------------------------------------------------------------
 .../org/apache/kylin/cube/cuboid/Cuboid.java    | 13 +----
 .../org/apache/kylin/cube/cuboid/CuboidCLI.java | 15 +++---
 .../kylin/cube/cuboid/CuboidScheduler.java      |  3 ++
 .../cube/cuboid/DefaultCuboidScheduler.java     | 13 ++++-
 .../kylin/cube/cuboid/TreeCuboidScheduler.java  | 11 +++-
 .../kylin/cube/cuboid/CuboidSchedulerTest.java  |  4 +-
 .../apache/kylin/cube/cuboid/CuboidTest.java    | 54 ++++++++++----------
 7 files changed, 61 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/b6ec7e93/core-cube/src/main/java/org/apache/kylin/cube/cuboid/Cuboid.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/Cuboid.java 
b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/Cuboid.java
index b2cf339..fa83775 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/Cuboid.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/Cuboid.java
@@ -118,17 +118,13 @@ public class Cuboid implements Comparable<Cuboid>, 
Serializable {
         }
         Cuboid cuboid = cubeCache.get(cuboidID);
         if (cuboid == null) {
-            long validCuboidID = translateToValidCuboid(cuboidScheduler, 
cuboidID);
+            long validCuboidID = cuboidScheduler.findBestMatchCuboid(cuboidID);
             cuboid = new Cuboid(cuboidScheduler.getCubeDesc(), cuboidID, 
validCuboidID);
             cubeCache.put(cuboidID, cuboid);
         }
         return cuboid;
     }
 
-    public static boolean isValid(CuboidScheduler cuboidScheduler, long 
cuboidID) {
-        return cuboidScheduler.getAllCuboidIds().contains(cuboidID);
-    }
-
     public static long getBaseCuboidId(CubeDesc cube) {
         return cube.getRowkey().getFullMask();
     }
@@ -137,13 +133,6 @@ public class Cuboid implements Comparable<Cuboid>, 
Serializable {
         return findForMandatory(cube, getBaseCuboidId(cube));
     }
 
-    static long translateToValidCuboid(CuboidScheduler cuboidScheduler, long 
cuboidID) {
-        if (isValid(cuboidScheduler, cuboidID)) {
-            return cuboidID;
-        }
-        return cuboidScheduler.findBestMatchCuboid(cuboidID);
-    }
-
     // 
============================================================================
 
     private CubeDesc cubeDesc;

http://git-wip-us.apache.org/repos/asf/kylin/blob/b6ec7e93/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidCLI.java
----------------------------------------------------------------------
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidCLI.java 
b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidCLI.java
index d27ca7a..4300a6c 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidCLI.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidCLI.java
@@ -88,29 +88,28 @@ public class CuboidCLI {
                 //check all valid and invalid
                 for (long i = 0; i < baseCuboid; ++i) {
                     if (cuboidSet.contains(i)) {
-                        if 
(!Cuboid.isValid(cubeDesc.getInitialCuboidScheduler(), i)) {
+                        if (!cubeDesc.getInitialCuboidScheduler().isValid(i)) {
                             throw new RuntimeException();
                         }
 
-                        if 
(Cuboid.translateToValidCuboid(cubeDesc.getInitialCuboidScheduler(), i) != i) {
+                        if 
(cubeDesc.getInitialCuboidScheduler().findBestMatchCuboid(i) != i) {
                             throw new RuntimeException();
                         }
                     } else {
-                        if 
(Cuboid.isValid(cubeDesc.getInitialCuboidScheduler(), i)) {
+                        if (cubeDesc.getInitialCuboidScheduler().isValid(i)) {
                             throw new RuntimeException();
                         }
 
-                        long corrected = 
Cuboid.translateToValidCuboid(cubeDesc.getInitialCuboidScheduler(), i);
+                        long corrected = 
cubeDesc.getInitialCuboidScheduler().findBestMatchCuboid(i);
                         if (corrected == i) {
                             throw new RuntimeException();
                         }
 
-                        if 
(!Cuboid.isValid(cubeDesc.getInitialCuboidScheduler(), corrected)) {
+                        if 
(!cubeDesc.getInitialCuboidScheduler().isValid(corrected)) {
                             throw new RuntimeException();
                         }
 
-                        if 
(Cuboid.translateToValidCuboid(cubeDesc.getInitialCuboidScheduler(),
-                                corrected) != corrected) {
+                        if 
(cubeDesc.getInitialCuboidScheduler().findBestMatchCuboid(corrected) != 
corrected) {
                             throw new RuntimeException();
                         }
                     }
@@ -126,7 +125,7 @@ public class CuboidCLI {
         long baseCuboid = Cuboid.getBaseCuboidId(cube);
         TreeSet<Long> expectedCuboids = new TreeSet<Long>();
         for (long cuboid = 0; cuboid <= baseCuboid; cuboid++) {
-            if (Cuboid.isValid(cube.getInitialCuboidScheduler(), cuboid)) {
+            if (cube.getInitialCuboidScheduler().isValid(cuboid)) {
                 expectedCuboids.add(cuboid);
             }
         }

http://git-wip-us.apache.org/repos/asf/kylin/blob/b6ec7e93/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidScheduler.java
----------------------------------------------------------------------
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidScheduler.java 
b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidScheduler.java
index c08b9db..cef0f77 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidScheduler.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/CuboidScheduler.java
@@ -63,6 +63,9 @@ abstract public class CuboidScheduler {
     /** Returns a cuboid on the tree that best matches the request cuboid. */
     abstract public long findBestMatchCuboid(long requestCuboid);
 
+    /** Returns whether requestCuboid is valid or not*/
+    abstract public boolean isValid(long requestCuboid);
+
     /** Returns the key for what this cuboid scheduler responsible for*/
     abstract public String getResponsibleKey();
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/b6ec7e93/core-cube/src/main/java/org/apache/kylin/cube/cuboid/DefaultCuboidScheduler.java
----------------------------------------------------------------------
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/DefaultCuboidScheduler.java
 
b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/DefaultCuboidScheduler.java
index c756079..d05786e 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/DefaultCuboidScheduler.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/DefaultCuboidScheduler.java
@@ -87,6 +87,11 @@ public class DefaultCuboidScheduler extends CuboidScheduler {
         return Sets.newHashSet(allCuboidIds);
     }
 
+    @Override
+    public boolean isValid(long requestCuboid) {
+        return allCuboidIds.contains(requestCuboid);
+    }
+
     /**
      * Collect cuboid from bottom up, considering all factor including black 
list
      * Build tree steps:
@@ -205,6 +210,10 @@ public class DefaultCuboidScheduler extends 
CuboidScheduler {
     }
 
     public long findBestMatchCuboid1(long cuboid) {
+        if (isValid(cuboid)) {
+            return cuboid;
+        }
+
         List<Long> onTreeCandidates = Lists.newArrayList();
         for (AggregationGroup agg : cubeDesc.getAggregationGroups()) {
             Long candidate = translateToOnTreeCuboid(agg, cuboid);
@@ -218,7 +227,7 @@ public class DefaultCuboidScheduler extends CuboidScheduler 
{
         }
 
         long onTreeCandi = Collections.min(onTreeCandidates, 
Cuboid.cuboidSelectComparator);
-        if (allCuboidIds.contains(onTreeCandi)) {
+        if (isValid(onTreeCandi)) {
             return onTreeCandi;
         }
 
@@ -228,7 +237,7 @@ public class DefaultCuboidScheduler extends CuboidScheduler 
{
     public long doFindBestMatchCuboid1(long cuboid) {
         long parent = getOnTreeParent(cuboid);
         while (parent > 0) {
-            if (allCuboidIds.contains(parent)) {
+            if (isValid(parent)) {
                 break;
             }
             parent = getOnTreeParent(parent);

http://git-wip-us.apache.org/repos/asf/kylin/blob/b6ec7e93/core-cube/src/main/java/org/apache/kylin/cube/cuboid/TreeCuboidScheduler.java
----------------------------------------------------------------------
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/TreeCuboidScheduler.java 
b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/TreeCuboidScheduler.java
index 73f4824..414fc4a 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/cube/cuboid/TreeCuboidScheduler.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/cube/cuboid/TreeCuboidScheduler.java
@@ -69,6 +69,11 @@ public class TreeCuboidScheduler extends CuboidScheduler {
         return cuboidTree.findBestMatchCuboid(cuboidId);
     }
 
+    @Override
+    public boolean isValid(long requestCuboid) {
+        return cuboidTree.isValid(requestCuboid);
+    }
+
     public static class CuboidTree {
         private int treeLevels;
 
@@ -129,13 +134,17 @@ public class TreeCuboidScheduler extends CuboidScheduler {
 
         public long findBestMatchCuboid(long cuboidId) {
             // exactly match
-            if (index.containsKey(cuboidId)) {
+            if (isValid(cuboidId)) {
                 return cuboidId;
             }
 
             return findBestParent(cuboidId).cuboidId;
         }
 
+        public boolean isValid(long cuboidId) {
+            return index.containsKey(cuboidId);
+        }
+
         private int getCuboidCount(long cuboidId) {
             int r = 1;
             for (Long child : getSpanningCuboid(cuboidId)) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/b6ec7e93/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidSchedulerTest.java
----------------------------------------------------------------------
diff --git 
a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidSchedulerTest.java 
b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidSchedulerTest.java
index 3992ef9..3f3a7c4 100644
--- 
a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidSchedulerTest.java
+++ 
b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidSchedulerTest.java
@@ -115,7 +115,7 @@ public class CuboidSchedulerTest extends 
LocalFileMetadataTestCase {
             System.out.println("Spanning result for " + cuboidId + "(" + 
Long.toBinaryString(cuboidId) + "): " + toString(spannings));
 
             for (long child : spannings) {
-                assertTrue(Cuboid.isValid(scheduler, child));
+                assertTrue(scheduler.isValid(child));
             }
         }
 
@@ -335,7 +335,7 @@ public class CuboidSchedulerTest extends 
LocalFileMetadataTestCase {
         CuboidScheduler scheduler = cube.getInitialCuboidScheduler();
 
         Cuboid baseCuboid = Cuboid.getBaseCuboid(cube);
-        assertTrue(Cuboid.isValid(scheduler, baseCuboid.getId()));
+        assertTrue(scheduler.isValid(baseCuboid.getId()));
 
         List<Long> spanningChild = 
scheduler.getSpanningCuboid(baseCuboid.getId());
         assertTrue(spanningChild.size() > 0);

http://git-wip-us.apache.org/repos/asf/kylin/blob/b6ec7e93/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidTest.java
----------------------------------------------------------------------
diff --git 
a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidTest.java 
b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidTest.java
index ab0c666..8dc944b 100644
--- a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidTest.java
+++ b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/CuboidTest.java
@@ -76,23 +76,23 @@ public class CuboidTest extends LocalFileMetadataTestCase {
         CuboidScheduler cuboidScheduler = cube.getInitialCuboidScheduler();
 
         // base
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 0));
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("111111111")));
+        assertEquals(false, cuboidScheduler.isValid(0));
+        assertEquals(true, cuboidScheduler.isValid(toLong("111111111")));
 
         // mandatory column
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("011111110")));
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("100000000")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("011111110")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("100000000")));
 
         // zero tail
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("111111000")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("111111000")));
 
         // aggregation group & zero tail
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("110000111")));
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("110111000")));
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("111110111")));
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("111110001")));
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("111110100")));
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("110000100")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("110000111")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("110111000")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("111110111")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("111110001")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("111110100")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("110000100")));
     }
 
     @Test
@@ -127,25 +127,25 @@ public class CuboidTest extends LocalFileMetadataTestCase 
{
         CubeDesc cube = getTestKylinCubeWithoutSeller();
         CuboidScheduler cuboidScheduler = cube.getInitialCuboidScheduler();
 
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("111111111")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("111111111")));
 
         // base
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 0));
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("11111111")));
+        assertEquals(false, cuboidScheduler.isValid(0));
+        assertEquals(true, cuboidScheduler.isValid(toLong("11111111")));
 
         // aggregation group & zero tail
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("10000111")));
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("10001111")));
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("11001111")));
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("10000001")));
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("10000101")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("10000111")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("10001111")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("11001111")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("10000001")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("10000101")));
 
         // hierarchy
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("10100000")));
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("10110000")));
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("10111000")));
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("10001000")));
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("10011000")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("10100000")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("10110000")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("10111000")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("10001000")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("10011000")));
     }
 
     @Test
@@ -153,11 +153,11 @@ public class CuboidTest extends LocalFileMetadataTestCase 
{
         CubeDesc cube = getSSBCubeDesc();
         CuboidScheduler cuboidScheduler = cube.getInitialCuboidScheduler();
 
-        assertEquals(false, Cuboid.isValid(cuboidScheduler, 
toLong("10000000000")));
+        assertEquals(false, cuboidScheduler.isValid(toLong("10000000000")));
 
         // the 4th is mandatory and isMandatoryOnlyValid is true
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("10000001000")));
-        assertEquals(true, Cuboid.isValid(cuboidScheduler, 
toLong("00000001000")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("10000001000")));
+        assertEquals(true, cuboidScheduler.isValid(toLong("00000001000")));
     }
 
     @Test

Reply via email to