ffiwrapper: Test skipping corrupted sectors in PoSt
This commit is contained in:
parent
5e7737f55d
commit
c7b0241a48
87
extern/sector-storage/ffiwrapper/sealer_test.go
vendored
87
extern/sector-storage/ffiwrapper/sealer_test.go
vendored
@ -168,50 +168,34 @@ func (s *seal) unseal(t *testing.T, sb *Sealer, sp *basicfs.Provider, si abi.Sec
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func post(t *testing.T, sealer *Sealer, seals ...seal) time.Time {
|
func post(t *testing.T, sealer *Sealer, skipped []abi.SectorID, seals ...seal) {
|
||||||
/*randomness := abi.PoStRandomness{0, 9, 2, 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, 7, 6, 45, 3, 2, 1, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 7}
|
randomness := abi.PoStRandomness{0, 9, 2, 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, 7, 6, 45, 3, 2, 1, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 7}
|
||||||
|
|
||||||
sis := make([]abi.SectorInfo, len(seals))
|
sis := make([]saproof.SectorInfo, len(seals))
|
||||||
for i, s := range seals {
|
for i, s := range seals {
|
||||||
sis[i] = abi.SectorInfo{
|
sis[i] = saproof.SectorInfo{
|
||||||
RegisteredProof: sealProofType,
|
SealProof: sealProofType,
|
||||||
SectorNumber: s.id.Number,
|
SectorNumber: s.id.Number,
|
||||||
SealedCID: s.cids.Sealed,
|
SealedCID: s.cids.Sealed,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
candidates, err := sealer.GenerateEPostCandidates(context.TODO(), seals[0].id.Miner, sis, randomness, []abi.SectorNumber{})
|
proofs, skp, err := sealer.GenerateWindowPoSt(context.TODO(), seals[0].id.Miner, sis, randomness)
|
||||||
if err != nil {
|
if len(skipped) > 0 {
|
||||||
t.Fatalf("%+v", err)
|
require.Error(t, err)
|
||||||
}*/
|
require.EqualValues(t, skipped, skp)
|
||||||
|
return
|
||||||
fmt.Println("skipping post")
|
|
||||||
|
|
||||||
genCandidates := time.Now()
|
|
||||||
|
|
||||||
/*if len(candidates) != 1 {
|
|
||||||
t.Fatal("expected 1 candidate")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
candidatesPrime := make([]abi.PoStCandidate, len(candidates))
|
|
||||||
for idx := range candidatesPrime {
|
|
||||||
candidatesPrime[idx] = candidates[idx].Candidate
|
|
||||||
}
|
|
||||||
|
|
||||||
proofs, err := sealer.ComputeElectionPoSt(context.TODO(), seals[0].id.Miner, sis, randomness, candidatesPrime)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("%+v", err)
|
t.Fatalf("%+v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ePoStChallengeCount := ElectionPostChallengeCount(uint64(len(sis)), 0)
|
ok, err := ProofVerifier.VerifyWindowPoSt(context.TODO(), saproof.WindowPoStVerifyInfo{
|
||||||
|
|
||||||
ok, err := ProofVerifier.VerifyElectionPost(context.TODO(), abi.PoStVerifyInfo{
|
|
||||||
Randomness: randomness,
|
Randomness: randomness,
|
||||||
Candidates: candidatesPrime,
|
|
||||||
Proofs: proofs,
|
Proofs: proofs,
|
||||||
EligibleSectors: sis,
|
ChallengedSectors: sis,
|
||||||
Prover: seals[0].id.Miner,
|
Prover: seals[0].id.Miner,
|
||||||
ChallengeCount: ePoStChallengeCount,
|
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("%+v", err)
|
t.Fatalf("%+v", err)
|
||||||
@ -219,8 +203,21 @@ func post(t *testing.T, sealer *Sealer, seals ...seal) time.Time {
|
|||||||
if !ok {
|
if !ok {
|
||||||
t.Fatal("bad post")
|
t.Fatal("bad post")
|
||||||
}
|
}
|
||||||
*/
|
}
|
||||||
return genCandidates
|
|
||||||
|
func corrupt(t *testing.T, sealer *Sealer, id abi.SectorID) {
|
||||||
|
paths, done, err := sealer.sectors.AcquireSector(context.Background(), id, stores.FTSealed, 0, stores.PathStorage)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer done()
|
||||||
|
|
||||||
|
log.Infof("corrupt %s", paths.Sealed)
|
||||||
|
f, err := os.OpenFile(paths.Sealed, os.O_RDWR, 0664)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = f.WriteAt(bytes.Repeat([]byte{'d'}, 2048), 0)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.NoError(t, f.Close())
|
||||||
}
|
}
|
||||||
|
|
||||||
func getGrothParamFileAndVerifyingKeys(s abi.SectorSize) {
|
func getGrothParamFileAndVerifyingKeys(s abi.SectorSize) {
|
||||||
@ -299,11 +296,11 @@ func TestSealAndVerify(t *testing.T) {
|
|||||||
|
|
||||||
commit := time.Now()
|
commit := time.Now()
|
||||||
|
|
||||||
genCandidiates := post(t, sb, s)
|
post(t, sb, nil, s)
|
||||||
|
|
||||||
epost := time.Now()
|
epost := time.Now()
|
||||||
|
|
||||||
post(t, sb, s)
|
post(t, sb, nil, s)
|
||||||
|
|
||||||
if err := sb.FinalizeSector(context.TODO(), si, nil); err != nil {
|
if err := sb.FinalizeSector(context.TODO(), si, nil); err != nil {
|
||||||
t.Fatalf("%+v", err)
|
t.Fatalf("%+v", err)
|
||||||
@ -313,8 +310,7 @@ func TestSealAndVerify(t *testing.T) {
|
|||||||
|
|
||||||
fmt.Printf("PreCommit: %s\n", precommit.Sub(start).String())
|
fmt.Printf("PreCommit: %s\n", precommit.Sub(start).String())
|
||||||
fmt.Printf("Commit: %s\n", commit.Sub(precommit).String())
|
fmt.Printf("Commit: %s\n", commit.Sub(precommit).String())
|
||||||
fmt.Printf("GenCandidates: %s\n", genCandidiates.Sub(commit).String())
|
fmt.Printf("EPoSt: %s\n", epost.Sub(commit).String())
|
||||||
fmt.Printf("EPoSt: %s\n", epost.Sub(genCandidiates).String())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSealPoStNoCommit(t *testing.T) {
|
func TestSealPoStNoCommit(t *testing.T) {
|
||||||
@ -370,16 +366,15 @@ func TestSealPoStNoCommit(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
genCandidiates := post(t, sb, s)
|
post(t, sb, nil, s)
|
||||||
|
|
||||||
epost := time.Now()
|
epost := time.Now()
|
||||||
|
|
||||||
fmt.Printf("PreCommit: %s\n", precommit.Sub(start).String())
|
fmt.Printf("PreCommit: %s\n", precommit.Sub(start).String())
|
||||||
fmt.Printf("GenCandidates: %s\n", genCandidiates.Sub(precommit).String())
|
fmt.Printf("EPoSt: %s\n", epost.Sub(precommit).String())
|
||||||
fmt.Printf("EPoSt: %s\n", epost.Sub(genCandidiates).String())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSealAndVerify2(t *testing.T) {
|
func TestSealAndVerify3(t *testing.T) {
|
||||||
defer requireFDsClosed(t, openFDs(t))
|
defer requireFDsClosed(t, openFDs(t))
|
||||||
|
|
||||||
if runtime.NumCPU() < 10 && os.Getenv("CI") == "" { // don't bother on slow hardware
|
if runtime.NumCPU() < 10 && os.Getenv("CI") == "" { // don't bother on slow hardware
|
||||||
@ -419,22 +414,32 @@ func TestSealAndVerify2(t *testing.T) {
|
|||||||
|
|
||||||
si1 := abi.SectorID{Miner: miner, Number: 1}
|
si1 := abi.SectorID{Miner: miner, Number: 1}
|
||||||
si2 := abi.SectorID{Miner: miner, Number: 2}
|
si2 := abi.SectorID{Miner: miner, Number: 2}
|
||||||
|
si3 := abi.SectorID{Miner: miner, Number: 3}
|
||||||
|
|
||||||
s1 := seal{id: si1}
|
s1 := seal{id: si1}
|
||||||
s2 := seal{id: si2}
|
s2 := seal{id: si2}
|
||||||
|
s3 := seal{id: si3}
|
||||||
|
|
||||||
wg.Add(2)
|
wg.Add(3)
|
||||||
go s1.precommit(t, sb, si1, wg.Done) //nolint: staticcheck
|
go s1.precommit(t, sb, si1, wg.Done) //nolint: staticcheck
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
go s2.precommit(t, sb, si2, wg.Done) //nolint: staticcheck
|
go s2.precommit(t, sb, si2, wg.Done) //nolint: staticcheck
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
go s3.precommit(t, sb, si3, wg.Done) //nolint: staticcheck
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
wg.Add(2)
|
wg.Add(3)
|
||||||
go s1.commit(t, sb, wg.Done) //nolint: staticcheck
|
go s1.commit(t, sb, wg.Done) //nolint: staticcheck
|
||||||
go s2.commit(t, sb, wg.Done) //nolint: staticcheck
|
go s2.commit(t, sb, wg.Done) //nolint: staticcheck
|
||||||
|
go s3.commit(t, sb, wg.Done) //nolint: staticcheck
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
post(t, sb, s1, s2)
|
post(t, sb, nil, s1, s2, s3)
|
||||||
|
|
||||||
|
corrupt(t, sb, si1)
|
||||||
|
corrupt(t, sb, si2)
|
||||||
|
|
||||||
|
post(t, sb, []abi.SectorID{si1, si2}, s1, s2, s3)
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkWriteWithAlignment(b *testing.B) {
|
func BenchmarkWriteWithAlignment(b *testing.B) {
|
||||||
|
Loading…
Reference in New Issue
Block a user