This is an automated email from the ASF dual-hosted git repository. shaofengshi pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 796fede KYLIN-3597 Improve code smell 796fede is described below commit 796fede6740dd90e624a3d79791625176b504b0a Author: hit-lacus <hit_la...@126.com> AuthorDate: Sat Sep 29 13:55:52 2018 +0800 KYLIN-3597 Improve code smell --- .../persistence/IdentifierFileResourceStore.java | 4 - .../apache/kylin/gridtable/GTFilterScanner.java | 105 ++++++++++----------- .../java/org/apache/kylin/gridtable/GTUtil.java | 8 +- .../gtrecord/SortedIteratorMergerWithLimit.java | 2 +- .../kylin/storage/gtrecord/DictGridTableTest.java | 10 +- .../kylin/rest/controller/CubeController.java | 10 +- 6 files changed, 66 insertions(+), 73 deletions(-) diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/IdentifierFileResourceStore.java b/core-common/src/main/java/org/apache/kylin/common/persistence/IdentifierFileResourceStore.java index e516bd1..9475e44 100644 --- a/core-common/src/main/java/org/apache/kylin/common/persistence/IdentifierFileResourceStore.java +++ b/core-common/src/main/java/org/apache/kylin/common/persistence/IdentifierFileResourceStore.java @@ -17,8 +17,6 @@ */ package org.apache.kylin.common.persistence; -import java.io.File; - import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.StorageURL; import org.slf4j.Logger; @@ -38,8 +36,6 @@ public class IdentifierFileResourceStore extends FileResourceStore { private static final String IFILE_SCHEME = "ifile"; - private File root; - public IdentifierFileResourceStore(KylinConfig kylinConfig) throws Exception { super(kylinConfig); } diff --git a/core-cube/src/main/java/org/apache/kylin/gridtable/GTFilterScanner.java b/core-cube/src/main/java/org/apache/kylin/gridtable/GTFilterScanner.java index 12074bd..89d29e3 100644 --- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTFilterScanner.java +++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTFilterScanner.java @@ -72,75 +72,74 @@ public class GTFilterScanner extends GTForwardingScanner { @Override public Iterator<GTRecord> iterator() { - return new Iterator<GTRecord>() { - - private Iterator<GTRecord> inputIterator = delegated.iterator(); - private FilterResultCache resultCache = new FilterResultCache(getInfo(), filter); - - @Override - public boolean hasNext() { - if (next != null) - return true; - - while (inputIterator.hasNext()) { - next = inputIterator.next(); - inputRowCount++; - if (!evaluate()) { - continue; - } - return true; - } - next = null; - return false; - } + return new GTFilterScannerIterator(); + } - private boolean evaluate() { - if (checker != null && checker.shouldBypass(next)) { - return false; - } + private class GTFilterScannerIterator implements Iterator<GTRecord> { + private Iterator<GTRecord> inputIterator = delegated.iterator(); + private FilterResultCache resultCache = new FilterResultCache(getInfo(), filter); - if (filter == null) - return true; + @Override + public boolean hasNext() { + if (next != null) + return true; - // 'next' and 'oneTuple' are referring to the same record - boolean[] cachedResult = resultCache.checkCache(next); - if (cachedResult != null) - return cachedResult[0]; + while (inputIterator.hasNext()) { + next = inputIterator.next(); + inputRowCount++; + if (!evaluate()) { + continue; + } + return true; + } + next = null; + return false; + } - boolean result = filter.evaluate(oneTuple, filterCodeSystem); - resultCache.setLastResult(result); - return result; + private boolean evaluate() { + if (checker != null && checker.shouldBypass(next)) { + return false; } - @Override - public GTRecord next() { - // fetch next record - if (next == null) { - hasNext(); - if (next == null) - throw new NoSuchElementException(); - } + if (filter == null) + return true; - GTRecord result = next; - next = null; - return result; - } + // 'next' and 'oneTuple' are referring to the same record + boolean[] cachedResult = resultCache.checkCache(next); + if (cachedResult != null) + return cachedResult[0]; + + boolean result = filter.evaluate(oneTuple, filterCodeSystem); + resultCache.setLastResult(result); + return result; + } - @Override - public void remove() { - throw new UnsupportedOperationException(); + @Override + public GTRecord next() { + // fetch next record + if (next == null) { + hasNext(); + if (next == null) + throw new NoSuchElementException(); } - }; + GTRecord result = next; + next = null; + return result; + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } } // cache the last one input and result, can reuse because rowkey are ordered, and same input could come in small group public static class FilterResultCache { static final int CHECKPOINT = 10000; static final double HIT_RATE_THRESHOLD = 0.5; - public static boolean ENABLED = true; // enable cache by default - - public boolean enabled = ENABLED; + public static boolean DEFAULT_OPTION = true; // enable cache by default + private boolean enabled = DEFAULT_OPTION; ImmutableBitSet colsInFilter; int count; int hit; diff --git a/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java b/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java index 62053a3..f03329b 100644 --- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java +++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java @@ -46,6 +46,8 @@ import com.google.common.collect.Sets; public class GTUtil { + private GTUtil(){} + static final TableDesc MOCKUP_TABLE = TableDesc.mockup("GT_MOCKUP_TABLE"); static TblColRef tblColRef(int col, String datatype) { @@ -185,14 +187,14 @@ public class GTUtil { protected final Set<TblColRef> unevaluatableColumnCollector; protected final Map<TblColRef, Integer> colMapping; protected final GTInfo info; - protected final boolean encodeConstants; + protected final boolean useEncodeConstants; public GTConvertDecorator(Set<TblColRef> unevaluatableColumnCollector, Map<TblColRef, Integer> colMapping, GTInfo info, boolean encodeConstants) { this.unevaluatableColumnCollector = unevaluatableColumnCollector; this.colMapping = colMapping; this.info = info; - this.encodeConstants = encodeConstants; + this.useEncodeConstants = encodeConstants; buf = ByteBuffer.allocate(info.getMaxColumnLength()); } @@ -228,7 +230,7 @@ public class GTUtil { } // encode constants - if (encodeConstants && filter instanceof CompareTupleFilter) { + if (useEncodeConstants && filter instanceof CompareTupleFilter) { return encodeConstants((CompareTupleFilter) filter); } diff --git a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SortedIteratorMergerWithLimit.java b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SortedIteratorMergerWithLimit.java index b54cb2f..9baee14 100644 --- a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SortedIteratorMergerWithLimit.java +++ b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SortedIteratorMergerWithLimit.java @@ -44,7 +44,6 @@ import com.google.common.base.Preconditions; */ public class SortedIteratorMergerWithLimit<E extends Cloneable> extends SortedIteratorMerger<E> { private int limit; - private Comparator<E> comparator; public SortedIteratorMergerWithLimit(Iterator<Iterator<E>> shardSubsets, int limit, Comparator<E> comparator) { super(shardSubsets, comparator); @@ -52,6 +51,7 @@ public class SortedIteratorMergerWithLimit<E extends Cloneable> extends SortedIt this.comparator = comparator; } + @Override public Iterator<E> getIterator() { return new MergedIteratorWithLimit(limit, comparator); } diff --git a/core-storage/src/test/java/org/apache/kylin/storage/gtrecord/DictGridTableTest.java b/core-storage/src/test/java/org/apache/kylin/storage/gtrecord/DictGridTableTest.java index 08bcb65..14c5eef 100644 --- a/core-storage/src/test/java/org/apache/kylin/storage/gtrecord/DictGridTableTest.java +++ b/core-storage/src/test/java/org/apache/kylin/storage/gtrecord/DictGridTableTest.java @@ -369,13 +369,13 @@ public class DictGridTableTest extends LocalFileMetadataTestCase { CompareTupleFilter fComp2 = compare(info.colRef(1), FilterOperatorEnum.GT, enc(info, 1, "10")); LogicalTupleFilter filter = and(fComp1, fComp2); - FilterResultCache.ENABLED = false; + FilterResultCache.DEFAULT_OPTION = false; testFilterScannerPerfInner(table, info, filter); - FilterResultCache.ENABLED = true; + FilterResultCache.DEFAULT_OPTION = true; testFilterScannerPerfInner(table, info, filter); - FilterResultCache.ENABLED = false; + FilterResultCache.DEFAULT_OPTION = false; testFilterScannerPerfInner(table, info, filter); - FilterResultCache.ENABLED = true; + FilterResultCache.DEFAULT_OPTION = true; testFilterScannerPerfInner(table, info, filter); } @@ -393,7 +393,7 @@ public class DictGridTableTest extends LocalFileMetadataTestCase { scanner.close(); long end = System.currentTimeMillis(); System.out.println( - (end - start) + "ms with filter cache enabled=" + FilterResultCache.ENABLED + ", " + i + " rows"); + (end - start) + "ms with filter cache enabled=" + FilterResultCache.DEFAULT_OPTION + ", " + i + " rows"); } @Test diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java index a78f26a..b76f7b9 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java @@ -299,7 +299,7 @@ public class CubeController extends BasicController { @RequestMapping(value = "/{cubeName}/refresh_lookup", method = { RequestMethod.PUT }, produces = { "application/json" }) @ResponseBody - public JobInstance reBuildLookupSnapshot(@PathVariable String cubeName, + public JobInstance rebuildLookupSnapshot(@PathVariable String cubeName, @RequestBody LookupSnapshotBuildRequest request) { try { final CubeManager cubeMgr = cubeService.getCubeManager(); @@ -365,16 +365,12 @@ public class CubeController extends BasicController { @RequestMapping(value = "/{cubeName}/build2", method = { RequestMethod.PUT }, produces = { "application/json" }) @ResponseBody public JobInstance build2(@PathVariable String cubeName, @RequestBody JobBuildRequest2 req) { - boolean existKafkaClient = false; try { Class<?> clazz = Class.forName("org.apache.kafka.clients.consumer.KafkaConsumer"); - if (clazz != null) { - existKafkaClient = true; + if (clazz == null) { + throw new ClassNotFoundException(); } } catch (ClassNotFoundException e) { - existKafkaClient = false; - } - if (!existKafkaClient) { throw new InternalErrorException("Could not find Kafka dependency"); } return rebuild2(cubeName, req);