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
);
        final int nbDocs = scaledRandomIntBetween(1, 100);
        for (int i = 0; i < nbDocs; i++) {
            indexDoc(indexName, String.valueOf(i), "num", i);
        }
        assertIndexIsOpened(indexName);
    }
    /**
     * Intercepts and blocks the {@link TransportVerifyShardBeforeCloseAction} executed for the given index pattern.
     */
    private Releasable interceptVerifyShardBeforeCloseActions(final String indexPattern, final Runnable onIntercept) {
        final MockTransportService mockTransportService = (MockTransportService) internalCluster().getInstance(
            TransportService.class,
            internalCluster().getMasterName()
        );
        final CountDownLatch release = new CountDownLatch(1);
        for (DiscoveryNode node : internalCluster().clusterService().state().getNodes()) {
            mockTransportService.addSendBehavior(
                internalCluster().getInstance(TransportService.class, node.getName()),
                (connection, requestId, action, request, options) -> {
                    if (action.startsWith(TransportVerifyShardBeforeCloseAction.NAME)) {
                        if (request instanceof TransportVerifyShardBeforeCloseAction.ShardRequest shardRequest) {
                            final String index = shardRequest.shardId().getIndexName();
                            if (Glob.globMatch(indexPattern, index)) {
                                logger.info("request {} intercepted for index {}", requestId, index);
                                onIntercept.run();
                                try {
                                    release.await();
                                    logger.info("request {} released for index {}", requestId, index);
                                } catch (final InterruptedException e) {