KYLIN-2603 allow smooth upgrade of hbase coprocessor

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

Branch: refs/heads/master
Commit: 0c85fb721739490b0ec8f011598b9f9fd5e95bef
Parents: 38308bc
Author: Li Yang <liy...@apache.org>
Authored: Thu Jun 1 10:29:21 2017 +0800
Committer: hongbin ma <m...@kyligence.io>
Committed: Thu Jun 1 14:34:07 2017 +0800

----------------------------------------------------------------------
 .../org/apache/kylin/common/KylinConfigBase.java |  4 ++++
 .../apache/kylin/gridtable/GTScanRequest.java    | 19 +++++++++++++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/0c85fb72/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 77c2987..f465949 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
@@ -372,6 +372,10 @@ abstract public class KylinConfigBase implements 
Serializable {
     public boolean allowCubeAppearInMultipleProjects() {
         return 
Boolean.parseBoolean(getOptional("kylin.cube.allow-appear-in-multiple-projects",
 "false"));
     }
+    
+    public int getGTScanRequestSerializationLevel() {
+        return 
Integer.parseInt(getOptional("kylin.cube.gtscanrequest-serialization-level", 
"1"));
+    }
 
     // 
============================================================================
     // JOB

http://git-wip-us.apache.org/repos/asf/kylin/blob/0c85fb72/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java
----------------------------------------------------------------------
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java
index ffaa8bd..e65d2b8 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.ByteArray;
 import org.apache.kylin.common.util.BytesSerializer;
 import org.apache.kylin.common.util.BytesUtil;
@@ -347,9 +348,14 @@ public class GTScanRequest {
         return Arrays.copyOf(byteBuffer.array(), byteBuffer.position());
     }
 
+    private static final int SERIAL_0_BASE = 0;
+    private static final int SERIAL_1_HAVING_FILTER = 1;
+    
     public static final BytesSerializer<GTScanRequest> serializer = new 
BytesSerializer<GTScanRequest>() {
         @Override
         public void serialize(GTScanRequest value, ByteBuffer out) {
+            final int serialLevel = 
KylinConfig.getInstanceFromEnv().getGTScanRequestSerializationLevel();
+            
             GTInfo.serializer.serialize(value.info, out);
 
             BytesUtil.writeVInt(value.ranges.size(), out);
@@ -364,7 +370,10 @@ public class GTScanRequest {
 
             ImmutableBitSet.serializer.serialize(value.columns, out);
             
BytesUtil.writeByteArray(GTUtil.serializeGTFilter(value.filterPushDown, 
value.info), out);
-            
BytesUtil.writeByteArray(TupleFilterSerializer.serialize(value.havingFilterPushDown,
 StringCodeSystem.INSTANCE), out);
+            
+            if (serialLevel >= SERIAL_1_HAVING_FILTER) {
+                
BytesUtil.writeByteArray(TupleFilterSerializer.serialize(value.havingFilterPushDown,
 StringCodeSystem.INSTANCE), out);
+            }
 
             ImmutableBitSet.serializer.serialize(value.aggrGroupBy, out);
             ImmutableBitSet.serializer.serialize(value.aggrMetrics, out);
@@ -380,6 +389,8 @@ public class GTScanRequest {
 
         @Override
         public GTScanRequest deserialize(ByteBuffer in) {
+            final int serialLevel = 
KylinConfig.getInstanceFromEnv().getGTScanRequestSerializationLevel();
+            
             GTInfo sInfo = GTInfo.serializer.deserialize(in);
 
             List<GTScanRange> sRanges = Lists.newArrayList();
@@ -398,7 +409,11 @@ public class GTScanRequest {
 
             ImmutableBitSet sColumns = 
ImmutableBitSet.serializer.deserialize(in);
             TupleFilter sGTFilter = 
GTUtil.deserializeGTFilter(BytesUtil.readByteArray(in), sInfo);
-            TupleFilter sGTHavingFilter = 
TupleFilterSerializer.deserialize(BytesUtil.readByteArray(in), 
StringCodeSystem.INSTANCE);
+            
+            TupleFilter sGTHavingFilter = null;
+            if (serialLevel >= SERIAL_1_HAVING_FILTER) {
+                sGTHavingFilter = 
TupleFilterSerializer.deserialize(BytesUtil.readByteArray(in), 
StringCodeSystem.INSTANCE);
+            }
 
             ImmutableBitSet sAggGroupBy = 
ImmutableBitSet.serializer.deserialize(in);
             ImmutableBitSet sAggrMetrics = 
ImmutableBitSet.serializer.deserialize(in);

Reply via email to