/** * @param node Node. * @param payload Payload. * @param procFromNioThread If {@code true} message is processed from NIO thread. * @return Response future. */ public IgniteInternalFuture<List<IgniteIoTestMessage>> sendIoTest( ClusterNode node, byte[] payload, boolean procFromNioThread ) { long id = ioTestId.getAndIncrement(); IoTestFuture fut = new IoTestFuture(id, 1); IgniteIoTestMessage msg = new IgniteIoTestMessage(id, true, payload); msg.processFromNioThread(procFromNioThread); ioTestMap().put(id, fut); try { sendToGridTopic(node, GridTopic.TOPIC_IO_TEST, msg, GridIoPolicy.SYSTEM_POOL); } catch (IgniteCheckedException e) { ioTestMap().remove(msg.id()); return new GridFinishedFuture(e); } return fut; }
/** * */ void onResponse(IgniteIoTestMessage res) { boolean complete; synchronized (this) { ress.add(res); complete = cntr == ress.size(); } if (complete) onDone(ress); }
@Override public void onMessage(UUID nodeId, Object msg, byte plc) { ClusterNode node = ctx.discovery().node(nodeId); if (node == null) return; IgniteIoTestMessage msg0 = (IgniteIoTestMessage)msg; msg0.senderNodeId(nodeId); if (msg0.request()) { IgniteIoTestMessage res = new IgniteIoTestMessage(msg0.id(), false, null); res.flags(msg0.flags()); res.onRequestProcessed(); res.copyDataFromRequest(msg0); try { sendToGridTopic(node, GridTopic.TOPIC_IO_TEST, res, GridIoPolicy.SYSTEM_POOL); } catch (IgniteCheckedException e) { U.error(log, "Failed to send IO test response [msg=" + msg0 + "]", e); } } else { IoTestFuture fut = ioTestMap().get(msg0.id()); msg0.onResponseProcessed(); if (fut == null) U.warn(log, "Failed to find IO test future [msg=" + msg0 + ']'); else fut.onResponse(msg0); } } });
/** * @param node Node. * @param payload Payload. * @param procFromNioThread If {@code true} message is processed from NIO thread. * @return Response future. */ public IgniteInternalFuture<List<IgniteIoTestMessage>> sendIoTest( ClusterNode node, byte[] payload, boolean procFromNioThread ) { long id = ioTestId.getAndIncrement(); IoTestFuture fut = new IoTestFuture(id, 1); IgniteIoTestMessage msg = new IgniteIoTestMessage(id, true, payload); msg.processFromNioThread(procFromNioThread); ioTestMap().put(id, fut); try { sendToGridTopic(node, GridTopic.TOPIC_IO_TEST, msg, GridIoPolicy.SYSTEM_POOL); } catch (IgniteCheckedException e) { ioTestMap().remove(msg.id()); return new GridFinishedFuture(e); } return fut; }
/** * @param nodes Nodes. * @param payload Payload. * @param procFromNioThread If {@code true} message is processed from NIO thread. * @return Response future. */ public IgniteInternalFuture sendIoTest(List<ClusterNode> nodes, byte[] payload, boolean procFromNioThread) { long id = ioTestId.getAndIncrement(); IoTestFuture fut = new IoTestFuture(id, nodes.size()); IgniteIoTestMessage msg = new IgniteIoTestMessage(id, true, payload); msg.processFromNioThread(procFromNioThread); ioTestMap().put(id, fut); for (int i = 0; i < nodes.size(); i++) { ClusterNode node = nodes.get(i); try { sendToGridTopic(node, GridTopic.TOPIC_IO_TEST, msg, GridIoPolicy.SYSTEM_POOL); } catch (IgniteCheckedException e) { ioTestMap().remove(msg.id()); return new GridFinishedFuture(e); } } return fut; }
/** * */ void onResponse(IgniteIoTestMessage res) { boolean complete; synchronized (this) { ress.add(res); complete = cntr == ress.size(); } if (complete) onDone(ress); }
@Override public void onMessage(UUID nodeId, Object msg, byte plc) { ClusterNode node = ctx.discovery().node(nodeId); if (node == null) return; IgniteIoTestMessage msg0 = (IgniteIoTestMessage)msg; msg0.senderNodeId(nodeId); if (msg0.request()) { IgniteIoTestMessage res = new IgniteIoTestMessage(msg0.id(), false, null); res.flags(msg0.flags()); res.onRequestProcessed(); res.copyDataFromRequest(msg0); try { sendToGridTopic(node, GridTopic.TOPIC_IO_TEST, res, GridIoPolicy.SYSTEM_POOL); } catch (IgniteCheckedException e) { U.error(log, "Failed to send IO test response [msg=" + msg0 + "]", e); } } else { IoTestFuture fut = ioTestMap().get(msg0.id()); msg0.onResponseProcessed(); if (fut == null) U.warn(log, "Failed to find IO test future [msg=" + msg0 + ']'); else fut.onResponse(msg0); } } });
/** * @param nodes Nodes. * @param payload Payload. * @param procFromNioThread If {@code true} message is processed from NIO thread. * @return Response future. */ public IgniteInternalFuture sendIoTest(List<ClusterNode> nodes, byte[] payload, boolean procFromNioThread) { long id = ioTestId.getAndIncrement(); IoTestFuture fut = new IoTestFuture(id, nodes.size()); IgniteIoTestMessage msg = new IgniteIoTestMessage(id, true, payload); msg.processFromNioThread(procFromNioThread); ioTestMap().put(id, fut); for (int i = 0; i < nodes.size(); i++) { ClusterNode node = nodes.get(i); try { sendToGridTopic(node, GridTopic.TOPIC_IO_TEST, msg, GridIoPolicy.SYSTEM_POOL); } catch (IgniteCheckedException e) { ioTestMap().remove(msg.id()); return new GridFinishedFuture(e); } } return fut; }