From 4910a33d78259149ec583dff0fb0b8ad7f3d4aad Mon Sep 17 00:00:00 2001 From: Callum Styan Date: Mon, 20 Feb 2023 13:12:15 -0800 Subject: [PATCH] add lookup table struct that is used to build the symbol table in new write request format Signed-off-by: Callum Styan --- storage/remote/intern.go | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/storage/remote/intern.go b/storage/remote/intern.go index 23047acd9b..3968ca3076 100644 --- a/storage/remote/intern.go +++ b/storage/remote/intern.go @@ -100,3 +100,44 @@ func (p *pool) release(s string) { } delete(p.pool, s) } + +// used to create a lookup table for a new remote write request, should not be used concurrently +type lookupPool struct { + nextRef uint64 + table map[uint64]string + reverseTable map[string]uint64 +} + +func newLookupPool() *lookupPool { + return &lookupPool{ + table: map[uint64]string{}, + reverseTable: map[string]uint64{}, + } +} + +func (p *lookupPool) intern(s string) uint64 { + if ref, ok := p.reverseTable[s]; ok { + return ref + } + + ref := p.nextRef + p.reverseTable[s] = ref + p.table[ref] = s + p.nextRef++ + + return ref +} + +func (p *lookupPool) getTable() map[uint64]string { + return p.table +} + +func (p *lookupPool) clear() { + for k := range p.table { + delete(p.table, k) + } + for k := range p.reverseTable { + delete(p.reverseTable, k) + } + p.nextRef = 0 +}