Fix RemoteClusterConnection close race (#45898)
Closing a `RemoteClusterConnection` concurrently with trying to connect could result in double invoking the listener. This fixes RemoteClusterConnectionTest#testCloseWhileConcurrentlyConnecting Closes #45845
This commit is contained in:
parent
8e66df9925
commit
46d9a575db
|
@ -368,8 +368,10 @@ final class RemoteClusterConnection implements TransportConnectionListener, Clos
|
|||
boolean runConnect = false;
|
||||
final ActionListener<Void> listener =
|
||||
ContextPreservingActionListener.wrapPreservingContext(connectListener, threadPool.getThreadContext());
|
||||
boolean closed;
|
||||
synchronized (mutex) {
|
||||
if (closed.get()) {
|
||||
closed = this.closed.get();
|
||||
if (closed) {
|
||||
assert listeners.isEmpty();
|
||||
} else {
|
||||
if (listeners.size() >= MAX_LISTENERS) {
|
||||
|
@ -382,7 +384,7 @@ final class RemoteClusterConnection implements TransportConnectionListener, Clos
|
|||
runConnect = listeners.size() == 1;
|
||||
}
|
||||
}
|
||||
if (closed.get()) {
|
||||
if (closed) {
|
||||
connectListener.onFailure(new AlreadyClosedException("connect handler is already closed"));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -655,7 +655,6 @@ public class RemoteClusterConnectionTests extends ESTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/45845")
|
||||
public void testCloseWhileConcurrentlyConnecting() throws IOException, InterruptedException, BrokenBarrierException {
|
||||
List<DiscoveryNode> knownNodes = new CopyOnWriteArrayList<>();
|
||||
try (MockTransportService seedTransport = startTransport("seed_node", knownNodes, Version.CURRENT);
|
||||
|
|
Loading…
Reference in New Issue