Skip to content

Commit 312ddd6

Browse files
committed
Revert "Simplify adding dynamic sub-fields to their dynamic parent object (#87866)"
This reverts commit 73b0273 (#87866) as an unexpected percolator test failure has surfaced, which did not surface as part of the PR tests run.
1 parent 73b0273 commit 312ddd6

File tree

3 files changed

+21
-21
lines changed

3 files changed

+21
-21
lines changed

server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -690,26 +690,26 @@ private static void parseCopyFields(DocumentParserContext context, List<String>
690690
// find what the dynamic setting is given the current parse context and parent
691691
private static ObjectMapper.Dynamic dynamicOrDefault(ObjectMapper parentMapper, DocumentParserContext context) {
692692
ObjectMapper.Dynamic dynamic = parentMapper.dynamic();
693-
String parentName = parentMapper.name();
694693
while (dynamic == null) {
695-
int lastDotNdx = parentName.lastIndexOf('.');
694+
int lastDotNdx = parentMapper.name().lastIndexOf('.');
696695
if (lastDotNdx == -1) {
697-
// no dot means that the parent is the root
698-
return context.root().dynamic() == null ? ObjectMapper.Dynamic.TRUE : context.root().dynamic();
696+
// no dot means we the parent is the root, so just delegate to the default outside the loop
697+
break;
699698
}
700-
parentName = parentMapper.name().substring(0, lastDotNdx);
701-
ObjectMapper parent = context.mappingLookup().objectMappers().get(parentName);
702-
if (parent == null) {
699+
String parentName = parentMapper.name().substring(0, lastDotNdx);
700+
parentMapper = context.mappingLookup().objectMappers().get(parentName);
701+
if (parentMapper == null) {
703702
// If parentMapper is null, it means the parent of the current mapper is being dynamically created right now
704-
ObjectMapper.Builder dynamicObjectMapperBuilder = context.getDynamicObjectMapperBuilder(parentName);
705-
if (dynamicObjectMapperBuilder == null) {
703+
parentMapper = context.getDynamicObjectMapper(parentName);
704+
if (parentMapper == null) {
706705
// it can still happen that the path is ambiguous and we are not able to locate the parent
707706
break;
708707
}
709-
dynamic = dynamicObjectMapperBuilder.dynamic;
710-
} else {
711-
dynamic = parent.dynamic();
712708
}
709+
dynamic = parentMapper.dynamic();
710+
}
711+
if (dynamic == null) {
712+
return context.root().dynamic() == null ? ObjectMapper.Dynamic.TRUE : context.root().dynamic();
713713
}
714714
return dynamic;
715715
}

server/src/main/java/org/elasticsearch/index/mapper/DocumentParserContext.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ protected void addDoc(LuceneDocument doc) {
8686
private final Set<String> ignoredFields;
8787
private final List<Mapper> dynamicMappers;
8888
private final Set<String> newFieldsSeen;
89-
private final Map<String, ObjectMapper.Builder> dynamicObjectMappers;
89+
private final Map<String, ObjectMapper> dynamicObjectMappers;
9090
private final List<RuntimeField> dynamicRuntimeFields;
9191
private final DocumentDimensions dimensions;
9292
private String id;
@@ -235,7 +235,7 @@ public final void addDynamicMapper(Mapper mapper) {
235235
mappingLookup.checkFieldLimit(indexSettings().getMappingTotalFieldsLimit(), newFieldsSeen.size());
236236
}
237237
if (mapper instanceof ObjectMapper objectMapper) {
238-
dynamicObjectMappers.put(objectMapper.name(), objectMapper.newBuilder(this.indexSettings.getIndexVersionCreated()));
238+
dynamicObjectMappers.put(objectMapper.name(), objectMapper);
239239
// dynamic object mappers may have been obtained from applying a dynamic template, in which case their definition may contain
240240
// sub-fields as well as sub-objects that need to be added to the mappings
241241
for (Mapper submapper : objectMapper.mappers.values()) {
@@ -265,13 +265,13 @@ public final List<Mapper> getDynamicMappers() {
265265
}
266266

267267
/**
268-
* Get a dynamic object mapper builder by name. Allows consumers to lookup objects that have been dynamically added as a result
268+
* Get a dynamic object mapper by name. Allows consumers to lookup objects that have been dynamically added as a result
269269
* of parsing an incoming document. Used to find the parent object for new fields that are being dynamically mapped whose parent is
270270
* also not mapped yet. Such new fields will need to be dynamically added to their parent according to its dynamic behaviour.
271-
* Holds a flat set of object builders, meaning that an object field named <code>foo.bar</code> can be looked up directly with its
271+
* Holds a flat set of object mappers, meaning that an object field named <code>foo.bar</code> can be looked up directly with its
272272
* dotted name.
273273
*/
274-
final ObjectMapper.Builder getDynamicObjectMapperBuilder(String name) {
274+
final ObjectMapper getDynamicObjectMapper(String name) {
275275
return dynamicObjectMappers.get(name);
276276
}
277277

server/src/main/java/org/elasticsearch/index/mapper/ObjectMapper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,11 @@ private static ObjectMapper.Builder findObjectBuilder(String fullName, DocumentP
136136
return objectMapper.newBuilder(context.indexSettings().getIndexVersionCreated());
137137
}
138138
// has the object mapper been added as a dynamic update already?
139-
Builder dynamicObjectMapperBuilder = context.getDynamicObjectMapperBuilder(fullName);
140-
if (dynamicObjectMapperBuilder == null) {
141-
throw new IllegalStateException("Missing intermediate object " + fullName);
139+
objectMapper = context.getDynamicObjectMapper(fullName);
140+
if (objectMapper != null) {
141+
return objectMapper.newBuilder(context.indexSettings().getIndexVersionCreated());
142142
}
143-
return dynamicObjectMapperBuilder;
143+
throw new IllegalStateException("Missing intermediate object " + fullName);
144144
}
145145

146146
protected final Map<String, Mapper> buildMappers(boolean root, MapperBuilderContext context) {

0 commit comments

Comments
 (0)