use of org.jgroups.protocols.relay.RELAY2 in project JGroups by belaban.
the class Relay2Test method testAddRelay2ToAnAlreadyConnectedChannel.
/**
* Test that RELAY2 can be added to an already connected channel.
*/
public void testAddRelay2ToAnAlreadyConnectedChannel() throws Exception {
// Create and connect a channel.
a = new JChannel();
a.connect(SFO_CLUSTER);
System.out.println("Channel " + a.getName() + " is connected. View: " + a.getView());
// Add RELAY2 protocol to the already connected channel.
RELAY2 relayToInject = createRELAY2(SFO);
// Util.setField(Util.getField(relayToInject.getClass(), "local_addr"), relayToInject, a.getAddress());
a.getProtocolStack().insertProtocolAtTop(relayToInject);
relayToInject.down(new Event(Event.SET_LOCAL_ADDRESS, a.getAddress()));
relayToInject.setProtocolStack(a.getProtocolStack());
relayToInject.configure();
relayToInject.handleView(a.getView());
// Check for RELAY2 presence
RELAY2 ar = a.getProtocolStack().findProtocol(RELAY2.class);
assert ar != null;
waitUntilRoute(SFO, true, 10000, 500, a);
assert !ar.printRoutes().equals("n/a (not site master)") : "This member should be site master";
Route route = getRoute(a, SFO);
System.out.println("Route at sfo to sfo: " + route);
assert route != null;
}
use of org.jgroups.protocols.relay.RELAY2 in project JGroups by belaban.
the class SizeTest method testRelay2Header.
public static void testRelay2Header() throws Exception {
Address dest = new SiteMaster("sfo");
RELAY2.Relay2Header hdr = new RELAY2.Relay2Header(RELAY2.Relay2Header.DATA, dest, null);
_testSize(hdr);
Address sender = new SiteUUID(UUID.randomUUID(), "dummy", "sfo");
hdr = new RELAY2.Relay2Header(RELAY2.Relay2Header.DATA, dest, sender);
_testSize(hdr);
}
use of org.jgroups.protocols.relay.RELAY2 in project JGroups by belaban.
the class Relay2RpcDispatcherTest method testNotificationAndRpcRelay2Transit.
/**
* Tests that notifications are routed to all sites.
*/
public void testNotificationAndRpcRelay2Transit() throws Exception {
a.connect(LON_CLUSTER);
b.connect(LON_CLUSTER);
rpca.start();
rpcb.start();
Util.waitUntilAllChannelsHaveSameView(30000, 1000, a, b);
x.connect(SFO_CLUSTER);
y.connect(SFO_CLUSTER);
rpcx.start();
rpcy.start();
Util.waitUntilAllChannelsHaveSameView(30000, 1000, x, y);
assert a.getView().size() == 2;
assert x.getView().size() == 2;
RELAY2 ar = a.getProtocolStack().findProtocol(RELAY2.class);
RELAY2 xr = x.getProtocolStack().findProtocol(RELAY2.class);
assert ar != null && xr != null;
JChannel a_bridge = null, x_bridge = null;
for (int i = 0; i < 20; i++) {
a_bridge = ar.getBridge(SFO);
x_bridge = xr.getBridge(LON);
if (a_bridge != null && x_bridge != null && a_bridge.getView().size() == 2 && x_bridge.getView().size() == 2)
break;
Util.sleep(500);
}
assert a_bridge != null && x_bridge != null;
System.out.println("A's bridge channel: " + a_bridge.getView());
System.out.println("X's bridge channel: " + x_bridge.getView());
assert a_bridge.getView().size() == 2 : "bridge view is " + a_bridge.getView();
assert x_bridge.getView().size() == 2 : "bridge view is " + x_bridge.getView();
Route route = getRoute(x, LON);
System.out.println("Route at sfo to lon: " + route);
assert route != null;
System.out.println("B: sending message 0 to the site master of SFO");
Address sm_sfo = new SiteMaster(SFO);
MethodCall call = new MethodCall(ServerObject.class.getMethod("foo"));
System.out.println("B: call foo method on A");
Object rsp = rpcb.callRemoteMethod(a.getAddress(), call, new RequestOptions(ResponseMode.GET_ALL, 5000));
System.out.println("RSP is: " + rsp);
System.out.println("B: call foo method on SFO master site");
rsp = rpcb.callRemoteMethod(sm_sfo, call, new RequestOptions(ResponseMode.GET_ALL, 15000));
System.out.println("RSP is: " + rsp);
System.out.println("B: call foo method on all members in site LON");
RspList<Integer> rsps = rpcb.callRemoteMethods(null, call, new RequestOptions(ResponseMode.GET_ALL, 5000));
System.out.println("RSPs are: \n" + rsps);
assert rsps.size() == 2;
assert rsps.containsKey(a.getAddress()) && rsps.containsKey(b.getAddress());
View bridge_view = xr.getBridgeView(BRIDGE_CLUSTER);
System.out.println("bridge_view = " + bridge_view);
route = getRoute(x, LON);
System.out.println("Route at sfo to lon: " + route);
assert route != null;
}
use of org.jgroups.protocols.relay.RELAY2 in project JGroups by belaban.
the class Relay2Test method waitUntilRoute.
protected void waitUntilRoute(String site_name, boolean present, long timeout, long interval, JChannel ch) throws Exception {
RELAY2 relay = ch.getProtocolStack().findProtocol(RELAY2.class);
if (relay == null)
throw new IllegalArgumentException("Protocol RELAY2 not found");
Route route = null;
long deadline = System.currentTimeMillis() + timeout;
while (System.currentTimeMillis() < deadline) {
route = relay.getRoute(site_name);
if ((route != null && present) || (route == null && !present))
break;
Util.sleep(interval);
}
assert (route != null && present) || (route == null && !present);
}
use of org.jgroups.protocols.relay.RELAY2 in project JGroups by belaban.
the class Relay2Test method waitForBridgeView.
protected void waitForBridgeView(int expected_size, long timeout, long interval, JChannel... channels) {
long deadline = System.currentTimeMillis() + timeout;
while (System.currentTimeMillis() < deadline) {
boolean views_correct = true;
for (JChannel ch : channels) {
RELAY2 relay = ch.getProtocolStack().findProtocol(RELAY2.class);
View bridge_view = relay.getBridgeView(BRIDGE_CLUSTER);
if (bridge_view == null || bridge_view.size() != expected_size) {
views_correct = false;
break;
}
}
if (views_correct)
break;
Util.sleep(interval);
}
System.out.println("Bridge views:\n");
for (JChannel ch : channels) {
RELAY2 relay = ch.getProtocolStack().findProtocol(RELAY2.class);
View bridge_view = relay.getBridgeView(BRIDGE_CLUSTER);
System.out.println(ch.getAddress() + ": " + bridge_view);
}
for (JChannel ch : channels) {
RELAY2 relay = ch.getProtocolStack().findProtocol(RELAY2.class);
View bridge_view = relay.getBridgeView(BRIDGE_CLUSTER);
assert bridge_view != null && bridge_view.size() == expected_size : ch.getAddress() + ": bridge view=" + bridge_view + ", expected=" + expected_size;
}
}
Aggregations