Merge pull request #51 from filecoin-project/asr/maxdeals

Enforce max deals per sector
This commit is contained in:
Łukasz Magiera 2020-07-20 19:35:38 +02:00 committed by GitHub
commit 5cc2358376
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -76,6 +76,7 @@ type UnsealedSectorMap struct {
} }
type UnsealedSectorInfo struct { type UnsealedSectorInfo struct {
numDeals uint64
// stored should always equal sum of pieceSizes.Padded() // stored should always equal sum of pieceSizes.Padded()
stored uint64 stored uint64
pieceSizes []abi.UnpaddedPieceSize pieceSizes []abi.UnpaddedPieceSize
@ -128,16 +129,17 @@ func (m *Sealing) AddPieceToAnySector(ctx context.Context, size abi.UnpaddedPiec
} }
m.unsealedInfoMap.mux.Lock() m.unsealedInfoMap.mux.Lock()
defer m.unsealedInfoMap.mux.Unlock()
sid, pads, err := m.getSectorAndPadding(size) sid, pads, err := m.getSectorAndPadding(size)
if err != nil { if err != nil {
m.unsealedInfoMap.mux.Unlock()
return 0, 0, xerrors.Errorf("getting available sector: %w", err) return 0, 0, xerrors.Errorf("getting available sector: %w", err)
} }
for _, p := range pads { for _, p := range pads {
err = m.addPiece(ctx, sid, p.Unpadded(), m.pledgeReader(p.Unpadded()), nil) err = m.addPiece(ctx, sid, p.Unpadded(), m.pledgeReader(p.Unpadded()), nil)
if err != nil { if err != nil {
m.unsealedInfoMap.mux.Unlock()
return 0, 0, xerrors.Errorf("writing pads: %w", err) return 0, 0, xerrors.Errorf("writing pads: %w", err)
} }
} }
@ -146,9 +148,15 @@ func (m *Sealing) AddPieceToAnySector(ctx context.Context, size abi.UnpaddedPiec
err = m.addPiece(ctx, sid, size, r, &d) err = m.addPiece(ctx, sid, size, r, &d)
if err != nil { if err != nil {
m.unsealedInfoMap.mux.Unlock()
return 0, 0, xerrors.Errorf("adding piece to sector: %w", err) return 0, 0, xerrors.Errorf("adding piece to sector: %w", err)
} }
m.unsealedInfoMap.mux.Unlock()
if m.unsealedInfoMap.infos[sid].numDeals == getDealPerSectorLimit(m.sealer.SectorSize()) {
m.StartPacking(sid)
}
return sid, offset, nil return sid, offset, nil
} }
@ -170,7 +178,12 @@ func (m *Sealing) addPiece(ctx context.Context, sectorID abi.SectorNumber, size
} }
ui := m.unsealedInfoMap.infos[sectorID] ui := m.unsealedInfoMap.infos[sectorID]
num := m.unsealedInfoMap.infos[sectorID].numDeals
if di != nil {
num = num + 1
}
m.unsealedInfoMap.infos[sectorID] = UnsealedSectorInfo{ m.unsealedInfoMap.infos[sectorID] = UnsealedSectorInfo{
numDeals: num,
stored: ui.stored + uint64(piece.Piece.Size), stored: ui.stored + uint64(piece.Piece.Size),
pieceSizes: append(ui.pieceSizes, piece.Piece.Size.Unpadded()), pieceSizes: append(ui.pieceSizes, piece.Piece.Size.Unpadded()),
} }
@ -213,6 +226,7 @@ func (m *Sealing) getSectorAndPadding(size abi.UnpaddedPieceSize) (abi.SectorNum
} }
m.unsealedInfoMap.infos[ns] = UnsealedSectorInfo{ m.unsealedInfoMap.infos[ns] = UnsealedSectorInfo{
numDeals: 0,
stored: 0, stored: 0,
pieceSizes: nil, pieceSizes: nil,
} }
@ -293,3 +307,11 @@ func (m *Sealing) minerSector(num abi.SectorNumber) abi.SectorID {
func (m *Sealing) Address() address.Address { func (m *Sealing) Address() address.Address {
return m.maddr return m.maddr
} }
func getDealPerSectorLimit(size abi.SectorSize) uint64 {
if size < 64<<30 {
return 256
} else {
return 512
}
}