Improve errors around deal handling
This commit is contained in:
parent
be58a51f9f
commit
cb3965bcf5
@ -25,7 +25,7 @@ func (c *Client) failDeal(id cid.Cid, cerr error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: store in some sort of audit log
|
// 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) {
|
func (c *Client) dataSize(ctx context.Context, data cid.Cid) (int64, error) {
|
||||||
|
@ -162,7 +162,7 @@ func (p *Provider) onIncoming(deal MinerDeal) {
|
|||||||
func (p *Provider) onUpdated(ctx context.Context, update minerDealUpdate) {
|
func (p *Provider) onUpdated(ctx context.Context, update minerDealUpdate) {
|
||||||
log.Infof("Deal %s updated state to %d", update.id, update.newState)
|
log.Infof("Deal %s updated state to %d", update.id, update.newState)
|
||||||
if update.err != nil {
|
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)
|
p.failDeal(update.id, update.err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -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)
|
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{
|
err := p.sendSignedResponse(&Response{
|
||||||
State: api.DealFailed,
|
State: api.DealFailed,
|
||||||
|
@ -231,11 +231,20 @@ func toReadableFile(r io.Reader, n int64) (*os.File, func() error, error) {
|
|||||||
go func() {
|
go func() {
|
||||||
defer wait.Unlock()
|
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()
|
err := w.Close()
|
||||||
if werr == nil {
|
if werr == nil {
|
||||||
werr = err
|
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)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ func (m *Miner) onSectorUpdated(ctx context.Context, update sectorUpdate) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *Miner) failSector(id uint64, err error) {
|
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
|
panic(err) // todo: better error handling strategy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestComputePaddedSize(t *testing.T) {
|
func TestComputePaddedSize(t *testing.T) {
|
||||||
assert.Equal(t, uint64(1040384), computePaddedSize(1000000))
|
assert.Equal(t, uint64(1040384), computePaddedSize(1000000))
|
||||||
assert.Equal(t, uint64(1016), computePaddedSize(548))
|
assert.Equal(t, uint64(1016), computePaddedSize(548))
|
||||||
assert.Equal(t, uint64(4064), computePaddedSize(2048))
|
assert.Equal(t, uint64(4064), computePaddedSize(2048))
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
||||||
ipld "github.com/ipfs/go-ipld-format"
|
ipld "github.com/ipfs/go-ipld-format"
|
||||||
"github.com/ipfs/go-unixfs"
|
"github.com/ipfs/go-unixfs"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
@ -89,13 +90,13 @@ func (st *SectorBlocks) writeRef(cid cid.Cid, pieceRef string, offset uint64, si
|
|||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return xerrors.Errorf("getting existing refs: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var refs []api.SealedRef
|
var refs []api.SealedRef
|
||||||
if len(v) > 0 {
|
if len(v) > 0 {
|
||||||
if err := cbor.DecodeInto(v, &refs); err != nil {
|
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)
|
newRef, err := cbor.DumpObject(&refs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return xerrors.Errorf("serializing refs: %w", err)
|
||||||
}
|
}
|
||||||
return st.keys.Put(dshelp.CidToDsKey(cid), newRef) // TODO: batch somehow
|
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 {
|
for {
|
||||||
data, offset, nd, err := r.blockReader.ReadBlock(context.TODO())
|
data, offset, nd, err := r.blockReader.ReadBlock(context.TODO())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, xerrors.Errorf("reading block: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(data) == 0 {
|
if len(data) == 0 {
|
||||||
// TODO: batch
|
// TODO: batch
|
||||||
// TODO: GC
|
// TODO: GC
|
||||||
if err := r.intermediate.Put(nd); err != nil {
|
if err := r.intermediate.Put(nd); err != nil {
|
||||||
return 0, err
|
return 0, xerrors.Errorf("storing intermediate node: %w", err)
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := r.writeRef(nd.Cid(), r.pieceRef, offset, uint32(len(data))); err != nil {
|
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)
|
read := copy(p, data)
|
||||||
|
Loading…
Reference in New Issue
Block a user