summaryrefslogtreecommitdiff
path: root/qpid/java/bdbstore/src
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-10-22 12:40:37 +0000
committerKeith Wall <kwall@apache.org>2014-10-22 12:40:37 +0000
commitc843b9cca79ac07ab33aabadae8f34491d5232f6 (patch)
tree925d591977192a1e78a54ab7b55c33e20e5a5c66 /qpid/java/bdbstore/src
parent7b15c7e7af965f10351c31246fdd8fb620eeeb92 (diff)
downloadqpid-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.java32
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)