diff options
| author | Alex Rudyy <orudyy@apache.org> | 2014-10-02 11:57:59 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2014-10-02 11:57:59 +0000 |
| commit | eec5731347be2c4015854de2522fe6ec654f92e9 (patch) | |
| tree | d285c0dc94c1dd8540ebc216ebb547bad80bb85b /qpid/java | |
| parent | a638bc903339cac26e522df787ad4fcbca2344aa (diff) | |
| download | qpid-python-eec5731347be2c4015854de2522fe6ec654f92e9.tar.gz | |
QPID-6126: Invoke on-create validation after common validation, delete CO if creation fails on any stage
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1628952 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
3 files changed, 39 insertions, 39 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java index 98b9cc3cf0..4888965eec 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java @@ -283,10 +283,20 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu 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 extends AbstractVirtualHostNode<BDBHAVirtu } @Override - public void onValidate() - { - super.onValidate(); - validatePermittedNodes(_permittedNodes); - } - - @Override protected void postResolve() { super.postResolve(); @@ -447,9 +450,7 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu 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 extends AbstractVirtualHostNode<BDBHAVirtu } } + validatePermittedNodesFormat(proposedPermittedNodes); + } + + private void validatePermittedNodesFormat(Collection<String> proposedPermittedNodes) + { for (String permittedNode: proposedPermittedNodes) { String[] tokens = permittedNode.split(":"); @@ -888,7 +894,6 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu throw new IllegalArgumentException(String.format("Invalid port is specified in permitted node '%s'. ", permittedNode)); } } - } private class RemoteNodesDiscoverer implements ReplicationGroupListener diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java index 9ff7e224cd..77810a4d69 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java @@ -502,8 +502,8 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im try { doResolution(true, createExceptionHandler); - validateOnCreate(); doValidation(true, createExceptionHandler); + validateOnCreate(); registerWithParents(); } catch(RuntimeException e) @@ -515,22 +515,13 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im 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 AbstractConfiguredObject<X extends ConfiguredObject<X>> im 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; } } } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java index a09910b7e2..4c6f0710c4 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java @@ -357,14 +357,18 @@ public class AbstractConfiguredObjectTest extends TestCase { 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 |
