summaryrefslogtreecommitdiff
path: root/qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBean.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBean.java')
-rw-r--r--qpid/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBean.java122
1 files changed, 68 insertions, 54 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 4f59ff3a7a..bc7a3298a5 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
@@ -19,8 +19,17 @@
*/
package org.apache.qpid.server.store.berkeleydb.jmx;
+import static org.apache.qpid.server.model.ReplicationNode.COALESCING_SYNC;
+import static org.apache.qpid.server.model.ReplicationNode.DESIGNATED_PRIMARY;
+import static org.apache.qpid.server.model.ReplicationNode.DURABILITY;
+import static org.apache.qpid.server.model.ReplicationNode.GROUP_NAME;
+import static org.apache.qpid.server.model.ReplicationNode.HELPER_HOST_PORT;
+import static org.apache.qpid.server.model.ReplicationNode.HOST_PORT;
+import static org.apache.qpid.server.model.ReplicationNode.ROLE;
+
import java.io.IOException;
-import java.util.List;
+import java.util.Collection;
+import java.util.HashMap;
import java.util.Map;
import javax.management.JMException;
@@ -36,10 +45,13 @@ import javax.management.openmbean.TabularDataSupport;
import javax.management.openmbean.TabularType;
import org.apache.log4j.Logger;
-import org.apache.qpid.AMQStoreException;
import org.apache.qpid.server.jmx.AMQManagedObject;
import org.apache.qpid.server.jmx.ManagedObject;
-import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade;
+import org.apache.qpid.server.model.ConfiguredObjectFinder;
+import org.apache.qpid.server.model.IllegalStateTransitionException;
+import org.apache.qpid.server.model.ReplicationNode;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.VirtualHost;
/**
* Management mbean for BDB HA.
@@ -52,12 +64,13 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
private static final CompositeType GROUP_MEMBER_ROW;
private static final OpenType<?>[] GROUP_MEMBER_ATTRIBUTE_TYPES;
+
static
{
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 +78,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 +86,24 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
}
}
- private final ReplicatedEnvironmentFacade _replicatedEnvironmentFacade;
+ private final ReplicationNode _localReplicationNode;
private final String _objectName;
+ private final VirtualHost _parent;
+ private final String _virtualHostName;
- protected BDBHAMessageStoreManagerMBean(String virtualHostName, ReplicatedEnvironmentFacade replicatedEnvironmentFacade, ManagedObject parent) throws JMException
+ public BDBHAMessageStoreManagerMBean(ReplicationNode localReplicationNode, ManagedObject parent) throws JMException
{
super(ManagedBDBHAMessageStore.class, ManagedBDBHAMessageStore.TYPE, ((AMQManagedObject)parent).getRegistry());
- LOGGER.debug("Creating BDBHAMessageStoreManagerMBean for " + virtualHostName);
- _replicatedEnvironmentFacade = replicatedEnvironmentFacade;
- _objectName = ObjectName.quote(virtualHostName);
+
+ _localReplicationNode = localReplicationNode;
+ _virtualHostName = localReplicationNode.getParent(VirtualHost.class).getName();
+ _objectName = ObjectName.quote(_virtualHostName);
+ _parent = _localReplicationNode.getParent(VirtualHost.class);
+
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug("Creating BDBHAMessageStoreManagerMBean for " + _localReplicationNode.getName());
+ }
register();
}
@@ -94,60 +116,44 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
@Override
public String getGroupName()
{
- return _replicatedEnvironmentFacade.getGroupName();
+ return (String) _localReplicationNode.getAttribute(GROUP_NAME);
}
@Override
public String getNodeName()
{
- return _replicatedEnvironmentFacade.getNodeName();
+ return (String) _localReplicationNode.getName();
}
@Override
public String getNodeHostPort()
{
- return _replicatedEnvironmentFacade.getHostPort();
+ return (String) _localReplicationNode.getAttribute(HOST_PORT);
}
@Override
public String getHelperHostPort()
{
- return _replicatedEnvironmentFacade.getHelperHostPort();
+ return (String) _localReplicationNode.getAttribute(HELPER_HOST_PORT);
}
@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 (String) _localReplicationNode.getAttribute(DURABILITY);
}
@Override
public boolean getCoalescingSync() throws IOException, JMException
{
- return _replicatedEnvironmentFacade.isCoalescingSync();
+ return (Boolean)_localReplicationNode.getAttribute(COALESCING_SYNC);
}
@Override
public String getNodeState() throws IOException, JMException
{
- try
- {
- return _replicatedEnvironmentFacade.getNodeState();
- }
- catch (RuntimeException e)
- {
- LOGGER.debug("Failed query node state", e);
- throw new JMException(e.getMessage());
- }
+ return (String)_localReplicationNode.getAttribute(ROLE);
}
@Override
@@ -155,7 +161,7 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
{
try
{
- return _replicatedEnvironmentFacade.isDesignatedPrimary();
+ return (Boolean)_localReplicationNode.getAttribute(DESIGNATED_PRIMARY);
}
catch (RuntimeException e)
{
@@ -167,12 +173,16 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
@Override
public TabularData getAllNodesInGroup() throws IOException, JMException
{
- final TabularDataSupport data = new TabularDataSupport(GROUP_MEMBERS_TABLE);
- final List<Map<String, String>> members = _replicatedEnvironmentFacade.getGroupMembers();
+ Collection<ReplicationNode> allNodes = _parent.getChildren(ReplicationNode.class);
- for (Map<String, String> map : members)
+ final TabularDataSupport data = new TabularDataSupport(GROUP_MEMBERS_TABLE);
+ for (ReplicationNode replicationNode : allNodes)
{
- CompositeData memberData = new CompositeDataSupport(GROUP_MEMBER_ROW, map);
+ Map<String, String> nodeMap = new HashMap<String, String>();
+ nodeMap.put(GRP_MEM_COL_NODE_NAME, replicationNode.getName());
+ nodeMap.put(GRP_MEM_COL_NODE_HOST_PORT, (String)replicationNode.getAttribute(HOST_PORT));
+
+ CompositeData memberData = new CompositeDataSupport(GROUP_MEMBER_ROW, nodeMap);
data.put(memberData);
}
return data;
@@ -181,14 +191,26 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
@Override
public void removeNodeFromGroup(String nodeName) throws JMException
{
+ // find the replication node object, set the desired state
+ Collection<ReplicationNode> allNodes = _parent.getChildren(ReplicationNode.class);
+ ReplicationNode targetNode = ConfiguredObjectFinder.findConfiguredObjectByName(allNodes, nodeName);
+
+ if (targetNode == null)
+ {
+ throw new JMException("Failed to find replication node with name '" + nodeName + "'.");
+ }
try
{
- _replicatedEnvironmentFacade.removeNodeFromGroup(nodeName);
+ State newState = targetNode.setDesiredState(targetNode.getActualState(), State.DELETED);
+ if (newState != State.DELETED)
+ {
+ throw new JMException("Failed to delete replication node with name '" + nodeName + "'. New unexpectedly state is " + newState);
+ }
}
- catch (Exception e)
+ catch(IllegalStateTransitionException e)
{
- LOGGER.error("Failed to remove node " + nodeName + " from group", e);
- throw new JMException(e.getMessage());
+ LOGGER.error("Cannot remove node '" + nodeName + "' from the group", e);
+ throw new JMException("Cannot remove node '" + nodeName + "' from the group:" + e.getMessage());
}
}
@@ -197,11 +219,11 @@ public class BDBHAMessageStoreManagerMBean extends AMQManagedObject implements M
{
try
{
- _replicatedEnvironmentFacade.setDesignatedPrimary(primary);
+ _localReplicationNode.setAttribute(DESIGNATED_PRIMARY, _localReplicationNode.getAttribute(DESIGNATED_PRIMARY), primary);
}
- catch (AMQStoreException e)
+ catch (Exception e)
{
- LOGGER.error("Failed to set node " + _replicatedEnvironmentFacade.getNodeName() + " as designated primary", e);
+ LOGGER.error("Failed to set node " + _localReplicationNode.getName() + " to designated primary : " + primary, e);
throw new JMException(e.getMessage());
}
}
@@ -209,15 +231,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(AMQStoreException 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