Skip to content

Commit 209afa4

Browse files
Do not open indices with broken index settings
- remove the leniency on opening indices with unrecognized settings and instead such an index will be closed with the unrecognized settings archived - do not open any index with archived settings - users can remove archived settings via the wildcard archived - return illegal_argument_exception 400 status code when trying to open an index with broken/archived settings Relates to elastic#26995 Closes elastic#26998
1 parent e6d9325 commit 209afa4

File tree

6 files changed

+6
-61
lines changed

6 files changed

+6
-61
lines changed

server/src/main/java/org/elasticsearch/ElasticsearchException.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -988,10 +988,7 @@ private enum ElasticsearchExceptionHandle {
988988
org.elasticsearch.common.xcontent.NamedXContentRegistry.UnknownNamedObjectException::new, 148, Version.V_5_2_0),
989989
TOO_MANY_BUCKETS_EXCEPTION(MultiBucketConsumerService.TooManyBucketsException.class,
990990
MultiBucketConsumerService.TooManyBucketsException::new, 149,
991-
Version.V_7_0_0_alpha1),
992-
INDEX_OPEN_EXCEPTION(org.elasticsearch.indices.IndexOpenException.class,
993-
org.elasticsearch.indices.IndexOpenException::new, 150, Version.V_6_3_0);
994-
991+
Version.V_7_0_0_alpha1);
995992

996993
final Class<? extends ElasticsearchException> exceptionClass;
997994
final CheckedFunction<StreamInput, ? extends ElasticsearchException, IOException> constructor;

server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataIndexStateService.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.elasticsearch.common.inject.Inject;
4040
import org.elasticsearch.common.settings.Settings;
4141
import org.elasticsearch.index.Index;
42-
import org.elasticsearch.indices.IndexOpenException;
4342
import org.elasticsearch.indices.IndicesService;
4443
import org.elasticsearch.rest.RestStatus;
4544
import org.elasticsearch.snapshots.RestoreService;
@@ -195,8 +194,7 @@ public ClusterState execute(ClusterState currentState) {
195194
try {
196195
indicesService.verifyIndexMetadata(indexMetaData, indexMetaData, false);
197196
} catch (Exception e) {
198-
throw new IndexOpenException(indexMetaData.getIndex(),
199-
"Failed to open index! Failed to verify index " + indexMetaData.getIndex() + e.getMessage());
197+
throw new IllegalArgumentException("Failed to open index! Failed to verify index " + indexMetaData.getIndex(), e);
200198
}
201199

202200
mdBuilder.put(indexMetaData, true);

server/src/main/java/org/elasticsearch/indices/IndexOpenException.java

Lines changed: 0 additions & 47 deletions
This file was deleted.

server/src/test/java/org/elasticsearch/ExceptionSerializationTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,6 @@ public void testIds() {
815815
ids.put(147, org.elasticsearch.env.ShardLockObtainFailedException.class);
816816
ids.put(148, org.elasticsearch.common.xcontent.NamedXContentRegistry.UnknownNamedObjectException.class);
817817
ids.put(149, MultiBucketConsumerService.TooManyBucketsException.class);
818-
ids.put(150, org.elasticsearch.indices.IndexOpenException.class);
819818

820819
Map<Class<? extends ElasticsearchException>, Integer> reverse = new HashMap<>();
821820
for (Map.Entry<Integer, Class<? extends ElasticsearchException>> entry : ids.entrySet()) {

server/src/test/java/org/elasticsearch/action/admin/indices/create/CreateIndexIT.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import org.elasticsearch.env.NodeEnvironment;
3939
import org.elasticsearch.index.IndexNotFoundException;
4040
import org.elasticsearch.index.query.RangeQueryBuilder;
41-
import org.elasticsearch.indices.IndexOpenException;
4241
import org.elasticsearch.test.ESIntegTestCase;
4342
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
4443
import org.elasticsearch.test.ESIntegTestCase.Scope;
@@ -392,8 +391,8 @@ public Settings onNodeStopped(String nodeName) throws Exception {
392391
assertThat(stateAfterRestart.getMetaData().index(metaData.getIndex()).getState(), equalTo(IndexMetaData.State.CLOSE));
393392

394393
// try to open the index
395-
final ElasticsearchException e =
396-
expectThrows(IndexOpenException.class, () -> client().admin().indices().prepareOpen("test").get());
394+
final Exception e =
395+
expectThrows(IllegalArgumentException.class, () -> client().admin().indices().prepareOpen("test").get());
397396
assertThat(e, hasToString(containsString("Failed to verify index " + metaData.getIndex())));
398397
assertThat(e, hasToString(containsString("unknown setting [index.foo]")));
399398
}

server/src/test/java/org/elasticsearch/gateway/GatewayIndexStateIT.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import org.elasticsearch.discovery.zen.ElectMasterService;
4444
import org.elasticsearch.env.NodeEnvironment;
4545
import org.elasticsearch.indices.IndexClosedException;
46-
import org.elasticsearch.indices.IndexOpenException;
4746
import org.elasticsearch.node.Node;
4847
import org.elasticsearch.test.ESIntegTestCase;
4948
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
@@ -418,7 +417,7 @@ public void testDoNotOpenIndexWithUnknownOrAchivedSettings() throws Exception {
418417
assertEquals("true", state.getMetaData().index(metaData.getIndex()).getSettings().get("archived.index.unknown.setting"));
419418

420419
// try to open it with the archived setting - fail again with IndexOpenException
421-
ElasticsearchException ex = expectThrows(IndexOpenException.class, () -> client().admin().indices().prepareOpen("test").get());
420+
Exception ex = expectThrows(IllegalArgumentException.class, () -> client().admin().indices().prepareOpen("test").get());
422421
assertThat(ex.getMessage(), startsWith("Failed to open index! Failed to verify index " + metaData.getIndex()));
423422
assertThat(ex.getMessage(), containsString("unknown setting [archived.index.unknown.setting]"));
424423

@@ -480,7 +479,7 @@ public void testRecoverMissingAnalyzer() throws Exception {
480479
assertEquals(IndexMetaData.State.CLOSE, state.getMetaData().index(metaData.getIndex()).getState());
481480

482481
// try to open it with the broken setting - fail again!
483-
ElasticsearchException ex = expectThrows(IndexOpenException.class, () -> client().admin().indices().prepareOpen("test").get());
482+
Exception ex = expectThrows(IllegalArgumentException.class, () -> client().admin().indices().prepareOpen("test").get());
484483
assertThat(ex.getMessage(), startsWith("Failed to open index! Failed to verify index " + metaData.getIndex()));
485484
assertThat(ex.getMessage(), containsString("analyzer [test] not found for field [field1]"));
486485
}

0 commit comments

Comments
 (0)