Skip to content

Commit 4d2b2c2

Browse files
andrrossshiv0408
authored andcommitted
Retry only specified tests (opensearch-project#8825)
This list was compiled by finding every test failure that succeeded on a retry in the past month (approx. June 20-July 20, 2023). The [flaky-test-finder.rb][1] script was used to collect this list. ``` ruby flaky-test-finder.rb -s 18000 -e 20681 | sed 's/[0-9]*[[:space:]]\(.*\)\..*/includeClasses\.add(\"\1\")/' | sort | uniq ``` [1]: https://gist.github.com/andrross/ee07a8a05beb63f1173bcb98523918b9 Signed-off-by: Andrew Ross <[email protected]> Signed-off-by: Shivansh Arora <[email protected]>
1 parent 97d01be commit 4d2b2c2

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

TESTING.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ OpenSearch uses [jUnit](https://junit.org/junit5/) for testing, it also uses ran
1313
- [Test groups](#test-groups)
1414
- [Load balancing and caches](#load-balancing-and-caches)
1515
- [Test compatibility](#test-compatibility)
16+
- [Retries](#retries)
1617
- [Miscellaneous](#miscellaneous)
1718
- [Running verification tasks](#running-verification-tasks)
1819
- [Testing the REST layer](#testing-the-rest-layer)
@@ -160,6 +161,10 @@ It is possible to provide a version that allows to adapt the tests' behaviour to
160161

161162
./gradlew test -Dtests.compatibility=1.0.0
162163

164+
## Retries
165+
166+
The goal of tests is to be completely deterministic such that any test failure can be easily and reliably reproduced. However, the reality is that many OpenSearch integration tests have non-deterministic behavior which results in rare test failures that cannot be easily reproduced even using the same random test seed. To mitigate the pain of frequent non-reproducible test failures, limited retries have been introduced using the Gradle [test-retry](https://plugins.gradle.org/plugin/org.gradle.test-retry) plugin. The known flaky tests are explicitly listed in the test-retry configuration of the build.gradle file. This is intended as a temporary mitigation for existing flakiness, and as such new tests should not be added to the retry list. Any new addition to the retry list must provide a thorough rationale as to why adding retries is the right thing to do as opposed to fixing the underlying flakiness. Existing flaky tests are tracked in GitHub with the [Flaky Random Test Failure](https://github.com/opensearch-project/OpenSearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22flaky-test%22) label.
167+
163168
## Miscellaneous
164169

165170
Run all tests without stopping on errors (inspect log files).

build.gradle

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,82 @@ subprojects {
470470
maxFailures = 10
471471
}
472472
failOnPassedAfterRetry = false
473+
classRetry {
474+
includeClasses.add("org.opensearch.action.admin.cluster.node.tasks.ResourceAwareTasksTests")
475+
includeClasses.add("org.opensearch.action.admin.cluster.tasks.PendingTasksBlocksIT")
476+
includeClasses.add("org.opensearch.action.admin.indices.create.CreateIndexIT")
477+
includeClasses.add("org.opensearch.action.admin.indices.create.ShrinkIndexIT")
478+
includeClasses.add("org.opensearch.aliases.IndexAliasesIT")
479+
includeClasses.add("org.opensearch.backwards.MixedClusterClientYamlTestSuiteIT")
480+
includeClasses.add("org.opensearch.blocks.SimpleBlocksIT")
481+
includeClasses.add("org.opensearch.client.PitIT")
482+
includeClasses.add("org.opensearch.client.ReindexIT")
483+
includeClasses.add("org.opensearch.cluster.ClusterHealthIT")
484+
includeClasses.add("org.opensearch.cluster.allocation.AwarenessAllocationIT")
485+
includeClasses.add("org.opensearch.cluster.allocation.ClusterRerouteIT")
486+
includeClasses.add("org.opensearch.cluster.coordination.AwarenessAttributeDecommissionIT")
487+
includeClasses.add("org.opensearch.cluster.metadata.IndexGraveyardTests")
488+
includeClasses.add("org.opensearch.cluster.routing.MovePrimaryFirstTests")
489+
includeClasses.add("org.opensearch.cluster.routing.allocation.decider.DiskThresholdDeciderIT")
490+
includeClasses.add("org.opensearch.cluster.service.MasterServiceTests")
491+
includeClasses.add("org.opensearch.common.util.concurrent.QueueResizableOpenSearchThreadPoolExecutorTests")
492+
includeClasses.add("org.opensearch.gateway.RecoveryFromGatewayIT")
493+
includeClasses.add("org.opensearch.gateway.ReplicaShardAllocatorIT")
494+
includeClasses.add("org.opensearch.http.SearchRestCancellationIT")
495+
includeClasses.add("org.opensearch.http.netty4.Netty4HttpServerTransportTests")
496+
includeClasses.add("org.opensearch.index.IndexServiceTests")
497+
includeClasses.add("org.opensearch.index.IndexSettingsTests")
498+
includeClasses.add("org.opensearch.index.SegmentReplicationPressureIT")
499+
includeClasses.add("org.opensearch.index.ShardIndexingPressureIT")
500+
includeClasses.add("org.opensearch.index.ShardIndexingPressureSettingsIT")
501+
includeClasses.add("org.opensearch.index.reindex.BulkByScrollResponseTests")
502+
includeClasses.add("org.opensearch.index.reindex.DeleteByQueryBasicTests")
503+
includeClasses.add("org.opensearch.index.reindex.UpdateByQueryBasicTests")
504+
includeClasses.add("org.opensearch.index.shard.IndexShardIT")
505+
includeClasses.add("org.opensearch.index.shard.RemoteStoreRefreshListenerTests")
506+
includeClasses.add("org.opensearch.index.translog.RemoteFSTranslogTests")
507+
includeClasses.add("org.opensearch.indices.DateMathIndexExpressionsIntegrationIT")
508+
includeClasses.add("org.opensearch.indices.replication.RemoteStoreReplicationSourceTests")
509+
includeClasses.add("org.opensearch.indices.replication.SegmentReplicationAllocationIT")
510+
includeClasses.add("org.opensearch.indices.replication.SegmentReplicationIT")
511+
includeClasses.add("org.opensearch.indices.replication.SegmentReplicationRelocationIT")
512+
includeClasses.add("org.opensearch.indices.replication.SegmentReplicationTargetServiceTests")
513+
includeClasses.add("org.opensearch.indices.state.CloseWhileRelocatingShardsIT")
514+
includeClasses.add("org.opensearch.monitor.fs.FsHealthServiceTests")
515+
includeClasses.add("org.opensearch.recovery.ReplicationCollectionTests")
516+
includeClasses.add("org.opensearch.remotestore.CreateRemoteIndexClusterDefaultDocRep")
517+
includeClasses.add("org.opensearch.remotestore.CreateRemoteIndexIT")
518+
includeClasses.add("org.opensearch.remotestore.CreateRemoteIndexTranslogDisabledIT")
519+
includeClasses.add("org.opensearch.remotestore.RemoteIndexPrimaryRelocationIT")
520+
includeClasses.add("org.opensearch.remotestore.RemoteStoreBackpressureIT")
521+
includeClasses.add("org.opensearch.remotestore.RemoteStoreIT")
522+
includeClasses.add("org.opensearch.remotestore.RemoteStoreRefreshListenerIT")
523+
includeClasses.add("org.opensearch.remotestore.RemoteStoreStatsIT")
524+
includeClasses.add("org.opensearch.remotestore.SegmentReplicationRemoteStoreIT")
525+
includeClasses.add("org.opensearch.remotestore.SegmentReplicationUsingRemoteStoreIT")
526+
includeClasses.add("org.opensearch.remotestore.multipart.RemoteStoreMultipartIT")
527+
includeClasses.add("org.opensearch.repositories.azure.AzureBlobContainerRetriesTests")
528+
includeClasses.add("org.opensearch.repositories.azure.AzureBlobStoreRepositoryTests")
529+
includeClasses.add("org.opensearch.repositories.gcs.GoogleCloudStorageBlobContainerRetriesTests")
530+
includeClasses.add("org.opensearch.repositories.gcs.GoogleCloudStorageBlobStoreRepositoryTests")
531+
includeClasses.add("org.opensearch.repositories.s3.S3BlobStoreRepositoryTests")
532+
includeClasses.add("org.opensearch.search.ConcurrentSegmentSearchTimeoutIT")
533+
includeClasses.add("org.opensearch.search.SearchTimeoutIT")
534+
includeClasses.add("org.opensearch.search.SearchWeightedRoutingIT")
535+
includeClasses.add("org.opensearch.search.aggregations.bucket.DoubleTermsIT")
536+
includeClasses.add("org.opensearch.search.aggregations.bucket.terms.StringTermsIT")
537+
includeClasses.add("org.opensearch.search.aggregations.metrics.CardinalityIT")
538+
includeClasses.add("org.opensearch.search.backpressure.SearchBackpressureIT")
539+
includeClasses.add("org.opensearch.search.basic.SearchWithRandomIOExceptionsIT")
540+
includeClasses.add("org.opensearch.search.pit.DeletePitMultiNodeIT")
541+
includeClasses.add("org.opensearch.smoketest.SmokeTestMultiNodeClientYamlTestSuiteIT")
542+
includeClasses.add("org.opensearch.snapshots.CloneSnapshotIT")
543+
includeClasses.add("org.opensearch.snapshots.DedicatedClusterSnapshotRestoreIT")
544+
includeClasses.add("org.opensearch.snapshots.RestoreSnapshotIT")
545+
includeClasses.add("org.opensearch.snapshots.SnapshotStatusApisIT")
546+
includeClasses.add("org.opensearch.test.rest.ClientYamlTestSuiteIT")
547+
includeClasses.add("org.opensearch.upgrade.DetectEsInstallationTaskTests")
548+
}
473549
}
474550
}
475551
}

0 commit comments

Comments
 (0)