Skip to content

Commit 141bb4c

Browse files
committed
Use optional subobjects instead of explicit
1 parent 64bca33 commit 141bb4c

File tree

4 files changed

+20
-20
lines changed

4 files changed

+20
-20
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,8 @@ static MergeResult build(ObjectMapper existing, ObjectMapper mergeWithObject, Ma
621621
if (mergeWithObject.subobjects.isPresent()) {
622622
if (reason == MergeReason.INDEX_TEMPLATE) {
623623
subObjects = mergeWithObject.subobjects;
624+
} else if (mergeWithObject instanceof PassThroughObjectMapper && existing.subobjects.isEmpty()) {
625+
subObjects = mergeWithObject.subobjects;
624626
} else if (existing.subobjects() != mergeWithObject.subobjects()) {
625627
throw new MapperException(
626628
"the [subobjects] parameter can't be updated for the object mapping [" + existing.fullPath() + "]"

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ public PassThroughObjectMapper merge(Mapper mergeWith, MapperMergeContext parent
200200
static boolean isEligibleForMerge(ObjectMapper objectMapper) {
201201
return objectMapper.isRoot() == false
202202
&& (objectMapper.subobjects == null
203-
|| objectMapper.subobjects.explicit() == false
204-
|| objectMapper.subobjects.value().equals(Subobjects.DISABLED));
203+
|| objectMapper.subobjects.isEmpty()
204+
|| objectMapper.subobjects.get().equals(Subobjects.DISABLED));
205205
}
206206

207207
@Override

server/src/test/java/org/elasticsearch/index/mapper/ObjectMapperMergeTests.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -355,10 +355,10 @@ public void testConflictingDynamicUpdate() {
355355

356356
public void testMergingWithPassThrough() {
357357
boolean isSourceSynthetic = randomBoolean();
358-
var objectMapper = new RootObjectMapper.Builder("_doc").add(
359-
new ObjectMapper.Builder("metrics").add(new KeywordFieldMapper.Builder("cpu_usage", IndexVersion.current()))
358+
var objectMapper = new RootObjectMapper.Builder("_doc", Optional.empty()).add(
359+
new ObjectMapper.Builder("metrics", Optional.empty()).add(new KeywordFieldMapper.Builder("cpu_usage", IndexVersion.current()))
360360
).build(MapperBuilderContext.root(isSourceSynthetic, true));
361-
var passThroughMapper = new RootObjectMapper.Builder("_doc").add(
361+
var passThroughMapper = new RootObjectMapper.Builder("_doc", Optional.empty()).add(
362362
new PassThroughObjectMapper.Builder("metrics").setPriority(10)
363363
.add(new KeywordFieldMapper.Builder("memory_usage", IndexVersion.current()))
364364
).build(MapperBuilderContext.root(isSourceSynthetic, true));
@@ -371,19 +371,16 @@ public void testMergingWithPassThrough() {
371371
assertThat(metrics.getMapper("cpu_usage"), instanceOf(KeywordFieldMapper.class));
372372
assertThat(metrics.getMapper("memory_usage"), instanceOf(KeywordFieldMapper.class));
373373

374-
var subobjectsTrueMapper = new RootObjectMapper.Builder("_doc").add(
375-
new ObjectMapper.Builder("metrics", Explicit.of(ObjectMapper.Subobjects.ENABLED)).add(
374+
var subobjectsTrueMapper = new RootObjectMapper.Builder("_doc", Optional.empty()).add(
375+
new ObjectMapper.Builder("metrics", Optional.of(ObjectMapper.Subobjects.ENABLED)).add(
376376
new KeywordFieldMapper.Builder("cpu_usage", IndexVersion.current())
377377
)
378378
).build(MapperBuilderContext.root(isSourceSynthetic, true));
379-
IllegalArgumentException e = expectThrows(
380-
IllegalArgumentException.class,
379+
MapperException e = expectThrows(
380+
MapperException.class,
381381
() -> subobjectsTrueMapper.merge(passThroughMapper, MapperMergeContext.root(false, false, MAPPING_UPDATE, Long.MAX_VALUE))
382382
);
383-
assertThat(
384-
e.getMessage(),
385-
equalTo("can't merge a passthrough mapping [metrics] with an object mapping that is either root or has subobjects enabled")
386-
);
383+
assertThat(e.getMessage(), equalTo("the [subobjects] parameter can't be updated for the object mapping [metrics]"));
387384
}
388385

389386
private static RootObjectMapper createRootSubobjectFalseLeafWithDots() {

server/src/test/java/org/elasticsearch/index/mapper/PassThroughObjectMapperTests.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -187,10 +187,11 @@ public void testCheckForDuplicatePrioritiesEmpty() throws IOException {
187187

188188
public void testMergingWithPassThrough() {
189189
boolean isSourceSynthetic = randomBoolean();
190-
var passThroughMapper = new RootObjectMapper.Builder("_doc").add(new PassThroughObjectMapper.Builder("metrics").setPriority(10))
191-
.build(MapperBuilderContext.root(isSourceSynthetic, true));
192-
var objectMapper = new RootObjectMapper.Builder("_doc").add(
193-
new ObjectMapper.Builder("metrics").add(new KeywordFieldMapper.Builder("cpu_usage", IndexVersion.current()))
190+
var passThroughMapper = new RootObjectMapper.Builder("_doc", Optional.empty()).add(
191+
new PassThroughObjectMapper.Builder("metrics").setPriority(10)
192+
).build(MapperBuilderContext.root(isSourceSynthetic, true));
193+
var objectMapper = new RootObjectMapper.Builder("_doc", Optional.empty()).add(
194+
new ObjectMapper.Builder("metrics", Optional.empty()).add(new KeywordFieldMapper.Builder("cpu_usage", IndexVersion.current()))
194195
).build(MapperBuilderContext.root(isSourceSynthetic, true));
195196

196197
RootObjectMapper merged = passThroughMapper.merge(
@@ -199,8 +200,8 @@ public void testMergingWithPassThrough() {
199200
);
200201
assertThat(merged.getMapper("metrics"), instanceOf(PassThroughObjectMapper.class));
201202

202-
var objectMapperWithSubObjectTrue = new RootObjectMapper.Builder("_doc").add(
203-
new ObjectMapper.Builder("metrics", Explicit.of(ObjectMapper.Subobjects.ENABLED)).add(
203+
var objectMapperWithSubObjectTrue = new RootObjectMapper.Builder("_doc", Optional.empty()).add(
204+
new ObjectMapper.Builder("metrics", Optional.of(ObjectMapper.Subobjects.ENABLED)).add(
204205
new KeywordFieldMapper.Builder("cpu_usage", IndexVersion.current())
205206
)
206207
).build(MapperBuilderContext.root(isSourceSynthetic, true));
@@ -217,7 +218,7 @@ public void testMergingWithPassThrough() {
217218
equalTo("can't merge a passthrough mapping [metrics] with an object mapping that is either root or has subobjects enabled")
218219
);
219220

220-
var rootObjectMapper = new RootObjectMapper.Builder("metrics").add(
221+
var rootObjectMapper = new RootObjectMapper.Builder("metrics", Optional.empty()).add(
221222
new KeywordFieldMapper.Builder("cpu_usage", IndexVersion.current())
222223
).build(MapperBuilderContext.root(isSourceSynthetic, true));
223224

0 commit comments

Comments
 (0)