summaryrefslogtreecommitdiff
path: root/qpid/java/bdbstore/src/main
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-05-21 11:05:21 +0000
committerKeith Wall <kwall@apache.org>2014-05-21 11:05:21 +0000
commit18db9663c7c73af9d1dc5a82478419f56f597851 (patch)
treeb8bf591fdfd85ede99bcdd6eea89766e36b355a9 /qpid/java/bdbstore/src/main
parent6619d55f7d03e67df6f9f2956779c33d1de66776 (diff)
downloadqpid-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')
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java24
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java9
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)