blob: 33f3b6df190c146c08ce8e69b90dd87d828ed0d6 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.internal.cache;
import com.gemstone.gemfire.cache.*;
import com.gemstone.gemfire.cache.util.BridgeServer;
import com.gemstone.gemfire.distributed.*;
import com.gemstone.gemfire.distributed.internal.*;
import com.gemstone.gemfire.internal.AvailablePort.Keeper;
import com.gemstone.gemfire.internal.AvailablePortHelper;
import dunit.*;
import java.io.*;
import java.util.*;
/**
* Tests the GridAdvisor
*
* @author darrel
* @since 5.7
*/
public class GridAdvisorDUnitTest extends DistributedTestCase {
public GridAdvisorDUnitTest(String name) {
super(name);
}
//////// Test Methods
/**
* Tests 2 controllers and 2 bridge servers
*/
public void test2by2() throws Exception {
disconnectAllFromDS();
Host host = Host.getHost(0);
VM vm0 = host.getVM(0);
VM vm1 = host.getVM(1);
VM vm2 = host.getVM(2);
VM vm3 = host.getVM(3);
List<Keeper> freeTCPPorts = AvailablePortHelper.getRandomAvailableTCPPortKeepers(6);
final Keeper keeper1 = freeTCPPorts.get(0);
final int port1 = keeper1.getPort();
final Keeper keeper2 = freeTCPPorts.get(1);
final int port2 = keeper2.getPort();
final Keeper bsKeeper1 = freeTCPPorts.get(2);
final int bsPort1 = bsKeeper1.getPort();
final Keeper bsKeeper2 = freeTCPPorts.get(3);
final int bsPort2 = bsKeeper2.getPort();
final Keeper bsKeeper3 = freeTCPPorts.get(4);
final int bsPort3 = bsKeeper3.getPort();
final Keeper bsKeeper4 = freeTCPPorts.get(5);
final int bsPort4 = bsKeeper4.getPort();
final String host0 = getServerHostName(host);
final String locators = host0 + "[" + port1 + "]" + ","
+ host0 + "[" + port2 + "]";
final Properties dsProps = new Properties();
dsProps.setProperty("locators", locators);
dsProps.setProperty("mcast-port", "0");
dsProps.setProperty("log-level", getDUnitLogLevel());
dsProps.setProperty(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "false");
keeper1.release();
vm0.invoke(new SerializableRunnable("Start locator on " + port1) {
public void run() {
File logFile = new File(getUniqueName() + "-locator" + port1
+ ".log");
try {
Locator.startLocatorAndDS(port1, logFile, null, dsProps, true, true, null);
} catch (IOException ex) {
fail("While starting locator on port " + port1, ex);
}
}
});
//try { Thread.currentThread().sleep(4000); } catch (InterruptedException ie) { }
keeper2.release();
vm3.invoke(new SerializableRunnable("Start locators on " + port2) {
public void run() {
File logFile = new File(getUniqueName() + "-locator" +
port2 + ".log");
try {
Locator.startLocatorAndDS(port2, logFile, null, dsProps, true, true, "locator2HNFC");
} catch (IOException ex) {
fail("While starting locator on port " + port2, ex);
}
}
});
SerializableRunnable connect =
new SerializableRunnable("Connect to " + locators) {
public void run() {
Properties props = new Properties();
props.setProperty("mcast-port", "0");
props.setProperty("locators", locators);
dsProps.setProperty("log-level", getDUnitLogLevel());
CacheFactory.create(DistributedSystem.connect(props));
}
};
vm1.invoke(connect);
vm2.invoke(connect);
SerializableRunnable startBS1 =
new SerializableRunnable("start bridgeServer on " + bsPort1) {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
BridgeServer bs = c.addBridgeServer();
bs.setPort(bsPort1);
bs.setGroups(new String[] {"bs1Group1", "bs1Group2"});
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
};
SerializableRunnable startBS3 =
new SerializableRunnable("start bridgeServer on " + bsPort3) {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
BridgeServer bs = c.addBridgeServer();
bs.setPort(bsPort3);
bs.setGroups(new String[] {"bs3Group1", "bs3Group2"});
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
};
bsKeeper1.release();
vm1.invoke(startBS1);
bsKeeper3.release();
vm1.invoke(startBS3);
bsKeeper2.release();
vm2.invoke(new SerializableRunnable("start bridgeServer on " + bsPort2) {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
BridgeServer bs = c.addBridgeServer();
bs.setPort(bsPort2);
bs.setGroups(new String[] {"bs2Group1", "bs2Group2"});
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
});
bsKeeper4.release();
vm2.invoke(new SerializableRunnable("start bridgeServer on " + bsPort4) {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
BridgeServer bs = c.addBridgeServer();
bs.setPort(bsPort4);
bs.setGroups(new String[] {"bs4Group1", "bs4Group2"});
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
});
// verify that locators know about each other
vm0.invoke(new SerializableRunnable("Verify other locator on " + port2) {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(1, others.size());
{
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(0);
assertEquals(port2, cp.getPort());
assertEquals("locator2HNFC", cp.getHost());
}
others = ca.fetchBridgeServers();
assertEquals(4, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort1) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs3Group1", "bs3Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs4Group1", "bs4Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
vm3.invoke(new SerializableRunnable("Verify other locator on " + port1) {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(1, others.size());
{
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(0);
assertEquals(port1, cp.getPort());
}
others = ca.fetchBridgeServers();
assertEquals(4, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort1) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs3Group1", "bs3Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs4Group1", "bs4Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
vm1.invoke(new SerializableRunnable("Verify bridge server view on " + bsPort1 + " and on " + bsPort3) {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
for (int i=0; i < bslist.size(); i++) {
DistributionAdvisee advisee = (DistributionAdvisee)bslist.get(i);
BridgeServerAdvisor bsa = (BridgeServerAdvisor)advisee.getDistributionAdvisor();
List others = bsa.fetchBridgeServers();
getLogWriter().info("found these bridgeservers in " + advisee + ": " + others);
assertEquals(3, others.size());
others = bsa.fetchControllers();
assertEquals(2, others.size());
for (int j=0; j < others.size(); j++) {
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(j);
if (cp.getPort() == port1) {
// ok
} else if (cp.getPort() == port2) {
assertEquals("locator2HNFC", cp.getHost());
// ok
} else {
fail("unexpected port " + cp.getPort() + " in " + cp);
}
}
}
}
});
vm2.invoke(new SerializableRunnable("Verify bridge server view on " + bsPort2 + " and on " + bsPort4) {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
for (int i=0; i < bslist.size(); i++) {
DistributionAdvisee advisee = (DistributionAdvisee)bslist.get(i);
BridgeServerAdvisor bsa = (BridgeServerAdvisor)advisee.getDistributionAdvisor();
List others = bsa.fetchBridgeServers();
getLogWriter().info("found these bridgeservers in " + advisee + ": " + others);
assertEquals(3, others.size());
others = bsa.fetchControllers();
assertEquals(2, others.size());
for (int j=0; j < others.size(); j++) {
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(j);
if (cp.getPort() == port1) {
// ok
} else if (cp.getPort() == port2) {
assertEquals("locator2HNFC", cp.getHost());
// ok
} else {
fail("unexpected port " + cp.getPort() + " in " + cp);
}
}
}
}
});
SerializableRunnable stopBS =
new SerializableRunnable("stop bridge server") {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
BridgeServer bs = (BridgeServer)bslist.get(0);
bs.stop();
}
};
vm1.invoke(stopBS);
// now check to see if everyone else noticed him going away
vm0.invoke(new SerializableRunnable("Verify other locator on " + port2) {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(1, others.size());
{
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(0);
assertEquals(port2, cp.getPort());
assertEquals("locator2HNFC", cp.getHost());
}
others = ca.fetchBridgeServers();
assertEquals(3, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs3Group1", "bs3Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs4Group1", "bs4Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
vm3.invoke(new SerializableRunnable("Verify other locator on " + port1) {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(1, others.size());
{
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(0);
assertEquals(port1, cp.getPort());
}
others = ca.fetchBridgeServers();
assertEquals(3, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs3Group1", "bs3Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs4Group1", "bs4Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
SerializableRunnable disconnect =
new SerializableRunnable("Disconnect from " + locators) {
public void run() {
Properties props = new Properties();
props.setProperty("mcast-port", "0");
props.setProperty("locators", locators);
DistributedSystem.connect(props).disconnect();
}
};
SerializableRunnable stopLocator =
new SerializableRunnable("Stop locator") {
public void run() {
assertTrue(Locator.hasLocator());
Locator.getLocator().stop();
assertFalse(Locator.hasLocator());
}
};
vm0.invoke(stopLocator);
// now make sure everyone else saw the locator go away
vm3.invoke(new SerializableRunnable("Verify locator stopped ") {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(0, others.size());
}
});
vm2.invoke(new SerializableRunnable("Verify bridge server saw locator stop") {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
for (int i=0; i < bslist.size(); i++) {
DistributionAdvisee advisee = (DistributionAdvisee)bslist.get(i);
BridgeServerAdvisor bsa = (BridgeServerAdvisor)advisee.getDistributionAdvisor();
List others = bsa.fetchControllers();
assertEquals(1, others.size());
for (int j=0; j < others.size(); j++) {
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(j);
if (cp.getPort() == port2) {
assertEquals("locator2HNFC", cp.getHost());
// ok
} else {
fail("unexpected port " + cp.getPort() + " in " + cp);
}
}
}
}
});
vm1.invoke(new SerializableRunnable("Verify bridge server saw locator stop") {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
for (int i=0; i < bslist.size(); i++) {
DistributionAdvisee advisee = (DistributionAdvisee)bslist.get(i);
if (i == 0) {
// skip this one since it is stopped
continue;
}
BridgeServerAdvisor bsa = (BridgeServerAdvisor)advisee.getDistributionAdvisor();
List others = bsa.fetchControllers();
assertEquals(1, others.size());
for (int j=0; j < others.size(); j++) {
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(j);
if (cp.getPort() == port2) {
assertEquals("locator2HNFC", cp.getHost());
// ok
} else {
fail("unexpected port " + cp.getPort() + " in " + cp);
}
}
}
}
});
SerializableRunnable restartBS =
new SerializableRunnable("restart bridge server") {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
BridgeServer bs = (BridgeServer)bslist.get(0);
bs.setHostnameForClients("nameForClients");
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
};
// restart bridge server 1 and see if controller sees it
vm1.invoke(restartBS);
vm3.invoke(new SerializableRunnable("Verify bridge server restart ") {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
assertEquals(0, ca.fetchControllers().size());
List others = ca.fetchBridgeServers();
assertEquals(4, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort1) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
assertEquals("nameForClients", bsp.getHost());
} else if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
assertFalse(bsp.getHost().equals("nameForClients"));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs3Group1", "bs3Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs4Group1", "bs4Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
vm1.invoke(disconnect);
vm2.invoke(disconnect);
// now make sure controller saw all bridge servers stop
vm3.invoke(new SerializableRunnable("Verify locator stopped ") {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
assertEquals(0, ca.fetchControllers().size());
assertEquals(0, ca.fetchBridgeServers().size());
}
});
vm3.invoke(stopLocator);
}
public void test2by2usingGroups() throws Exception {
disconnectAllFromDS();
Host host = Host.getHost(0);
VM vm0 = host.getVM(0);
VM vm1 = host.getVM(1);
VM vm2 = host.getVM(2);
VM vm3 = host.getVM(3);
List<Keeper> freeTCPPorts = AvailablePortHelper.getRandomAvailableTCPPortKeepers(6);
final Keeper keeper1 = freeTCPPorts.get(0);
final int port1 = keeper1.getPort();
final Keeper keeper2 = freeTCPPorts.get(1);
final int port2 = keeper2.getPort();
final Keeper bsKeeper1 = freeTCPPorts.get(2);
final int bsPort1 = bsKeeper1.getPort();
final Keeper bsKeeper2 = freeTCPPorts.get(3);
final int bsPort2 = bsKeeper2.getPort();
final Keeper bsKeeper3 = freeTCPPorts.get(4);
final int bsPort3 = bsKeeper3.getPort();
final Keeper bsKeeper4 = freeTCPPorts.get(5);
final int bsPort4 = bsKeeper4.getPort();
final String host0 = getServerHostName(host);
final String locators = host0 + "[" + port1 + "]" + ","
+ host0 + "[" + port2 + "]";
final Properties dsProps = new Properties();
dsProps.setProperty("locators", locators);
dsProps.setProperty("mcast-port", "0");
dsProps.setProperty("log-level", getDUnitLogLevel());
dsProps.setProperty(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "false");
keeper1.release();
vm0.invoke(new SerializableRunnable("Start locators on " + port1) {
public void run() {
File logFile = new File(getUniqueName() + "-locator" + port1
+ ".log");
try {
Locator.startLocatorAndDS(port1, logFile, null, dsProps, true, true, null);
} catch (IOException ex) {
fail("While starting locator on port " + port1, ex);
}
}
});
//try { Thread.currentThread().sleep(4000); } catch (InterruptedException ie) { }
keeper2.release();
vm3.invoke(new SerializableRunnable("Start locators on " + port2) {
public void run() {
File logFile = new File(getUniqueName() + "-locator" +
port2 + ".log");
try {
Locator.startLocatorAndDS(port2, logFile, null, dsProps, true, true, "locator2HNFC");
} catch (IOException ex) {
fail("While starting locator on port " + port2, ex);
}
}
});
vm1.invoke(new SerializableRunnable("Connect to " + locators) {
public void run() {
Properties props = new Properties();
props.setProperty("mcast-port", "0");
props.setProperty("locators", locators);
props.setProperty("groups", "bs1Group1, bs1Group2");
props.setProperty("log-level", getDUnitLogLevel());
CacheFactory.create(DistributedSystem.connect(props));
}
});
vm2.invoke(new SerializableRunnable("Connect to " + locators) {
public void run() {
Properties props = new Properties();
props.setProperty("mcast-port", "0");
props.setProperty("locators", locators);
props.setProperty("groups", "bs2Group1, bs2Group2");
props.setProperty("log-level", getDUnitLogLevel());
CacheFactory.create(DistributedSystem.connect(props));
}
});
SerializableRunnable startBS1 =
new SerializableRunnable("start bridgeServer on " + bsPort1) {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
BridgeServer bs = c.addBridgeServer();
bs.setPort(bsPort1);
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
};
SerializableRunnable startBS3 =
new SerializableRunnable("start bridgeServer on " + bsPort3) {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
BridgeServer bs = c.addBridgeServer();
bs.setPort(bsPort3);
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
};
bsKeeper1.release();
vm1.invoke(startBS1);
bsKeeper3.release();
vm1.invoke(startBS3);
bsKeeper2.release();
vm2.invoke(new SerializableRunnable("start bridgeServer on " + bsPort2) {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
BridgeServer bs = c.addBridgeServer();
bs.setPort(bsPort2);
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
});
bsKeeper4.release();
vm2.invoke(new SerializableRunnable("start bridgeServer on " + bsPort4) {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
BridgeServer bs = c.addBridgeServer();
bs.setPort(bsPort4);
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
});
// verify that locators know about each other
vm0.invoke(new SerializableRunnable("Verify other locator on " + port2) {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(1, others.size());
{
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(0);
assertEquals(port2, cp.getPort());
assertEquals("locator2HNFC", cp.getHost());
}
others = ca.fetchBridgeServers();
assertEquals(4, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort1) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
vm3.invoke(new SerializableRunnable("Verify other locator on " + port1) {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(1, others.size());
{
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(0);
assertEquals(port1, cp.getPort());
}
others = ca.fetchBridgeServers();
assertEquals(4, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort1) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
vm1.invoke(new SerializableRunnable("Verify bridge server view on " + bsPort1 + " and on " + bsPort3) {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
for (int i=0; i < bslist.size(); i++) {
DistributionAdvisee advisee = (DistributionAdvisee)bslist.get(i);
BridgeServerAdvisor bsa = (BridgeServerAdvisor)advisee.getDistributionAdvisor();
List others = bsa.fetchBridgeServers();
getLogWriter().info("found these bridgeservers in " + advisee + ": " + others);
assertEquals(3, others.size());
others = bsa.fetchControllers();
assertEquals(2, others.size());
for (int j=0; j < others.size(); j++) {
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(j);
if (cp.getPort() == port1) {
// ok
} else if (cp.getPort() == port2) {
assertEquals("locator2HNFC", cp.getHost());
// ok
} else {
fail("unexpected port " + cp.getPort() + " in " + cp);
}
}
}
}
});
vm2.invoke(new SerializableRunnable("Verify bridge server view on " + bsPort2 + " and on " + bsPort4) {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
for (int i=0; i < bslist.size(); i++) {
DistributionAdvisee advisee = (DistributionAdvisee)bslist.get(i);
BridgeServerAdvisor bsa = (BridgeServerAdvisor)advisee.getDistributionAdvisor();
List others = bsa.fetchBridgeServers();
getLogWriter().info("found these bridgeservers in " + advisee + ": " + others);
assertEquals(3, others.size());
others = bsa.fetchControllers();
assertEquals(2, others.size());
for (int j=0; j < others.size(); j++) {
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(j);
if (cp.getPort() == port1) {
// ok
} else if (cp.getPort() == port2) {
assertEquals("locator2HNFC", cp.getHost());
// ok
} else {
fail("unexpected port " + cp.getPort() + " in " + cp);
}
}
}
}
});
SerializableRunnable stopBS =
new SerializableRunnable("stop bridge server") {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
BridgeServer bs = (BridgeServer)bslist.get(0);
bs.stop();
}
};
vm1.invoke(stopBS);
// now check to see if everyone else noticed him going away
vm0.invoke(new SerializableRunnable("Verify other locator on " + port2) {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(1, others.size());
{
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(0);
assertEquals(port2, cp.getPort());
assertEquals("locator2HNFC", cp.getHost());
}
others = ca.fetchBridgeServers();
assertEquals(3, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
vm3.invoke(new SerializableRunnable("Verify other locator on " + port1) {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(1, others.size());
{
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(0);
assertEquals(port1, cp.getPort());
}
others = ca.fetchBridgeServers();
assertEquals(3, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
SerializableRunnable disconnect =
new SerializableRunnable("Disconnect from " + locators) {
public void run() {
InternalDistributedSystem.getAnyInstance().disconnect();
}
};
SerializableRunnable stopLocator =
new SerializableRunnable("Stop locator") {
public void run() {
assertTrue(Locator.hasLocator());
Locator.getLocator().stop();
assertFalse(Locator.hasLocator());
}
};
vm0.invoke(stopLocator);
// now make sure everyone else saw the locator go away
vm3.invoke(new SerializableRunnable("Verify locator stopped ") {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
List others = ca.fetchControllers();
assertEquals(0, others.size());
}
});
vm2.invoke(new SerializableRunnable("Verify bridge server saw locator stop") {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
for (int i=0; i < bslist.size(); i++) {
DistributionAdvisee advisee = (DistributionAdvisee)bslist.get(i);
BridgeServerAdvisor bsa = (BridgeServerAdvisor)advisee.getDistributionAdvisor();
List others = bsa.fetchControllers();
assertEquals(1, others.size());
for (int j=0; j < others.size(); j++) {
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(j);
if (cp.getPort() == port2) {
assertEquals("locator2HNFC", cp.getHost());
// ok
} else {
fail("unexpected port " + cp.getPort() + " in " + cp);
}
}
}
}
});
vm1.invoke(new SerializableRunnable("Verify bridge server saw locator stop") {
public void run() {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
for (int i=0; i < bslist.size(); i++) {
DistributionAdvisee advisee = (DistributionAdvisee)bslist.get(i);
if (i == 0) {
// skip this one since it is stopped
continue;
}
BridgeServerAdvisor bsa = (BridgeServerAdvisor)advisee.getDistributionAdvisor();
List others = bsa.fetchControllers();
assertEquals(1, others.size());
for (int j=0; j < others.size(); j++) {
ControllerAdvisor.ControllerProfile cp =
(ControllerAdvisor.ControllerProfile)others.get(j);
if (cp.getPort() == port2) {
assertEquals("locator2HNFC", cp.getHost());
// ok
} else {
fail("unexpected port " + cp.getPort() + " in " + cp);
}
}
}
}
});
SerializableRunnable restartBS =
new SerializableRunnable("restart bridge server") {
public void run() {
try {
Cache c = CacheFactory.getAnyInstance();
List bslist = c.getBridgeServers();
assertEquals(2, bslist.size());
BridgeServer bs = (BridgeServer)bslist.get(0);
bs.setHostnameForClients("nameForClients");
bs.start();
} catch (IOException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
}
};
// restart bridge server 1 and see if controller sees it
vm1.invoke(restartBS);
vm3.invoke(new SerializableRunnable("Verify bridge server restart ") {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
assertEquals(0, ca.fetchControllers().size());
List others = ca.fetchBridgeServers();
assertEquals(4, others.size());
for (int j=0; j < others.size(); j++) {
BridgeServerAdvisor.BridgeServerProfile bsp =
(BridgeServerAdvisor.BridgeServerProfile)others.get(j);
if (bsp.getPort() == bsPort1) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
assertEquals("nameForClients", bsp.getHost());
} else if (bsp.getPort() == bsPort2) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
assertFalse(bsp.getHost().equals("nameForClients"));
} else if (bsp.getPort() == bsPort3) {
assertEquals(Arrays.asList(new String[] {"bs1Group1", "bs1Group2"}),
Arrays.asList(bsp.getGroups()));
} else if (bsp.getPort() == bsPort4) {
assertEquals(Arrays.asList(new String[] {"bs2Group1", "bs2Group2"}),
Arrays.asList(bsp.getGroups()));
} else {
fail("unexpected port " + bsp.getPort() + " in " + bsp);
}
}
}
});
vm1.invoke(disconnect);
vm2.invoke(disconnect);
// now make sure controller saw all bridge servers stop
vm3.invoke(new SerializableRunnable("Verify locator stopped ") {
public void run() {
assertTrue(Locator.hasLocator());
InternalLocator l = (InternalLocator)Locator.getLocator();
DistributionAdvisee advisee = l.getServerLocatorAdvisee();
ControllerAdvisor ca = (ControllerAdvisor)advisee.getDistributionAdvisor();
assertEquals(0, ca.fetchControllers().size());
assertEquals(0, ca.fetchBridgeServers().size());
}
});
vm3.invoke(stopLocator);
}
}