**Build scan:**
https://gradle-enterprise.elastic.co/s/dxnvahurwubcu/tests/:server:internalClusterTest/org.elasticsearch.action.admin.indices.create.CreateIndexIT/testCreateAndDeleteIndexConcurrently

**Reproduction line:**
```
./gradlew ':server:internalClusterTest' --tests "org.elasticsearch.action.admin.indices.create.CreateIndexIT.testCreateAndDeleteIndexConcurrently" -Dtests.seed=3ED3285ADA7A0152 -Dtests.locale=is -Dtests.timezone=Africa/Tunis -Druntime.java=20
```

**Applicable branches:**
main, 8.8

**Reproduces locally?:**
No

**Failure history:**
https://gradle-enterprise.elastic.co/scans/tests?tests.container=org.elasticsearch.action.admin.indices.create.CreateIndexIT&tests.test=testCreateAndDeleteIndexConcurrently

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

  at __randomizedtesting.SeedInfo.seed([3ED3285ADA7A0152]:0)

```
server/src/main/java/org/elasticsearch/indices/recovery/RecoverySourceHandler.java
.<List<StoreFileMetadata>>andThen(
                    (l, ignored) -> recoverSnapshotFiles(shardRecoveryPlan, l.delegateResponse((recoverSnapshotFilesListener, e) -> {
                        if (shardRecoveryPlan.canRecoverSnapshotFilesFromSourceNode() == false
                            && e instanceof CancellableThreads.ExecutionCancelledException == false) {
                            shardRecoveryPlan = shardRecoveryPlan.getFallbackPlan();
                            sendShardRecoveryPlanFileInfo(recoverSnapshotFilesListener.map(r -> Collections.emptyList()));
                        } else {
                            recoverSnapshotFilesListener.onFailure(e);
                        }
                    }))
                )
                
                .<Void>andThen((sendFilesListener, filesFailedToRecoverFromSnapshot) -> {
                    final List<StoreFileMetadata> filesToRecoverFromSource;
                    if (filesFailedToRecoverFromSnapshot.isEmpty()) {
                        filesToRecoverFromSource = shardRecoveryPlan.getSourceFilesToRecover();
                    } else {
                        filesToRecoverFromSource = concatLists(
                            shardRecoveryPlan.getSourceFilesToRecover(),
                            filesFailedToRecoverFromSnapshot
                        );
                    }
                    sendFiles(
                        store,
                        filesToRecoverFromSource.toArray(new StoreFileMetadata[0]),
                        shardRecoveryPlan::getTranslogOps,
                        sendFilesListener
                    );
                })