From 6c8228a03f7db03543ec389c151b73f941e0bbde Mon Sep 17 00:00:00 2001 From: Martijn van Groningen Date: Mon, 11 Aug 2025 09:38:18 +0700 Subject: [PATCH] DocValuesConsumerUtil tweak (#132586) Be more strict about not finding a metadata entry based on field info number. If this were to happen, then this can cause issues in doc value consumer later. An example of such a failure is what is fixed via #132597, here with shrinking the local segment and merged field numbers were not aligned causing serious merge errors in the tsdb doc value consumer. Currently such an issue shouldn't occur anymore. --- .../codec/tsdb/es819/DocValuesConsumerUtil.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/index/codec/tsdb/es819/DocValuesConsumerUtil.java b/server/src/main/java/org/elasticsearch/index/codec/tsdb/es819/DocValuesConsumerUtil.java index 9f9dbd11f52a3..4e9bf9c09a3b0 100644 --- a/server/src/main/java/org/elasticsearch/index/codec/tsdb/es819/DocValuesConsumerUtil.java +++ b/server/src/main/java/org/elasticsearch/index/codec/tsdb/es819/DocValuesConsumerUtil.java @@ -64,6 +64,9 @@ static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, Me if (entry != null) { sumNumValues += entry.numValues; sumNumDocsWithField += entry.numDocsWithField; + } else { + assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]"; + return UNSUPPORTED; } } case SORTED_NUMERIC -> { @@ -71,6 +74,9 @@ static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, Me if (entry != null) { sumNumValues += entry.numValues; sumNumDocsWithField += entry.numDocsWithField; + } else { + assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]"; + return UNSUPPORTED; } } case SORTED -> { @@ -78,6 +84,9 @@ static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, Me if (entry != null) { sumNumValues += entry.ordsEntry.numValues; sumNumDocsWithField += entry.ordsEntry.numDocsWithField; + } else { + assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]"; + return UNSUPPORTED; } } case SORTED_SET -> { @@ -90,6 +99,9 @@ static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, Me sumNumValues += entry.ordsEntry.numValues; sumNumDocsWithField += entry.ordsEntry.numDocsWithField; } + } else { + assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]"; + return UNSUPPORTED; } } case BINARY -> { @@ -98,6 +110,9 @@ static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, Me sumNumDocsWithField += entry.numDocsWithField; minLength = Math.min(minLength, entry.minLength); maxLength = Math.max(maxLength, entry.maxLength); + } else { + assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]"; + return UNSUPPORTED; } } default -> throw new IllegalStateException("unexpected doc values producer type: " + fieldInfo.getDocValuesType());