Today in a few places we create a `new CountDown(0)`. This is kind of trappy because it will never return `true` from `#countDown()` or `#fastForward()` which risks never completing whatever action needs completing unless the caller handles the empty case specially.

We should refactor the places that do this so that they all avoid creating an empty `CountDown`, instead just handling the fact that the action is already complete:

- [ ] `TransportIndicesShardStoresAction$AsyncShardStoresInfoFetches`
- [ ] `ClearScrollController`
- [ ] `TransportBroadcastReplicationAction#doExecute`
- [ ] `Realms#usageStats`

Once we've done that, we can forbid the creation of an empty `CountDown`.
server/src/main/java/org/elasticsearch/action/search/ClearScrollController.java
listener.onResponse(new ClearScrollResponse(succeeded, freedSearchContexts.get()));
        }
    }
    private void onFailedFreedContext(Throwable e, DiscoveryNode node) {
        logger.warn(() -> "Clear SC failed on node[" + node + "]", e);
        /*
         * We have to set the failure marker before we count down otherwise we can expose the failure marker before we have set it to a
         * racing thread successfully freeing a context. This would lead to that thread responding that the clear scroll succeeded.
         */
        hasFailed.set(true);
        if (expectedOps.countDown()) {
            listener.onResponse(new ClearScrollResponse(false, freedSearchContexts.get()));
        }
    }
    /**
     * Closes the given context id and reports the number of freed contexts via the listener
     */
    public static void closeContexts(
        DiscoveryNodes nodes,
        SearchTransportService searchTransportService,
        Collection<SearchContextIdForNode> contextIds,
        ActionListener<Integer> listener
    ) {
        final Set<String> clusters = contextIds.stream()
            .map(SearchContextIdForNode::getClusterAlias)
            .filter(clusterAlias -> Strings.isEmpty(clusterAlias) == false)
            .collect(Collectors.toSet());
        final StepListener<BiFunction<String, String, DiscoveryNode>> lookupListener = new StepListener<>();
        if (clusters.isEmpty()) {
            lookupListener.onResponse((cluster, nodeId) -> nodes.get(nodeId));