@Override public void run() { try { System.out.println("Stopping server"); latch.countDown(); serverToStop.fail(false); } catch (Exception e) { e.printStackTrace(); } } };
private void killBackup() { try { if (backupProcess != null) { backupProcess.destroy(); } } catch (Throwable ignored) { } backupProcess = null; if (inProcessBackup != null) { try { inProcessBackup.getServer().fail(false); } catch (Throwable ignored) { ignored.printStackTrace(); } inProcessBackup = null; } }
@Override public void scaleDown(String connector) throws Exception { checkStarted(); clearIO(); HAPolicy haPolicy = server.getHAPolicy(); if (haPolicy instanceof LiveOnlyPolicy) { LiveOnlyPolicy liveOnlyPolicy = (LiveOnlyPolicy) haPolicy; if (liveOnlyPolicy.getScaleDownPolicy() == null) { liveOnlyPolicy.setScaleDownPolicy(new ScaleDownPolicy()); } liveOnlyPolicy.getScaleDownPolicy().setEnabled(true); if (connector != null) { liveOnlyPolicy.getScaleDownPolicy().getConnectors().add(0, connector); } server.fail(true); } }
public static void crash(ActiveMQServer server, ClientSession... sessions) throws Exception { final CountDownLatch latch = new CountDownLatch(sessions.length); class MyListener implements SessionFailureListener { @Override public void connectionFailed(final ActiveMQException me, boolean failedOver) { latch.countDown(); } @Override public void connectionFailed(final ActiveMQException me, boolean failedOver, String scaleDownTargetNodeID) { connectionFailed(me, failedOver); } @Override public void beforeReconnect(ActiveMQException exception) { System.out.println("MyListener.beforeReconnect"); } } for (ClientSession session : sessions) { session.addFailureListener(new MyListener()); } ClusterManager clusterManager = server.getClusterManager(); clusterManager.clear(); server.fail(true); // Wait to be informed of failure boolean ok = latch.await(10000, TimeUnit.MILLISECONDS); Assert.assertTrue(ok); }
public static void crashAndWaitForFailure(ActiveMQServer server, ClientSession... sessions) throws Exception { CountDownLatch latch = new CountDownLatch(sessions.length); for (ClientSession session : sessions) { CountDownSessionFailureListener listener = new CountDownSessionFailureListener(latch, session); session.addFailureListener(listener); } ClusterManager clusterManager = server.getClusterManager(); clusterManager.flushExecutor(); clusterManager.clear(); Assert.assertTrue("server should be running!", server.isStarted()); server.fail(true); if (sessions.length > 0) { // Wait to be informed of failure boolean ok = latch.await(10000, TimeUnit.MILLISECONDS); Assert.assertTrue("Failed to stop the server! Latch count is " + latch.getCount() + " out of " + sessions.length, ok); } }
@Override public CountDownLatch crash(boolean failover, boolean waitFailure, ClientSession... sessions) throws Exception { CountDownLatch latch = new CountDownLatch(sessions.length); CountDownSessionFailureListener[] listeners = new CountDownSessionFailureListener[sessions.length]; for (int i = 0; i < sessions.length; i++) { listeners[i] = new CountDownSessionFailureListener(latch, sessions[i]); sessions[i].addFailureListener(listeners[i]); } ClusterManager clusterManager = server.getClusterManager(); clusterManager.flushExecutor(); clusterManager.clear(); Assert.assertTrue("server should be running!", server.isStarted()); server.fail(failover); if (waitFailure) { // Wait to be informed of failure boolean ok = latch.await(10000, TimeUnit.MILLISECONDS); Assert.assertTrue("Failed to stop the server! Latch count is " + latch.getCount() + " out of " + sessions.length, ok); } return latch; }
liveServer.fail(true); Assert.assertTrue(failedOver.await(10, TimeUnit.SECONDS));
server = createServer(true, false); server.start(); server.fail(false);
server.fail(false);
backupServer.getServer().addExternalComponent(webServerComponent); backupServer.getServer().fail(true); Assert.assertTrue(backupServer.getServer().getNetworkHealthCheck().isStarted()); Assert.assertTrue(backupServer.getServer().getExternalComponents().get(0).isStarted());
@Test public void testRetainedMessagesAreCorrectlyFormedAfterRestart() throws Exception { String clientId = "testMqtt"; String address = "testAddress"; String payload = "This is a test message"; // Create address getServer().addAddressInfo(new AddressInfo(SimpleString.toSimpleString(address), RoutingType.MULTICAST)); // Send MQTT Retain Message Topic[] mqttTopic = new Topic[]{new Topic(address, QoS.AT_LEAST_ONCE)}; MQTT mqtt = createMQTTConnection(); mqtt.setClientId(clientId); BlockingConnection connection1 = mqtt.blockingConnection(); connection1.connect(); connection1.publish(address, payload.getBytes(), QoS.AT_LEAST_ONCE, true); getServer().fail(false); getServer().start(); waitForServerToStart(getServer()); MQTT mqtt2 = createMQTTConnection(); mqtt2.setClientId(clientId + "2"); BlockingConnection connection2 = mqtt2.blockingConnection(); connection2.connect(); connection2.subscribe(mqttTopic); Message message = connection2.receive(5000, TimeUnit.MILLISECONDS); assertEquals(payload, new String(message.getPayload())); }
server0.fail(true);
server0.fail(true);
server0.fail(true);
@Test(timeout = 60000) public void testFailBothRestartLive() throws Exception { ServerLocator locator = getServerLocator(); locator.setReconnectAttempts(-1).setRetryInterval(10); sf = (ClientSessionFactoryInternal)locator.createSessionFactory(); ClientSession session = createSession(sf, true, true); session.createQueue(FailoverTestBase.ADDRESS, RoutingType.MULTICAST, FailoverTestBase.ADDRESS, null, true); ClientProducer producer = session.createProducer(FailoverTestBase.ADDRESS); sendMessagesSomeDurable(session, producer); crash(session); ClientConsumer consumer = session.createConsumer(FailoverTestBase.ADDRESS); session.start(); receiveDurableMessages(consumer); backupServer.getServer().fail(true); liveServer.start(); consumer.close(); producer.close(); producer = session.createProducer(FailoverTestBase.ADDRESS); sendMessagesSomeDurable(session, producer); sf.close(); Assert.assertEquals(0, sf.numSessions()); Assert.assertEquals(0, sf.numConnections()); }
server.fail(false); server.start();
server.fail(false); server.start();
server.fail(false); server.start();
servers[0].fail(true);
servers[0].fail(true);