Fix MapperService.allEnabled(). (#22227)

It returns whether the last merged mapping has `_all` enabled rather than
whether any of the types has `_all` enabled.
This commit is contained in:
Adrien Grand 2016-12-19 09:55:13 +01:00 committed by GitHub
parent 96f1739c0d
commit 1ed2e18ded
2 changed files with 31 additions and 2 deletions

View File

@ -153,7 +153,7 @@ public class MapperService extends AbstractIndexComponent implements Closeable {
} }
/** /**
* Returns true if the "_all" field is enabled for the type * Returns true if the "_all" field is enabled on any type.
*/ */
public boolean allEnabled() { public boolean allEnabled() {
return this.allEnabled; return this.allEnabled;
@ -377,7 +377,9 @@ public class MapperService extends AbstractIndexComponent implements Closeable {
this.hasNested = hasNested; this.hasNested = hasNested;
this.fullPathObjectMappers = fullPathObjectMappers; this.fullPathObjectMappers = fullPathObjectMappers;
this.parentTypes = parentTypes; this.parentTypes = parentTypes;
this.allEnabled = mapper.allFieldMapper().enabled(); // this is only correct because types cannot be removed and we do not
// allow to disable an existing _all field
this.allEnabled |= mapper.allFieldMapper().enabled();
assert assertSerialization(newMapper); assert assertSerialization(newMapper);
assert assertMappersShareSameFieldType(); assert assertMappersShareSameFieldType();

View File

@ -215,4 +215,31 @@ public class MapperServiceTests extends ESSingleNodeTestCase {
indexService.mapperService().merge("type3", normsDisabledMapping, MergeReason.MAPPING_UPDATE, true); indexService.mapperService().merge("type3", normsDisabledMapping, MergeReason.MAPPING_UPDATE, true);
assertNotSame(indexService.mapperService().documentMapper("type1"), documentMapper); assertNotSame(indexService.mapperService().documentMapper("type1"), documentMapper);
} }
public void testAllEnabled() throws Exception {
IndexService indexService = createIndex("test");
assertFalse(indexService.mapperService().allEnabled());
CompressedXContent enabledAll = new CompressedXContent(XContentFactory.jsonBuilder().startObject()
.startObject("_all")
.field("enabled", true)
.endObject().endObject().bytes());
CompressedXContent disabledAll = new CompressedXContent(XContentFactory.jsonBuilder().startObject()
.startObject("_all")
.field("enabled", false)
.endObject().endObject().bytes());
indexService.mapperService().merge(MapperService.DEFAULT_MAPPING, enabledAll,
MergeReason.MAPPING_UPDATE, random().nextBoolean());
assertFalse(indexService.mapperService().allEnabled()); // _default_ does not count
indexService.mapperService().merge("some_type", enabledAll,
MergeReason.MAPPING_UPDATE, random().nextBoolean());
assertTrue(indexService.mapperService().allEnabled());
indexService.mapperService().merge("other_type", disabledAll,
MergeReason.MAPPING_UPDATE, random().nextBoolean());
assertTrue(indexService.mapperService().allEnabled()); // this returns true if any of the types has _all enabled
}
} }