You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2018/12/05 22:24:06 UTC
qpid-broker-j git commit: QPID-8230: [Broker-J] Clean-up virtual host
and virtual host node resources on failure to restart or activate virtual
host
Repository: qpid-broker-j
Updated Branches:
refs/heads/master 8bd6bd420 -> 2da7a6bbe
QPID-8230: [Broker-J] Clean-up virtual host and virtual host node resources on failure to restart or activate virtual host
Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/2da7a6bb
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/2da7a6bb
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/2da7a6bb
Branch: refs/heads/master
Commit: 2da7a6bbec51dd12b0eace4aca156954e77d0c4e
Parents: 8bd6bd4
Author: Alex Rudyy <or...@apache.org>
Authored: Wed Dec 5 18:24:14 2018 +0000
Committer: Alex Rudyy <or...@apache.org>
Committed: Wed Dec 5 18:24:14 2018 +0000
----------------------------------------------------------------------
.../server/virtualhost/AbstractVirtualHost.java | 47 ++++++++++++++++++++
.../AbstractVirtualHostNode.java | 27 +++++------
2 files changed, 59 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2da7a6bb/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
index 0882ef1..b6b0bbd 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
@@ -2709,6 +2709,34 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte
@StateTransition( currentState = { State.STOPPED }, desiredState = State.ACTIVE )
private ListenableFuture<Void> onRestart()
{
+ final SettableFuture<Void> returnVal = SettableFuture.create();
+ try
+ {
+ addFutureCallback(doRestart(),new FutureCallback<Void>()
+ {
+ @Override
+ public void onSuccess(final Void result)
+ {
+ returnVal.set(null);
+ }
+
+ @Override
+ public void onFailure(final Throwable t)
+ {
+ doAfterAlways(onRestartFailure(), ()-> returnVal.setException(t));
+ }
+ }, getTaskExecutor()
+ );
+ }
+ catch (IllegalArgumentException | IllegalConfigurationException e)
+ {
+ doAfterAlways(onRestartFailure(), ()-> returnVal.setException(e));
+ }
+ return returnVal;
+ }
+
+ private ListenableFuture<Void> doRestart()
+ {
createHousekeepingExecutor();
final VirtualHostStoreUpgraderAndRecoverer virtualHostStoreUpgraderAndRecoverer =
@@ -2742,6 +2770,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte
{
LOGGER.error("Exception occurred while opening {} : {}",
child.getClass().getSimpleName(), child.getName(), t);
+ onRestartFailure();
}
}, getTaskExecutor());
@@ -2753,6 +2782,24 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte
return Futures.transformAsync(combinedFuture, input -> onActivate(), MoreExecutors.directExecutor());
}
+ private ChainedListenableFuture<Void> onRestartFailure()
+ {
+ final List<VirtualHostLogger> loggers = new ArrayList<>(getChildren(VirtualHostLogger.class));
+ return doAfter(closeChildren(), () -> {
+ shutdownHouseKeeping();
+ closeNetworkConnectionScheduler();
+ if (_linkRegistry != null)
+ {
+ _linkRegistry.close();
+ }
+ closeMessageStore();
+ stopPreferenceTaskExecutor();
+ closePreferenceStore();
+ setState(State.ERRORED);
+ stopLogging(loggers);
+ });
+ }
+
private class FileSystemSpaceChecker extends HouseKeepingTask
{
private boolean _fileSystemFull;
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2da7a6bb/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java b/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
index be021d8..3f5300e 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
@@ -186,34 +186,31 @@ public abstract class AbstractVirtualHostNode<X extends AbstractVirtualHostNode<
@Override
public void onFailure(final Throwable t)
{
- setState(State.ERRORED);
- if (_broker.isManagementMode())
- {
- LOGGER.warn("Failed to make " + this + " active.", t);
- returnVal.set(null);
- }
- else
- {
- returnVal.setException(t);
- }
+ onActivationFailure(returnVal, t);
}
}, getTaskExecutor()
);
}
catch(RuntimeException e)
{
- setState(State.ERRORED);
- returnVal.set(null);
+ onActivationFailure(returnVal, e);
+ }
+ return returnVal;
+ }
+
+ private void onActivationFailure(final SettableFuture<Void> returnVal, final Throwable e)
+ {
+ doAfterAlways(stopAndSetStateTo(State.ERRORED), () -> {
if (_broker.isManagementMode())
{
LOGGER.warn("Failed to make " + this + " active.", e);
+ returnVal.set(null);
}
else
{
- throw e;
+ returnVal.setException(e);
}
- }
- return returnVal;
+ });
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org