Merge pull request #14939 from prometheus/redo-14934
Some checks are pending
CI / Go tests (push) Waiting to run
CI / More Go tests (push) Waiting to run
CI / Go tests with previous Go version (push) Waiting to run
CI / UI tests (push) Waiting to run
CI / Go tests on Windows (push) Waiting to run
CI / Mixins tests (push) Waiting to run
CI / Build Prometheus for common architectures (0) (push) Waiting to run
CI / Build Prometheus for common architectures (1) (push) Waiting to run
CI / Build Prometheus for common architectures (2) (push) Waiting to run
CI / Build Prometheus for all architectures (0) (push) Waiting to run
CI / Build Prometheus for all architectures (1) (push) Waiting to run
CI / Build Prometheus for all architectures (10) (push) Waiting to run
CI / Build Prometheus for all architectures (11) (push) Waiting to run
CI / Build Prometheus for all architectures (2) (push) Waiting to run
CI / Build Prometheus for all architectures (3) (push) Waiting to run
CI / Build Prometheus for all architectures (4) (push) Waiting to run
CI / Build Prometheus for all architectures (5) (push) Waiting to run
CI / Build Prometheus for all architectures (6) (push) Waiting to run
CI / Build Prometheus for all architectures (7) (push) Waiting to run
CI / Build Prometheus for all architectures (8) (push) Waiting to run
CI / Build Prometheus for all architectures (9) (push) Waiting to run
CI / Report status of build Prometheus for all architectures (push) Blocked by required conditions
CI / Check generated parser (push) Waiting to run
CI / golangci-lint (push) Waiting to run
CI / fuzzing (push) Waiting to run
CI / codeql (push) Waiting to run
CI / Publish main branch artifacts (push) Blocked by required conditions
CI / Publish release artefacts (push) Blocked by required conditions
CI / Publish UI on npm Registry (push) Blocked by required conditions

[release-2.55] TSDB: Backward compatibility with upcoming index v3
This commit is contained in:
Bryan Boreham 2024-09-19 14:05:48 +01:00 committed by GitHub
commit 85cc1e941d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -43,10 +43,12 @@ const (
// HeaderLen represents number of bytes reserved of index for header.
HeaderLen = 5
// FormatV1 represents 1 version of index.
// FormatV1 represents version 1 of index.
FormatV1 = 1
// FormatV2 represents 2 version of index.
// FormatV2 represents version 2 of index.
FormatV2 = 2
// FormatV3 represents version 3 of index.
FormatV3 = 3
indexFilename = "index"
@ -1193,7 +1195,9 @@ func newReader(b ByteSlice, c io.Closer) (*Reader, error) {
}
r.version = int(r.b.Range(4, 5)[0])
if r.version != FormatV1 && r.version != FormatV2 {
switch r.version {
case FormatV1, FormatV2, FormatV3:
default:
return nil, fmt.Errorf("unknown index file version %d", r.version)
}
@ -1351,7 +1355,9 @@ func (s Symbols) Lookup(o uint32) (string, error) {
B: s.bs.Range(0, s.bs.Len()),
}
if s.version == FormatV2 {
if s.version == FormatV1 {
d.Skip(int(o))
} else {
if int(o) >= s.seen {
return "", fmt.Errorf("unknown symbol offset %d", o)
}
@ -1360,8 +1366,6 @@ func (s Symbols) Lookup(o uint32) (string, error) {
for i := o - (o / symbolFactor * symbolFactor); i > 0; i-- {
d.UvarintBytes()
}
} else {
d.Skip(int(o))
}
sym := d.UvarintStr()
if d.Err() != nil {
@ -1407,10 +1411,10 @@ func (s Symbols) ReverseLookup(sym string) (uint32, error) {
if lastSymbol != sym {
return 0, fmt.Errorf("unknown symbol %q", sym)
}
if s.version == FormatV2 {
return uint32(res), nil
if s.version == FormatV1 {
return uint32(s.bs.Len() - lastLen), nil
}
return uint32(s.bs.Len() - lastLen), nil
return uint32(res), nil
}
func (s Symbols) Size() int {
@ -1569,7 +1573,7 @@ func (r *Reader) LabelNamesFor(ctx context.Context, postings Postings) ([]string
offset := id
// In version 2 series IDs are no longer exact references but series are 16-byte padded
// and the ID is the multiple of 16 of the actual position.
if r.version == FormatV2 {
if r.version != FormatV1 {
offset = id * seriesByteAlign
}
@ -1608,7 +1612,7 @@ func (r *Reader) LabelValueFor(ctx context.Context, id storage.SeriesRef, label
offset := id
// In version 2 series IDs are no longer exact references but series are 16-byte padded
// and the ID is the multiple of 16 of the actual position.
if r.version == FormatV2 {
if r.version != FormatV1 {
offset = id * seriesByteAlign
}
d := encoding.NewDecbufUvarintAt(r.b, int(offset), castagnoliTable)
@ -1634,7 +1638,7 @@ func (r *Reader) Series(id storage.SeriesRef, builder *labels.ScratchBuilder, ch
offset := id
// In version 2 series IDs are no longer exact references but series are 16-byte padded
// and the ID is the multiple of 16 of the actual position.
if r.version == FormatV2 {
if r.version != FormatV1 {
offset = id * seriesByteAlign
}
d := encoding.NewDecbufUvarintAt(r.b, int(offset), castagnoliTable)