Repository: kylin
Updated Branches:
  refs/heads/master 51830456f -> 58991331d


KYLIN-2221 rethink on KYLIN-1684


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

Branch: refs/heads/master
Commit: 58991331d276e127695893c2041bce37934c836f
Parents: 5183045
Author: Hongbin Ma <mahong...@apache.org>
Authored: Tue Nov 22 13:42:46 2016 +0800
Committer: Hongbin Ma <mahong...@apache.org>
Committed: Tue Nov 22 13:42:57 2016 +0800

----------------------------------------------------------------------
 .../apache/kylin/common/KylinConfigBase.java    | 22 +++++++++++++-------
 .../gtrecord/GTCubeStorageQueryBase.java        | 15 ++++++-------
 2 files changed, 20 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/58991331/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
----------------------------------------------------------------------
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index c7dd8a8..3252245 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -18,13 +18,6 @@
 
 package org.apache.kylin.common;
 
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import org.apache.commons.lang.StringUtils;
-import org.apache.kylin.common.util.CliCommandExecutor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
@@ -35,6 +28,14 @@ import java.util.SortedSet;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.common.util.CliCommandExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
 /**
  * An abstract class to encapsulate access to a set of 'properties'.
  * Subclass can override methods in this class to extend the content of the 
'properties',
@@ -210,7 +211,7 @@ abstract public class KylinConfigBase implements 
Serializable {
 
     public String[] getRealizationProviders() {
         return getOptionalStringArray("kylin.realization.providers", //
-                new String[] {"org.apache.kylin.cube.CubeManager", 
"org.apache.kylin.storage.hybrid.HybridManager"});
+                new String[] { "org.apache.kylin.cube.CubeManager", 
"org.apache.kylin.storage.hybrid.HybridManager" });
     }
 
     public CliCommandExecutor getCliCommandExecutor() throws IOException {
@@ -490,6 +491,11 @@ abstract public class KylinConfigBase implements 
Serializable {
         return Float.parseFloat(getOptional("kylin.hbase.hfile.size.gb", 
"2.0"));
     }
 
+    //check KYLIN-1684, in most cases keep the default value
+    public boolean isSkippingEmptySegments() {
+        return Boolean.valueOf(getOptional("kylin.query.skip-empty-segments", 
"true"));
+    }
+
     public int getStoragePushDownLimitMax() {
         return Integer.parseInt(getOptional("kylin.query.pushdown.limit.max", 
"10000"));
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/58991331/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
----------------------------------------------------------------------
diff --git 
a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
 
b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
index e715120..24dd2fb 100644
--- 
a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
+++ 
b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
@@ -125,16 +125,13 @@ public abstract class GTCubeStorageQueryBase implements 
IStorageQuery {
         List<CubeSegmentScanner> scanners = Lists.newArrayList();
         for (CubeSegment cubeSeg : 
cubeInstance.getSegments(SegmentStatusEnum.READY)) {
             CubeSegmentScanner scanner;
-            try {
-                scanner = new CubeSegmentScanner(cubeSeg, cuboid, dimensionsD, 
groupsD, metrics, filterD, context, getGTStorage());
-            } catch (IllegalArgumentException ex) {
-                // ref KYLIN-1967, real empty segment can trigger dictionary 
exception -- IllegalArgumentException: Value not exists!
-                if (cubeSeg.getInputRecords() == 0) {
-                    logger.warn("cube segment {} input record is 0, skip it 
still", cubeSeg);
-                    continue;
-                }
-                throw ex;
+
+            if (cubeDesc.getConfig().isSkippingEmptySegments() && 
cubeSeg.getInputRecords() == 0) {
+                logger.info("Skip cube segment {} because its input record is 
0", cubeSeg);
+                continue;
             }
+
+            scanner = new CubeSegmentScanner(cubeSeg, cuboid, dimensionsD, 
groupsD, metrics, filterD, context, getGTStorage());
             scanners.add(scanner);
         }
 

Reply via email to