From b0b39424e447ac314b3e99b2eaba9fb58f96a532 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Wed, 30 Aug 2023 12:20:03 -0400 Subject: [PATCH] ffiwrapper: Test lower-level GenerateSDR --- storage/sealer/ffiwrapper/sealer_cgo.go | 14 ++--- storage/sealer/ffiwrapper/sealer_test.go | 65 ++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 9 deletions(-) diff --git a/storage/sealer/ffiwrapper/sealer_cgo.go b/storage/sealer/ffiwrapper/sealer_cgo.go index 821b91f4c..77d23fd5d 100644 --- a/storage/sealer/ffiwrapper/sealer_cgo.go +++ b/storage/sealer/ffiwrapper/sealer_cgo.go @@ -688,7 +688,7 @@ func (sb *Sealer) ReadPiece(ctx context.Context, writer io.Writer, sector storif } func (sb *Sealer) RegenerateSectorKey(ctx context.Context, sector storiface.SectorRef, ticket abi.SealRandomness, pieces []abi.PieceInfo) error { - paths, done, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTUnsealed|storiface.FTCache, storiface.FTSealed, storiface.PathSealing) + paths, done, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTCache, storiface.FTSealed, storiface.PathSealing) if err != nil { return xerrors.Errorf("acquiring sector paths: %w", err) } @@ -715,16 +715,12 @@ func (sb *Sealer) RegenerateSectorKey(ctx context.Context, sector storiface.Sect return xerrors.Errorf("aggregated piece sizes don't match sector size: %d != %d (%d)", sum, ussize, int64(ussize-sum)) } - // TODO: context cancellation respect - _, err = ffi.SealPreCommitPhase1( + panic("todo") + + err = ffi.GenerateSDR( sector.ProofType, paths.Cache, - paths.Unsealed, - paths.Sealed, - sector.ID.Number, - sector.ID.Miner, - ticket, - pieces, + [32]byte{}, ) if err != nil { return xerrors.Errorf("presealing sector %d (%s): %w", sector.ID.Number, paths.Unsealed, err) diff --git a/storage/sealer/ffiwrapper/sealer_test.go b/storage/sealer/ffiwrapper/sealer_test.go index 6838b3ca5..1dc7330cc 100644 --- a/storage/sealer/ffiwrapper/sealer_test.go +++ b/storage/sealer/ffiwrapper/sealer_test.go @@ -5,6 +5,7 @@ import ( "context" "fmt" "io" + "io/fs" "math/rand" "os" "path/filepath" @@ -22,6 +23,7 @@ import ( ffi "github.com/filecoin-project/filecoin-ffi" "github.com/filecoin-project/filecoin-ffi/cgo" commpffi "github.com/filecoin-project/go-commp-utils/ffiwrapper" + commcid "github.com/filecoin-project/go-fil-commcid" "github.com/filecoin-project/go-paramfetch" "github.com/filecoin-project/go-state-types/abi" prooftypes "github.com/filecoin-project/go-state-types/proof" @@ -1103,3 +1105,66 @@ func (c *closeAssertReader) Close() error { } var _ io.Closer = &closeAssertReader{} + +func TestGenerateSDR(t *testing.T) { + d := t.TempDir() + + miner := abi.ActorID(123) + + sp := &basicfs.Provider{ + Root: d, + } + sb, err := New(sp) + require.NoError(t, err) + + si := storiface.SectorRef{ + ID: abi.SectorID{Miner: miner, Number: 1}, + ProofType: sealProofType, + } + + s := seal{ref: si} + + sz := abi.PaddedPieceSize(sectorSize).Unpadded() + + s.pi, err = sb.AddPiece(context.TODO(), si, []abi.UnpaddedPieceSize{}, sz, nullreader.NewNullReader(sz)) + require.NoError(t, err) + + s.ticket = sealRand + + _, err = sb.SealPreCommit1(context.TODO(), si, s.ticket, []abi.PieceInfo{s.pi}) + require.NoError(t, err) + + // sdr for comparasion + + sdrCache := filepath.Join(d, "sdrcache") + + commd, err := commcid.CIDToDataCommitmentV1(s.pi.PieceCID) + require.NoError(t, err) + + replicaID, err := sealProofType.ReplicaId(si.ID.Miner, si.ID.Number, s.ticket, commd) + require.NoError(t, err) + + err = ffi.GenerateSDR(sealProofType, sdrCache, replicaID) + require.NoError(t, err) + + // list files in d recursively, for debug + + require.NoError(t, filepath.Walk(d, func(path string, info fs.FileInfo, err error) error { + fmt.Println(path) + return nil + })) + + // compare + lastLayerFile := "sc-02-data-layer-2.dat" + + sdrFile := filepath.Join(sdrCache, lastLayerFile) + pc1File := filepath.Join(d, "cache/s-t0123-1/", lastLayerFile) + + sdrData, err := os.ReadFile(sdrFile) + require.NoError(t, err) + + pc1Data, err := os.ReadFile(pc1File) + require.NoError(t, err) + + require.Equal(t, sdrData, pc1Data) +}