github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/storage/stores/indexshipper/compactor/retention/series.go (about) 1 package retention 2 3 import ( 4 "github.com/prometheus/prometheus/model/labels" 5 ) 6 7 type userSeries struct { 8 key []byte 9 seriesIDLen int 10 } 11 12 func newUserSeries(seriesID []byte, userID []byte) userSeries { 13 key := make([]byte, 0, len(seriesID)+len(userID)) 14 key = append(key, seriesID...) 15 key = append(key, userID...) 16 return userSeries{ 17 key: key, 18 seriesIDLen: len(seriesID), 19 } 20 } 21 22 func (us userSeries) Key() string { 23 return unsafeGetString(us.key) 24 } 25 26 func (us userSeries) SeriesID() []byte { 27 return us.key[:us.seriesIDLen] 28 } 29 30 func (us userSeries) UserID() []byte { 31 return us.key[us.seriesIDLen:] 32 } 33 34 func (us *userSeries) Reset(seriesID []byte, userID []byte) { 35 if us.key == nil { 36 us.key = make([]byte, 0, len(seriesID)+len(userID)) 37 } 38 us.key = us.key[:0] 39 us.key = append(us.key, seriesID...) 40 us.key = append(us.key, userID...) 41 us.seriesIDLen = len(seriesID) 42 } 43 44 type userSeriesInfo struct { 45 userSeries 46 isDeleted bool 47 lbls labels.Labels 48 } 49 50 type userSeriesMap map[string]userSeriesInfo 51 52 func newUserSeriesMap() userSeriesMap { 53 return make(userSeriesMap) 54 } 55 56 func (u userSeriesMap) Add(seriesID []byte, userID []byte, lbls labels.Labels) { 57 us := newUserSeries(seriesID, userID) 58 if _, ok := u[us.Key()]; ok { 59 return 60 } 61 62 u[us.Key()] = userSeriesInfo{ 63 userSeries: us, 64 isDeleted: true, 65 lbls: lbls, 66 } 67 } 68 69 // MarkSeriesNotDeleted is used to mark series not deleted when it still has some chunks left in the store 70 func (u userSeriesMap) MarkSeriesNotDeleted(seriesID []byte, userID []byte) { 71 us := newUserSeries(seriesID, userID) 72 usi := u[us.Key()] 73 usi.isDeleted = false 74 u[us.Key()] = usi 75 } 76 77 func (u userSeriesMap) ForEach(callback func(info userSeriesInfo) error) error { 78 for _, v := range u { 79 if err := callback(v); err != nil { 80 return err 81 } 82 } 83 return nil 84 }