package sealer import ( "context" "golang.org/x/xerrors" "github.com/filecoin-project/specs-storage/storage" "github.com/filecoin-project/lotus/storage/paths" storiface "github.com/filecoin-project/lotus/storage/sealer/storiface" ) type readonlyProvider struct { index paths.SectorIndex stor *paths.Local } func (l *readonlyProvider) AcquireSector(ctx context.Context, id storage.SectorRef, existing storiface.SectorFileType, allocate storiface.SectorFileType, sealing storiface.PathType) (storiface.SectorPaths, func(), error) { if allocate != storiface.FTNone { return storiface.SectorPaths{}, nil, xerrors.New("read-only storage") } ctx, cancel := context.WithCancel(ctx) // use TryLock to avoid blocking locked, err := l.index.StorageTryLock(ctx, id.ID, existing, storiface.FTNone) if err != nil { cancel() return storiface.SectorPaths{}, nil, xerrors.Errorf("acquiring sector lock: %w", err) } if !locked { cancel() return storiface.SectorPaths{}, nil, xerrors.Errorf("failed to acquire sector lock") } p, _, err := l.stor.AcquireSector(ctx, id, existing, allocate, sealing, storiface.AcquireMove) return p, cancel, err }