diff --git a/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaData.java b/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaData.java index 0267facaed5..813858ceaad 100644 --- a/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaData.java +++ b/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetaData.java @@ -54,7 +54,7 @@ public class IndexTemplateMetaData { // the mapping source should always include the type as top level private final ImmutableOpenMap mappings; - + private final ImmutableOpenMap aliases; private final ImmutableOpenMap customs; @@ -113,7 +113,7 @@ public class IndexTemplateMetaData { public ImmutableOpenMap aliases() { return this.aliases; } - + public ImmutableOpenMap getAliases() { return this.aliases; } @@ -177,7 +177,7 @@ public class IndexTemplateMetaData { private Settings settings = ImmutableSettings.Builder.EMPTY_SETTINGS; private final ImmutableOpenMap.Builder mappings; - + private final ImmutableOpenMap.Builder aliases; private final ImmutableOpenMap.Builder customs; @@ -238,7 +238,7 @@ public class IndexTemplateMetaData { mappings.put(mappingType, new CompressedString(mappingSource)); return this; } - + public Builder putAlias(AliasMetaData aliasMetaData) { aliases.put(aliasMetaData.alias(), aliasMetaData); return this; @@ -308,7 +308,7 @@ public class IndexTemplateMetaData { IndexMetaData.lookupFactorySafe(cursor.key).toXContent(cursor.value, builder, params); builder.endObject(); } - + builder.startObject("aliases"); for (ObjectCursor cursor : indexTemplateMetaData.aliases().values()) { AliasMetaData.Builder.toXContent(cursor.value, builder, params); @@ -318,8 +318,8 @@ public class IndexTemplateMetaData { builder.endObject(); } - public static IndexTemplateMetaData fromXContent(XContentParser parser) throws IOException { - Builder builder = new Builder(parser.currentName()); + public static IndexTemplateMetaData fromXContent(XContentParser parser, String templateName) throws IOException { + Builder builder = new Builder(templateName); String currentFieldName = skipTemplateName(parser); XContentParser.Token token; diff --git a/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java b/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java index 44ca787c20e..c77e04867c0 100644 --- a/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java +++ b/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java @@ -319,7 +319,7 @@ public class MetaData implements Iterable { } return mapBuilder.build(); } - + private boolean matchAllAliases(final String[] aliases) { for (String alias : aliases) { if (alias.equals("_all")) { @@ -1011,7 +1011,7 @@ public class MetaData implements Iterable { public static boolean isAllIndices(String[] aliasesOrIndices) { return aliasesOrIndices == null || aliasesOrIndices.length == 0 || isExplicitAllPattern(aliasesOrIndices); } - + /** * Identifies whether the array containing type names given as argument refers to all types * The empty or null array identifies all types @@ -1359,7 +1359,7 @@ public class MetaData implements Iterable { } } else if ("templates".equals(currentFieldName)) { while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { - builder.put(IndexTemplateMetaData.Builder.fromXContent(parser)); + builder.put(IndexTemplateMetaData.Builder.fromXContent(parser, parser.currentName())); } } else { // check if its a custom index metadata diff --git a/src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java b/src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java index 2ffd1611a4a..0eaf6360af6 100644 --- a/src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java +++ b/src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java @@ -246,6 +246,8 @@ public class MetaDataCreateIndexService extends AbstractComponent { Map templatesAliases = Maps.newHashMap(); + List templateNames = Lists.newArrayList(); + for (Map.Entry entry : request.mappings().entrySet()) { mappings.put(entry.getKey(), parseMapping(entry.getValue())); } @@ -256,6 +258,7 @@ public class MetaDataCreateIndexService extends AbstractComponent { // apply templates, merging the mappings into the request mapping if exists for (IndexTemplateMetaData template : templates) { + templateNames.add(template.getName()); for (ObjectObjectCursor cursor : template.mappings()) { if (mappings.containsKey(cursor.key)) { XContentHelper.mergeDefaults(mappings.get(cursor.key), parseMapping(cursor.value.string())); @@ -446,7 +449,7 @@ public class MetaDataCreateIndexService extends AbstractComponent { .put(indexMetaData, false) .build(); - logger.info("[{}] creating index, cause [{}], shards [{}]/[{}], mappings {}", request.index(), request.cause(), indexMetaData.numberOfShards(), indexMetaData.numberOfReplicas(), mappings.keySet()); + logger.info("[{}] creating index, cause [{}], templates {}, shards [{}]/[{}], mappings {}", request.index(), request.cause(), templateNames, indexMetaData.numberOfShards(), indexMetaData.numberOfReplicas(), mappings.keySet()); ClusterBlocks.Builder blocks = ClusterBlocks.builder().blocks(currentState.blocks()); if (!request.blocks().isEmpty()) { @@ -518,18 +521,20 @@ public class MetaDataCreateIndexService extends AbstractComponent { File[] templatesFiles = templatesDir.listFiles(); if (templatesFiles != null) { for (File templatesFile : templatesFiles) { - XContentParser parser = null; - try { - byte[] templatesData = Streams.copyToByteArray(templatesFile); - parser = XContentHelper.createParser(templatesData, 0, templatesData.length); - IndexTemplateMetaData template = IndexTemplateMetaData.Builder.fromXContent(parser); - if (indexTemplateFilter.apply(request, template)) { - templates.add(template); + if (templatesFile.isFile()) { + XContentParser parser = null; + try { + byte[] templatesData = Streams.copyToByteArray(templatesFile); + parser = XContentHelper.createParser(templatesData, 0, templatesData.length); + IndexTemplateMetaData template = IndexTemplateMetaData.Builder.fromXContent(parser, templatesFile.getName()); + if (indexTemplateFilter.apply(request, template)) { + templates.add(template); + } + } catch (Exception e) { + logger.warn("[{}] failed to read template [{}] from config", e, request.index(), templatesFile.getAbsolutePath()); + } finally { + Releasables.closeWhileHandlingException(parser); } - } catch (Exception e) { - logger.warn("[{}] failed to read template [{}] from config", e, request.index(), templatesFile.getAbsolutePath()); - } finally { - Releasables.closeWhileHandlingException(parser); } } }