diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaData.java b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaData.java index 88bf3a629afd1..36a1ae1aad0fa 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaData.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaData.java @@ -20,6 +20,7 @@ import com.carrotsearch.hppc.cursors.ObjectCursor; import com.carrotsearch.hppc.cursors.ObjectObjectCursor; +import org.apache.logging.log4j.LogManager; import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.Version; import org.elasticsearch.cluster.AbstractDiffable; @@ -32,6 +33,7 @@ import org.elasticsearch.common.compress.CompressedXContent; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.common.logging.DeprecationLogger; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.set.Sets; import org.elasticsearch.common.xcontent.ToXContent; @@ -51,6 +53,8 @@ public class IndexTemplateMetaData extends AbstractDiffable { + private static final DeprecationLogger deprecationLogger = new DeprecationLogger(LogManager.getLogger(IndexTemplateMetaData.class)); + private final String name; private final int order; @@ -97,6 +101,11 @@ public IndexTemplateMetaData(String name, int order, Integer version, this.patterns = patterns; this.settings = settings; this.mappings = mappings; + if (this.mappings.size() > 1) { + deprecationLogger.deprecatedAndMaybeLog("index-templates", + "Index template {} contains multiple typed mappings; templates in 8x will only support a single mapping", + name); + } this.aliases = aliases; } diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaDataTests.java b/server/src/test/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaDataTests.java index 03d10aca7e812..e535e471d88e9 100644 --- a/server/src/test/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaDataTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaDataTests.java @@ -32,6 +32,7 @@ import org.elasticsearch.common.xcontent.json.JsonXContent; import org.elasticsearch.test.ESTestCase; +import java.io.IOException; import java.util.Arrays; import java.util.Collections; @@ -168,4 +169,15 @@ public void testFromToXContent() throws Exception { assertThat(parsed, equalTo(template)); } } + + public void testDeprecationWarningsOnMultipleMappings() throws IOException { + IndexTemplateMetaData.Builder builder = IndexTemplateMetaData.builder("my-template"); + builder.patterns(Arrays.asList("a", "b")); + builder.putMapping("type1", "{\"type1\":{}}"); + builder.putMapping("type2", "{\"type2\":{}}"); + builder.build(); + + assertWarnings("Index template my-template contains multiple typed mappings; " + + "templates in 8x will only support a single mapping"); + } }