Skip to content

Commit 67e44ae

Browse files
author
Christoph Büscher
committed
Directly check mapping non-recursively
1 parent 8c479cd commit 67e44ae

File tree

2 files changed

+18
-34
lines changed

2 files changed

+18
-34
lines changed

x-pack/plugin/deprecation/src/main/java/org/elasticsearch/xpack/deprecation/ClusterDeprecationChecks.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,10 @@ static DeprecationIssue checkTemplatesWithFieldNamesDisabled(ClusterState state)
107107
templateCursor.value.getMappings().forEach((mappingCursor) -> {
108108
Map<String, Object> map = XContentHelper.convertToMap(mappingCursor.value.compressedReference(), false, XContentType.JSON)
109109
.v2();
110-
if (mapContainsFieldNamesDisabled(map)) {
110+
// map should contain only type name at this level
111+
assert map.size() == 1;
112+
String type = map.keySet().iterator().next();
113+
if (mapContainsFieldNamesDisabled((Map<?,?>) map.get(type))) {
111114
templatesContainingFieldNames.add(templateName);
112115
}
113116
});
@@ -127,18 +130,10 @@ static DeprecationIssue checkTemplatesWithFieldNamesDisabled(ClusterState state)
127130
* check for "_field_names" entries in the map that contain another property "enabled" in the sub-map
128131
*/
129132
static boolean mapContainsFieldNamesDisabled(Map<?, ?> map) {
130-
if (map != null) {
131-
Object fieldNamesMapping = map.get(FieldNamesFieldMapper.NAME);
132-
if (fieldNamesMapping != null && fieldNamesMapping instanceof Map) {
133-
if (((Map<?, ?>) fieldNamesMapping).keySet().contains("enabled")) {
134-
return true;
135-
}
136-
} else {
137-
for (Object value : map.values()) {
138-
if (value instanceof Map) {
139-
return mapContainsFieldNamesDisabled((Map<?, ?>) value);
140-
}
141-
}
133+
Object fieldNamesMapping = map.get(FieldNamesFieldMapper.NAME);
134+
if (fieldNamesMapping != null) {
135+
if (((Map<?, ?>) fieldNamesMapping).keySet().contains("enabled")) {
136+
return true;
142137
}
143138
}
144139
return false;

x-pack/plugin/deprecation/src/test/java/org/elasticsearch/xpack/deprecation/ClusterDeprecationChecksTests.java

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -176,33 +176,22 @@ public void testTemplatesWithFieldNamesDisabled() throws IOException {
176176
goodMappingBuilder.endObject();
177177
assertFieldNamesEnabledTemplate(goodMappingBuilder, false);
178178

179-
XContentBuilder badMappingWithTypeBuilder = jsonBuilder();
180-
badMappingWithTypeBuilder.startObject();
179+
XContentBuilder badMappingBuilder = jsonBuilder();
180+
badMappingBuilder.startObject();
181181
{
182-
badMappingWithTypeBuilder.startObject("_doc");
182+
// we currently always store a type level internally
183+
badMappingBuilder.startObject("_doc");
183184
{
184-
badMappingWithTypeBuilder.startObject(FieldNamesFieldMapper.NAME);
185+
badMappingBuilder.startObject(FieldNamesFieldMapper.NAME);
185186
{
186-
badMappingWithTypeBuilder.field("enabled", randomBoolean());
187+
badMappingBuilder.field("enabled", randomBoolean());
187188
}
188-
badMappingWithTypeBuilder.endObject();
189-
}
190-
badMappingWithTypeBuilder.endObject();
191-
}
192-
badMappingWithTypeBuilder.endObject();
193-
assertFieldNamesEnabledTemplate(badMappingWithTypeBuilder, true);
194-
195-
XContentBuilder badMappingWithoutTypeBuilder = jsonBuilder();
196-
badMappingWithoutTypeBuilder.startObject();
197-
{
198-
badMappingWithoutTypeBuilder.startObject(FieldNamesFieldMapper.NAME);
199-
{
200-
badMappingWithoutTypeBuilder.field("enabled", randomBoolean());
189+
badMappingBuilder.endObject();
201190
}
202-
badMappingWithoutTypeBuilder.endObject();
191+
badMappingBuilder.endObject();
203192
}
204-
badMappingWithoutTypeBuilder.endObject();
205-
assertFieldNamesEnabledTemplate(badMappingWithoutTypeBuilder, true);
193+
badMappingBuilder.endObject();
194+
assertFieldNamesEnabledTemplate(badMappingBuilder, true);
206195
}
207196

208197
private void assertFieldNamesEnabledTemplate(XContentBuilder templateBuilder, boolean expectIssue) throws IOException {

0 commit comments

Comments
 (0)