Repository: incubator-kylin
Updated Branches:
  refs/heads/2.x-staging 975733630 -> b12d86783


KYLIN-942 add more backdoor toggles to help profiling


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

Branch: refs/heads/2.x-staging
Commit: ef2cc71ca23999bbb9ea28b337319107dfca9e65
Parents: 9757336
Author: honma <ho...@ebay.com>
Authored: Wed Oct 28 15:19:51 2015 +0800
Committer: honma <ho...@ebay.com>
Committed: Wed Oct 28 15:19:51 2015 +0800

----------------------------------------------------------------------
 .../kylin/common/debug/BackdoorToggles.java     | 29 ++++++++++++++++++++
 .../kylin/storage/hbase/HBaseStorage.java       | 23 ++++++++++++----
 .../hbase/cube/v2/CubeSegmentScanner.java       |  9 ++++--
 3 files changed, 54 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/ef2cc71c/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java
----------------------------------------------------------------------
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java 
b/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java
index 53e5864..bac7258 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java
@@ -34,6 +34,14 @@ public class BackdoorToggles {
         return getString(DEBUG_TOGGLE_OBSERVER_BEHAVIOR);
     }
 
+    public static String getHbaseCubeQueryVersion() {
+        return getString(DEBUG_TOGGLE_HBASE_CUBE_QUERY_VERSION);
+    }
+
+    public static String getHbaseCubeQueryProtocol() {
+        return getString(DEBUG_TOGGLE_HBASE_CUBE_QUERY_PROTOCOL);
+    }
+
     public static boolean getDisableFuzzyKey() {
         return getBoolean(DEBUG_TOGGLE_DISABLE_FUZZY_KEY);
     }
@@ -72,6 +80,27 @@ public class BackdoorToggles {
     public final static String DEBUG_TOGGLE_DISABLE_FUZZY_KEY = 
"DEBUG_TOGGLE_DISABLE_FUZZY_KEY";
 
     /**
+     * set DEBUG_TOGGLE_HBASE_CUBE_QUERY_VERSION=v1/v2 to control which 
version CubeStorageQuery to use
+     *
+     example:(put it into request body)
+     "backdoorToggles": {
+     "DEBUG_TOGGLE_HBASE_CUBE_QUERY_VERSION": "v1"
+     }
+     */
+    public final static String DEBUG_TOGGLE_HBASE_CUBE_QUERY_VERSION = 
"DEBUG_TOGGLE_HBASE_CUBE_QUERY_VERSION";
+
+    /**
+     * set DEBUG_TOGGLE_HBASE_CUBE_QUERY_PROTOCOL=endpoint/scan to control how 
to visit hbase cube
+     * this param is only valid when DEBUG_TOGGLE_HBASE_CUBE_QUERY_VERSION set 
to v2(bdefault)
+     *
+     example:(put it into request body)
+     "backdoorToggles": {
+     "DEBUG_TOGGLE_HBASE_CUBE_QUERY_PROTOCOL": "scan"
+     }
+     */
+    public final static String DEBUG_TOGGLE_HBASE_CUBE_QUERY_PROTOCOL = 
"DEBUG_TOGGLE_HBASE_CUBE_QUERY_PROTOCOL";
+
+    /**
      * set DEBUG_TOGGLE_OBSERVER_BEHAVIOR=SCAN/SCAN_FILTER/SCAN_FILTER_AGGR to 
control observer behavior for debug/profile usage
      *
      example:(put it into request body)

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/ef2cc71c/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseStorage.java
----------------------------------------------------------------------
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseStorage.java 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseStorage.java
index 53465d8..2e2000d 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseStorage.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseStorage.java
@@ -19,6 +19,7 @@
 package org.apache.kylin.storage.hbase;
 
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.debug.BackdoorToggles;
 import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.engine.mr.IMROutput;
 import org.apache.kylin.engine.mr.IMROutput2;
@@ -39,11 +40,15 @@ import 
org.apache.kylin.storage.hbase.steps.HBaseMROutput2Transition;
 
 import com.google.common.base.Preconditions;
 
-@SuppressWarnings("unused")//used by reflection
+@SuppressWarnings("unused")
+//used by reflection
 public class HBaseStorage implements IStorage {
 
     private final static boolean allowStorageLayerCache = true;
-    private final static String defaultCubeStorageQuery = 
"org.apache.kylin.storage.hbase.cube.v2.CubeStorageQuery";
+
+    private final static String v2CubeStorageQuery = 
"org.apache.kylin.storage.hbase.cube.v2.CubeStorageQuery";
+    private final static String v1CubeStorageQuery = 
"org.apache.kylin.storage.hbase.cube.v1.CubeStorageQuery";
+
     private final static String defaultIIStorageQuery = 
"org.apache.kylin.storage.hbase.ii.InvertedIndexStorageQuery";
 
     @Override
@@ -62,11 +67,19 @@ public class HBaseStorage implements IStorage {
                 return ret;
             }
         } else if (realization.getType() == RealizationType.CUBE) {
+
+            String cubeStorageQuery;
+            if 
("v1".equalsIgnoreCase(BackdoorToggles.getHbaseCubeQueryVersion())) {
+                cubeStorageQuery = v1CubeStorageQuery;
+            } else {
+                cubeStorageQuery = v2CubeStorageQuery;//by default use v2
+            }
+
             ICachableStorageQuery ret;
             try {
-                ret = (ICachableStorageQuery) 
Class.forName(defaultCubeStorageQuery).getConstructor(CubeInstance.class).newInstance((CubeInstance)
 realization);
+                ret = (ICachableStorageQuery) 
Class.forName(cubeStorageQuery).getConstructor(CubeInstance.class).newInstance((CubeInstance)
 realization);
             } catch (Exception e) {
-                throw new RuntimeException("Failed to initialize storage query 
for " + defaultCubeStorageQuery, e);
+                throw new RuntimeException("Failed to initialize storage query 
for " + cubeStorageQuery, e);
             }
 
             if (allowStorageLayerCache) {
@@ -78,7 +91,7 @@ public class HBaseStorage implements IStorage {
             throw new IllegalArgumentException("Unknown realization type " + 
realization.getType());
         }
     }
-    
+
     private static IStorageQuery wrapWithCache(ICachableStorageQuery 
underlyingStorageEngine, IRealization realization) {
         if (underlyingStorageEngine.isDynamic()) {
             return new CacheFledgedDynamicQuery(underlyingStorageEngine, 
getPartitionCol(realization));

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/ef2cc71c/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
----------------------------------------------------------------------
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
index 814a359..18ba6fb 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
@@ -11,6 +11,7 @@ import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Set;
 
+import org.apache.kylin.common.debug.BackdoorToggles;
 import org.apache.kylin.common.util.ByteArray;
 import org.apache.kylin.common.util.DateFormat;
 import org.apache.kylin.common.util.ImmutableBitSet;
@@ -224,8 +225,12 @@ public class CubeSegmentScanner implements IGTScanner {
 
                         try {
 
-                            CubeHBaseRPC rpc = new 
CubeHBaseEndpointRPC(cubeSeg, cuboid, info);
-                            //CubeHBaseRPC rpc = new CubeHBaseScanRPC(cubeSeg, 
cuboid, info);
+                            CubeHBaseRPC rpc;
+                            if 
("scan".equalsIgnoreCase(BackdoorToggles.getHbaseCubeQueryProtocol())) {
+                                rpc = new CubeHBaseScanRPC(cubeSeg, cuboid, 
info);
+                            } else {
+                                rpc = new CubeHBaseEndpointRPC(cubeSeg, 
cuboid, info);//default behavior
+                            }
 
                             //change previous line to CubeHBaseRPC rpc = new 
CubeHBaseScanRPC(cubeSeg, cuboid, info);
                             //to debug locally

Reply via email to