Today we deserialize and handle all responses from remote clusters on the transport thread. Some of these responses can be sizeable, or require nontrivial work to handle, so we need to move this work to different threads. https://github.com/elastic/elasticsearch/pull/97922 introduces a facility for doing so, and forks some work, but in that PR we could not decide whether to handle CCS-related responses on the `SEARCH` or `SEARCH_COORDINATION` pool. In order to make progress we left this work on the transport worker for now, but we think this is a bug and this computation should be forked elsewhere. Opening this issue to track that followup work.

Once it's decided where to run this work, here's the only bit that needs changing:

https://github.com/elastic/elasticsearch/blob/f4e3113ad00541f084b69664c6476c8fcf737386/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java#L470-L471

server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java
return IndicesOptions.strictSingleIndexNoExpandForbidClosed();
                    }
                });
            } catch (Exception e) {
                throw new IllegalArgumentException(
                    "Failed to resolve wait_for_checkpoints target ["
                        + target
                        + "]. Configured target "
                        + "must resolve to a single open index.",
                    e
                );
            }
            String index = resolved.getName();
            IndexMetadata indexMetadata = clusterState.metadata().index(index);
            if (searchedIndices.contains(index) == false) {
                throw new IllegalArgumentException(
                    "Target configured with wait_for_checkpoints must be a concrete index resolved in "
                        + "this search. Target ["
                        + target
                        + "] is not a concrete index resolved in this search."
                );
            } else if (indexMetadata == null) {
                throw new IllegalArgumentException("Cannot find index configured for wait_for_checkpoints parameter [" + index + "].");
            } else if (indexMetadata.getNumberOfShards() != checkpointsProvided) {
                throw new IllegalArgumentException(
                    "Target configured with wait_for_checkpoints must search the same number of shards as "
                        + "checkpoints provided. ["
                        + checkpointsProvided
                        + "] checkpoints provided. Target ["
                        + target