Skip to content

Commit 40b279c

Browse files
authored
[8.16] [Gradle] Make rolling upgrade tests configuration cache compatible (elastic#119577) (elastic#120317)
* [Gradle] Make rolling upgrade tests configuration cache compatible (elastic#119577) With this, all rolling upgrade tests that involve a `nextNodeToNextVersion` update are gradle configuration cache compatible. Simplify API around test cluster registry and cc compatible usage of test cluster in TestClusterAware tasks. (cherry picked from commit 7b6bdfa) # Conflicts: # qa/ccs-rolling-upgrade-remote-cluster/build.gradle # x-pack/plugin/sql/qa/jdbc/security/build.gradle # x-pack/plugin/sql/qa/server/security/build.gradle * Fix backport merge issue
1 parent 119dfc3 commit 40b279c

File tree

20 files changed

+150
-240
lines changed

20 files changed

+150
-240
lines changed

build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersAware.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public interface TestClustersAware extends Task {
2626
Collection<ElasticsearchCluster> getClusters();
2727

2828
@ServiceReference(REGISTRY_SERVICE_NAME)
29-
Property<TestClustersRegistry> getRegistery();
29+
Property<TestClustersRegistry> getRegistry();
3030

3131
@ServiceReference(TEST_CLUSTER_TASKS_SERVICE)
3232
Property<TestClustersPlugin.TaskEventsService> getTasksService();
@@ -47,6 +47,14 @@ default void useCluster(ElasticsearchCluster cluster) {
4747
getClusters().add(cluster);
4848
}
4949

50+
default Provider<TestClusterInfo> getClusterInfo(String clusterName) {
51+
return getProject().getProviders().of(TestClusterValueSource.class, source -> {
52+
source.getParameters().getService().set(getRegistry());
53+
source.getParameters().getClusterName().set(clusterName);
54+
source.getParameters().getPath().set(getProject().getIsolated().getPath());
55+
});
56+
}
57+
5058
default void useCluster(Provider<ElasticsearchCluster> cluster) {
5159
useCluster(cluster.get());
5260
}

build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ private void configureStartClustersHook(Gradle gradle) {
249249
.forEach(awareTask -> {
250250
awareTask.doFirst(task -> {
251251
awareTask.beforeStart();
252-
awareTask.getClusters().forEach(awareTask.getRegistery().get()::maybeStartCluster);
252+
awareTask.getClusters().forEach(awareTask.getRegistry().get()::maybeStartCluster);
253253
});
254254
});
255255
});

build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersRegistry.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,23 @@ public void restart(String path, String clusterName) {
109109
cluster.restart();
110110
}
111111

112+
public void nextNodeToNextVersion(Provider<ElasticsearchCluster> cluster) {
113+
nextNodeToNextVersion(cluster.get());
114+
}
115+
116+
public void nextNodeToNextVersion(ElasticsearchCluster cluster) {
117+
nextNodeToNextVersion(cluster.getPath(), cluster.getName());
118+
}
119+
120+
public void nextNodeToNextVersion(String path, String clusterName) {
121+
ElasticsearchCluster cluster = runningClusters.stream()
122+
.filter(c -> c.getPath().equals(path))
123+
.filter(c -> c.getName().equals(clusterName))
124+
.findFirst()
125+
.orElseThrow();
126+
cluster.nextNodeToNextVersion();
127+
}
128+
112129
public void storeProcess(String id, Process esProcess) {
113130
nodeProcesses.put(id, esProcess);
114131
}

qa/ccs-rolling-upgrade-remote-cluster/build.gradle

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,11 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
4646
useCluster localCluster
4747
useCluster remoteCluster
4848
systemProperty 'tests.upgrade_from_version', bwcVersion.toString().replace('-SNAPSHOT', '')
49+
nonInputProperties.systemProperty('tests.rest.cluster', getClusterInfo(localCluster.name).map { it.allHttpSocketURI.join(",") })
50+
nonInputProperties.systemProperty('tests.rest.remote_cluster', getClusterInfo(remoteCluster.name).map { it.allHttpSocketURI.join(",") })
4951

50-
doFirst {
51-
nonInputProperties.systemProperty('tests.rest.cluster', localCluster.map(c -> c.allHttpSocketURI.join(",")))
52-
nonInputProperties.systemProperty('tests.rest.remote_cluster', remoteCluster.map(c -> c.allHttpSocketURI.join(",")))
53-
}
54-
55-
onlyIf("FIPS mode disabled") { buildParams.inFipsJvm == false }
52+
def fipsDisabled = buildParams.inFipsJvm == false
53+
onlyIf("FIPS mode disabled") { fipsDisabled }
5654
}
5755

5856
tasks.register("${baseName}#oldClusterTest", StandaloneRestIntegTestTask) {
@@ -63,28 +61,28 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
6361
cluster.nodes.forEach { node ->
6462
node.getAllTransportPortURI()
6563
}
66-
cluster.nextNodeToNextVersion()
64+
getRegistry().get().nextNodeToNextVersion(cluster)
6765
}
6866
}
6967

7068
tasks.register("${baseName}#oneThirdUpgraded", StandaloneRestIntegTestTask) {
7169
dependsOn "${baseName}#oldClusterTest"
7270
doFirst {
73-
remoteCluster.get().nextNodeToNextVersion()
71+
getRegistry().get().nextNodeToNextVersion(remoteCluster)
7472
}
7573
}
7674

7775
tasks.register("${baseName}#twoThirdUpgraded", StandaloneRestIntegTestTask) {
7876
dependsOn "${baseName}#oneThirdUpgraded"
7977
doFirst {
80-
remoteCluster.get().nextNodeToNextVersion()
78+
getRegistry().get().nextNodeToNextVersion(remoteCluster)
8179
}
8280
}
8381

8482
tasks.register("${baseName}#fullUpgraded", StandaloneRestIntegTestTask) {
8583
dependsOn "${baseName}#twoThirdUpgraded"
8684
doFirst {
87-
remoteCluster.get().nextNodeToNextVersion()
85+
getRegistry().get().nextNodeToNextVersion(remoteCluster)
8886
}
8987
}
9088

qa/mixed-cluster/build.gradle

Lines changed: 17 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
7777
def baseCluster = testClusters.register(baseName) {
7878
versions = [bwcVersion.toString(), project.version]
7979
numberOfNodes = 4
80-
setting 'path.repo', "${buildDir}/cluster/shared/repo/${baseName}"
80+
setting 'path.repo', "${layout.buildDirectory.asFile.get()}/cluster/shared/repo/${baseName}"
8181
setting 'xpack.security.enabled', 'false'
8282
/* There is a chance we have more master changes than "normal", so to avoid this test from failing,
8383
we increase the threshold (as this purpose of this test isn't to test that specific indicator). */
@@ -90,50 +90,32 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
9090
tasks.register("${baseName}#mixedClusterTest", StandaloneRestIntegTestTask) {
9191
useCluster baseCluster
9292
mustRunAfter("precommit")
93-
Provider<TestClustersRegistry> serviceProvider = GradleUtils.getBuildService(
94-
project.gradle.sharedServices,
95-
TestClustersPlugin.REGISTRY_SERVICE_NAME
96-
)
97-
98-
def baseInfo = project.getProviders().of(TestClusterValueSource.class) {
99-
it.parameters.path.set(clusterPath)
100-
it.parameters.clusterName.set(baseName)
101-
it.parameters.service = serviceProvider
102-
}.map { it.getAllHttpSocketURI() }
103-
104-
def baseInfoAfterOneNodeUpdate = project.getProviders().of(TestClusterValueSource.class) {
105-
it.parameters.path.set(clusterPath)
106-
it.parameters.clusterName.set(baseName)
107-
it.parameters.service = serviceProvider
108-
}.map { it.getAllHttpSocketURI() }
109-
110-
def baseInfoAfterTwoNodesUpdate = project.getProviders().of(TestClusterValueSource.class) {
111-
it.parameters.path.set(clusterPath)
112-
it.parameters.clusterName.set(baseName)
113-
it.parameters.service = serviceProvider
114-
}.map { it.getAllHttpSocketURI() }
115-
def nonInputProps = nonInputProperties
116-
def sharedRepoFolder = new File(buildDir, "cluster/shared/repo/${baseName}")
93+
def baseInfo = getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") }
94+
def baseInfoAfterOneNodeUpdate = getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") }
95+
def baseInfoAfterTwoNodesUpdate = getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") }
96+
def sharedRepoFolder = layout.buildDirectory.file("cluster/shared/repo/${baseName}").get().asFile
11797
doFirst {
11898
delete(sharedRepoFolder)
11999
// Getting the endpoints causes a wait for the cluster
120100
println "Test cluster endpoints are: ${-> baseInfo.get().join(",")}"
121101
println "Upgrading one node to create a mixed cluster"
122-
baseCluster.get().nextNodeToNextVersion()
102+
getRegistry().get().nextNodeToNextVersion(baseCluster)
103+
123104
// Getting the endpoints causes a wait for the cluster
124-
println "Upgrade complete, endpoints are: ${-> baseInfoAfterOneNodeUpdate.get().join(",")}"
105+
println "Upgrade complete, endpoints are: ${-> baseInfoAfterOneNodeUpdate.get()}"
125106
println "Upgrading another node to create a mixed cluster"
126-
baseCluster.get().nextNodeToNextVersion()
127-
nonInputProps.systemProperty('tests.rest.cluster', baseInfoAfterTwoNodesUpdate.map(c -> c.join(",")))
128-
nonInputProps.systemProperty('tests.clustername', baseName)
129-
if (excludeList.isEmpty() == false) {
130-
systemProperty 'tests.rest.blacklist', excludeList.join(',')
131-
}
107+
getRegistry().get().nextNodeToNextVersion(baseCluster)
108+
}
109+
if (excludeList.isEmpty() == false) {
110+
systemProperty 'tests.rest.blacklist', excludeList.join(',')
132111
}
133-
systemProperty 'tests.path.repo', "${buildDir}/cluster/shared/repo/${baseName}"
112+
nonInputProperties.systemProperty('tests.rest.cluster', baseInfoAfterTwoNodesUpdate)
113+
nonInputProperties.systemProperty('tests.clustername', baseName)
114+
systemProperty 'tests.path.repo', "${layout.buildDirectory.file("cluster/shared/repo/${baseName}").get().asFile}"
134115
systemProperty 'tests.bwc_nodes_version', bwcVersion.toString().replace('-SNAPSHOT', '')
135116
systemProperty 'tests.new_nodes_version', project.version.toString().replace('-SNAPSHOT', '')
136-
// onlyIf("BWC tests disabled") { project.bwc_tests_enabled }
117+
def bwcEnabled = project.bwc_tests_enabled
118+
onlyIf("BWC tests disabled") { bwcEnabled }
137119
}
138120

139121
tasks.register(bwcTaskName(bwcVersion)) {

qa/rolling-upgrade-legacy/build.gradle

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
4040
numberOfNodes = 3
4141

4242
setting 'repositories.url.allowed_urls', 'http://snapshot.test*'
43-
setting 'path.repo', "${buildDir}/cluster/shared/repo/${baseName}"
43+
setting 'path.repo', "${layout.buildDirectory.get().asFile}/cluster/shared/repo/${baseName}"
4444
setting 'xpack.security.enabled', 'false'
4545
requiresFeature 'es.index_mode_feature_flag_registered', Version.fromString("8.0.0")
4646
}
@@ -52,12 +52,12 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
5252
useCluster baseCluster
5353
mustRunAfter("precommit")
5454
doFirst {
55-
delete("${buildDir}/cluster/shared/repo/${baseName}")
55+
delete("${layout.buildDirectory.get().asFile}/cluster/shared/repo/${baseName}")
5656
}
5757
def excludeList = []
5858
systemProperty 'tests.rest.suite', 'old_cluster'
5959
systemProperty 'tests.upgrade_from_version', oldVersion
60-
nonInputProperties.systemProperty('tests.rest.cluster', baseCluster.map(c -> c.allHttpSocketURI.join(",")))
60+
nonInputProperties.systemProperty('tests.rest.cluster', getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") })
6161
nonInputProperties.systemProperty('tests.clustername', baseName)
6262
if (excludeList.isEmpty() == false) {
6363
systemProperty 'tests.rest.blacklist', excludeList.join(',')
@@ -68,12 +68,12 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
6868
dependsOn "${baseName}#oldClusterTest"
6969
useCluster baseCluster
7070
doFirst {
71-
baseCluster.get().nextNodeToNextVersion()
71+
getRegistry().get().nextNodeToNextVersion(baseCluster)
7272
}
7373
systemProperty 'tests.rest.suite', 'mixed_cluster'
7474
systemProperty 'tests.upgrade_from_version', oldVersion
7575
systemProperty 'tests.first_round', 'true'
76-
nonInputProperties.systemProperty('tests.rest.cluster', baseCluster.map(c -> c.allHttpSocketURI.join(",")))
76+
nonInputProperties.systemProperty('tests.rest.cluster', getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") })
7777
nonInputProperties.systemProperty('tests.clustername', baseName)
7878
def excludeList = []
7979
if (excludeList.isEmpty() == false) {
@@ -85,12 +85,12 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
8585
dependsOn "${baseName}#oneThirdUpgradedTest"
8686
useCluster baseCluster
8787
doFirst {
88-
baseCluster.get().nextNodeToNextVersion()
88+
getRegistry().get().nextNodeToNextVersion(baseCluster)
8989
}
9090
systemProperty 'tests.rest.suite', 'mixed_cluster'
9191
systemProperty 'tests.upgrade_from_version', oldVersion
9292
systemProperty 'tests.first_round', 'false'
93-
nonInputProperties.systemProperty('tests.rest.cluster', baseCluster.map(c -> c.allHttpSocketURI.join(",")))
93+
nonInputProperties.systemProperty('tests.rest.cluster', getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") })
9494
nonInputProperties.systemProperty('tests.clustername', baseName)
9595
def excludeList = []
9696
if (excludeList.isEmpty() == false) {
@@ -101,12 +101,12 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
101101
tasks.register("${baseName}#upgradedClusterTest", StandaloneRestIntegTestTask) {
102102
dependsOn "${baseName}#twoThirdsUpgradedTest"
103103
doFirst {
104-
baseCluster.get().nextNodeToNextVersion()
104+
getRegistry().get().nextNodeToNextVersion(baseCluster)
105105
}
106106
useCluster testClusters.named(baseName)
107107
systemProperty 'tests.rest.suite', 'upgraded_cluster'
108108
systemProperty 'tests.upgrade_from_version', oldVersion
109-
nonInputProperties.systemProperty('tests.rest.cluster', baseCluster.map(c -> c.allHttpSocketURI.join(",")))
109+
nonInputProperties.systemProperty('tests.rest.cluster', getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") })
110110
nonInputProperties.systemProperty('tests.clustername', baseName)
111111
def excludeList = []
112112
if (excludeList.isEmpty() == false) {

x-pack/plugin/ccr/qa/downgrade-to-basic-license/build.gradle

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,7 @@ tasks.register("follow-cluster", RestIntegTestTask) {
7171
useCluster leaderCluster
7272
systemProperty 'tests.target_cluster', 'follow'
7373
nonInputProperties.systemProperty 'java.security.policy', "file://${policyFile}"
74-
Provider<TestClustersRegistry> serviceProvider = GradleUtils.getBuildService(
75-
project.gradle.sharedServices,
76-
TestClustersPlugin.REGISTRY_SERVICE_NAME
77-
)
78-
def leaderInfo = project.getProviders().of(TestClusterValueSource.class) {
79-
it.parameters.path.set(clusterPath)
80-
it.parameters.clusterName.set("leader-cluster")
81-
it.parameters.service = serviceProvider
82-
}
83-
def followInfo = project.getProviders().of(TestClusterValueSource.class) {
84-
it.parameters.path.set(clusterPath)
85-
it.parameters.clusterName.set("follow-cluster")
86-
it.parameters.service = serviceProvider
87-
}
88-
def leaderUri = leaderInfo.map { it.getAllHttpSocketURI().get(0) }
89-
def followerUri = followInfo.map { it.getAllHttpSocketURI().get(0) }
90-
91-
nonInputProperties.systemProperty 'tests.leader_host', leaderUri
74+
nonInputProperties.systemProperty 'tests.leader_host', getClusterInfo('leader-cluster').map { it.getAllHttpSocketURI().get(0) }
9275
nonInputProperties.systemProperty 'log', followCluster.map(c -> c.getFirstNode().getServerLog())
9376
}
9477

x-pack/plugin/ccr/qa/multi-cluster/build.gradle

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def leaderCluster = testClusters.register('leader-cluster') {
2222
setting 'xpack.license.self_generated.type', 'trial'
2323
setting 'xpack.security.enabled', 'true'
2424
user username: 'admin', password: 'admin-password', role: 'superuser'
25-
setting 'path.repo', "${buildDir}/cluster/shared/repo/leader-cluster"
25+
setting 'path.repo', "${layout.buildDirectory.asFile.get()}/cluster/shared/repo/leader-cluster"
2626
}
2727

2828
def middleCluster = testClusters.register('middle-cluster') {
@@ -48,25 +48,16 @@ def middleCluster = testClusters.register('middle-cluster') {
4848
tasks.register("leader-cluster", RestIntegTestTask) {
4949
mustRunAfter("precommit")
5050
systemProperty 'tests.target_cluster', 'leader'
51-
systemProperty 'tests.leader_cluster_repository_path', "${buildDir}/cluster/shared/repo/leader-cluster"
51+
systemProperty 'tests.leader_cluster_repository_path', "${layout.buildDirectory.asFile.get()}/cluster/shared/repo/leader-cluster"
5252
}
5353

5454
tasks.register("middle-cluster", RestIntegTestTask) {
5555
dependsOn "leader-cluster"
5656
useCluster testClusters.named("leader-cluster")
5757
systemProperty 'tests.target_cluster', 'middle'
58-
systemProperty 'tests.leader_cluster_repository_path', "${buildDir}/cluster/shared/repo/leader-cluster"
58+
systemProperty 'tests.leader_cluster_repository_path', "${layout.buildDirectory.asFile.get()}/cluster/shared/repo/leader-cluster"
5959

60-
Provider<TestClustersRegistry> serviceProvider = GradleUtils.getBuildService(
61-
project.gradle.sharedServices,
62-
TestClustersPlugin.REGISTRY_SERVICE_NAME
63-
)
64-
65-
def leaderUri = project.getProviders().of(TestClusterValueSource.class) {
66-
it.parameters.path.set(clusterPath)
67-
it.parameters.clusterName.set("leader-cluster")
68-
it.parameters.service = serviceProvider
69-
}.map { it.allHttpSocketURI.get(0) }
60+
def leaderUri = getClusterInfo('leader-cluster').map { it.allHttpSocketURI.get(0) }
7061
nonInputProperties.systemProperty 'tests.leader_host', leaderUri
7162
}
7263

@@ -75,24 +66,10 @@ tasks.register('follow-cluster', RestIntegTestTask) {
7566
useCluster leaderCluster
7667
useCluster middleCluster
7768
systemProperty 'tests.target_cluster', 'follow'
78-
systemProperty 'tests.leader_cluster_repository_path', "${buildDir}/cluster/shared/repo/leader-cluster"
79-
80-
Provider<TestClustersRegistry> serviceProvider = GradleUtils.getBuildService(
81-
project.gradle.sharedServices,
82-
TestClustersPlugin.REGISTRY_SERVICE_NAME
83-
)
84-
85-
def leaderUri = project.getProviders().of(TestClusterValueSource.class) {
86-
it.parameters.path.set(clusterPath)
87-
it.parameters.clusterName.set("leader-cluster")
88-
it.parameters.service = serviceProvider
89-
}.map { it.allHttpSocketURI.get(0) }
69+
systemProperty 'tests.leader_cluster_repository_path', "${layout.buildDirectory.asFile.get()}/cluster/shared/repo/leader-cluster"
9070

91-
def middleUri = project.getProviders().of(TestClusterValueSource.class) {
92-
it.parameters.path.set(clusterPath)
93-
it.parameters.clusterName.set("middle-cluster")
94-
it.parameters.service = serviceProvider
95-
}.map { it.allHttpSocketURI.get(0) }
71+
def leaderUri = getClusterInfo('leader-cluster').map { it.allHttpSocketURI.get(0) }
72+
def middleUri = getClusterInfo('middle-cluster').map { it.allHttpSocketURI.get(0) }
9673
nonInputProperties.systemProperty 'tests.leader_host', leaderUri
9774
nonInputProperties.systemProperty 'tests.middle_host', middleUri
9875
}

x-pack/plugin/ccr/qa/non-compliant-license/build.gradle

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,7 @@ tasks.register('follow-cluster', RestIntegTestTask) {
5353
useCluster leaderCluster
5454
systemProperty 'tests.target_cluster', 'follow'
5555

56-
Provider<TestClustersRegistry> serviceProvider = GradleUtils.getBuildService(
57-
project.gradle.sharedServices,
58-
TestClustersPlugin.REGISTRY_SERVICE_NAME
59-
)
60-
def followInfo = project.getProviders().of(TestClusterValueSource.class) {
61-
it.parameters.path.set(clusterPath)
62-
it.parameters.clusterName.set("follow-cluster")
63-
it.parameters.service = serviceProvider
64-
}
65-
def followUri = followInfo.map { it.allHttpSocketURI.get(0) }
66-
56+
def followUri = getClusterInfo('follow-cluster').map { it.allHttpSocketURI.get(0) }
6757
nonInputProperties.systemProperty 'tests.leader_host', followUri
6858
}
6959

0 commit comments

Comments
 (0)