diff options
| author | Keith Wall <kwall@apache.org> | 2014-05-21 11:05:21 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2014-05-21 11:05:21 +0000 |
| commit | 18db9663c7c73af9d1dc5a82478419f56f597851 (patch) | |
| tree | b8bf591fdfd85ede99bcdd6eea89766e36b355a9 /qpid/java/bdbstore/src/main | |
| parent | 6619d55f7d03e67df6f9f2956779c33d1de66776 (diff) | |
| download | qpid-python-18db9663c7c73af9d1dc5a82478419f56f597851.tar.gz | |
QPID-5715: [Java Broker] Make virtualhosts respect the states ACTIVE and STOPPED
* Add state transition tests for BDBHA virtualhostnode / virtualhost
* Prevent the BDBVHN activating the VH (this is now a responsibility of attain desired state)
* BDBHARemoteReplicationNode use state UNAVAILABLE in the case where the remote node is not MASTER or REPLICA.
Work by Andrew MacBean <andymacbean@gmail.com> and me.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1596536 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/src/main')
2 files changed, 26 insertions, 7 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java index 20c80ad765..9c7fa65928 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java @@ -21,12 +21,14 @@ package org.apache.qpid.server.virtualhostnode.berkeleydb; +import static com.sleepycat.je.rep.ReplicatedEnvironment.State.MASTER; +import static com.sleepycat.je.rep.ReplicatedEnvironment.State.REPLICA; + import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import com.sleepycat.je.rep.MasterStateException; -import com.sleepycat.je.rep.ReplicatedEnvironment; import org.apache.log4j.Logger; import org.apache.qpid.server.configuration.IllegalConfigurationException; @@ -103,7 +105,7 @@ public class BDBHARemoteReplicationNodeImpl extends AbstractConfiguredObject<BDB super.deleted(); } - @StateTransition(currentState = {State.ACTIVE, State.STOPPED}, desiredState = State.DELETED) + @StateTransition(currentState = {State.ACTIVE, State.UNAVAILABLE}, desiredState = State.DELETED) private void doDelete() { String nodeName = getName(); @@ -159,13 +161,13 @@ public class BDBHARemoteReplicationNodeImpl extends AbstractConfiguredObject<BDB if (changedAttributes.contains(ROLE)) { String currentRole = getRole(); - if (!ReplicatedEnvironment.State.REPLICA.name().equals(currentRole)) + if (!REPLICA.name().equals(currentRole)) { throw new IllegalArgumentException("Cannot transfer mastership when not a replica"); } - if (!ReplicatedEnvironment.State.MASTER.name().equals(((BDBHARemoteReplicationNode<?>)proxyForValidation).getRole())) + if (!MASTER.name().equals(((BDBHARemoteReplicationNode<?>)proxyForValidation).getRole())) { - throw new IllegalArgumentException("Changing role to other value then " + ReplicatedEnvironment.State.MASTER.name() + " is unsupported"); + throw new IllegalArgumentException("Changing role to other value then " + MASTER.name() + " is unsupported"); } } @@ -183,6 +185,7 @@ public class BDBHARemoteReplicationNodeImpl extends AbstractConfiguredObject<BDB void setRole(String role) { _role = role; + updateModelStateFromRole(role); } void setJoinTime(long joinTime) @@ -195,4 +198,15 @@ public class BDBHARemoteReplicationNodeImpl extends AbstractConfiguredObject<BDB _lastTransactionId = lastTransactionId; } + private void updateModelStateFromRole(final String role) + { + State currentState = _state.get(); + if (currentState == State.DELETED) + { + return; + } + + boolean isActive = MASTER.name().equals(role) || REPLICA.name().equals(role); + _state.compareAndSet(currentState, isActive ? State.ACTIVE : State.UNAVAILABLE); + } } 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 4061da177b..d162a43834 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 @@ -330,7 +330,7 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu } } - @StateTransition( currentState = { State.ACTIVE, State.ERRORED }, desiredState = State.STOPPED ) + @StateTransition( currentState = { State.UNINITIALIZED, State.ACTIVE, State.ERRORED }, desiredState = State.STOPPED ) protected void doStop() { try @@ -441,7 +441,6 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu } }); } - host.start(); } catch (Exception e) @@ -707,6 +706,12 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu } @Override + protected void onCreate() + { + // Do not persist replica virtualhost + } + + @Override protected <C extends ConfiguredObject> C addChild(final Class<C> childClass, final Map<String, Object> attributes, final ConfiguredObject... otherParents) |
