ARTEMIS-1737 Fixing semantic of ServerControl.forceFailover This closes #1940
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/91c0452d Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/91c0452d Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/91c0452d Branch: refs/heads/master Commit: 91c0452d601729585cd75e4d74c473b92f3bd1af Parents: dc096f9 Author: Clebert Suconic <clebertsuco...@apache.org> Authored: Thu Mar 8 16:24:38 2018 -0500 Committer: Clebert Suconic <clebertsuco...@apache.org> Committed: Thu Mar 8 23:42:29 2018 -0500 ---------------------------------------------------------------------- .../impl/ActiveMQServerControlImpl.java | 2 +- .../artemis/core/server/ActiveMQServer.java | 2 +- .../core/server/impl/ActiveMQServerImpl.java | 6 +- .../impl/SharedNothingLiveActivation.java | 2 +- .../failover/ReplicatedFailoverTest.java | 63 ++++++++++++++------ 5 files changed, 50 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/91c0452d/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java index fe7792b..72e23a7 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java @@ -2611,7 +2611,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active @Override public void run() { try { - server.fail(true); + server.stop(true, true); } catch (Throwable e) { logger.warn(e.getMessage(), e); } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/91c0452d/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java index cc53e99..78ebbb7 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java @@ -432,7 +432,7 @@ public interface ActiveMQServer extends ServiceComponent { void fail(boolean failoverOnServerShutdown) throws Exception; - void backToBackup(boolean failoverOnServerShutdown) throws Exception; + void stop(boolean failoverOnServerShutdown, boolean isExit) throws Exception; Queue updateQueue(String name, RoutingType routingType, http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/91c0452d/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java index ea485e3..d2ae179 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java @@ -912,14 +912,10 @@ public class ActiveMQServerImpl implements ActiveMQServer { @Override public final void fail(boolean failoverOnServerShutdown) throws Exception { - stop(failoverOnServerShutdown, false, false, true); - } - - @Override - public final void backToBackup(boolean failoverOnServerShutdown) throws Exception { stop(failoverOnServerShutdown, false, false, false); } + @Override public final void stop(boolean failoverOnServerShutdown, boolean isExit) throws Exception { stop(failoverOnServerShutdown, false, false, isExit); } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/91c0452d/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/SharedNothingLiveActivation.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/SharedNothingLiveActivation.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/SharedNothingLiveActivation.java index eaba72d..2e289b5 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/SharedNothingLiveActivation.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/SharedNothingLiveActivation.java @@ -187,7 +187,7 @@ public class SharedNothingLiveActivation extends LiveActivation { clusterConnection.addClusterTopologyListener(listener1); if (listener1.waitForBackup()) { //if we have to many backups kept or are not configured to restart just stop, otherwise restart as a backup - activeMQServer.backToBackup(true); + activeMQServer.fail(true); ActiveMQServerLogger.LOGGER.restartingReplicatedBackupAfterFailback(); // activeMQServer.moveServerData(replicatedPolicy.getReplicaPolicy().getMaxSavedReplicatedJournalsSize()); activeMQServer.setHAPolicy(replicatedPolicy.getReplicaPolicy()); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/91c0452d/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ReplicatedFailoverTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ReplicatedFailoverTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ReplicatedFailoverTest.java index 6639044..814eb8b 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ReplicatedFailoverTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ReplicatedFailoverTest.java @@ -16,9 +16,15 @@ */ package org.apache.activemq.artemis.tests.integration.cluster.failover; +import java.io.IOException; +import java.io.OutputStream; +import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.concurrent.TimeUnit; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; import org.apache.activemq.artemis.api.core.client.ClientSession; import org.apache.activemq.artemis.component.WebServerComponent; import org.apache.activemq.artemis.core.config.ha.ReplicaPolicyConfiguration; @@ -27,6 +33,7 @@ import org.apache.activemq.artemis.core.server.ServiceComponent; import org.apache.activemq.artemis.core.server.cluster.ha.ReplicatedPolicy; import org.apache.activemq.artemis.dto.AppDTO; import org.apache.activemq.artemis.dto.WebServerDTO; +import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestRule; @@ -132,23 +139,45 @@ public class ReplicatedFailoverTest extends FailoverTest { @Test public void testReplicatedFailbackBackupFromLiveBackToBackup() throws Exception { - WebServerDTO wdto = new WebServerDTO(); - AppDTO appDTO = new AppDTO(); - appDTO.war = "console.war"; - appDTO.url = "console"; - wdto.apps = new ArrayList<AppDTO>(); - wdto.apps.add(appDTO); - wdto.bind = "http://localhost:0"; - wdto.path = "console"; - WebServerComponent webServerComponent = new WebServerComponent(); - webServerComponent.configure(wdto, ".", "."); - webServerComponent.start(); - - backupServer.getServer().addExternalComponent(webServerComponent); - // this is called when backup servers go from live back to backup - backupServer.getServer().backToBackup(true); - assertTrue(backupServer.getServer().getExternalComponents().get(0).isStarted()); - ((ServiceComponent)(backupServer.getServer().getExternalComponents().get(0))).stop(true); + + InetSocketAddress address = new InetSocketAddress("127.0.0.1", 8787); + HttpServer httpServer = HttpServer.create(address, 100); + httpServer.start(); + + try { + httpServer.createContext("/", new HttpHandler() { + @Override + public void handle(HttpExchange t) throws IOException { + String response = "<html><body><b>This is a unit test</b></body></html>"; + t.sendResponseHeaders(200, response.length()); + OutputStream os = t.getResponseBody(); + os.write(response.getBytes()); + os.close(); + } + }); + WebServerDTO wdto = new WebServerDTO(); + AppDTO appDTO = new AppDTO(); + appDTO.war = "console.war"; + appDTO.url = "console"; + wdto.apps = new ArrayList<AppDTO>(); + wdto.apps.add(appDTO); + wdto.bind = "http://localhost:0"; + wdto.path = "console"; + WebServerComponent webServerComponent = new WebServerComponent(); + webServerComponent.configure(wdto, ".", "."); + webServerComponent.start(); + + backupServer.getServer().getNetworkHealthCheck().parseURIList("http://localhost:8787"); + Assert.assertTrue(backupServer.getServer().getNetworkHealthCheck().isStarted()); + backupServer.getServer().addExternalComponent(webServerComponent); + // this is called when backup servers go from live back to backup + backupServer.getServer().fail(true); + Assert.assertTrue(backupServer.getServer().getNetworkHealthCheck().isStarted()); + Assert.assertTrue(backupServer.getServer().getExternalComponents().get(0).isStarted()); + ((ServiceComponent) (backupServer.getServer().getExternalComponents().get(0))).stop(true); + } finally { + httpServer.stop(0); + } } @Override