Avoid crashing on using the index.lifecycle.name in the API body (#1060)

* Avoid crashing on using the index.lifecycle.name in the API body

Signed-off-by: frotsch <frotsch@mailbox.org>
This commit is contained in:
frotsch 2021-08-10 17:03:19 +02:00 committed by GitHub
parent fbdc180944
commit c34f9ab75c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 1 deletions

View File

@ -1044,7 +1044,10 @@ public class MetadataCreateIndexService {
for (final String key : settings.keySet()) { for (final String key : settings.keySet()) {
final Setting<?> setting = indexScopedSettings.get(key); final Setting<?> setting = indexScopedSettings.get(key);
if (setting == null) { if (setting == null) {
assert indexScopedSettings.isPrivateSetting(key) : "expected [" + key + "] to be private but it was not"; // see: https://github.com/opensearch-project/OpenSearch/issues/1019
if(!indexScopedSettings.isPrivateSetting(key)) {
validationErrors.add("expected [" + key + "] to be private but it was not");
}
} else if (setting.isPrivateIndex()) { } else if (setting.isPrivateIndex()) {
validationErrors.add("private index setting [" + key + "] can not be set explicitly"); validationErrors.add("private index setting [" + key + "] can not be set explicitly");
} }

View File

@ -66,6 +66,7 @@ import org.opensearch.common.unit.TimeValue;
import org.opensearch.common.util.BigArrays; import org.opensearch.common.util.BigArrays;
import org.opensearch.common.xcontent.NamedXContentRegistry; import org.opensearch.common.xcontent.NamedXContentRegistry;
import org.opensearch.common.xcontent.XContentFactory; import org.opensearch.common.xcontent.XContentFactory;
import org.opensearch.env.Environment;
import org.opensearch.index.Index; import org.opensearch.index.Index;
import org.opensearch.index.IndexNotFoundException; import org.opensearch.index.IndexNotFoundException;
import org.opensearch.index.IndexSettings; import org.opensearch.index.IndexSettings;
@ -963,6 +964,31 @@ public class MetadataCreateIndexServiceTests extends OpenSearchTestCase {
+ "and [index.translog.retention.size] are deprecated and effectively ignored. They will be removed in a future version."); + "and [index.translog.retention.size] are deprecated and effectively ignored. They will be removed in a future version.");
} }
public void testIndexLifecycleNameSetting() {
// see: https://github.com/opensearch-project/OpenSearch/issues/1019
final Settings ilnSetting = Settings.builder().put("index.lifecycle.name", "dummy").build();
withTemporaryClusterService(((clusterService, threadPool) -> {
MetadataCreateIndexService checkerService = new MetadataCreateIndexService(
Settings.EMPTY,
clusterService,
null,
null,
null,
createTestShardLimitService(randomIntBetween(1, 1000), clusterService),
new Environment(Settings.builder().put("path.home", "dummy").build(), null),
new IndexScopedSettings(ilnSetting, Collections.emptySet()),
threadPool,
null,
new SystemIndices(Collections.emptyMap()),
true
);
final List<String> validationErrors = checkerService.getIndexSettingsValidationErrors(ilnSetting, true);
assertThat(validationErrors.size(), is(1));
assertThat(validationErrors.get(0), is("expected [index.lifecycle.name] to be private but it was not"));
}));
}
private IndexTemplateMetadata addMatchingTemplate(Consumer<IndexTemplateMetadata.Builder> configurator) { private IndexTemplateMetadata addMatchingTemplate(Consumer<IndexTemplateMetadata.Builder> configurator) {
IndexTemplateMetadata.Builder builder = templateMetadataBuilder("template1", "te*"); IndexTemplateMetadata.Builder builder = templateMetadataBuilder("template1", "te*");
configurator.accept(builder); configurator.accept(builder);