chain events: split headChange

This commit is contained in:
Łukasz Magiera 2019-09-03 19:59:32 +02:00
parent 5f88ceb965
commit 4d0d51b58c
2 changed files with 31 additions and 6 deletions

View File

@ -86,19 +86,27 @@ func NewEvents(cs eventChainStore) *Events {
_ = e.tsc.add(cs.GetHeaviestTipSet()) _ = e.tsc.add(cs.GetHeaviestTipSet())
cs.SubscribeHeadChanges(e.headChange) cs.SubscribeHeadChanges(e.headChange)
// TODO: cleanup goroutine // TODO: cleanup/gc goroutine
return e return e
} }
func (e *Events) headChange(rev, app []*types.TipSet) error { func (e *Events) headChange(rev, app []*types.TipSet) error {
e.lk.Lock()
defer e.lk.Unlock()
if len(app) == 0 { if len(app) == 0 {
return xerrors.New("events.headChange expected at least one applied tipset") return xerrors.New("events.headChange expected at least one applied tipset")
} }
e.lk.Lock()
defer e.lk.Unlock()
if err := e.headChangeAt(rev, app); err != nil {
return err
}
return e.headChangeCalled(rev, app)
}
func (e *Events) headChangeAt(rev, app []*types.TipSet) error {
// highest tipset is always the first (see cs.ReorgOps) // highest tipset is always the first (see cs.ReorgOps)
newH := app[0].Height() newH := app[0].Height()
@ -122,8 +130,6 @@ func (e *Events) headChange(rev, app []*types.TipSet) error {
} }
} }
// todo: called reverts
if err := e.tsc.revert(ts); err != nil { if err := e.tsc.revert(ts); err != nil {
return err return err
} }
@ -158,7 +164,17 @@ func (e *Events) headChange(rev, app []*types.TipSet) error {
} }
hnd.disable = hnd.msg != nil // special case for Called hnd.disable = hnd.msg != nil // special case for Called
} }
}
return nil
}
func (e *Events) headChangeCalled(rev, app []*types.TipSet) error {
for _, ts := range rev {
_ = ts
}
for _, ts := range app {
// called triggers // called triggers
err := e.messagesForTs(ts, func(msg *types.Message) error { err := e.messagesForTs(ts, func(msg *types.Message) error {

View File

@ -303,4 +303,13 @@ func TestCalled(t *testing.T) {
require.Equal(t, t0123, appliedMsg.To) require.Equal(t, t0123, appliedMsg.To)
require.Equal(t, uint64(2), appliedMsg.Nonce) require.Equal(t, uint64(2), appliedMsg.Nonce)
require.Equal(t, uint64(5), appliedMsg.Method) require.Equal(t, uint64(5), appliedMsg.Method)
// call method again
fcs.advance(0, 4, map[int]cid.Cid{ // msg at H=12; H=15
0: n2msg,
})
// require.Equal(t, false, applied) TODO: FIX!
require.Equal(t, false, reverted)
} }