Merge pull request #8182 from filecoin-project/jen/backports
chore: backports: snappy related improvements/bug fixes
This commit is contained in:
commit
ec6b786fbf
@ -253,7 +253,7 @@ type StorageMiner interface {
|
|||||||
// the path specified when calling CreateBackup is within the base path
|
// the path specified when calling CreateBackup is within the base path
|
||||||
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
||||||
|
|
||||||
CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, expensive bool) (map[abi.SectorNumber]string, error) //perm:admin
|
CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, update []bool, expensive bool) (map[abi.SectorNumber]string, error) //perm:admin
|
||||||
|
|
||||||
ComputeProof(ctx context.Context, ssi []builtin.ExtendedSectorInfo, rand abi.PoStRandomness, poStEpoch abi.ChainEpoch, nv abinetwork.Version) ([]builtin.PoStProof, error) //perm:read
|
ComputeProof(ctx context.Context, ssi []builtin.ExtendedSectorInfo, rand abi.PoStRandomness, poStEpoch abi.ChainEpoch, nv abinetwork.Version) ([]builtin.PoStProof, error) //perm:read
|
||||||
}
|
}
|
||||||
|
@ -619,7 +619,7 @@ type StorageMinerStruct struct {
|
|||||||
|
|
||||||
ActorSectorSize func(p0 context.Context, p1 address.Address) (abi.SectorSize, error) `perm:"read"`
|
ActorSectorSize func(p0 context.Context, p1 address.Address) (abi.SectorSize, error) `perm:"read"`
|
||||||
|
|
||||||
CheckProvable func(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storage.SectorRef, p3 bool) (map[abi.SectorNumber]string, error) `perm:"admin"`
|
CheckProvable func(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storage.SectorRef, p3 []bool, p4 bool) (map[abi.SectorNumber]string, error) `perm:"admin"`
|
||||||
|
|
||||||
ComputeProof func(p0 context.Context, p1 []builtin.ExtendedSectorInfo, p2 abi.PoStRandomness, p3 abi.ChainEpoch, p4 abinetwork.Version) ([]builtin.PoStProof, error) `perm:"read"`
|
ComputeProof func(p0 context.Context, p1 []builtin.ExtendedSectorInfo, p2 abi.PoStRandomness, p3 abi.ChainEpoch, p4 abinetwork.Version) ([]builtin.PoStProof, error) `perm:"read"`
|
||||||
|
|
||||||
@ -3704,14 +3704,14 @@ func (s *StorageMinerStub) ActorSectorSize(p0 context.Context, p1 address.Addres
|
|||||||
return *new(abi.SectorSize), ErrNotSupported
|
return *new(abi.SectorSize), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StorageMinerStruct) CheckProvable(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storage.SectorRef, p3 bool) (map[abi.SectorNumber]string, error) {
|
func (s *StorageMinerStruct) CheckProvable(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storage.SectorRef, p3 []bool, p4 bool) (map[abi.SectorNumber]string, error) {
|
||||||
if s.Internal.CheckProvable == nil {
|
if s.Internal.CheckProvable == nil {
|
||||||
return *new(map[abi.SectorNumber]string), ErrNotSupported
|
return *new(map[abi.SectorNumber]string), ErrNotSupported
|
||||||
}
|
}
|
||||||
return s.Internal.CheckProvable(p0, p1, p2, p3)
|
return s.Internal.CheckProvable(p0, p1, p2, p3, p4)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StorageMinerStub) CheckProvable(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storage.SectorRef, p3 bool) (map[abi.SectorNumber]string, error) {
|
func (s *StorageMinerStub) CheckProvable(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storage.SectorRef, p3 []bool, p4 bool) (map[abi.SectorNumber]string, error) {
|
||||||
return *new(map[abi.SectorNumber]string), ErrNotSupported
|
return *new(map[abi.SectorNumber]string), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ var (
|
|||||||
FullAPIVersion0 = newVer(1, 5, 0)
|
FullAPIVersion0 = newVer(1, 5, 0)
|
||||||
FullAPIVersion1 = newVer(2, 2, 0)
|
FullAPIVersion1 = newVer(2, 2, 0)
|
||||||
|
|
||||||
MinerAPIVersion0 = newVer(1, 3, 0)
|
MinerAPIVersion0 = newVer(1, 4, 0)
|
||||||
WorkerAPIVersion0 = newVer(1, 5, 0)
|
WorkerAPIVersion0 = newVer(1, 5, 0)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Binary file not shown.
@ -276,6 +276,13 @@ var sealBenchCmd = &cli.Command{
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("failed to run seals: %w", err)
|
return xerrors.Errorf("failed to run seals: %w", err)
|
||||||
}
|
}
|
||||||
|
for _, s := range extendedSealedSectors {
|
||||||
|
sealedSectors = append(sealedSectors, proof.SectorInfo{
|
||||||
|
SealedCID: s.SealedCID,
|
||||||
|
SectorNumber: s.SectorNumber,
|
||||||
|
SealProof: s.SealProof,
|
||||||
|
})
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// TODO: implement sbfs.List() and use that for all cases (preexisting sectorbuilder or not)
|
// TODO: implement sbfs.List() and use that for all cases (preexisting sectorbuilder or not)
|
||||||
|
|
||||||
|
@ -437,6 +437,7 @@ var provingCheckProvableCmd = &cli.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
var tocheck []storage.SectorRef
|
var tocheck []storage.SectorRef
|
||||||
|
var update []bool
|
||||||
for _, info := range sectorInfos {
|
for _, info := range sectorInfos {
|
||||||
si := abi.SectorID{
|
si := abi.SectorID{
|
||||||
Miner: abi.ActorID(mid),
|
Miner: abi.ActorID(mid),
|
||||||
@ -454,9 +455,10 @@ var provingCheckProvableCmd = &cli.Command{
|
|||||||
ProofType: info.SealProof,
|
ProofType: info.SealProof,
|
||||||
ID: si,
|
ID: si,
|
||||||
})
|
})
|
||||||
|
update = append(update, info.SectorKeyCID != nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
bad, err := sapi.CheckProvable(ctx, info.WindowPoStProofType, tocheck, cctx.Bool("slow"))
|
bad, err := sapi.CheckProvable(ctx, info.WindowPoStProofType, tocheck, update, cctx.Bool("slow"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -1530,6 +1530,12 @@ var sectorsSnapAbortCmd = &cli.Command{
|
|||||||
return lcli.ShowHelp(cctx, xerrors.Errorf("must pass sector number"))
|
return lcli.ShowHelp(cctx, xerrors.Errorf("must pass sector number"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
really := cctx.Bool("really-do-it")
|
||||||
|
if !really {
|
||||||
|
//nolint:golint
|
||||||
|
return fmt.Errorf("--really-do-it must be specified for this action to have an effect; you have been warned")
|
||||||
|
}
|
||||||
|
|
||||||
nodeApi, closer, err := lcli.GetStorageMinerAPI(cctx)
|
nodeApi, closer, err := lcli.GetStorageMinerAPI(cctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -310,6 +310,7 @@ Inputs:
|
|||||||
[
|
[
|
||||||
8,
|
8,
|
||||||
null,
|
null,
|
||||||
|
null,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
96
extern/sector-storage/faults.go
vendored
96
extern/sector-storage/faults.go
vendored
@ -19,11 +19,11 @@ import (
|
|||||||
|
|
||||||
// FaultTracker TODO: Track things more actively
|
// FaultTracker TODO: Track things more actively
|
||||||
type FaultTracker interface {
|
type FaultTracker interface {
|
||||||
CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, rg storiface.RGetter) (map[abi.SectorID]string, error)
|
CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, update []bool, rg storiface.RGetter) (map[abi.SectorID]string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckProvable returns unprovable sectors
|
// CheckProvable returns unprovable sectors
|
||||||
func (m *Manager) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, rg storiface.RGetter) (map[abi.SectorID]string, error) {
|
func (m *Manager) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, update []bool, rg storiface.RGetter) (map[abi.SectorID]string, error) {
|
||||||
var bad = make(map[abi.SectorID]string)
|
var bad = make(map[abi.SectorID]string)
|
||||||
|
|
||||||
ssize, err := pp.SectorSize()
|
ssize, err := pp.SectorSize()
|
||||||
@ -32,72 +32,76 @@ func (m *Manager) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: More better checks
|
// TODO: More better checks
|
||||||
for _, sector := range sectors {
|
for i, sector := range sectors {
|
||||||
err := func() error {
|
err := func() error {
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
var fReplica string
|
||||||
|
var fCache string
|
||||||
|
|
||||||
locked, err := m.index.StorageTryLock(ctx, sector.ID, storiface.FTSealed|storiface.FTCache, storiface.FTNone)
|
if update[i] {
|
||||||
if err != nil {
|
|
||||||
return xerrors.Errorf("acquiring sector lock: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !locked {
|
|
||||||
log.Warnw("CheckProvable Sector FAULT: can't acquire read lock", "sector", sector)
|
|
||||||
bad[sector.ID] = fmt.Sprint("can't acquire read lock")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
lp, _, err := m.localStore.AcquireSector(ctx, sector, storiface.FTSealed|storiface.FTCache, storiface.FTNone, storiface.PathStorage, storiface.AcquireMove)
|
|
||||||
if err != nil {
|
|
||||||
log.Warnw("CheckProvable Sector FAULT: acquire sector in checkProvable", "sector", sector, "error", err)
|
|
||||||
bad[sector.ID] = fmt.Sprintf("acquire sector failed: %s", err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// temporary hack to make the check work with snapdeals
|
|
||||||
// will go away in https://github.com/filecoin-project/lotus/pull/7971
|
|
||||||
if lp.Sealed == "" || lp.Cache == "" {
|
|
||||||
// maybe it's update
|
|
||||||
lockedUpdate, err := m.index.StorageTryLock(ctx, sector.ID, storiface.FTUpdate|storiface.FTUpdateCache, storiface.FTNone)
|
lockedUpdate, err := m.index.StorageTryLock(ctx, sector.ID, storiface.FTUpdate|storiface.FTUpdateCache, storiface.FTNone)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("acquiring sector lock: %w", err)
|
return xerrors.Errorf("acquiring sector lock: %w", err)
|
||||||
}
|
}
|
||||||
if lockedUpdate {
|
if !lockedUpdate {
|
||||||
lp, _, err = m.localStore.AcquireSector(ctx, sector, storiface.FTUpdate|storiface.FTUpdateCache, storiface.FTNone, storiface.PathStorage, storiface.AcquireMove)
|
log.Warnw("CheckProvable Sector FAULT: can't acquire read lock on update replica", "sector", sector)
|
||||||
if err != nil {
|
bad[sector.ID] = fmt.Sprint("can't acquire read lock")
|
||||||
log.Warnw("CheckProvable Sector FAULT: acquire sector in checkProvable", "sector", sector, "error", err)
|
return nil
|
||||||
bad[sector.ID] = fmt.Sprintf("acquire sector failed: %s", err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
lp.Sealed, lp.Cache = lp.Update, lp.UpdateCache
|
|
||||||
}
|
}
|
||||||
|
lp, _, err := m.localStore.AcquireSector(ctx, sector, storiface.FTUpdate|storiface.FTUpdateCache, storiface.FTNone, storiface.PathStorage, storiface.AcquireMove)
|
||||||
|
if err != nil {
|
||||||
|
log.Warnw("CheckProvable Sector FAULT: acquire sector update replica in checkProvable", "sector", sector, "error", err)
|
||||||
|
bad[sector.ID] = fmt.Sprintf("acquire sector failed: %s", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
fReplica, fCache = lp.Update, lp.UpdateCache
|
||||||
|
} else {
|
||||||
|
locked, err := m.index.StorageTryLock(ctx, sector.ID, storiface.FTSealed|storiface.FTCache, storiface.FTNone)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("acquiring sector lock: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !locked {
|
||||||
|
log.Warnw("CheckProvable Sector FAULT: can't acquire read lock", "sector", sector)
|
||||||
|
bad[sector.ID] = fmt.Sprint("can't acquire read lock")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
lp, _, err := m.localStore.AcquireSector(ctx, sector, storiface.FTSealed|storiface.FTCache, storiface.FTNone, storiface.PathStorage, storiface.AcquireMove)
|
||||||
|
if err != nil {
|
||||||
|
log.Warnw("CheckProvable Sector FAULT: acquire sector in checkProvable", "sector", sector, "error", err)
|
||||||
|
bad[sector.ID] = fmt.Sprintf("acquire sector failed: %s", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
fReplica, fCache = lp.Sealed, lp.Cache
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if lp.Sealed == "" || lp.Cache == "" {
|
if fReplica == "" || fCache == "" {
|
||||||
log.Warnw("CheckProvable Sector FAULT: cache and/or sealed paths not found", "sector", sector, "sealed", lp.Sealed, "cache", lp.Cache)
|
log.Warnw("CheckProvable Sector FAULT: cache and/or sealed paths not found", "sector", sector, "sealed", fReplica, "cache", fCache)
|
||||||
bad[sector.ID] = fmt.Sprintf("cache and/or sealed paths not found, cache %q, sealed %q", lp.Cache, lp.Sealed)
|
bad[sector.ID] = fmt.Sprintf("cache and/or sealed paths not found, cache %q, sealed %q", fCache, fReplica)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
toCheck := map[string]int64{
|
toCheck := map[string]int64{
|
||||||
lp.Sealed: 1,
|
fReplica: 1,
|
||||||
filepath.Join(lp.Cache, "p_aux"): 0,
|
filepath.Join(fCache, "p_aux"): 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
addCachePathsForSectorSize(toCheck, lp.Cache, ssize)
|
addCachePathsForSectorSize(toCheck, fCache, ssize)
|
||||||
|
|
||||||
for p, sz := range toCheck {
|
for p, sz := range toCheck {
|
||||||
st, err := os.Stat(p)
|
st, err := os.Stat(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnw("CheckProvable Sector FAULT: sector file stat error", "sector", sector, "sealed", lp.Sealed, "cache", lp.Cache, "file", p, "err", err)
|
log.Warnw("CheckProvable Sector FAULT: sector file stat error", "sector", sector, "sealed", fReplica, "cache", fCache, "file", p, "err", err)
|
||||||
bad[sector.ID] = fmt.Sprintf("%s", err)
|
bad[sector.ID] = fmt.Sprintf("%s", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if sz != 0 {
|
if sz != 0 {
|
||||||
if st.Size() != int64(ssize)*sz {
|
if st.Size() != int64(ssize)*sz {
|
||||||
log.Warnw("CheckProvable Sector FAULT: sector file is wrong size", "sector", sector, "sealed", lp.Sealed, "cache", lp.Cache, "file", p, "size", st.Size(), "expectSize", int64(ssize)*sz)
|
log.Warnw("CheckProvable Sector FAULT: sector file is wrong size", "sector", sector, "sealed", fReplica, "cache", fCache, "file", p, "size", st.Size(), "expectSize", int64(ssize)*sz)
|
||||||
bad[sector.ID] = fmt.Sprintf("%s is wrong size (got %d, expect %d)", p, st.Size(), int64(ssize)*sz)
|
bad[sector.ID] = fmt.Sprintf("%s is wrong size (got %d, expect %d)", p, st.Size(), int64(ssize)*sz)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -118,14 +122,14 @@ func (m *Manager) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof,
|
|||||||
sector.ID.Number,
|
sector.ID.Number,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnw("CheckProvable Sector FAULT: generating challenges", "sector", sector, "sealed", lp.Sealed, "cache", lp.Cache, "err", err)
|
log.Warnw("CheckProvable Sector FAULT: generating challenges", "sector", sector, "sealed", fReplica, "cache", fCache, "err", err)
|
||||||
bad[sector.ID] = fmt.Sprintf("generating fallback challenges: %s", err)
|
bad[sector.ID] = fmt.Sprintf("generating fallback challenges: %s", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
commr, err := rg(ctx, sector.ID)
|
commr, err := rg(ctx, sector.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnw("CheckProvable Sector FAULT: getting commR", "sector", sector, "sealed", lp.Sealed, "cache", lp.Cache, "err", err)
|
log.Warnw("CheckProvable Sector FAULT: getting commR", "sector", sector, "sealed", fReplica, "cache", fCache, "err", err)
|
||||||
bad[sector.ID] = fmt.Sprintf("getting commR: %s", err)
|
bad[sector.ID] = fmt.Sprintf("getting commR: %s", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -136,12 +140,12 @@ func (m *Manager) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof,
|
|||||||
SectorNumber: sector.ID.Number,
|
SectorNumber: sector.ID.Number,
|
||||||
SealedCID: commr,
|
SealedCID: commr,
|
||||||
},
|
},
|
||||||
CacheDirPath: lp.Cache,
|
CacheDirPath: fCache,
|
||||||
PoStProofType: wpp,
|
PoStProofType: wpp,
|
||||||
SealedSectorPath: lp.Sealed,
|
SealedSectorPath: fReplica,
|
||||||
}, ch.Challenges[sector.ID.Number])
|
}, ch.Challenges[sector.ID.Number])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnw("CheckProvable Sector FAULT: generating vanilla proof", "sector", sector, "sealed", lp.Sealed, "cache", lp.Cache, "err", err)
|
log.Warnw("CheckProvable Sector FAULT: generating vanilla proof", "sector", sector, "sealed", fReplica, "cache", fCache, "err", err)
|
||||||
bad[sector.ID] = fmt.Sprintf("generating vanilla proof: %s", err)
|
bad[sector.ID] = fmt.Sprintf("generating vanilla proof: %s", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
2
extern/sector-storage/mock/mock.go
vendored
2
extern/sector-storage/mock/mock.go
vendored
@ -505,7 +505,7 @@ func (mgr *SectorMgr) Remove(ctx context.Context, sector storage.SectorRef) erro
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mgr *SectorMgr) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, ids []storage.SectorRef, rg storiface.RGetter) (map[abi.SectorID]string, error) {
|
func (mgr *SectorMgr) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, ids []storage.SectorRef, update []bool, rg storiface.RGetter) (map[abi.SectorID]string, error) {
|
||||||
bad := map[abi.SectorID]string{}
|
bad := map[abi.SectorID]string{}
|
||||||
|
|
||||||
for _, sid := range ids {
|
for _, sid := range ids {
|
||||||
|
2
go.mod
2
go.mod
@ -2,6 +2,8 @@ module github.com/filecoin-project/lotus
|
|||||||
|
|
||||||
go 1.16
|
go 1.16
|
||||||
|
|
||||||
|
retract v1.14.0 // Accidentally force-pushed tag, use v1.14.1+ instead.
|
||||||
|
|
||||||
require (
|
require (
|
||||||
contrib.go.opencensus.io/exporter/jaeger v0.2.1
|
contrib.go.opencensus.io/exporter/jaeger v0.2.1
|
||||||
contrib.go.opencensus.io/exporter/prometheus v0.4.0
|
contrib.go.opencensus.io/exporter/prometheus v0.4.0
|
||||||
|
@ -960,7 +960,7 @@ func (sm *StorageMinerAPI) CreateBackup(ctx context.Context, fpath string) error
|
|||||||
return backup(sm.DS, fpath)
|
return backup(sm.DS, fpath)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sm *StorageMinerAPI) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []sto.SectorRef, expensive bool) (map[abi.SectorNumber]string, error) {
|
func (sm *StorageMinerAPI) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []sto.SectorRef, update []bool, expensive bool) (map[abi.SectorNumber]string, error) {
|
||||||
var rg storiface.RGetter
|
var rg storiface.RGetter
|
||||||
if expensive {
|
if expensive {
|
||||||
rg = func(ctx context.Context, id abi.SectorID) (cid.Cid, error) {
|
rg = func(ctx context.Context, id abi.SectorID) (cid.Cid, error) {
|
||||||
@ -976,7 +976,7 @@ func (sm *StorageMinerAPI) CheckProvable(ctx context.Context, pp abi.RegisteredP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bad, err := sm.StorageMgr.CheckProvable(ctx, pp, sectors, rg)
|
bad, err := sm.StorageMgr.CheckProvable(ctx, pp, sectors, update, rg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -205,6 +205,7 @@ func (s *WindowPoStScheduler) checkSectors(ctx context.Context, check bitfield.B
|
|||||||
|
|
||||||
sectors := make(map[abi.SectorNumber]struct{})
|
sectors := make(map[abi.SectorNumber]struct{})
|
||||||
var tocheck []storage.SectorRef
|
var tocheck []storage.SectorRef
|
||||||
|
var update []bool
|
||||||
for _, info := range sectorInfos {
|
for _, info := range sectorInfos {
|
||||||
sectors[info.SectorNumber] = struct{}{}
|
sectors[info.SectorNumber] = struct{}{}
|
||||||
tocheck = append(tocheck, storage.SectorRef{
|
tocheck = append(tocheck, storage.SectorRef{
|
||||||
@ -214,9 +215,10 @@ func (s *WindowPoStScheduler) checkSectors(ctx context.Context, check bitfield.B
|
|||||||
Number: info.SectorNumber,
|
Number: info.SectorNumber,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
update = append(update, info.SectorKeyCID != nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
bad, err := s.faultTracker.CheckProvable(ctx, s.proofType, tocheck, nil)
|
bad, err := s.faultTracker.CheckProvable(ctx, s.proofType, tocheck, update, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return bitfield.BitField{}, xerrors.Errorf("checking provable sectors: %w", err)
|
return bitfield.BitField{}, xerrors.Errorf("checking provable sectors: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -168,7 +168,7 @@ func (m mockVerif) GenerateWinningPoStSectorChallenge(context.Context, abi.Regis
|
|||||||
type mockFaultTracker struct {
|
type mockFaultTracker struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mockFaultTracker) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, rg storiface.RGetter) (map[abi.SectorID]string, error) {
|
func (m mockFaultTracker) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, update []bool, rg storiface.RGetter) (map[abi.SectorID]string, error) {
|
||||||
// Returns "bad" sectors so just return empty map meaning all sectors are good
|
// Returns "bad" sectors so just return empty map meaning all sectors are good
|
||||||
return map[abi.SectorID]string{}, nil
|
return map[abi.SectorID]string{}, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user