**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
if (isSequenceNumberBasedRecovery && retentionLease != null) {
            
            retentionLock.close();
            logger.trace("history is retained by {}", retentionLease);
        } else {
            
            
            
            logger.trace("history is retained by retention lock");
        }
        final SubscribableListener<SendFileResult> sendFileStep = new SubscribableListener<>();
        final SubscribableListener<TimeValue> prepareEngineStep = new SubscribableListener<>();
        final SubscribableListener<SendSnapshotResult> sendSnapshotStep = new SubscribableListener<>();
        final SubscribableListener<Void> finalizeStep = new SubscribableListener<>();
        final AtomicReference<SendSnapshotResult> sendSnapshotStepResult = new AtomicReference<>();
        final AtomicReference<SendFileResult> sendFileStepResult = new AtomicReference<>();
        final AtomicLong prepareEngineTimeMillisRef = new AtomicLong();
        if (isSequenceNumberBasedRecovery) {
            logger.trace("performing sequence numbers based recovery. starting at [{}]", request.startingSeqNo());
            startingSeqNo = request.startingSeqNo();
            if (retentionLease == null) {
                createRetentionLease(startingSeqNo, sendFileStep.map(ignored -> SendFileResult.EMPTY));
            } else {
                sendFileStep.onResponse(SendFileResult.EMPTY);
            }
        } else {
            final Engine.IndexCommitRef safeCommitRef;
            try {