From eded9c7fde82a694e93e92cfbe3e171c9f4dc987 Mon Sep 17 00:00:00 2001 From: Ingar Shu Date: Fri, 26 Jun 2020 14:24:15 -0700 Subject: [PATCH] Track PollErrorCount when polling for provider deal state --- storagemarket/impl/clientstates/client_fsm.go | 5 +++- .../impl/clientstates/client_states.go | 8 +++---- .../impl/clientstates/client_states_test.go | 1 + storagemarket/types.go | 1 + storagemarket/types_cbor_gen.go | 24 +++++++++++++++++-- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/storagemarket/impl/clientstates/client_fsm.go b/storagemarket/impl/clientstates/client_fsm.go index d0fb1ac5..b44407d5 100644 --- a/storagemarket/impl/clientstates/client_fsm.go +++ b/storagemarket/impl/clientstates/client_fsm.go @@ -65,8 +65,11 @@ var ClientEvents = fsm.Events{ FromMany(storagemarket.StorageDealTransferring, storagemarket.StorageDealStartDataTransfer).To(storagemarket.StorageDealCheckForAcceptance), fsm.Event(storagemarket.ClientEventWaitForDealState). From(storagemarket.StorageDealCheckForAcceptance).ToNoChange(). - Action(func(deal *storagemarket.ClientDeal) error { + Action(func(deal *storagemarket.ClientDeal, pollError bool) error { deal.PollRetryCount += 1 + if pollError { + deal.PollErrorCount += 1 + } return nil }), fsm.Event(storagemarket.ClientEventResponseDealDidNotMatch). diff --git a/storagemarket/impl/clientstates/client_states.go b/storagemarket/impl/clientstates/client_states.go index fcab2837..d3f9a212 100644 --- a/storagemarket/impl/clientstates/client_states.go +++ b/storagemarket/impl/clientstates/client_states.go @@ -145,7 +145,7 @@ func CheckForDealAcceptance(ctx fsm.Context, environment ClientDealEnvironment, dealState, err := environment.GetProviderDealState(ctx.Context(), deal.ProposalCid) if err != nil { log.Warnf("error when querying provider deal state: %w", err) // TODO: at what point do we fail the deal? - return waitAgain(ctx, environment, deal) + return waitAgain(ctx, environment, true) } if isFailed(dealState.State) { @@ -160,16 +160,16 @@ func CheckForDealAcceptance(ctx fsm.Context, environment ClientDealEnvironment, return ctx.Trigger(storagemarket.ClientEventDealAccepted, dealState.PublishCid) } - return waitAgain(ctx, environment, deal) + return waitAgain(ctx, environment, false) } -func waitAgain(ctx fsm.Context, environment ClientDealEnvironment, _ storagemarket.ClientDeal) error { +func waitAgain(ctx fsm.Context, environment ClientDealEnvironment, pollError bool) error { t := time.NewTimer(environment.PollingInterval()) go func() { select { case <-t.C: - _ = ctx.Trigger(storagemarket.ClientEventWaitForDealState) + _ = ctx.Trigger(storagemarket.ClientEventWaitForDealState, pollError) case <-ctx.Context().Done(): t.Stop() return diff --git a/storagemarket/impl/clientstates/client_states_test.go b/storagemarket/impl/clientstates/client_states_test.go index 1494be40..09ebc9a6 100644 --- a/storagemarket/impl/clientstates/client_states_test.go +++ b/storagemarket/impl/clientstates/client_states_test.go @@ -281,6 +281,7 @@ func TestCheckForDealAcceptance(t *testing.T) { inspector: func(deal storagemarket.ClientDeal, env *fakeEnvironment) { tut.AssertDealState(t, storagemarket.StorageDealCheckForAcceptance, deal.State) assert.Equal(t, uint64(1), deal.PollRetryCount) + assert.Equal(t, uint64(1), deal.PollErrorCount) }, }) }) diff --git a/storagemarket/types.go b/storagemarket/types.go index 00217e06..068cba88 100644 --- a/storagemarket/types.go +++ b/storagemarket/types.go @@ -105,6 +105,7 @@ type ClientDeal struct { PublishMessage *cid.Cid SlashEpoch abi.ChainEpoch PollRetryCount uint64 + PollErrorCount uint64 } // StorageDeal is a local combination of a proposal and a current deal state diff --git a/storagemarket/types_cbor_gen.go b/storagemarket/types_cbor_gen.go index d84f8d7a..3fca07bf 100644 --- a/storagemarket/types_cbor_gen.go +++ b/storagemarket/types_cbor_gen.go @@ -22,7 +22,7 @@ func (t *ClientDeal) MarshalCBOR(w io.Writer) error { _, err := w.Write(cbg.CborNull) return err } - if _, err := w.Write([]byte{140}); err != nil { + if _, err := w.Write([]byte{141}); err != nil { return err } @@ -124,6 +124,12 @@ func (t *ClientDeal) MarshalCBOR(w io.Writer) error { return err } + // t.PollErrorCount (uint64) (uint64) + + if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.PollErrorCount))); err != nil { + return err + } + return nil } @@ -138,7 +144,7 @@ func (t *ClientDeal) UnmarshalCBOR(r io.Reader) error { return fmt.Errorf("cbor input should be of type array") } - if extra != 12 { + if extra != 13 { return fmt.Errorf("cbor input had wrong number of fields") } @@ -327,6 +333,20 @@ func (t *ClientDeal) UnmarshalCBOR(r io.Reader) error { } t.PollRetryCount = uint64(extra) + } + // t.PollErrorCount (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeader(br) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.PollErrorCount = uint64(extra) + } return nil }