deals: Log fetch errors

This commit is contained in:
Łukasz Magiera 2019-08-07 13:46:09 +02:00 committed by whyrusleeping
parent feee3893bf
commit 5e176eed78

View File

@ -52,6 +52,11 @@ type Handler struct {
stopped chan struct{} stopped chan struct{}
} }
type fetchResult struct {
id cid.Cid
err error
}
func NewHandler(w *wallet.Wallet, ds dtypes.MetadataDS, sb *sectorbuilder.SectorBuilder, dag dtypes.StagingDAG) (*Handler, error) { func NewHandler(w *wallet.Wallet, ds dtypes.MetadataDS, sb *sectorbuilder.SectorBuilder, dag dtypes.StagingDAG) (*Handler, error) {
addr, err := ds.Get(datastore.NewKey("miner-address")) addr, err := ds.Get(datastore.NewKey("miner-address"))
if err != nil { if err != nil {
@ -79,7 +84,7 @@ func (h *Handler) Run(ctx context.Context) {
go func() { go func() {
defer log.Error("quitting deal handler loop") defer log.Error("quitting deal handler loop")
defer close(h.stopped) defer close(h.stopped)
fetched := make(chan cid.Cid) fetched := make(chan fetchResult)
for { for {
select { select {
@ -95,17 +100,20 @@ func (h *Handler) Run(ctx context.Context) {
go func(id cid.Cid) { go func(id cid.Cid) {
log.Info("fetching data for a deal") log.Info("fetching data for a deal")
err := merkledag.FetchGraph(ctx, deal.Ref, h.dag) err := merkledag.FetchGraph(ctx, deal.Ref, h.dag)
if err != nil {
return
}
select { select {
case fetched <- id: case fetched <- fetchResult{
id: id,
err: err,
}:
case <-h.stop: case <-h.stop:
} }
log.Info("Fetched!")
}(deal.ProposalCid) }(deal.ProposalCid)
case id := <-fetched: case result := <-fetched:
if result.err != nil {
log.Errorf("failed to fetch data for deal: %s", result.err)
// TODO: fail deal
}
// TODO: send response if client still there // TODO: send response if client still there
// TODO: staging // TODO: staging
@ -113,7 +121,7 @@ func (h *Handler) Run(ctx context.Context) {
log.Info("sealing deal") log.Info("sealing deal")
var deal MinerDeal var deal MinerDeal
err := h.deals.MutateMiner(id, func(in MinerDeal) (MinerDeal, error) { err := h.deals.MutateMiner(result.id, func(in MinerDeal) (MinerDeal, error) {
in.State = Sealing in.State = Sealing
deal = in deal = in
return in, nil return in, nil