Author: kwall
Date: Wed Oct 22 12:40:37 2014
New Revision: 1633606

URL: http://svn.apache.org/r1633606
Log:
QPID-6154: [Java Broker] Fix race condition that would cause an 
ReplicatedEnvironment to be leaked on restart

Modified:
    
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java

Modified: 
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java?rev=1633606&r1=1633605&r2=1633606&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
 (original)
+++ 
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
 Wed Oct 22 12:40:37 2014
@@ -223,7 +223,7 @@ public class ReplicatedEnvironmentFacade
         boolean success = false;
         try
         {
-            _environment = createEnvironment(true);
+            createEnvironment(true);
             success = true;
         }
         finally
@@ -942,7 +942,7 @@ public class ReplicatedEnvironmentFacade
 
         closeEnvironmentOnRestart();
 
-        _environment = createEnvironment(false);
+        createEnvironment(false);
 
         registerAppStateMonitorIfPermittedNodesSpecified();
 
@@ -1035,7 +1035,7 @@ public class ReplicatedEnvironmentFacade
         }
     }
 
-    private ReplicatedEnvironment createEnvironment(boolean 
createEnvironmentInSeparateThread)
+    private void createEnvironment(boolean createEnvironmentInSeparateThread)
     {
         String groupName = _configuration.getGroupName();
         String helperHostPort = _configuration.getHelperHostPort();
@@ -1100,22 +1100,23 @@ public class ReplicatedEnvironmentFacade
 
         if (createEnvironmentInSeparateThread)
         {
-            return createEnvironmentInSeparateThread(_environmentDirectory, 
envConfig, replicationConfig);
+            createEnvironmentInSeparateThread(_environmentDirectory, 
envConfig, replicationConfig);
         }
         else
         {
-            return createEnvironment(_environmentDirectory, envConfig, 
replicationConfig);
+            createEnvironment(_environmentDirectory, envConfig, 
replicationConfig);
         }
     }
 
-    private ReplicatedEnvironment createEnvironmentInSeparateThread(final File 
environmentPathFile, final EnvironmentConfig envConfig,
+    private void createEnvironmentInSeparateThread(final File 
environmentPathFile, final EnvironmentConfig envConfig,
             final ReplicationConfig replicationConfig)
     {
-        Future<ReplicatedEnvironment> environmentFuture = 
_environmentJobExecutor.submit(new Callable<ReplicatedEnvironment>(){
+        Future<Void> environmentFuture = _environmentJobExecutor.submit(new 
Callable<Void>(){
             @Override
-            public ReplicatedEnvironment call() throws Exception
+            public Void call() throws Exception
             {
-                return createEnvironment(environmentPathFile, envConfig, 
replicationConfig);
+                createEnvironment(environmentPathFile, envConfig, 
replicationConfig);
+                return null;
             }});
 
         final long setUpTimeOutMillis = 
extractEnvSetupTimeoutMillis(replicationConfig);
@@ -1125,7 +1126,7 @@ public class ReplicatedEnvironmentFacade
         {
             try
             {
-                return environmentFuture.get(initialTimeOutMillis, 
TimeUnit.MILLISECONDS);
+                environmentFuture.get(initialTimeOutMillis, 
TimeUnit.MILLISECONDS);
             }
             catch (TimeoutException te)
             {
@@ -1134,7 +1135,7 @@ public class ReplicatedEnvironmentFacade
                     LOGGER.warn("Slow replicated environment creation for " + 
_prettyGroupNodeName
                                 + ". Will continue to wait for further " + 
remainingTimeOutMillis
                                 + "ms. for environment creation to complete.");
-                    return environmentFuture.get(remainingTimeOutMillis, 
TimeUnit.MILLISECONDS);
+                    environmentFuture.get(remainingTimeOutMillis, 
TimeUnit.MILLISECONDS);
                 }
                 else
                 {
@@ -1158,16 +1159,14 @@ public class ReplicatedEnvironmentFacade
         }
     }
 
-    private ReplicatedEnvironment createEnvironment(File environmentPathFile, 
EnvironmentConfig envConfig,
+    private void createEnvironment(File environmentPathFile, EnvironmentConfig 
envConfig,
             final ReplicationConfig replicationConfig)
     {
-        ReplicatedEnvironment environment = null;
-
         String originalThreadName = Thread.currentThread().getName();
         try
         {
             _envSetupTimeoutMillis = 
extractEnvSetupTimeoutMillis(replicationConfig);
-            environment = new ReplicatedEnvironment(environmentPathFile, 
replicationConfig, envConfig);
+            _environment = new ReplicatedEnvironment(environmentPathFile, 
replicationConfig, envConfig);
         }
         catch (final InsufficientLogException ile)
         {
@@ -1177,7 +1176,7 @@ public class ReplicatedEnvironmentFacade
             config.setRetainLogFiles(false);
             restore.execute(ile, config);
             LOGGER.warn("Network restore complete.");
-            environment = new ReplicatedEnvironment(environmentPathFile, 
replicationConfig, envConfig);
+            _environment = new ReplicatedEnvironment(environmentPathFile, 
replicationConfig, envConfig);
         }
         finally
         {
@@ -1188,7 +1187,6 @@ public class ReplicatedEnvironmentFacade
         {
             LOGGER.info("Environment is created for node " + 
_prettyGroupNodeName);
         }
-        return environment;
     }
 
     private long extractEnvSetupTimeoutMillis(ReplicationConfig 
replicationConfig)



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to