summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-07-20 09:18:41 +0000
committerKeith Wall <kwall@apache.org>2014-07-20 09:18:41 +0000
commitd2930a2952a59aec97c2971f1aa55019feeb94ae (patch)
tree7692946abf68ceb18c3df6461a40c31e99e4999e /java
parent259fb7f010a5f90721851bebe2617f70c08d9876 (diff)
downloadqpid-python-d2930a2952a59aec97c2971f1aa55019feeb94ae.tar.gz
QPID-5867: [Java Broker] Allow the virtualhost's permitted node list to passed via the virtualhostnode's virtualhost blueprint context variable.
Work completed by Andrew MacBean <macbean@apache.org> and me. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1612064 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
-rw-r--r--java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java37
-rw-r--r--java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java25
-rw-r--r--java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java2
-rw-r--r--java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java2
-rw-r--r--java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java13
-rw-r--r--java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java4
-rwxr-xr-xjava/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java4
7 files changed, 61 insertions, 26 deletions
diff --git a/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java b/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
index e5e24de4bb..e629da3d26 100644
--- a/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
+++ b/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
@@ -66,6 +66,8 @@ import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironment
import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacadeFactory;
import org.apache.qpid.server.store.berkeleydb.replication.ReplicationGroupListener;
import org.apache.qpid.server.util.ServerScopedRuntimeException;
+import org.apache.qpid.server.virtualhost.berkeleydb.BDBHAVirtualHost;
+import org.apache.qpid.server.virtualhost.berkeleydb.BDBHAVirtualHostImpl;
import org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode;
@ManagedObject( category = false, type = BDBHAVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE )
@@ -414,14 +416,43 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu
{
if (LOGGER.isDebugEnabled())
{
- LOGGER.debug("Creating new virtualhost with name : " + getGroupName());
+ LOGGER.debug("Creating new virtualhost with name : " + getGroupName());
+ }
+
+ boolean hasBlueprint = getContext().containsKey(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR);
+ boolean blueprintUtilised = getContext().containsKey(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR)
+ && Boolean.parseBoolean(String.valueOf(getContext().get(
+ VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR)));
+
+ Map<String, Object> hostAttributes = new HashMap<>();
+ if (hasBlueprint && !blueprintUtilised)
+ {
+ Map<String, Object> virtualhostBlueprint =
+ getContextValue(Map.class, VIRTUALHOST_BLUEPRINT_CONTEXT_VAR);
+
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug("Using virtualhost blueprint " + virtualhostBlueprint);
+ }
+
+ hostAttributes.putAll(virtualhostBlueprint);
+
+
}
- Map<String, Object> hostAttributes = new HashMap<String, Object>();
hostAttributes.put(VirtualHost.MODEL_VERSION, BrokerModel.MODEL_VERSION);
hostAttributes.put(VirtualHost.NAME, getGroupName());
- hostAttributes.put(VirtualHost.TYPE, "BDB_HA");
+ hostAttributes.put(VirtualHost.TYPE, BDBHAVirtualHostImpl.VIRTUAL_HOST_TYPE);
host = createChild(VirtualHost.class, hostAttributes);
+
+ if (hasBlueprint && !blueprintUtilised)
+ {
+ // Update the context with the utilised flag
+ Map<String, String> actualContext = (Map<String, String>) getActualAttributes().get(CONTEXT);
+ Map<String, String> context = new HashMap<>(actualContext);
+ context.put(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR, Boolean.TRUE.toString());
+ setAttribute(CONTEXT, getContext(), context);
+ }
}
else
{
diff --git a/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java b/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java
index 0d631ae52b..66b252a246 100644
--- a/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java
+++ b/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java
@@ -20,6 +20,7 @@
*/
package org.apache.qpid.server.store.berkeleydb;
+import static java.util.Collections.*;
import static org.mockito.Mockito.when;
import java.io.File;
@@ -45,6 +46,7 @@ import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.virtualhost.berkeleydb.BDBHAVirtualHost;
import org.apache.qpid.server.virtualhost.berkeleydb.BDBHAVirtualHostImpl;
+import org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode;
import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNode;
import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNodeImpl;
import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
@@ -95,7 +97,7 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase
attributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, helperHostPort);
attributes.put(BDBHAVirtualHostNode.STORE_PATH, messageStorePath);
attributes.put(BDBHAVirtualHostNode.CONTEXT,
- Collections.singletonMap(ReplicationConfig.REP_STREAM_TIMEOUT, repStreamTimeout));
+ singletonMap(ReplicationConfig.REP_STREAM_TIMEOUT, repStreamTimeout));
BDBHAVirtualHostNode<?> node = _helper.createHaVHN(attributes);
@@ -467,10 +469,18 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase
{
String messageStorePath = _helper.getMessageStorePath();
int node1PortNumber = findFreePort();
+ int node2PortNumber = getNextAvailable(node1PortNumber+1);
String helperAddress = "localhost:" + node1PortNumber;
String groupName = "group";
- Map<String, Object> node1Attributes = new HashMap<String, Object>();
+ List<String> permittedNodes = new ArrayList<>();
+ permittedNodes.add(helperAddress);
+ String node2Address = "localhost:" + node2PortNumber;
+ permittedNodes.add(node2Address);
+
+ String blueprint = String.format("{ \"%s\" : [ \"%s\", \"%s\" ] } ", BDBHAVirtualHost.PERMITTED_NODES, helperAddress, node2Address);
+
+ Map<String, Object> node1Attributes = new HashMap<>();
node1Attributes.put(BDBHAVirtualHostNode.ID, UUID.randomUUID());
node1Attributes.put(BDBHAVirtualHostNode.TYPE, "BDB_HA");
node1Attributes.put(BDBHAVirtualHostNode.NAME, "node1");
@@ -478,22 +488,17 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase
node1Attributes.put(BDBHAVirtualHostNode.ADDRESS, helperAddress);
node1Attributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, helperAddress);
node1Attributes.put(BDBHAVirtualHostNode.STORE_PATH, messageStorePath + File.separator + "1");
+ Map<String, String> contextMap = singletonMap(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, blueprint);
+ node1Attributes.put(BDBHAVirtualHostNode.CONTEXT, contextMap);
BDBHAVirtualHostNode<?> node1 = _helper.createAndStartHaVHN(node1Attributes);
- BDBHAVirtualHost<?> host = (BDBHAVirtualHost<?>)node1.getVirtualHost();
-
- List<String> permittedNodes = new ArrayList<String>();
- int node2PortNumber = getNextAvailable(node1PortNumber+1);
- permittedNodes.add(helperAddress);
- permittedNodes.add("localhost:" + node2PortNumber);
- host.setAttributes(Collections.<String, Object>singletonMap(BDBHAVirtualHost.PERMITTED_NODES, permittedNodes));
Map<String, Object> node2Attributes = new HashMap<String, Object>();
node2Attributes.put(BDBHAVirtualHostNode.ID, UUID.randomUUID());
node2Attributes.put(BDBHAVirtualHostNode.TYPE, "BDB_HA");
node2Attributes.put(BDBHAVirtualHostNode.NAME, "node2");
node2Attributes.put(BDBHAVirtualHostNode.GROUP_NAME, groupName);
- node2Attributes.put(BDBHAVirtualHostNode.ADDRESS, "localhost:" + node2PortNumber);
+ node2Attributes.put(BDBHAVirtualHostNode.ADDRESS, node2Address);
node2Attributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, helperAddress);
node2Attributes.put(BDBHAVirtualHostNode.STORE_PATH, messageStorePath + File.separator + "2");
node2Attributes.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, "node1");
diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java b/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
index 2a286379f4..b2a124a309 100644
--- a/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
+++ b/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
@@ -44,8 +44,6 @@ public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandard
implements VirtualHostNode<X>
{
private static final Logger LOGGER = Logger.getLogger(AbstractStandardVirtualHostNode.class);
- public static final String VIRTUALHOST_BLUEPRINT_CONTEXT_VAR = "virtualhostBlueprint";
- public static final String VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR = "virtualhostBlueprintUtilised";
public AbstractStandardVirtualHostNode(Map<String, Object> attributes,
Broker<?> parent)
diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java b/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
index c9220b7b74..368ac58bee 100644
--- a/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
+++ b/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
@@ -47,6 +47,8 @@ import java.util.concurrent.atomic.AtomicReference;
public abstract class AbstractVirtualHostNode<X extends AbstractVirtualHostNode<X>> extends AbstractConfiguredObject<X> implements VirtualHostNode<X>
{
+ public static final String VIRTUALHOST_BLUEPRINT_CONTEXT_VAR = "virtualhostBlueprint";
+ public static final String VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR = "virtualhostBlueprintUtilised";
private static final Logger LOGGER = Logger.getLogger(AbstractVirtualHostNode.class);
private final Broker<?> _broker;
diff --git a/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java b/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
index d7c35ba6a8..884e729c52 100644
--- a/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
+++ b/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
@@ -20,7 +20,6 @@
*/
package org.apache.qpid.server.virtualhostnode;
-import static org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode.*;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -145,7 +144,7 @@ public class AbstractStandardVirtualHostNodeTest extends QpidTestCase
String vhBlueprint = String.format("{ \"type\" : \"%s\", \"name\" : \"%s\"}",
TestMemoryVirtualHost.VIRTUAL_HOST_TYPE,
TEST_VIRTUAL_HOST_NAME);
- Map<String, String> context = Collections.singletonMap(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, vhBlueprint);
+ Map<String, String> context = Collections.singletonMap(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, vhBlueprint);
Map<String, Object> nodeAttributes = new HashMap<>();
nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
@@ -166,10 +165,10 @@ public class AbstractStandardVirtualHostNodeTest extends QpidTestCase
Map<String, String> updatedContext = node.getContext();
assertTrue("Context should now have utilised flag", updatedContext.containsKey(
- VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR));
+ AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR));
assertEquals("Utilised flag should be true",
Boolean.TRUE.toString(),
- updatedContext.get(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR));
+ updatedContext.get(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR));
}
/**
@@ -185,8 +184,8 @@ public class AbstractStandardVirtualHostNodeTest extends QpidTestCase
TestMemoryVirtualHost.VIRTUAL_HOST_TYPE,
TEST_VIRTUAL_HOST_NAME);
Map<String, String> context = new HashMap<>();
- context.put(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, vhBlueprint);
- context.put(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR, Boolean.TRUE.toString());
+ context.put(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, vhBlueprint);
+ context.put(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR, Boolean.TRUE.toString());
Map<String, Object> nodeAttributes = new HashMap<>();
nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
@@ -217,7 +216,7 @@ public class AbstractStandardVirtualHostNodeTest extends QpidTestCase
String vhBlueprint = String.format("{ \"type\" : \"%s\", \"name\" : \"%s\"}",
TestMemoryVirtualHost.VIRTUAL_HOST_TYPE,
"vhFromBlueprint");
- Map<String, String> context = Collections.singletonMap(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, vhBlueprint);
+ Map<String, String> context = Collections.singletonMap(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, vhBlueprint);
Map<String, Object> nodeAttributes = new HashMap<>();
nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
diff --git a/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java b/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java
index dcab2cbe76..7916f39488 100644
--- a/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java
+++ b/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java
@@ -32,7 +32,7 @@ import javax.jms.Session;
import org.apache.qpid.configuration.ClientProperties;
import org.apache.qpid.server.model.VirtualHostNode;
-import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode;
+import org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode;
import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode;
import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNodeImpl;
import org.apache.qpid.test.utils.QpidBrokerTestCase;
@@ -88,7 +88,7 @@ public class SplitStoreTest extends QpidBrokerTestCase
{
final String blueprint = String.format(
"{ \"type\" : \"%s\", \"storePath\" : \"%s\" }", virtualHostType, _messageStorePath);
- final Map<String, String> contextMap = Collections.singletonMap(AbstractStandardVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR,
+ final Map<String, String> contextMap = Collections.singletonMap(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR,
blueprint);
TestBrokerConfiguration config = getBrokerConfiguration();
diff --git a/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java b/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
index 67cc87e103..2ccf85c5a5 100755
--- a/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
+++ b/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
@@ -69,7 +69,7 @@ import org.apache.qpid.server.model.Port;
import org.apache.qpid.server.model.Protocol;
import org.apache.qpid.server.model.VirtualHostNode;
import org.apache.qpid.server.store.MemoryConfigurationStore;
-import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode;
+import org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode;
import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode;
import org.apache.qpid.url.URLSyntaxException;
import org.apache.qpid.util.FileUtils;
@@ -873,7 +873,7 @@ public class QpidBrokerTestCase extends QpidTestCase
final String blueprint = getTestProfileVirtualHostNodeBlueprint();
- attributes.put(ConfiguredObject.CONTEXT, Collections.singletonMap(AbstractStandardVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR,
+ attributes.put(ConfiguredObject.CONTEXT, Collections.singletonMap(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR,
blueprint));
int port = getPort(brokerPort);