|
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