diff --git a/chain/events/events_called.go b/chain/events/events_called.go index 04a87a545..196034a9a 100644 --- a/chain/events/events_called.go +++ b/chain/events/events_called.go @@ -485,13 +485,15 @@ func (me *messageEvents) checkNewCalls(ts *types.TipSet) (map[triggerID]eventDat for tid, matchFns := range me.matchers { var matched bool + var once bool for _, matchFn := range matchFns { - ok, err := matchFn(msg) + matchOne, ok, err := matchFn(msg) if err != nil { log.Errorf("event matcher failed: %s", err) continue } matched = ok + once = matchOne if matched { break @@ -500,7 +502,9 @@ func (me *messageEvents) checkNewCalls(ts *types.TipSet) (map[triggerID]eventDat if matched { res[tid] = msg - break + if once { + break + } } } }) @@ -548,7 +552,7 @@ func (me *messageEvents) messagesForTs(ts *types.TipSet, consume func(*types.Mes // `curH`-`ts.Height` = `confidence` type MsgHandler func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (more bool, err error) -type MsgMatchFunc func(msg *types.Message) (bool, error) +type MsgMatchFunc func(msg *types.Message) (matchOnce bool, matched bool, err error) // Called registers a callback which is triggered when a specified method is // called on an actor, or a timeout is reached. diff --git a/chain/events/events_test.go b/chain/events/events_test.go index 5798fb75c..1204e3938 100644 --- a/chain/events/events_test.go +++ b/chain/events/events_test.go @@ -561,9 +561,9 @@ func TestAtChainedConfidenceNull(t *testing.T) { require.Equal(t, false, reverted) } -func matchAddrMethod(to address.Address, m abi.MethodNum) func(msg *types.Message) (bool, error) { - return func(msg *types.Message) (bool, error) { - return to == msg.To && m == msg.Method, nil +func matchAddrMethod(to address.Address, m abi.MethodNum) func(msg *types.Message) (matchOnce bool, matched bool, err error) { + return func(msg *types.Message) (matchOnce bool, matched bool, err error) { + return true, to == msg.To && m == msg.Method, nil } } diff --git a/chain/events/utils.go b/chain/events/utils.go index 40556c9ff..e50dbc6fe 100644 --- a/chain/events/utils.go +++ b/chain/events/utils.go @@ -34,11 +34,11 @@ func (me *messageEvents) CheckMsg(ctx context.Context, smsg types.ChainMsg, hnd } func (me *messageEvents) MatchMsg(inmsg *types.Message) MsgMatchFunc { - return func(msg *types.Message) (bool, error) { + return func(msg *types.Message) (matchOnce bool, matched bool, err error) { if msg.From == inmsg.From && msg.Nonce == inmsg.Nonce && !inmsg.Equals(msg) { - return false, xerrors.Errorf("matching msg %s from %s, nonce %d: got duplicate origin/nonce msg %d", inmsg.Cid(), inmsg.From, inmsg.Nonce, msg.Nonce) + return true, false, xerrors.Errorf("matching msg %s from %s, nonce %d: got duplicate origin/nonce msg %d", inmsg.Cid(), inmsg.From, inmsg.Nonce, msg.Nonce) } - return inmsg.Equals(msg), nil + return true, inmsg.Equals(msg), nil } } diff --git a/markets/storageadapter/client.go b/markets/storageadapter/client.go index 863e527cb..15dbffea5 100644 --- a/markets/storageadapter/client.go +++ b/markets/storageadapter/client.go @@ -289,44 +289,44 @@ func (c *ClientNodeAdapter) OnDealSectorCommitted(ctx context.Context, provider var sectorNumber abi.SectorNumber var sectorFound bool - matchEvent := func(msg *types.Message) (bool, error) { + matchEvent := func(msg *types.Message) (matchOnce bool, matched bool, err error) { if msg.To != provider { - return false, nil + return true, false, nil } switch msg.Method { case builtin.MethodsMiner.PreCommitSector: var params miner.SectorPreCommitInfo if err := params.UnmarshalCBOR(bytes.NewReader(msg.Params)); err != nil { - return false, xerrors.Errorf("unmarshal pre commit: %w", err) + return true, false, xerrors.Errorf("unmarshal pre commit: %w", err) } for _, did := range params.DealIDs { if did == abi.DealID(dealId) { sectorNumber = params.SectorNumber sectorFound = true - return false, nil + return true, false, nil } } - return false, nil + return true, false, nil case builtin.MethodsMiner.ProveCommitSector: var params miner.ProveCommitSectorParams if err := params.UnmarshalCBOR(bytes.NewReader(msg.Params)); err != nil { - return false, xerrors.Errorf("failed to unmarshal prove commit sector params: %w", err) + return true, false, xerrors.Errorf("failed to unmarshal prove commit sector params: %w", err) } if !sectorFound { - return false, nil + return true, false, nil } if params.SectorNumber != sectorNumber { - return false, nil + return true, false, nil } - return true, nil + return false, true, nil default: - return false, nil + return true, false, nil } } diff --git a/markets/storageadapter/provider.go b/markets/storageadapter/provider.go index 338396675..ca6a8e0ff 100644 --- a/markets/storageadapter/provider.go +++ b/markets/storageadapter/provider.go @@ -279,44 +279,44 @@ func (n *ProviderNodeAdapter) OnDealSectorCommitted(ctx context.Context, provide var sectorNumber abi.SectorNumber var sectorFound bool - matchEvent := func(msg *types.Message) (bool, error) { + matchEvent := func(msg *types.Message) (matchOnce bool, matched bool, err error) { if msg.To != provider { - return false, nil + return true, false, nil } switch msg.Method { case builtin.MethodsMiner.PreCommitSector: var params miner.SectorPreCommitInfo if err := params.UnmarshalCBOR(bytes.NewReader(msg.Params)); err != nil { - return false, xerrors.Errorf("unmarshal pre commit: %w", err) + return true, false, xerrors.Errorf("unmarshal pre commit: %w", err) } for _, did := range params.DealIDs { if did == abi.DealID(dealID) { sectorNumber = params.SectorNumber sectorFound = true - return false, nil + return true, false, nil } } - return false, nil + return true, false, nil case builtin.MethodsMiner.ProveCommitSector: var params miner.ProveCommitSectorParams if err := params.UnmarshalCBOR(bytes.NewReader(msg.Params)); err != nil { - return false, xerrors.Errorf("failed to unmarshal prove commit sector params: %w", err) + return true, false, xerrors.Errorf("failed to unmarshal prove commit sector params: %w", err) } if !sectorFound { - return false, nil + return true, false, nil } if params.SectorNumber != sectorNumber { - return false, nil + return true, false, nil } - return true, nil + return false, true, nil default: - return false, nil + return true, false, nil } }