I caused this by back porting #91016 earlier ... looking into a fix now 

**Build scan:**
https://gradle-enterprise.elastic.co/s/dnpt2zu6hqcs2/tests/:server:internalClusterTest/org.elasticsearch.indices.state.ReopenWhileClosingIT/testReopenDuringCloseOnMultipleIndices

**Reproduction line:**
```
./gradlew ':server:internalClusterTest' --tests "org.elasticsearch.indices.state.ReopenWhileClosingIT.testReopenDuringCloseOnMultipleIndices" -Dtests.seed=5BA9D289491D3843 -Dtests.locale=ar-LB -Dtests.timezone=Etc/GMT-0 -Druntime.java=8
```

**Applicable branches:**
7.17

**Reproduces locally?:**
Yes

**Failure history:**
https://gradle-enterprise.elastic.co/scans/tests?tests.container=org.elasticsearch.indices.state.ReopenWhileClosingIT&tests.test=testReopenDuringCloseOnMultipleIndices

**Failure excerpt:**
```
java.lang.Exception: Test abandoned because suite timeout was reached.

  at __randomizedtesting.SeedInfo.seed([5BA9D289491D3843]:0)

```
server/src/internalClusterTest/java/org/elasticsearch/indices/state/ReopenWhileClosingIT.java
public void testReopenDuringCloseOnMultipleIndices() throws Exception {
        List<String> dataOnlyNodes = internalCluster().startDataOnlyNodes(randomIntBetween(2, 3));
        final List<String> indices = new ArrayList<>();
        for (int i = 0; i < randomIntBetween(2, 10); i++) {
            indices.add("index-" + i);
            createIndexWithDocs(indices.get(i), dataOnlyNodes);
        }
        ensureYellowAndNoInitializingShards(indices.toArray(Strings.EMPTY_ARRAY));
        final CountDownLatch block = new CountDownLatch(1);
        final Releasable releaseBlock = interceptVerifyShardBeforeCloseActions(randomFrom(indices), block::countDown);
        ActionFuture<CloseIndexResponse> closeIndexResponse = client().admin().indices().prepareClose("index-*").execute();
        assertTrue("Waiting for index to have a closing blocked", block.await(60, TimeUnit.SECONDS));
        assertFalse(closeIndexResponse.isDone());
        indices.forEach(ReopenWhileClosingIT::assertIndexIsBlocked);
        final List<String> reopenedIndices = randomSubsetOf(randomIntBetween(1, indices.size()), indices);
        assertAcked(client().admin().indices().prepareOpen(reopenedIndices.toArray(Strings.EMPTY_ARRAY)));
        releaseBlock.close();
        assertFalse(closeIndexResponse.get().isAcknowledged());
        indices.forEach(index -> {
            if (reopenedIndices.contains(index)) {
                assertIndexIsOpened(index);
            } else {
                assertIndexIsClosed(index);
            }
        });
    }
    private void createIndexWithDocs(final String indexName, final Collection<String> dataOnlyNodes) {
        createIndex(
            indexName,
            Settings.builder().put(indexSettings()).put("index.routing.allocation.include._name", String.join(",", dataOnlyNodes)).build()