You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ma...@apache.org on 2014/09/11 16:30:43 UTC
svn commit: r1624299 - in /qpid/trunk/qpid/java/bdbstore/src:
main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java
Author: macbean
Date: Thu Sep 11 14:30:42 2014
New Revision: 1624299
URL: http://svn.apache.org/r1624299
Log:
QPID-6092: [Java Broker] Editing permitted node list to be allowed when VHN is master or in STOPPED/ERRORED state. Server (1/2)
Modified:
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java
Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java?rev=1624299&r1=1624298&r2=1624299&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java Thu Sep 11 14:30:42 2014
@@ -763,7 +763,11 @@ public class BDBHAVirtualHostNodeImpl ex
private void validatePermittedNodes(List<String> proposedPermittedNodes)
{
- if (proposedPermittedNodes == null || proposedPermittedNodes.isEmpty())
+ if (getRemoteReplicationNodes().size() > 0 && getRole() != NodeRole.MASTER && !(getState() == State.STOPPED || getState() == State.ERRORED))
+ {
+ throw new IllegalArgumentException(String.format("Attribute '%s' can only be set on '%s' node or node in '%s' or '%s' state", PERMITTED_NODES, NodeRole.MASTER, State.STOPPED, State.ERRORED));
+ }
+ else if (proposedPermittedNodes == null || proposedPermittedNodes.isEmpty())
{
throw new IllegalArgumentException(String.format("Attribute '%s' is mandatory and must be set", PERMITTED_NODES));
}
Modified: qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java?rev=1624299&r1=1624298&r2=1624299&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java Thu Sep 11 14:30:42 2014
@@ -413,6 +413,63 @@ public class BDBHAVirtualHostNodeTest ex
}
}
+ public void testPermittedNodesAttributeModificationConditions() throws Exception
+ {
+ int node1PortNumber = findFreePort();
+ int node2PortNumber = getNextAvailable(node1PortNumber+1);
+ int node3PortNumber = getNextAvailable(node2PortNumber+1);
+ int node4PortNumber = getNextAvailable(node3PortNumber+1);
+ int node5PortNumber = getNextAvailable(node4PortNumber+1);
+
+ String node1Address = "localhost:" + node1PortNumber;
+ String node2Address = "localhost:" + node2PortNumber;
+ String node3Address = "localhost:" + node3PortNumber;
+ String node4Address = "localhost:" + node4PortNumber;
+ String node5Address = "localhost:" + node5PortNumber;
+
+ String groupName = "group";
+ String node1Name = "node1";
+
+ Map<String, Object> node1Attributes = _helper.createNodeAttributes(node1Name, groupName, node1Address, node1Address, node1Name, node1PortNumber, node2PortNumber, node3PortNumber);
+ BDBHAVirtualHostNode<?> node1 = _helper.createAndStartHaVHN(node1Attributes);
+
+ Map<String, Object> node2Attributes = _helper.createNodeAttributes("node2", groupName, node2Address, node1Address, node1Name);
+ BDBHAVirtualHostNode<?> node2 = _helper.createAndStartHaVHN(node2Attributes);
+
+ Map<String, Object> node3Attributes = _helper.createNodeAttributes("node3", groupName, node3Address, node1Address, node1Name);
+ BDBHAVirtualHostNode<?> node3 = _helper.createAndStartHaVHN(node3Attributes);
+
+ _helper.awaitRemoteNodes(node1, 2);
+
+ // Create new "proposed" permitted nodes list for update
+ List<String> amendedPermittedNodes = new ArrayList<String>();
+ amendedPermittedNodes.add(node1Address);
+ amendedPermittedNodes.add(node2Address);
+ amendedPermittedNodes.add(node3Address);
+ amendedPermittedNodes.add(node4Address);
+
+ // Try to update the permitted nodes attributes using the new list on REPLICA - should fail
+ BDBHAVirtualHostNode<?> nonMasterNode = _helper.findNodeInRole(NodeRole.REPLICA);
+ try
+ {
+ nonMasterNode.setAttributes(Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.PERMITTED_NODES, amendedPermittedNodes));
+ fail("Operation to update permitted nodes should have failed from non MASTER node");
+ }
+ catch(IllegalArgumentException e)
+ {
+ assertEquals("Unexpected exception message", String.format("Attribute '%s' can only be set on '%s' node or node in '%s' or '%s' state", BDBHAVirtualHostNode.PERMITTED_NODES, NodeRole.MASTER, State.STOPPED, State.ERRORED), e.getMessage());
+ }
+
+ // Try to update the permitted nodes attributes using the new list on MASTER - should succeed
+ BDBHAVirtualHostNode<?> masterNode = _helper.findNodeInRole(NodeRole.MASTER);
+ masterNode.setAttributes(Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.PERMITTED_NODES, amendedPermittedNodes));
+
+ // Try to update the permitted nodes attributes using the new list on a STOPPED node - should succeed
+ nonMasterNode.stop();
+ amendedPermittedNodes.add(node5Address);
+ nonMasterNode.setAttributes(Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.PERMITTED_NODES, amendedPermittedNodes));
+ }
+
public void testIntruderProtectionInManagementMode() throws Exception
{
int node1PortNumber = findFreePort();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org