use of org.apache.ignite.spi.communication.CommunicationSpi in project ignite by apache.
the class GridTcpCommunicationSpiAbstractTest method testSendToManyNodes.
/**
* {@inheritDoc}
*/
@Override
public void testSendToManyNodes() throws Exception {
super.testSendToManyNodes();
// Test idle clients remove.
for (CommunicationSpi spi : spis.values()) {
ConcurrentMap<UUID, GridCommunicationClient> clients = U.field(spi, "clients");
assertEquals(getSpiCount() - 1, clients.size());
clients.put(UUID.randomUUID(), F.first(clients.values()));
}
}
use of org.apache.ignite.spi.communication.CommunicationSpi in project ignite by apache.
the class GridTcpCommunicationSpiConcurrentConnectSelfTest method concurrentConnect.
/**
* @param threads Number of threads.
* @param msgPerThread Messages per thread.
* @param iters Number of iterations.
* @param sleep If {@code true} sleeps random time before starts send messages.
* @param load Run load threads flag.
* @throws Exception If failed.
*/
private void concurrentConnect(final int threads, final int msgPerThread, final int iters, final boolean sleep, boolean load) throws Exception {
log.info("Concurrent connect [threads=" + threads + ", msgPerThread=" + msgPerThread + ", iters=" + iters + ", load=" + load + ", sleep=" + sleep + ']');
final AtomicBoolean stop = new AtomicBoolean();
IgniteInternalFuture<?> loadFut = null;
if (load) {
loadFut = GridTestUtils.runMultiThreadedAsync(new Callable<Long>() {
@Override
public Long call() throws Exception {
long dummyRes = 0;
List<String> list = new ArrayList<>();
while (!stop.get()) {
for (int i = 0; i < 100; i++) {
String str = new String(new byte[i]);
list.add(str);
dummyRes += str.hashCode();
}
if (list.size() > 1000_000) {
list = new ArrayList<>();
System.gc();
}
}
return dummyRes;
}
}, 2, "test-load");
}
try {
for (int i = 0; i < iters; i++) {
log.info("Iteration: " + i);
final AtomicInteger msgId = new AtomicInteger();
final int expMsgs = threads * msgPerThread;
CountDownLatch latch = new CountDownLatch(expMsgs);
MessageListener lsnr = new MessageListener(latch);
createSpis(lsnr);
final AtomicInteger idx = new AtomicInteger();
try {
final Callable<Void> c = new Callable<Void>() {
@Override
public Void call() throws Exception {
int idx0 = idx.getAndIncrement();
Thread.currentThread().setName("Test thread [idx=" + idx0 + ", grid=" + (idx0 % 2) + ']');
CommunicationSpi<Message> spi = spis.get(idx0 % 2);
ClusterNode srcNode = nodes.get(idx0 % 2);
ClusterNode dstNode = nodes.get((idx0 + 1) % 2);
if (sleep) {
ThreadLocalRandom rnd = ThreadLocalRandom.current();
long millis = rnd.nextLong(10);
if (millis > 0)
Thread.sleep(millis);
}
for (int i = 0; i < msgPerThread; i++) spi.sendMessage(dstNode, new GridTestMessage(srcNode.id(), msgId.incrementAndGet(), 0));
return null;
}
};
List<Thread> threadsList = new ArrayList<>();
final AtomicBoolean fail = new AtomicBoolean();
final AtomicLong tId = new AtomicLong();
for (int t = 0; t < threads; t++) {
Thread t0 = new Thread(new Runnable() {
@Override
public void run() {
try {
c.call();
} catch (Throwable e) {
log.error("Unexpected error: " + e, e);
fail.set(true);
}
}
}) {
@Override
public long getId() {
// Override getId to use all connections.
return tId.getAndIncrement();
}
};
threadsList.add(t0);
t0.start();
}
for (Thread t0 : threadsList) t0.join();
assertTrue(latch.await(10, TimeUnit.SECONDS));
for (CommunicationSpi spi : spis) {
ConcurrentMap<UUID, GridCommunicationClient> clients = U.field(spi, "clients");
assertEquals(1, clients.size());
final GridNioServer srv = U.field(spi, "nioSrvr");
final int conns = pairedConnections ? 2 : 1;
GridTestUtils.waitForCondition(new GridAbsPredicate() {
@Override
public boolean apply() {
Collection sessions = U.field(srv, "sessions");
return sessions.size() == conns * connectionsPerNode;
}
}, 5000);
Collection sessions = U.field(srv, "sessions");
assertEquals(conns * connectionsPerNode, sessions.size());
}
assertEquals(expMsgs, lsnr.cntr.get());
} finally {
stopSpis();
}
}
} finally {
stop.set(true);
if (loadFut != null)
loadFut.get();
}
}
use of org.apache.ignite.spi.communication.CommunicationSpi in project ignite by apache.
the class GridTcpCommunicationSpiMultithreadedSelfTest method testPassThroughPerformance.
/**
* @throws Exception If failed.
*/
public void testPassThroughPerformance() throws Exception {
reject = true;
info(">>> Starting pass through performance test. <<<");
assertEquals("Invalid listener count", getSpiCount(), lsnrs.size());
final AtomicInteger cntr = new AtomicInteger();
final int msgCnt = 5000;
long start = System.currentTimeMillis();
IgniteInternalFuture<?> fut = multithreadedAsync(new Runnable() {
@Override
public void run() {
try {
ClusterNode from = nodes.get(0);
ClusterNode to = nodes.get(1);
CommunicationSpi<Message> spi = spis.get(from.id());
while (cntr.getAndIncrement() < msgCnt) {
GridTestMessage msg = new GridTestMessage(from.id(), msgId.getAndIncrement(), 0);
msg.payload(new byte[10 * 1024]);
spi.sendMessage(to, msg);
}
} catch (IgniteException e) {
fail("Unable to send message: " + e.getMessage());
}
}
}, 5, "message-sender");
fut.get();
info(">>> Sent all messages in " + (System.currentTimeMillis() - start) + " milliseconds");
assertEquals("Invalid count of messages was sent", msgCnt, msgId.get());
}
Aggregations