use of com.yahoo.messagebus.routing.Route in project vespa by vespa-engine.
the class ClientThreadingTestCase method requireThatClientIsThreadSafe.
@Test
@Ignore
public void requireThatClientIsThreadSafe() throws Exception {
final LocalWire wire = new LocalWire();
final Client client = new Client(wire);
final Server server = new Server(wire);
final List<Callable<Boolean>> lst = new LinkedList<>();
final Route route = Route.parse(server.session.getConnectionSpec());
for (int i = 0; i < NUM_THREADS; ++i) {
lst.add(new RequestTask(client, route));
}
final ExecutorService executor = Executors.newFixedThreadPool(NUM_THREADS);
for (final Future<Boolean> res : executor.invokeAll(lst, 60, TimeUnit.SECONDS)) {
assertThat(res.get(), is(true));
}
assertThat(client.close(), is(true));
assertThat(server.close(), is(true));
}
use of com.yahoo.messagebus.routing.Route in project vespa by vespa-engine.
the class LocalNetworkTest method requireThatLocalNetworkCanSendAndReceive.
@Test
public void requireThatLocalNetworkCanSendAndReceive() throws InterruptedException {
final LocalWire wire = new LocalWire();
final Server serverA = new Server(wire);
final SourceSession source = serverA.newSourceSession();
final Server serverB = new Server(wire);
final IntermediateSession intermediate = serverB.newIntermediateSession();
final Server serverC = new Server(wire);
final DestinationSession destination = serverC.newDestinationSession();
Message msg = new SimpleMessage("foo");
msg.setRoute(new Route().addHop(Hop.parse(intermediate.getConnectionSpec())).addHop(Hop.parse(destination.getConnectionSpec())));
assertThat(source.send(msg).isAccepted(), is(true));
msg = serverB.messages.poll(60, TimeUnit.SECONDS);
assertThat(msg, instanceOf(SimpleMessage.class));
assertThat(((SimpleMessage) msg).getValue(), is("foo"));
intermediate.forward(msg);
msg = serverC.messages.poll(60, TimeUnit.SECONDS);
assertThat(msg, instanceOf(SimpleMessage.class));
assertThat(((SimpleMessage) msg).getValue(), is("foo"));
Reply reply = new SimpleReply("bar");
reply.swapState(msg);
destination.reply(reply);
reply = serverB.replies.poll(60, TimeUnit.SECONDS);
assertThat(reply, instanceOf(SimpleReply.class));
assertThat(((SimpleReply) reply).getValue(), is("bar"));
intermediate.forward(reply);
reply = serverA.replies.poll(60, TimeUnit.SECONDS);
assertThat(reply, instanceOf(SimpleReply.class));
assertThat(((SimpleReply) reply).getValue(), is("bar"));
serverA.mbus.destroy();
serverB.mbus.destroy();
serverC.mbus.destroy();
}
use of com.yahoo.messagebus.routing.Route in project vespa by vespa-engine.
the class LocalNetworkTest method requireThatBlockingSendTimeOutInSendQ.
@Test
public void requireThatBlockingSendTimeOutInSendQ() throws InterruptedException {
final LocalWire wire = new LocalWire();
final Server serverA = new Server(wire);
final SourceSession source = serverA.newSourceSession(new StaticThrottlePolicy().setMaxPendingCount(1));
final Server serverB = new Server(wire);
final IntermediateSession intermediate = serverB.newIntermediateSession();
final Server serverC = new Server(wire);
final DestinationSession destination = serverC.newDestinationSession();
Message msg = new SimpleMessage("foo");
msg.setRoute(new Route().addHop(Hop.parse(intermediate.getConnectionSpec())).addHop(Hop.parse(destination.getConnectionSpec())));
assertThat(source.sendBlocking(msg).isAccepted(), is(true));
long start = SystemTimer.INSTANCE.milliTime();
Message msg2 = new SimpleMessage("foo2");
msg2.setRoute(new Route().addHop(Hop.parse(intermediate.getConnectionSpec())).addHop(Hop.parse(destination.getConnectionSpec())));
long TIMEOUT = 1000;
msg2.setTimeRemaining(TIMEOUT);
Result res = source.sendBlocking(msg2);
assertThat(res.isAccepted(), is(false));
assertEquals(ErrorCode.TIMEOUT, res.getError().getCode());
assertTrue(res.getError().getMessage().endsWith("Timed out in sendQ"));
long end = SystemTimer.INSTANCE.milliTime();
assertThat(end, greaterThanOrEqualTo(start + TIMEOUT));
assertThat(end, lessThan(start + 5 * TIMEOUT));
msg = serverB.messages.poll(60, TimeUnit.SECONDS);
assertThat(msg, instanceOf(SimpleMessage.class));
assertThat(((SimpleMessage) msg).getValue(), is("foo"));
intermediate.forward(msg);
msg = serverC.messages.poll(60, TimeUnit.SECONDS);
assertThat(msg, instanceOf(SimpleMessage.class));
assertThat(((SimpleMessage) msg).getValue(), is("foo"));
Reply reply = new SimpleReply("bar");
reply.swapState(msg);
destination.reply(reply);
reply = serverB.replies.poll(60, TimeUnit.SECONDS);
assertThat(reply, instanceOf(SimpleReply.class));
assertThat(((SimpleReply) reply).getValue(), is("bar"));
intermediate.forward(reply);
reply = serverA.replies.poll(60, TimeUnit.SECONDS);
assertEquals(ErrorCode.TIMEOUT, reply.getError(0).getCode());
assertTrue(reply.getError(0).getMessage().endsWith("Timed out in sendQ"));
reply = serverA.replies.poll(60, TimeUnit.SECONDS);
assertThat(reply, instanceOf(SimpleReply.class));
assertThat(((SimpleReply) reply).getValue(), is("bar"));
serverA.mbus.destroy();
serverB.mbus.destroy();
serverC.mbus.destroy();
}
use of com.yahoo.messagebus.routing.Route in project vespa by vespa-engine.
the class RPCSend method send.
@Override
public final void send(RoutingNode recipient, Version version, byte[] payload, long timeRemaining) {
SendContext ctx = new SendContext(recipient, timeRemaining);
RPCServiceAddress address = (RPCServiceAddress) recipient.getServiceAddress();
Message msg = recipient.getMessage();
Route route = new Route(recipient.getRoute());
Hop hop = route.removeHop(0);
Request req = encodeRequest(version, route, address, msg, timeRemaining, payload, ctx.trace.getLevel());
if (ctx.trace.shouldTrace(TraceLevel.SEND_RECEIVE)) {
ctx.trace.trace(TraceLevel.SEND_RECEIVE, "Sending message (version " + version + ") from " + clientIdent + " to '" + address.getServiceName() + "' with " + ctx.timeout + " seconds timeout.");
}
if (hop.getIgnoreResult()) {
address.getTarget().getJRTTarget().invokeVoid(req);
if (ctx.trace.shouldTrace(TraceLevel.SEND_RECEIVE)) {
ctx.trace.trace(TraceLevel.SEND_RECEIVE, "Not waiting for a reply from '" + address.getServiceName() + "'.");
}
Reply reply = new EmptyReply();
reply.getTrace().swap(ctx.trace);
net.getOwner().deliverReply(reply, recipient);
} else {
req.setContext(ctx);
address.getTarget().getJRTTarget().invokeAsync(req, ctx.timeout, this);
}
// allow garbage collection of request parameters
req.discardParameters();
}
use of com.yahoo.messagebus.routing.Route in project vespa by vespa-engine.
the class CustomPolicyFactory method parseRoutes.
public static List<Route> parseRoutes(String routes) {
List<Route> ret = new ArrayList<Route>();
if (routes != null && !routes.isEmpty()) {
for (String route : routes.split(",")) {
Route r = Route.parse(route);
assert (route.equals(r.toString()));
ret.add(r);
}
}
return ret;
}
Aggregations