diff options
| author | Keith Wall <kwall@apache.org> | 2014-10-22 12:40:37 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2014-10-22 12:40:37 +0000 |
| commit | c843b9cca79ac07ab33aabadae8f34491d5232f6 (patch) | |
| tree | 925d591977192a1e78a54ab7b55c33e20e5a5c66 /qpid/java/bdbstore/src | |
| parent | 7b15c7e7af965f10351c31246fdd8fb620eeeb92 (diff) | |
| download | qpid-python-c843b9cca79ac07ab33aabadae8f34491d5232f6.tar.gz | |
QPID-6154: [Java Broker] Fix race condition that would cause an ReplicatedEnvironment to be leaked on restart
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1633606 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/src')
| -rw-r--r-- | qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java index d5425019a8..8a23e5fe82 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java @@ -223,7 +223,7 @@ public class ReplicatedEnvironmentFacade implements EnvironmentFacade, StateChan boolean success = false; try { - _environment = createEnvironment(true); + createEnvironment(true); success = true; } finally @@ -942,7 +942,7 @@ public class ReplicatedEnvironmentFacade implements EnvironmentFacade, StateChan closeEnvironmentOnRestart(); - _environment = createEnvironment(false); + createEnvironment(false); registerAppStateMonitorIfPermittedNodesSpecified(); @@ -1035,7 +1035,7 @@ public class ReplicatedEnvironmentFacade implements EnvironmentFacade, StateChan } } - 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 implements EnvironmentFacade, StateChan 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 implements EnvironmentFacade, StateChan { try { - return environmentFuture.get(initialTimeOutMillis, TimeUnit.MILLISECONDS); + environmentFuture.get(initialTimeOutMillis, TimeUnit.MILLISECONDS); } catch (TimeoutException te) { @@ -1134,7 +1135,7 @@ public class ReplicatedEnvironmentFacade implements EnvironmentFacade, StateChan 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 implements EnvironmentFacade, StateChan } } - 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 implements EnvironmentFacade, StateChan 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 implements EnvironmentFacade, StateChan { LOGGER.info("Environment is created for node " + _prettyGroupNodeName); } - return environment; } private long extractEnvSetupTimeoutMillis(ReplicationConfig replicationConfig) |
