Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // Error is a standard error class for this component. Error = errs.Class("metainfo loop error") // ErrClosed is a loop closed error. ErrClosed = Error.New("loop closed") )
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { CoalesceDuration time.Duration `help:"how long to wait for new observers before starting iteration" releaseDefault:"5s" devDefault:"5s"` RateLimit float64 `help:"rate limit (default is 0 which is unlimited segments per second)" default:"0"` ListLimit int `help:"how many items to query in a batch" default:"2500"` }
Config contains configurable values for the metainfo loop.
type MetabaseDB ¶
type MetabaseDB interface { // IterateLoopObjects iterates through all objects in metabase for metainfo loop purpose. IterateLoopObjects(ctx context.Context, opts metabase.IterateLoopObjects, fn func(context.Context, metabase.LoopObjectsIterator) error) (err error) // IterateLoopStreams iterates through all streams passed in as arguments. IterateLoopStreams(ctx context.Context, opts metabase.IterateLoopStreams, handleStream func(ctx context.Context, streamID uuid.UUID, next metabase.SegmentIterator) error) (err error) }
MetabaseDB contains iterators for the metabase data.
type NullObserver ¶
type NullObserver struct{}
NullObserver is an observer that does nothing. This is useful for joining and ensuring the metainfo loop runs once before you use a real observer.
func (NullObserver) InlineSegment ¶
func (NullObserver) InlineSegment(context.Context, *Segment) error
InlineSegment implements the Observer interface.
func (NullObserver) Object ¶
func (NullObserver) Object(context.Context, *Object) error
Object implements the Observer interface.
func (NullObserver) RemoteSegment ¶
func (NullObserver) RemoteSegment(context.Context, *Segment) error
RemoteSegment implements the Observer interface.
type Object ¶
type Object metabase.LoopObjectEntry
Object is the object info passed to Observer by metainfo loop.
type Observer ¶
type Observer interface { Object(context.Context, *Object) error RemoteSegment(context.Context, *Segment) error InlineSegment(context.Context, *Segment) error }
Observer is an interface defining an observer that can subscribe to the metainfo loop.
architecture: Observer
type Segment ¶
type Segment struct { Location metabase.SegmentLocation // tally, repair, graceful exit, audit CreationDate time.Time // repair ExpirationDate time.Time // tally, repair LastRepaired time.Time // repair metabase.LoopSegmentEntry }
Segment is the segment info passed to Observer by metainfo loop.
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
Service is a metainfo loop service.
architecture: Service
func New ¶
func New(config Config, metabaseDB MetabaseDB) *Service
New creates a new metainfo loop service.
func (*Service) Join ¶
Join will join the looper for one full cycle until completion and then returns. On ctx cancel the observer will return without completely finishing. Only on full complete iteration it will return nil. Safe to be called concurrently.
func (*Service) Run ¶
Run starts the looping service. It can only be called once, otherwise a panic will occur.