@@ -25,6 +25,7 @@ import (
25
25
"github.com/filecoin-project/lotus/chain/actors/builtin/market"
26
26
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
27
27
verifregtypes "github.com/filecoin-project/lotus/chain/actors/builtin/verifreg"
28
+ "github.com/filecoin-project/lotus/chain/proofs"
28
29
"github.com/filecoin-project/lotus/chain/types"
29
30
lpiece "github.com/filecoin-project/lotus/storage/pipeline/piece"
30
31
)
@@ -110,7 +111,7 @@ func (p *PieceIngesterSnap) Seal() error {
110
111
// 1. If sector is full
111
112
// 2. We have been waiting for MaxWaitDuration
112
113
// 3. StartEpoch is less than 8 hours // todo: make this config?
113
- if sector .currentSize == abi .PaddedPieceSize (p .sectorSize ) {
114
+ if sector .offset . Padded () == abi .PaddedPieceSize (p .sectorSize ) {
114
115
log .Debugf ("start sealing sector %d of miner %d: %s" , sector .number , p .miner .String (), "sector full" )
115
116
return true
116
117
}
@@ -493,7 +494,10 @@ func (p *PieceIngesterSnap) allocateToExisting(ctx context.Context, piece lpiece
493
494
494
495
for _ , sec := range openSectors {
495
496
sec := sec
496
- if sec .currentSize + psize <= abi .PaddedPieceSize (p .sectorSize ) {
497
+ offset := sec .offset
498
+ // Account for inter-piece padding
499
+ _ , padLength := proofs .GetRequiredPadding (offset .Padded (), psize )
500
+ if offset .Padded ()+ padLength + psize < abi .PaddedPieceSize (p .sectorSize ) {
497
501
if vd .isVerified {
498
502
si , err := p .api .StateSectorGetInfo (ctx , p .miner , sec .number , types .EmptyTSK )
499
503
if err != nil {
@@ -515,7 +519,7 @@ func (p *PieceIngesterSnap) allocateToExisting(ctx context.Context, piece lpiece
515
519
}
516
520
517
521
ret .Sector = sec .number
518
- ret .Offset = sec . currentSize
522
+ ret .Offset = offset . Padded ()
519
523
520
524
// Insert DDO deal to DB for the sector
521
525
cn , err := tx .Exec (`SELECT insert_snap_ddo_piece($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)` ,
@@ -659,23 +663,31 @@ func (p *PieceIngesterSnap) getOpenSectors(tx *harmonydb.Tx) ([]*openSector, err
659
663
pi := pi
660
664
sector , ok := sectorMap [pi .Sector ]
661
665
if ! ok {
666
+ // Consider padding
667
+ var offset abi.UnpaddedPieceSize
668
+ _ , padLength := proofs .GetRequiredPadding (offset .Padded (), pi .Size )
669
+ offset += padLength .Unpadded ()
670
+ offset += pi .Size .Unpadded ()
662
671
sectorMap [pi .Sector ] = & openSector {
663
672
number : pi .Sector ,
664
- currentSize : pi .Size ,
665
673
earliestStartEpoch : getStartEpoch (pi .StartEpoch , 0 ),
666
674
index : pi .Index ,
667
675
openedAt : pi .CreatedAt ,
668
676
latestEndEpoch : getEndEpoch (pi .EndEpoch , 0 ),
677
+ offset : offset ,
669
678
}
670
679
continue
671
680
}
672
- sector .currentSize += pi .Size
673
681
sector .earliestStartEpoch = getStartEpoch (pi .StartEpoch , sector .earliestStartEpoch )
674
682
sector .latestEndEpoch = getEndEpoch (pi .EndEpoch , sector .earliestStartEpoch )
675
683
if sector .index < pi .Index {
676
684
sector .index = pi .Index
677
685
}
678
686
sector .openedAt = getOpenedAt (pi , sector .openedAt )
687
+ // Consider padding
688
+ _ , padLength := proofs .GetRequiredPadding (sector .offset .Padded (), pi .Size )
689
+ sector .offset += padLength .Unpadded ()
690
+ sector .offset += pi .Size .Unpadded ()
679
691
}
680
692
681
693
var os []* openSector
0 commit comments