[dbnode] Fix multi-segment field iterator support of __ prefix fields alphanumerically before __m3ninx_id #4095
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What this PR does / why we need it:
The specific bug is with how field iterators are built around existing segments and used for in-memory index segment compaction. There was an initial
Next
call to each segment's field iterator, causing the iterator to start ate1
instead ofe0
. This is masked/uncommon because of how the iterator sorts these fields, and how the default fielddoc.IDReservedFieldName
(i.e."_m3ninx_id"
) alphanumerically precedes most fields and isn't required for field/term indexing. However, fields that start with a double underscore that precedes the ID reserved field name, e.g."__m2"
becomes susceptible for being skipped.In practice for Prometheus metrics this has not been an issue since fields with double underscores are meant to be used only for internal use as per guidance:
https://github.com/prometheus/docs/blob/e7567ffa4079b745bf0b4b5c8ef87401d2330588/content/docs/concepts/data_model.md?plain=1#L34-L36
Special notes for your reviewer:
Does this PR introduce a user-facing and/or backwards incompatible change?:
Does this PR require updating code package or user-facing documentation?: