use of io.crate.executor.transport.NodeStatsRequest in project crate by crate.
the class NodeStatsIterator method getNodeStatsContextFromRemoteState.
private CompletableFuture<List<NodeStatsContext>> getNodeStatsContextFromRemoteState(Set<ColumnIdent> toCollect) {
final CompletableFuture<List<NodeStatsContext>> nodeStatsContextsFuture = new CompletableFuture<>();
final List<NodeStatsContext> rows = Collections.synchronizedList(new ArrayList<NodeStatsContext>(nodes.size()));
final AtomicInteger remainingNodesToCollect = new AtomicInteger(nodes.size());
for (final DiscoveryNode node : nodes) {
final String nodeId = node.getId();
final NodeStatsRequest request = new NodeStatsRequest(toCollect);
transportStatTablesAction.execute(nodeId, request, new ActionListener<NodeStatsResponse>() {
@Override
public void onResponse(NodeStatsResponse response) {
rows.add(response.nodeStatsContext());
if (remainingNodesToCollect.decrementAndGet() == 0) {
nodeStatsContextsFuture.complete(rows);
}
}
@Override
public void onFailure(Throwable t) {
if (t instanceof ReceiveTimeoutTransportException) {
rows.add(new NodeStatsContext(nodeId, node.name()));
if (remainingNodesToCollect.decrementAndGet() == 0) {
nodeStatsContextsFuture.complete(rows);
}
} else {
nodeStatsContextsFuture.completeExceptionally(t);
}
}
}, TimeValue.timeValueMillis(3000L));
}
return nodeStatsContextsFuture;
}
Aggregations