Tiny supportability nit: today we emit these log messages when adding a write block to an index:

```
[2022-03-22T19:43:26,897][INFO ][o.e.c.m.MetadataIndexStateService] [node_t1] adding block write to indices [[test-blocks/eLkrYpm_S3WNemfWpXrhPA]]
[2022-03-22T19:43:26,933][INFO ][o.e.c.m.MetadataIndexStateService] [node_t1] completed adding block write to indices [test-blocks]
```

This is kind of confusing, a `block write` sounds like we're writing a block of data. It's not clear that `write` is variable (we also say `block read`) or the name of a block setting. I think we should word this as `adding [index.blocks.write] block to indices` instead.
server/src/main/java/org/elasticsearch/cluster/metadata/MetadataIndexStateService.java
final ClusterState state,
            final Consumer<IndexResult> onResponse
        ) {
            final IndexMetadata indexMetadata = state.metadata().index(index);
            if (indexMetadata == null) {
                logger.debug("index {} has been blocked before closing and is now deleted, ignoring", index);
                onResponse.accept(new IndexResult(index));
                return;
            }
            final IndexRoutingTable indexRoutingTable = state.routingTable().index(index);
            if (indexRoutingTable == null || indexMetadata.getState() == IndexMetadata.State.CLOSE) {
                assert state.blocks().hasIndexBlock(index.getName(), INDEX_CLOSED_BLOCK);
                logger.debug("index {} has been blocked before closing and is already closed, ignoring", index);
                onResponse.accept(new IndexResult(index));
                return;
            }
            final AtomicArray<ShardResult> results = new AtomicArray<>(indexRoutingTable.size());
            final CountDown countDown = new CountDown(indexRoutingTable.size());
            for (int i = 0; i < indexRoutingTable.size(); i++) {
                IndexShardRoutingTable shardRoutingTable = indexRoutingTable.shard(i);
                final int shardId = shardRoutingTable.shardId().id();
                sendVerifyShardBeforeCloseRequest(shardRoutingTable, closingBlock, new NotifyOnceListener<>() {
                    @Override
                    public void innerOnResponse(final ReplicationResponse replicationResponse) {
                        ShardResult.Failure[] failures = Arrays.stream(replicationResponse.getShardInfo().getFailures())
                            .map(f -> new ShardResult.Failure(f.index(), f.shardId(), f.getCause(), f.nodeId()))
                            .toArray(ShardResult.Failure[]::new);
                        results.setOnce(shardId, new ShardResult(shardId, failures));
                        processIfFinished();
                    }