Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

indexer-alt: index chain identifier #20148

Merged
merged 7 commits into from
Nov 4, 2024
Merged

Conversation

amnn
Copy link
Member

@amnn amnn commented Nov 2, 2024

Description

Index the chain identifier and initial protocol version in a kv_genesis table. This takes the place of chain identifier indexing and will also be used by indexers for protocol configs and feature flags, which need to know the initial protocol version to index and the chain identifier.

Test plan

Run the indexer twice, and note from the tracing messages that the first time, the indexer is bootstrapped, and the second time it reads from the bootstrapped table.

Stack


Release notes

Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required.

For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates.

  • Protocol:
  • Nodes (Validators and Full nodes):
  • Indexer:
  • JSON-RPC:
  • GraphQL:
  • CLI:
  • Rust SDK:
  • REST API:

@amnn amnn self-assigned this Nov 2, 2024
Copy link

vercel bot commented Nov 2, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
sui-docs ✅ Ready (Inspect) Visit Preview 💬 Add feedback Nov 4, 2024 7:47pm
3 Skipped Deployments
Name Status Preview Comments Updated (UTC)
multisig-toolkit ⬜️ Ignored (Inspect) Visit Preview Nov 4, 2024 7:47pm
sui-kiosk ⬜️ Ignored (Inspect) Visit Preview Nov 4, 2024 7:47pm
sui-typescript-docs ⬜️ Ignored (Inspect) Visit Preview Nov 4, 2024 7:47pm

);

-- Index to ensure there can only be one row in the genesis table.
CREATE UNIQUE INDEX IF NOT EXISTS kv_genesis_unique
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

interesting

## Description

Pipeline for indexing Display VersionUpdated events, so readers can
render Display for Objects.

## Test plan

Run the indexer on the first ~1.6M checkpoints (the first display events
happen around checkpoint 1.5M), and then inspect the database:

```
sui$ cargo run -p sui-indexer-alt --release --                                   \
  --database-url "postgres://postgres:postgrespw@localhost:5432/sui_indexer_alt" \
  indexer --remote-store-url https://checkpoints.mainnet.sui.io                  \
  --consistent-range 3600
```

```
sui_indexer_alt=# SELECT object_type, display_id FROM sum_displays LIMIT 10;
                                                                                                              object_type                                                                                                               |                             display_id
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------
 \x72f9c76421170b5a797432ba9e1b3b2e2b7cf6faa26eb955396c773af2479e1e0967616d655f383139320847616d653831393200                                                                                                                             | \xb06e4607642f6c08e196f8bd84b653c784864a6badca2066e63db42e846fdd4c
 \x72ad8f46d4fc3bbc24df15f6c62a98044c2649a9a31895a957254b2cf16e0cb905646d656e7305446d656e7300                                                                                                                                           | \x831cd05a3de12ae3dcea4382e9f56eadded8efd83c742036acd789fc41f1a03f
 \x72ad8f46d4fc3bbc24df15f6c62a98044c2649a9a31895a957254b2cf16e0cb905646d656e7309446d656e734d65746100                                                                                                                                   | \x3e8acb139222c9e335980f8b427270e92d276152140545bfde46c700472a2e11
 \xee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a1087375696672656e73075375694672656e0107ee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a10463617079044361707900                                         | \x3d53effd472191435e7735ff9ed0b3083ef10dee4793db51df92038cea48b139
 \x5b45da03d42b064f5e051741b6fed3b29eb817c7923b83b92f37a1d2abf4fbab036e6674034e667400                                                                                                                                                   | \x23453afb61ba4e0c9f040839c0d620c2cab774491656c086e10871aae8f8b3e9
 \xbb1531504c9c3235d3cd637ed9573cbe18461255b4175a1cb1e1b07b8aa8e11b0873686f77636173650853686f776361736500                                                                                                                               | \xa306db0c6d3f5cbb8169143c22da5b61caf3576f1b3f3e77537aef8d4ca4b515
 \xbb1531504c9c3235d3cd637ed9573cbe18461255b4175a1cb1e1b07b8aa8e11b0473756961054d6564616c00                                                                                                                                             | \x70e764f567b976d8e654064c14a7fbd94f0994a229fb0a7e119d80b4f1e4b760
 \xbb1531504c9c3235d3cd637ed9573cbe18461255b4175a1cb1e1b07b8aa8e11b04737569610d506572736f6e616c4d6564616c00                                                                                                                             | \xb438c4cbda18b0890de8ca2a1813be70fc3b64fedf171ea7c658d43605a11ece
 \xbb1531504c9c3235d3cd637ed9573cbe18461255b4175a1cb1e1b07b8aa8e11b08746573745f6e66740b53756961546573744e465400                                                                                                                         | \xa37afca51a40bc90e30991631515f2ab8b9ecef90e51fbf4af12aa0ea5413250
 \xf1e7b4093872df432b2adb50533a1fa6f9e4b20856217657242fe7d9d4ac42e80b6574686f735f73717561640a4574686f7353717561640107f1e7b4093872df432b2adb50533a1fa6f9e4b20856217657242fe7d9d4ac42e80b6574686f735f73717561640b4574686f7353717561643100 | \x7c330d61f99af7983e8714b4e63437d93813316ac54e8f83103b2ab2a021997e
(10 rows)
```
## Description

Make it possible to access the ingestion client on the ingestion service
and indexer. This will be used to bootstrap the indexer which may need
to wait for the genesis checkpoint to initialise certain tables and
state before indexing proper starts.

## Test plan

CI
## Description

Factor out the logic used by the ingestion broadcaster to retry fetching
a checkpoint if it is not found. This change is behaviour preserving but
the new `wait_for` function will be re-used in some bootstrapping logic
that waits for the existence of the genesis checkpoint.

## Test plan

CI
## Description

...to be used in a bootstrapping script.
## Description

Add explicit `NOT NULL`s to the key columns inside the event filter
tables. This is not a behavioural change as these columns are already
`NOT NULL` because they are part of the primary key. As per an earlier
PR comment, relying on the implicit `NOT NULL` behaviour was confusing
when reading migrations (and other migration scripts use the explicit
pattern).

## Test plan

CI
## Description

Allow `graceful_shutdown` to accept tasks that return something other
than `()`.

## Test plan

CI
## Description

Index the chain identifier and initial protocol version in a
`kv_genesis` table. This takes the place of chain identifier indexing
and will also be used by indexers for protocol configs and feature
flags, which need to know the initial protocol version to index and the
chain identifier.

## Test plan

Run the indexer twice, and note from the tracing messages that the first
time, the indexer is bootstrapped, and the second time it reads from the
bootstrapped table.
@amnn amnn temporarily deployed to sui-typescript-aws-kms-test-env November 4, 2024 19:41 — with GitHub Actions Inactive
Base automatically changed from amnn/idx-refactors to amnn/idx-sum-pkg November 4, 2024 22:00
@amnn amnn merged commit c151a95 into amnn/idx-sum-pkg Nov 4, 2024
51 checks passed
@amnn amnn deleted the amnn/idx-chain-id branch November 4, 2024 22:01
amnn added a commit that referenced this pull request Nov 5, 2024
## Description

Index the chain identifier and initial protocol version in a
`kv_genesis` table. This takes the place of chain identifier indexing
and will also be used by indexers for protocol configs and feature
flags, which need to know the initial protocol version to index and the
chain identifier.

## Test plan

Run the indexer twice, and note from the tracing messages that the first
time, the indexer is bootstrapped, and the second time it reads from the
bootstrapped table.

## Stack

- #20118 
- #20132 
- #20147

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol: 
- [ ] Nodes (Validators and Full nodes): 
- [ ] Indexer: 
- [ ] JSON-RPC: 
- [ ] GraphQL: 
- [ ] CLI: 
- [ ] Rust SDK:
- [ ] REST API:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants