Skip to content

Commit

Permalink
fix(ReleaseDeals): check deal state
Browse files Browse the repository at this point in the history
  • Loading branch information
0x5459 committed Mar 27, 2023
1 parent 9183979 commit 9565207
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions storageprovider/deal_assigner.go
Original file line number Diff line number Diff line change
Expand Up @@ -267,15 +267,22 @@ func (ps *dealAssigner) AssignUnPackedDeals(ctx context.Context, sid abi.SectorI
}

func (ps *dealAssigner) ReleaseDeals(ctx context.Context, miner address.Address, deals []abi.DealID) error {
canBeRelease := func(deal *types.MinerDeal) error {
if deal.State != storagemarket.StorageDealAwaitingPreCommit &&
deal.State != storagemarket.StorageDealSealing {
return fmt.Errorf("cannot release a deal that is activated or not ready. miner: %s, deal: %d", deal.Miner, deal.DealID)
}
return nil
}
return ps.repo.Transaction(func(txRepo repo.TxRepo) error {
storageDealRepo := txRepo.StorageDealRepo()
for _, dealID := range deals {
deal, err := storageDealRepo.GetDealByDealID(ctx, miner, dealID)
if err != nil {
return fmt.Errorf("failed to get deal %d for miner %s: %w", dealID, miner.String(), err)
}
if deal.PieceStatus == types.Proving {
return fmt.Errorf("cannot release a deal that has been proving. miner: %s, deal: %d", miner.String(), dealID)
if err := canBeRelease(deal); err != nil {
return err
}
deal.PieceStatus = types.Undefine
deal.State = storagemarket.StorageDealAwaitingPreCommit
Expand Down

0 comments on commit 9565207

Please sign in to comment.