Author: kwall
Date: Wed Apr 30 15:51:32 2014
New Revision: 1591366

URL: http://svn.apache.org/r1591366
Log:
QPID-5715: Address review comments from Alex Rudyy

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=1591366&r1=1591365&r2=1591366&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
 Wed Apr 30 15:51:32 2014
@@ -24,6 +24,7 @@ import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -37,8 +38,8 @@ import com.sleepycat.je.rep.ReplicationN
 import com.sleepycat.je.rep.StateChangeEvent;
 import com.sleepycat.je.rep.StateChangeListener;
 
-import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.log4j.Logger;
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.BrokerModel;
@@ -107,7 +108,7 @@ public class BDBHAVirtualHostNodeImpl ex
     @ManagedAttributeField(afterSet="postSetQuorumOverride")
     private int _quorumOverride;
 
-    @ManagedAttributeField(beforeSet="preSetRole", afterSet="postSetRole")
+    @ManagedAttributeField(afterSet="postSetRole")
     private String _role;
 
     @ManagedAttributeField
@@ -121,6 +122,25 @@ public class BDBHAVirtualHostNodeImpl ex
     }
 
     @Override
+    protected void validateChange(final ConfiguredObject<?> 
proxyForValidation, final Set<String> changedAttributes)
+    {
+        super.validateChange(proxyForValidation, changedAttributes);
+        if (changedAttributes.contains(ROLE))
+        {
+            String currentRole = getRole();
+            if 
(!ReplicatedEnvironment.State.REPLICA.name().equals(currentRole))
+            {
+                throw new IllegalStateException("Cannot transfer mastership 
when not a replica, current role is " + currentRole);
+            }
+            BDBHAVirtualHostNode<?> proposed = 
(BDBHAVirtualHostNode<?>)proxyForValidation;
+            if 
(!ReplicatedEnvironment.State.MASTER.name().equals(proposed.getRole()))
+            {
+                throw new IllegalArgumentException("Changing role to other 
value then " + ReplicatedEnvironment.State.MASTER.name() + " is unsupported");
+            }
+        }
+    }
+
+    @Override
     public Map<String, String> getEnvironmentConfiguration()
     {
         return _environmentConfiguration;
@@ -530,26 +550,6 @@ public class BDBHAVirtualHostNodeImpl ex
         }
     }
 
-    // used as pre action by field _role
-    @SuppressWarnings("unused")
-    private void preSetRole()
-    {
-        ReplicatedEnvironmentFacade environmentFacade = 
getReplicatedEnvironmentFacade();
-        if (environmentFacade != null)
-        {
-            String currentRole = environmentFacade.getNodeState();
-            if 
(!ReplicatedEnvironment.State.REPLICA.name().equals(currentRole))
-            {
-                 throw new IllegalConfigurationException("Cannot transfer 
mastership when node is not in a replica role."
-                         + "Current role is " + currentRole);
-             }
-        }
-        else
-        {
-            // Ignored
-        }
-    }
-
     // used as post action by field _role
     @SuppressWarnings("unused")
     private void postSetRole()

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=1591366&r1=1591365&r2=1591366&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
 Wed Apr 30 15:51:32 2014
@@ -246,7 +246,6 @@ public class BDBHAVirtualHostNodeTest ex
 
         assertNotNull("Join time should be set", node.getJoinTime());
         assertNotNull("Last known replication transaction idshould be set", 
node.getLastKnownReplicationTransactionId());
-
     }
 
     public void testTransferMasterToSelf() throws Exception
@@ -421,6 +420,38 @@ public class BDBHAVirtualHostNodeTest ex
         }
     }
 
+    public void testMutatingRoleWhenNotReplica_IsDisallowed() throws Exception
+    {
+        int nodePortNumber = findFreePort();
+        String helperAddress = "localhost:" + nodePortNumber;
+        String groupName = "group";
+
+        Map<String, Object> node1Attributes = new HashMap<String, Object>();
+        node1Attributes.put(BDBHAVirtualHostNode.ID, UUID.randomUUID());
+        node1Attributes.put(BDBHAVirtualHostNode.TYPE, "BDB_HA");
+        node1Attributes.put(BDBHAVirtualHostNode.NAME, "node1");
+        node1Attributes.put(BDBHAVirtualHostNode.GROUP_NAME, groupName);
+        node1Attributes.put(BDBHAVirtualHostNode.ADDRESS, helperAddress);
+        node1Attributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, 
helperAddress);
+        node1Attributes.put(BDBHAVirtualHostNode.STORE_PATH, _bdbStorePath + 
File.separator + "1");
+
+        BDBHAVirtualHostNode<?> node = createHaVHN(node1Attributes);
+        assertEquals("Failed to activate node", State.ACTIVE, 
node.setDesiredState(node.getState(), State.ACTIVE));
+
+        assertEquals("Node is expected to be master", "MASTER", 
node.getRole());
+
+        try
+        {
+            
node.setAttributes(Collections.<String,Object>singletonMap(BDBHAVirtualHostNode.ROLE,
 "REPLICA"));
+            fail("Role mutation should fail");
+        }
+        catch(IllegalStateException e)
+        {
+            // PASS
+        }
+    }
+
+
     private BDBHAVirtualHostNode<?> createHaVHN(Map<String, Object> attributes)
     {
         BDBHAVirtualHostNode<?> node = (BDBHAVirtualHostNode<?>) 
_objectFactory.create(VirtualHostNode.class, attributes, _broker);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to