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 <[email protected]> Authored: Thu Mar 24 18:02:31 2016 +0800 Committer: Li Yang <[email protected]> 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])); + } }; // ============================================================================
