Skip to content

Commit cac6d57

Browse files
committed
actually let's validate these
1 parent bb3397f commit cac6d57

File tree

1 file changed

+34
-16
lines changed

1 file changed

+34
-16
lines changed

solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)