Skip to content

Commit 9abe818

Browse files
committed
fixes
1 parent 4d79f22 commit 9abe818

File tree

7 files changed

+22
-61
lines changed

7 files changed

+22
-61
lines changed

chain/events/filter/event.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ func (m *EventFilterManager) Revert(ctx context.Context, from, to *types.TipSet)
370370
}
371371

372372
func (m *EventFilterManager) Install(ctx context.Context, minHeight, maxHeight abi.ChainEpoch, tipsetCid cid.Cid, addresses []address.Address,
373-
keysWithCodec map[string][]types.ActorEventBlock, excludeReverted bool) (EventFilter, error) {
373+
keysWithCodec map[string][]types.ActorEventBlock, _ bool) (EventFilter, error) {
374374
m.mu.Lock()
375375
if m.currentHeight == 0 {
376376
// sync in progress, we haven't had an Apply
@@ -402,7 +402,7 @@ func (m *EventFilterManager) Install(ctx context.Context, minHeight, maxHeight a
402402
}
403403

404404
if m.EventIndex != nil && requiresHistoricEvents {
405-
if err := m.EventIndex.prefillFilter(ctx, f, excludeReverted); err != nil {
405+
if err := m.EventIndex.prefillFilter(ctx, f); err != nil {
406406
return nil, xerrors.Errorf("pre-fill historic events: %w", err)
407407
}
408408
}

chain/events/filter/index.go

+12-13
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ const (
9292
revertEventsInTipset = `UPDATE event SET reverted=true WHERE height=? AND tipset_key=?`
9393
restoreEvent = `UPDATE event SET reverted=false WHERE height=? AND tipset_key=? AND tipset_key_cid=? AND emitter=? AND event_index=? AND message_cid=? AND message_index=?`
9494

95-
createIndexEventEmitter = `CREATE INDEX IF NOT EXISTS event_emitter ON event (emitter)`
95+
createIndexEventEmitter = `CREATE INDEX IF NOT EXISTS event_emitter ON event (emitter)`
9696
createIndexEventTipsetKeyCid = `CREATE INDEX IF NOT EXISTS event_tipset_key_cid ON event (tipset_key_cid);`
9797
createIndexEventHeight = `CREATE INDEX IF NOT EXISTS event_height ON event (height);`
9898
createIndexEventReverted = `CREATE INDEX IF NOT EXISTS event_reverted ON event (reverted);`
@@ -295,11 +295,12 @@ func (ei *EventIndex) migrateToVersion3(ctx context.Context) error {
295295
}
296296
defer func() { _ = tx.Rollback() }()
297297

298-
// create index on event.emitter_addr.
299-
_, err = tx.ExecContext(ctx, "CREATE INDEX IF NOT EXISTS event_emitter_addr ON event (emitter_addr)")
300-
if err != nil {
301-
return xerrors.Errorf("create index event_emitter_addr: %w", err)
302-
}
298+
// The original work on schema v3 included an index on, then, emitter_addr.
299+
// Successive work to index events by emitter actor ID instead required the index on the column
300+
// to be recreated on a new column called emitter. Therefore, the index creation is done as part of
301+
// migrateToVersion4.
302+
//
303+
// For further context, see: https://github.com/filecoin-project/lotus/pull/11723#discussion_r1526295815
303304

304305
// original v3 migration introduced an index:
305306
// CREATE INDEX IF NOT EXISTS event_entry_key_index ON event_entry (key)
@@ -752,7 +753,7 @@ func (ei *EventIndex) CollectEvents(ctx context.Context, te *TipSetEvents, rever
752753
}
753754

754755
// prefillFilter fills a filter's collection of events from the historic index.
755-
func (ei *EventIndex) prefillFilter(ctx context.Context, f *eventFilter, excludeReverted bool) error {
756+
func (ei *EventIndex) prefillFilter(ctx context.Context, f *eventFilter) error {
756757
var (
757758
clauses, joins []string
758759
values []any
@@ -788,14 +789,12 @@ func (ei *EventIndex) prefillFilter(ctx context.Context, f *eventFilter, exclude
788789
values = append(values, emitter)
789790
}
790791
clauses = append(clauses, "("+strings.Join(subclauses, " OR ")+")")
791-
// Explicitly exclude reverted events, since at least one emitter is present and reverts cannot be considered.
792-
excludeReverted = true
793792
}
794793

795-
if excludeReverted {
796-
clauses = append(clauses, "event.reverted=?")
797-
values = append(values, false)
798-
}
794+
// Always exclude reverted events when prefilling. See:
795+
// - https://github.com/filecoin-project/lotus/issues/11770
796+
clauses = append(clauses, "event.reverted=?")
797+
values = append(values, false)
799798

800799
if len(f.keysWithCodec) > 0 {
801800
join := 0

chain/events/filter/index_migration_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,10 @@ func TestMigration_V3ToV4Sample1(t *testing.T) {
108108
require.NoError(t, err)
109109
tree, err := state.NewStateTree(cst, network)
110110
require.NoError(t, err)
111-
//for _, addr := range addrs {
112-
// _, err = tree.RegisterNewAddress(addr)
113-
// require.NoError(t, err)
114-
//}
111+
for _, addr := range addrs {
112+
_, err = tree.RegisterNewAddress(addr)
113+
require.NoError(t, err)
114+
}
115115
_, err = tree.Flush(ctx)
116116
require.NoError(t, err)
117117

chain/events/filter/index_test.go

+2-22
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ func TestEventIndexPrefillFilter(t *testing.T) {
286286
for _, tc := range testCases {
287287
tc := tc // appease lint
288288
t.Run(tc.name, func(t *testing.T) {
289-
if err := ei.prefillFilter(context.Background(), tc.filter, false); err != nil {
289+
if err := ei.prefillFilter(context.Background(), tc.filter); err != nil {
290290
require.NoError(t, err, "prefill filter events")
291291
}
292292

@@ -681,14 +681,6 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) {
681681
te: events14000,
682682
want: noCollectedEvents,
683683
},
684-
}
685-
686-
exclusiveTestCases := []struct {
687-
name string
688-
filter *eventFilter
689-
te *TipSetEvents
690-
want []*CollectedEvent
691-
}{
692684
{
693685
name: "nomatch tipset min height",
694686
filter: &eventFilter{
@@ -929,19 +921,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) {
929921
for _, tc := range inclusiveTestCases {
930922
tc := tc // appease lint
931923
t.Run(tc.name, func(t *testing.T) {
932-
if err := ei.prefillFilter(context.Background(), tc.filter, false); err != nil {
933-
require.NoError(t, err, "prefill filter events")
934-
}
935-
936-
coll := tc.filter.TakeCollectedEvents(context.Background())
937-
require.ElementsMatch(t, coll, tc.want, tc.name)
938-
})
939-
}
940-
941-
for _, tc := range exclusiveTestCases {
942-
tc := tc // appease lint
943-
t.Run(tc.name, func(t *testing.T) {
944-
if err := ei.prefillFilter(context.Background(), tc.filter, true); err != nil {
924+
if err := ei.prefillFilter(context.Background(), tc.filter); err != nil {
945925
require.NoError(t, err, "prefill filter events")
946926
}
947927

chain/state/statetree_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func TestResolveCache(t *testing.T) {
9797
nonId := address.NewForTestGetter()()
9898
id, _ := address.NewIDAddress(1000)
9999

100-
st.LookupIDFun = func(a address.Address) (address.Address, error) {
100+
st.lookupIDFun = func(a address.Address) (address.Address, error) {
101101
if a == nonId {
102102
return id, nil
103103
}

chain/stmgr/stmgr.go

-18
Original file line numberDiff line numberDiff line change
@@ -587,21 +587,3 @@ func (sm *StateManager) GetRandomnessDigestFromTickets(ctx context.Context, rand
587587

588588
return r.GetChainRandomness(ctx, randEpoch)
589589
}
590-
591-
func (sm *StateManager) LookupActorID(ctx context.Context, addr address.Address, ts *types.TipSet) (abi.ActorID, error) {
592-
var idAddr address.Address
593-
if addr.Protocol() == address.ID {
594-
idAddr = addr // already an ID address
595-
} else {
596-
var err error
597-
addr, err = sm.LookupID(ctx, addr, ts)
598-
if err != nil {
599-
return 0, xerrors.Errorf("state manager lookup id: %w", err)
600-
}
601-
}
602-
actor, err := address.IDFromAddress(idAddr)
603-
if err != nil {
604-
return 0, xerrors.Errorf("resolve actor id: id from addr: %w", err)
605-
}
606-
return abi.ActorID(actor), nil
607-
}

node/modules/actorevent.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func EventFilterManager(cfg config.EventsConfig) func(helpers.MetricsCtx, repo.L
103103
resolverCacheExpiry = time.Minute
104104
resolverCacheNilTipSet = false
105105
)
106-
actorResolver := filter.NewCachedActorResolver(sm.LookupActorID, resolverCacheSize, resolverCacheExpiry, resolverCacheNilTipSet)
106+
actorResolver := filter.NewCachedActorResolver(sm.LookupID, resolverCacheSize, resolverCacheExpiry, resolverCacheNilTipSet)
107107

108108
// Enable indexing of actor events
109109
var eventIndex *filter.EventIndex

0 commit comments

Comments
 (0)