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/support/replication/TransportBroadcastReplicationAction.java
protected void shardExecute(Task task, Request request, ShardId shardId, ActionListener<ShardResponse> shardActionListener) {
        ShardRequest shardRequest = newShardRequest(request, shardId);
        shardRequest.setParentTask(clusterService.localNode().getId(), task.getId());
        client.executeLocally(replicatedBroadcastShardAction, shardRequest, shardActionListener);
    }
    /**
     * @return all shard ids the request should run on
     */
    protected List<ShardId> shards(Request request, ClusterState clusterState) {
        List<ShardId> shardIds = new ArrayList<>();
        String[] concreteIndices = indexNameExpressionResolver.concreteIndexNames(clusterState, request);
        for (String index : concreteIndices) {
            IndexMetadata indexMetadata = clusterState.metadata().getIndices().get(index);
            if (indexMetadata != null) {
                final IndexRoutingTable indexRoutingTable = clusterState.getRoutingTable().indicesRouting().get(index);
                for (int i = 0; i < indexRoutingTable.size(); i++) {
                    shardIds.add(indexRoutingTable.shard(i).shardId());
                }
            }
        }
        return shardIds;
    }
    protected abstract ShardResponse newShardResponse();
    protected abstract ShardRequest newShardRequest(Request request, ShardId shardId);
    private void finishAndNotifyListener(ActionListener<Response> listener, CopyOnWriteArrayList<ShardResponse> shardsResponses) {
        logger.trace("{}: got all shard responses", actionName);
        int successfulShards = 0;
        int failedShards = 0;
        int totalNumCopies = 0;
        List<DefaultShardOperationFailedException> shardFailures = null;