|
19 | 19 |
|
20 | 20 | package org.elasticsearch.action.admin.indices.create; |
21 | 21 |
|
| 22 | +import com.carrotsearch.hppc.cursors.ObjectCursor; |
22 | 23 | import org.elasticsearch.ElasticsearchException; |
23 | 24 | import org.elasticsearch.action.ActionListener; |
24 | 25 | import org.elasticsearch.action.UnavailableShardsException; |
|
30 | 31 | import org.elasticsearch.cluster.ClusterState; |
31 | 32 | import org.elasticsearch.cluster.metadata.IndexMetaData; |
32 | 33 | import org.elasticsearch.cluster.metadata.MetaData; |
| 34 | +import org.elasticsearch.cluster.node.DiscoveryNode; |
33 | 35 | import org.elasticsearch.common.collect.ImmutableOpenMap; |
34 | 36 | import org.elasticsearch.common.settings.Settings; |
35 | 37 | import org.elasticsearch.common.unit.TimeValue; |
|
39 | 41 | import org.elasticsearch.test.ESIntegTestCase; |
40 | 42 | import org.elasticsearch.test.ESIntegTestCase.ClusterScope; |
41 | 43 | import org.elasticsearch.test.ESIntegTestCase.Scope; |
| 44 | +import org.elasticsearch.test.InternalTestCluster; |
42 | 45 |
|
43 | 46 | import java.util.HashMap; |
| 47 | +import java.util.HashSet; |
| 48 | +import java.util.Set; |
44 | 49 | import java.util.concurrent.CountDownLatch; |
45 | 50 | import java.util.concurrent.atomic.AtomicInteger; |
46 | 51 | import java.util.function.BiFunction; |
@@ -355,17 +360,29 @@ public void testIndexWithUnknownSetting() throws Exception { |
355 | 360 | client().admin().indices().prepareCreate("test").setSettings(settings).get(); |
356 | 361 | ensureGreen("test"); |
357 | 362 | final ClusterState state = client().admin().cluster().prepareState().get().getState(); |
358 | | - final IndexMetaData metaData = state.getMetaData().index("test"); |
359 | | - for (final NodeEnvironment services : internalCluster().getInstances(NodeEnvironment.class)) { |
360 | | - final IndexMetaData brokenMetaData = |
361 | | - IndexMetaData |
362 | | - .builder(metaData) |
363 | | - .settings(Settings.builder().put(metaData.getSettings()).put("index.foo", "true")) |
364 | | - .build(); |
365 | | - // so evil |
366 | | - IndexMetaData.FORMAT.write(brokenMetaData, services.indexPaths(brokenMetaData.getIndex())); |
| 363 | + |
| 364 | + final Set<String> dataOrMasterNodeNames = new HashSet<>(); |
| 365 | + for (final ObjectCursor<DiscoveryNode> node : state.nodes().getMasterAndDataNodes().values()) { |
| 366 | + assertTrue(dataOrMasterNodeNames.add(node.value.getName())); |
367 | 367 | } |
368 | | - internalCluster().fullRestart(); |
| 368 | + |
| 369 | + final IndexMetaData metaData = state.getMetaData().index("test"); |
| 370 | + internalCluster().fullRestart(new InternalTestCluster.RestartCallback() { |
| 371 | + @Override |
| 372 | + public Settings onNodeStopped(String nodeName) throws Exception { |
| 373 | + if (dataOrMasterNodeNames.contains(nodeName)) { |
| 374 | + final NodeEnvironment nodeEnvironment = internalCluster().getInstance(NodeEnvironment.class, nodeName); |
| 375 | + final IndexMetaData brokenMetaData = |
| 376 | + IndexMetaData |
| 377 | + .builder(metaData) |
| 378 | + .settings(Settings.builder().put(metaData.getSettings()).put("index.foo", true)) |
| 379 | + .build(); |
| 380 | + // so evil |
| 381 | + IndexMetaData.FORMAT.write(brokenMetaData, nodeEnvironment.indexPaths(brokenMetaData.getIndex())); |
| 382 | + } |
| 383 | + return Settings.EMPTY; |
| 384 | + } |
| 385 | + }); |
369 | 386 | ensureGreen(metaData.getIndex().getName()); // we have to wait for the index to show up in the metadata or we will fail in a race |
370 | 387 | final ClusterState stateAfterRestart = client().admin().cluster().prepareState().get().getState(); |
371 | 388 |
|
|
0 commit comments