@@ -344,6 +344,25 @@ public void testConflictingDynamicUpdate() {
344344 assertThat (e .getMessage (), equalTo ("mapper [http.status_code] cannot be changed from type [keyword] to [long]" ));
345345 }
346346
347+ public void testMergingWithPassThrough () {
348+ boolean isSourceSynthetic = randomBoolean ();
349+ var objectMapper = new RootObjectMapper .Builder ("_doc" ).add (
350+ new ObjectMapper .Builder ("metrics" ).add (new KeywordFieldMapper .Builder ("cpu_usage" , IndexVersion .current ()))
351+ ).build (MapperBuilderContext .root (isSourceSynthetic , true ));
352+ var passThroughMapper = new RootObjectMapper .Builder ("_doc" ).add (
353+ new PassThroughObjectMapper .Builder ("metrics" ).setPriority (10 )
354+ .add (new KeywordFieldMapper .Builder ("memory_usage" , IndexVersion .current ()))
355+ ).build (MapperBuilderContext .root (isSourceSynthetic , true ));
356+ RootObjectMapper merged = objectMapper .merge (
357+ passThroughMapper ,
358+ MapperMergeContext .root (isSourceSynthetic , true , MAPPING_UPDATE , Long .MAX_VALUE )
359+ );
360+ assertThat (merged .getMapper ("metrics" ), instanceOf (ObjectMapper .class ));
361+ ObjectMapper metrics = (ObjectMapper ) merged .getMapper ("metrics" );
362+ assertThat (metrics .getMapper ("cpu_usage" ), instanceOf (KeywordFieldMapper .class ));
363+ assertThat (metrics .getMapper ("memory_usage" ), instanceOf (KeywordFieldMapper .class ));
364+ }
365+
347366 private static RootObjectMapper createRootSubobjectFalseLeafWithDots () {
348367 FieldMapper .Builder fieldBuilder = new KeywordFieldMapper .Builder ("host.name" , IndexVersion .current ());
349368 FieldMapper fieldMapper = fieldBuilder .build (MapperBuilderContext .root (false , false ));
0 commit comments