You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/03/24 11:03:02 UTC
kylin git commit: KYLIN-1492 finalize dimension encoding extentsion
point
Repository: kylin
Updated Branches:
refs/heads/master db932df60 -> ea5df5471
KYLIN-1492 finalize dimension encoding extentsion point
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ea5df547
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ea5df547
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ea5df547
Branch: refs/heads/master
Commit: ea5df54711424c00209034b4266617dc13ff35e6
Parents: db932df
Author: Li Yang <li...@apache.org>
Authored: Thu Mar 24 18:02:31 2016 +0800
Committer: Li Yang <li...@apache.org>
Committed: Thu Mar 24 18:02:44 2016 +0800
----------------------------------------------------------------------
.../dimension/DimensionEncodingFactory.java | 35 +++++++++++++++-----
.../apache/kylin/dimension/FixedLenDimEnc.java | 21 +++++-------
2 files changed, 36 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/ea5df547/core-metadata/src/main/java/org/apache/kylin/dimension/DimensionEncodingFactory.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/dimension/DimensionEncodingFactory.java b/core-metadata/src/main/java/org/apache/kylin/dimension/DimensionEncodingFactory.java
index fa639c6..af5551d 100644
--- a/core-metadata/src/main/java/org/apache/kylin/dimension/DimensionEncodingFactory.java
+++ b/core-metadata/src/main/java/org/apache/kylin/dimension/DimensionEncodingFactory.java
@@ -19,21 +19,27 @@
package org.apache.kylin.dimension;
import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.common.util.ClassUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
public abstract class DimensionEncodingFactory {
+ private static final Logger logger = LoggerFactory.getLogger(DimensionEncodingFactory.class);
+
private static Map<String, DimensionEncodingFactory> factoryMap;
/** Create a DimensionEncoding instance, with inputs corresponding to RowKeyColDesc.encodingName and RowKeyColDesc.encodingArgs. */
public static DimensionEncoding create(String encodingName, String[] args) {
- if (factoryMap == null) {
+ if (factoryMap == null)
initFactoryMap();
- }
DimensionEncodingFactory factory = factoryMap.get(encodingName);
if (factory == null) {
@@ -44,10 +50,19 @@ public abstract class DimensionEncodingFactory {
return factory.createDimensionEncoding(encodingName, args);
}
+ public static Set<String> getValidEncodings() {
+ if (factoryMap == null)
+ initFactoryMap();
+
+ TreeSet<String> result = Sets.newTreeSet();
+ result.addAll(factoryMap.keySet());
+ result.add(DictionaryDimEnc.ENCODING_NAME);
+ return result;
+ }
+
public static boolean isVaildEncoding(String encodingName) {
- if (factoryMap == null) {
+ if (factoryMap == null)
initFactoryMap();
- }
// note dictionary is a special case
return DictionaryDimEnc.ENCODING_NAME.equals(encodingName) || factoryMap.containsKey(encodingName);
@@ -58,15 +73,19 @@ public abstract class DimensionEncodingFactory {
Map<String, DimensionEncodingFactory> map = Maps.newConcurrentMap();
// built-in encodings, note dictionary is a special case
- map.put(FixedLenDimEnc.ENCODING_NAME, FixedLenDimEnc.getFactory());
+ map.put(FixedLenDimEnc.ENCODING_NAME, new FixedLenDimEnc.Factory());
// custom encodings
String[] clsNames = KylinConfig.getInstanceFromEnv().getCubeDimensionCustomEncodingFactories();
for (String clsName : clsNames) {
- DimensionEncodingFactory factory = (DimensionEncodingFactory) ClassUtil.newInstance(clsName);
- map.put(factory.getSupportedEncodingName(), factory);
+ try {
+ DimensionEncodingFactory factory = (DimensionEncodingFactory) ClassUtil.newInstance(clsName);
+ map.put(factory.getSupportedEncodingName(), factory);
+ } catch (Exception ex) {
+ logger.error("Failed to init dimension encoding factory " + clsName, ex);
+ }
}
-
+
factoryMap = map;
}
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/ea5df547/core-metadata/src/main/java/org/apache/kylin/dimension/FixedLenDimEnc.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/dimension/FixedLenDimEnc.java b/core-metadata/src/main/java/org/apache/kylin/dimension/FixedLenDimEnc.java
index 9d99d62..1e9ca79 100644
--- a/core-metadata/src/main/java/org/apache/kylin/dimension/FixedLenDimEnc.java
+++ b/core-metadata/src/main/java/org/apache/kylin/dimension/FixedLenDimEnc.java
@@ -37,20 +37,17 @@ public class FixedLenDimEnc extends DimensionEncoding {
public static final byte ROWKEY_PLACE_HOLDER_BYTE = 9;
public static final String ENCODING_NAME = "fixed_length";
-
- public static DimensionEncodingFactory getFactory() {
- return new DimensionEncodingFactory() {
- @Override
- public String getSupportedEncodingName() {
- return ENCODING_NAME;
- }
+ public static class Factory extends DimensionEncodingFactory {
+ @Override
+ public String getSupportedEncodingName() {
+ return ENCODING_NAME;
+ }
- @Override
- public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) {
- return new FixedLenDimEnc(Integer.parseInt(args[0]));
- }
- };
+ @Override
+ public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) {
+ return new FixedLenDimEnc(Integer.parseInt(args[0]));
+ }
};
// ============================================================================