github.com/grafana/pyroscope@v1.18.0/pkg/metastore/compaction/scheduler/store/job_plan_store.go (about)

     1  package store
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	"go.etcd.io/bbolt"
     8  
     9  	"github.com/grafana/pyroscope/api/gen/proto/go/metastore/v1/raft_log"
    10  	"github.com/grafana/pyroscope/pkg/metastore/store"
    11  )
    12  
    13  var jobPlanBucketName = []byte("compaction_job_plan")
    14  
    15  var ErrInvalidJobPlan = errors.New("invalid job plan entry")
    16  
    17  type JobPlanStore struct{ bucketName []byte }
    18  
    19  func NewJobPlanStore() *JobPlanStore {
    20  	return &JobPlanStore{bucketName: jobPlanBucketName}
    21  }
    22  
    23  func (s JobPlanStore) CreateBuckets(tx *bbolt.Tx) error {
    24  	_, err := tx.CreateBucketIfNotExists(s.bucketName)
    25  	return err
    26  }
    27  
    28  func (s JobPlanStore) StoreJobPlan(tx *bbolt.Tx, plan *raft_log.CompactionJobPlan) error {
    29  	v, _ := plan.MarshalVT()
    30  	return tx.Bucket(s.bucketName).Put([]byte(plan.Name), v)
    31  }
    32  
    33  func (s JobPlanStore) GetJobPlan(tx *bbolt.Tx, name string) (*raft_log.CompactionJobPlan, error) {
    34  	b := tx.Bucket(s.bucketName).Get([]byte(name))
    35  	if b == nil {
    36  		return nil, fmt.Errorf("loading job plan %s: %w", name, store.ErrNotFound)
    37  	}
    38  	var v raft_log.CompactionJobPlan
    39  	if err := v.UnmarshalVT(b); err != nil {
    40  		return nil, fmt.Errorf("%w: %v", ErrInvalidJobPlan, err)
    41  	}
    42  	return &v, nil
    43  }
    44  
    45  func (s JobPlanStore) DeleteJobPlan(tx *bbolt.Tx, name string) error {
    46  	return tx.Bucket(s.bucketName).Delete([]byte(name))
    47  }