7652a598d8
We will be needing an infrequent chore to check which nodes are in the reverify queue and synchronize that set with the 'contained' field in the nodes db, since it is easily possible for them to get out of sync. (We can't require that the reverification queue table be in the same database as the nodes table, so maintaining consistency with SQL transactions is out. Plus, even if they were in the same database, using such SQL transactions to maintain consistency would be slow and unwieldy.) This commit adds a method to the class representing the reverify queue in the database, allowing us to get the list of every node that has at least one record in the reverification queue. Refs: https://github.com/storj/storj/issues/5431 Change-Id: Idce2633b3d63f2645170365e5cdeb2ea749fa9cb
34 lines
980 B
Go
34 lines
980 B
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package audit
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/zeebo/errs"
|
|
|
|
"storj.io/common/pb"
|
|
)
|
|
|
|
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")
|
|
)
|
|
|
|
// Containment holds information about pending audits for contained nodes.
|
|
//
|
|
// architecture: Database
|
|
type Containment interface {
|
|
Get(ctx context.Context, nodeID pb.NodeID) (*ReverificationJob, error)
|
|
Insert(ctx context.Context, job *PieceLocator) error
|
|
Delete(ctx context.Context, job *PieceLocator) (wasDeleted, nodeStillContained bool, err error)
|
|
GetAllContainedNodes(ctx context.Context) ([]pb.NodeID, error)
|
|
}
|