Skip to content

Commit f6062cd

Browse files
authored
[8.17] [Gradle] Make rolling upgrade tests configuration cache compatible (#119577) (#120316)
* [Gradle] Make rolling upgrade tests configuration cache compatible (#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 bffc1d9 commit f6062cd

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
@@ -75,7 +75,7 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
7575
def baseCluster = testClusters.register(baseName) {
7676
versions = [bwcVersion.toString(), project.version]
7777
numberOfNodes = 4
78-
setting 'path.repo', "${buildDir}/cluster/shared/repo/${baseName}"
78+
setting 'path.repo', "${layout.buildDirectory.asFile.get()}/cluster/shared/repo/${baseName}"
7979
setting 'xpack.security.enabled', 'false'
8080
setting "xpack.license.self_generated.type", "trial"
8181
/* There is a chance we have more master changes than "normal", so to avoid this test from failing,
@@ -89,50 +89,32 @@ buildParams.bwcVersions.withWireCompatible { bwcVersion, baseName ->
8989
tasks.register("${baseName}#mixedClusterTest", StandaloneRestIntegTestTask) {
9090
useCluster baseCluster
9191
mustRunAfter("precommit")
92-
Provider<TestClustersRegistry> serviceProvider = GradleUtils.getBuildService(
93-
project.gradle.sharedServices,
94-
TestClustersPlugin.REGISTRY_SERVICE_NAME
95-
)
96-
97-
def baseInfo = project.getProviders().of(TestClusterValueSource.class) {
98-
it.parameters.path.set(clusterPath)
99-
it.parameters.clusterName.set(baseName)
100-
it.parameters.service = serviceProvider
101-
}.map { it.getAllHttpSocketURI() }
102-
103-
def baseInfoAfterOneNodeUpdate = project.getProviders().of(TestClusterValueSource.class) {
104-
it.parameters.path.set(clusterPath)
105-
it.parameters.clusterName.set(baseName)
106-
it.parameters.service = serviceProvider
107-
}.map { it.getAllHttpSocketURI() }
108-
109-
def baseInfoAfterTwoNodesUpdate = project.getProviders().of(TestClusterValueSource.class) {
110-
it.parameters.path.set(clusterPath)
111-
it.parameters.clusterName.set(baseName)
112-
it.parameters.service = serviceProvider
113-
}.map { it.getAllHttpSocketURI() }
114-
def nonInputProps = nonInputProperties
115-
def sharedRepoFolder = new File(buildDir, "cluster/shared/repo/${baseName}")
92+
def baseInfo = getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") }
93+
def baseInfoAfterOneNodeUpdate = getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") }
94+
def baseInfoAfterTwoNodesUpdate = getClusterInfo(baseName).map { it.allHttpSocketURI.join(",") }
95+
def sharedRepoFolder = layout.buildDirectory.file("cluster/shared/repo/${baseName}").get().asFile
11696
doFirst {
11797
delete(sharedRepoFolder)
11898
// Getting the endpoints causes a wait for the cluster
11999
println "Test cluster endpoints are: ${-> baseInfo.get().join(",")}"
120100
println "Upgrading one node to create a mixed cluster"
121-
baseCluster.get().nextNodeToNextVersion()
101+
getRegistry().get().nextNodeToNextVersion(baseCluster)
102+
122103
// Getting the endpoints causes a wait for the cluster
123-
println "Upgrade complete, endpoints are: ${-> baseInfoAfterOneNodeUpdate.get().join(",")}"
104+
println "Upgrade complete, endpoints are: ${-> baseInfoAfterOneNodeUpdate.get()}"
124105
println "Upgrading another node to create a mixed cluster"
125-
baseCluster.get().nextNodeToNextVersion()
126-
nonInputProps.systemProperty('tests.rest.cluster', baseInfoAfterTwoNodesUpdate.map(c -> c.join(",")))
127-
nonInputProps.systemProperty('tests.clustername', baseName)
128-
if (excludeList.isEmpty() == false) {
129-
systemProperty 'tests.rest.blacklist', excludeList.join(',')
130-
}
106+
getRegistry().get().nextNodeToNextVersion(baseCluster)
107+
}
108+
if (excludeList.isEmpty() == false) {
109+
systemProperty 'tests.rest.blacklist', excludeList.join(',')
131110
}
132-
systemProperty 'tests.path.repo', "${buildDir}/cluster/shared/repo/${baseName}"
111+
nonInputProperties.systemProperty('tests.rest.cluster', baseInfoAfterTwoNodesUpdate)
112+
nonInputProperties.systemProperty('tests.clustername', baseName)
113+
systemProperty 'tests.path.repo', "${layout.buildDirectory.file("cluster/shared/repo/${baseName}").get().asFile}"
133114
systemProperty 'tests.bwc_nodes_version', bwcVersion.toString().replace('-SNAPSHOT', '')
134115
systemProperty 'tests.new_nodes_version', project.version.toString().replace('-SNAPSHOT', '')
135-
// onlyIf("BWC tests disabled") { project.bwc_tests_enabled }
116+
def bwcEnabled = project.bwc_tests_enabled
117+
onlyIf("BWC tests disabled") { bwcEnabled }
136118
}
137119

138120
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)