Updated Branches:
  refs/heads/master 3e2000341 -> 4a83dae35

DRILL-317: StorageEngineRegistry creates a new StorageEngine everytime 
getEngine() is called


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

Branch: refs/heads/master
Commit: 622aad0fa976608bbf95a573091fa4429d9b0bf5
Parents: 3e20003
Author: Aditya Kishore <[email protected]>
Authored: Sun Dec 1 19:33:34 2013 -0800
Committer: Jacques Nadeau <[email protected]>
Committed: Sun Dec 1 19:33:34 2013 -0800

----------------------------------------------------------------------
 .../drill/exec/store/StorageEngineRegistry.java    | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/622aad0f/exec/java-exec/src/main/java/org/apache/drill/exec/store/StorageEngineRegistry.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/store/StorageEngineRegistry.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/store/StorageEngineRegistry.java
index bd4efcd..4cc7346 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/store/StorageEngineRegistry.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/store/StorageEngineRegistry.java
@@ -28,12 +28,11 @@ import 
org.apache.drill.common.exceptions.ExecutionSetupException;
 import org.apache.drill.common.logical.StorageEngineConfig;
 import org.apache.drill.common.util.PathScanner;
 import org.apache.drill.exec.ExecConstants;
-import org.apache.drill.exec.exception.SetupException;
 import org.apache.drill.exec.server.DrillbitContext;
 
 public class StorageEngineRegistry {
   static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(StorageEngineRegistry.class);
-  
+
   private Map<Object, Constructor<? extends StorageEngine>> availableEngines = 
new HashMap<Object, Constructor<? extends StorageEngine>>();
   private Map<StorageEngineConfig, StorageEngine> activeEngines = new 
HashMap<StorageEngineConfig, StorageEngine>();
 
@@ -42,7 +41,7 @@ public class StorageEngineRegistry {
     init(context.getConfig());
     this.context = context;
   }
-  
+
   @SuppressWarnings("unchecked")
   public void init(DrillConfig config){
     Collection<Class<? extends StorageEngine>> engines = 
PathScanner.scanForImplementations(StorageEngine.class, 
config.getStringList(ExecConstants.STORAGE_ENGINE_SCAN_PACKAGES));
@@ -63,21 +62,23 @@ public class StorageEngineRegistry {
       }
     }
   }
-  
-  public StorageEngine getEngine(StorageEngineConfig engineConfig) throws 
ExecutionSetupException{
+
+  public synchronized StorageEngine getEngine(StorageEngineConfig 
engineConfig) throws ExecutionSetupException{
     StorageEngine engine = activeEngines.get(engineConfig);
     if(engine != null) return engine;
     Constructor<? extends StorageEngine> c = 
availableEngines.get(engineConfig.getClass());
     if(c == null) throw new ExecutionSetupException(String.format("Failure 
finding StorageEngine constructor for config %s", engineConfig));
     try {
-      return c.newInstance(engineConfig, context);
+      engine = c.newInstance(engineConfig, context);
+      activeEngines.put(engineConfig, engine);
+      return engine;
     } catch (InstantiationException | IllegalAccessException | 
IllegalArgumentException | InvocationTargetException e) {
       Throwable t = e instanceof InvocationTargetException ? 
((InvocationTargetException)e).getTargetException() : e;
       if(t instanceof ExecutionSetupException) throw 
((ExecutionSetupException) t);
       throw new ExecutionSetupException(String.format("Failure setting up new 
storage engine configuration for config %s", engineConfig), t);
     }
   }
-  
 
-  
+
+
 }

Reply via email to