Several tests failed in the same way:


- [NoOrdinalsStringFieldDataTests » classMethod](https://gradle-enterprise.elastic.co/s/criyecvbvjcqy/tests/:server:test/org.elasticsearch.index.fielddata.NoOrdinalsStringFieldDataTests)
- [NoOrdinalsStringFieldDataTests » classMethod](https://gradle-enterprise.elastic.co/s/criyecvbvjcqy/tests/:server:test/org.elasticsearch.index.fielddata.NoOrdinalsStringFieldDataTests)
- [SortedSetDVStringFieldDataTests » classMethod](https://gradle-enterprise.elastic.co/s/criyecvbvjcqy/tests/:server:test/org.elasticsearch.index.fielddata.SortedSetDVStringFieldDataTests)
- [SortedSetDVStringFieldDataTests » classMethod](https://gradle-enterprise.elastic.co/s/criyecvbvjcqy/tests/:server:test/org.elasticsearch.index.fielddata.SortedSetDVStringFieldDataTests)
- [PagedBytesStringFieldDataTests » classMethod](https://gradle-enterprise.elastic.co/s/criyecvbvjcqy/tests/:server:test/org.elasticsearch.index.fielddata.PagedBytesStringFieldDataTests)
- [PagedBytesStringFieldDataTests » classMethod](https://gradle-enterprise.elastic.co/s/criyecvbvjcqy/tests/:server:test/org.elasticsearch.index.fielddata.PagedBytesStringFieldDataTests)

**Build scan:**
https://gradle-enterprise.elastic.co/s/criyecvbvjcqy/tests/:server:test/org.elasticsearch.index.fielddata.NoOrdinalsStringFieldDataTests

**Reproduction line:**
```
./gradlew ':server:test' --tests "org.elasticsearch.index.fielddata.NoOrdinalsStringFieldDataTests" -Dtests.seed=6970E66CD7B23E6C -Dtests.locale=en-US -Dtests.timezone=Etc/UTC -Druntime.java=20
```

**Applicable branches:**
main

**Reproduces locally?:**
Yes

**Failure history:**
https://gradle-enterprise.elastic.co/scans/tests?tests.container=org.elasticsearch.index.fielddata.NoOrdinalsStringFieldDataTests&tests.test=classMethod

**Failure excerpt:**
```
com.carrotsearch.randomizedtesting.ThreadLeakError: 2 threads leaked from SUITE scope at org.elasticsearch.index.fielddata.NoOrdinalsStringFieldDataTests: 
   1) Thread[id=499, name=LuceneTestCase-44-thread-2, state=WAITING, group=TGRP-NoOrdinalsStringFieldDataTests]
        at java.base/jdk.internal.misc.Unsafe.park(Native Method)
        at java.base/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
        at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
        at java.base/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
        at java.base/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
        at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1707)
        at java.base/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
        at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
        at java.base/java.lang.Thread.run(Thread.java:1623)
   2) Thread[id=498, name=LuceneTestCase-44-thread-1, state=WAITING, group=TGRP-NoOrdinalsStringFieldDataTests]
        at java.base/jdk.internal.misc.Unsafe.park(Native Method)
        at java.base/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
        at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
        at java.base/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
        at java.base/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
        at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1707)
        at java.base/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
        at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
        at java.base/java.lang.Thread.run(Thread.java:1623)

  at __randomizedtesting.SeedInfo.seed([6970E66CD7B23E6C]:0)

```
server/src/test/java/org/elasticsearch/index/fielddata/AbstractStringFieldDataTestCase.java
parents.set(bit);
            writer.addDocuments(docs);
            if (randomInt(10) == 0) {
                writer.commit();
            }
        }
        DirectoryReader directoryReader = DirectoryReader.open(writer);
        directoryReader = ElasticsearchDirectoryReader.wrap(directoryReader, new ShardId(indexService.index(), 0));
        IndexSearcher searcher = newSearcher(directoryReader);
        IndexFieldData<?> fieldData = getForField("text");
        final Object missingValue = switch (randomInt(4)) {
            case 0 -> "_first";
            case 1 -> "_last";
            case 2 -> new BytesRef(RandomPicks.randomFrom(random(), values));
            default -> new BytesRef(TestUtil.randomSimpleString(random()));
        };
        Query parentFilter = new TermQuery(new Term("type", "parent"));
        Query childFilter = Queries.not(parentFilter);
        Nested nested = createNested(searcher, parentFilter, childFilter);
        BytesRefFieldComparatorSource nestedComparatorSource = new BytesRefFieldComparatorSource(fieldData, missingValue, sortMode, nested);
        ToParentBlockJoinQuery query = new ToParentBlockJoinQuery(
            new ConstantScoreQuery(childFilter),
            new QueryBitSetProducer(parentFilter),
            ScoreMode.None
        );
        Sort sort = new Sort(new SortField("text", nestedComparatorSource));
        TopFieldDocs topDocs = searcher.search(query, randomIntBetween(1, numParents), sort);
        assertTrue(topDocs.scoreDocs.length > 0);
        BytesRef previous = null;
        for (int i = 0; i < topDocs.scoreDocs.length; ++i) {