Skip to content

Commit 25e4a06

Browse files
authored
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.
1 parent 2bbb58a commit 25e4a06

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

server/src/main/java/org/elasticsearch/index/codec/tsdb/es819/DocValuesConsumerUtil.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,20 +64,29 @@ static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, Me
6464
if (entry != null) {
6565
sumNumValues += entry.numValues;
6666
sumNumDocsWithField += entry.numDocsWithField;
67+
} else {
68+
assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]";
69+
return UNSUPPORTED;
6770
}
6871
}
6972
case SORTED_NUMERIC -> {
7073
var entry = tsdbDocValuesProducer.sortedNumerics.get(fieldInfo.number);
7174
if (entry != null) {
7275
sumNumValues += entry.numValues;
7376
sumNumDocsWithField += entry.numDocsWithField;
77+
} else {
78+
assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]";
79+
return UNSUPPORTED;
7480
}
7581
}
7682
case SORTED -> {
7783
var entry = tsdbDocValuesProducer.sorted.get(fieldInfo.number);
7884
if (entry != null) {
7985
sumNumValues += entry.ordsEntry.numValues;
8086
sumNumDocsWithField += entry.ordsEntry.numDocsWithField;
87+
} else {
88+
assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]";
89+
return UNSUPPORTED;
8190
}
8291
}
8392
case SORTED_SET -> {
@@ -90,6 +99,9 @@ static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, Me
9099
sumNumValues += entry.ordsEntry.numValues;
91100
sumNumDocsWithField += entry.ordsEntry.numDocsWithField;
92101
}
102+
} else {
103+
assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]";
104+
return UNSUPPORTED;
93105
}
94106
}
95107
case BINARY -> {
@@ -98,6 +110,9 @@ static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, Me
98110
sumNumDocsWithField += entry.numDocsWithField;
99111
minLength = Math.min(minLength, entry.minLength);
100112
maxLength = Math.max(maxLength, entry.maxLength);
113+
} else {
114+
assert false : "unexpectedly got no entry for field [" + fieldInfo.number + "\\" + fieldInfo.name + "]";
115+
return UNSUPPORTED;
101116
}
102117
}
103118
default -> throw new IllegalStateException("unexpected doc values producer type: " + fieldInfo.getDocValuesType());

0 commit comments

Comments
 (0)