Skip to content

Commit 24bd803

Browse files
committed
Deal with #191
1 parent 357fc57 commit 24bd803

File tree

2 files changed

+60
-10
lines changed

2 files changed

+60
-10
lines changed

tasks/unseal/task_unseal_decode.go

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package unseal
33
import (
44
"context"
55
"github.com/filecoin-project/curio/lib/passcall"
6+
"github.com/filecoin-project/go-commp-utils/nonffi"
67
"math/rand/v2"
78
"time"
89

@@ -65,12 +66,13 @@ func (t *TaskUnsealDecode) Do(taskID harmonytask.TaskID, stillOwned func() bool)
6566
sectorParams := sectorParamsArr[0]
6667

6768
var sectorMeta []struct {
68-
TicketValue []byte `db:"ticket_value"`
69-
OrigSealedCID string `db:"orig_sealed_cid"`
70-
CurSealedCID string `db:"cur_sealed_cid"`
69+
TicketValue []byte `db:"ticket_value"`
70+
OrigSealedCID string `db:"orig_sealed_cid"`
71+
CurSealedCID string `db:"cur_sealed_cid"`
72+
CurUnsealedCID string `db:"cur_unsealed_cid"`
7173
}
7274
err = t.db.Select(ctx, &sectorMeta, `
73-
SELECT ticket_value, orig_sealed_cid, cur_sealed_cid
75+
SELECT ticket_value, orig_sealed_cid, cur_sealed_cid, cur_unsealed_cid
7476
FROM sectors_meta
7577
WHERE sp_id = $1 AND sector_num = $2`, sectorParams.SpID, sectorParams.SectorNumber)
7678
if err != nil {
@@ -90,6 +92,53 @@ func (t *TaskUnsealDecode) Do(taskID harmonytask.TaskID, stillOwned func() bool)
9092
if err != nil {
9193
return false, xerrors.Errorf("decoding CurSealedCID: %w", err)
9294
}
95+
var commD cid.Cid
96+
if smeta.CurUnsealedCID == "" || smeta.CurUnsealedCID == "b" {
97+
// https://github.com/filecoin-project/curio/issues/191
98+
// <workaround>
99+
100+
var sectorPieces []struct {
101+
PieceNum int64 `db:"piece_num"`
102+
PieceCID string `db:"piece_cid"`
103+
PieceSize int64 `db:"piece_size"` // padded
104+
}
105+
err = t.db.Select(ctx, &sectorPieces, `
106+
SELECT piece_num, piece_cid, piece_size
107+
FROM sectors_meta_pieces
108+
WHERE sp_id = $1 AND sector_num = $2
109+
ORDER BY piece_num`, sectorParams.SpID, sectorParams.SectorNumber)
110+
if err != nil {
111+
return false, xerrors.Errorf("getting sector pieces: %w", err)
112+
}
113+
114+
spt := abi.RegisteredSealProof(sectorParams.RegSealProof)
115+
var pieceInfos []abi.PieceInfo
116+
for _, p := range sectorPieces {
117+
c, err := cid.Decode(p.PieceCID)
118+
if err != nil {
119+
return false, xerrors.Errorf("decoding piece cid: %w", err)
120+
}
121+
122+
pieceInfos = append(pieceInfos, abi.PieceInfo{
123+
Size: abi.PaddedPieceSize(p.PieceSize),
124+
PieceCID: c,
125+
})
126+
}
127+
128+
commD, err = nonffi.GenerateUnsealedCID(spt, pieceInfos)
129+
if err != nil {
130+
return false, xerrors.Errorf("generating unsealed cid: %w", err)
131+
}
132+
133+
log.Warnw("workaround for issue #191", "task", taskID, "commD", commD, "commK", commK, "commR", commR)
134+
135+
// </workaround>
136+
} else {
137+
commD, err = cid.Decode(smeta.CurUnsealedCID)
138+
if err != nil {
139+
return false, xerrors.Errorf("decoding CurUnsealedCID: %w", err)
140+
}
141+
}
93142

94143
sref := storiface.SectorRef{
95144
ID: abi.SectorID{
@@ -100,9 +149,9 @@ func (t *TaskUnsealDecode) Do(taskID harmonytask.TaskID, stillOwned func() bool)
100149
}
101150

102151
isSnap := commK != commR
103-
log.Infow("unseal decode", "snap", isSnap, "task", taskID, "commK", commK, "commR", commR)
152+
log.Infow("unseal decode", "snap", isSnap, "task", taskID, "commK", commK, "commR", commR, "commD", commD)
104153
if isSnap {
105-
err := t.sc.DecodeSnap(ctx, taskID, commR, commK, sref)
154+
err := t.sc.DecodeSnap(ctx, taskID, commD, commK, sref)
106155
if err != nil {
107156
return false, xerrors.Errorf("DecodeSnap: %w", err)
108157
}

tasks/unseal/task_unseal_sdr.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,11 @@ func (t *TaskUnsealSdr) Do(taskID harmonytask.TaskID, stillOwned func() bool) (d
7070
sectorParams := sectorParamsArr[0]
7171

7272
var sectorMeta []struct {
73-
TicketValue []byte `db:"ticket_value"`
74-
CurUnsealedCID string `db:"cur_unsealed_cid"`
73+
TicketValue []byte `db:"ticket_value"`
74+
OrigUnsealedCID string `db:"orig_unsealed_cid"`
7575
}
7676
err = t.db.Select(ctx, &sectorMeta, `
77-
SELECT ticket_value, cur_unsealed_cid
77+
SELECT ticket_value, orig_unsealed_cid
7878
FROM sectors_meta
7979
WHERE sp_id = $1 AND sector_num = $2`, sectorParams.SpID, sectorParams.SectorNumber)
8080
if err != nil {
@@ -85,7 +85,8 @@ func (t *TaskUnsealSdr) Do(taskID harmonytask.TaskID, stillOwned func() bool) (d
8585
return false, xerrors.Errorf("expected 1 sector meta, got %d", len(sectorMeta))
8686
}
8787

88-
commD, err := cid.Decode(sectorMeta[0].CurUnsealedCID)
88+
// NOTE: Even for snap sectors for SDR we need the original unsealed CID
89+
commD, err := cid.Decode(sectorMeta[0].OrigUnsealedCID)
8990
if err != nil {
9091
return false, xerrors.Errorf("decoding commd: %w", err)
9192
}

0 commit comments

Comments
 (0)