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 0b31a91  KYLIN-3597 Improve code smell
0b31a91 is described below

commit 0b31a911302c0754ae6da5745d127dcaa336a467
Author: hit-lacus <hit_la...@126.com>
AuthorDate: Tue Dec 11 16:52:14 2018 +0800

    KYLIN-3597 Improve code smell
---
 .../org/apache/kylin/cube/CubeDescManager.java     | 26 ++++++------
 .../kylin/cube/cli/DictionaryGeneratorCLI.java     | 15 ++++---
 .../kylin/cube/inmemcubing/DoggedCubeBuilder.java  | 21 ++--------
 .../kylin/cube/inmemcubing/InMemCubeBuilder.java   | 46 +++++++++++-----------
 .../measure/percentile/PercentileSerializer.java   |  1 +
 .../query/relnode/visitor/TupleFilterVisitor.java  |  5 +--
 .../org/apache/kylin/query/util/QueryUtil.java     | 11 ++++--
 .../source/kafka/util/KafkaSampleProducer.java     | 11 ++++--
 .../kylin/storage/hbase/util/RowCounterCLI.java    |  7 ++--
 9 files changed, 69 insertions(+), 74 deletions(-)

diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java 
b/core-cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java
index 4fb9522..a7459c0 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java
@@ -21,6 +21,7 @@ package org.apache.kylin.cube;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import org.apache.commons.lang3.StringUtils;
@@ -60,12 +61,15 @@ public class CubeDescManager {
 
     private static final Logger logger = 
LoggerFactory.getLogger(CubeDescManager.class);
 
-    public static final Serializer<CubeDesc> CUBE_DESC_SERIALIZER = new 
JsonSerializer<CubeDesc>(CubeDesc.class);
+    public static final Serializer<CubeDesc> CUBE_DESC_SERIALIZER = new 
JsonSerializer<>(CubeDesc.class);
     
     public static CubeDescManager getInstance(KylinConfig config) {
         return config.getManager(CubeDescManager.class);
     }
 
+    static final String BROKEN_CUBE_MSG = "Broken cube desc %s";
+    static final String CUBE_SHOULD_NOT_BE_DRAFT_MSG = "CubeDesc '%s' must not 
be a draft";
+
     // called by reflection
     static CubeDescManager newInstance(KylinConfig config) throws IOException {
         return new CubeDescManager(config);
@@ -84,20 +88,20 @@ public class CubeDescManager {
     private AutoReadWriteLock descMapLock = new AutoReadWriteLock();
 
     private CubeDescManager(KylinConfig cfg) throws IOException {
-        logger.info("Initializing CubeDescManager with config " + cfg);
+        logger.info("Initializing CubeDescManager with config {}", cfg);
         this.config = cfg;
-        this.cubeDescMap = new CaseInsensitiveStringCache<CubeDesc>(config, 
"cube_desc");
+        this.cubeDescMap = new CaseInsensitiveStringCache<>(config, 
"cube_desc");
         this.crud = new CachedCrudAssist<CubeDesc>(getStore(), 
ResourceStore.CUBE_DESC_RESOURCE_ROOT, CubeDesc.class,
                 cubeDescMap) {
             @Override
             protected CubeDesc initEntityAfterReload(CubeDesc cubeDesc, String 
resourceName) {
                 if (cubeDesc.isDraft())
-                    throw new IllegalArgumentException("CubeDesc '" + 
cubeDesc.getName() + "' must not be a draft");
+                    throw new 
IllegalArgumentException(String.format(Locale.ROOT, 
CUBE_SHOULD_NOT_BE_DRAFT_MSG, cubeDesc.getName()));
 
                 try {
                     cubeDesc.init(config);
                 } catch (Exception e) {
-                    logger.warn("Broken cube desc " + cubeDesc.resourceName(), 
e);
+                    logger.warn(String.format(Locale.ROOT, BROKEN_CUBE_MSG, 
cubeDesc.resourceName()), e);
                     cubeDesc.addError(e.toString());
                 }
                 return cubeDesc;
@@ -175,10 +179,6 @@ public class CubeDescManager {
 
     /**
      * Create a new CubeDesc
-     * 
-     * @param cubeDesc
-     * @return
-     * @throws IOException
      */
     public CubeDesc createCubeDesc(CubeDesc cubeDesc) throws IOException {
         try (AutoLock lock = descMapLock.lockForWrite()) {
@@ -187,7 +187,7 @@ public class CubeDescManager {
             if (cubeDescMap.containsKey(cubeDesc.getName()))
                 throw new IllegalArgumentException("CubeDesc '" + 
cubeDesc.getName() + "' already exists");
             if (cubeDesc.isDraft())
-                throw new IllegalArgumentException("CubeDesc '" + 
cubeDesc.getName() + "' must not be a draft");
+                throw new IllegalArgumentException(String.format(Locale.ROOT, 
CUBE_SHOULD_NOT_BE_DRAFT_MSG, cubeDesc.getName()));
 
             try {
                 cubeDesc.init(config);
@@ -219,10 +219,6 @@ public class CubeDescManager {
 
     /**
      * Update CubeDesc with the input. Broadcast the event into cluster
-     * 
-     * @param desc
-     * @return
-     * @throws IOException
      */
     public CubeDesc updateCubeDesc(CubeDesc desc) throws IOException {
         try (AutoLock lock = descMapLock.lockForWrite()) {
@@ -233,7 +229,7 @@ public class CubeDescManager {
             if (!cubeDescMap.containsKey(name))
                 throw new IllegalArgumentException("CubeDesc '" + name + "' 
does not exist.");
             if (desc.isDraft())
-                throw new IllegalArgumentException("CubeDesc '" + 
desc.getName() + "' must not be a draft");
+                throw new IllegalArgumentException(String.format(Locale.ROOT, 
CUBE_SHOULD_NOT_BE_DRAFT_MSG, desc.getName()));
 
             try {
                 desc.init(config);
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/cli/DictionaryGeneratorCLI.java 
b/core-cube/src/main/java/org/apache/kylin/cube/cli/DictionaryGeneratorCLI.java
index 1b5cf63..1bec02a 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/cube/cli/DictionaryGeneratorCLI.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/cube/cli/DictionaryGeneratorCLI.java
@@ -19,6 +19,7 @@
 package org.apache.kylin.cube.cli;
 
 import java.io.IOException;
+import java.util.Locale;
 import java.util.Set;
 
 import org.apache.hadoop.io.IOUtils;
@@ -42,6 +43,8 @@ import com.google.common.collect.Sets;
 
 public class DictionaryGeneratorCLI {
 
+    private DictionaryGeneratorCLI(){}
+
     private static final Logger logger = 
LoggerFactory.getLogger(DictionaryGeneratorCLI.class);
 
     public static void processSegment(KylinConfig config, String cubeName, 
String segmentID, String uuid,
@@ -58,7 +61,7 @@ public class DictionaryGeneratorCLI {
 
         // dictionary
         for (TblColRef col : 
cubeSeg.getCubeDesc().getAllColumnsNeedDictionaryBuilt()) {
-            logger.info("Building dictionary for " + col);
+            logger.info("Building dictionary for {}", col);
             IReadableTable inpTable = 
factTableValueProvider.getDistinctValuesFor(col);
 
             Dictionary<String> preBuiltDict = null;
@@ -67,10 +70,10 @@ public class DictionaryGeneratorCLI {
             }
 
             if (preBuiltDict != null) {
-                logger.debug("Dict for '" + col.getName() + "' has already 
been built, save it");
+                logger.debug("Dict for '{}' has already been built, save it", 
col.getName());
                 cubeMgr.saveDictionary(cubeSeg, col, inpTable, preBuiltDict);
             } else {
-                logger.debug("Dict for '" + col.getName() + "' not pre-built, 
build it from " + inpTable.toString());
+                logger.debug("Dict for '{}' not pre-built, build it from {}", 
col.getName(), inpTable);
                 cubeMgr.buildDictionary(cubeSeg, col, inpTable);
             }
         }
@@ -90,14 +93,14 @@ public class DictionaryGeneratorCLI {
         }
 
         for (String tableIdentity : toSnapshot) {
-            logger.info("Building snapshot of " + tableIdentity);
+            logger.info("Building snapshot of {}", tableIdentity);
             cubeMgr.buildSnapshotTable(cubeSeg, tableIdentity, uuid);
         }
 
         CubeInstance updatedCube = 
cubeMgr.getCube(cubeSeg.getCubeInstance().getName());
         cubeSeg = updatedCube.getSegmentById(cubeSeg.getUuid());
         for (TableRef lookup : toCheckLookup) {
-            logger.info("Checking snapshot of " + lookup);
+            logger.info("Checking snapshot of {}", lookup);
             try {
                 JoinDesc join = 
cubeSeg.getModel().getJoinsTree().getJoinByPKSide(lookup);
                 ILookupTable table = cubeMgr.getLookupTable(cubeSeg, join);
@@ -105,7 +108,7 @@ public class DictionaryGeneratorCLI {
                     IOUtils.closeStream(table);
                 }
             } catch (Throwable th) {
-                throw new RuntimeException("Checking snapshot of " + lookup + 
" failed.", th);
+                throw new RuntimeException(String.format(Locale.ROOT, 
"Checking snapshot of %s failed.", lookup), th);
             }
         }
     }
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/inmemcubing/DoggedCubeBuilder.java
 
b/core-cube/src/main/java/org/apache/kylin/cube/inmemcubing/DoggedCubeBuilder.java
index 06e4a5d..8368051 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/cube/inmemcubing/DoggedCubeBuilder.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/cube/inmemcubing/DoggedCubeBuilder.java
@@ -93,7 +93,7 @@ public class DoggedCubeBuilder extends 
AbstractInMemCubeBuilder {
                     splits.add(last);
 
                     last.start();
-                    logger.info("Split #" + splits.size() + " kickoff");
+                    logger.info("Split #{} kickoff", splits.size());
 
                     // Build splits sequentially
                     last.join();
@@ -101,7 +101,7 @@ public class DoggedCubeBuilder extends 
AbstractInMemCubeBuilder {
                     checkException(splits);
                 }
 
-                logger.info("Dogged Cube Build splits complete, took " + 
(System.currentTimeMillis() - start) + " ms");
+                logger.info("Dogged Cube Build splits complete, took {} ms", 
(System.currentTimeMillis() - start));
 
                 merger.mergeAndOutput(splits, output);
 
@@ -116,7 +116,7 @@ public class DoggedCubeBuilder extends 
AbstractInMemCubeBuilder {
             } finally {
                 output.close();
                 closeGirdTables(splits);
-                logger.info("Dogged Cube Build end, totally took " + 
(System.currentTimeMillis() - start) + " ms");
+                logger.info("Dogged Cube Build end, totally took {} ms", 
(System.currentTimeMillis() - start));
                 ensureExit(splits);
                 logger.info("Dogged Cube Build return");
             }
@@ -173,20 +173,7 @@ public class DoggedCubeBuilder extends 
AbstractInMemCubeBuilder {
                 if (split.exception != null)
                     errors.add(split.exception);
             }
-
-            if (errors.isEmpty()) {
-                return;
-            } else if (errors.size() == 1) {
-                Throwable t = errors.get(0);
-                if (t instanceof IOException)
-                    throw (IOException) t;
-                else
-                    throw new IOException(t);
-            } else {
-                for (Throwable t : errors)
-                    logger.error("Exception during in-mem cube build", t);
-                throw new IOException(errors.size() + " exceptions during 
in-mem cube build, cause set to the first, check log for more", errors.get(0));
-            }
+            InMemCubeBuilder.processErrors(errors);
         }
     }
 
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/inmemcubing/InMemCubeBuilder.java
 
b/core-cube/src/main/java/org/apache/kylin/cube/inmemcubing/InMemCubeBuilder.java
index ef61ce9..e0bdb20 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/cube/inmemcubing/InMemCubeBuilder.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/cube/inmemcubing/InMemCubeBuilder.java
@@ -111,9 +111,6 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
                 new CubeDimEncMap(cubeDesc, dictionaryMap)
         );
 
-        // Below several store implementation are very similar in performance. 
The ConcurrentDiskStore is the simplest.
-        // MemDiskStore store = new MemDiskStore(info, memBudget == null ? 
MemoryBudgetController.ZERO_BUDGET : memBudget);
-        // MemDiskStore store = new MemDiskStore(info, 
MemoryBudgetController.ZERO_BUDGET);
         ConcurrentDiskStore store = new ConcurrentDiskStore(info);
 
         GridTable gridTable = new GridTable(info, store);
@@ -156,7 +153,7 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
     private <T> void build(RecordConsumeBlockingQueueController<T> input, 
ICuboidCollector collector)
             throws IOException {
         long startTime = System.currentTimeMillis();
-        logger.info("In Mem Cube Build start, " + cubeDesc.getName());
+        logger.info("In Mem Cube Build start, {}", cubeDesc.getName());
 
         baseCuboidMemTracker = new MemoryWaterLevel();
         baseCuboidMemTracker.markLow();
@@ -186,7 +183,7 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
         join(taskThreads);
 
         long endTime = System.currentTimeMillis();
-        logger.info("In Mem Cube Build end, " + cubeDesc.getName() + ", takes 
" + (endTime - startTime) + " ms");
+        logger.info("In Mem Cube Build end, {}, takes {} ms", 
cubeDesc.getName(), (endTime - startTime));
 
         throwExceptionIfAny();
     }
@@ -216,12 +213,16 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
     }
 
     private void throwExceptionIfAny() throws IOException {
-        ArrayList<Throwable> errors = new ArrayList<Throwable>();
+        ArrayList<Throwable> errors = new ArrayList<>();
         for (int i = 0; i < taskThreadCount; i++) {
             Throwable t = taskThreadExceptions[i];
             if (t != null)
                 errors.add(t);
         }
+        processErrors(errors);
+    }
+
+    static void processErrors(List<Throwable> errors) throws IOException{
         if (errors.isEmpty()) {
             return;
         } else if (errors.size() == 1) {
@@ -313,26 +314,26 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
 
     private void makeMemoryBudget() {
         baseResult.aggrCacheMB = 
Math.max(baseCuboidMemTracker.getEstimateMB(), 10); // 10 MB at minimal
-        logger.debug("Base cuboid aggr cache is " + baseResult.aggrCacheMB + " 
MB");
+        logger.debug("Base cuboid aggr cache is {} MB", 
baseResult.aggrCacheMB);
         int systemAvailMB = MemoryBudgetController.gcAndGetSystemAvailMB();
-        logger.debug("System avail " + systemAvailMB + " MB");
+        logger.debug("System avail {} MB", systemAvailMB);
         int reserve = reserveMemoryMB;
-        logger.debug("Reserve " + reserve + " MB for system basics");
+        logger.debug("Reserve {} MB for system basics", reserve);
 
         int budget = systemAvailMB - reserve;
         if (budget < baseResult.aggrCacheMB) {
             // make sure we have base aggr cache as minimal
             budget = baseResult.aggrCacheMB;
-            logger.warn("System avail memory (" + systemAvailMB + " MB) is 
less than base aggr cache (" + baseResult.aggrCacheMB + " MB) + minimal 
reservation (" + reserve + " MB), consider increase JVM heap -Xmx");
+            logger.warn("System avail memory ({} MB) is less than base aggr 
cache ({} MB) + minimal reservation ({} MB), consider increase JVM heap -Xmx", 
systemAvailMB, baseResult.aggrCacheMB, reserve);
         }
 
-        logger.debug("Memory Budget is " + budget + " MB");
+        logger.debug("Memory Budget is {} MB", budget);
         memBudget = new MemoryBudgetController(budget);
     }
 
     private <T> CuboidResult 
createBaseCuboid(RecordConsumeBlockingQueueController<T> input) throws 
IOException {
         long startTime = System.currentTimeMillis();
-        logger.info("Calculating base cuboid " + baseCuboidId);
+        logger.info("Calculating base cuboid {}", baseCuboidId);
 
         GridTable baseCuboid = newGridTableByCuboidID(baseCuboidId);
         GTBuilder baseBuilder = baseCuboid.rebuild();
@@ -358,10 +359,10 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
         }
 
         long timeSpent = System.currentTimeMillis() - startTime;
-        logger.info("Cuboid " + baseCuboidId + " has " + count + " rows, build 
takes " + timeSpent + "ms");
+        logger.info("Cuboid {} has {} rows, build takes {}ms", baseCuboidId, 
count, timeSpent);
 
         int mbEstimateBaseAggrCache = (int) 
(aggregationScanner.getEstimateSizeOfAggrCache() / 
MemoryBudgetController.ONE_MB);
-        logger.info("Wild estimate of base aggr cache is " + 
mbEstimateBaseAggrCache + " MB");
+        logger.info("Wild estimate of base aggr cache is {} MB", 
mbEstimateBaseAggrCache);
 
         return updateCuboidResult(baseCuboidId, baseCuboid, count, timeSpent, 
0, input.inputConverterUnit.ifChange());
     }
@@ -427,7 +428,7 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
                 aggrMask[i] = 
!measureDescs[i].getFunction().getMeasureType().onlyAggrInBaseCuboid();
 
                 if (!aggrMask[i]) {
-                    logger.info(measureDescs[i].toString() + " doesn't need 
aggregation.");
+                    logger.info("{} doesn't need aggregation.", 
measureDescs[i]);
                 }
             }
             scanner.setAggrMask(aggrMask);
@@ -438,7 +439,7 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
 
     private CuboidResult scanAndAggregateGridTable(GridTable gridTable, long 
parentId, long cuboidId, ImmutableBitSet aggregationColumns, ImmutableBitSet 
measureColumns) throws IOException {
         long startTime = System.currentTimeMillis();
-        logger.info("Calculating cuboid " + cuboidId);
+        logger.info("Calculating cuboid {}", cuboidId);
 
         GTAggregateScanner scanner = prepareGTAggregationScanner(gridTable, 
parentId, cuboidId, aggregationColumns, measureColumns);
         GridTable newGridTable = newGridTableByCuboidID(cuboidId);
@@ -458,16 +459,13 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
                 builder.write(newRecord);
             }
 
-            //long t = System.currentTimeMillis();
-            //sanityCheck(parentId, cuboidId, 
scanner.getTotalSumForSanityCheck());
-            //logger.info("sanity check for Cuboid " + cuboidId + " cost " + 
(System.currentTimeMillis() - t) + "ms");
         } finally {
             scanner.close();
             builder.close();
         }
 
         long timeSpent = System.currentTimeMillis() - startTime;
-        logger.info("Cuboid " + cuboidId + " has " + count + " rows, build 
takes " + timeSpent + "ms");
+        logger.info("Cuboid {} has {} rows, build takes {}ms", cuboidId, 
count, timeSpent);
 
         return updateCuboidResult(cuboidId, newGridTable, count, timeSpent, 0);
     }
@@ -498,9 +496,11 @@ public class InMemCubeBuilder extends 
AbstractInMemCubeBuilder {
             return;
         }
         if (Arrays.equals(totalSumForSanityCheck, totalSum) == false) {
-            logger.info("sanityCheck failed when calculate " + cuboidId + " 
from parent " + parentId);
-            logger.info("Expected: " + 
Arrays.toString(totalSumForSanityCheck));
-            logger.info("Actually: " + Arrays.toString(totalSum));
+            if(logger.isInfoEnabled()){
+                logger.info("sanityCheck failed when calculate{} from parent 
{}", cuboidId, parentId);
+                logger.info("Expected: {}", 
Arrays.toString(totalSumForSanityCheck));
+                logger.info("Actually: {}", Arrays.toString(totalSum));
+            }
             throw new IllegalStateException();
         }
     }
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/percentile/PercentileSerializer.java
 
b/core-metadata/src/main/java/org/apache/kylin/measure/percentile/PercentileSerializer.java
index 203a975..d0ecba7 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/measure/percentile/PercentileSerializer.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/measure/percentile/PercentileSerializer.java
@@ -48,6 +48,7 @@ public class PercentileSerializer extends 
DataTypeSerializer<PercentileCounter>
         return current().getBytesEstimate();
     }
 
+    @Override
     protected double getStorageBytesEstimate(double count) {
         return current().getBytesEstimate(count);
     }
diff --git 
a/query/src/main/java/org/apache/kylin/query/relnode/visitor/TupleFilterVisitor.java
 
b/query/src/main/java/org/apache/kylin/query/relnode/visitor/TupleFilterVisitor.java
index bf52f91..faa9988 100644
--- 
a/query/src/main/java/org/apache/kylin/query/relnode/visitor/TupleFilterVisitor.java
+++ 
b/query/src/main/java/org/apache/kylin/query/relnode/visitor/TupleFilterVisitor.java
@@ -130,10 +130,10 @@ public class TupleFilterVisitor extends 
RexVisitorImpl<TupleFilter> {
                 // is a trivial expr
                 return f;
             }
-            //else go to default
-        default:
             filter = new 
UnsupportedTupleFilter(TupleFilter.FilterOperatorEnum.UNSUPPORTED);
             break;
+        default:
+            filter = new 
UnsupportedTupleFilter(TupleFilter.FilterOperatorEnum.UNSUPPORTED);
         }
 
         for (RexNode operand : call.operands) {
@@ -281,7 +281,6 @@ public class TupleFilterVisitor extends 
RexVisitorImpl<TupleFilter> {
             strValue = ((NlsString) literalValue).getValue();
         } else if (literalValue instanceof GregorianCalendar) {
             GregorianCalendar g = (GregorianCalendar) literalValue;
-            //strValue = "" + g.get(Calendar.YEAR) + "-" + 
normToTwoDigits(g.get(Calendar.MONTH) + 1) + "-" + 
normToTwoDigits(g.get(Calendar.DAY_OF_MONTH));
             strValue = Long.toString(g.getTimeInMillis());
         } else if (literalValue instanceof TimeUnitRange) {
             // Extract(x from y) in where clause
diff --git a/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java 
b/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
index 5aad5e0..6407308 100644
--- a/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
+++ b/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
@@ -48,6 +48,10 @@ public class QueryUtil {
         String transform(String sql, String project, String defaultSchema);
     }
 
+    static final String KEYWORD_SELECT = "select";
+    static final String KEYWORD_WITH = "with";
+    static final String KEYWORD_EXPLAIN = "explain";
+
     /**
      * @deprecated Deprecated because of KYLIN-3594
      */
@@ -126,7 +130,7 @@ public class QueryUtil {
                 IQueryTransformer t = (IQueryTransformer) 
ClassUtil.newInstance(clz);
                 transformers.add(t);
             } catch (Exception e) {
-                throw new RuntimeException("Failed to init query transformer", 
e);
+                throw new IllegalStateException("Failed to init query 
transformer", e);
             }
         }
 
@@ -178,8 +182,9 @@ public class QueryUtil {
         String sql1 = sql.toLowerCase(Locale.ROOT);
         sql1 = removeCommentInSql(sql1);
         sql1 = sql1.trim();
-        return sql1.startsWith("select") || (sql1.startsWith("with") && 
sql1.contains("select"))
-                || (sql1.startsWith("explain") && sql1.contains("select"));
+
+        return sql1.startsWith(KEYWORD_SELECT) || 
(sql1.startsWith(KEYWORD_WITH) && sql1.contains(KEYWORD_SELECT))
+                || (sql1.startsWith(KEYWORD_EXPLAIN) && 
sql1.contains(KEYWORD_SELECT));
     }
 
     public static String removeCommentInSql(String sql1) {
diff --git 
a/source-kafka/src/main/java/org/apache/kylin/source/kafka/util/KafkaSampleProducer.java
 
b/source-kafka/src/main/java/org/apache/kylin/source/kafka/util/KafkaSampleProducer.java
index 5899c7c..51e8ff3 100644
--- 
a/source-kafka/src/main/java/org/apache/kylin/source/kafka/util/KafkaSampleProducer.java
+++ 
b/source-kafka/src/main/java/org/apache/kylin/source/kafka/util/KafkaSampleProducer.java
@@ -56,7 +56,7 @@ public class KafkaSampleProducer {
     private static final ObjectMapper mapper = new ObjectMapper();
 
     public static void main(String[] args) throws Exception {
-        logger.info("args: {}", Arrays.toString(args));
+        if(logger.isInfoEnabled()) logger.info("args: {}", 
Arrays.toString(args));
         OptionsHelper optionsHelper = new OptionsHelper();
         Options options = new Options();
         options.addOption(OPTION_TOPIC);
@@ -109,12 +109,12 @@ public class KafkaSampleProducer {
         props.put("buffer.memory", 33554432);
         props.put("key.serializer", 
"org.apache.kafka.common.serialization.StringSerializer");
         props.put("value.serializer", 
"org.apache.kafka.common.serialization.StringSerializer");
-
+        long startTime = System.currentTimeMillis();
         try (Producer<String, String> producer = new KafkaProducer<>(props)) {
             boolean alive = true;
             Random rnd = new Random();
             Map<String, Object> record = new HashMap<>();
-            while (alive == true) {
+            while (alive) {
                 //add normal record
                 record.put("order_time", (new Date().getTime()));
                 record.put("country", 
countries.get(rnd.nextInt(countries.size())));
@@ -132,9 +132,12 @@ public class KafkaSampleProducer {
                 record.put("user", user);
                 //send message
                 ProducerRecord<String, String> data = new 
ProducerRecord<>(topic, System.currentTimeMillis() + "", 
mapper.writeValueAsString(record));
-                System.out.println("Sending 1 message: " + 
JsonUtil.writeValueAsString(record));
+                if(logger.isInfoEnabled()) logger.info("Sending 1 message: 
{}", JsonUtil.writeValueAsString(record));
                 producer.send(data);
                 Thread.sleep(interval);
+                if(System.currentTimeMillis() - startTime <= 7 * 24 * 3600 * 
1000){
+                    alive = false;
+                }
             }
         }
     }
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/RowCounterCLI.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/RowCounterCLI.java
index d6367e5..1a659cb 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/RowCounterCLI.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/RowCounterCLI.java
@@ -59,9 +59,10 @@ public class RowCounterCLI {
         } else {
             logger.info("startkey lenght: {}", startKey.length);
         }
-
-        logger.info("start key in binary: {}", Bytes.toStringBinary(startKey));
-        logger.info("end key in binary: {}", Bytes.toStringBinary(endKey));
+        if(logger.isInfoEnabled()){
+            logger.info("start key in binary: {}", 
Bytes.toStringBinary(startKey));
+            logger.info("end key in binary: {}", Bytes.toStringBinary(endKey));
+        }
 
         Configuration conf = HBaseConnection.getCurrentHBaseConfiguration();
 

Reply via email to