This is an automated email from the ASF dual-hosted git repository.

xxyu 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 2d08169  minor, fix sonar reported bugs
2d08169 is described below

commit 2d08169659479b3ae506193c70a274bf591d1fc3
Author: shaofengshi <shaofeng...@apache.org>
AuthorDate: Sat Aug 15 23:12:47 2020 +0800

    minor, fix sonar reported bugs
---
 .../java/org/apache/kylin/common/KylinConfig.java  | 18 +++++-------
 .../gridtable/GTAggregateTransformScanner.java     |  4 ---
 .../benchmark/SortedGTRecordGenerator.java         | 13 ++++++---
 .../org/apache/kylin/dict/DictionaryGenerator.java |  1 +
 .../java/org/apache/kylin/measure/MeasureType.java |  2 +-
 .../kylin/measure/basic/BasicMeasureType.java      |  2 +-
 .../kylin/measure/bitmap/BitmapMeasureType.java    |  2 +-
 .../measure/bitmap/RetentionPartialResult.java     |  2 +-
 .../measure/dim/DimCountDistinctMeasureType.java   |  1 +
 .../apache/kylin/measure/hllc/HLLCMeasureType.java |  2 +-
 .../measure/map/bitmap/BitmapMapMeasureType.java   |  2 +-
 .../apache/kylin/measure/raw/RawMeasureType.java   |  3 +-
 .../apache/kylin/measure/topn/TopNMeasureType.java | 34 ++++++++++------------
 .../kylin/metadata/cachesync/Broadcaster.java      | 12 ++++++--
 .../kylin/metadata/cachesync/BroadcasterTest.java  |  6 ++--
 .../sdk/datasource/adaptor/DefaultAdaptor.java     | 18 +++++++-----
 .../java/org/apache/kylin/engine/mr/CubingJob.java |  9 +++---
 .../kylin/engine/mr/common/CubeStatsReader.java    | 19 +++++++-----
 .../kylin/engine/mr/streaming/RowRecordReader.java |  2 +-
 .../org/apache/kylin/rest/request/SQLRequest.java  |  2 +-
 .../kylin/tool/extractor/MrJobInfoExtractor.java   | 29 +++++++++---------
 21 files changed, 98 insertions(+), 85 deletions(-)

diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
index 640fc3e..30cf71c 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
@@ -150,8 +150,8 @@ public class KylinConfig extends KylinConfigBase {
                     config = new KylinConfig();
                     config.reloadKylinConfig(buildSiteProperties());
                     VersionUtil.loadKylinVersion();
-                    logger.info("Initialized a new KylinConfig from 
getInstanceFromEnv : "
-                            + System.identityHashCode(config));
+                    logger.info("Initialized a new KylinConfig from 
getInstanceFromEnv : {}",
+                            System.identityHashCode(config));
                     SYS_ENV_INSTANCE = config;
                 } catch (IllegalArgumentException e) {
                     throw new IllegalStateException("Failed to find 
KylinConfig ", e);
@@ -390,9 +390,9 @@ public class KylinConfig extends KylinConfigBase {
             // 2. load site conf, to keep backward compatibility it's still 
named kylin.properties
             // actually it's better to be named kylin-site.properties
             File propFile = getSitePropertiesFile();
-            if (propFile == null || !propFile.exists()) {
+            if (!propFile.exists()) {
                 logger.error("fail to locate " + KYLIN_CONF_PROPERTIES_FILE + 
" at '"
-                        + (propFile != null ? propFile.getAbsolutePath() : "") 
+ "'");
+                        + propFile.getAbsolutePath() + "'");
                 throw new RuntimeException("fail to locate " + 
KYLIN_CONF_PROPERTIES_FILE);
             }
             loadPropertiesFromInputStream(new FileInputStream(propFile), 
orderedProperties);
@@ -444,7 +444,7 @@ public class KylinConfig extends KylinConfigBase {
 
     // 
============================================================================
 
-    transient Map<Class, Object> managersCache = new ConcurrentHashMap<>();
+    private final transient Map<Class, Object> managersCache = new 
ConcurrentHashMap<>();
 
     private KylinConfig() {
         super();
@@ -454,20 +454,16 @@ public class KylinConfig extends KylinConfigBase {
         super(props, force);
     }
 
-    public <T> T getManager(Class<T> clz) {
+    public <T> T getManager(final Class<T> clz) {
         KylinConfig base = base();
         if (base != this)
             return base.getManager(clz);
 
-        if (managersCache == null) {
-            managersCache = new ConcurrentHashMap<>();
-        }
-
         Object mgr = managersCache.get(clz);
         if (mgr != null)
             return (T) mgr;
 
-        synchronized (clz) {
+        synchronized (managersCache) {
             mgr = managersCache.get(clz);
             if (mgr != null)
                 return (T) mgr;
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateTransformScanner.java
 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateTransformScanner.java
index 2ee7d25..0f805e8 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateTransformScanner.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateTransformScanner.java
@@ -27,8 +27,6 @@ import java.util.NoSuchElementException;
 import org.apache.kylin.common.util.ImmutableBitSet;
 import org.apache.kylin.measure.MeasureAggregator;
 import org.apache.kylin.measure.MeasureTransformation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Maps;
@@ -36,8 +34,6 @@ import com.google.common.collect.PeekingIterator;
 
 public class GTAggregateTransformScanner implements IGTScanner {
 
-    private static final Logger logger = 
LoggerFactory.getLogger(GTAggregateTransformScanner.class);
-
     protected final IGTScanner inputScanner;
     private final GTScanRequest req;
     private final GTTwoLayerAggregateParam twoLayerAggParam;
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/benchmark/SortedGTRecordGenerator.java
 
b/core-cube/src/main/java/org/apache/kylin/gridtable/benchmark/SortedGTRecordGenerator.java
index 36f4676..a3a136d 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/gridtable/benchmark/SortedGTRecordGenerator.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/gridtable/benchmark/SortedGTRecordGenerator.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.NoSuchElementException;
 import java.util.Random;
 
 import org.apache.kylin.common.util.ByteArray;
@@ -31,6 +32,7 @@ import org.apache.kylin.gridtable.GTInfo;
 import org.apache.kylin.gridtable.GTRecord;
 import org.apache.kylin.gridtable.IGTScanner;
 
+import org.apache.kylin.shaded.com.google.common.base.Preconditions;
 import org.apache.kylin.shaded.com.google.common.collect.Lists;
 
 public class SortedGTRecordGenerator {
@@ -43,7 +45,7 @@ public class SortedGTRecordGenerator {
     }
 
     public void addDimension(long cardinality, int length, Map<Integer, 
Integer> weights) {
-        assert cardinality > 0;
+        Preconditions.checkArgument(cardinality > 0);
         ColSpec spec = new ColSpec();
         spec.cardinality = cardinality;
         spec.length = length;
@@ -56,7 +58,7 @@ public class SortedGTRecordGenerator {
     }
 
     public void addMeasure(int length, Randomizer randomizer) {
-        assert length > 0;
+        Preconditions.checkArgument(length > 0);
         ColSpec spec = new ColSpec();
         spec.length = length;
         spec.measureRandomizer = randomizer;
@@ -91,7 +93,7 @@ public class SortedGTRecordGenerator {
     }
 
     public static class BytesRandomizer implements Randomizer {
-        final private byte[] bytes;
+        private final byte[] bytes;
 
         public BytesRandomizer(int len) {
             this.bytes = new byte[len];
@@ -138,6 +140,9 @@ public class SortedGTRecordGenerator {
 
                 @Override
                 public GTRecord next() {
+                    if (counter >= nRows)
+                        throw new NoSuchElementException();
+
                     for (int i = 0; i < colSpecs.size(); i++) {
                         ColSpec spec = colSpecs.get(i);
                         if (spec.cardinality > 0) {
@@ -194,7 +199,7 @@ public class SortedGTRecordGenerator {
         int curValue;
 
         public Distribution(ColSpec spec, long nRows) {
-            assert spec.cardinality > 0;
+            Preconditions.checkArgument(spec.cardinality > 0);
 
             this.spec = spec;
             this.nRows = nRows;
diff --git 
a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryGenerator.java 
b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryGenerator.java
index a0730ff..0b72dd8 100644
--- 
a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryGenerator.java
+++ 
b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryGenerator.java
@@ -109,6 +109,7 @@ public class DictionaryGenerator {
             @Nullable
             @Override
             public Dictionary<String> apply(@Nullable DictionaryInfo input) {
+                Preconditions.checkNotNull(input);
                 return input.dictionaryObject;
             }
         });
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/MeasureType.java 
b/core-metadata/src/main/java/org/apache/kylin/measure/MeasureType.java
index 89d81e0..54feef0 100644
--- a/core-metadata/src/main/java/org/apache/kylin/measure/MeasureType.java
+++ b/core-metadata/src/main/java/org/apache/kylin/measure/MeasureType.java
@@ -46,7 +46,7 @@ abstract public class MeasureType<T> implements 
java.io.Serializable {
      * 
---------------------------------------------------------------------------- */
 
     /** Validates a user defined FunctionDesc has expected parameter etc. 
Throw IllegalArgumentException if anything wrong. */
-    public void validate(FunctionDesc functionDesc) throws 
IllegalArgumentException {
+    public void validate(FunctionDesc functionDesc) {
         return;
     }
 
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/basic/BasicMeasureType.java
 
b/core-metadata/src/main/java/org/apache/kylin/measure/basic/BasicMeasureType.java
index b0836df..cdd758c 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/measure/basic/BasicMeasureType.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/measure/basic/BasicMeasureType.java
@@ -62,7 +62,7 @@ public class BasicMeasureType extends MeasureType {
     }
 
     @Override
-    public void validate(FunctionDesc functionDesc) throws 
IllegalArgumentException {
+    public void validate(FunctionDesc functionDesc) {
         DataType rtype = dataType;
 
         if (funcName.equals(FunctionDesc.FUNC_SUM)) {
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/bitmap/BitmapMeasureType.java
 
b/core-metadata/src/main/java/org/apache/kylin/measure/bitmap/BitmapMeasureType.java
index 9d95584..21a1a43 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/measure/bitmap/BitmapMeasureType.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/measure/bitmap/BitmapMeasureType.java
@@ -76,7 +76,7 @@ public class BitmapMeasureType extends 
MeasureType<BitmapCounter> {
     }
 
     @Override
-    public void validate(FunctionDesc functionDesc) throws 
IllegalArgumentException {
+    public void validate(FunctionDesc functionDesc) {
         checkArgument(FUNC_COUNT_DISTINCT.equals(functionDesc.getExpression()),
                 "BitmapMeasureType only support function %s, got %s", 
FUNC_COUNT_DISTINCT, functionDesc.getExpression());
         checkArgument(functionDesc.getParameterCount() == 1,
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/bitmap/RetentionPartialResult.java
 
b/core-metadata/src/main/java/org/apache/kylin/measure/bitmap/RetentionPartialResult.java
index 7a399fa..4c319a8 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/measure/bitmap/RetentionPartialResult.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/measure/bitmap/RetentionPartialResult.java
@@ -43,7 +43,7 @@ public class RetentionPartialResult {
 
     public void add(Object key, List keyList, Object value) {
         Preconditions.checkArgument(key != null);
-        Preconditions.checkArgument(keyList != null && keyList.size() >= 0);
+        Preconditions.checkArgument(keyList != null && !keyList.isEmpty());
         if (this.keyList == null) {
             this.keyList = Lists.transform(keyList, i -> i.toString());
             childKeyToParentKey = new HashMap<>(5);
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/dim/DimCountDistinctMeasureType.java
 
b/core-metadata/src/main/java/org/apache/kylin/measure/dim/DimCountDistinctMeasureType.java
index a9e3e82..eea6d46 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/measure/dim/DimCountDistinctMeasureType.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/measure/dim/DimCountDistinctMeasureType.java
@@ -87,6 +87,7 @@ public class DimCountDistinctMeasureType extends 
MeasureType<Object> {
         return UDAF_MAP;
     }
 
+    @Override
     public void adjustSqlDigest(List<MeasureDesc> measureDescs, SQLDigest 
sqlDigest) {
         for (MeasureDesc measureDesc : measureDescs) {
             
sqlDigest.groupbyColumns.addAll(measureDesc.getFunction().getParameter().getColRefs());
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/hllc/HLLCMeasureType.java
 
b/core-metadata/src/main/java/org/apache/kylin/measure/hllc/HLLCMeasureType.java
index b262be0..0099b3e 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/measure/hllc/HLLCMeasureType.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/measure/hllc/HLLCMeasureType.java
@@ -71,7 +71,7 @@ public class HLLCMeasureType extends MeasureType<HLLCounter> {
         this.dataType = dataType;
     }
 
-    public void validate(FunctionDesc functionDesc) throws 
IllegalArgumentException {
+    public void validate(FunctionDesc functionDesc) {
         validate(functionDesc.getExpression(), 
functionDesc.getReturnDataType(), true);
     }
 
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/map/bitmap/BitmapMapMeasureType.java
 
b/core-metadata/src/main/java/org/apache/kylin/measure/map/bitmap/BitmapMapMeasureType.java
index b0930ba..79f7ac6 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/measure/map/bitmap/BitmapMapMeasureType.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/measure/map/bitmap/BitmapMapMeasureType.java
@@ -72,7 +72,7 @@ public class BitmapMapMeasureType extends 
MeasureType<BitmapCounterMap> {
     }
 
     @Override
-    public void validate(FunctionDesc functionDesc) throws 
IllegalArgumentException {
+    public void validate(FunctionDesc functionDesc) {
         checkArgument(FUNC_COUNT_DISTINCT.equals(functionDesc.getExpression()),
                 "BitmapMapMeasureType only support function %s, got %s", 
FUNC_COUNT_DISTINCT,
                 functionDesc.getExpression());
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/raw/RawMeasureType.java 
b/core-metadata/src/main/java/org/apache/kylin/measure/raw/RawMeasureType.java
index 7dc8ecc..523e5bf 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/measure/raw/RawMeasureType.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/measure/raw/RawMeasureType.java
@@ -79,7 +79,8 @@ public class RawMeasureType extends 
MeasureType<List<ByteArray>> {
     public RawMeasureType() {
     }
 
-    public void validate(FunctionDesc functionDesc) throws 
IllegalArgumentException {
+    @Override
+    public void validate(FunctionDesc functionDesc) {
         validate(functionDesc.getExpression(), 
functionDesc.getReturnDataType(), true);
     }
 
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
 
b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
index 97cb402..658a765 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
@@ -101,7 +101,8 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
         this.dataType = dataType;
     }
 
-    public void validate(FunctionDesc functionDesc) throws 
IllegalArgumentException {
+    @Override
+    public void validate(FunctionDesc functionDesc) {
         validate(functionDesc.getExpression(), 
functionDesc.getReturnDataType(), true);
     }
 
@@ -129,7 +130,7 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
             private List<TblColRef> literalCols = null;
             private int keyLength = 0;
 
-            private volatile DimensionEncoding[] newDimensionEncodings = null;
+            private DimensionEncoding[] newDimensionEncodings = null;
             private int newKeyLength = 0;
             private boolean needReEncode = true;
 
@@ -162,7 +163,7 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
                     offset += dimensionEncodings[i].getLengthOfEncoding();
                 }
 
-                TopNCounter<ByteArray> topNCounter = new 
TopNCounter<ByteArray>(
+                TopNCounter<ByteArray> topNCounter = new TopNCounter<>(
                         dataType.getPrecision() * 
TopNCounter.EXTRA_SPACE_RATE);
                 topNCounter.offer(key, counter);
                 return topNCounter;
@@ -245,7 +246,7 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
     public List<TblColRef> getColumnsNeedDictionary(FunctionDesc functionDesc) 
{
         List<TblColRef> columnsNeedDict = Lists.newArrayList();
         List<TblColRef> allCols = functionDesc.getParameter().getColRefs();
-        int start = (functionDesc.getParameter().isColumnType() == true) ? 1 : 
0;
+        int start = functionDesc.getParameter().isColumnType() ? 1 : 0;
         for (int i = start; i < allCols.size(); i++) {
             TblColRef tblColRef = allCols.get(i);
             String encoding = getEncoding(functionDesc, tblColRef).getFirst();
@@ -273,12 +274,12 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
             }
         }
 
-        if (digest.groupbyColumns.containsAll(literalCol) == false)
+        if (!digest.groupbyColumns.containsAll(literalCol))
             return null;
 
         List retainList = unmatchedDimensions.stream().filter(colRef -> 
literalCol.contains(colRef)).collect(Collectors.toList());
 
-        if (retainList.size() > 0){
+        if (!retainList.isEmpty()){
             cuboidCanAnswer = false;
         }
 
@@ -287,7 +288,7 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
 
             // the measure function must be SUM
             FunctionDesc onlyFunction = digest.aggregations.iterator().next();
-            if (isTopNCompatibleSum(topN.getFunction(), onlyFunction) == false)
+            if (!isTopNCompatibleSum(topN.getFunction(), onlyFunction))
                 return null;
 
             unmatchedDimensions.removeAll(literalCol);
@@ -312,7 +313,7 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
             };
         }
 
-        if (digest.aggregations.size() == 0) {
+        if (digest.aggregations.isEmpty()) {
             // directly query the UHC column without sorting
             boolean b = unmatchedDimensions.removeAll(literalCol);
             if (b) {
@@ -371,17 +372,14 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
         TblColRef topnNumCol = getTopNNumericColumn(topN);
 
         if (topnNumCol == null) {
-            if (sum.isCount())
-                return true;
-
-            return false;
+            return sum.isCount();
         }
 
-        if (sum.isSum() == false)
+        if (!sum.isSum())
             return false;
 
         if (sum.getParameter() == null || sum.getParameter().getColRefs() == 
null
-                || sum.getParameter().getColRefs().size() == 0)
+                || sum.getParameter().getColRefs().isEmpty())
             return false;
 
         TblColRef sumCol = sum.getParameter().getColRefs().get(0);
@@ -415,9 +413,9 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
                 continue;
             }
 
-            if (sqlDigest.aggregations.size() > 0) {
+            if (!sqlDigest.aggregations.isEmpty()) {
                 FunctionDesc origFunc = 
sqlDigest.aggregations.iterator().next();
-                if (origFunc.isSum() == false && origFunc.isCount() == false) {
+                if (!origFunc.isSum() && !origFunc.isCount()) {
                     logger.warn("When query with topN, only SUM/Count function 
is allowed.");
                     return;
                 }
@@ -432,7 +430,7 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
                     continue;
                 }
 
-                logger.info("Rewrite function " + origFunc + " to " + 
topnFunc);
+                logger.info("Rewrite function {} to {}", origFunc, topnFunc);
             }
 
 
@@ -530,7 +528,7 @@ public class TopNMeasureType extends 
MeasureType<TopNCounter<ByteArray>> {
                     try {
                         encodingVersion = Integer.parseInt(encodingVersionStr);
                     } catch (NumberFormatException e) {
-                        throw new 
RuntimeException(TopNMeasureType.CONFIG_ENCODING_VERSION_PREFIX + 
colRef.getName()
+                        throw new 
IllegalArgumentException(TopNMeasureType.CONFIG_ENCODING_VERSION_PREFIX + 
colRef.getName()
                                 + " has to be an integer");
                     }
                 }
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
index 6c381b6..1731bc5 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
@@ -79,7 +79,9 @@ public class Broadcaster implements Closeable {
 
     // 
============================================================================
 
-    static final Map<String, List<Listener>> staticListenerMap = 
Maps.newConcurrentMap();
+    private static final Map<String, List<Listener>> staticListenerMap = 
Maps.newConcurrentMap();
+
+    private static final Object LOCK = new Object();
 
     private KylinConfig config;
     private ExecutorService announceMainLoop;
@@ -142,7 +144,7 @@ public class Broadcaster implements Closeable {
                                     } catch (IOException e) {
                                         logger.error(
                                                 "Announce broadcast event 
failed, targetNode {} broadcastEvent {}, error msg: {}",
-                                                node, broadcastEvent, e);
+                                                node, broadcastEvent, 
e.getMessage());
                                         
syncErrorHandler.handleAnnounceError(node, restClient, broadcastEvent);
                                     }
                                 }
@@ -201,7 +203,7 @@ public class Broadcaster implements Closeable {
     }
 
     private static void doRegisterListener(Map<String, List<Listener>> lmap, 
Listener listener, String... entities) {
-        synchronized (lmap) {
+        synchronized (LOCK) {
             // ignore re-registration
             List<Listener> all = lmap.get(SYNC_ALL);
             if (all != null && all.contains(listener)) {
@@ -482,4 +484,8 @@ public class Broadcaster implements Closeable {
         }
 
     }
+
+    public static void clearStaticListenerMap() {
+        staticListenerMap.clear();
+    }
 }
diff --git 
a/core-metadata/src/test/java/org/apache/kylin/metadata/cachesync/BroadcasterTest.java
 
b/core-metadata/src/test/java/org/apache/kylin/metadata/cachesync/BroadcasterTest.java
index 762512f..48a43f8 100644
--- 
a/core-metadata/src/test/java/org/apache/kylin/metadata/cachesync/BroadcasterTest.java
+++ 
b/core-metadata/src/test/java/org/apache/kylin/metadata/cachesync/BroadcasterTest.java
@@ -68,7 +68,7 @@ public class BroadcasterTest extends 
LocalFileMetadataTestCase {
         broadcaster.notifyListener("test", Event.UPDATE, "");
 
         broadcaster.stopAnnounce();
-        Broadcaster.staticListenerMap.clear();
+        Broadcaster.clearStaticListenerMap();
     }
 
     @Test
@@ -95,7 +95,7 @@ public class BroadcasterTest extends 
LocalFileMetadataTestCase {
         broadcaster.notifyNonStaticListener("test", Event.UPDATE, "");
 
         broadcaster.stopAnnounce();
-        Broadcaster.staticListenerMap.clear();
+        Broadcaster.clearStaticListenerMap();
     }
 
     @Test
@@ -112,7 +112,7 @@ public class BroadcasterTest extends 
LocalFileMetadataTestCase {
             }
 
             broadcaster.stopAnnounce();
-            Broadcaster.staticListenerMap.clear();
+            Broadcaster.clearStaticListenerMap();
         } finally {
             System.clearProperty("kylin.server.cluster-servers");
             System.clearProperty("kylin.metadata.sync-error-handler");
diff --git 
a/datasource-sdk/src/main/java/org/apache/kylin/sdk/datasource/adaptor/DefaultAdaptor.java
 
b/datasource-sdk/src/main/java/org/apache/kylin/sdk/datasource/adaptor/DefaultAdaptor.java
index 221f51e..9a4aa51 100644
--- 
a/datasource-sdk/src/main/java/org/apache/kylin/sdk/datasource/adaptor/DefaultAdaptor.java
+++ 
b/datasource-sdk/src/main/java/org/apache/kylin/sdk/datasource/adaptor/DefaultAdaptor.java
@@ -37,6 +37,8 @@ import org.apache.commons.lang.StringUtils;
  */
 public class DefaultAdaptor extends AbstractJdbcAdaptor {
 
+    public static final String TABLE_NAME = "TABLE_NAME";
+    public static final String TABLE_SCHEM = "TABLE_SCHEM";
     private static Joiner joiner = Joiner.on('_');
 
     public DefaultAdaptor(AdaptorConfig config) throws Exception {
@@ -149,7 +151,7 @@ public class DefaultAdaptor extends AbstractJdbcAdaptor {
         List<String> ret = new LinkedList<>();
         try (Connection con = getConnection(); ResultSet rs = 
con.getMetaData().getSchemas()) {
             while (rs.next()) {
-                String schema = rs.getString("TABLE_SCHEM");
+                String schema = rs.getString(TABLE_SCHEM);
                 if (StringUtils.isNotBlank(schema)) {
                     ret.add(schema);
                 }
@@ -169,7 +171,7 @@ public class DefaultAdaptor extends AbstractJdbcAdaptor {
         List<String> ret = new ArrayList<>();
         try (Connection conn = getConnection(); ResultSet rs = 
conn.getMetaData().getTables(null, schema, null, null)) {
             while (rs.next()) {
-                String name = rs.getString("TABLE_NAME");
+                String name = rs.getString(TABLE_NAME);
                 if (StringUtils.isNotBlank(schema)) {
                     ret.add(name);
                 }
@@ -286,12 +288,12 @@ public class DefaultAdaptor extends AbstractJdbcAdaptor {
      */
     public List<String> listTables() throws SQLException {
         List<String> ret = new ArrayList<>();
-        if (tablesCache == null || tablesCache.size() == 0) {
+        if (tablesCache.size() == 0) {
             try (Connection conn = getConnection();
                     ResultSet rs = conn.getMetaData().getTables(null, null, 
null, null)) {
                 while (rs.next()) {
-                    String name = rs.getString("TABLE_NAME");
-                    String database = rs.getString("TABLE_SCHEM") != null ? 
rs.getString("TABLE_SCHEM")
+                    String name = rs.getString(TABLE_NAME);
+                    String database = rs.getString(TABLE_SCHEM) != null ? 
rs.getString(TABLE_SCHEM)
                             : rs.getString("TABLE_CAT");
                     String cacheKey = joiner.join(config.datasourceId, 
config.url, database, "tables");
                     List<String> cachedTables = 
tablesCache.getIfPresent(cacheKey);
@@ -322,16 +324,16 @@ public class DefaultAdaptor extends AbstractJdbcAdaptor {
      */
     public List<String> listColumns() throws SQLException {
         List<String> ret = new ArrayList<>();
-        if (columnsCache == null || columnsCache.size() == 0) {
+        if (columnsCache.size() == 0) {
             CachedRowSet columnsRs = null;
             try (Connection conn = getConnection();
                     ResultSet rs = conn.getMetaData().getColumns(null, null, 
null, null)) {
                 columnsRs = cacheResultSet(rs);
             }
             while (columnsRs.next()) {
-                String database = columnsRs.getString("TABLE_SCHEM") != null ? 
columnsRs.getString("TABLE_SCHEM")
+                String database = columnsRs.getString(TABLE_SCHEM) != null ? 
columnsRs.getString(TABLE_SCHEM)
                         : columnsRs.getString("TABLE_CAT");
-                String table = columnsRs.getString("TABLE_NAME");
+                String table = columnsRs.getString(TABLE_NAME);
                 String column = columnsRs.getString("COLUMN_NAME");
                 String cacheKey = joiner.join(config.datasourceId, config.url, 
database, table, "columns");
                 List<String> cachedColumns = 
columnsCache.getIfPresent(cacheKey);
diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/CubingJob.java 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/CubingJob.java
index 0407f48..646c28a 100644
--- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/CubingJob.java
+++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/CubingJob.java
@@ -211,12 +211,12 @@ public class CubingJob extends DefaultChainedExecutable {
         final Output output = getManager().getOutput(getId());
         if (state != ExecutableState.ERROR
                 && 
!cubeInstance.getDescriptor().getStatusNeedNotify().contains(state.toString())) 
{
-            logger.info("state:" + state + " no need to notify users");
+            logger.info("state:{} no need to notify users", state);
             return null;
         }
 
         if (!MailNotificationUtil.hasMailNotification(state)) {
-            logger.info("Cannot find email template for job state: " + state);
+            logger.info("Cannot find email template for job state: {}", state);
             return null;
         }
 
@@ -289,6 +289,7 @@ public class CubingJob extends DefaultChainedExecutable {
         super.onExecuteFinished(result, executableContext);
     }
 
+    @Override
     protected void onStatusChange(ExecutableContext context, ExecuteResult 
result, ExecutableState state) {
         super.onStatusChange(context, result, state);
 
@@ -415,9 +416,9 @@ public class CubingJob extends DefaultChainedExecutable {
         try {
             String levelPath = 
JobBuilderSupport.getCuboidOutputPathsByLevel(rootPath, level);
             FileSystem fs = HadoopUtil.getFileSystem(levelPath);
-            return fs.getContentSummary(new Path(levelPath)).getLength() / 
(1024L * 1024L);
+            return fs.getContentSummary(new Path(levelPath)).getLength() / 
(1024.0 * 1024.0);
         } catch (Exception e) {
-            logger.warn("get level real size failed." + e);
+            logger.warn("get level real size failed.", e);
             return 0L;
         }
     }
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
index a936ad3..bf5a996 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
@@ -26,6 +26,7 @@ import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
 import java.util.ArrayList;
@@ -107,7 +108,7 @@ public class CubeStatsReader {
         Path path = new Path(HadoopUtil.fixWindowsPath("file://" + 
tmpSeqFile.getAbsolutePath()));
 
         CubeStatsResult cubeStatsResult = new CubeStatsResult(path, 
kylinConfig.getCubeStatsHLLPrecision());
-        tmpSeqFile.delete();
+        Files.deleteIfExists(tmpSeqFile.toPath());
 
         this.seg = cubeSegment;
         this.cuboidScheduler = cuboidScheduler;
@@ -234,14 +235,20 @@ public class CubeStatsReader {
     }
 
     private static Double harmonicMean(List<Double> data) {
-        if (data == null || data.size() == 0) {
+        if (data == null || data.isEmpty()) {
             return 1.0;
         }
         Double sum = 0.0;
         for (Double item : data) {
             sum += 1.0 / item;
         }
-        return data.size() / sum;
+
+        if (sum == 0.0) {
+            return 1.0;
+        } else {
+            return data.size() / sum;
+        }
+
     }
 
     private static List<Double> getHistoricalRating(CubeSegment cubeSegment,
@@ -310,8 +317,6 @@ public class CubeStatsReader {
         }
 
         logger.info("cube size is {} after optimize", 
SumHelper.sumDouble(sizeMap.values()));
-
-        return;
     }
 
 
@@ -372,7 +377,7 @@ public class CubeStatsReader {
     private void print(PrintWriter out) {
         Map<Long, Long> cuboidRows = getCuboidRowEstimatesHLL();
         Map<Long, Double> cuboidSizes = getCuboidSizeMap();
-        List<Long> cuboids = new ArrayList<Long>(cuboidRows.keySet());
+        List<Long> cuboids = new ArrayList<>(cuboidRows.keySet());
         Collections.sort(cuboids);
 
         
out.println("============================================================================");
@@ -524,7 +529,7 @@ public class CubeStatsReader {
     }
 
     public static void main(String[] args) throws IOException {
-        System.out.println("CubeStatsReader is used to read cube statistic 
saved in metadata store");
+        logger.info("CubeStatsReader is used to read cube statistic saved in 
metadata store");
         KylinConfig config = KylinConfig.getInstanceFromEnv();
         CubeInstance cube = CubeManager.getInstance(config).getCube(args[0]);
         List<CubeSegment> segments = cube.getSegments();
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/streaming/RowRecordReader.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/streaming/RowRecordReader.java
index 505e331..2206fd7 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/streaming/RowRecordReader.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/streaming/RowRecordReader.java
@@ -136,7 +136,7 @@ public class RowRecordReader extends ColumnarFilesReader {
                 return measure;
             }
         }
-        return null;
+        throw new IllegalArgumentException("No measure found with name '" + 
name + "'.");
     }
 
     private Map<String, DimensionEncoding> 
getDimensionEncodings(FragmentMetaInfo fragmentMetaInfo,
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java 
b/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
index 8a80ff0..fac5a7e 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
@@ -40,7 +40,7 @@ public class SQLRequest implements Serializable {
 
     private Map<String, String> backdoorToggles;
 
-    protected volatile Object cacheKey = null;
+    protected transient Object cacheKey = null;
 
     public SQLRequest() {
     }
diff --git 
a/tool/src/main/java/org/apache/kylin/tool/extractor/MrJobInfoExtractor.java 
b/tool/src/main/java/org/apache/kylin/tool/extractor/MrJobInfoExtractor.java
index 797c601..5e1b0c9 100644
--- a/tool/src/main/java/org/apache/kylin/tool/extractor/MrJobInfoExtractor.java
+++ b/tool/src/main/java/org/apache/kylin/tool/extractor/MrJobInfoExtractor.java
@@ -83,21 +83,22 @@ public class MrJobInfoExtractor extends 
AbstractInfoExtractor {
     }
 
     private String getHttpResponse(String url) {
-        DefaultHttpClient client = new DefaultHttpClient();
         String msg = null;
-        int retryTimes = 0;
-        while (msg == null && retryTimes < HTTP_RETRY) {
-            retryTimes++;
-
-            HttpGet request = new HttpGet(url);
-            try {
-                request.addHeader("accept", "application/json");
-                HttpResponse response = client.execute(request);
-                msg = EntityUtils.toString(response.getEntity());
-            } catch (Exception e) {
-                logger.warn("Failed to fetch http response. Retry={}", 
retryTimes, e);
-            } finally {
-                request.releaseConnection();
+        try (DefaultHttpClient client = new DefaultHttpClient()) {
+            int retryTimes = 0;
+            while (msg == null && retryTimes < HTTP_RETRY) {
+                retryTimes++;
+
+                HttpGet request = new HttpGet(url);
+                try {
+                    request.addHeader("accept", "application/json");
+                    HttpResponse response = client.execute(request);
+                    msg = EntityUtils.toString(response.getEntity());
+                } catch (Exception e) {
+                    logger.warn("Failed to fetch http response. Retry={}", 
retryTimes, e);
+                } finally {
+                    request.releaseConnection();
+                }
             }
         }
         return msg;

Reply via email to