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