@@ -30,6 +30,26 @@ task bwcTest {
30
30
}
31
31
32
32
for (Version version : bwcVersions. wireCompatible) {
33
+ /*
34
+ * The goal here is to:
35
+ * <ul>
36
+ * <li>start three nodes on the old version
37
+ * <li>run tests with systemProperty 'tests.rest.suite', 'old_cluster'
38
+ * <li>shut down one node
39
+ * <li>start a node with the new version
40
+ * <li>run tests with systemProperty 'tests.rest.suite', 'mixed_cluster'
41
+ * <li>shut down one node on the old version
42
+ * <li>start a node with the new version
43
+ * <li>run tests with systemProperty 'tests.rest.suite', 'mixed_cluster' again
44
+ * <li>shut down the last node with the old version
45
+ * <li>start a node with the new version
46
+ * <li>run tests with systemProperty 'tests.rest.suite', 'upgraded_cluster'
47
+ * <li>shut down the entire cluster
48
+ * </ul>
49
+ *
50
+ * Be careful: gradle dry run spits out tasks in the wrong order but,
51
+ * strangely, running the tasks works properly.
52
+ */
33
53
String baseName = " v${ version} "
34
54
35
55
Task oldClusterTest = tasks. create(name : " ${ baseName} #oldClusterTest" , type : RestIntegTestTask ) {
@@ -39,8 +59,8 @@ for (Version version : bwcVersions.wireCompatible) {
39
59
Object extension = extensions. findByName(" ${ baseName} #oldClusterTestCluster" )
40
60
configure(extensions. findByName(" ${ baseName} #oldClusterTestCluster" )) {
41
61
bwcVersion = version
42
- numBwcNodes = 2
43
- numNodes = 2
62
+ numBwcNodes = 3
63
+ numNodes = 3
44
64
clusterName = ' rolling-upgrade'
45
65
setting ' repositories.url.allowed_urls' , ' http://snapshot.test*'
46
66
setting ' node.attr.gen' , ' old'
@@ -54,45 +74,57 @@ for (Version version : bwcVersions.wireCompatible) {
54
74
systemProperty ' tests.rest.suite' , ' old_cluster'
55
75
}
56
76
57
- Task mixedClusterTest = tasks. create(name : " ${ baseName} #mixedClusterTest" , type : RestIntegTestTask )
77
+ Closure configureUpgradeCluster = {String name , Task lastRunner , int stopNode , Closure unicastSeed ->
78
+ configure(extensions. findByName(" ${ baseName} #${ name} " )) {
79
+ dependsOn lastRunner, " ${ baseName} #oldClusterTestCluster#node${ stopNode} .stop"
80
+ clusterName = ' rolling-upgrade'
81
+ unicastTransportUri = { seedNode , node , ant -> unicastSeed() }
82
+ minimumMasterNodes = { 3 }
83
+ /* Override the data directory so the new node always gets the node we
84
+ * just stopped's data directory. */
85
+ dataDir = { nodeNumber -> oldClusterTest. nodes[stopNode]. dataDir }
86
+ setting ' repositories.url.allowed_urls' , ' http://snapshot.test*'
87
+ }
88
+ }
58
89
59
- configure(extensions . findByName( " ${ baseName} #mixedClusterTestCluster " )) {
60
- dependsOn oldClusterTestRunner, " ${ baseName } #oldClusterTestCluster#node1.stop "
61
- clusterName = ' rolling-upgrade '
62
- unicastTransportUri = { seedNode , node , ant -> oldClusterTest. nodes. get(0 ). transportUri() }
63
- minimumMasterNodes = { 2 }
64
- /* Override the data directory so the new node always gets the node we
65
- * just stopped's data directory. */
66
- dataDir = { nodeNumber -> oldClusterTest . nodes[ 1 ] . dataDir }
67
- setting ' repositories.url.allowed_urls ' , ' http://snapshot.test* '
68
- setting ' node.attr.gen ' , ' new '
90
+ Task oneThirdUpgradedTest = tasks . create( name : " ${ baseName} #oneThirdUpgradedTest " , type : RestIntegTestTask )
91
+
92
+ configureUpgradeCluster( " oneThirdUpgradedTestCluster " , oldClusterTestRunner,
93
+ 0 , { oldClusterTest. nodes. get(1 ). transportUri() })
94
+
95
+ Task oneThirdUpgradedTestRunner = tasks . getByName( " ${ baseName } #oneThirdUpgradedTestRunner " )
96
+ oneThirdUpgradedTestRunner . configure {
97
+ systemProperty ' tests.rest.suite ' , ' mixed_cluster '
98
+ systemProperty ' tests.first_round ' , ' true '
99
+ finalizedBy " ${ baseName } #oldClusterTestCluster#node1.stop "
69
100
}
70
101
71
- Task mixedClusterTestRunner = tasks. getByName(" ${ baseName} #mixedClusterTestRunner" )
72
- mixedClusterTestRunner. configure {
102
+ Task twoThirdsUpgradedTest = tasks. create(name : " ${ baseName} #twoThirdsUpgradedTest" , type : RestIntegTestTask )
103
+
104
+ configureUpgradeCluster(" twoThirdsUpgradedTestCluster" , oneThirdUpgradedTestRunner,
105
+ 1 , { oneThirdUpgradedTest. nodes. get(0 ). transportUri() })
106
+
107
+ Task twoThirdsUpgradedTestRunner = tasks. getByName(" ${ baseName} #twoThirdsUpgradedTestRunner" )
108
+ twoThirdsUpgradedTestRunner. configure {
73
109
systemProperty ' tests.rest.suite' , ' mixed_cluster'
74
- finalizedBy " ${ baseName} #oldClusterTestCluster#node0.stop"
110
+ systemProperty ' tests.first_round' , ' false'
111
+ finalizedBy " ${ baseName} #oldClusterTestCluster#node2.stop"
75
112
}
76
113
77
114
Task upgradedClusterTest = tasks. create(name : " ${ baseName} #upgradedClusterTest" , type : RestIntegTestTask )
78
115
79
- configure(extensions. findByName(" ${ baseName} #upgradedClusterTestCluster" )) {
80
- dependsOn mixedClusterTestRunner, " ${ baseName} #oldClusterTestCluster#node0.stop"
81
- clusterName = ' rolling-upgrade'
82
- unicastTransportUri = { seedNode , node , ant -> mixedClusterTest. nodes. get(0 ). transportUri() }
83
- minimumMasterNodes = { 2 }
84
- /* Override the data directory so the new node always gets the node we
85
- * just stopped's data directory. */
86
- dataDir = { nodeNumber -> oldClusterTest. nodes[0 ]. dataDir}
87
- setting ' repositories.url.allowed_urls' , ' http://snapshot.test*'
88
- setting ' node.attr.gen' , ' new'
89
- }
116
+ configureUpgradeCluster(" upgradedClusterTestCluster" , twoThirdsUpgradedTestRunner,
117
+ 2 , { twoThirdsUpgradedTest. nodes. get(0 ). transportUri() })
90
118
91
119
Task upgradedClusterTestRunner = tasks. getByName(" ${ baseName} #upgradedClusterTestRunner" )
92
120
upgradedClusterTestRunner. configure {
93
121
systemProperty ' tests.rest.suite' , ' upgraded_cluster'
94
- // only need to kill the mixed cluster tests node here because we explicitly told it to not stop nodes upon completion
95
- finalizedBy " ${ baseName} #mixedClusterTestCluster#stop"
122
+ /*
123
+ * Force stopping all the upgraded nodes after the test runner
124
+ * so they are alive during the test.
125
+ */
126
+ finalizedBy " ${ baseName} #oneThirdUpgradedTestCluster#stop"
127
+ finalizedBy " ${ baseName} #twoThirdsUpgradedTestCluster#stop"
96
128
}
97
129
98
130
Task versionBwcTest = tasks. create(name : " ${ baseName} #bwcTest" ) {
0 commit comments