Merge pull request #728 from filecoin-project/fix/events-double-trigger
fix events double trigger issue
This commit is contained in:
commit
b6816b8729
@ -24,6 +24,7 @@ type RevertHandler func(ctx context.Context, ts *types.TipSet) error
|
|||||||
|
|
||||||
type heightHandler struct {
|
type heightHandler struct {
|
||||||
confidence int
|
confidence int
|
||||||
|
called bool
|
||||||
|
|
||||||
handle HeightHandler
|
handle HeightHandler
|
||||||
revert RevertHandler
|
revert RevertHandler
|
||||||
|
@ -183,6 +183,10 @@ func (e *calledEvents) applyWithConfidence(ts *types.TipSet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, event := range events {
|
for _, event := range events {
|
||||||
|
if event.called {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
trigger := e.triggers[event.trigger]
|
trigger := e.triggers[event.trigger]
|
||||||
if trigger.disabled {
|
if trigger.disabled {
|
||||||
continue
|
continue
|
||||||
|
@ -40,6 +40,7 @@ func (e *heightEvents) headChangeAt(rev, app []*types.TipSet) error {
|
|||||||
ctx, span := trace.StartSpan(ctx, "events.HeightRevert")
|
ctx, span := trace.StartSpan(ctx, "events.HeightRevert")
|
||||||
|
|
||||||
err := e.heightTriggers[tid].revert(ctx, ts)
|
err := e.heightTriggers[tid].revert(ctx, ts)
|
||||||
|
e.heightTriggers[tid].called = false
|
||||||
|
|
||||||
span.End()
|
span.End()
|
||||||
|
|
||||||
@ -82,6 +83,11 @@ func (e *heightEvents) headChangeAt(rev, app []*types.TipSet) error {
|
|||||||
apply := func(h uint64, ts *types.TipSet) error {
|
apply := func(h uint64, ts *types.TipSet) error {
|
||||||
for _, tid := range e.htTriggerHeights[h] {
|
for _, tid := range e.htTriggerHeights[h] {
|
||||||
hnd := e.heightTriggers[tid]
|
hnd := e.heightTriggers[tid]
|
||||||
|
if hnd.called {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
hnd.called = true
|
||||||
|
|
||||||
triggerH := h - uint64(hnd.confidence)
|
triggerH := h - uint64(hnd.confidence)
|
||||||
|
|
||||||
incTs, err := e.tsc.getNonNull(triggerH)
|
incTs, err := e.tsc.getNonNull(triggerH)
|
||||||
|
@ -258,6 +258,48 @@ func TestAt(t *testing.T) {
|
|||||||
require.Equal(t, false, reverted)
|
require.Equal(t, false, reverted)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAtDoubleTrigger(t *testing.T) {
|
||||||
|
fcs := &fakeCS{
|
||||||
|
t: t,
|
||||||
|
h: 1,
|
||||||
|
tsc: newTSCache(2*build.ForkLengthThreshold, nil),
|
||||||
|
}
|
||||||
|
require.NoError(t, fcs.tsc.add(makeTs(t, 1, dummyCid)))
|
||||||
|
|
||||||
|
events := NewEvents(context.Background(), fcs)
|
||||||
|
|
||||||
|
var applied bool
|
||||||
|
var reverted bool
|
||||||
|
|
||||||
|
err := events.ChainAt(func(_ context.Context, ts *types.TipSet, curH uint64) error {
|
||||||
|
require.Equal(t, 5, int(ts.Height()))
|
||||||
|
require.Equal(t, 8, int(curH))
|
||||||
|
applied = true
|
||||||
|
return nil
|
||||||
|
}, func(_ context.Context, ts *types.TipSet) error {
|
||||||
|
reverted = true
|
||||||
|
return nil
|
||||||
|
}, 3, 5)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
fcs.advance(0, 6, nil)
|
||||||
|
require.False(t, applied)
|
||||||
|
require.False(t, reverted)
|
||||||
|
|
||||||
|
fcs.advance(0, 1, nil)
|
||||||
|
require.True(t, applied)
|
||||||
|
require.False(t, reverted)
|
||||||
|
applied = false
|
||||||
|
|
||||||
|
fcs.advance(2, 2, nil)
|
||||||
|
require.False(t, applied)
|
||||||
|
require.False(t, reverted)
|
||||||
|
|
||||||
|
fcs.advance(4, 4, nil)
|
||||||
|
require.True(t, applied)
|
||||||
|
require.True(t, reverted)
|
||||||
|
}
|
||||||
|
|
||||||
func TestAtNullTrigger(t *testing.T) {
|
func TestAtNullTrigger(t *testing.T) {
|
||||||
fcs := &fakeCS{
|
fcs := &fakeCS{
|
||||||
t: t,
|
t: t,
|
||||||
@ -562,6 +604,12 @@ func TestCalled(t *testing.T) {
|
|||||||
require.Equal(t, false, reverted)
|
require.Equal(t, false, reverted)
|
||||||
applied = false
|
applied = false
|
||||||
|
|
||||||
|
// dip below confidence
|
||||||
|
fcs.advance(2, 2, nil) // H=10 (confidence=3, apply)
|
||||||
|
|
||||||
|
require.Equal(t, false, applied)
|
||||||
|
require.Equal(t, false, reverted)
|
||||||
|
|
||||||
require.Equal(t, uint64(7), appliedTs.Height())
|
require.Equal(t, uint64(7), appliedTs.Height())
|
||||||
require.Equal(t, "bafkqaaa", appliedTs.Blocks()[0].Messages.String())
|
require.Equal(t, "bafkqaaa", appliedTs.Blocks()[0].Messages.String())
|
||||||
require.Equal(t, uint64(10), appliedH)
|
require.Equal(t, uint64(10), appliedH)
|
||||||
|
Loading…
Reference in New Issue
Block a user