use of org.apache.storm.messaging.IContext in project storm by apache.
the class NettyTest method doTestLoad.
private void doTestLoad(Map<String, Object> stormConf) throws Exception {
LOG.info("2 test load");
String reqMessage = "0123456789abcdefghijklmnopqrstuvwxyz";
IContext context = TransportFactory.makeContext(stormConf, null);
try {
AtomicReference<TaskMessage> response = new AtomicReference<>();
try (IConnection server = context.bind(null, 0, mkConnectionCallback(response::set), null);
IConnection client = context.connect(null, "localhost", server.getPort(), remoteBpStatus)) {
waitUntilReady(client, server);
byte[] messageBytes = reqMessage.getBytes(StandardCharsets.UTF_8);
send(client, taskId, messageBytes);
/*
* This test sends a broadcast to all connected clients from the server, so we need to wait until the server has registered
* the client as connected before sending load metrics.
*
* It's not enough to wait until the client reports that the channel is open, because the server event loop may not have
* finished running channelActive for the new channel. If we send metrics too early, the server will broadcast to no one.
*
* By waiting for the response here, we ensure that the client will be registered at the server before we send load metrics.
*/
waitForNotNull(response);
Map<Integer, Double> taskToLoad = new HashMap<>();
taskToLoad.put(1, 0.0);
taskToLoad.put(2, 1.0);
server.sendLoadMetrics(taskToLoad);
List<Integer> tasks = new ArrayList<>();
tasks.add(1);
tasks.add(2);
Testing.whileTimeout(Testing.TEST_TIMEOUT_MS, () -> client.getLoad(tasks).isEmpty(), sleep());
Map<Integer, Load> load = client.getLoad(tasks);
assertThat(load.get(1).getBoltLoad(), is(0.0));
assertThat(load.get(2).getBoltLoad(), is(1.0));
}
} finally {
context.term();
}
}
use of org.apache.storm.messaging.IContext in project storm by apache.
the class NettyTest method doTestServerAlwaysReconnects.
private void doTestServerAlwaysReconnects(Map<String, Object> stormConf) throws Exception {
LOG.info("6. test server always reconnects");
String reqMessage = "0123456789abcdefghijklmnopqrstuvwxyz";
IContext context = TransportFactory.makeContext(stormConf, null);
try {
AtomicReference<TaskMessage> response = new AtomicReference<>();
int port = Utils.getAvailablePort(6700);
try (IConnection client = context.connect(null, "localhost", port, remoteBpStatus)) {
byte[] messageBytes = reqMessage.getBytes(StandardCharsets.UTF_8);
send(client, taskId, messageBytes);
try (IConnection server = context.bind(null, port, mkConnectionCallback(response::set), null)) {
waitUntilReady(client, server);
send(client, taskId, messageBytes);
waitForNotNull(response);
TaskMessage responseMessage = response.get();
assertThat(responseMessage.task(), is(taskId));
assertThat(responseMessage.message(), is(messageBytes));
}
}
} finally {
context.term();
}
}
use of org.apache.storm.messaging.IContext in project storm by apache.
the class NettyTest method doTestBasic.
private void doTestBasic(Map<String, Object> stormConf) throws Exception {
LOG.info("1. Should send and receive a basic message");
String reqMessage = "0123456789abcdefghijklmnopqrstuvwxyz";
IContext context = TransportFactory.makeContext(stormConf, null);
try {
AtomicReference<TaskMessage> response = new AtomicReference<>();
try (IConnection server = context.bind(null, 0, mkConnectionCallback(response::set), null);
IConnection client = context.connect(null, "localhost", server.getPort(), remoteBpStatus)) {
waitUntilReady(client, server);
byte[] messageBytes = reqMessage.getBytes(StandardCharsets.UTF_8);
send(client, taskId, messageBytes);
waitForNotNull(response);
TaskMessage responseMessage = response.get();
assertThat(responseMessage.task(), is(taskId));
assertThat(responseMessage.message(), is(messageBytes));
}
} finally {
context.term();
}
}
use of org.apache.storm.messaging.IContext in project storm by apache.
the class NettyTest method doTestBatch.
private void doTestBatch(Map<String, Object> stormConf) throws Exception {
int numMessages = 100_000;
LOG.info("Should send and receive many messages (testing with " + numMessages + " messages)");
ArrayList<TaskMessage> responses = new ArrayList<>();
AtomicInteger received = new AtomicInteger();
IContext context = TransportFactory.makeContext(stormConf, null);
try {
try (IConnection server = context.bind(null, 0, mkConnectionCallback((message) -> {
responses.add(message);
received.incrementAndGet();
}), null);
IConnection client = context.connect(null, "localhost", server.getPort(), remoteBpStatus)) {
waitUntilReady(client, server);
IntStream.range(1, numMessages).forEach(i -> send(client, taskId, String.valueOf(i).getBytes(StandardCharsets.UTF_8)));
Testing.whileTimeout(Testing.TEST_TIMEOUT_MS, () -> responses.size() < numMessages - 1, () -> {
LOG.info("{} of {} received", responses.size(), numMessages - 1);
sleep().run();
});
IntStream.range(1, numMessages).forEach(i -> {
assertThat(new String(responses.get(i - 1).message(), StandardCharsets.UTF_8), is(String.valueOf(i)));
});
}
} finally {
context.term();
}
}
use of org.apache.storm.messaging.IContext in project storm by apache.
the class NettyTest method doTestServerDelayed.
private void doTestServerDelayed(Map<String, Object> stormConf) throws Exception {
LOG.info("4. test server delayed");
String reqMessage = "0123456789abcdefghijklmnopqrstuvwxyz";
IContext context = TransportFactory.makeContext(stormConf, null);
try {
AtomicReference<TaskMessage> response = new AtomicReference<>();
int port = Utils.getAvailablePort(6700);
try (IConnection client = context.connect(null, "localhost", port, remoteBpStatus)) {
AtomicReference<IConnection> server = new AtomicReference<>();
try {
CompletableFuture<?> serverStart = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(100);
server.set(context.bind(null, port, mkConnectionCallback(response::set), null));
waitUntilReady(client, server.get());
} catch (Exception e) {
throw Utils.wrapInRuntime(e);
}
});
serverStart.get(Testing.TEST_TIMEOUT_MS, TimeUnit.MILLISECONDS);
byte[] messageBytes = reqMessage.getBytes(StandardCharsets.UTF_8);
send(client, taskId, messageBytes);
waitForNotNull(response);
TaskMessage responseMessage = response.get();
assertThat(responseMessage.task(), is(taskId));
assertThat(responseMessage.message(), is(messageBytes));
} finally {
if (server.get() != null) {
server.get().close();
}
}
}
} finally {
context.term();
}
}
Aggregations