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