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  }