Documentation ¶
Index ¶
- Variables
- func GetRandomStripe(ctx context.Context, segment metabase.Segment) (index int32, err error)
- type Chore
- type Collector
- func (collector *Collector) InlineSegment(ctx context.Context, segment *segmentloop.Segment) (err error)
- func (collector *Collector) LoopStarted(context.Context, segmentloop.LoopInfo) (err error)
- func (collector *Collector) RemoteSegment(ctx context.Context, segment *segmentloop.Segment) (err error)
- type Config
- type Containment
- type PendingAudit
- type PieceAudit
- type Pieces
- type Queue
- type Queues
- type Report
- type Reporter
- type Reservoir
- type Segment
- type Share
- type Verifier
- func (verifier *Verifier) DownloadShares(ctx context.Context, limits []*pb.AddressedOrderLimit, ...) (shares map[int]Share, err error)
- func (verifier *Verifier) GetShare(ctx context.Context, limit *pb.AddressedOrderLimit, ...) (share Share, err error)
- func (verifier *Verifier) Reverify(ctx context.Context, segment Segment) (report Report, err error)
- func (verifier *Verifier) SetNow(nowFn func() time.Time)
- func (verifier *Verifier) Verify(ctx context.Context, segment Segment, skip map[storj.NodeID]bool) (report Report, err error)
- type Worker
Constants ¶
This section is empty.
Variables ¶
var ( // ContainError is the containment errs class. ContainError = errs.Class("containment") // ErrContainedNotFound is the errs class for when a pending audit isn't found. ErrContainedNotFound = errs.Class("pending audit not found") // ErrContainDelete is the errs class for when a pending audit can't be deleted. ErrContainDelete = errs.Class("unable to delete pending audit") )
var ( errs.Class("not enough shares for successful audit") // ErrSegmentDeleted is the errs class when the audited segment was deleted during the audit. ErrSegmentDeleted = errs.Class("segment deleted during audit") // ErrSegmentModified is the errs class used when a segment has been changed in any way. ErrSegmentModified = errs.Class("segment has been modified") )ErrNotEnoughShares =
var ErrEmptyQueue = errs.Class("empty audit queue")
ErrEmptyQueue is used to indicate that the queue is empty.
var ErrPendingQueueInProgress = errs.Class("pending queue already in progress")
ErrPendingQueueInProgress means that a chore attempted to add a new pending queue when one was already being added.
var Error = errs.Class("audit")
Error is the default audit errs class.
Functions ¶
Types ¶
type Chore ¶ added in v0.21.0
Chore populates reservoirs and the audit queue.
architecture: Chore
type Collector ¶ added in v1.26.2
type Collector struct { Reservoirs map[storj.NodeID]*Reservoir // contains filtered or unexported fields }
Collector uses the segment loop to add segments to node reservoirs.
func NewCollector ¶ added in v1.26.2
NewCollector instantiates a segment collector.
func (*Collector) InlineSegment ¶ added in v1.26.2
func (collector *Collector) InlineSegment(ctx context.Context, segment *segmentloop.Segment) (err error)
InlineSegment returns nil because we're only auditing for storage nodes for now.
func (*Collector) LoopStarted ¶ added in v1.27.3
LoopStarted is called at each start of a loop.
func (*Collector) RemoteSegment ¶ added in v1.26.2
func (collector *Collector) RemoteSegment(ctx context.Context, segment *segmentloop.Segment) (err error)
RemoteSegment takes a remote segment found in metainfo and creates a reservoir for it if it doesn't exist already.
type Config ¶
type Config struct { MaxRetriesStatDB int `help:"max number of times to attempt updating a statdb batch" default:"3"` MinBytesPerSecond memory.Size `` /* 132-byte string literal not displayed */ MinDownloadTimeout time.Duration `help:"the minimum duration for downloading a share from storage nodes before timing out" default:"5m0s" testDefault:"5s"` MaxReverifyCount int `help:"limit above which we consider an audit is failed" default:"3"` ChoreInterval time.Duration `help:"how often to run the reservoir chore" releaseDefault:"24h" devDefault:"1m" testDefault:"$TESTINTERVAL"` QueueInterval time.Duration `help:"how often to recheck an empty audit queue" releaseDefault:"1h" devDefault:"1m" testDefault:"$TESTINTERVAL"` Slots int `help:"number of reservoir slots allotted for nodes, currently capped at 3" default:"3"` WorkerConcurrency int `help:"number of workers to run audits on segments" default:"2"` }
Config contains configurable values for audit chore and workers.
type Containment ¶
type Containment interface { Get(ctx context.Context, nodeID pb.NodeID) (*PendingAudit, error) IncrementPending(ctx context.Context, pendingAudit *PendingAudit) error Delete(ctx context.Context, nodeID pb.NodeID) (bool, error) }
Containment holds information about pending audits for contained nodes.
architecture: Database
type PendingAudit ¶
type PendingAudit struct { NodeID storj.NodeID PieceID storj.PieceID StripeIndex int32 ReverifyCount int32 StreamID uuid.UUID Position metabase.SegmentPosition }
PendingAudit contains info needed for retrying an audit for a contained node.
type PieceAudit ¶ added in v1.40.3
type PieceAudit int
PieceAudit is piece audit status.
const ( // PieceAuditUnknown is unknown piece audit. PieceAuditUnknown PieceAudit = iota // PieceAuditFailure is failed piece audit. PieceAuditFailure // PieceAuditOffline is offline node piece audit. PieceAuditOffline // PieceAuditContained is online but unresponsive node piece audit. PieceAuditContained // PieceAuditSuccess is successful piece audit. PieceAuditSuccess )
func PieceAuditFromErr ¶ added in v1.40.3
func PieceAuditFromErr(err error) PieceAudit
PieceAuditFromErr returns piece audit based on error.
type Pieces ¶ added in v1.40.3
type Pieces struct { Successful metabase.Pieces Failed metabase.Pieces Offline metabase.Pieces Contained metabase.Pieces Unknown metabase.Pieces }
Pieces contains pieces structured by piece audit.
type Queue ¶ added in v0.21.0
type Queue struct {
// contains filtered or unexported fields
}
Queue is a list of segments to audit, shared between the reservoir chore and audit workers. It is not safe for concurrent use.
type Queues ¶ added in v1.12.1
type Queues struct {
// contains filtered or unexported fields
}
Queues is a shared resource that keeps track of the next queue to be fetched and swaps with a new queue when ready.
func (*Queues) Fetch ¶ added in v1.12.1
Fetch gets the active queue, clears it, and swaps a pending queue in as the new active queue if available.
func (*Queues) Push ¶ added in v1.12.1
Push waits until the next queue has been fetched (if not empty), then swaps it with the provided pending queue. Push adds a pending queue to be swapped in when ready. If nextQueue is empty, it immediately replaces the queue. Otherwise it creates a swapQueue callback to be called when nextQueue is fetched. Only one call to Push is permitted at a time, otherwise it will return ErrPendingQueueInProgress.
type Report ¶
type Report struct { Successes storj.NodeIDList Fails storj.NodeIDList Offlines storj.NodeIDList PendingAudits []*PendingAudit Unknown storj.NodeIDList }
Report contains audit result. It records whether an audit is able to be completed, the total number of pieces a given audit has conducted for, lists for nodes that succeeded, failed, were offline, have pending audits, or failed for unknown reasons.
type Reporter ¶
type Reporter struct {
// contains filtered or unexported fields
}
Reporter records audit reports in overlay and implements the reporter interface.
architecture: Service
func NewReporter ¶
func NewReporter(log *zap.Logger, reputations *reputation.Service, containment Containment, maxRetries int, maxReverifyCount int32) *Reporter
NewReporter instantiates a reporter.
func (*Reporter) RecordAudits ¶
RecordAudits saves audit results to overlay. When no error, it returns nil for both return values, otherwise it returns the report with the fields set to the values which have been saved and the error.
type Reservoir ¶ added in v0.19.0
type Reservoir struct { Segments [maxReservoirSize]Segment // contains filtered or unexported fields }
Reservoir holds a certain number of segments to reflect a random sample.
func NewReservoir ¶ added in v0.19.0
NewReservoir instantiates a Reservoir.
type Segment ¶ added in v1.26.2
Segment is a segment to audit.
func NewSegment ¶ added in v1.26.2
func NewSegment(loopSegment *segmentloop.Segment) Segment
NewSegment creates a new segment to audit from a metainfo loop segment.
type Verifier ¶
type Verifier struct { OnTestingCheckSegmentAlteredHook func() // contains filtered or unexported fields }
Verifier helps verify the correctness of a given stripe.
architecture: Worker
func NewVerifier ¶
func NewVerifier(log *zap.Logger, metabase *metabase.DB, dialer rpc.Dialer, overlay *overlay.Service, containment Containment, orders *orders.Service, id *identity.FullIdentity, minBytesPerSecond memory.Size, minDownloadTimeout time.Duration) *Verifier
NewVerifier creates a Verifier.
func (*Verifier) DownloadShares ¶
func (verifier *Verifier) DownloadShares(ctx context.Context, limits []*pb.AddressedOrderLimit, piecePrivateKey storj.PiecePrivateKey, cachedIPsAndPorts map[storj.NodeID]string, stripeIndex int32, shareSize int32) (shares map[int]Share, err error)
DownloadShares downloads shares from the nodes where remote pieces are located.
func (*Verifier) GetShare ¶
func (verifier *Verifier) GetShare(ctx context.Context, limit *pb.AddressedOrderLimit, piecePrivateKey storj.PiecePrivateKey, cachedIPAndPort string, stripeIndex, shareSize int32, pieceNum int) (share Share, err error)
GetShare use piece store client to download shares from nodes.