Author: orudyy
Date: Thu Oct  2 11:57:59 2014
New Revision: 1628952

URL: http://svn.apache.org/r1628952
Log:
QPID-6126: Invoke on-create validation after common validation, delete CO if 
creation fails on any stage

Modified:
    
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
    
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.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=1628952&r1=1628951&r2=1628952&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 11:57:59 2014
@@ -283,10 +283,20 @@ public class BDBHAVirtualHostNodeImpl ex
     public void onCreate()
     {
         super.onCreate();
-
+        if (!isFirstNodeInAGroup())
+        {
+            _permittedNodes = new ArrayList<>(getPermittedNodesFromHelper());
+        }
         getEventLogger().message(getVirtualHostNodeLogSubject(), 
HighAvailabilityMessages.CREATED());
     }
 
+    @Override
+    public void onOpen()
+    {
+        validatePermittedNodesFormat(_permittedNodes);
+        super.onOpen();
+    }
+
     protected ReplicatedEnvironmentFacade getReplicatedEnvironmentFacade()
     {
         return _environmentFacade.get();
@@ -421,13 +431,6 @@ public class BDBHAVirtualHostNodeImpl ex
     }
 
     @Override
-    public void onValidate()
-    {
-        super.onValidate();
-        validatePermittedNodes(_permittedNodes);
-    }
-
-    @Override
     protected void postResolve()
     {
         super.postResolve();
@@ -447,9 +450,7 @@ public class BDBHAVirtualHostNodeImpl ex
 
         if (!isFirstNodeInAGroup())
         {
-            // validate that helper address points to valid node
-            // we need _permittedNodes for the further validation in onValidate
-            _permittedNodes = new ArrayList<>(getPermittedNodesFromHelper());
+            getPermittedNodesFromHelper();
         }
     }
 
@@ -872,6 +873,11 @@ public class BDBHAVirtualHostNodeImpl ex
             }
         }
 
+        validatePermittedNodesFormat(proposedPermittedNodes);
+    }
+
+    private void validatePermittedNodesFormat(Collection<String> 
proposedPermittedNodes)
+    {
         for (String permittedNode: proposedPermittedNodes)
         {
             String[] tokens = permittedNode.split(":");
@@ -888,7 +894,6 @@ public class BDBHAVirtualHostNodeImpl ex
                 throw new IllegalArgumentException(String.format("Invalid port 
is specified in permitted node '%s'. ", permittedNode));
             }
         }
-
     }
 
     private class RemoteNodesDiscoverer implements ReplicationGroupListener

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1628952&r1=1628951&r2=1628952&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
 Thu Oct  2 11:57:59 2014
@@ -502,8 +502,8 @@ public abstract class AbstractConfigured
             try
             {
                 doResolution(true, createExceptionHandler);
-                validateOnCreate();
                 doValidation(true, createExceptionHandler);
+                validateOnCreate();
                 registerWithParents();
             }
             catch(RuntimeException e)
@@ -515,22 +515,13 @@ public abstract class AbstractConfigured
             try
             {
                 doCreation(true, unregisteringExceptionHandler);
+                doOpening(true, unregisteringExceptionHandler);
+                doAttainState(unregisteringExceptionHandler);
             }
             catch(RuntimeException e)
             {
                 unregisteringExceptionHandler.handleException(e, this);
             }
-
-            OpenExceptionHandler openExceptionHandler = new 
OpenExceptionHandler();
-            try
-            {
-                doOpening(true, openExceptionHandler);
-                doAttainState(openExceptionHandler);
-            }
-            catch(RuntimeException e)
-            {
-                openExceptionHandler.handleException(e, this);
-            }
         }
     }
 
@@ -1914,20 +1905,20 @@ public abstract class AbstractConfigured
 
         public void handleException(RuntimeException exception, 
AbstractConfiguredObject<?> source)
         {
-            if (source.getState() != State.DELETED)
+            try
             {
-                try
+                if (source.getState() != State.DELETED)
                 {
                     source.delete();
                 }
-                finally
+            }
+            finally
+            {
+                if (_unregister)
                 {
-                    if (_unregister)
-                    {
-                        source.unregister(false);
-                    }
-                    throw exception;
+                    source.unregister(false);
                 }
+                throw exception;
             }
         }
     }

Modified: 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java?rev=1628952&r1=1628951&r2=1628952&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java
 Thu Oct  2 11:57:59 2014
@@ -357,14 +357,18 @@ public class AbstractConfiguredObjectTes
     {
         TestConfiguredObject object = new TestConfiguredObject(getName());
         object.setThrowExceptionOnOpen(true);
-        object.create();
-        assertFalse("Unexpected opened", object.isOpened());
-        assertEquals("Unexpected state", State.ERRORED, object.getState());
+        try
+        {
+            object.create();
+            fail("Exception should have been re-thrown");
+        }
+        catch (RuntimeException re)
+        {
+            // pass
+        }
 
-        object.setThrowExceptionOnOpen(false);
-        object.start();
-        assertTrue("Unexpected opened", object.isOpened());
-        assertEquals("Unexpected state", State.ACTIVE, object.getState());
+        assertFalse("Unexpected opened", object.isOpened());
+        assertEquals("Unexpected state", State.DELETED, object.getState());
     }
 
     public void testCreationWithExceptionThrownFromOnCreate() throws Exception



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

Reply via email to