@@ -245,17 +245,20 @@ && handleDistributed(req, rsp)) {
245245 rsp .setHttpCaching (false );
246246 }
247247
248- /** Per-field accumulation state across shards: merged response data and index flags tracking . */
248+ /** Per-field accumulation state across shards: merged response data and field validation . */
249249 private static class MergedFieldData {
250250 final SimpleOrderedMap <Object > merged = new SimpleOrderedMap <>();
251251 final String originalShardAddr ;
252+ final LukeResponse .FieldInfo originalFieldInfo ;
252253 private Object indexFlags ;
253254 private String indexFlagsShardAddr ;
254255
255- MergedFieldData (String shardAddr , Object indexFlags ) {
256+ MergedFieldData (String shardAddr , LukeResponse . FieldInfo fieldInfo ) {
256257 this .originalShardAddr = shardAddr ;
257- if (indexFlags != null ) {
258- this .indexFlags = indexFlags ;
258+ this .originalFieldInfo = fieldInfo ;
259+ Object flags = fieldInfo .getExtras ().get (KEY_INDEX_FLAGS );
260+ if (flags != null ) {
261+ this .indexFlags = flags ;
259262 this .indexFlagsShardAddr = shardAddr ;
260263 }
261264 }
@@ -459,11 +462,10 @@ private void mergeShardField(
459462 String shardAddr , LukeResponse .FieldInfo fi , Map <String , MergedFieldData > mergedFields ) {
460463
461464 String fieldName = fi .getName ();
462- Object indexFlags = fi .getExtras ().get (KEY_INDEX_FLAGS );
463465
464466 MergedFieldData fieldData = mergedFields .get (fieldName );
465467 if (fieldData == null ) {
466- fieldData = new MergedFieldData (shardAddr , indexFlags );
468+ fieldData = new MergedFieldData (shardAddr , fi );
467469 mergedFields .put (fieldName , fieldData );
468470
469471 // First shard to report this field: populate merged with schema-derived attrs
@@ -476,16 +478,32 @@ private void mergeShardField(
476478 if (fieldData .indexFlags != null ) {
477479 fieldData .merged .add (KEY_INDEX_FLAGS , fieldData .indexFlags );
478480 }
479- } else if (indexFlags != null ) {
480- // Subsequent shards: validate index flags consistency
481- if (fieldData .indexFlags == null ) {
482- fieldData .indexFlags = indexFlags ;
483- fieldData .indexFlagsShardAddr = shardAddr ;
484- fieldData .merged .add (KEY_INDEX_FLAGS , indexFlags );
485- } else {
486- validateFieldAttr (
487- fieldName , KEY_INDEX_FLAGS , indexFlags , fieldData .indexFlags ,
488- shardAddr , fieldData .indexFlagsShardAddr );
481+ } else {
482+ // Subsequent shards: validate consistency
483+ validateFieldAttr (
484+ fieldName , KEY_TYPE , fi .getType (),
485+ fieldData .originalFieldInfo .getType (),
486+ shardAddr , fieldData .originalShardAddr );
487+ validateFieldAttr (
488+ fieldName , KEY_SCHEMA_FLAGS , fi .getSchema (),
489+ fieldData .originalFieldInfo .getSchema (),
490+ shardAddr , fieldData .originalShardAddr );
491+ validateFieldAttr (
492+ fieldName , KEY_DYNAMIC_BASE , fi .getExtras ().get (KEY_DYNAMIC_BASE ),
493+ fieldData .originalFieldInfo .getExtras ().get (KEY_DYNAMIC_BASE ),
494+ shardAddr , fieldData .originalShardAddr );
495+
496+ Object indexFlags = fi .getExtras ().get (KEY_INDEX_FLAGS );
497+ if (indexFlags != null ) {
498+ if (fieldData .indexFlags == null ) {
499+ fieldData .indexFlags = indexFlags ;
500+ fieldData .indexFlagsShardAddr = shardAddr ;
501+ fieldData .merged .add (KEY_INDEX_FLAGS , indexFlags );
502+ } else {
503+ validateFieldAttr (
504+ fieldName , KEY_INDEX_FLAGS , indexFlags , fieldData .indexFlags ,
505+ shardAddr , fieldData .indexFlagsShardAddr );
506+ }
489507 }
490508 }
491509
0 commit comments