From cd126b93a9ec0b3891e19a2b3012e5ccc222cbbd Mon Sep 17 00:00:00 2001 From: Keith Wall Date: Sun, 20 Jul 2014 09:18:41 +0000 Subject: 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 and me. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1612064 13f79535-47bb-0310-9956-ffa450edef68 --- .../berkeleydb/BDBHAVirtualHostNodeImpl.java | 37 ++++++++++++++++++++-- .../store/berkeleydb/BDBHAVirtualHostNodeTest.java | 25 +++++++++------ 2 files changed, 49 insertions(+), 13 deletions(-) (limited to 'qpid/java/bdbstore/src') 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 e5e24de4bb..e629da3d26 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 @@ -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 hostAttributes = new HashMap<>(); + if (hasBlueprint && !blueprintUtilised) + { + Map virtualhostBlueprint = + getContextValue(Map.class, VIRTUALHOST_BLUEPRINT_CONTEXT_VAR); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("Using virtualhost blueprint " + virtualhostBlueprint); + } + + hostAttributes.putAll(virtualhostBlueprint); + + } - Map hostAttributes = new HashMap(); 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 actualContext = (Map) getActualAttributes().get(CONTEXT); + Map context = new HashMap<>(actualContext); + context.put(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR, Boolean.TRUE.toString()); + setAttribute(CONTEXT, getContext(), context); + } } else { diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java index 0d631ae52b..66b252a246 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java +++ b/qpid/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 node1Attributes = new HashMap(); + List 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 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 contextMap = singletonMap(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, blueprint); + node1Attributes.put(BDBHAVirtualHostNode.CONTEXT, contextMap); BDBHAVirtualHostNode node1 = _helper.createAndStartHaVHN(node1Attributes); - BDBHAVirtualHost host = (BDBHAVirtualHost)node1.getVirtualHost(); - - List permittedNodes = new ArrayList(); - int node2PortNumber = getNextAvailable(node1PortNumber+1); - permittedNodes.add(helperAddress); - permittedNodes.add("localhost:" + node2PortNumber); - host.setAttributes(Collections.singletonMap(BDBHAVirtualHost.PERMITTED_NODES, permittedNodes)); Map node2Attributes = new HashMap(); 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"); -- cgit v1.2.1