Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal for Possible ways to run the search test suite with concurrent search enabled #8673

Closed
neetikasinghal opened this issue Jul 12, 2023 · 23 comments · Fixed by #9083
Closed
Assignees
Labels
distributed framework :test Adding or fixing a test

Comments

@neetikasinghal
Copy link
Contributor

neetikasinghal commented Jul 12, 2023

Once concurrent search goes GA, there needs to be a way to run all the search related tests with concurrent search enabled.

Here are some options for that:

1. Randomization of the tests

We can achieve this by randomizing the cluster setting for the concurrent search in the base IT search classes and running the tests.
Pros
i. Simple and straightforward to implement
ii. The run time of the tests will remain the same
iii. Most of the other teams like segrep are following the same approach
Cons
i. It doesn’t give full coverage of the tests for concurrent search
ii. We might miss testing some scenarios which might fail later

2. Full coverage of the tests

Full coverage of the tests using concurrent search can be achieved by using the following options:
1. Create another class IT class for every class that needs to be run with concurrent search and set the cluster setting for concurrent search as true.
[Con] This would create a lot of classes making it not a solution to opt for.
2. Create a sub-class ConcurrentSearchIntegTestCase of OpenSearchIntegTestCase that has a constructor to work with the @ParametersFactory to create parameters’ values of the concurrent search cluster setting as true/false. Change all the Search ITs to extend the new base class ConcurrentSearchIntegTestCase and initialize the base class constructor. We need to change the default value of the dynamic value of the cluster setting as false and also make code changes to rely on the cluster setting rather than the feature flag as of now. A Sample code change for an IT class would look like: 5f7cd40
[Con] This would also require making changes to many test classes, this is as good as parameterizing all the test classes that need parameterization.
3. Junit has a runner for Parameterized class that can do the initialization of the parameters without the need of a constructor unlike ParametersFactory, ref: link.
[Con] This approach doesn’t work as the existing OpenSearch tests run with RandomizedRunner class defined at the test framework of lucene: ref.
4. [Recommended] We can have a system property that can enable the cluster setting for concurrent search and run the tests again with this system property.
[Con] This will double up the time taken currently to run the tests as part of the gradle check. We can run a subset of tests that concern only concurrent search use case to reduce the time take.
[Pro] This is simple to implement

Relates #7440

@dbwiddis
Copy link
Member

Hi @neetikasinghal, I'm not sure what this issue is asking. Is this a question or bug or proposal for a feature? The linked issue implies you'll be creating/modifying tests, but I'm not sure.

Can you clarify in your description what you are asking for? I expect the feature template can be helpful with questions that frame the issue.

@neetikasinghal neetikasinghal changed the title Possible ways to run the search test suite with concurrent search enabled Proposal for Possible ways to run the search test suite with concurrent search enabled Jul 17, 2023
@neetikasinghal
Copy link
Contributor Author

@dbwiddis this is a proposal for the issue #7440

@neetikasinghal
Copy link
Contributor Author

@sohami @jed326 @reta @andrross I would love to hear your thoughts on this.

@jed326
Copy link
Collaborator

jed326 commented Jul 18, 2023

  1. [Recommended] We can have a system property that can enable the cluster setting for concurrent search and run the tests again with this system property.

Thanks for the ideas @neetikasinghal! Just for clarification, are you suggesting adding another gradle task for this?

Additionally, what's the scope of tests we want to do this for? internalClusterTest seems obvious to me but how about the YAML based REST tests or the java REST tests? (ref: https://github.com/opensearch-project/OpenSearch/blob/main/TESTING.md#testing-the-rest-layer). Furthermore, I don't think we need to run all the tests in internalClusterTest for both search paths, just a subset that we identify as relevant, there are many tests that are completely unrelated to search as a whole so for those it doesn't make sense to double up on the testing.

Taking a step back though, I definitely think our solution should fall under the "2. Full coverage of the tests", randomization as a form of test coverage is not a good practice (this is even called out in 1. Randomization of the tests). From the developer perspective, if I am working on a bug fix or improvement specific to concurrent segment search, I want to be able to have test coverage of my fix 100% of the times that I run the tests.

@jed326 jed326 added :test Adding or fixing a test distributed framework and removed untriaged labels Jul 18, 2023
@jed326 jed326 moved this from Todo to In Progress in Concurrent Search Jul 18, 2023
@andrross
Copy link
Member

Regarding randomization, as @jed326 described it is not appropriate to use randomization for coverage. However, there are many test cases that invoke a search API as a part of the test scenario that aren't specifically testing search. Just randomly picking one test as an example, this integration test of the cluster block API invokes the search API to assert a document count. How the search is done is not important to that test, so in such cases randomly selecting whether to use concurrent search is a valid approach and can help find bugs with interactions between features that should be independent.

@jed326 Asks some good questions above. When you get into the details of how you select the tests you want to run in "option 4", I think it might end up looking a lot like "option 2". I also agree that whatever the mechanism we need to ensure we have full coverage.

@sohami
Copy link
Collaborator

sohami commented Jul 18, 2023

I agree on the randomization approach not to be the best mechanism. @andrross for the scenario you described if we want to test the cluster block API both with concurrent vs non concurrent semantics (which we should), then I think having explicit run will be better. For example: With randomization, let's say there is a bug in concurrent semantics found via that test. Then the test will be flaky. Once the issue gets fixed we will need to ensure that the test again runs all the time with concurrent semantics. So I think for such tests as well running it explicitly with concurrent semantics probably will help.

Pro with option 4 is that it will avoid the chance to miss any new or existing search ITs with concurrent segment path. Since it is going to be another step in PR workflow which will run in parallel, atleast the test time there will not be double. I am not completely sure but probably majority of the tests will fall under category to run with concurrent segment search enabled as well, so starting simple to just run all may be fine. We can later build some mechanism to ignore tests suite which are not needed to be run with concurrent search to improve on the test time. With option 2, the issue is looking into each and every test and then adding support for those in concurrent path seems error prone to me. There are chances of missing tests with that approach. Also we will need mechanism to have all the external plugins implementations to also update their tests to use the new search base class IT. With option 4, plugins needs to set the env variable which will take care of running it with concurrent segment search with existing base class.

Additionally, what's the scope of tests we want to do this for? internalClusterTest seems obvious to me but how about the YAML based REST tests or the java REST tests?

Good callout, we should see on how to add Yaml tests and any other test. I guess any test which is running by creating a OpenSearch cluster can be a potential candidate here. Like ones extending OpenSearchSingleNodeTestCase as well.

@neetikasinghal
Copy link
Contributor Author

ant, there are many tests that are completely unrelated to search as a whole so for those it doesn't make sense to double up on the testing.

@jed326 thanks for your feedback, yes I was implying all the tests that have to be tested be added in a gradle task.
Configuration of the tests to run for concurrent search use-case can be done as part of the gradle task. Even the the YAML based REST tests or the java REST tests can added to the gradle task along with the other tests. (internalClusterTest)

@neetikasinghal
Copy link
Contributor Author

Regarding randomization, as @jed326 described it is not appropriate to use randomization for coverage. However, there are many test cases that invoke a search API as a part of the test scenario that aren't specifically testing search. Just randomly picking one test as an example, this integration test of the cluster block API invokes the search API to assert a document count. How the search is done is not important to that test, so in such cases randomly selecting whether to use concurrent search is a valid approach and can help find bugs with interactions between features that should be independent.

@jed326 Asks some good questions above. When you get into the details of how you select the tests you want to run in "option 4", I think it might end up looking a lot like "option 2". I also agree that whatever the mechanism we need to ensure we have full coverage.

@andrross thanks for the feedback, I agree with you, @jed326 and @sohami that we definitely need full coverage of the tests, randomization will miss out on the coverage leading to unknown bugs that would pop up later.

@neetikasinghal
Copy link
Contributor Author

Pro with option 4 is that it will avoid the chance to miss any new or existing search ITs with concurrent segment path. Since it is going to be another step in PR workflow which will run in parallel, atleast the test time there will not be double. I am not completely sure but probably majority of the tests will fall under category to run with concurrent segment search enabled as well, so starting simple to just run all may be fine. We can later build some mechanism to ignore tests suite which are not needed to be run with concurrent search to improve on the test time. With option 2, the issue is looking into each and every test and then adding support for those in concurrent path seems error prone to me. There are chances of missing tests with that approach. Also we will need mechanism to have all the external plugins implementations to also update their tests to use the new search base class IT. With option 4, plugins needs to set the env variable which will take care of running it with concurrent segment search with existing base class.

@sohami thanks for the feedback. Since there will be a new gradle task to run the tests with concurrent search and it will be different from what gradle check already runs, if we want to run all the tests as part of this gradle task, the time to run these tests I think will be double than what is needed to run the tests currently. The IT tests run in parallel as part of the gradle check. I need to check if there is a way to parallelize the different gradle tasks within the same run of gradle check.
In case of parameterization, the time might not be exactly double as the integration tests will run in parallel and we can leverage that.

@sohami
Copy link
Collaborator

sohami commented Jul 18, 2023

Since there will be a new gradle task to run the tests with concurrent search and it will be different from what gradle check already runs, if we want to run all the tests as part of this gradle task, the time to run these tests I think will be double than what is needed to run the tests currently.

I am not sure if I understood this, since I am assuming in the PR workflow we can run multiple tasks in parallel (like gradle check and this new task with new sets of test). So if both tasks runs in parallel it should be able to complete around same time.

The IT tests run in parallel as part of the gradle check. I need to check if there is a way to parallelize the different gradle tasks within the same run of gradle check.

Running IT tests in parallel will mostly be a gradle option for that task not related to ./gradlew check. So will assume this should be doable but yes better to verify.

My main concern with approach 2 is figuring out and updating all the tests related to search. Then also same update will be needed in all the plugins to use this new base class. Once we get enough stable runtime with concurrent search mechanism (over the releases), we can make the concurrent test run as part of mainstream run and control the concurrency (sequential vs concurrent path) via slice count (=1 vs > 1) and don't need to run tests with concurrent search disabled. So that time this new IT base class will become irrelevant and again we have to perform the cleanup.

@neetikasinghal
Copy link
Contributor Author

Since there will be a new gradle task to run the tests with concurrent search and it will be different from what gradle check already runs, if we want to run all the tests as part of this gradle task, the time to run these tests I think will be double than what is needed to run the tests currently.

I am not sure if I understood this, since I am assuming in the PR workflow we can run multiple tasks in parallel (like gradle check and this new task with new sets of test). So if both tasks runs in parallel it should be able to complete around same time.

I was thinking to run tests as part of the gradle check as the tests need the build to be done before running the tests else the build has to be done again as part of a new workflow. I think it would be better if we can run the tests as part of gradle check only.

My main concern with approach 2 is figuring out and updating all the tests related to search. Then also same update will be needed in all the plugins to use this new base class. Once we get enough stable runtime with concurrent search mechanism (over the releases), we can make the concurrent test run as part of mainstream run and control the concurrency (sequential vs concurrent path) via slice count (=1 vs > 1) and don't need to run tests with concurrent search disabled. So that time this new IT base class will become irrelevant and again we have to perform the cleanup.

If we control the concurrency via the slice count, wouldn't that mean that it would go to an either/or case where we either run concurrent search or run sequential run, it wouldn't run both which means that we wouldn't have full coverage?

@reta
Copy link
Collaborator

reta commented Jul 25, 2023

  1. Create a sub-class ConcurrentSearchIntegTestCase of OpenSearchIntegTestCase that has a constructor to work with the @ParametersFactory to create parameters’ values of the concurrent search cluster setting as true/false.

I think this is not bad as an approach, we could push it further and actually generalized it over the feature flags (and may be their combinations later on), for example OpenSearchFeatureIntegTestCase. It also would help up as to a) improve test suites incrementally b) rerun the specific test + combination only

@Rishikesh1159
Copy link
Member

Rishikesh1159 commented Jul 28, 2023

Thanks @neetikasinghal for putting up this for discussion. I am currently working on similar issue #8965 with remote store. I am trying to run entire Integ test suite with remote store enabled. I was planning to use system property to enabled remote store on OpenSearchIntegTestCase. In long run my plan is to run entire gradle check with remote store randomly enabled/disabled for random tests in suite. If anybody has some thoughts/opinion to share please post it on the issue #8965

@neetikasinghal
Copy link
Contributor Author

  1. Create a sub-class ConcurrentSearchIntegTestCase of OpenSearchIntegTestCase that has a constructor to work with the @ParametersFactory to create parameters’ values of the concurrent search cluster setting as true/false.

I think this is not bad as an approach, we could push it further and actually generalized it over the feature flags (and may be their combinations later on), for example OpenSearchFeatureIntegTestCase. It also would help up as to a) improve test suites incrementally b) rerun the specific test + combination only

thanks @reta for your feedback, as of now we are trying to figure out the number of test classes or the number of tests that would need to be added specifically for concurrent search. Once, we have that number, I think then we will be in a better situation to decide if going with approach 2 is feasible.
Although, I agree to to your point that this is a pertinent problem with all the features and this can be an one of the approaches to start making the changes.

@neetikasinghal
Copy link
Contributor Author

Thanks @neetikasinghal for putting up this for discussion. I am currently working on similar issue #8965 with remote store. I am trying to run entire Integ test suite with remote store enabled. I was planning to use system property to enabled remote store on OpenSearchIntegTestCase. In long run my plan is to run entire gradle check with remote store randomly enabled/disabled for random tests in suite. If anybody has some thoughts/opinion to share please post it on the issue #8965

@Rishikesh1159 to solve this problem temporarily, we are running periodic integration tests for concurrent search with feature flag enabled via github action in order to monitor the tests. You can look into it if you are interested: link

@neetikasinghal
Copy link
Contributor Author

ther and actually generalized it over the feature flags (and may be their combinations later on), for example OpenSearchFeatureIntegTestCase. It also would help up as to a) improve test suites incrementally b) rerun the specific test + combination only

@reta the parameterization can only work for the dynamic settings, so the base class can have a combination of dynamic settings that needs the parameterization. This won't work for the parameterization of the feature flags as for an IT test the cluster is launched with either the feature flag on or off and it cannot be changed at run time. You can refer to my PoC here.
In case of concurrent search, we have a dynamic setting, hence the parameterization approach should work just fine.

@neetikasinghal
Copy link
Contributor Author

Also, we checked that there are around 191/540 IT classes that are touching the search use-cases and needs testing with concurrent search use-case.

Given these numbers @reta @andrross @sohami what are your thoughts on the approach that we should go with?

Test class Package Module Needed for concurrent search?
CreateIndexBlockIT.java org.opensearch.blocks server No
SimpleBlocksIT.java org.opensearch.blocks server No
SettingsFilteringIT.java org.opensearch.cluster.settings server No
ClusterSettingsIT.java org.opensearch.cluster.settings server Yes
ClusterShardLimitIT.java org.opensearch.cluster.shards server No
ClusterSearchShardsIT.java org.opensearch.cluster.shards server No
ClusterStateDiffIT.java org.opensearch.cluster server No
RemoveSettingsCommandIT.java org.opensearch.cluster.coordination server No
ZenDiscoveryIT.java org.opensearch.cluster.coordination server No
RemoveCustomsCommandIT.java org.opensearch.cluster.coordination server No
UnsafeBootstrapAndDetachCommandIT.java org.opensearch.cluster.coordination server No
VotingConfigurationIT.java org.opensearch.cluster.coordination server No
RareClusterStateIT.java org.opensearch.cluster.coordination server No
AwarenessAttributeDecommissionIT.java org.opensearch.cluster.coordination server No
UpdateSettingsValidationIT.java org.opensearch.cluster server No
ClusterInfoServiceIT.java org.opensearch.cluster server No
SimpleClusterStateIT.java org.opensearch.cluster server No
SpecificClusterManagerNodesIT.java org.opensearch.cluster server No
ClusterAwarenessHealthIT.java org.opensearch.cluster server No
ClusterHealthIT.java org.opensearch.cluster server No
ShardStateActionIT.java org.opensearch.cluster.action.shard server No
MinimumClusterManagerNodesIT.java org.opensearch.cluster server No
PrimaryAllocationIT.java org.opensearch.cluster.routing server No
DelayedAllocationIT.java org.opensearch.cluster.routing server No
AllocationIdIT.java org.opensearch.cluster.routing server No
WeightedRoutingIT.java org.opensearch.cluster.routing server No
ShardStateIT.java org.opensearch.cluster.routing.allocation server No
UpdateShardAllocationSettingsIT.java org.opensearch.cluster.routing.allocation.decider server No
DiskThresholdDeciderIT.java org.opensearch.cluster.routing.allocation.decider server No
MockDiskUsagesIT.java org.opensearch.cluster.routing.allocation.decider server No
DiscoveryNodeRoleIT.java org.opensearch.cluster.node server No
ClusterServiceIT.java org.opensearch.cluster.service server No
SimpleDataNodesIT.java org.opensearch.cluster server No
TemplateUpgradeServiceIT.java org.opensearch.cluster.metadata server No
UpgradeIndexSettingsIT.java org.opensearch.cluster.metadata server No
NoClusterManagerNodeIT.java org.opensearch.cluster server No
SimpleAllocationIT.java org.opensearch.cluster.allocation server No
ClusterRerouteIT.java org.opensearch.cluster.allocation server No
AwarenessAllocationIT.java org.opensearch.cluster.allocation server No
FilteringAllocationIT.java org.opensearch.cluster.allocation server No
DestructiveOperationsIT.java org.opensearch.operateAllIndices server No
SimpleValidateQueryIT.java org.opensearch.validate server Verify
DedicatedClusterManagerGetFieldMappingIT.java org.opensearch.indices.mapping server No
ConcurrentDynamicTemplateIT.java org.opensearch.indices.mapping server No
UpdateMappingIntegrationIT.java org.opensearch.indices.mapping server No
SimpleGetFieldMappingsIT.java org.opensearch.indices.mapping server No
SimpleGetMappingsIT.java org.opensearch.indices.mapping server No
UpdateSettingsIT.java org.opensearch.indices.settings server No
GetSettingsBlocksIT.java org.opensearch.indices.settings server No
UpdateNumberOfReplicasIT.java org.opensearch.indices.settings server No
InternalSettingsIT.java org.opensearch.indices.settings server No
PrivateSettingsIT.java org.opensearch.indices.settings server No
DateMathIndexExpressionsIntegrationIT.java org.opensearch.indices server No
PreBuiltAnalyzerIntegrationIT.java org.opensearch.indices.analysis server Verify
CircuitBreakerNoopIT.java org.opensearch.indices.memory.breaker server Verify
RandomExceptionCircuitBreakerIT.java org.opensearch.indices.memory.breaker server Verify
CircuitBreakerServiceIT.java org.opensearch.indices.memory.breaker server Verify
IndicesExistsIT.java org.opensearch.indices.exists.indices server No
DanglingIndicesIT.java org.opensearch.indices.recovery server No
IndexRecoveryIT.java org.opensearch.indices.recovery server No
ReplicaToPrimaryPromotionIT.java org.opensearch.indices.recovery server No
IndexPrimaryRelocationIT.java org.opensearch.indices.recovery server No
SimpleIndexTemplateIT.java org.opensearch.indices.template server No
ComposableTemplateIT.java org.opensearch.indices.template server No
IndexTemplateBlocksIT.java org.opensearch.indices.template server No
CloseIndexIT.java org.opensearch.indices.state server No
CloseWhileRelocatingShardsIT.java org.opensearch.indices.state server No
ReopenWhileClosingIT.java org.opensearch.indices.state server No
SimpleIndexStateIT.java org.opensearch.indices.state server No
CloseIndexDisableCloseAllIT.java org.opensearch.indices.state server No
OpenCloseIndexIT.java org.opensearch.indices.state server No
AnalyzeActionIT.java org.opensearch.indices.analyze server Verify
SegmentReplicationBaseIT.java org.opensearch.indices.replication server No
SegmentReplicationStatsIT.java org.opensearch.indices.replication server No
SegmentReplicationIT.java org.opensearch.indices.replication server No
SegmentReplicationClusterSettingIT.java org.opensearch.indices.replication server No
SegmentReplicationSuiteIT.java org.opensearch.indices.replication server No
SegmentReplicationAllocationIT.java org.opensearch.indices.replication server No
SegmentReplicationRelocationIT.java org.opensearch.indices.replication server No
IndicesOptionsIntegrationIT.java org.opensearch.indices server No
IndicesRequestCacheIT.java org.opensearch.indices server Yes
IndicesLifecycleListenerIT.java org.opensearch.indices server No
IndexStatsIT.java org.opensearch.indices.stats server Yes
IndicesStoreIntegrationIT.java org.opensearch.indices.store server No
IndexingMemoryControllerIT.java org.opensearch.indices server No
SimpleNodesInfoIT.java org.opensearch.nodesinfo server No
ExplainActionIT.java org.opensearch.explain server Verify
UpdateNoopIT.java org.opensearch.update server Verify
UpdateIT.java org.opensearch.update server Verify
PersistentTasksExecutorIT.java org.opensearch.persistent server No
PersistentTasksExecutorFullRestartIT.java org.opensearch.persistent server No
EnableAssignmentDeciderIT.java org.opensearch.persistent.decider server No
SnapshotShardsServiceIT.java org.opensearch.snapshots server No
RepositoryFilterUserMetadataIT.java org.opensearch.snapshots server No
CloneSnapshotIT.java org.opensearch.snapshots server No
RepositoriesIT.java org.opensearch.snapshots server No
CorruptedBlobStoreRepositoryIT.java org.opensearch.snapshots server No
MetadataLoadingDuringSnapshotRestoreIT.java org.opensearch.snapshots server No
AbortedRestoreIT.java org.opensearch.snapshots server No
SegmentReplicationSnapshotIT.java org.opensearch.snapshots server No
SnapshotStatusApisIT.java org.opensearch.snapshots server No
ConcurrentSnapshotsIT.java org.opensearch.snapshots server No
MultiClusterRepoAccessIT.java org.opensearch.snapshots server No
BlobStoreIncrementalityIT.java org.opensearch.snapshots server No
SearchableSnapshotIT.java org.opensearch.snapshots server No
DeleteSnapshotIT.java org.opensearch.snapshots server No
SharedClusterSnapshotRestoreIT.java org.opensearch.snapshots server No
SnapshotCustomPluginStateIT.java org.opensearch.snapshots server No
RestoreSnapshotIT.java org.opensearch.snapshots server No
DedicatedClusterSnapshotRestoreIT.java org.opensearch.snapshots server No
RecoveryWhileUnderLoadIT.java org.opensearch.recovery server No
SimpleRecoveryIT.java org.opensearch.recovery server No
RelocationIT.java org.opensearch.recovery server No
TruncatedRecoveryIT.java org.opensearch.recovery server No
FullRollingRestartIT.java org.opensearch.recovery server No
IngestClientIT.java org.opensearch.ingest server No
IngestProcessorNotInstalledOnAllNodesIT.java org.opensearch.ingest server No
ClusterManagerTaskThrottlingIT.java org.opensearch.clustermanager server No
StableClusterManagerDisruptionIT.java org.opensearch.discovery server No
SingleNodeDiscoveryIT.java org.opensearch.discovery.single server No
SnapshotDisruptionIT.java org.opensearch.discovery server No
DiscoveryDisruptionIT.java org.opensearch.discovery server No
ClusterManagerDisruptionIT.java org.opensearch.discovery server No
ClusterDisruptionCleanSettingsIT.java org.opensearch.discovery server No
DiskDisruptionIT.java org.opensearch.discovery server No
SettingsBasedSeedHostsProviderIT.java org.opensearch.discovery server No
ClusterDisruptionIT.java org.opensearch.discovery server No
SimilarityIT.java org.opensearch.similarity server Yes
GetActionIT.java org.opensearch.get server Verify
RecoveryWithUnsupportedIndicesIT.java org.opensearch.bwcompat server No
BlobStoreRepositoryCleanupIT.java org.opensearch.repositories.blobstore server No
RepositoriesServiceIT.java org.opensearch.repositories server No
FsBlobStoreRepositoryIT.java org.opensearch.repositories.fs server No
AliasedIndexDocumentActionsIT.java org.opensearch.document server No
ShardInfoIT.java org.opensearch.document server No
DocumentActionsIT.java org.opensearch.document server Verify
SimpleThreadPoolIT.java org.opensearch.threadpool server Yes
StoredScriptsIT.java org.opensearch.script server Yes
ScriptCacheIT.java org.opensearch.script server Yes
ExtensionsManagerIT.java org.opensearch.extensions server No
SearchAfterIT.java org.opensearch.search.searchafter server Yes
DeletePitMultiNodeIT.java org.opensearch.search.pit server Yes
PitMultiNodeIT.java org.opensearch.search.pit server Yes
ContextCompletionSuggestSearchIT.java org.opensearch.search.suggest server Yes
SuggestSearchIT.java org.opensearch.search.suggest server Yes
CompletionSuggestSearchIT.java org.opensearch.search.suggest server Yes
ScriptQuerySearchIT.java org.opensearch.search.scriptfilter server Yes
DuelScrollIT.java org.opensearch.search.scroll server Yes
SearchScrollIT.java org.opensearch.search.scroll server Yes
SearchScrollWithFailingNodesIT.java org.opensearch.search.scroll server Yes
GeoDistanceSortBuilderIT.java org.opensearch.search.sort server Yes
FieldSortIT.java org.opensearch.search.sort server Yes
GeoDistanceIT.java org.opensearch.search.sort server Yes
SimpleSortIT.java org.opensearch.search.sort server Yes
SortFromPluginIT.java org.opensearch.search.sort server Yes
StressSearchServiceReaperIT.java org.opensearch.search server Yes
SearchWithRejectionsIT.java org.opensearch.search server Yes
SearchSliceIT.java org.opensearch.search.slice server Yes
MetadataFetchingIT.java org.opensearch.search.source server Yes
SourceFetchingIT.java org.opensearch.search.source server Yes
ConcurrentSegmentSearchCancellationIT.java org.opensearch.search server Yes
GeoDistanceQueryGeoShapesIT.java org.opensearch.search.geo server Yes
GeoDistanceQueryGeoPointsIT.java org.opensearch.search.geo server Yes
GeoBoundingBoxQueryGeoShapesIT.java org.opensearch.search.geo server Yes
GeoBoundingBoxQueryGeoPointsIT.java org.opensearch.search.geo server Yes
GeoShapeIntegrationIT.java org.opensearch.search.geo server Yes
GeoFilterIT.java org.opensearch.search.geo server Yes
GeoPolygonIT.java org.opensearch.search.geo server Yes
LegacyGeoShapeIntegrationIT.java org.opensearch.search.geo server Yes
AbstractGeoDistanceIT.java org.opensearch.search.geo server Yes
AbstractGeoBoundingBoxQueryIT.java org.opensearch.search.geo server Yes
SearchWhileCreatingIndexIT.java org.opensearch.search.basic server Yes
TransportSearchFailuresIT.java org.opensearch.search.basic server Yes
SearchWithRandomExceptionsIT.java org.opensearch.search.basic server Yes
SearchWithRandomIOExceptionsIT.java org.opensearch.search.basic server Yes
TransportTwoNodesSearchIT.java org.opensearch.search.basic server Yes
SearchWhileRelocatingIT.java org.opensearch.search.basic server Yes
SearchRedStateIndexIT.java org.opensearch.search.basic server Yes
SearchBackpressureIT.java org.opensearch.search.backpressure server Yes
FieldCapabilitiesIT.java org.opensearch.search.fieldcaps server Yes
DecayFunctionScoreIT.java org.opensearch.search.functionscore server Yes
FunctionScoreIT.java org.opensearch.search.functionscore server Yes
RandomScoreFunctionIT.java org.opensearch.search.functionscore server Yes
ExplainableScriptIT.java org.opensearch.search.functionscore server Yes
QueryRescorerIT.java org.opensearch.search.functionscore server Yes
FunctionScoreFieldValueIT.java org.opensearch.search.functionscore server Yes
FunctionScorePluginIT.java org.opensearch.search.functionscore server Yes
SimpleSearchIT.java org.opensearch.search.simple server Yes
MoreLikeThisIT.java org.opensearch.search.morelikethis server Yes
SearchPreferenceIT.java org.opensearch.search.preference server Yes
SearchTimeoutIT.java org.opensearch.search server Yes
FetchSubPhasePluginIT.java org.opensearch.search.fetch server Yes
CustomHighlighterSearchIT.java org.opensearch.search.fetch.subphase.highlight server Yes
HighlighterSearchIT.java org.opensearch.search.fetch.subphase.highlight server Yes
MatchedQueriesIT.java org.opensearch.search.fetch.subphase server Yes
InnerHitsIT.java org.opensearch.search.fetch.subphase server Yes
AggregationProfilerIT.java org.opensearch.search.profile.aggregation server Yes
ProfilerSingleNodeNetworkTest.java org.opensearch.search.profile server Yes
QueryProfilerIT.java org.opensearch.search.profile.query server Yes
SearchCancellationIT.java org.opensearch.search server Yes
SearchFieldsIT.java org.opensearch.search.fields server Yes
MultiSearchIT.java org.opensearch.search.msearch server Yes
SearchWeightedRoutingIT.java org.opensearch.search server Yes
ConcurrentSegmentSearchTimeoutIT.java org.opensearch.search server Yes
SimpleNestedIT.java org.opensearch.search.nested server Yes
SimpleQueryStringIT.java org.opensearch.search.query server Yes
QueryStringIT.java org.opensearch.search.query server Yes
SearchQueryIT.java org.opensearch.search.query server Yes
ScriptScoreQueryIT.java org.opensearch.search.query server Yes
MultiMatchQueryIT.java org.opensearch.search.query server Yes
ExistsIT.java org.opensearch.search.query server Yes
GeoCentroidIT.java org.opensearch.search.aggregations.metrics server Yes
CardinalityWithRequestBreakerIT.java org.opensearch.search.aggregations.metrics server Yes
ScriptedMetricIT.java org.opensearch.search.aggregations.metrics server Yes
CardinalityIT.java org.opensearch.search.aggregations.metrics server Yes
StatsIT.java org.opensearch.search.aggregations.metrics server Yes
SumIT.java org.opensearch.search.aggregations.metrics server Yes
TDigestPercentilesIT.java org.opensearch.search.aggregations.metrics server Yes
TopHitsIT.java org.opensearch.search.aggregations.metrics server Yes
HDRPercentilesIT.java org.opensearch.search.aggregations.metrics server Yes
HDRPercentileRanksIT.java org.opensearch.search.aggregations.metrics server Yes
MedianAbsoluteDeviationIT.java org.opensearch.search.aggregations.metrics server Yes
TDigestPercentileRanksIT.java org.opensearch.search.aggregations.metrics server Yes
ValueCountIT.java org.opensearch.search.aggregations.metrics server Yes
ExtendedStatsIT.java org.opensearch.search.aggregations.metrics server Yes
BucketSortIT.java org.opensearch.search.aggregations.pipeline server Yes
AvgBucketIT.java org.opensearch.search.aggregations.pipeline server Yes
SerialDiffIT.java org.opensearch.search.aggregations.pipeline server Yes
ExtendedStatsBucketIT.java org.opensearch.search.aggregations.pipeline server Yes
PercentilesBucketIT.java org.opensearch.search.aggregations.pipeline server Yes
DateDerivativeIT.java org.opensearch.search.aggregations.pipeline server Yes
MovAvgIT.java org.opensearch.search.aggregations.pipeline server Yes
SumBucketIT.java org.opensearch.search.aggregations.pipeline server Yes
StatsBucketIT.java org.opensearch.search.aggregations.pipeline server Yes
MaxBucketIT.java org.opensearch.search.aggregations.pipeline server Yes
MinBucketIT.java org.opensearch.search.aggregations.pipeline server Yes
BucketSelectorIT.java org.opensearch.search.aggregations.pipeline server Yes
BucketScriptIT.java org.opensearch.search.aggregations.pipeline server Yes
DerivativeIT.java org.opensearch.search.aggregations.pipeline server Yes
AggregationsIntegrationIT.java org.opensearch.search.aggregations server Yes
FiltersAggsRewriteIT.java org.opensearch.search.aggregations server Yes
MissingValueIT.java org.opensearch.search.aggregations server Yes
CombiIT.java org.opensearch.search.aggregations server Yes
MetadataIT.java org.opensearch.search.aggregations server Yes
DoubleTermsIT.java org.opensearch.search.aggregations.bucket server Yes
HistogramIT.java org.opensearch.search.aggregations.bucket server Yes
SamplerIT.java org.opensearch.search.aggregations.bucket server Yes
ShardReduceIT.java org.opensearch.search.aggregations.bucket server Yes
FilterIT.java org.opensearch.search.aggregations.bucket server Yes
TermsDocCountErrorIT.java org.opensearch.search.aggregations.bucket server Yes
ReverseNestedIT.java org.opensearch.search.aggregations.bucket server Yes
NestedIT.java org.opensearch.search.aggregations.bucket server Yes
SignificantTermsSignificanceScoreIT.java org.opensearch.search.aggregations.bucket server Yes
LongTermsIT.java org.opensearch.search.aggregations.bucket server Yes
NaNSortingIT.java org.opensearch.search.aggregations.bucket server Yes
MultiTermsIT.java org.opensearch.search.aggregations.bucket server Yes
GlobalIT.java org.opensearch.search.aggregations.bucket server Yes
StringTermsIT.java org.opensearch.search.aggregations.bucket.terms server Yes
BaseStringTermsTestCase.java org.opensearch.search.aggregations.bucket.terms server Yes
GeoDistanceIT.java org.opensearch.search.aggregations.bucket server Yes
IpRangeIT.java org.opensearch.search.aggregations.bucket server Yes
MinDocCountIT.java org.opensearch.search.aggregations.bucket server Yes
BooleanTermsIT.java org.opensearch.search.aggregations.bucket server Yes
FiltersIT.java org.opensearch.search.aggregations.bucket server Yes
DateRangeIT.java org.opensearch.search.aggregations.bucket server Yes
DiversifiedSamplerIT.java org.opensearch.search.aggregations.bucket server Yes
RangeIT.java org.opensearch.search.aggregations.bucket server Yes
AdjacencyMatrixIT.java org.opensearch.search.aggregations.bucket server Yes
DateHistogramIT.java org.opensearch.search.aggregations.bucket server Yes
ShardSizeTermsIT.java org.opensearch.search.aggregations.bucket server Yes
TermsShardMinDocCountIT.java org.opensearch.search.aggregations.bucket server Yes
DateHistogramOffsetIT.java org.opensearch.search.aggregations.bucket server Yes
IpTermsIT.java org.opensearch.search.aggregations.bucket server Yes
EquivalenceIT.java org.opensearch.search.aggregations server Yes
CrossClusterSearchIT.java org.opensearch.search.ccs server Yes
SearchStatsIT.java org.opensearch.search.stats server Yes
NodeEnvironmentIT.java org.opensearch.env server No
NodeRepurposeCommandIT.java org.opensearch.env server No
UpgradeSettingsIT.java org.opensearch.common.settings server Yes
ConsistentSettingsIT.java org.opensearch.common.settings server No
BulkProcessorIT.java org.opensearch.action.bulk server No
BulkRejectionIT.java org.opensearch.action.bulk server No
BulkIntegrationIT.java org.opensearch.action.bulk server No
BulkWithUpdatesIT.java org.opensearch.action.bulk server No
BulkProcessorClusterSettingsIT.java org.opensearch.action.bulk server No
BulkProcessorRetryIT.java org.opensearch.action.bulk server No
ListenerActionIT.java org.opensearch.action server No
AsyncIngestProcessorIT.java org.opensearch.action.ingest server No
GetTermVectorsIT.java org.opensearch.action.termvectors server Yes
MultiTermVectorsIT.java org.opensearch.action.termvectors server Yes
PendingTasksBlocksIT.java org.opensearch.action.admin.cluster.tasks server No
SnapshotBlocksIT.java org.opensearch.action.admin.cluster.snapshots server No
RepositoryBlocksIT.java org.opensearch.action.admin.cluster.repositories server No
TransportClusterStateActionDisruptionIT.java org.opensearch.action.admin.cluster.state server No
AbstractTasksIT.java org.opensearch.action.admin.cluster.node.tasks server No
TasksIT.java org.opensearch.action.admin.cluster.node.tasks server Yes
ConcurrentSearchTasksIT.java org.opensearch.action.admin.cluster.node.tasks server Yes
TaskStorageRetryIT.java org.opensearch.action.admin.cluster.node.tasks server No
CancellableTasksIT.java org.opensearch.action.admin.cluster.node.tasks server Yes
ClusterStatsIT.java org.opensearch.action.admin.cluster.stats server Yes
ClusterAllocationExplainIT.java org.opensearch.action.admin.cluster.allocation server No
HotThreadsIT.java org.opensearch.action.admin server No
DataStreamTestCase.java org.opensearch.action.admin.indices.datastream server No
DataStreamUsageIT.java org.opensearch.action.admin.indices.datastream server No
DataStreamRolloverIT.java org.opensearch.action.admin.indices.datastream server No
DataStreamIndexTemplateIT.java org.opensearch.action.admin.indices.datastream server No
ValidateMappingRequestPluginIT.java org.opensearch.action.admin.indices.mapping.put server No
IndicesShardStoreRequestIT.java org.opensearch.action.admin.indices.shards server No
ValidateIndicesAliasesRequestIT.java org.opensearch.action.admin.indices.alias server No
ClearIndicesCacheBlocksIT.java org.opensearch.action.admin.indices.cache.clear server No
FlushBlocksIT.java org.opensearch.action.admin.indices.flush server No
DeleteIndexBlocksIT.java org.opensearch.action.admin.indices.delete server No
RefreshBlocksIT.java org.opensearch.action.admin.indices.refresh server No
IndicesExistsIT.java org.opensearch.action.admin.indices.exists server No
GetIndexIT.java org.opensearch.action.admin.indices.get server Verify
ForceMergeIT.java org.opensearch.action.admin.indices.forcemerge server No
ForceMergeBlocksIT.java org.opensearch.action.admin.indices.forcemerge server No
RolloverIT.java org.opensearch.action.admin.indices.rollover server No
SplitIndexIT.java org.opensearch.action.admin.indices.create server No
ShrinkIndexIT.java org.opensearch.action.admin.indices.create server No
CreateIndexIT.java org.opensearch.action.admin.indices.create server No
CloneIndexIT.java org.opensearch.action.admin.indices.create server No
IndicesStatsBlocksIT.java org.opensearch.action.admin.indices.stats server No
IndicesSegmentsBlocksIT.java org.opensearch.action.admin.indices.segments server No
ReloadSecureSettingsIT.java org.opensearch.action.admin server No
ClientTimeoutIT.java org.opensearch.action.admin server Verify
TransportSearchIT.java org.opensearch.action.search server No
SearchProgressActionListenerIT.java org.opensearch.action.search server Verify
IndicesRequestIT.java org.opensearch.action server No
WaitActiveShardCountIT.java org.opensearch.action.support server No
IndexingClusterManagerFailoverIT.java org.opensearch.action.support.clustermanager server No
TransportReplicationActionRetryOnClosedNodeIT.java org.opensearch.action.support.replication server No
ActiveShardsObserverIT.java org.opensearch.action.support server No
RejectionActionIT.java org.opensearch.action server No
RemoteStoreBackpressureIT.java org.opensearch.remotestore server No
RemoteStoreStatsIT.java org.opensearch.remotestore server No
RemoteStoreRefreshListenerIT.java org.opensearch.remotestore server No
CreateRemoteIndexClusterDefaultDocRep.java org.opensearch.remotestore server No
SegmentReplicationUsingRemoteStoreIT.java org.opensearch.remotestore server No
PrimaryTermValidationIT.java org.opensearch.remotestore server No
ReplicaToPrimaryPromotionIT.java org.opensearch.remotestore server No
AbstractRemoteStoreMockRepositoryIntegTestCase.java org.opensearch.remotestore server No
CreateRemoteIndexIT.java org.opensearch.remotestore server No
MockFsVerifyingBlobContainer.java org.opensearch.remotestore.multipart.mocks server No
MockFsRepository.java org.opensearch.remotestore.multipart.mocks server No
MockFsBlobStore.java org.opensearch.remotestore.multipart.mocks server No
MockFsRepositoryPlugin.java org.opensearch.remotestore.multipart.mocks server No
RemoteStoreMultipartFileCorruptionIT.java org.opensearch.remotestore.multipart server No
RemoteStoreMultipartIT.java org.opensearch.remotestore.multipart server No
RemoteStoreIT.java org.opensearch.remotestore server No
CreateRemoteIndexTranslogDisabledIT.java org.opensearch.remotestore server No
RemoteIndexRecoveryIT.java org.opensearch.remotestore server No
RemoteStoreBaseIntegTestCase.java org.opensearch.remotestore server No
SegmentReplicationWithRemoteStorePressureIT.java org.opensearch.remotestore server No
RemoteStoreForceMergeIT.java org.opensearch.remotestore server No
SuggestStatsIT.java org.opensearch.index.suggest.stats server Yes
IndexRequestBuilderIT.java org.opensearch.index server No
IndexSortIT.java org.opensearch.index server Yes
ShardIndexingPressureSettingsIT.java org.opensearch.index server No
HiddenIndexIT.java org.opensearch.index server No
GlobalCheckpointSyncIT.java org.opensearch.index.seqno server No
PeerRecoveryRetentionLeaseCreationIT.java org.opensearch.index.seqno server No
RetentionLeaseIT.java org.opensearch.index.seqno server No
MultiCodecMergeIT.java org.opensearch.index.codec server No
DynamicMappingIT.java org.opensearch.index.mapper server No
CopyToMapperIntegrationIT.java org.opensearch.index.mapper server No
ExternalValuesMapperIntegrationIT.java org.opensearch.index.mapper server No
MultiFieldsIntegrationIT.java org.opensearch.index.mapper server No
MatchPhraseQueryIT.java org.opensearch.index.search server Yes
WaitUntilRefreshIT.java org.opensearch.index server No
SettingsListenerIT.java org.opensearch.index server No
FinalPipelineIT.java org.opensearch.index server No
SegmentReplicationPressureIT.java org.opensearch.index server No
ShardIndexingPressureIT.java org.opensearch.index server No
CustomQueryParserIT.java org.opensearch.index.query.plugin server No
MaxDocsLimitIT.java org.opensearch.index.engine server No
InternalEngineMergeIT.java org.opensearch.index.engine server No
IndexingPressureIT.java org.opensearch.index server No
IndexShardIT.java org.opensearch.index.shard server No
RemoveCorruptedShardDataCommandIT.java org.opensearch.index.shard server No
GlobalCheckpointListenersIT.java org.opensearch.index.shard server No
SearchIdleIT.java org.opensearch.index.shard server Verify
FieldDataLoadingIT.java org.opensearch.index.fielddata server Verify
ExceptionRetryIT.java org.opensearch.index.store server No
CorruptedFileIT.java org.opensearch.index.store server No
CorruptedTranslogIT.java org.opensearch.index.store server No
IndexActionIT.java org.opensearch.indexing server No
SimpleRoutingIT.java org.opensearch.routing server No
AliasRoutingIT.java org.opensearch.routing server No
AliasResolveRoutingIT.java org.opensearch.routing server No
PartitionedRoutingIT.java org.opensearch.routing server No
SimpleMgetIT.java org.opensearch.mget server Yes
SimpleVersioningIT.java org.opensearch.versioning server No
ConcurrentDocumentOperationIT.java org.opensearch.versioning server No
ConcurrentSeqNoVersioningIT.java org.opensearch.versioning server No
IndexAliasesIT.java org.opensearch.aliases server No
NodeClientIT.java org.opensearch.client.node server No
BroadcastActionsIT.java org.opensearch.broadcast server No
RecoverAfterNodesIT.java org.opensearch.gateway server No
ReplicaShardAllocatorIT.java org.opensearch.gateway server No
GatewayIndexStateIT.java org.opensearch.gateway server No
RecoveryFromGatewayIT.java org.opensearch.gateway server No
MetadataNodesIT.java org.opensearch.gateway server No
QuorumGatewayIT.java org.opensearch.gateway server No
DelayedShardAggregationIT.java org.opensearch.search.aggregations external-modules Yes
DelayedShardAggregationClientYamlTestSuiteIT.java org.opensearch.search.aggregations external-modules Yes
ClientYamlTestSuiteIT org.opensearch.test.rest rest-api-spec Verify
PercolatorQuerySearchIT.java org.opensearch.percolator modules Yes
PercolatorClientYamlTestSuiteIT.java org.opensearch.percolator modules Yes
URLSnapshotRestoreIT.java org.opensearch.repositories.url modules No
RepositoryURLClientYamlTestSuiteIT.java org.opensearch.repositories.url modules No
Netty4TransportMultiPortIntegrationIT.java org.opensearch.transport.netty4 modules No
OpenSearchLoggingHandlerIT.java org.opensearch.transport.netty4 modules No
Netty4TransportPublishAddressIT.java org.opensearch.transport.netty4 modules No
Netty4Http2IT.java org.opensearch.http.netty4 modules No
Netty4PipeliningIT.java org.opensearch.http.netty4 modules No
Netty4HttpRequestSizeLimitIT.java org.opensearch.http.netty4 modules No
Zen2RestApiIT.java org.opensearch.rest.discovery modules No
Netty4BadRequestIT.java org.opensearch.rest modules No
Netty4HeadBodyIsEmptyIT.java org.opensearch.rest modules No
Netty4ClientYamlTestSuiteIT.java org.opensearch.http.netty4 modules No
MissingValueIT.java org.opensearch.geo.search modules Yes
ShardReduceIT.java org.opensearch.geo.search.aggregations.bucket modules Yes
GeoHashGridIT.java org.opensearch.geo.search.aggregations.bucket modules Yes
GeoTileGridIT.java org.opensearch.geo.search.aggregations.bucket modules Yes
GeoClientYamlTestSuiteIT.java org.opensearch.geo modules Yes
LangPainlessClientYamlTestSuiteIT.java org.opensearch.painless modules Yes
GeoIpProcessorNonIngestNodeIT.java org.opensearch.ingest.geoip modules No
IngestGeoIpClientYamlTestSuiteIT.java org.opensearch.ingest.geoip modules No
IngestRestartIT.java org.opensearch.ingest.common modules No
IngestCommonClientYamlTestSuiteIT.java org.opensearch.ingest.common modules No
TokenCountFieldMapperIntegrationIT.java org.opensearch.index.mapper modules No
MapperExtrasClientYamlTestSuiteIT.java org.opensearch.index.mapper modules No
ChildQuerySearchIT.java org.opensearch.join.query modules Yes
InnerHitsIT.java org.opensearch.join.query modules Yes
ChildrenIT.java org.opensearch.join.aggregations modules Yes
ParentIT.java org.opensearch.join.aggregations modules Yes
ParentChildClientYamlTestSuiteIT.java org.opensearch.join modules Yes
RankEvalRequestIT.java org.opensearch.index.rankeval modules Yes
RankEvalYamlIT.java org.opensearch.index.rankeval modules Yes
MultiCodecReindexIT.java org.opensearch.index.codec modules No
ReindexDocumentationIT.java org.opensearch.client.documentation modules No
ReindexWithoutContentIT.java org.opensearch.index.reindex modules No
ManyDocumentsIT.java org.opensearch.index.reindex modules No
ReindexClientYamlTestSuiteIT.java org.opensearch.index.reindex modules No
StoredExpressionIT.java org.opensearch.script.expression modules Yes
MoreExpressionIT.java org.opensearch.script.expression modules Yes
LangExpressionClientYamlTestSuiteIT.java org.opensearch.script.expression modules Yes
SearchPipelineCommonIT.java org.opensearch.search.pipeline.common modules No
SearchPipelineCommonYamlTestSuiteIT.java org.opensearch.search.pipeline.common modules No
MultiSearchTemplateIT.java org.opensearch.script.mustache modules Yes
SearchTemplateIT.java org.opensearch.script.mustache modules Yes
SearchTemplateWithoutContentIT.java org.opensearch.script.mustache modules Yes
LangMustacheClientYamlTestSuiteIT.java org.opensearch.script.mustache modules Yes
QueryStringWithAnalyzersIT.java org.opensearch.analysis.common modules Yes
CommonAnalysisClientYamlTestSuiteIT.java org.opensearch.analysis.common modules Yes
OpenSearchDashboardsSystemIndexIT.java org.opensearch.dashboards modules Yes
IngestUserAgentClientYamlTestSuiteIT.java org.opensearch.ingest.useragent modules No
MatrixStatsClientYamlTestSuiteIT.java org.opensearch.search.aggregations.matrix modules Yes
DiscoveryAzureClassicClientYamlTestSuiteIT.java org.opensearch.discovery.azure.classic plugins No
StoreSmbClientYamlTestSuiteIT.java org.opensearch.index.store plugins No
PhoneticClientYamlTestSuiteIT.java org.opensearch.index.analysis plugins Verify
UkrainianClientYamlTestSuiteIT.java org.opensearch.index.analysis modules Verify
NoriClientYamlTestSuiteIT.java org.opensearch.index.analysis plugins Verify
KuromojiClientYamlTestSuiteIT.java org.opensearch.index.analysis plugins Verify
AnnotatedTextClientYamlTestSuiteIT.java org.opensearch.index.mapper.annotatedtext plugins Verify
SmartCNClientYamlTestSuiteIT.java org.opensearch.index.analysis plugins Verify
GCEDiscoveryClientYamlTestSuiteIT.java org.opensearch.cloud.gce plugins No
DiscoveryGceClientYamlTestSuiteIT.java org.opensearch.discovery.gce plugins No
HaHdfsFailoverTestSuiteIT.java org.opensearch.repositories.hdfs plugins No
RepositoryHdfsClientYamlTestSuiteIT.java org.opensearch.repositories.hdfs plugins No
RepositoryS3ClientYamlTestSuiteIT.java org.opensearch.repositories.s3 plugins No
RepositoryGcsClientYamlTestSuiteIT.java org.opensearch.repositories.gcs plugins No
StempelClientYamlTestSuiteIT.java org.opensearch.index.analysis plugins Verify
SizeMappingIT.java org.opensearch.index.mapper.size plugins No
MapperSizeClientYamlTestSuiteIT.java org.opensearch.index.mapper.size plugins No
CustomSuggesterClientYamlTestSuiteIT.java org.opensearch.example.customsuggester plugins Yes
PainlessAllowlistClientYamlTestSuiteIT.java org.opensearch.example.painlessallowlist plugins Yes
ExampleCustomSettingsClientYamlTestSuiteIT.java org.opensearch.example.customsettings plugins No
CustomSignificanceHeuristicClientYamlTestSuiteIT.java org.opensearch.example.customsigheuristic plugins Verify
ExampleRescoreClientYamlTestSuiteIT.java org.opensearch.example.rescore plugins Yes
ExampleFixtureIT.java org.opensearch.example.resthandler plugins No
ExampleRestHandlerClientYamlTestSuiteIT.java org.opensearch.example.resthandler plugins No
ExpertScriptClientYamlTestSuiteIT.java org.opensearch.example.expertscript plugins No
ICUCollationKeywordFieldMapperIT.java org.opensearch.index.mapper plugins No
IcuClientYamlTestSuiteIT.java org.opensearch.index.analysis plugins Verify
NioTransportLoggingIT.java org.opensearch.transport.nio plugins No
NioPipeliningIT.java org.opensearch.http.nio plugins No
EventsCorrelationPluginTransportIT.java org.opensearch.plugin.correlation plugins Verify
EventsCorrelationPluginRestIT.java org.opensearch.plugin.correlation plugins Verify
CorrelationVectorsEngineIT.java org.opensearch.plugin.correlation plugins Verify
MapperMurmur3ClientYamlTestSuiteIT.java org.opensearch.index.mapper.murmur3 plugins No
AmazonEC2DiscoveryClientYamlTestSuiteIT.java org.opensearch.discovery.ec2 plugins No
CloudAwsClientYamlTestSuiteIT.java org.opensearch.discovery.ec2 plugins No
RepositoryAzureClientYamlTestSuiteIT.java org.opensearch.repositories.azure plugins No
IngestAttachmentClientYamlTestSuiteIT.java org.opensearch.ingest.attachment plugins No
SmokeTestIngestDisabledClientYamlTestSuiteIT.java org.opensearch.smoketest qa No
VerifyVersionConstantsIT.java org.opensearch.qa.verify_version_constants qa No
FullClusterRestartIT.java org.opensearch.upgrades qa No
QueryBuilderBWCIT.java org.opensearch.upgrades qa No
CCSDuelIT.java org.opensearch.search qa Yes
MultiClusterSearchYamlTestSuiteIT.java org.opensearch.search qa Yes
WildflyIT.java org.opensearch.wildfly qa Verify
CrossClusterSearchUnavailableClusterIT.java org.opensearch.search qa Yes
JsonLogsFormatAndParseIT.java org.opensearch.unconfigured_node_name qa No
MixedClusterClientYamlTestSuiteIT.java org.opensearch.backwards qa No
SearchingIT.java org.opensearch.backwards qa Yes
ExceptionIT.java org.opensearch.backwards qa No
IndexingIT.java org.opensearch.backwards qa No
SmokeTestPluginsClientYamlTestSuiteIT.java org.opensearch.smoketest qa No
RemoteClustersIT.java org.opensearch.cluster.remote.test qa No
DieWithDignityIT.java org.opensearch.qa.die_with_dignity qa No
ValueSourceMustacheIT.java org.opensearch.ingest qa No
IngestDocumentMustacheIT.java org.opensearch.ingest qa No
SmokeTestIngestWithAllDepsClientYamlTestSuiteIT.java org.opensearch.smoketest qa No
DanglingIndicesRestIT.java org.opensearch.http qa No
NoHandlerIT.java org.opensearch.http qa No
HttpCompressionIT.java org.opensearch.http qa No
CorsRegexIT.java org.opensearch.http qa No
SystemIndexRestIT.java org.opensearch.http qa No
SearchRestCancellationIT.java org.opensearch.http qa Yes
DetailedErrorsEnabledIT.java org.opensearch.http qa No
RestHttpResponseHeadersIT.java org.opensearch.http qa No
IdentityAuthenticationIT.java org.opensearch.http qa No
IndexingPressureRestIT.java org.opensearch.http qa No
ShardIndexingPressureRestIT.java org.opensearch.http qa No
DetailedErrorsDisabledIT.java org.opensearch.http qa No
ResponseHeaderPluginIT.java org.opensearch.http qa No
AwarenessAttributeDecommissionRestIT.java org.opensearch.http qa No
CorsNotSetIT.java org.opensearch.http qa No
TranslogPolicyIT.java org.opensearch.upgrades qa No
SmokeTestMultiNodeClientYamlTestSuiteIT.java org.opensearch.smoketest qa No
MultiVersionRepositoryAccessIT.java org.opensearch.upgrades qa No
UpgradeClusterClientYamlTestSuiteIT.java org.opensearch.upgrades qa No
RefreshVersionInClusterStateIT.java org.opensearch.upgrades qa No
RecoveryIT.java org.opensearch.upgrades qa No
SystemIndicesUpgradeIT.java org.opensearch.upgrades qa No
IndexingIT.java org.opensearch.upgrades qa No
CustomLoggingConfigIT.java org.opensearch.qa.custom_logging qa No

@reta
Copy link
Collaborator

reta commented Jul 28, 2023

In case of concurrent search, we have a dynamic setting, hence the parameterization approach should work just fine.

I didn't get that, sorry. The feature flags are not dynamic - you cannot change them at runtime, the settings are (some, to be precise). When using the parametrized tests, the cluster is (re)constructed with the feature flags and than settings could be changed later on if needed.

@sohami
Copy link
Collaborator

sohami commented Jul 29, 2023

@neetikasinghal Given there are ~200 tests that needs to be changed and probably the approach can be useful for other features as well, I think this will be one time effort to change these tests. Also thinking more about extra step in workflow, there are chances of missed runs with features on/off in other workflows which are running the tests or will need similar change. Putting it in the test code itself will not have that caveat and all the workflow running the tests will not have to be updated and same holds true for developers running tests locally. I am leaning towards option 2 at this point.

nit: Probably would be better to put the list of tests in a separate file (.txt) and merge in some branch of your github repo and share the link here.

When using the parametrized tests, the cluster is (re)constructed with the feature flags and than settings could be changed later on if needed.

@reta with IT tests being parameterized that doesn't seem to be the case. It sets the cluster only once and runs the test with different parameter for that cluster. This may be because in multiple tests the cluster is just set at TestSuite level not at per test level (probably to reduce the test time)

@reta
Copy link
Collaborator

reta commented Jul 29, 2023

@reta with IT tests being parameterized that doesn't seem to be the case. It sets the cluster only once and runs the test with different parameter for that cluster

Thanks @sohami , I assume you mean usage @OpenSearchIntegTestCase.ClusterScope (& co), that could totally be the case that this annotation does not play well with parametrized tests (since we've never needed that support), but I am pretty sure we could address that (I am by no means pushing towards using parametrized tests, while we discussing the solution in principle - any shortcoming could be addressed if we found that is the way to go).

What I like about parametrized tests in this particular context - each test suite starts with clean state (it should be with caveats above), and feature flags fit perfect into that.

@neetikasinghal
Copy link
Contributor Author

neetikasinghal commented Jul 31, 2023

Since @sohami is leaning towards approach 2, @reta / @andrross are you guys also inclined towards approach 2?

@reta
Copy link
Collaborator

reta commented Jul 31, 2023

@neetikasinghal just to reconfirm

  1. Create a sub-class ConcurrentSearchIntegTestCase of OpenSearchIntegTestCase that has a constructor to work with the @ParametersFactory to create parameters’ values of the concurrent search cluster setting as true/false

If yes, it is also reasonable approach to try out in my opinion, no objections

@neetikasinghal
Copy link
Contributor Author

thanks @reta, just calling out again that this is going to need changes in 200+ test classes to extend a new base class and initialize the constructor too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
distributed framework :test Adding or fixing a test
Projects
Status: Done
Development

Successfully merging a pull request may close this issue.

7 participants