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 2014/10/02 18:17:28 UTC

svn commit: r1629010 - in /qpid/trunk/qpid/java/bdbstore: src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/ src/test/java/org/apache/qpid/server/store/berkeleydb/ src/tes...

Author: orudyy
Date: Thu Oct  2 16:17:27 2014
New Revision: 1629010

URL: http://svn.apache.org/r1629010
Log:
QPID-6126: Improve validation and exception messages for BDB HA node

Modified:
    qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
    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
    qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java
    qpid/trunk/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java

Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java?rev=1629010&r1=1629009&r2=1629010&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java Thu Oct  2 16:17:27 2014
@@ -1329,7 +1329,7 @@ public class ReplicatedEnvironmentFacade
         }
         catch (IOException e)
         {
-            throw new IllegalConfigurationException(String.format("Cannot connect to '%s'", helperHostPort), e);
+            throw new IllegalConfigurationException(String.format("Cannot connect to existing node '%s' at '%s'", helperNodeName, helperHostPort), e);
         }
         catch (ServiceConnectFailedException e)
         {
@@ -1337,8 +1337,8 @@ public class ReplicatedEnvironmentFacade
         }
         catch (Exception e)
         {
-            throw new RuntimeException(String.format("Unexpected exception on attempt to retrieve state from '%s' at '%s'",
-                    helperNodeName, helperHostPort), e);
+            throw new RuntimeException(String.format("Cannot retrieve state for node '%s' (%s) from group '%s'",
+                    helperNodeName, helperHostPort, groupName), e);
         }
 
         if (LOGGER.isDebugEnabled())

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=1629010&r1=1629009&r2=1629010&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 Oct  2 16:17:27 2014
@@ -22,6 +22,8 @@ package org.apache.qpid.server.virtualho
 
 import java.io.File;
 import java.net.InetSocketAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.nio.file.Files;
 import java.security.PrivilegedAction;
 import java.text.MessageFormat;
@@ -371,9 +373,15 @@ public class BDBHAVirtualHostNodeImpl ex
     @StateTransition( currentState = { State.ACTIVE, State.STOPPED, State.ERRORED}, desiredState = State.DELETED )
     protected void doDelete()
     {
+        // get helpers before close. on close all children are closed and not available anymore
         Set<InetSocketAddress> helpers = getRemoteNodeAddresses();
         super.doDelete();
-        getEventLogger().message(getVirtualHostNodeLogSubject(), HighAvailabilityMessages.DELETED());
+
+        if (getConfigurationStore() != null)
+        {
+            getEventLogger().message(getVirtualHostNodeLogSubject(), HighAvailabilityMessages.DELETED());
+        }
+
         if (getState() == State.DELETED && !helpers.isEmpty())
         {
             try
@@ -487,40 +495,33 @@ public class BDBHAVirtualHostNodeImpl ex
     {
         String address = getAddress();
 
-        if (address == null || "".equals(address))
-        {
-            throw new IllegalConfigurationException("Node address is not set");
-        }
+        URI uri = addressToURI(address);
 
-        String[] tokens = address.split(":");
-        if (tokens.length != 2)
+        if (!PortUtil.isPortAvailable(uri.getHost(), uri.getPort()))
         {
-            throw new IllegalConfigurationException(String.format("Invalid address specified '%s'. ", address));
+            throw new IllegalConfigurationException(String.format("Cannot bind to address '%s'. Address is already in use.", address));
         }
+    }
 
-        String hostName = tokens[0];
-        if ("".equals(hostName.trim()))
+    private URI addressToURI(String address)
+    {
+        if (address == null || "".equals(address))
         {
-            throw new IllegalConfigurationException(String.format("Invalid address specified '%s'. ", address));
+            throw new IllegalConfigurationException("Node address is not set");
         }
 
-        int port = -1;
+        URI uri = null;
         try
         {
-            port = Integer.parseInt(tokens[1]);
+            uri = new URI( "tcp://" + address);
         }
-        catch(Exception e)
+        catch (URISyntaxException e)
         {
-            throw new IllegalConfigurationException(String.format("Invalid port is specified in address '%s'. ", address));
-        }
-        if (!PortUtil.isPortAvailable(hostName, port))
-        {
-            throw new IllegalConfigurationException(String.format("Cannot bind to address '%s'. Address is already in use.", address));
+            throw new IllegalConfigurationException(String.format("Invalid address specified '%s'. ", address));
         }
+        return uri;
     }
 
-
-
     private void onMaster()
     {
         try
@@ -801,7 +802,7 @@ public class BDBHAVirtualHostNodeImpl ex
 
     private boolean isFirstNodeInAGroup()
     {
-        return getAddress().equals(getHelperAddress());
+        return getHelperNodeName() == null;
     }
 
     BDBHAVirtualHostNodeLogSubject getVirtualHostNodeLogSubject()
@@ -876,23 +877,16 @@ public class BDBHAVirtualHostNodeImpl ex
         validatePermittedNodesFormat(proposedPermittedNodes);
     }
 
-    private void validatePermittedNodesFormat(Collection<String> proposedPermittedNodes)
+    private void validatePermittedNodesFormat(Collection<String> permittedNodes)
     {
-        for (String permittedNode: proposedPermittedNodes)
+        if (permittedNodes == null || permittedNodes.isEmpty())
         {
-            String[] tokens = permittedNode.split(":");
-            if (tokens.length != 2)
-            {
-                throw new IllegalArgumentException(String.format("Invalid permitted node specified '%s'. ", permittedNode));
-            }
-            try
-            {
-                Integer.parseInt(tokens[1]);
-            }
-            catch(Exception e)
-            {
-                throw new IllegalArgumentException(String.format("Invalid port is specified in permitted node '%s'. ", permittedNode));
-            }
+            throw new IllegalConfigurationException("Permitted nodes are not set");
+        }
+
+        for (String permittedNode: permittedNodes)
+        {
+            addressToURI(permittedNode);
         }
     }
 

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=1629010&r1=1629009&r2=1629010&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 Oct  2 16:17:27 2014
@@ -293,6 +293,7 @@ public class BDBHAVirtualHostNodeTest ex
         _helper.awaitRemoteNodes(master, 2);
 
         BDBHAVirtualHostNode<?> replica = _helper.awaitAndFindNodeInRole(NodeRole.REPLICA);
+        _helper.awaitRemoteNodes(replica, 2);
 
         assertNotNull("Remote node " + replica.getName() + " is not found", _helper.findRemoteNode(master, replica.getName()));
         replica.delete();
@@ -607,7 +608,7 @@ public class BDBHAVirtualHostNodeTest ex
         catch(IllegalConfigurationException e)
         {
             assertEquals("Unexpected exception on connection to non-existing helper address",
-                    String.format("Cannot connect to '%s'", "localhost:" + node2PortNumber), e.getMessage());
+                    String.format("Cannot connect to existing node '%s' at '%s'", "node2", "localhost:" + node2PortNumber), e.getMessage());
         }
     }
 

Modified: qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java?rev=1629010&r1=1629009&r2=1629010&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java Thu Oct  2 16:17:27 2014
@@ -279,11 +279,14 @@ public class BDBHAVirtualHostNodeTestHel
         node1Attributes.put(BDBHAVirtualHostNode.ADDRESS, address);
         node1Attributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, helperAddress);
         node1Attributes.put(BDBHAVirtualHostNode.STORE_PATH, getMessageStorePath() + File.separator + nodeName);
-        node1Attributes.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, helperNodeNode);
         if (address.equals(helperAddress))
         {
             node1Attributes.put(BDBHAVirtualHostNode.PERMITTED_NODES, getPermittedNodes(ports));
         }
+        else
+        {
+            node1Attributes.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, helperNodeNode);
+        }
 
         Map<String, String> context = new HashMap<String, String>();
         context.put(ReplicationConfig.REPLICA_ACK_TIMEOUT, "2 s");

Modified: qpid/trunk/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java?rev=1629010&r1=1629009&r2=1629010&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java Thu Oct  2 16:17:27 2014
@@ -326,7 +326,10 @@ public class BDBHAVirtualHostNodeRestTes
         nodeData.put(BDBHAVirtualHostNode.GROUP_NAME, _hostName);
         nodeData.put(BDBHAVirtualHostNode.ADDRESS, "localhost:" + nodePort);
         nodeData.put(BDBHAVirtualHostNode.HELPER_ADDRESS, "localhost:" + helperPort);
-        nodeData.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, NODE1);
+        if (nodePort != helperPort)
+        {
+            nodeData.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, NODE1);
+        }
 
         Map<String,String> context = new HashMap<>();
         nodeData.put(BDBHAVirtualHostNode.CONTEXT, context);



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