summaryrefslogtreecommitdiff
path: root/qpid/java/bdbstore/jmx
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2014-05-09 13:24:24 +0000
committerAlex Rudyy <orudyy@apache.org>2014-05-09 13:24:24 +0000
commit566f96394dd04b81c3e2987a221dd935a7ab2276 (patch)
treef0bee06cad9ce8c3b40209b3100e68224cba405b /qpid/java/bdbstore/jmx
parentb5bea31b2564f50898d921a2b506f482fa4c6422 (diff)
downloadqpid-python-566f96394dd04b81c3e2987a221dd935a7ab2276.tar.gz
QPID-5409 : Change BDB HA MBean to delegate operations to BDB HA node instance
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1593538 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/jmx')
-rw-r--r--qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBean.java117
-rw-r--r--qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java12
-rw-r--r--qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ManagedBDBHAMessageStore.java3
-rw-r--r--qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanTest.java125
4 files changed, 129 insertions, 128 deletions
diff --git a/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBean.java b/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBean.java
index 3a21bc70d7..7146af364e 100644
--- a/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBean.java
+++ b/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBean.java
@@ -20,7 +20,9 @@
package org.apache.qpid.server.store.berkeleydb.jmx;
import java.io.IOException;
-import java.util.List;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
import javax.management.JMException;
@@ -39,7 +41,10 @@ import org.apache.log4j.Logger;
import org.apache.qpid.server.jmx.AMQManagedObject;
import org.apache.qpid.server.jmx.ManagedObject;
import org.apache.qpid.server.jmx.ManagedObjectRegistry;
-import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade;
+import org.apache.qpid.server.model.IllegalStateTransitionException;
+import org.apache.qpid.server.model.RemoteReplicationNode;
+import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNode;
+import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
/**
* Management mbean for BDB HA.
@@ -57,7 +62,7 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
try
{
GROUP_MEMBER_ATTRIBUTE_TYPES = new OpenType<?>[] {SimpleType.STRING, SimpleType.STRING};
- final String[] itemNames = new String[] {ReplicatedEnvironmentFacade.GRP_MEM_COL_NODE_NAME, ReplicatedEnvironmentFacade.GRP_MEM_COL_NODE_HOST_PORT};
+ final String[] itemNames = new String[] {GRP_MEM_COL_NODE_NAME, GRP_MEM_COL_NODE_HOST_PORT};
final String[] itemDescriptions = new String[] {"Unique node name", "Node host / port "};
GROUP_MEMBER_ROW = new CompositeType("GroupMember", "Replication group member",
itemNames,
@@ -65,7 +70,7 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
GROUP_MEMBER_ATTRIBUTE_TYPES );
GROUP_MEMBERS_TABLE = new TabularType("GroupMembers", "Replication group memebers",
GROUP_MEMBER_ROW,
- new String[] {ReplicatedEnvironmentFacade.GRP_MEM_COL_NODE_NAME});
+ new String[] {GRP_MEM_COL_NODE_NAME});
}
catch (final OpenDataException ode)
{
@@ -73,15 +78,15 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
}
}
- private final ReplicatedEnvironmentFacade _replicatedEnvironmentFacade;
+ private final BDBHAVirtualHostNode<?> _virtualHostNode;
private final String _objectName;
- protected BDBHAMessageStoreManagerMBean(String virtualHostName, ReplicatedEnvironmentFacade replicatedEnvironmentFacade, ManagedObjectRegistry registry) throws JMException
+ protected BDBHAMessageStoreManagerMBean(BDBHAVirtualHostNode<?> virtualHostNode, ManagedObjectRegistry registry) throws JMException
{
super(ManagedBDBHAMessageStore.class, ManagedBDBHAMessageStore.TYPE, registry);
- LOGGER.debug("Creating BDBHAMessageStoreManagerMBean for " + virtualHostName);
- _replicatedEnvironmentFacade = replicatedEnvironmentFacade;
- _objectName = ObjectName.quote(virtualHostName);
+ LOGGER.debug("Creating BDBHAMessageStoreManagerMBean for " + virtualHostNode.getName());
+ _virtualHostNode = virtualHostNode;
+ _objectName = ObjectName.quote( virtualHostNode.getGroupName());
register();
}
@@ -94,46 +99,38 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
@Override
public String getGroupName()
{
- return _replicatedEnvironmentFacade.getGroupName();
+ return _virtualHostNode.getGroupName();
}
@Override
public String getNodeName()
{
- return _replicatedEnvironmentFacade.getNodeName();
+ return _virtualHostNode.getName();
}
@Override
public String getNodeHostPort()
{
- return _replicatedEnvironmentFacade.getHostPort();
+ return _virtualHostNode.getAddress();
}
@Override
public String getHelperHostPort()
{
- return _replicatedEnvironmentFacade.getHelperHostPort();
+ return _virtualHostNode.getHelperAddress();
}
@Override
public String getDurability() throws IOException, JMException
{
- try
- {
- return _replicatedEnvironmentFacade.getDurability();
- }
- catch (RuntimeException e)
- {
- LOGGER.debug("Failed query replication policy", e);
- throw new JMException(e.getMessage());
- }
+ return _virtualHostNode.getDurability();
}
@Override
public boolean getCoalescingSync() throws IOException, JMException
{
- return _replicatedEnvironmentFacade.isCoalescingSync();
+ return _virtualHostNode.isCoalescingSync();
}
@Override
@@ -141,11 +138,11 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
{
try
{
- return _replicatedEnvironmentFacade.getNodeState();
+ return _virtualHostNode.getRole();
}
catch (RuntimeException e)
{
- LOGGER.debug("Failed query node state", e);
+ LOGGER.debug("Failed query node role", e);
throw new JMException(e.getMessage());
}
}
@@ -153,26 +150,30 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
@Override
public boolean getDesignatedPrimary() throws IOException, JMException
{
- try
- {
- return _replicatedEnvironmentFacade.isDesignatedPrimary();
- }
- catch (RuntimeException e)
- {
- LOGGER.debug("Failed query designated primary", e);
- throw new JMException(e.getMessage());
- }
+ return _virtualHostNode.isDesignatedPrimary();
}
@Override
public TabularData getAllNodesInGroup() throws IOException, JMException
{
final TabularDataSupport data = new TabularDataSupport(GROUP_MEMBERS_TABLE);
- final List<Map<String, String>> members = _replicatedEnvironmentFacade.getGroupMembers();
- for (Map<String, String> map : members)
+ Map<String, String> localNodeMap = new HashMap<String, String>();
+ localNodeMap.put(GRP_MEM_COL_NODE_NAME, _virtualHostNode.getName());
+ localNodeMap.put(GRP_MEM_COL_NODE_HOST_PORT, _virtualHostNode.getAddress());
+ CompositeData localNodeData = new CompositeDataSupport(GROUP_MEMBER_ROW, localNodeMap);
+ data.put(localNodeData);
+
+ @SuppressWarnings("rawtypes")
+ final Collection<? extends RemoteReplicationNode> members = _virtualHostNode.getRemoteReplicationNodes();
+ for (RemoteReplicationNode<?> remoteNode : members)
{
- CompositeData memberData = new CompositeDataSupport(GROUP_MEMBER_ROW, map);
+ BDBHARemoteReplicationNode<?> haReplicationNode = (BDBHARemoteReplicationNode<?>)remoteNode;
+ Map<String, String> nodeMap = new HashMap<String, String>();
+ nodeMap.put(GRP_MEM_COL_NODE_NAME, haReplicationNode.getName());
+ nodeMap.put(GRP_MEM_COL_NODE_HOST_PORT, haReplicationNode.getAddress());
+
+ CompositeData memberData = new CompositeDataSupport(GROUP_MEMBER_ROW, nodeMap);
data.put(memberData);
}
return data;
@@ -181,14 +182,32 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
@Override
public void removeNodeFromGroup(String nodeName) throws JMException
{
- try
+ if (getNodeName().equals(nodeName))
{
- _replicatedEnvironmentFacade.removeNodeFromGroup(nodeName);
+ _virtualHostNode.delete();
}
- catch (RuntimeException e)
+ else
{
- LOGGER.error("Failed to remove node " + nodeName + " from group", e);
- throw new JMException(e.getMessage());
+ @SuppressWarnings("rawtypes")
+ Collection<? extends RemoteReplicationNode> remoteNodes = _virtualHostNode.getRemoteReplicationNodes();
+ for (RemoteReplicationNode<?> remoteNode : remoteNodes)
+ {
+ if (remoteNode.getName().equals(nodeName))
+ {
+ try
+ {
+ remoteNode.delete();
+ return;
+ }
+ catch(IllegalStateTransitionException e)
+ {
+ LOGGER.error("Cannot remove node '" + nodeName + "' from the group", e);
+ throw new JMException("Cannot remove node '" + nodeName + "' from the group:" + e.getMessage());
+ }
+ }
+ }
+
+ throw new JMException("Failed to find replication node with name '" + nodeName + "'.");
}
}
@@ -197,11 +216,11 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
{
try
{
- _replicatedEnvironmentFacade.setDesignatedPrimary(primary);
+ _virtualHostNode.setAttributes(Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.DESIGNATED_PRIMARY, primary));
}
catch (RuntimeException e)
{
- LOGGER.error("Failed to set node " + _replicatedEnvironmentFacade.getNodeName() + " as designated primary", e);
+ LOGGER.error("Failed to set node " + _virtualHostNode.getName() + " as designated primary", e);
throw new JMException(e.getMessage());
}
}
@@ -209,15 +228,7 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
@Override
public void updateAddress(String nodeName, String newHostName, int newPort) throws JMException
{
- try
- {
- _replicatedEnvironmentFacade.updateAddress(nodeName, newHostName, newPort);
- }
- catch(RuntimeException e)
- {
- LOGGER.error("Failed to update address for node " + nodeName + " to " + newHostName + ":" + newPort, e);
- throw new JMException(e.getMessage());
- }
+ throw new UnsupportedOperationException("Unsupported operation. Delete the node then add a new node in its place.");
}
@Override
diff --git a/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java b/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java
index 558cc7e8a9..fb61df68b7 100644
--- a/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java
+++ b/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java
@@ -21,17 +21,12 @@
package org.apache.qpid.server.store.berkeleydb.jmx;
import javax.management.JMException;
-import javax.management.StandardMBean;
import org.apache.log4j.Logger;
import org.apache.qpid.server.jmx.MBeanProvider;
import org.apache.qpid.server.jmx.ManagedObject;
import org.apache.qpid.server.jmx.ManagedObjectRegistry;
import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.model.VirtualHostNode;
-import org.apache.qpid.server.store.berkeleydb.BDBHAVirtualHost;
-import org.apache.qpid.server.store.berkeleydb.BDBMessageStore;
import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade;
import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
@@ -58,17 +53,12 @@ public class BDBHAMessageStoreManagerMBeanProvider implements MBeanProvider
@Override
public ManagedObject createMBean(ConfiguredObject child, ManagedObjectRegistry registry) throws JMException
{
- BDBHAVirtualHostNode<?> virtualHostNode = (BDBHAVirtualHostNode<?>) child;
-
- BDBMessageStore messageStore = (BDBMessageStore) virtualHostNode.getConfigurationStore();
-
if (LOGGER.isDebugEnabled())
{
LOGGER.debug("Creating mBean for child " + child);
}
- ReplicatedEnvironmentFacade replicatedEnvironmentFacade = (ReplicatedEnvironmentFacade)messageStore.getEnvironmentFacade();
- return new BDBHAMessageStoreManagerMBean(virtualHostNode.getGroupName(), replicatedEnvironmentFacade, registry);
+ return new BDBHAMessageStoreManagerMBean((BDBHAVirtualHostNode<?>) child, registry);
}
@Override
diff --git a/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ManagedBDBHAMessageStore.java b/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ManagedBDBHAMessageStore.java
index b85e44526b..fc1cd0801a 100644
--- a/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ManagedBDBHAMessageStore.java
+++ b/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ManagedBDBHAMessageStore.java
@@ -41,6 +41,9 @@ public interface ManagedBDBHAMessageStore
public static final String ATTR_DESIGNATED_PRIMARY = "DesignatedPrimary";
public static final String ATTR_COALESCING_SYNC = "CoalescingSync";
+ public static final String GRP_MEM_COL_NODE_HOST_PORT = "NodeHostPort";
+ public static final String GRP_MEM_COL_NODE_NAME = "NodeName";
+
@MBeanAttribute(name=ATTR_GROUP_NAME, description="Name identifying the group")
String getGroupName() throws IOException, JMException;
diff --git a/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanTest.java b/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanTest.java
index 6aeadde0f8..439af259ab 100644
--- a/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanTest.java
+++ b/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanTest.java
@@ -19,15 +19,16 @@
*/
package org.apache.qpid.server.store.berkeleydb.jmx;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.Iterator;
import javax.management.JMException;
import javax.management.ObjectName;
@@ -37,22 +38,24 @@ import javax.management.openmbean.TabularData;
import junit.framework.TestCase;
-import org.apache.qpid.server.jmx.AMQManagedObject;
import org.apache.qpid.server.jmx.ManagedObjectRegistry;
-import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade;
+import org.apache.qpid.server.model.IllegalStateTransitionException;
+import org.apache.qpid.server.model.RemoteReplicationNode;
+import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNode;
+import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
public class BDBHAMessageStoreManagerMBeanTest extends TestCase
{
- private static final String TEST_GROUP_NAME = "testGroupName";
+ private static final String TEST_VHOST_NAME = "test";
+ private static final String TEST_GROUP_NAME = TEST_VHOST_NAME;
private static final String TEST_NODE_NAME = "testNodeName";
private static final String TEST_NODE_HOST_PORT = "host:1234";
private static final String TEST_HELPER_HOST_PORT = "host:5678";
private static final String TEST_DURABILITY = "sync,sync,all";
private static final String TEST_NODE_STATE = "MASTER";
- private static final String TEST_STORE_NAME = "testStoreName";
private static final boolean TEST_DESIGNATED_PRIMARY_FLAG = false;
- private ReplicatedEnvironmentFacade _replicatedEnvironmentFacade;
+ private BDBHAVirtualHostNode<?> _virtualHostNode;
private BDBHAMessageStoreManagerMBean _mBean;
@Override
@@ -60,9 +63,13 @@ public class BDBHAMessageStoreManagerMBeanTest extends TestCase
{
super.setUp();
- _replicatedEnvironmentFacade = mock(ReplicatedEnvironmentFacade.class);
+ _virtualHostNode = mock(BDBHAVirtualHostNode.class);
+ when(_virtualHostNode.getName()).thenReturn(TEST_NODE_NAME);
+ when(_virtualHostNode.getGroupName()).thenReturn(TEST_GROUP_NAME);
+ when(_virtualHostNode.getAddress()).thenReturn(TEST_NODE_HOST_PORT);
+
ManagedObjectRegistry registry = mock(ManagedObjectRegistry.class);
- _mBean = new BDBHAMessageStoreManagerMBean(TEST_STORE_NAME, _replicatedEnvironmentFacade, registry);
+ _mBean = new BDBHAMessageStoreManagerMBean(_virtualHostNode, registry);
}
@Override
@@ -73,134 +80,119 @@ public class BDBHAMessageStoreManagerMBeanTest extends TestCase
public void testObjectName() throws Exception
{
- String expectedObjectName = "org.apache.qpid:type=BDBHAMessageStore,name=" + ObjectName.quote(TEST_STORE_NAME);
+ String expectedObjectName = "org.apache.qpid:type=BDBHAMessageStore,name=" + ObjectName.quote(TEST_VHOST_NAME);
assertEquals(expectedObjectName, _mBean.getObjectName().toString());
}
public void testGroupName() throws Exception
{
- when(_replicatedEnvironmentFacade.getGroupName()).thenReturn(TEST_GROUP_NAME);
+ when(_virtualHostNode.getGroupName()).thenReturn(TEST_GROUP_NAME);
assertEquals(TEST_GROUP_NAME, _mBean.getAttribute(ManagedBDBHAMessageStore.ATTR_GROUP_NAME));
}
public void testNodeName() throws Exception
{
- when(_replicatedEnvironmentFacade.getNodeName()).thenReturn(TEST_NODE_NAME);
+ when(_virtualHostNode.getName()).thenReturn(TEST_NODE_NAME);
assertEquals(TEST_NODE_NAME, _mBean.getAttribute(ManagedBDBHAMessageStore.ATTR_NODE_NAME));
}
public void testNodeHostPort() throws Exception
{
- when(_replicatedEnvironmentFacade.getHostPort()).thenReturn(TEST_NODE_HOST_PORT);
+ when(_virtualHostNode.getAddress()).thenReturn(TEST_NODE_HOST_PORT);
assertEquals(TEST_NODE_HOST_PORT, _mBean.getAttribute(ManagedBDBHAMessageStore.ATTR_NODE_HOST_PORT));
}
public void testHelperHostPort() throws Exception
{
- when(_replicatedEnvironmentFacade.getHelperHostPort()).thenReturn(TEST_HELPER_HOST_PORT);
+ when(_virtualHostNode.getHelperAddress()).thenReturn(TEST_HELPER_HOST_PORT);
assertEquals(TEST_HELPER_HOST_PORT, _mBean.getAttribute(ManagedBDBHAMessageStore.ATTR_HELPER_HOST_PORT));
}
public void testDurability() throws Exception
{
- when(_replicatedEnvironmentFacade.getDurability()).thenReturn(TEST_DURABILITY);
+ when(_virtualHostNode.getDurability()).thenReturn(TEST_DURABILITY);
assertEquals(TEST_DURABILITY, _mBean.getAttribute(ManagedBDBHAMessageStore.ATTR_DURABILITY));
}
public void testCoalescingSync() throws Exception
{
- when(_replicatedEnvironmentFacade.isCoalescingSync()).thenReturn(true);
+ when(_virtualHostNode.isCoalescingSync()).thenReturn(true);
assertEquals(true, _mBean.getAttribute(ManagedBDBHAMessageStore.ATTR_COALESCING_SYNC));
}
public void testNodeState() throws Exception
{
- when(_replicatedEnvironmentFacade.getNodeState()).thenReturn(TEST_NODE_STATE);
+ when(_virtualHostNode.getRole()).thenReturn(TEST_NODE_STATE);
assertEquals(TEST_NODE_STATE, _mBean.getAttribute(ManagedBDBHAMessageStore.ATTR_NODE_STATE));
}
public void testDesignatedPrimaryFlag() throws Exception
{
- when(_replicatedEnvironmentFacade.isDesignatedPrimary()).thenReturn(TEST_DESIGNATED_PRIMARY_FLAG);
+ when(_virtualHostNode.isDesignatedPrimary()).thenReturn(TEST_DESIGNATED_PRIMARY_FLAG);
assertEquals(TEST_DESIGNATED_PRIMARY_FLAG, _mBean.getAttribute(ManagedBDBHAMessageStore.ATTR_DESIGNATED_PRIMARY));
}
public void testGroupMembersForGroupWithOneNode() throws Exception
{
- List<Map<String, String>> members = Collections.singletonList(createTestNodeResult());
- when(_replicatedEnvironmentFacade.getGroupMembers()).thenReturn(members);
+ BDBHARemoteReplicationNode<?> node = mockRemoteNode();
final TabularData resultsTable = _mBean.getAllNodesInGroup();
- assertTableHasHeadingsNamed(resultsTable, ReplicatedEnvironmentFacade.GRP_MEM_COL_NODE_NAME, ReplicatedEnvironmentFacade.GRP_MEM_COL_NODE_HOST_PORT);
+ assertTableHasHeadingsNamed(resultsTable, BDBHAMessageStoreManagerMBean.GRP_MEM_COL_NODE_NAME,
+ BDBHAMessageStoreManagerMBean.GRP_MEM_COL_NODE_HOST_PORT);
final int numberOfDataRows = resultsTable.size();
- assertEquals("Unexpected number of data rows", 1 ,numberOfDataRows);
- final CompositeData row = (CompositeData) resultsTable.values().iterator().next();
- assertEquals(TEST_NODE_NAME, row.get(ReplicatedEnvironmentFacade.GRP_MEM_COL_NODE_NAME));
- assertEquals(TEST_NODE_HOST_PORT, row.get(ReplicatedEnvironmentFacade.GRP_MEM_COL_NODE_HOST_PORT));
- }
+ assertEquals("Unexpected number of data rows", 2, numberOfDataRows);
+ Iterator<?> iterator = resultsTable.values().iterator();
- public void testRemoveNodeFromReplicationGroup() throws Exception
- {
- _mBean.removeNodeFromGroup(TEST_NODE_NAME);
+ final CompositeData firstRow = (CompositeData) iterator.next();
+ assertEquals(TEST_NODE_NAME, firstRow.get(BDBHAMessageStoreManagerMBean.GRP_MEM_COL_NODE_NAME));
+ assertEquals(TEST_NODE_HOST_PORT, firstRow.get(BDBHAMessageStoreManagerMBean.GRP_MEM_COL_NODE_HOST_PORT));
- verify(_replicatedEnvironmentFacade).removeNodeFromGroup(TEST_NODE_NAME);
+ final CompositeData secondRow = (CompositeData) iterator.next();
+ assertEquals(node.getName(), secondRow.get(BDBHAMessageStoreManagerMBean.GRP_MEM_COL_NODE_NAME));
+ assertEquals(node.getAddress(), secondRow.get(BDBHAMessageStoreManagerMBean.GRP_MEM_COL_NODE_HOST_PORT));
}
- public void testRemoveNodeFromReplicationGroupWithError() throws Exception
+ public void testRemoveNodeFromReplicationGroup() throws Exception
{
- doThrow(new RuntimeException("mocked exception")).when(_replicatedEnvironmentFacade).removeNodeFromGroup(TEST_NODE_NAME);
+ BDBHARemoteReplicationNode<?> node = mockRemoteNode();
- try
- {
- _mBean.removeNodeFromGroup(TEST_NODE_NAME);
- fail("Exception not thrown");
- }
- catch (JMException je)
- {
- // PASS
- }
- }
-
- public void testSetAsDesignatedPrimary() throws Exception
- {
- _mBean.setDesignatedPrimary(true);
+ _mBean.removeNodeFromGroup(node.getName());
- verify(_replicatedEnvironmentFacade).setDesignatedPrimary(true);
+ verify(node).delete();
}
- public void testSetAsDesignatedPrimaryWithError() throws Exception
+ public void testRemoveNodeFromReplicationGroupOnIllegalStateTransitionException() throws Exception
{
- doThrow(new RuntimeException("mocked exception")).when(_replicatedEnvironmentFacade).setDesignatedPrimary(true);
+ BDBHARemoteReplicationNode<?> node = mockRemoteNode();
+ doThrow(new IllegalStateTransitionException("test")).when(node).delete();
- try
+ try
{
- _mBean.setDesignatedPrimary(true);
+ _mBean.removeNodeFromGroup("remotenode");
fail("Exception not thrown");
}
catch (JMException je)
{
- // PASS
+ // PASS#
}
}
- public void testUpdateAddress() throws Exception
+ public void testSetAsDesignatedPrimary() throws Exception
{
- String newHostName = "newHostName";
- int newPort = 1967;
-
- _mBean.updateAddress(TEST_NODE_NAME, newHostName, newPort);
+ _mBean.setDesignatedPrimary(true);
- verify(_replicatedEnvironmentFacade).updateAddress(TEST_NODE_NAME, newHostName, newPort);
+ verify(_virtualHostNode).setAttributes(
+ eq(Collections.<String, Object> singletonMap(BDBHAVirtualHostNode.DESIGNATED_PRIMARY, true)));
}
private void assertTableHasHeadingsNamed(final TabularData resultsTable, String... headingNames)
@@ -212,11 +204,16 @@ public class BDBHAMessageStoreManagerMBeanTest extends TestCase
}
}
- private Map<String, String> createTestNodeResult()
+ private BDBHARemoteReplicationNode<?> mockRemoteNode()
{
- Map<String, String> items = new HashMap<String, String>();
- items.put(ReplicatedEnvironmentFacade.GRP_MEM_COL_NODE_NAME, TEST_NODE_NAME);
- items.put(ReplicatedEnvironmentFacade.GRP_MEM_COL_NODE_HOST_PORT, TEST_NODE_HOST_PORT);
- return items;
+ BDBHARemoteReplicationNode<?> remoteNode = mock(BDBHARemoteReplicationNode.class);
+ when(remoteNode.getName()).thenReturn("remotenode");
+ when(remoteNode.getAddress()).thenReturn("remotehost:port");
+
+ @SuppressWarnings("rawtypes")
+ Collection<? extends RemoteReplicationNode> remoteNodes = Collections.singletonList(remoteNode);
+ doReturn(remoteNodes).when(_virtualHostNode).getRemoteReplicationNodes();
+
+ return remoteNode;
}
}