You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by qh...@apache.org on 2015/09/04 16:05:08 UTC

[2/2] incubator-kylin git commit: KYLIN-992

KYLIN-992


Project: http://git-wip-us.apache.org/repos/asf/incubator-kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kylin/commit/b5c9722b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kylin/tree/b5c9722b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kylin/diff/b5c9722b

Branch: refs/heads/0.8
Commit: b5c9722bb5cc5f2c2a66eac3080fcfb3691103a4
Parents: eb0652a
Author: qianhao.zhou <qi...@ebay.com>
Authored: Wed Sep 2 17:19:24 2015 +0800
Committer: qianhao.zhou <qi...@ebay.com>
Committed: Fri Sep 4 22:04:36 2015 +0800

----------------------------------------------------------------------
 .../kylin/common/persistence/ResourceStore.java | 50 ++++++++++----------
 1 file changed, 25 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/b5c9722b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
index ba61c37..b6ba550 100644
--- a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
+++ b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
@@ -72,35 +72,35 @@ abstract public class ResourceStore {
         }
         return knownImpl;
     }
-
-    public static ResourceStore getStore(KylinConfig kylinConfig) {
-        ResourceStore r = CACHE.get(kylinConfig);
+    
+    private static ResourceStore createResourceStore(KylinConfig kylinConfig) {
         List<Throwable> es = new ArrayList<Throwable>();
-        if (r == null) {
-            logger.info("Using metadata url " + kylinConfig.getMetadataUrl() + " for resource store");
-            for (Class<? extends ResourceStore> cls : getKnownImpl()) {
-                try {
-                    r = cls.getConstructor(KylinConfig.class).newInstance(kylinConfig);
-                } catch (Exception e) {
-                    es.add(e);
-                } catch (NoClassDefFoundError er) {
-                    // may throw NoClassDefFoundError
-                    es.add(er);
-                }
-                if (r != null) {
-                    break;
-                }
-            }
-            if (r == null) {
-                for (Throwable exceptionOrError : es) {
-                    logger.error("Create new store instance failed ", exceptionOrError);
-                }
-                throw new IllegalArgumentException("Failed to find metadata store by url: " + kylinConfig.getMetadataUrl());
+        logger.info("Using metadata url " + kylinConfig.getMetadataUrl() + " for resource store");
+        for (Class<? extends ResourceStore> cls : getKnownImpl()) {
+            try {
+                return cls.getConstructor(KylinConfig.class).newInstance(kylinConfig);
+            } catch (Throwable e) {
+                es.add(e);
             }
+        }
+        for (Throwable exceptionOrError : es) {
+            logger.error("Create new store instance failed ", exceptionOrError);
+        }
+        throw new IllegalArgumentException("Failed to find metadata store by url: " + kylinConfig.getMetadataUrl());
+    }
 
-            CACHE.put(kylinConfig, r);
+    public static ResourceStore getStore(KylinConfig kylinConfig) {
+        if (CACHE.containsKey(kylinConfig)) {
+            return CACHE.get(kylinConfig);
+        }
+        synchronized (ResourceStore.class) {
+            if (CACHE.containsKey(kylinConfig)) {
+                return CACHE.get(kylinConfig);
+            } else {
+                CACHE.putIfAbsent(kylinConfig, createResourceStore(kylinConfig));
+            }
         }
-        return r;
+        return CACHE.get(kylinConfig);
     }
 
     // ============================================================================