package storiface import ( "context" "fmt" "io" "time" "github.com/google/uuid" "github.com/ipfs/go-cid" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/specs-storage/storage" "github.com/filecoin-project/lotus/extern/sector-storage/sealtasks" ) type WorkerInfo struct { Hostname string Resources WorkerResources } type WorkerResources struct { MemPhysical uint64 MemSwap uint64 MemReserved uint64 // Used by system / other processes CPUs uint64 // Logical cores GPUs []string } type WorkerStats struct { Info WorkerInfo Enabled bool MemUsedMin uint64 MemUsedMax uint64 GpuUsed bool // nolint CpuUse uint64 // nolint } const ( RWRetWait = -1 RWReturned = -2 RWRetDone = -3 ) type WorkerJob struct { ID CallID Sector abi.SectorID Task sealtasks.TaskType // 1+ - assigned // 0 - running // -1 - ret-wait // -2 - returned // -3 - ret-done RunWait int Start time.Time Hostname string `json:",omitempty"` // optional, set for ret-wait jobs } type CallID struct { Sector abi.SectorID ID uuid.UUID } func (c CallID) String() string { return fmt.Sprintf("%d-%d-%s", c.Sector.Miner, c.Sector.Number, c.ID) } var _ fmt.Stringer = &CallID{} var UndefCall CallID type WorkerCalls interface { AddPiece(ctx context.Context, sector storage.SectorRef, pieceSizes []abi.UnpaddedPieceSize, newPieceSize abi.UnpaddedPieceSize, pieceData storage.Data) (CallID, error) SealPreCommit1(ctx context.Context, sector storage.SectorRef, ticket abi.SealRandomness, pieces []abi.PieceInfo) (CallID, error) SealPreCommit2(ctx context.Context, sector storage.SectorRef, pc1o storage.PreCommit1Out) (CallID, error) SealCommit1(ctx context.Context, sector storage.SectorRef, ticket abi.SealRandomness, seed abi.InteractiveSealRandomness, pieces []abi.PieceInfo, cids storage.SectorCids) (CallID, error) SealCommit2(ctx context.Context, sector storage.SectorRef, c1o storage.Commit1Out) (CallID, error) FinalizeSector(ctx context.Context, sector storage.SectorRef, keepUnsealed []storage.Range) (CallID, error) ReleaseUnsealed(ctx context.Context, sector storage.SectorRef, safeToFree []storage.Range) (CallID, error) MoveStorage(ctx context.Context, sector storage.SectorRef, types SectorFileType) (CallID, error) UnsealPiece(context.Context, storage.SectorRef, UnpaddedByteIndex, abi.UnpaddedPieceSize, abi.SealRandomness, cid.Cid) (CallID, error) ReadPiece(context.Context, io.Writer, storage.SectorRef, UnpaddedByteIndex, abi.UnpaddedPieceSize) (CallID, error) Fetch(context.Context, storage.SectorRef, SectorFileType, PathType, AcquireMode) (CallID, error) } type WorkerReturn interface { ReturnAddPiece(ctx context.Context, callID CallID, pi abi.PieceInfo, err string) error ReturnSealPreCommit1(ctx context.Context, callID CallID, p1o storage.PreCommit1Out, err string) error ReturnSealPreCommit2(ctx context.Context, callID CallID, sealed storage.SectorCids, err string) error ReturnSealCommit1(ctx context.Context, callID CallID, out storage.Commit1Out, err string) error ReturnSealCommit2(ctx context.Context, callID CallID, proof storage.Proof, err string) error ReturnFinalizeSector(ctx context.Context, callID CallID, err string) error ReturnReleaseUnsealed(ctx context.Context, callID CallID, err string) error ReturnMoveStorage(ctx context.Context, callID CallID, err string) error ReturnUnsealPiece(ctx context.Context, callID CallID, err string) error ReturnReadPiece(ctx context.Context, callID CallID, ok bool, err string) error ReturnFetch(ctx context.Context, callID CallID, err string) error }