mirror of https://github.com/apache/activemq.git
resolve: https://issues.apache.org/activemq/browse/AMQ-2305 - think the correct fix is to have the masterBroker stop but not propagate the stop through the filter chain. if it does not stop then it will have a bunch of failures on sync with the slave. the issues is visible when a plugin is the next brokerfilter in the chain
git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@788757 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5313490304
commit
3d6034b7eb
|
@ -105,7 +105,6 @@ public class MasterBroker extends InsertableMutableBrokerFilter {
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public void stop() throws Exception {
|
public void stop() throws Exception {
|
||||||
super.stop();
|
|
||||||
stopProcessing();
|
stopProcessing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,27 +18,52 @@ package org.apache.activemq.broker.ft;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.apache.activemq.broker.BrokerPlugin;
|
||||||
|
import org.apache.activemq.broker.BrokerPluginSupport;
|
||||||
import org.apache.activemq.broker.BrokerService;
|
import org.apache.activemq.broker.BrokerService;
|
||||||
import org.apache.activemq.util.SocketProxy;
|
import org.apache.activemq.util.SocketProxy;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
public class MasterSlaveSlaveDieTest extends TestCase {
|
public class MasterSlaveSlaveDieTest extends TestCase {
|
||||||
|
|
||||||
|
private static final Log LOG = LogFactory.getLog(MasterSlaveSlaveDieTest.class);
|
||||||
|
|
||||||
|
private final AtomicBoolean pluginStopped = new AtomicBoolean(false);
|
||||||
|
class Plugin extends BrokerPluginSupport {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() throws Exception {
|
||||||
|
LOG.info("plugin start");
|
||||||
|
super.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() throws Exception {
|
||||||
|
LOG.info("plugin stop");
|
||||||
|
pluginStopped.set(true);
|
||||||
|
super.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
public void testSlaveDieMasterStays() throws Exception {
|
public void testSlaveDieMasterStays() throws Exception {
|
||||||
final BrokerService master = new BrokerService();
|
final BrokerService master = new BrokerService();
|
||||||
master.setBrokerName("master");
|
master.setBrokerName("master");
|
||||||
master.setPersistent(false);
|
master.setPersistent(false);
|
||||||
master.addConnector("tcp://localhost:0");
|
master.addConnector("tcp://localhost:0");
|
||||||
master.setWaitForSlave(true);
|
master.setWaitForSlave(true);
|
||||||
|
master.setPlugins(new BrokerPlugin[] { new Plugin() });
|
||||||
|
|
||||||
final BrokerService slave = new BrokerService();
|
final BrokerService slave = new BrokerService();
|
||||||
slave.setBrokerName("slave");
|
slave.setBrokerName("slave");
|
||||||
slave.setPersistent(false);
|
slave.setPersistent(false);
|
||||||
URI masterUri = master.getTransportConnectors().get(0).getConnectUri();
|
URI masterUri = master.getTransportConnectors().get(0).getConnectUri();
|
||||||
SocketProxy masterProxy = new SocketProxy(masterUri);
|
//SocketProxy masterProxy = new SocketProxy(masterUri);
|
||||||
slave.setMasterConnectorURI(masterProxy.getUrl().toString());
|
slave.setMasterConnectorURI(masterUri.toString());
|
||||||
|
|
||||||
slave.setUseJmx(false);
|
slave.setUseJmx(false);
|
||||||
slave.getManagementContext().setCreateConnector(false);
|
slave.getManagementContext().setCreateConnector(false);
|
||||||
|
@ -57,14 +82,12 @@ public class MasterSlaveSlaveDieTest extends TestCase {
|
||||||
|
|
||||||
master.waitUntilStarted();
|
master.waitUntilStarted();
|
||||||
|
|
||||||
// kill socket to master
|
LOG.info("killing slave..");
|
||||||
masterProxy.close();
|
slave.stop();
|
||||||
|
slave.waitUntilStopped();
|
||||||
// in case a stop is too controlled an exit
|
|
||||||
//slave.stop();
|
|
||||||
Thread.sleep(5000);
|
|
||||||
|
|
||||||
assertTrue(master.isStarted());
|
|
||||||
|
|
||||||
|
LOG.info("checking master still alive");
|
||||||
|
assertTrue("master is still alive", master.isStarted());
|
||||||
|
assertFalse("plugin was not yet stopped", pluginStopped.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue