ff6d640fca
Minimal implementation of the ranged (=threaded) segment loop service, to improve performance over the existing loop. Has tests with a an inmemory segment database and example observer. Does not have yet: database link, observer duration tracking, suspicious processed ratio guard, rate limiting, minimum execution interval per observer, etc. Part of https://github.com/storj/storj/issues/5223 Change-Id: I08ffb392c3539e380f4e7b4f1afd56c4c394668d
23 lines
620 B
Go
23 lines
620 B
Go
// Copyright (C) 2022 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package rangedloop
|
|
|
|
import (
|
|
"context"
|
|
|
|
"storj.io/storj/satellite/metabase/segmentloop"
|
|
)
|
|
|
|
// RangeSplitter gives a way to get non-overlapping ranges of segments concurrently.
|
|
// It usually abstracts over a database.
|
|
// It is a subcomponent of the ranged segment loop.
|
|
type RangeSplitter interface {
|
|
CreateRanges(nRanges int, batchSize int) ([]SegmentProvider, error)
|
|
}
|
|
|
|
// SegmentProvider iterates through a range of segments.
|
|
type SegmentProvider interface {
|
|
Iterate(ctx context.Context, fn func([]segmentloop.Segment) error) error
|
|
}
|