mirror of
https://github.com/apache/activemq-artemis.git
synced 2025-03-07 01:39:46 +00:00
This closes #2360
This commit is contained in:
commit
0d665b5321
@ -0,0 +1,115 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.activemq.artemis.tests.integration.cluster.failover;
|
||||||
|
|
||||||
|
import org.apache.activemq.artemis.api.core.TransportConfiguration;
|
||||||
|
import org.apache.activemq.artemis.core.config.Configuration;
|
||||||
|
import org.apache.activemq.artemis.core.config.ha.ReplicaPolicyConfiguration;
|
||||||
|
import org.apache.activemq.artemis.core.config.ha.ReplicatedPolicyConfiguration;
|
||||||
|
import org.apache.activemq.artemis.core.server.ActiveMQServer;
|
||||||
|
import org.apache.activemq.artemis.junit.Wait;
|
||||||
|
import org.apache.activemq.artemis.tests.integration.cluster.util.TestableServer;
|
||||||
|
import org.apache.activemq.artemis.tests.util.TransportConfigurationUtils;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.TestRule;
|
||||||
|
import org.junit.rules.TestWatcher;
|
||||||
|
import org.junit.runner.Description;
|
||||||
|
|
||||||
|
public class ExtraBackupReplicatedFailoverTest extends FailoverTestBase {
|
||||||
|
|
||||||
|
boolean isExtraBackupGroupNameReplicates = false;
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public TestRule watcher = new TestWatcher() {
|
||||||
|
@Override
|
||||||
|
protected void starting(Description description) {
|
||||||
|
isExtraBackupGroupNameReplicates = description.getMethodName().equals("testExtraBackupGroupNameReplicates");
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testExtraBackupReplicates() throws Exception {
|
||||||
|
Configuration secondBackupConfig = backupConfig.copy();
|
||||||
|
TransportConfiguration tc = secondBackupConfig.getAcceptorConfigurations().iterator().next();
|
||||||
|
TestableServer secondBackupServer = createTestableServer(secondBackupConfig);
|
||||||
|
tc.getParams().put("serverId", "2");
|
||||||
|
secondBackupConfig.setBindingsDirectory(getBindingsDir(1, true)).setJournalDirectory(getJournalDir(1, true)).setPagingDirectory(getPageDir(1, true)).setLargeMessagesDirectory(getLargeMessagesDir(1, true)).setSecurityEnabled(false);
|
||||||
|
|
||||||
|
waitForRemoteBackupSynchronization(backupServer.getServer());
|
||||||
|
|
||||||
|
secondBackupServer.start();
|
||||||
|
Thread.sleep(5000);
|
||||||
|
backupServer.stop();
|
||||||
|
waitForSync(secondBackupServer.getServer());
|
||||||
|
waitForRemoteBackupSynchronization(secondBackupServer.getServer());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testExtraBackupGroupNameReplicates() throws Exception {
|
||||||
|
ReplicaPolicyConfiguration backupReplicaPolicyConfiguration = (ReplicaPolicyConfiguration) backupServer.getServer().getConfiguration().getHAPolicyConfiguration();
|
||||||
|
backupReplicaPolicyConfiguration.setGroupName("foo");
|
||||||
|
|
||||||
|
ReplicatedPolicyConfiguration replicatedPolicyConfiguration = (ReplicatedPolicyConfiguration) liveServer.getServer().getConfiguration().getHAPolicyConfiguration();
|
||||||
|
replicatedPolicyConfiguration.setGroupName("foo");
|
||||||
|
|
||||||
|
Configuration secondBackupConfig = backupConfig.copy();
|
||||||
|
TransportConfiguration tc = secondBackupConfig.getAcceptorConfigurations().iterator().next();
|
||||||
|
TestableServer secondBackupServer = createTestableServer(secondBackupConfig);
|
||||||
|
tc.getParams().put("serverId", "2");
|
||||||
|
secondBackupConfig.setBindingsDirectory(getBindingsDir(1, true)).setJournalDirectory(getJournalDir(1, true)).setPagingDirectory(getPageDir(1, true)).setLargeMessagesDirectory(getLargeMessagesDir(1, true)).setSecurityEnabled(false);
|
||||||
|
ReplicaPolicyConfiguration replicaPolicyConfiguration = (ReplicaPolicyConfiguration) secondBackupConfig.getHAPolicyConfiguration();
|
||||||
|
replicaPolicyConfiguration.setGroupName("foo");
|
||||||
|
waitForRemoteBackupSynchronization(backupServer.getServer());
|
||||||
|
|
||||||
|
secondBackupServer.start();
|
||||||
|
Thread.sleep(5000);
|
||||||
|
backupServer.stop();
|
||||||
|
waitForSync(secondBackupServer.getServer());
|
||||||
|
waitForRemoteBackupSynchronization(secondBackupServer.getServer());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void createConfigs() throws Exception {
|
||||||
|
createReplicatedConfigs();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setupHAPolicyConfiguration() {
|
||||||
|
if (isExtraBackupGroupNameReplicates) {
|
||||||
|
((ReplicatedPolicyConfiguration) liveConfig.getHAPolicyConfiguration()).setGroupName("foo");
|
||||||
|
((ReplicaPolicyConfiguration) backupConfig.getHAPolicyConfiguration()).setGroupName("foo");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected TransportConfiguration getAcceptorTransportConfiguration(final boolean live) {
|
||||||
|
return TransportConfigurationUtils.getInVMAcceptor(live);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected TransportConfiguration getConnectorTransportConfiguration(final boolean live) {
|
||||||
|
return TransportConfigurationUtils.getInVMConnector(live);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void waitForSync(ActiveMQServer server) throws Exception {
|
||||||
|
Wait.waitFor(server::isReplicaSync);
|
||||||
|
}
|
||||||
|
}
|
@ -25,10 +25,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import com.sun.net.httpserver.HttpExchange;
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import com.sun.net.httpserver.HttpHandler;
|
import com.sun.net.httpserver.HttpHandler;
|
||||||
import com.sun.net.httpserver.HttpServer;
|
import com.sun.net.httpserver.HttpServer;
|
||||||
import org.apache.activemq.artemis.api.core.TransportConfiguration;
|
|
||||||
import org.apache.activemq.artemis.api.core.client.ClientSession;
|
import org.apache.activemq.artemis.api.core.client.ClientSession;
|
||||||
import org.apache.activemq.artemis.component.WebServerComponent;
|
import org.apache.activemq.artemis.component.WebServerComponent;
|
||||||
import org.apache.activemq.artemis.core.config.Configuration;
|
|
||||||
import org.apache.activemq.artemis.core.config.ha.ReplicaPolicyConfiguration;
|
import org.apache.activemq.artemis.core.config.ha.ReplicaPolicyConfiguration;
|
||||||
import org.apache.activemq.artemis.core.config.ha.ReplicatedPolicyConfiguration;
|
import org.apache.activemq.artemis.core.config.ha.ReplicatedPolicyConfiguration;
|
||||||
import org.apache.activemq.artemis.core.server.ActiveMQServer;
|
import org.apache.activemq.artemis.core.server.ActiveMQServer;
|
||||||
@ -37,7 +35,6 @@ import org.apache.activemq.artemis.core.server.cluster.ha.ReplicatedPolicy;
|
|||||||
import org.apache.activemq.artemis.dto.AppDTO;
|
import org.apache.activemq.artemis.dto.AppDTO;
|
||||||
import org.apache.activemq.artemis.dto.WebServerDTO;
|
import org.apache.activemq.artemis.dto.WebServerDTO;
|
||||||
import org.apache.activemq.artemis.junit.Wait;
|
import org.apache.activemq.artemis.junit.Wait;
|
||||||
import org.apache.activemq.artemis.tests.integration.cluster.util.TestableServer;
|
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@ -48,13 +45,11 @@ import org.junit.runner.Description;
|
|||||||
public class ReplicatedFailoverTest extends FailoverTest {
|
public class ReplicatedFailoverTest extends FailoverTest {
|
||||||
|
|
||||||
boolean isReplicatedFailbackTest = false;
|
boolean isReplicatedFailbackTest = false;
|
||||||
boolean isExtraBackupGroupNameReplicates = false;
|
|
||||||
@Rule
|
@Rule
|
||||||
public TestRule watcher = new TestWatcher() {
|
public TestRule watcher = new TestWatcher() {
|
||||||
@Override
|
@Override
|
||||||
protected void starting(Description description) {
|
protected void starting(Description description) {
|
||||||
isReplicatedFailbackTest = description.getMethodName().equals("testReplicatedFailback") || description.getMethodName().equals("testLoop");
|
isReplicatedFailbackTest = description.getMethodName().equals("testReplicatedFailback") || description.getMethodName().equals("testLoop");
|
||||||
isExtraBackupGroupNameReplicates = description.getMethodName().equals("testExtraBackupGroupNameReplicates");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -78,49 +73,6 @@ public class ReplicatedFailoverTest extends FailoverTest {
|
|||||||
Wait.waitFor(server::isReplicaSync);
|
Wait.waitFor(server::isReplicaSync);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testExtraBackupReplicates() throws Exception {
|
|
||||||
Configuration secondBackupConfig = backupConfig.copy();
|
|
||||||
TransportConfiguration tc = secondBackupConfig.getAcceptorConfigurations().iterator().next();
|
|
||||||
TestableServer secondBackupServer = createTestableServer(secondBackupConfig);
|
|
||||||
tc.getParams().put("serverId", "2");
|
|
||||||
secondBackupConfig.setBindingsDirectory(getBindingsDir(1, true)).setJournalDirectory(getJournalDir(1, true)).setPagingDirectory(getPageDir(1, true)).setLargeMessagesDirectory(getLargeMessagesDir(1, true)).setSecurityEnabled(false);
|
|
||||||
|
|
||||||
waitForRemoteBackupSynchronization(backupServer.getServer());
|
|
||||||
|
|
||||||
secondBackupServer.start();
|
|
||||||
Thread.sleep(5000);
|
|
||||||
backupServer.stop();
|
|
||||||
waitForSync(secondBackupServer.getServer());
|
|
||||||
waitForRemoteBackupSynchronization(secondBackupServer.getServer());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testExtraBackupGroupNameReplicates() throws Exception {
|
|
||||||
ReplicaPolicyConfiguration backupReplicaPolicyConfiguration = (ReplicaPolicyConfiguration) backupServer.getServer().getConfiguration().getHAPolicyConfiguration();
|
|
||||||
backupReplicaPolicyConfiguration.setGroupName("foo");
|
|
||||||
|
|
||||||
ReplicatedPolicyConfiguration replicatedPolicyConfiguration = (ReplicatedPolicyConfiguration) liveServer.getServer().getConfiguration().getHAPolicyConfiguration();
|
|
||||||
replicatedPolicyConfiguration.setGroupName("foo");
|
|
||||||
|
|
||||||
Configuration secondBackupConfig = backupConfig.copy();
|
|
||||||
TransportConfiguration tc = secondBackupConfig.getAcceptorConfigurations().iterator().next();
|
|
||||||
TestableServer secondBackupServer = createTestableServer(secondBackupConfig);
|
|
||||||
tc.getParams().put("serverId", "2");
|
|
||||||
secondBackupConfig.setBindingsDirectory(getBindingsDir(1, true)).setJournalDirectory(getJournalDir(1, true)).setPagingDirectory(getPageDir(1, true)).setLargeMessagesDirectory(getLargeMessagesDir(1, true)).setSecurityEnabled(false);
|
|
||||||
ReplicaPolicyConfiguration replicaPolicyConfiguration = (ReplicaPolicyConfiguration) secondBackupConfig.getHAPolicyConfiguration();
|
|
||||||
replicaPolicyConfiguration.setGroupName("foo");
|
|
||||||
waitForRemoteBackupSynchronization(backupServer.getServer());
|
|
||||||
|
|
||||||
secondBackupServer.start();
|
|
||||||
Thread.sleep(5000);
|
|
||||||
backupServer.stop();
|
|
||||||
waitForSync(secondBackupServer.getServer());
|
|
||||||
waitForRemoteBackupSynchronization(secondBackupServer.getServer());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(timeout = 120000)
|
@Test(timeout = 120000)
|
||||||
/*
|
/*
|
||||||
* default maxSavedReplicatedJournalsSize is 2, this means the backup will fall back to replicated only twice, after this
|
* default maxSavedReplicatedJournalsSize is 2, this means the backup will fall back to replicated only twice, after this
|
||||||
@ -261,12 +213,6 @@ public class ReplicatedFailoverTest extends FailoverTest {
|
|||||||
} else {
|
} else {
|
||||||
super.setupHAPolicyConfiguration();
|
super.setupHAPolicyConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isExtraBackupGroupNameReplicates) {
|
|
||||||
((ReplicatedPolicyConfiguration) liveConfig.getHAPolicyConfiguration()).setGroupName("foo");
|
|
||||||
((ReplicaPolicyConfiguration) backupConfig.getHAPolicyConfiguration()).setGroupName("foo");
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -128,6 +128,8 @@ public class ReplicatedMultipleServerFailoverExtraBackupsTest extends Replicated
|
|||||||
|
|
||||||
for (TestableServer testableServer : toCrash) {
|
for (TestableServer testableServer : toCrash) {
|
||||||
testableServer.crash().await(10, TimeUnit.SECONDS);
|
testableServer.crash().await(10, TimeUnit.SECONDS);
|
||||||
|
//if we dont stop the server it tries to replicate again and the test becomes non deterministic
|
||||||
|
testableServer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert.assertTrue(failoverHappened.await(10, TimeUnit.SECONDS));
|
Assert.assertTrue(failoverHappened.await(10, TimeUnit.SECONDS));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user