mirror of https://github.com/apache/activemq.git
https://issues.apache.org/jira/browse/AMQ-3685 - a few more fixes for failover cluster update ... handle well original broker restarting and avoid deadlock
git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1241426 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b567bd478b
commit
19cb932816
|
@ -705,7 +705,11 @@ public class FailoverTransport implements CompositeTransport {
|
||||||
|
|
||||||
private List<URI> getConnectList() {
|
private List<URI> getConnectList() {
|
||||||
ArrayList<URI> l = new ArrayList<URI>(uris);
|
ArrayList<URI> l = new ArrayList<URI>(uris);
|
||||||
l.addAll(updated);
|
for (URI uri : updated) {
|
||||||
|
if (!l.contains(uri)) {
|
||||||
|
l.add(uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
boolean removed = false;
|
boolean removed = false;
|
||||||
if (failedConnectTransportURI != null) {
|
if (failedConnectTransportURI != null) {
|
||||||
removed = l.remove(failedConnectTransportURI);
|
removed = l.remove(failedConnectTransportURI);
|
||||||
|
@ -1167,13 +1171,13 @@ public class FailoverTransport implements CompositeTransport {
|
||||||
updated.clear();
|
updated.clear();
|
||||||
if (updatedURIs != null && updatedURIs.length > 0) {
|
if (updatedURIs != null && updatedURIs.length > 0) {
|
||||||
for (URI uri : updatedURIs) {
|
for (URI uri : updatedURIs) {
|
||||||
if (uri != null && !uris.contains(uri)) {
|
if (uri != null && !updated.contains(uri)) {
|
||||||
updated.add(uri);
|
updated.add(uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
synchronized (reconnectMutex) {
|
if (!(copy.isEmpty() && updated.isEmpty()) && !copy.equals(updated)) {
|
||||||
if (!(copy.isEmpty() && updated.isEmpty()) && !copy.equals(updated)) {
|
buildBackups();
|
||||||
buildBackups();
|
synchronized (reconnectMutex) {
|
||||||
reconnect(rebalance);
|
reconnect(rebalance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@ public class FailoverComplexClusterTest extends FailoverClusterTestSupport {
|
||||||
Thread.sleep(2000);
|
Thread.sleep(2000);
|
||||||
setClientUrl("failover://(" + BROKER_A_CLIENT_TC_ADDRESS + "," + BROKER_B_CLIENT_TC_ADDRESS + ")");
|
setClientUrl("failover://(" + BROKER_A_CLIENT_TC_ADDRESS + "," + BROKER_B_CLIENT_TC_ADDRESS + ")");
|
||||||
createClients();
|
createClients();
|
||||||
|
Thread.sleep(2000);
|
||||||
|
|
||||||
runTests(false);
|
runTests(false);
|
||||||
}
|
}
|
||||||
|
@ -84,10 +85,37 @@ public class FailoverComplexClusterTest extends FailoverClusterTestSupport {
|
||||||
|
|
||||||
setClientUrl("failover://(" + BROKER_A_CLIENT_TC_ADDRESS + "," + BROKER_B_CLIENT_TC_ADDRESS + ")");
|
setClientUrl("failover://(" + BROKER_A_CLIENT_TC_ADDRESS + "," + BROKER_B_CLIENT_TC_ADDRESS + ")");
|
||||||
createClients();
|
createClients();
|
||||||
|
Thread.sleep(2000);
|
||||||
|
|
||||||
runTests(true);
|
runTests(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testOriginalBrokerRestart() throws Exception {
|
||||||
|
initSingleTcBroker("", null);
|
||||||
|
|
||||||
|
Thread.sleep(2000);
|
||||||
|
|
||||||
|
setClientUrl("failover://(" + BROKER_A_CLIENT_TC_ADDRESS + "," + BROKER_B_CLIENT_TC_ADDRESS + ")");
|
||||||
|
createClients();
|
||||||
|
Thread.sleep(2000);
|
||||||
|
|
||||||
|
assertClientsConnectedToThreeBrokers();
|
||||||
|
|
||||||
|
getBroker(BROKER_A_NAME).stop();
|
||||||
|
getBroker(BROKER_A_NAME).waitUntilStopped();
|
||||||
|
removeBroker(BROKER_A_NAME);
|
||||||
|
|
||||||
|
Thread.sleep(5000);
|
||||||
|
|
||||||
|
assertClientsConnectedToTwoBrokers();
|
||||||
|
|
||||||
|
createBrokerA(false, "", null);
|
||||||
|
getBroker(BROKER_A_NAME).waitUntilStarted();
|
||||||
|
Thread.sleep(5000);
|
||||||
|
|
||||||
|
assertClientsConnectedToThreeBrokers();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runs a 3 tests: <br/>
|
* Runs a 3 tests: <br/>
|
||||||
|
|
Loading…
Reference in New Issue