|
13 | 13 | import org.elasticsearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest; |
14 | 14 | import org.elasticsearch.action.admin.cluster.configuration.TransportAddVotingConfigExclusionsAction; |
15 | 15 | import org.elasticsearch.common.settings.Settings; |
16 | | -import org.elasticsearch.core.TimeValue; |
17 | | -import org.elasticsearch.discovery.MasterNotDiscoveredException; |
18 | 16 | import org.elasticsearch.index.query.QueryBuilders; |
19 | 17 | import org.elasticsearch.test.ESIntegTestCase; |
20 | 18 | import org.elasticsearch.test.ESIntegTestCase.ClusterScope; |
21 | 19 | import org.elasticsearch.test.ESIntegTestCase.Scope; |
22 | 20 |
|
23 | | -import java.io.IOException; |
24 | | - |
25 | 21 | import static org.elasticsearch.test.NodeRoles.dataOnlyNode; |
26 | 22 | import static org.elasticsearch.test.NodeRoles.masterNode; |
27 | 23 | import static org.elasticsearch.test.NodeRoles.nonDataNode; |
28 | 24 | import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; |
29 | | -import static org.hamcrest.Matchers.equalTo; |
30 | | -import static org.hamcrest.Matchers.nullValue; |
31 | 25 |
|
32 | 26 | @ClusterScope(scope = Scope.TEST, numDataNodes = 0, autoManageMasterNodes = false) |
33 | 27 | public class SpecificMasterNodesIT extends ESIntegTestCase { |
34 | 28 |
|
35 | | - public void testSimpleOnlyMasterNodeElection() throws IOException { |
| 29 | + public void testSimpleOnlyMasterNodeElection() throws Exception { |
36 | 30 | internalCluster().setBootstrapMasterNodeIndex(0); |
37 | 31 | logger.info("--> start data node / non master node"); |
38 | 32 | internalCluster().startNode(Settings.builder().put(dataOnlyNode()).put("discovery.initial_state_timeout", "1s")); |
39 | | - try { |
40 | | - assertThat( |
41 | | - clusterAdmin().prepareState(TEST_REQUEST_TIMEOUT) |
42 | | - .setMasterNodeTimeout(TimeValue.timeValueMillis(100)) |
43 | | - .get() |
44 | | - .getState() |
45 | | - .nodes() |
46 | | - .getMasterNodeId(), |
47 | | - nullValue() |
48 | | - ); |
49 | | - fail("should not be able to find master"); |
50 | | - } catch (MasterNotDiscoveredException e) { |
51 | | - // all is well, no master elected |
52 | | - } |
| 33 | + awaitMasterNotFound(); |
| 34 | + |
53 | 35 | logger.info("--> start master node"); |
54 | 36 | final String masterNodeName = internalCluster().startMasterOnlyNode(); |
55 | | - assertThat( |
56 | | - internalCluster().nonMasterClient() |
57 | | - .admin() |
58 | | - .cluster() |
59 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
60 | | - .get() |
61 | | - .getState() |
62 | | - .nodes() |
63 | | - .getMasterNode() |
64 | | - .getName(), |
65 | | - equalTo(masterNodeName) |
66 | | - ); |
67 | | - assertThat( |
68 | | - internalCluster().masterClient() |
69 | | - .admin() |
70 | | - .cluster() |
71 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
72 | | - .get() |
73 | | - .getState() |
74 | | - .nodes() |
75 | | - .getMasterNode() |
76 | | - .getName(), |
77 | | - equalTo(masterNodeName) |
78 | | - ); |
| 37 | + |
| 38 | + awaitMasterNode(internalCluster().getNonMasterNodeName(), masterNodeName); |
| 39 | + awaitMasterNode(internalCluster().getMasterName(), masterNodeName); |
79 | 40 |
|
80 | 41 | logger.info("--> stop master node"); |
81 | 42 | Settings masterDataPathSettings = internalCluster().dataPathSettings(internalCluster().getMasterName()); |
82 | 43 | internalCluster().stopCurrentMasterNode(); |
83 | 44 |
|
84 | | - try { |
85 | | - assertThat( |
86 | | - clusterAdmin().prepareState(TEST_REQUEST_TIMEOUT) |
87 | | - .setMasterNodeTimeout(TimeValue.timeValueMillis(100)) |
88 | | - .get() |
89 | | - .getState() |
90 | | - .nodes() |
91 | | - .getMasterNodeId(), |
92 | | - nullValue() |
93 | | - ); |
94 | | - fail("should not be able to find master"); |
95 | | - } catch (MasterNotDiscoveredException e) { |
96 | | - // all is well, no master elected |
97 | | - } |
| 45 | + awaitMasterNotFound(); |
98 | 46 |
|
99 | 47 | logger.info("--> start previous master node again"); |
100 | 48 | final String nextMasterEligibleNodeName = internalCluster().startNode( |
101 | 49 | Settings.builder().put(nonDataNode(masterNode())).put(masterDataPathSettings) |
102 | 50 | ); |
103 | | - assertThat( |
104 | | - internalCluster().nonMasterClient() |
105 | | - .admin() |
106 | | - .cluster() |
107 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
108 | | - .get() |
109 | | - .getState() |
110 | | - .nodes() |
111 | | - .getMasterNode() |
112 | | - .getName(), |
113 | | - equalTo(nextMasterEligibleNodeName) |
114 | | - ); |
115 | | - assertThat( |
116 | | - internalCluster().masterClient() |
117 | | - .admin() |
118 | | - .cluster() |
119 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
120 | | - .get() |
121 | | - .getState() |
122 | | - .nodes() |
123 | | - .getMasterNode() |
124 | | - .getName(), |
125 | | - equalTo(nextMasterEligibleNodeName) |
126 | | - ); |
| 51 | + awaitMasterNode(internalCluster().getNonMasterNodeName(), nextMasterEligibleNodeName); |
| 52 | + awaitMasterNode(internalCluster().getMasterName(), nextMasterEligibleNodeName); |
127 | 53 | } |
128 | 54 |
|
129 | 55 | public void testElectOnlyBetweenMasterNodes() throws Exception { |
130 | 56 | internalCluster().setBootstrapMasterNodeIndex(0); |
131 | 57 | logger.info("--> start data node / non master node"); |
132 | 58 | internalCluster().startNode(Settings.builder().put(dataOnlyNode()).put("discovery.initial_state_timeout", "1s")); |
133 | | - try { |
134 | | - assertThat( |
135 | | - clusterAdmin().prepareState(TEST_REQUEST_TIMEOUT) |
136 | | - .setMasterNodeTimeout(TimeValue.timeValueMillis(100)) |
137 | | - .get() |
138 | | - .getState() |
139 | | - .nodes() |
140 | | - .getMasterNodeId(), |
141 | | - nullValue() |
142 | | - ); |
143 | | - fail("should not be able to find master"); |
144 | | - } catch (MasterNotDiscoveredException e) { |
145 | | - // all is well, no master elected |
146 | | - } |
| 59 | + awaitMasterNotFound(); |
| 60 | + |
147 | 61 | logger.info("--> start master node (1)"); |
148 | 62 | final String masterNodeName = internalCluster().startMasterOnlyNode(); |
149 | | - assertThat( |
150 | | - internalCluster().nonMasterClient() |
151 | | - .admin() |
152 | | - .cluster() |
153 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
154 | | - .get() |
155 | | - .getState() |
156 | | - .nodes() |
157 | | - .getMasterNode() |
158 | | - .getName(), |
159 | | - equalTo(masterNodeName) |
160 | | - ); |
161 | | - assertThat( |
162 | | - internalCluster().masterClient() |
163 | | - .admin() |
164 | | - .cluster() |
165 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
166 | | - .get() |
167 | | - .getState() |
168 | | - .nodes() |
169 | | - .getMasterNode() |
170 | | - .getName(), |
171 | | - equalTo(masterNodeName) |
172 | | - ); |
| 63 | + awaitMasterNode(internalCluster().getNonMasterNodeName(), masterNodeName); |
| 64 | + awaitMasterNode(internalCluster().getMasterName(), masterNodeName); |
173 | 65 |
|
174 | 66 | logger.info("--> start master node (2)"); |
175 | 67 | final String nextMasterEligableNodeName = internalCluster().startMasterOnlyNode(); |
176 | | - assertThat( |
177 | | - internalCluster().nonMasterClient() |
178 | | - .admin() |
179 | | - .cluster() |
180 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
181 | | - .get() |
182 | | - .getState() |
183 | | - .nodes() |
184 | | - .getMasterNode() |
185 | | - .getName(), |
186 | | - equalTo(masterNodeName) |
187 | | - ); |
188 | | - assertThat( |
189 | | - internalCluster().masterClient() |
190 | | - .admin() |
191 | | - .cluster() |
192 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
193 | | - .get() |
194 | | - .getState() |
195 | | - .nodes() |
196 | | - .getMasterNode() |
197 | | - .getName(), |
198 | | - equalTo(masterNodeName) |
199 | | - ); |
| 68 | + awaitMasterNode(internalCluster().getNonMasterNodeName(), masterNodeName); |
| 69 | + awaitMasterNode(internalCluster().getMasterName(), masterNodeName); |
200 | 70 |
|
201 | 71 | logger.info("--> closing master node (1)"); |
202 | 72 | client().execute( |
203 | 73 | TransportAddVotingConfigExclusionsAction.TYPE, |
204 | 74 | new AddVotingConfigExclusionsRequest(TEST_REQUEST_TIMEOUT, masterNodeName) |
205 | 75 | ).get(); |
206 | 76 | // removing the master from the voting configuration immediately triggers the master to step down |
207 | | - assertBusy(() -> { |
208 | | - assertThat( |
209 | | - internalCluster().nonMasterClient() |
210 | | - .admin() |
211 | | - .cluster() |
212 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
213 | | - .get() |
214 | | - .getState() |
215 | | - .nodes() |
216 | | - .getMasterNode() |
217 | | - .getName(), |
218 | | - equalTo(nextMasterEligableNodeName) |
219 | | - ); |
220 | | - assertThat( |
221 | | - internalCluster().masterClient() |
222 | | - .admin() |
223 | | - .cluster() |
224 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
225 | | - .get() |
226 | | - .getState() |
227 | | - .nodes() |
228 | | - .getMasterNode() |
229 | | - .getName(), |
230 | | - equalTo(nextMasterEligableNodeName) |
231 | | - ); |
232 | | - }); |
| 77 | + awaitMasterNode(internalCluster().getNonMasterNodeName(), nextMasterEligableNodeName); |
| 78 | + awaitMasterNode(internalCluster().getMasterName(), nextMasterEligableNodeName); |
| 79 | + |
233 | 80 | internalCluster().stopNode(masterNodeName); |
234 | | - assertThat( |
235 | | - internalCluster().nonMasterClient() |
236 | | - .admin() |
237 | | - .cluster() |
238 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
239 | | - .get() |
240 | | - .getState() |
241 | | - .nodes() |
242 | | - .getMasterNode() |
243 | | - .getName(), |
244 | | - equalTo(nextMasterEligableNodeName) |
245 | | - ); |
246 | | - assertThat( |
247 | | - internalCluster().masterClient() |
248 | | - .admin() |
249 | | - .cluster() |
250 | | - .prepareState(TEST_REQUEST_TIMEOUT) |
251 | | - .get() |
252 | | - .getState() |
253 | | - .nodes() |
254 | | - .getMasterNode() |
255 | | - .getName(), |
256 | | - equalTo(nextMasterEligableNodeName) |
257 | | - ); |
| 81 | + awaitMasterNode(internalCluster().getNonMasterNodeName(), nextMasterEligableNodeName); |
| 82 | + awaitMasterNode(internalCluster().getMasterName(), nextMasterEligableNodeName); |
258 | 83 | } |
259 | 84 |
|
260 | 85 | public void testAliasFilterValidation() { |
|
0 commit comments