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