From 4b5884fb9a2165ea37f545f7f535edc669b2ba03 Mon Sep 17 00:00:00 2001 From: kangkaisen Date: Tue, 29 Nov 2016 19:51:39 +0800 Subject: [PATCH] add query server scan threshold --- .../kylin/storage/gtrecord/SequentialCubeTupleIterator.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java index bef0e88..c37efc4 100644 --- a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java +++ b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java @@ -25,6 +25,7 @@ import java.util.Set; import javax.annotation.Nullable; +import org.apache.kylin.common.KylinConfig; import org.apache.kylin.cube.cuboid.Cuboid; import org.apache.kylin.metadata.model.FunctionDesc; import org.apache.kylin.metadata.model.TblColRef; @@ -32,6 +33,7 @@ import org.apache.kylin.metadata.tuple.ITuple; import org.apache.kylin.metadata.tuple.ITupleIterator; import org.apache.kylin.metadata.tuple.TupleInfo; import org.apache.kylin.storage.StorageContext; +import org.apache.kylin.storage.exception.ScanOutOfLimitException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,6 +45,8 @@ public class SequentialCubeTupleIterator implements ITupleIterator { private static final Logger logger = LoggerFactory.getLogger(SequentialCubeTupleIterator.class); + private final int SCAN_THRESHOLD = KylinConfig.getInstanceFromEnv().getScanThreshold(); + protected List scanners; protected List segmentCubeTupleIterators; protected Iterator tupleIterator; @@ -52,6 +56,7 @@ public class SequentialCubeTupleIterator implements ITupleIterator { private int scanCount; private int scanCountDelta; + public SequentialCubeTupleIterator(List scanners, Cuboid cuboid, Set selectedDimensions, // Set selectedMetrics, TupleInfo returnTupleInfo, StorageContext context) { this.context = context; @@ -86,7 +91,11 @@ public class SequentialCubeTupleIterator implements ITupleIterator { @Override public ITuple next() { - scanCount++; + // prevent the big query to make the Query Server OOM + if (scanCount++ > SCAN_THRESHOLD) { + throw new ScanOutOfLimitException("Scan count exceed the scan threshold: " + SCAN_THRESHOLD); + } + if (++scanCountDelta >= 1000) flushScanCountDelta(); -- 2.9.3 (Apple Git-75)