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/03/29 15:57:36 UTC

qpid-broker-j git commit: QPID-8140: [Broker-J][BDB HA] Handle MemberNotFoundException on removal of non-existing node

Repository: qpid-broker-j
Updated Branches:
  refs/heads/master d20599e22 -> 1d832c616


QPID-8140: [Broker-J][BDB HA] Handle MemberNotFoundException on removal of non-existing node


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/1d832c61
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/1d832c61
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/1d832c61

Branch: refs/heads/master
Commit: 1d832c616859ed5a5648315da4eba696207c9f15
Parents: d20599e
Author: Alex Rudyy <or...@apache.org>
Authored: Thu Mar 29 16:48:19 2018 +0100
Committer: Alex Rudyy <or...@apache.org>
Committed: Thu Mar 29 16:48:19 2018 +0100

----------------------------------------------------------------------
 .../ReplicatedEnvironmentFacade.java            | 15 +++++++----
 .../BDBHARemoteReplicationNodeImpl.java         | 25 +++--------------
 .../ReplicatedEnvironmentFacadeTest.java        | 28 ++++++++++++++++++++
 .../BDBHARemoteReplicationNodeTest.java         |  1 -
 4 files changed, 41 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/1d832c61/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
index c5fe0d9..e3b053f 100644
--- a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
+++ b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
@@ -69,6 +69,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.IllegalStateTransitionException;
 import org.apache.qpid.server.store.StoreException;
 import org.apache.qpid.server.store.berkeleydb.BDBUtils;
 import org.apache.qpid.server.store.berkeleydb.CoalescingCommiter;
@@ -1203,18 +1204,22 @@ public class ReplicatedEnvironmentFacade implements EnvironmentFacade, StateChan
         });
     }
 
-    public boolean removeNodeFromGroup(final String nodeName)
+    public void removeNodeFromGroup(final String nodeName)
     {
         try
         {
             createReplicationGroupAdmin().removeMember(nodeName);
-            return true;
         }
-        catch(MasterStateException e)
+        catch (MasterStateException e)
         {
-            return false;
+            throw new IllegalStateTransitionException(String.format("Node '%s' cannot be deleted when role is a master",
+                                                                    nodeName));
         }
-        catch(RuntimeException e)
+        catch (MemberNotFoundException e)
+        {
+            throw new IllegalArgumentException(String.format("Node '%s' is not a member of the group", nodeName), e);
+        }
+        catch (RuntimeException e)
         {
             throw handleDatabaseException("Exception on node removal from group", e);
         }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/1d832c61/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java b/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java
index 9afb795..cd98aa9 100644
--- a/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java
+++ b/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java
@@ -131,35 +131,16 @@ public class BDBHARemoteReplicationNodeImpl extends AbstractConfiguredObject<BDB
             SettableFuture<Void> future = SettableFuture.create();
 
             String nodeName = getName();
-
-            boolean deletionAllowed;
             try
             {
+                _replicatedEnvironmentFacade.removeNodeFromGroup(nodeName);
                 getEventLogger().message(_virtualHostNodeLogSubject, HighAvailabilityMessages.DELETED());
-                deletionAllowed = _replicatedEnvironmentFacade.removeNodeFromGroup(nodeName);
-                if (deletionAllowed)
-                {
-                    future.set(null);
-                }
-                else
-                {
-                    future.setException(new IllegalStateTransitionException(String.format(
-                            "Node '%s' cannot be deleted when role is a master",
-                            nodeName)));
-                }
-            }
-            catch (ServerScopedRuntimeException e)
-            {
-                future.setException(e);
-                throw e;
+                future.set(null);
             }
             catch (RuntimeException e)
             {
-                future.setException(new IllegalStateTransitionException(String.format(
-                        "Unexpected exception on node '%s' deletion",
-                        nodeName), e));
+                future.setException(e);
             }
-
             return future;
         }
         else

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/1d832c61/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java b/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java
index c822dd0..618fb34 100644
--- a/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java
+++ b/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java
@@ -499,6 +499,34 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase
         assertEquals("Unexpected group members count", 1, environmentFacade.getNumberOfElectableGroupMembers());
     }
 
+    public void testRemoveNodeFromGroupTwice() throws Exception
+    {
+        TestStateChangeListener stateChangeListener = new TestStateChangeListener();
+        ReplicatedEnvironmentFacade environmentFacade = addNode(TEST_NODE_NAME,
+                                                                TEST_NODE_HOST_PORT,
+                                                                true,
+                                                                stateChangeListener,
+                                                                new NoopReplicationGroupListener());
+        assertTrue("Environment was not created", stateChangeListener.awaitForStateChange(State.MASTER,
+                                                                                          _timeout, TimeUnit.SECONDS));
+
+        String node2Name = TEST_NODE_NAME + "_2";
+        String node2NodeHostPort = "localhost:" + _portHelper.getNextAvailable();
+        ReplicatedEnvironmentFacade ref2 =
+                createReplica(node2Name, node2NodeHostPort, new NoopReplicationGroupListener());
+        ref2.close();
+
+        environmentFacade.removeNodeFromGroup(node2Name);
+        try
+        {
+            environmentFacade.removeNodeFromGroup(node2Name);
+            fail("Exception is expected");
+        }
+        catch (IllegalArgumentException e)
+        {
+            // pass
+        }
+    }
 
     public void testEnvironmentFacadeDetectsRemovalOfRemoteNode() throws Exception
     {

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/1d832c61/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeTest.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeTest.java b/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeTest.java
index a9a991f..9b6fc09 100644
--- a/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeTest.java
+++ b/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeTest.java
@@ -146,7 +146,6 @@ public class BDBHARemoteReplicationNodeTest extends QpidTestCase
         String remoteReplicationName = getName();
         BDBHARemoteReplicationNode remoteReplicationNode = createRemoteReplicationNode(remoteReplicationName);
 
-        when(_facade.removeNodeFromGroup(remoteReplicationName)).thenReturn(true);
         remoteReplicationNode.delete();
 
         verify(_facade).removeNodeFromGroup(remoteReplicationName);


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