minor, avoid buffer size overflow
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/fad75c93 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/fad75c93 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/fad75c93 Branch: refs/heads/master Commit: fad75c93f42d252dd1ee2ec7b03df716c15fb2f4 Parents: 3200d6a Author: Hongbin Ma <mahong...@apache.org> Authored: Mon Aug 28 12:18:23 2017 +0800 Committer: Hongbin Ma <m...@kyligence.io> Committed: Mon Aug 28 12:25:12 2017 +0800 ---------------------------------------------------------------------- .../kylin/metadata/filter/TupleFilterSerializer.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/fad75c93/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilterSerializer.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilterSerializer.java b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilterSerializer.java index 63153ef..d434f0b 100755 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilterSerializer.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilterSerializer.java @@ -69,8 +69,11 @@ public class TupleFilterSerializer { internalSerialize(rootFilter, decorator, buffer, cs); break; } catch (BufferOverflowException e) { - logger.info("Buffer size {} cannot hold the filter, resizing to 4 times", bufferSize); - bufferSize *= 4; + if (bufferSize == (1 << 30)) + throw e; + + logger.info("Buffer size {} cannot hold the filter, resizing to 2 times", bufferSize); + bufferSize = bufferSize << 1; } } byte[] result = new byte[buffer.position()]; @@ -78,7 +81,8 @@ public class TupleFilterSerializer { return result; } - private static void internalSerialize(TupleFilter filter, Decorator decorator, ByteBuffer buffer, IFilterCodeSystem<?> cs) { + private static void internalSerialize(TupleFilter filter, Decorator decorator, ByteBuffer buffer, + IFilterCodeSystem<?> cs) { if (decorator != null) { // give decorator a chance to manipulate the output filter filter = decorator.onSerialize(filter); } @@ -203,7 +207,8 @@ public class TupleFilterSerializer { if (extendedTupleFilters.containsKey(op)) { try { filter = (TupleFilter) extendedTupleFilters.get(op).getConstructor().newInstance(); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + } catch (InstantiationException | IllegalAccessException | InvocationTargetException + | NoSuchMethodException e) { throw new RuntimeException(e); } } else {