Skip to content

Commit 46f73ec

Browse files
always try to return some message to the client (#498)
* always try to return some message to the client * fix: better error handling Co-authored-by: Dirk McCormick <[email protected]>
1 parent 0f8f468 commit 46f73ec

File tree

1 file changed

+33
-22
lines changed

1 file changed

+33
-22
lines changed

storagemarket/impl/provider.go

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -465,33 +465,60 @@ func (p *Provider) HandleDealStatusStream(s network.DealStatusStream) {
465465
return
466466
}
467467

468+
dealState, err := p.processDealStatusRequest(ctx, &request)
469+
if err != nil {
470+
log.Errorf("failed to process deal status request: %s", err)
471+
dealState = &storagemarket.ProviderDealState{
472+
State: storagemarket.StorageDealError,
473+
Message: err.Error(),
474+
}
475+
}
476+
477+
signature, err := p.sign(ctx, dealState)
478+
if err != nil {
479+
log.Errorf("failed to sign deal status response: %s", err)
480+
return
481+
}
482+
483+
response := network.DealStatusResponse{
484+
DealState: *dealState,
485+
Signature: *signature,
486+
}
487+
488+
if err := s.WriteDealStatusResponse(response, p.sign); err != nil {
489+
log.Warnf("failed to write deal status response: %s", err)
490+
return
491+
}
492+
}
493+
494+
func (p *Provider) processDealStatusRequest(ctx context.Context, request *network.DealStatusRequest) (*storagemarket.ProviderDealState, error) {
468495
// fetch deal state
469496
var md = storagemarket.MinerDeal{}
470497
if err := p.deals.Get(request.Proposal).Get(&md); err != nil {
471498
log.Errorf("proposal doesn't exist in state store: %s", err)
472-
return
499+
return nil, xerrors.Errorf("no such proposal")
473500
}
474501

475502
// verify query signature
476503
buf, err := cborutil.Dump(&request.Proposal)
477504
if err != nil {
478505
log.Errorf("failed to serialize status request: %s", err)
479-
return
506+
return nil, xerrors.Errorf("internal error")
480507
}
481508

482509
tok, _, err := p.spn.GetChainHead(ctx)
483510
if err != nil {
484511
log.Errorf("failed to get chain head: %s", err)
485-
return
512+
return nil, xerrors.Errorf("internal error")
486513
}
487514

488515
err = providerutils.VerifySignature(ctx, request.Signature, md.ClientDealProposal.Proposal.Client, buf, tok, p.spn.VerifySignature)
489516
if err != nil {
490517
log.Errorf("invalid deal status request signature: %s", err)
491-
return
518+
return nil, xerrors.Errorf("internal error")
492519
}
493520

494-
dealState := storagemarket.ProviderDealState{
521+
return &storagemarket.ProviderDealState{
495522
State: md.State,
496523
Message: md.Message,
497524
Proposal: &md.Proposal,
@@ -500,23 +527,7 @@ func (p *Provider) HandleDealStatusStream(s network.DealStatusStream) {
500527
PublishCid: md.PublishCid,
501528
DealID: md.DealID,
502529
FastRetrieval: md.FastRetrieval,
503-
}
504-
505-
signature, err := p.sign(ctx, &dealState)
506-
if err != nil {
507-
log.Errorf("failed to sign deal status response: %s", err)
508-
return
509-
}
510-
511-
response := network.DealStatusResponse{
512-
DealState: dealState,
513-
Signature: *signature,
514-
}
515-
516-
if err := s.WriteDealStatusResponse(response, p.sign); err != nil {
517-
log.Warnf("failed to write deal status response: %s", err)
518-
return
519-
}
530+
}, nil
520531
}
521532

522533
// Configure applies the given list of StorageProviderOptions after a StorageProvider

0 commit comments

Comments
 (0)