mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-25 05:34:05 -08:00
Breakdown generic writeOffsetTable (#643)
* Breakdown generic writeOffsetTable into writeLabelIndexesOffsetTable and writePostingsOffsetTable Signed-off-by: Ganesh Vernekar <cs15btech11018@iith.ac.in> * Add CHANGELOG entry Signed-off-by: Ganesh Vernekar <cs15btech11018@iith.ac.in> * Remove CHANGELOG entry Signed-off-by: Ganesh Vernekar <cs15btech11018@iith.ac.in>
This commit is contained in:
parent
b5b8c9200c
commit
0fdd93b0b9
|
@ -123,10 +123,10 @@ type Writer struct {
|
||||||
buf2 encoding.Encbuf
|
buf2 encoding.Encbuf
|
||||||
uint32s []uint32
|
uint32s []uint32
|
||||||
|
|
||||||
symbols map[string]uint32 // symbol offsets
|
symbols map[string]uint32 // symbol offsets
|
||||||
seriesOffsets map[uint64]uint64 // offsets of series
|
seriesOffsets map[uint64]uint64 // offsets of series
|
||||||
labelIndexes []hashEntry // label index offsets
|
labelIndexes []labelIndexHashEntry // label index offsets
|
||||||
postings []hashEntry // postings lists offsets
|
postings []postingsHashEntry // postings lists offsets
|
||||||
|
|
||||||
// Hold last series to validate that clients insert new series in order.
|
// Hold last series to validate that clients insert new series in order.
|
||||||
lastSeries labels.Labels
|
lastSeries labels.Labels
|
||||||
|
@ -271,11 +271,11 @@ func (w *Writer) ensureStage(s indexWriterStage) error {
|
||||||
|
|
||||||
case idxStageDone:
|
case idxStageDone:
|
||||||
w.toc.LabelIndicesTable = w.pos
|
w.toc.LabelIndicesTable = w.pos
|
||||||
if err := w.writeOffsetTable(w.labelIndexes); err != nil {
|
if err := w.writeLabelIndexesOffsetTable(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
w.toc.PostingsTable = w.pos
|
w.toc.PostingsTable = w.pos
|
||||||
if err := w.writeOffsetTable(w.postings); err != nil {
|
if err := w.writePostingsOffsetTable(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := w.writeTOC(); err != nil {
|
if err := w.writeTOC(); err != nil {
|
||||||
|
@ -420,7 +420,7 @@ func (w *Writer) WriteLabelIndex(names []string, values []string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
w.labelIndexes = append(w.labelIndexes, hashEntry{
|
w.labelIndexes = append(w.labelIndexes, labelIndexHashEntry{
|
||||||
keys: names,
|
keys: names,
|
||||||
offset: w.pos,
|
offset: w.pos,
|
||||||
})
|
})
|
||||||
|
@ -447,12 +447,12 @@ func (w *Writer) WriteLabelIndex(names []string, values []string) error {
|
||||||
return errors.Wrap(err, "write label index")
|
return errors.Wrap(err, "write label index")
|
||||||
}
|
}
|
||||||
|
|
||||||
// writeOffsetTable writes a sequence of readable hash entries.
|
// writeLabelIndexesOffsetTable writes the label indices offset table.
|
||||||
func (w *Writer) writeOffsetTable(entries []hashEntry) error {
|
func (w *Writer) writeLabelIndexesOffsetTable() error {
|
||||||
w.buf2.Reset()
|
w.buf2.Reset()
|
||||||
w.buf2.PutBE32int(len(entries))
|
w.buf2.PutBE32int(len(w.labelIndexes))
|
||||||
|
|
||||||
for _, e := range entries {
|
for _, e := range w.labelIndexes {
|
||||||
w.buf2.PutUvarint(len(e.keys))
|
w.buf2.PutUvarint(len(e.keys))
|
||||||
for _, k := range e.keys {
|
for _, k := range e.keys {
|
||||||
w.buf2.PutUvarintStr(k)
|
w.buf2.PutUvarintStr(k)
|
||||||
|
@ -467,6 +467,25 @@ func (w *Writer) writeOffsetTable(entries []hashEntry) error {
|
||||||
return w.write(w.buf1.Get(), w.buf2.Get())
|
return w.write(w.buf1.Get(), w.buf2.Get())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// writePostingsOffsetTable writes the postings offset table.
|
||||||
|
func (w *Writer) writePostingsOffsetTable() error {
|
||||||
|
w.buf2.Reset()
|
||||||
|
w.buf2.PutBE32int(len(w.postings))
|
||||||
|
|
||||||
|
for _, e := range w.postings {
|
||||||
|
w.buf2.PutUvarint(2)
|
||||||
|
w.buf2.PutUvarintStr(e.name)
|
||||||
|
w.buf2.PutUvarintStr(e.value)
|
||||||
|
w.buf2.PutUvarint64(e.offset)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.buf1.Reset()
|
||||||
|
w.buf1.PutBE32int(w.buf2.Len())
|
||||||
|
w.buf2.PutHash(w.crc32)
|
||||||
|
|
||||||
|
return w.write(w.buf1.Get(), w.buf2.Get())
|
||||||
|
}
|
||||||
|
|
||||||
const indexTOCLen = 6*8 + 4
|
const indexTOCLen = 6*8 + 4
|
||||||
|
|
||||||
func (w *Writer) writeTOC() error {
|
func (w *Writer) writeTOC() error {
|
||||||
|
@ -494,8 +513,9 @@ func (w *Writer) WritePostings(name, value string, it Postings) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
w.postings = append(w.postings, hashEntry{
|
w.postings = append(w.postings, postingsHashEntry{
|
||||||
keys: []string{name, value},
|
name: name,
|
||||||
|
value: value,
|
||||||
offset: w.pos,
|
offset: w.pos,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -542,11 +562,16 @@ func (s uint32slice) Len() int { return len(s) }
|
||||||
func (s uint32slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
func (s uint32slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
||||||
func (s uint32slice) Less(i, j int) bool { return s[i] < s[j] }
|
func (s uint32slice) Less(i, j int) bool { return s[i] < s[j] }
|
||||||
|
|
||||||
type hashEntry struct {
|
type labelIndexHashEntry struct {
|
||||||
keys []string
|
keys []string
|
||||||
offset uint64
|
offset uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type postingsHashEntry struct {
|
||||||
|
name, value string
|
||||||
|
offset uint64
|
||||||
|
}
|
||||||
|
|
||||||
func (w *Writer) Close() error {
|
func (w *Writer) Close() error {
|
||||||
if err := w.ensureStage(idxStageDone); err != nil {
|
if err := w.ensureStage(idxStageDone); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in a new issue