Skip to content

Commit dbb6d2e

Browse files
Adding BWC test for remote publication enabled cluster (#20221)
* Adding BWC test for remote publication enabled cluster Signed-off-by: Harsh Garg <[email protected]>
1 parent d145d6b commit dbb6d2e

File tree

4 files changed

+349
-33
lines changed

4 files changed

+349
-33
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1414
- Support for HTTP/3 (server side) ([#20017](https://github.com/opensearch-project/OpenSearch/pull/20017))
1515
- Add circuit breaker support for gRPC transport to prevent out-of-memory errors ([#20203](https://github.com/opensearch-project/OpenSearch/pull/20203))
1616
- Add index-level-encryption support for snapshots and remote-store ([#20095](https://github.com/opensearch-project/OpenSearch/pull/20095))
17+
- Adding BackWardCompatibility test for remote publication enabled cluster ([#20221](https://github.com/opensearch-project/OpenSearch/pull/20221))
18+
1719

1820
### Changed
1921
- Handle custom metadata files in subdirectory-store ([#20157](https://github.com/opensearch-project/OpenSearch/pull/20157))

TESTING.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,8 @@ Backwards compatibility tests exist to test upgrading from each supported versio
395395

396396
The test can be run for any versions which the current version will be compatible with. Tests are run for released versions download the distributions from the artifact repository, see [DistributionDownloadPlugin](./buildSrc/src/main/java/org/opensearch/gradle/DistributionDownloadPlugin.java) for the repository location. Tests are run for versions that are not yet released automatically check out the branch and build from source to get the distributions, see [BwcVersions](./buildSrc/src/main/java/org/opensearch/gradle/BwcVersions.java) and [distribution/bwc/build.gradle](./distribution/bwc/build.gradle) for more information.
397397

398+
**Note:** Rolling upgrade tests run in two modes: with remote publication disabled (default) and with remote publication enabled (using a `-remote` suffix cluster). The remote publication tests verify cluster state persistence to remote storage during upgrades. See [Remote Cluster State documentation](https://docs.opensearch.org/latest/tuning-your-cluster/availability-and-recovery/remote-store/remote-cluster-state/) for more information.
399+
398400
The minimum JDK versions for runtime and compiling need to be installed, and environment variables `JAVAx_HOME`, such as `JAVA8_HOME`, pointing to the JDK installations are required to run the tests against unreleased versions, since the distributions are created by building from source. The required JDK versions for each branch are located at [.ci/java-versions.properties](.ci/java-versions.properties), see [BwcSetupExtension](./buildSrc/src/main/java/org/opensearch/gradle/internal/BwcSetupExtension.java) for more information.
399401

400402
To run all the backwards compatibility tests use:

qa/rolling-upgrade/build.gradle

Lines changed: 77 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,23 @@ apply plugin: 'opensearch.standalone-test'
3737
apply from : "$rootDir/gradle/bwc-test.gradle"
3838
apply plugin: 'opensearch.rest-resources'
3939

40+
def configureTestTask(task, clusterName, bwcVersionStr, suite, excludeRemoteTest, extraConfig = {}) {
41+
task.configure {
42+
useCluster project, testClusters."${clusterName}"
43+
systemProperty 'tests.upgrade_from_version', bwcVersionStr
44+
systemProperty 'tests.rest.suite', suite
45+
nonInputProperties.systemProperty('tests.rest.cluster', "${-> testClusters."${clusterName}".allHttpSocketURI.join(",")}")
46+
nonInputProperties.systemProperty('tests.clustername', "${-> testClusters."${clusterName}".getName()}")
47+
48+
if (excludeRemoteTest) {
49+
exclude '**/RemotePublicationClusterStateIT.class'
50+
}
51+
52+
extraConfig.delegate = delegate
53+
extraConfig()
54+
}
55+
}
56+
4057
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
4158
/*
4259
* The goal here is to:
@@ -47,7 +64,7 @@ for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
4764
* <li>run tests with systemProperty 'tests.rest.suite', 'mixed_cluster'
4865
* <li>upgrade one more node
4966
* <li>run tests with systemProperty 'tests.rest.suite', 'mixed_cluster' again
50-
* <li>updgrade the last node
67+
* <li>upgrade the last node
5168
* <li>run tests with systemProperty 'tests.rest.suite', 'upgraded_cluster'
5269
* </ul>
5370
*/
@@ -58,7 +75,6 @@ for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
5875
"${baseName}" {
5976
versions = [bwcVersionStr, project.version]
6077
numberOfNodes = 3
61-
6278
setting 'repositories.url.allowed_urls', 'http://snapshot.test*'
6379
setting 'path.repo', "${buildDir}/cluster/shared/repo/${baseName}"
6480
setting 'http.content_type.required', 'true'
@@ -67,57 +83,85 @@ for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
6783

6884
tasks.register("${baseName}#oldClusterTest", StandaloneRestIntegTestTask) {
6985
dependsOn processTestResources
70-
useCluster project, testClusters."${baseName}"
7186
mustRunAfter(precommit)
72-
doFirst {
73-
delete("${buildDir}/cluster/shared/repo/${baseName}")
87+
configureTestTask(it, baseName, bwcVersionStr, 'old_cluster', true) {
88+
doFirst { delete("${buildDir}/cluster/shared/repo/${baseName}") }
7489
}
75-
systemProperty 'tests.upgrade_from_version', bwcVersionStr
76-
systemProperty 'tests.rest.suite', 'old_cluster'
77-
nonInputProperties.systemProperty('tests.rest.cluster', "${-> testClusters."${baseName}".allHttpSocketURI.join(",")}")
78-
nonInputProperties.systemProperty('tests.clustername', "${-> testClusters."${baseName}".getName()}")
7990
}
8091

8192
tasks.register("${baseName}#oneThirdUpgradedTest", StandaloneRestIntegTestTask) {
8293
dependsOn "${baseName}#oldClusterTest"
83-
useCluster project, testClusters."${baseName}"
84-
doFirst {
85-
testClusters."${baseName}".nextNodeToNextVersion()
94+
configureTestTask(it, baseName, bwcVersionStr, 'mixed_cluster', true) {
95+
systemProperty 'tests.first_round', 'true'
96+
doFirst { testClusters."${baseName}".nextNodeToNextVersion() }
8697
}
87-
systemProperty 'tests.rest.suite', 'mixed_cluster'
88-
systemProperty 'tests.upgrade_from_version', bwcVersionStr
89-
systemProperty 'tests.first_round', 'true'
90-
nonInputProperties.systemProperty('tests.rest.cluster', "${-> testClusters."${baseName}".allHttpSocketURI.join(",")}")
91-
nonInputProperties.systemProperty('tests.clustername', "${-> testClusters."${baseName}".getName()}")
9298
}
9399

94100
tasks.register("${baseName}#twoThirdsUpgradedTest", StandaloneRestIntegTestTask) {
95101
dependsOn "${baseName}#oneThirdUpgradedTest"
96-
useCluster project, testClusters."${baseName}"
97-
doFirst {
98-
testClusters."${baseName}".nextNodeToNextVersion()
102+
configureTestTask(it, baseName, bwcVersionStr, 'mixed_cluster', true) {
103+
systemProperty 'tests.first_round', 'false'
104+
doFirst { testClusters."${baseName}".nextNodeToNextVersion() }
99105
}
100-
systemProperty 'tests.rest.suite', 'mixed_cluster'
101-
systemProperty 'tests.upgrade_from_version', bwcVersionStr
102-
systemProperty 'tests.first_round', 'false'
103-
nonInputProperties.systemProperty('tests.rest.cluster', "${-> testClusters."${baseName}".allHttpSocketURI.join(",")}")
104-
nonInputProperties.systemProperty('tests.clustername', "${-> testClusters."${baseName}".getName()}")
105106
}
106107

107108
tasks.register("${baseName}#upgradedClusterTest", StandaloneRestIntegTestTask) {
108109
dependsOn "${baseName}#twoThirdsUpgradedTest"
109-
doFirst {
110-
testClusters."${baseName}".nextNodeToNextVersion()
110+
configureTestTask(it, baseName, bwcVersionStr, 'upgraded_cluster', true) {
111+
doFirst { testClusters."${baseName}".nextNodeToNextVersion() }
111112
}
112-
useCluster project, testClusters."${baseName}"
113-
systemProperty 'tests.rest.suite', 'upgraded_cluster'
114-
systemProperty 'tests.upgrade_from_version', bwcVersionStr
113+
}
114+
115+
// Remote publication cluster
116+
String remoteBaseName = "${baseName}-remote"
117+
118+
testClusters {
119+
"${remoteBaseName}" {
120+
versions = [bwcVersionStr, project.version]
121+
numberOfNodes = 3
122+
setting 'repositories.url.allowed_urls', 'http://snapshot.test*'
123+
setting 'path.repo', "${buildDir}/cluster/shared/repo/${remoteBaseName}"
124+
setting 'http.content_type.required', 'true'
125+
setting 'node.attr.remote_store.routing_table.repository', 'my-fs-repository'
126+
setting 'node.attr.remote_store.state.repository', 'my-fs-repository'
127+
setting 'node.attr.remote_store.repository.my-fs-repository.type', 'fs'
128+
setting 'node.attr.remote_store.repository.my-fs-repository.settings.location', "${buildDir}/cluster/shared/repo/${remoteBaseName}/remote_state"
129+
setting 'cluster.remote_store.state.enabled', 'true'
130+
setting 'cluster.remote_store.publication.enabled', 'true'
131+
}
132+
}
133+
134+
tasks.register("${remoteBaseName}#oldClusterTest", StandaloneRestIntegTestTask) {
135+
dependsOn "${baseName}#upgradedClusterTest"
136+
configureTestTask(it, remoteBaseName, bwcVersionStr, 'old_cluster', false) {
137+
doFirst { delete("${buildDir}/cluster/shared/repo/${remoteBaseName}") }
138+
}
139+
}
140+
141+
tasks.register("${remoteBaseName}#oneThirdUpgradedTest", StandaloneRestIntegTestTask) {
142+
dependsOn "${remoteBaseName}#oldClusterTest"
143+
configureTestTask(it, remoteBaseName, bwcVersionStr, 'mixed_cluster', false) {
144+
systemProperty 'tests.first_round', 'true'
145+
doFirst { testClusters."${remoteBaseName}".nextNodeToNextVersion() }
146+
}
147+
}
115148

116-
nonInputProperties.systemProperty('tests.rest.cluster', "${-> testClusters."${baseName}".allHttpSocketURI.join(",")}")
117-
nonInputProperties.systemProperty('tests.clustername', "${-> testClusters."${baseName}".getName()}")
149+
tasks.register("${remoteBaseName}#twoThirdsUpgradedTest", StandaloneRestIntegTestTask) {
150+
dependsOn "${remoteBaseName}#oneThirdUpgradedTest"
151+
configureTestTask(it, remoteBaseName, bwcVersionStr, 'mixed_cluster', false) {
152+
systemProperty 'tests.first_round', 'false'
153+
doFirst { testClusters."${remoteBaseName}".nextNodeToNextVersion() }
154+
}
155+
}
156+
157+
tasks.register("${remoteBaseName}#upgradedClusterTest", StandaloneRestIntegTestTask) {
158+
dependsOn "${remoteBaseName}#twoThirdsUpgradedTest"
159+
configureTestTask(it, remoteBaseName, bwcVersionStr, 'upgraded_cluster', false) {
160+
doFirst { testClusters."${remoteBaseName}".nextNodeToNextVersion() }
161+
}
118162
}
119163

120164
tasks.register(bwcTaskName(bwcVersion)) {
121-
dependsOn tasks.named("${baseName}#upgradedClusterTest")
165+
dependsOn tasks.named("${remoteBaseName}#upgradedClusterTest")
122166
}
123167
}

0 commit comments

Comments
 (0)