use an incrementing index rather than an offset for symbols table

This commit is contained in:
Callum Styan 2018-01-16 19:19:01 -08:00
parent 50211e89ad
commit a515b16299

View file

@ -273,17 +273,17 @@ func (w *Writer) AddSeries(ref uint64, lset labels.Labels, chunks ...chunks.Meta
w.buf2.putUvarint(len(lset)) w.buf2.putUvarint(len(lset))
for _, l := range lset { for _, l := range lset {
offset, ok := w.symbols[l.Name] index, ok := w.symbols[l.Name]
if !ok { if !ok {
return errors.Errorf("symbol entry for %q does not exist", l.Name) return errors.Errorf("symbol entry for %q does not exist", l.Name)
} }
w.buf2.putUvarint32(offset) w.buf2.putUvarint32(index)
offset, ok = w.symbols[l.Value] index, ok = w.symbols[l.Value]
if !ok { if !ok {
return errors.Errorf("symbol entry for %q does not exist", l.Value) return errors.Errorf("symbol entry for %q does not exist", l.Value)
} }
w.buf2.putUvarint32(offset) w.buf2.putUvarint32(index)
} }
w.buf2.putUvarint(len(chunks)) w.buf2.putUvarint(len(chunks))
@ -341,8 +341,8 @@ func (w *Writer) AddSymbols(sym map[string]struct{}) error {
w.symbols = make(map[string]uint32, len(symbols)) w.symbols = make(map[string]uint32, len(symbols))
for _, s := range symbols { for index, s := range symbols {
w.symbols[s] = uint32(w.pos) + headerSize + uint32(w.buf2.len()) w.symbols[s] = uint32(index)
w.buf2.putUvarintStr(s) w.buf2.putUvarintStr(s)
} }
@ -382,11 +382,11 @@ func (w *Writer) WriteLabelIndex(names []string, values []string) error {
w.buf2.putBE32int(valt.Len()) w.buf2.putBE32int(valt.Len())
for _, v := range valt.s { for _, v := range valt.s {
offset, ok := w.symbols[v] index, ok := w.symbols[v]
if !ok { if !ok {
return errors.Errorf("symbol entry for %q does not exist", v) return errors.Errorf("symbol entry for %q does not exist", v)
} }
w.buf2.putBE32(offset) w.buf2.putBE32(index)
} }
w.buf1.reset() w.buf1.reset()
@ -751,16 +751,14 @@ func (r *Reader) readSymbols(off int) error {
d := r.decbufAt(off) d := r.decbufAt(off)
var ( var (
origLen = d.len()
cnt = d.be32int() cnt = d.be32int()
basePos = uint32(off) + 4 nextPos = 0
nextPos = basePos + uint32(origLen-d.len())
) )
for d.err() == nil && d.len() > 0 && cnt > 0 { for d.err() == nil && d.len() > 0 && cnt > 0 {
s := d.uvarintStr() s := d.uvarintStr()
r.symbols[uint32(nextPos)] = s r.symbols[uint32(nextPos)] = s
nextPos = basePos + uint32(origLen-d.len()) nextPos++
cnt-- cnt--
} }
return d.err() return d.err()