Skip to content

Commit

Permalink
Fix merging of _meta field (#27352)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexshadow007 authored and jpountz committed Nov 24, 2017
1 parent 8916935 commit 43a91f4
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public static class Builder {

private final RootObjectMapper rootObjectMapper;

private Map<String, Object> meta = emptyMap();
private Map<String, Object> meta;

private final Mapper.BuilderContext builderContext;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ public Mapping merge(Mapping mergeWith, boolean updateAllTypes) {
}
mergedMetaDataMappers.put(merged.getClass(), merged);
}
return new Mapping(indexCreated, mergedRoot, mergedMetaDataMappers.values().toArray(new MetadataFieldMapper[0]), mergeWith.meta);
Map<String, Object> mergedMeta = mergeWith.meta == null ? meta : mergeWith.meta;
return new Mapping(indexCreated, mergedRoot, mergedMetaDataMappers.values().toArray(new MetadataFieldMapper[0]), mergedMeta);
}

/**
Expand Down Expand Up @@ -128,7 +129,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
root.toXContent(builder, params, new ToXContent() {
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
if (meta != null && !meta.isEmpty()) {
if (meta != null) {
builder.field("_meta", meta);
}
for (Mapper mapper : metadataMappers) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -289,4 +289,47 @@ public void testMergeAddingParent() throws IOException {
Exception e = expectThrows(IllegalArgumentException.class, () -> initMapper.merge(updatedMapper.mapping(), false));
assertThat(e.getMessage(), containsString("The _parent field's type option can't be changed: [null]->[parent]"));
}

public void testMergeMeta() throws IOException {
DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser();

String initMapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("test")
.startObject("_meta")
.field("foo").value("bar")
.endObject()
.endObject()
.endObject()
.string();
DocumentMapper initMapper = parser.parse("test", new CompressedXContent(initMapping));

assertThat(initMapper.meta().get("foo"), equalTo("bar"));

String updateMapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("test")
.startObject("properties")
.startObject("name").field("type", "text").endObject()
.endObject()
.endObject()
.endObject()
.string();
DocumentMapper updatedMapper = parser.parse("test", new CompressedXContent(updateMapping));

assertThat(initMapper.merge(updatedMapper.mapping(), true).meta().get("foo"), equalTo("bar"));

updateMapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("test")
.startObject("_meta")
.field("foo").value("new_bar")
.endObject()
.endObject()
.endObject()
.string();
updatedMapper = parser.parse("test", new CompressedXContent(updateMapping));

assertThat(initMapper.merge(updatedMapper.mapping(), true).meta().get("foo"), equalTo("new_bar"));
}
}

0 comments on commit 43a91f4

Please sign in to comment.