@@ -380,20 +380,23 @@ private void startComputeOnRemoteClusters(
380380 var linkExchangeListeners = ActionListener .releaseAfter (computeListener .acquireAvoid (), exchangeSource .addEmptySink ());
381381 try (RefCountingListener refs = new RefCountingListener (linkExchangeListeners )) {
382382 for (RemoteCluster cluster : clusters ) {
383+ final String clusterAlias = cluster .clusterAlias ();
384+ final boolean shouldSkipOnFailure = computeListener .shouldIgnoreRemoteErrors (clusterAlias );
385+ final var exchangeListener = refs .acquire ();
383386 ExchangeService .openExchange (
384387 transportService ,
385388 cluster .connection ,
386389 sessionId ,
387390 queryPragmas .exchangeBufferSize (),
388391 esqlExecutor ,
389- refs . acquire (). delegateFailureAndWrap (( l , unused ) -> {
392+ ActionListener . wrap ( unused -> {
390393 var remoteSink = exchangeService .newRemoteSink (rootTask , sessionId , transportService , cluster .connection );
391394 exchangeSource .addRemoteSink (remoteSink , queryPragmas .concurrentExchangeClients ());
392395 var remotePlan = new RemoteClusterPlan (plan , cluster .concreteIndices , cluster .originalIndices );
393- var clusterRequest = new ClusterComputeRequest (cluster . clusterAlias , sessionId , configuration , remotePlan );
396+ var clusterRequest = new ClusterComputeRequest (clusterAlias , sessionId , configuration , remotePlan );
394397 var clusterListener = ActionListener .runBefore (
395- computeListener .acquireCompute (cluster . clusterAlias () ),
396- () -> l .onResponse (null )
398+ computeListener .acquireCompute (clusterAlias ),
399+ () -> exchangeListener .onResponse (null )
397400 );
398401 transportService .sendChildRequest (
399402 cluster .connection ,
@@ -403,6 +406,15 @@ private void startComputeOnRemoteClusters(
403406 TransportRequestOptions .EMPTY ,
404407 new ActionListenerResponseHandler <>(clusterListener , ComputeResponse ::new , esqlExecutor )
405408 );
409+ }, e -> {
410+ if (shouldSkipOnFailure ) {
411+ // TODO: drop this in final patch
412+ LOGGER .error ("Marking failed cluster {} as partial: {}" , clusterAlias , e );
413+ computeListener .markAsPartial (clusterAlias , e );
414+ exchangeListener .onResponse (null );
415+ } else {
416+ exchangeListener .onFailure (e );
417+ }
406418 })
407419 );
408420 }
0 commit comments