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);