Merge pull request #999 from filecoin-project/fix/sector-set-removal
don't fail execution if the fault set contains an invalid sector ID
This commit is contained in:
commit
30b857bc8a
@ -721,8 +721,10 @@ func RemoveFromSectorSet(ctx context.Context, s types.Storage, ss cid.Cid, ids [
|
|||||||
return cid.Undef, aerrors.HandleExternalError(err, "could not load sector set node")
|
return cid.Undef, aerrors.HandleExternalError(err, "could not load sector set node")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ssr.BatchDelete(ids); err != nil {
|
for _, id := range ids {
|
||||||
return cid.Undef, aerrors.HandleExternalError(err, "failed to delete from sector set")
|
if err := ssr.Delete(id); err != nil {
|
||||||
|
log.Warnf("failed to delete sector %d from set: %s", id, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ncid, err := ssr.Flush()
|
ncid, err := ssr.Flush()
|
||||||
|
@ -52,6 +52,71 @@ func TestMinerCommitSectors(t *testing.T) {
|
|||||||
assertSectorIDs(h, t, minerAddr, []uint64{1})
|
assertSectorIDs(h, t, minerAddr, []uint64{1})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMinerSubmitBadFault(t *testing.T) {
|
||||||
|
var worker, client address.Address
|
||||||
|
var minerAddr address.Address
|
||||||
|
opts := []HarnessOpt{
|
||||||
|
HarnessAddr(&worker, 1000000),
|
||||||
|
HarnessAddr(&client, 1000000),
|
||||||
|
HarnessActor(&minerAddr, &worker, actors.StorageMinerCodeCid,
|
||||||
|
func() cbg.CBORMarshaler {
|
||||||
|
return &actors.StorageMinerConstructorParams{
|
||||||
|
Owner: worker,
|
||||||
|
Worker: worker,
|
||||||
|
SectorSize: 1024,
|
||||||
|
PeerID: "fakepeerid",
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
h := NewHarness(t, opts...)
|
||||||
|
h.vm.Syscalls.ValidatePoRep = func(ctx context.Context, maddr address.Address, ssize uint64, commD, commR, ticket, proof, seed []byte, sectorID uint64) (bool, aerrors.ActorError) {
|
||||||
|
// all proofs are valid
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
ret, _ := h.SendFunds(t, worker, minerAddr, types.NewInt(100000))
|
||||||
|
ApplyOK(t, ret)
|
||||||
|
|
||||||
|
ret, _ = h.InvokeWithValue(t, client, actors.StorageMarketAddress, actors.SMAMethods.AddBalance, types.NewInt(2000), nil)
|
||||||
|
ApplyOK(t, ret)
|
||||||
|
|
||||||
|
addSectorToMiner(h, t, minerAddr, worker, client, 1)
|
||||||
|
|
||||||
|
assertSectorIDs(h, t, minerAddr, []uint64{1})
|
||||||
|
|
||||||
|
bf := types.NewBitField()
|
||||||
|
bf.Set(6)
|
||||||
|
ret, _ = h.Invoke(t, worker, minerAddr, actors.MAMethods.DeclareFaults, &actors.DeclareFaultsParams{bf})
|
||||||
|
ApplyOK(t, ret)
|
||||||
|
|
||||||
|
ret, _ = h.Invoke(t, actors.NetworkAddress, minerAddr, actors.MAMethods.SubmitElectionPoSt, nil)
|
||||||
|
ApplyOK(t, ret)
|
||||||
|
|
||||||
|
assertSectorIDs(h, t, minerAddr, []uint64{1})
|
||||||
|
|
||||||
|
badnum := uint64(0)
|
||||||
|
badnum--
|
||||||
|
bf = types.NewBitField()
|
||||||
|
bf.Set(badnum)
|
||||||
|
ret, _ = h.Invoke(t, worker, minerAddr, actors.MAMethods.DeclareFaults, &actors.DeclareFaultsParams{bf})
|
||||||
|
ApplyOK(t, ret)
|
||||||
|
|
||||||
|
ret, _ = h.Invoke(t, actors.NetworkAddress, minerAddr, actors.MAMethods.SubmitElectionPoSt, nil)
|
||||||
|
ApplyOK(t, ret)
|
||||||
|
|
||||||
|
bf = types.NewBitField()
|
||||||
|
bf.Set(1)
|
||||||
|
ret, _ = h.Invoke(t, worker, minerAddr, actors.MAMethods.DeclareFaults, &actors.DeclareFaultsParams{bf})
|
||||||
|
ApplyOK(t, ret)
|
||||||
|
|
||||||
|
ret, _ = h.Invoke(t, actors.NetworkAddress, minerAddr, actors.MAMethods.SubmitElectionPoSt, nil)
|
||||||
|
ApplyOK(t, ret)
|
||||||
|
|
||||||
|
assertSectorIDs(h, t, minerAddr, []uint64{})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func addSectorToMiner(h *Harness, t *testing.T, minerAddr, worker, client address.Address, sid uint64) {
|
func addSectorToMiner(h *Harness, t *testing.T, minerAddr, worker, client address.Address, sid uint64) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
s := sectorbuilder.UserBytesForSectorSize(1024)
|
s := sectorbuilder.UserBytesForSectorSize(1024)
|
||||||
|
Loading…
Reference in New Issue
Block a user