I've seen three builds fail now witht he same error and this started happening on Nov 7 so it's likely we've introduced something here:

https://gradle-enterprise.elastic.co/scans/failures?failures.failureClassification=all_failures&failures.failureMessage=Execution%20failed%20for%20task%20%27:x-pack:qa:rolling-upgrade-multi-cluster:v8.6.0%23follower%23oneThirdUpgradedTest%27.%0A%3E%20%60cluster%7B:x-pack:qa:rolling-upgrade-multi-cluster:v8.6.0-follower%7D%60%20failed%20to%20wait%20for%20cluster%20health%20yellow%20after%2040%20SECONDS%0A%20%20%20%20IO%20error%20while%20waiting%20cluster%0A%20%20%20%20%20%20503%20Service%20Unavailable&search.relativeStartTime=P28D&search.timeZoneId=America/Los_Angeles#

```
* What went wrong:
Execution failed for task ':x-pack:qa:rolling-upgrade-multi-cluster:v8.6.0#follower#oneThirdUpgradedTest'.
> `cluster{:x-pack:qa:rolling-upgrade-multi-cluster:v8.6.0-follower}` failed to wait for cluster health yellow after 40 SECONDS
    IO error while waiting cluster
      503 Service Unavailable
```

It seems the follower cluster is having issues coming back up after upgrade.
server/src/test/java/org/elasticsearch/cluster/routing/allocation/allocator/DesiredBalanceReconcilerTests.java
assertThat(indexShardRoutingTable.replicaShards().stream().filter(ShardRouting::initializing).count(), equalTo(1L));
                assertThat(indexShardRoutingTable.replicaShards().stream().filter(ShardRouting::started).count(), equalTo(2L));
            }
        }
        final var finalState = startInitializingShardsAndReroute(allocationService, stateWithInitializingReplicas3);
        for (final var indexRoutingTable : finalState.routingTable()) {
            for (int i = 0; i < indexRoutingTable.size(); i++) {
                final var indexShardRoutingTable = indexRoutingTable.shard(i);
                assertTrue(indexShardRoutingTable.allShardsStarted());
            }
        }
    }
    public void testUnassignedShardsPriority() {
        final var discoveryNodes = discoveryNodes(2);
        final var metadata = Metadata.builder();
        final var routingTable = RoutingTable.builder();
        final var indexMetadata0 = randomPriorityIndex("index-0", 2, 1);
        final var indexMetadata1 = randomPriorityIndex("index-1", 2, 1);
        metadata.put(indexMetadata0, true);
        metadata.put(indexMetadata1, true);
        routingTable.addAsNew(indexMetadata0);
        routingTable.addAsNew(indexMetadata1);
        final var comparisonResult = Comparator.<IndexMetadata>comparingInt(indexMetadata -> indexMetadata.isSystem() ? 1 : 0)
            .thenComparingInt(IndexMetadata::priority)
            .thenComparingLong(IndexMetadata::getCreationDate)
            .thenComparing(indexMetadata -> indexMetadata.getIndex().getName())
            .compare(indexMetadata0, indexMetadata1);
        assert comparisonResult != 0;
        final var higherIndex = comparisonResult > 0 ? indexMetadata0 : indexMetadata1;
        final var lowerIndex = comparisonResult > 0 ? indexMetadata1 : indexMetadata0;