Skip to content

Commit

Permalink
perf: api: add indexes to event topics and emitter addr (filecoin-pro…
Browse files Browse the repository at this point in the history
…ject#11477)

* add index to event_entry.key

* add index to event.emitter_addr
  • Loading branch information
i-norden authored Jan 31, 2024
1 parent efb9422 commit 95fb198
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion chain/events/filter/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ var ddls = []string{
)`,

`CREATE INDEX IF NOT EXISTS height_tipset_key ON event (height,tipset_key)`,
`CREATE INDEX IF NOT EXISTS event_emitter_addr ON event (emitter_addr)`,

`CREATE TABLE IF NOT EXISTS event_entry (
event_id INTEGER,
Expand All @@ -56,21 +57,24 @@ var ddls = []string{
value BLOB NOT NULL
)`,

`CREATE INDEX IF NOT EXISTS event_entry_key_index ON event_entry (key)`,

// metadata containing version of schema
`CREATE TABLE IF NOT EXISTS _meta (
version UINT64 NOT NULL UNIQUE
)`,

`INSERT OR IGNORE INTO _meta (version) VALUES (1)`,
`INSERT OR IGNORE INTO _meta (version) VALUES (2)`,
`INSERT OR IGNORE INTO _meta (version) VALUES (3)`,
}

var (
log = logging.Logger("filter")
)

const (
schemaVersion = 2
schemaVersion = 3

eventExists = `SELECT MAX(id) FROM event WHERE height=? AND tipset_key=? AND tipset_key_cid=? AND emitter_addr=? AND event_index=? AND message_cid=? AND message_index=?`
insertEvent = `INSERT OR IGNORE INTO event(height, tipset_key, tipset_key_cid, emitter_addr, event_index, message_cid, message_index, reverted) VALUES(?, ?, ?, ?, ?, ?, ?, ?)`
Expand Down Expand Up @@ -321,6 +325,22 @@ func NewEventIndex(ctx context.Context, path string, chainStore *store.ChainStor
version = 2
}

if version == 2 {
log.Infof("upgrading event index from version 2 to version 3")

// to upgrade to version 3 we only need to create an index on the event_entry.key column
// and on the event.emitter_addr column
// which means we can just reapply the schema (it will not have any effect on existing data)
for _, ddl := range ddls {
if _, err := db.Exec(ddl); err != nil {
_ = db.Close()
return nil, xerrors.Errorf("could not upgrade index to version 3, exec ddl %q: %w", ddl, err)
}
}

version = 3
}

if version != schemaVersion {
_ = db.Close()
return nil, xerrors.Errorf("invalid database version: got %d, expected %d", version, schemaVersion)
Expand Down

0 comments on commit 95fb198

Please sign in to comment.