summaryrefslogtreecommitdiff
path: root/qpid/java/bdbstore/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/bdbstore/src/main')
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java5
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java7
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java41
-rw-r--r--qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js12
4 files changed, 56 insertions, 9 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
index cde00a8804..91e73324bc 100644
--- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
+++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
@@ -23,12 +23,10 @@ package org.apache.qpid.server.store.berkeleydb.replication;
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
@@ -75,6 +73,7 @@ import com.sleepycat.je.rep.StateChangeEvent;
import com.sleepycat.je.rep.StateChangeListener;
import com.sleepycat.je.rep.util.DbPing;
import com.sleepycat.je.rep.util.ReplicationGroupAdmin;
+import com.sleepycat.je.rep.utilint.HostPortPair;
import com.sleepycat.je.rep.utilint.ServiceDispatcher.ServiceConnectFailedException;
import com.sleepycat.je.rep.vlsn.VLSNRange;
import com.sleepycat.je.utilint.PropUtil;
@@ -720,7 +719,7 @@ public class ReplicatedEnvironmentFacade implements EnvironmentFacade, StateChan
helpers.addAll(_environment.getRepConfig().getHelperSockets());
final ReplicationConfig repConfig = _environment.getRepConfig();
- helpers.add(InetSocketAddress.createUnresolved(repConfig.getNodeHostname(), repConfig.getNodePort()));
+ helpers.add(HostPortPair.getSocket(HostPortPair.getString(repConfig.getNodeHostname(), repConfig.getNodePort())));
return new ReplicationGroupAdmin(_configuration.getGroupName(), helpers);
}
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 d1e6b39bcc..20c80ad765 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,7 +21,6 @@
package org.apache.qpid.server.virtualhostnode.berkeleydb;
-import java.io.File;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
@@ -98,6 +97,12 @@ public class BDBHARemoteReplicationNodeImpl extends AbstractConfiguredObject<BDB
return _lastTransactionId;
}
+ @Override
+ public void deleted()
+ {
+ super.deleted();
+ }
+
@StateTransition(currentState = {State.ACTIVE, State.STOPPED}, desiredState = State.DELETED)
private void doDelete()
{
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 9602c2c29c..c019465176 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
@@ -20,9 +20,11 @@
*/
package org.apache.qpid.server.virtualhostnode.berkeleydb;
+import java.net.InetSocketAddress;
import java.security.PrivilegedAction;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException;
@@ -32,11 +34,14 @@ import java.util.concurrent.atomic.AtomicReference;
import javax.security.auth.Subject;
+import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.rep.NodeState;
import com.sleepycat.je.rep.ReplicatedEnvironment;
import com.sleepycat.je.rep.ReplicationNode;
import com.sleepycat.je.rep.StateChangeEvent;
import com.sleepycat.je.rep.StateChangeListener;
+import com.sleepycat.je.rep.util.ReplicationGroupAdmin;
+import com.sleepycat.je.rep.utilint.HostPortPair;
import org.apache.log4j.Logger;
import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
@@ -340,6 +345,39 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu
}
}
+ @StateTransition( currentState = { State.ACTIVE, State.STOPPED, State.ERRORED}, desiredState = State.DELETED )
+ protected void doDelete()
+ {
+ Set<InetSocketAddress> helpers = getRemoteNodeAddresses();
+ super.doDelete();
+ if (getState() == State.DELETED && !helpers.isEmpty())
+ {
+ try
+ {
+ new ReplicationGroupAdmin(_groupName, helpers).removeMember(getName());
+ }
+ catch(DatabaseException e)
+ {
+ LOGGER.warn("The deletion of node " + this + " on remote nodes failed due to: " + e.getMessage()
+ + ". To finish deletion a removal of the node from any of remote nodes (" + helpers + ") is required.");
+ }
+ }
+ }
+
+ private Set<InetSocketAddress> getRemoteNodeAddresses()
+ {
+ Set<InetSocketAddress> helpers = new HashSet<InetSocketAddress>();
+ @SuppressWarnings("rawtypes")
+ Collection<? extends RemoteReplicationNode> remoteNodes = getRemoteReplicationNodes();
+ for (RemoteReplicationNode<?> node : remoteNodes)
+ {
+ BDBHARemoteReplicationNode<?> bdbHaRemoteReplicationNode = (BDBHARemoteReplicationNode<?>)node;
+ String remoteNodeAddress = bdbHaRemoteReplicationNode.getAddress();
+ helpers.add(HostPortPair.getSocket(remoteNodeAddress));
+ }
+ return helpers;
+ }
+
protected void onClose()
{
try
@@ -626,8 +664,7 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu
BDBHARemoteReplicationNodeImpl remoteNode = getChildByName(BDBHARemoteReplicationNodeImpl.class, node.getName());
if (remoteNode != null)
{
- remoteNode.delete();
- childRemoved(remoteNode);
+ remoteNode.deleted();
}
}
diff --git a/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js b/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js
index c4ac3f3d91..9dbebc9d7d 100644
--- a/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js
+++ b/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js
@@ -148,7 +148,7 @@ define(["dojo/_base/xhr",
{
var data = that.membersGrid.grid.selection.getSelected();
that.transferMasterButton.set("disabled", data.length != 1|| data[0].role != "REPLICA");
- that.removeNodeButton.set("disabled", data.length != 1 || data[0].role == "MASTER" || data[0].name == that.data.name);
+ that.removeNodeButton.set("disabled", data.length != 1 || data[0].role == "MASTER");
};
connect.connect(this.membersGrid.grid.selection, 'onSelected', nodeControlsToggler);
connect.connect(this.membersGrid.grid.selection, 'onDeselected', nodeControlsToggler);
@@ -170,8 +170,14 @@ define(["dojo/_base/xhr",
var data = that.membersGrid.grid.selection.getSelected();
if (data.length == 1 && confirm("Are you sure you would like to delete node '" + data[0].name + "'?"))
{
- sendRequest(that.data.name, data[0].name, "DELETE");
- that.membersGrid.grid.selection.clear();
+ if (sendRequest(that.data.name, data[0].name, "DELETE"))
+ {
+ that.membersGrid.grid.selection.clear();
+ if (data[0].name == that.data.name)
+ {
+ that.parent.destroy();
+ }
+ }
}
}
);