github.com/grafana/pyroscope@v1.18.0/pkg/metastore/index/store/shard_index.go (about) 1 package store 2 3 import ( 4 "encoding/binary" 5 "time" 6 ) 7 8 type ShardIndex struct { 9 MinTime int64 10 MaxTime int64 11 } 12 13 func (i *ShardIndex) UnmarshalBinary(data []byte) error { 14 if len(data) < 16 { 15 return ErrInvalidShardIndex 16 } 17 i.MinTime = int64(binary.BigEndian.Uint64(data[0:8])) 18 i.MaxTime = int64(binary.BigEndian.Uint64(data[8:16])) 19 return nil 20 } 21 22 func (i *ShardIndex) MarshalBinary() []byte { 23 b := make([]byte, 16) 24 binary.BigEndian.PutUint64(b[0:8], uint64(i.MinTime)) 25 binary.BigEndian.PutUint64(b[8:16], uint64(i.MaxTime)) 26 return b 27 } 28 29 func (i *ShardIndex) Overlaps(start, end time.Time) bool { 30 // For backward compatibility. 31 if i.MinTime == 0 || i.MaxTime == 0 { 32 return true 33 } 34 if start.After(time.UnixMilli(i.MaxTime)) { 35 return false 36 } 37 if end.Before(time.UnixMilli(i.MinTime)) { 38 return false 39 } 40 return true 41 }