Improve errors around deal handling

This commit is contained in:
Łukasz Magiera 2019-11-06 13:04:33 +01:00
parent be58a51f9f
commit cb3965bcf5
7 changed files with 23 additions and 13 deletions

View File

@ -25,7 +25,7 @@ func (c *Client) failDeal(id cid.Cid, cerr error) {
}
// TODO: store in some sort of audit log
log.Errorf("deal %s failed: %s", id, cerr)
log.Errorf("deal %s failed: %+v", id, cerr)
}
func (c *Client) dataSize(ctx context.Context, data cid.Cid) (int64, error) {

View File

@ -162,7 +162,7 @@ func (p *Provider) onIncoming(deal MinerDeal) {
func (p *Provider) onUpdated(ctx context.Context, update minerDealUpdate) {
log.Infof("Deal %s updated state to %d", update.id, update.newState)
if update.err != nil {
log.Errorf("deal %s (newSt: %d) failed: %s", update.id, update.newState, update.err)
log.Errorf("deal %s (newSt: %d) failed: %+v", update.id, update.newState, update.err)
p.failDeal(update.id, update.err)
return
}

View File

@ -26,7 +26,7 @@ func (p *Provider) failDeal(id cid.Cid, cerr error) {
cerr = xerrors.Errorf("unknown error (fail called at %s:%d)", f, l)
}
log.Errorf("deal %s failed: %s", id, cerr)
log.Warnf("deal %s failed: %s", id, cerr)
err := p.sendSignedResponse(&Response{
State: api.DealFailed,

View File

@ -231,11 +231,20 @@ func toReadableFile(r io.Reader, n int64) (*os.File, func() error, error) {
go func() {
defer wait.Unlock()
_, werr = io.CopyN(w, r, n)
copied, werr := io.CopyN(w, r, n)
if werr != nil {
log.Warnf("toReadableFile: copy error: %+v", werr)
}
err := w.Close()
if werr == nil {
werr = err
log.Warnf("toReadableFile: close error: %+v", err)
return
}
if copied != n {
log.Warnf("copied different amount than expected: %d != %d", copied, n)
werr = xerrors.Errorf("copied different amount than expected: %d != %d", copied, n)
}
}()

View File

@ -114,7 +114,7 @@ func (m *Miner) onSectorUpdated(ctx context.Context, update sectorUpdate) {
}
func (m *Miner) failSector(id uint64, err error) {
log.Error(err)
log.Errorf("sector %d error: %+v", id, err)
panic(err) // todo: better error handling strategy
}

View File

@ -5,8 +5,8 @@ import (
"testing"
)
func TestComputePaddedSize(t *testing.T) {
func TestComputePaddedSize(t *testing.T) {
assert.Equal(t, uint64(1040384), computePaddedSize(1000000))
assert.Equal(t, uint64(1016), computePaddedSize(548))
assert.Equal(t, uint64(4064), computePaddedSize(2048))
}
}

View File

@ -11,6 +11,7 @@ import (
blockstore "github.com/ipfs/go-ipfs-blockstore"
ipld "github.com/ipfs/go-ipld-format"
"github.com/ipfs/go-unixfs"
"golang.org/x/xerrors"
"sync"
"github.com/ipfs/go-cid"
@ -89,13 +90,13 @@ func (st *SectorBlocks) writeRef(cid cid.Cid, pieceRef string, offset uint64, si
err = nil
}
if err != nil {
return err
return xerrors.Errorf("getting existing refs: %w", err)
}
var refs []api.SealedRef
if len(v) > 0 {
if err := cbor.DecodeInto(v, &refs); err != nil {
return err
return xerrors.Errorf("decoding existing refs: %w", err)
}
}
@ -107,7 +108,7 @@ func (st *SectorBlocks) writeRef(cid cid.Cid, pieceRef string, offset uint64, si
newRef, err := cbor.DumpObject(&refs)
if err != nil {
return err
return xerrors.Errorf("serializing refs: %w", err)
}
return st.keys.Put(dshelp.CidToDsKey(cid), newRef) // TODO: batch somehow
}
@ -128,20 +129,20 @@ func (r *refStorer) Read(p []byte) (n int, err error) {
for {
data, offset, nd, err := r.blockReader.ReadBlock(context.TODO())
if err != nil {
return 0, err
return 0, xerrors.Errorf("reading block: %w", err)
}
if len(data) == 0 {
// TODO: batch
// TODO: GC
if err := r.intermediate.Put(nd); err != nil {
return 0, err
return 0, xerrors.Errorf("storing intermediate node: %w", err)
}
continue
}
if err := r.writeRef(nd.Cid(), r.pieceRef, offset, uint32(len(data))); err != nil {
return 0, err
return 0, xerrors.Errorf("writing ref: %w", err)
}
read := copy(p, data)