Source: Release notes
Feature: Database sharding
This release makes it possible to shard subgraph storage and spread subgraph deployments, and the load coming from indexing and querying them across multiple independent Postgres databases.
This feature is considered experimenatal. We encourage users to try this out in a test environment, but do not recommend it yet for production use. In particular, the details of how sharding is configured may change in backwards-incompatible ways in the future.
Breaking change: Require a block number in proofOfIndexing
queries
This changes the proofOfIndexing
GraphQL API from
type Query {
proofOfIndexing(subgraph: String!, blockHash: Bytes!, indexer: Bytes): Bytes
}
to
type Query {
proofOfIndexing(
subgraph: String!
blockNumber: Int!
blockHash: Bytes!
indexer: Bytes
): Bytes
}
This allows the indexer agent to provide a block number and hash to be able to obtain a POI even if this block is not cached in the Ethereum blocks cache. Prior to this, the POI would be null
if this wasn't the case, even if the subgraph deployment in question was up to date, leading to the indexer missing out on indexing rewards.
Misc
- Fix non-determinism caused by not (always) correctly reverting dynamic sources when handling reorgs.
- Integrate the query cache into subscriptions to improve their performance.
- Add
graphman
crate for managing Graph Node infrastructure. - Improve query cache logging.
- Expose indexing status port (
8030
) from Docker image. - Remove support for unnecessary data sources
templates
inside subgraph data sources. They are only supported at the top level. - Avoid sending empty store events through the database.
- Fix database connection deadlocks.
- Rework the codebase to use
anyhow
instead offailure
. - Log stack trace in case of database connection timeouts, to help with root-causing.
- Fix stack overflows in GraphQL parsing.
- Disable fulltext search by default (it is nondeterministic and therefore not currently supported in the network).