Skip to content

Commit 3ee0174

Browse files
committed
Register GetDiscoveredNodesAction with TransportService
1 parent 0a5a8a8 commit 3ee0174

File tree

2 files changed

+108
-87
lines changed

2 files changed

+108
-87
lines changed

server/src/main/java/org/elasticsearch/action/admin/cluster/bootstrap/TransportGetDiscoveredNodesAction.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222
import org.elasticsearch.ElasticsearchTimeoutException;
2323
import org.elasticsearch.action.ActionListener;
2424
import org.elasticsearch.action.support.ActionFilters;
25+
import org.elasticsearch.action.support.HandledTransportAction;
2526
import org.elasticsearch.action.support.TransportAction;
2627
import org.elasticsearch.cluster.coordination.Coordinator;
2728
import org.elasticsearch.cluster.node.DiscoveryNode;
2829
import org.elasticsearch.common.Nullable;
2930
import org.elasticsearch.common.inject.Inject;
31+
import org.elasticsearch.common.io.stream.Writeable.Reader;
3032
import org.elasticsearch.common.lease.Releasable;
3133
import org.elasticsearch.common.settings.Settings;
3234
import org.elasticsearch.common.util.concurrent.ListenableFuture;
@@ -40,9 +42,10 @@
4042
import java.util.Set;
4143
import java.util.concurrent.CompletableFuture;
4244
import java.util.concurrent.ExecutionException;
45+
import java.util.concurrent.atomic.AtomicBoolean;
4346
import java.util.function.Consumer;
4447

45-
public class TransportGetDiscoveredNodesAction extends TransportAction<GetDiscoveredNodesRequest, GetDiscoveredNodesResponse> {
48+
public class TransportGetDiscoveredNodesAction extends HandledTransportAction<GetDiscoveredNodesRequest, GetDiscoveredNodesResponse> {
4649

4750
@Nullable // TODO make this not nullable
4851
private final Coordinator coordinator;
@@ -51,7 +54,9 @@ public class TransportGetDiscoveredNodesAction extends TransportAction<GetDiscov
5154
@Inject
5255
public TransportGetDiscoveredNodesAction(Settings settings, ActionFilters actionFilters, TransportService transportService,
5356
Discovery discovery) {
54-
super(settings, GetDiscoveredNodesAction.NAME, actionFilters, transportService.getTaskManager());
57+
super(settings, GetDiscoveredNodesAction.NAME, transportService, actionFilters,
58+
(Reader<GetDiscoveredNodesRequest>) GetDiscoveredNodesRequest::new);
59+
5560
this.transportService = transportService;
5661
if (discovery instanceof Coordinator) {
5762
coordinator = (Coordinator) discovery;
@@ -71,6 +76,7 @@ protected void doExecute(Task task, GetDiscoveredNodesRequest request, ActionLis
7176
if (localNode.isMasterNode() == false) {
7277
throw new ElasticsearchException("this node is not master-eligible");
7378
}
79+
final AtomicBoolean listenerNotified = new AtomicBoolean();
7480
final ListenableFuture<GetDiscoveredNodesResponse> listenableFuture = new ListenableFuture<>();
7581
final ThreadPool threadPool = transportService.getThreadPool();
7682
listenableFuture.addListener(listener,
@@ -84,7 +90,7 @@ public void accept(Iterable<DiscoveryNode> nodes) {
8490
nodesSet.add(localNode);
8591
nodes.forEach(nodesSet::add);
8692
logger.trace("discovered {}", nodesSet);
87-
if (nodesSet.size() >= request.getMinimumNodeCount()) {
93+
if (nodesSet.size() >= request.getMinimumNodeCount() && listenerNotified.compareAndSet(false, true)) {
8894
listenableFuture.onResponse(new GetDiscoveredNodesResponse(nodesSet));
8995
}
9096
}
@@ -101,7 +107,9 @@ public String toString() {
101107
threadPool.schedule(request.getTimeout(), Names.GENERIC, new Runnable() {
102108
@Override
103109
public void run() {
104-
listenableFuture.onFailure(new ElasticsearchTimeoutException("timed out while waiting for " + request));
110+
if (listenerNotified.compareAndSet(false, true)) {
111+
listenableFuture.onFailure(new ElasticsearchTimeoutException("timed out while waiting for " + request));
112+
}
105113
}
106114

107115
@Override

0 commit comments

Comments
 (0)