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;