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]));
+        }
     };
 
     // ============================================================================