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

Large inserts fail #2330

Closed
lutter opened this issue Apr 1, 2021 · 13 comments · Fixed by #2367
Closed

Large inserts fail #2330

lutter opened this issue Apr 1, 2021 · 13 comments · Fixed by #2367
Assignees
Labels
bug Something isn't working

Comments

@lutter
Copy link
Collaborator

lutter commented Apr 1, 2021

With the changes from #2223, we can hit the Postgres limit on the number of bind variables that can be used in one statement. That limit is 65535 parameters. We need to change the code that generates the insert/update/delete statements to break such large changes into multiple statements.

@lutter lutter assigned lutter and tilacog and unassigned lutter Apr 2, 2021
@lutter
Copy link
Collaborator Author

lutter commented Apr 2, 2021

This happened for QmVCfXsbGGmf73GJxTsWZhtjUunitaUXsoJQH6kMYqQoRP:

name      | pancakeswap/exchange-lite
status    | pending
id        | QmVCfXsbGGmf73GJxTsWZhtjUunitaUXsoJQH6kMYqQoRP
namespace | sgd66151
shard     | evm_compat
chain     | bsc
node_id   | index_node_community_4

Error message:

31/03/2021, 10:15:06 - Subgraph instance failed to run: Error while processing block stream for a subgraph: store error: number of parameters must be between 0 and 65535 , code: SubgraphSyncingFailure, id: QmVCfXsbGGmf73GJxTsWZhtjUunitaUXsoJQH6kMYqQoRP

@juanmardefago
Copy link

@lutter just had this error too in juanmardefago/loopring36 -> QmWdU7R2QyTV71wZ8z1R8d75bWyLWz4jHLXeoWnzah27zT

@tilacog
Copy link
Contributor

tilacog commented Mar 30, 2022

A Discord user reported that this error showed up in 0.25.2.
The error message was:

Error while processing block stream for a subgraph: store error: number of parameters must be between 0 and 65535    

Here we define the chunk size and add one extra slot for the block_range column, but I'm pretty sure we bind other columns as well, like vid.

The fix I'm imagining would involve adding +2 or +3 to the denominator part of that division to account for all the extra bindings.

@azf20 azf20 added the bug Something isn't working label Apr 29, 2022
@azf20
Copy link
Contributor

azf20 commented Sep 16, 2022

@tilacog is this issue still live?

@tilacog
Copy link
Contributor

tilacog commented Sep 16, 2022

@azf20 I believe it is. Although, I haven't heard from other users about it since it was reopened.

@hangleang
Copy link

Hi @tilacog, I'm still face the same issue, Are there any potential solutions?

@lutter
Copy link
Collaborator Author

lutter commented Dec 5, 2022

@hangleang is this a subgraph in the hosted service? If so, which one?

@hangleang
Copy link

Hi @lutter, yes, it is.
the problem got fixed after I remove fullTextSearch from subgraph, seems like it cause the problem

@makeitrein
Copy link

@lutter just ran into the same issue for the Geo subgraph

Hosted Service: https://thegraph.com/hosted-service/subgraph/makeitrein/geo
IPFS URL: QmTddMMUXw7tsnQzEY1BmR83xwqbCQRWwRXdP7vXZWi1kW
Subgraph Code: https://github.com/geobrowser/geogenesis/tree/full-text-entity-search/packages/subgraph
Error: https://cloud.hasura.io/public/graphiql?endpoint=https%3A%2F%2Fapi.thegraph.com%2Findex-node%2Fgraphql&query=%7B%0A++indexingStatuses%28subgraphs%3A+%5B%22QmTddMMUXw7tsnQzEY1BmR83xwqbCQRWwRXdP7vXZWi1kW%22%5D%29+%7B%0A++++subgraph%0A++++synced%0A++++health%0A++++entityCount%0A++++fatalError+%7B%0A++++++handler%0A++++++message%0A++++++deterministic%0A++++++block+%7B%0A++++++++hash%0A++++++++number%0A++++++%7D%0A++++%7D%0A++++chains+%7B%0A++++++chainHeadBlock+%7B%0A++++++++number%0A++++++%7D%0A++++++earliestBlock+%7B%0A++++++++number%0A++++++%7D%0A++++++latestBlock+%7B%0A++++++++number%0A++++++%7D%0A++++%7D%0A++%7D%0A%7D%0A

Any pointers would be appreciated

@lutter
Copy link
Collaborator Author

lutter commented Dec 16, 2022

@makeitrein Thanks for the reproducer - I figured out why this is happening, and am working on a fix.

I also noticed that at the failing block 36472865, the subgraph writes enormous amounts of data. The JSON dump of the changes at that block that I took for debugging is ~ 700MB, and it seems most of it is for LogEntry (~ 400MB) and Triple (~ 300 MB) I'll see how big that is in the database once I fix the bug, but it is a huge amount of data for one block.

@makeitrein
Copy link

@makeitrein Thanks for the reproducer - I figured out why this is happening, and am working on a fix.

I also noticed that at the failing block 36472865, the subgraph writes enormous amounts of data. The JSON dump of the changes at that block that I took for debugging is ~ 700MB, and it seems most of it is for LogEntry (~ 400MB) and Triple (~ 300 MB) I'll see how big that is in the database once I fix the bug, but it is a huge amount of data for one block.

Thx for the quick reply! We're using a CSV to populate the initial data set, I'll see if we can explore chunking that out over a few hundred blocks.

@lutter
Copy link
Collaborator Author

lutter commented Dec 19, 2022

Thx for the quick reply! We're using a CSV to populate the initial data set, I'll see if we can explore chunking that out over a few hundred blocks.

I just wasn't sure if this was going to be an ongoing thing - doing this once to load initial data should be no problem (it'll take several minutes to process that block, but that should be fine)

@yanivtal
Copy link
Contributor

yanivtal commented Jan 5, 2023

It would be good to be able to create this many entities in a single block w/ fulltext search. We're disabling fulltext search for now but would love to get it back in when possible.

@lutter lutter closed this as completed in 5ee972f Jan 12, 2023
vutran1710 added a commit to KyberNetwork/graph-node that referenced this issue Feb 1, 2023
* build(deps): bump blake3 from 1.3.1 to 1.3.2 (graphprotocol#4194)

Bumps [blake3](https://github.com/BLAKE3-team/BLAKE3) from 1.3.1 to 1.3.2.
- [Release notes](https://github.com/BLAKE3-team/BLAKE3/releases)
- [Commits](BLAKE3-team/BLAKE3@1.3.1...1.3.2)

---
updated-dependencies:
- dependency-name: blake3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump cid from 0.8.6 to 0.9.0 (graphprotocol#4193)

Bumps [cid](https://github.com/multiformats/rust-cid) from 0.8.6 to 0.9.0.
- [Release notes](https://github.com/multiformats/rust-cid/releases)
- [Commits](multiformats/rust-cid@v0.8.6...v0.9.0)

---
updated-dependencies:
- dependency-name: cid
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump indexmap from 1.9.1 to 1.9.2 (graphprotocol#4192)

Bumps [indexmap](https://github.com/bluss/indexmap) from 1.9.1 to 1.9.2.
- [Release notes](https://github.com/bluss/indexmap/releases)
- [Changelog](https://github.com/bluss/indexmap/blob/master/RELEASES.md)
- [Commits](indexmap-rs/indexmap@1.9.1...1.9.2)

---
updated-dependencies:
- dependency-name: indexmap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* all: fix some Clippy warnings (graphprotocol#4178)

* node, store: Add `graphman stats target`

* store: Make resolve_column_names return SqlName

* node, store: Allow analyzing all tables with `graphman analyze`

* node, store: Add `graphman stats set-target`

* store/postgres: insist on a database with C locale

* store: remove unused lazy_static! (graphprotocol#4200)

* Update docker-compose.yml

* Update docker-compose.yml

* Fix: run locale check after migrations (graphprotocol#4201)

* store/postgres: run locale check after migrations

* store/postgres: place succes log message after locale check

* Update docker-compose.yml

* Update docker-compose.yml

* ci: fix Postgres' locale in CI

* integration-tests: createdb with C locale

Co-authored-by: tilacog <tilacog@gmail.com>
Co-authored-by: Adam Fuller <azf20@users.noreply.github.com>
Co-authored-by: Filippo Costa <filippo@neysofu.me>
Co-authored-by: Filippo Costa <filippo@edgeandnode.com>

* update locale for parallel tests (graphprotocol#4205)

* store: Unfail subgraph status properly after rewind

This is being done by changing `revert_subgraph_errors` to change both
the `failed` and `status` columns in the case of both being `failed`.

Without this change, rewinding failed subgraphs past the failed
block would result in the `failed` status staying the same.

* tests: Test that rewind resets subgraph health

Ports the `fatal-error` test from the legacy test suite to the new test suite,
and extends it to check that the subgraph health is reset to `Healthy` after a rewind.

* enable firehose eth block ingestor (graphprotocol#4204)

* firehose ingestor transforms (graphprotocol#4216)

* Updated `Substreams` to latest version of Protobuf definition and activated `ProductionMode` by default (graphprotocol#4211)

The production mode is required to benefits from automatic backprocessing and downloading of block scoped data message as they are produced. This will drastically improve the ingestion speed of a substreams (time to gather some metrics!).

Updated also the instructions to re-generate the `substreams.proto` file with more instructions of how we do it.

Co-authored-by: Matthieu Vachon <matt@streamingfast.io>

* Remove unused deps from `graph-server-metrics` (graphprotocol#4224)

* server-metrics: remove unused deps

* metrics-server: remove MetricsServer trait

* build(deps): bump openssl from 0.10.42 to 0.10.43 (graphprotocol#4208)

Bumps [openssl](https://github.com/sfackler/rust-openssl) from 0.10.42 to 0.10.43.
- [Release notes](https://github.com/sfackler/rust-openssl/releases)
- [Commits](sfackler/rust-openssl@openssl-v0.10.42...openssl-v0.10.43)

---
updated-dependencies:
- dependency-name: openssl
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* The `SubstreamsBlockStream` was using `request.clone()` side stepping latest cursor value (graphprotocol#4228)

The `request.clone()` does not correctly use the `latest_cursor` value which is the valid up to date in memory cursor to use on re-connection. This led to poisining error in `graph-node` where the same block was processed multiple time because the cursor was not correctly used.

Fixed by moving the request creation directly where it's needed which will use the correct up to date `latest_cursor` value now.

Co-authored-by: Matthieu Vachon <matt@streamingfast.io>

* fail when ens rainbow not present (graphprotocol#4219)

* docker: use exec form for CMD directive (graphprotocol#4217)

* graph, graphql: expose metrics for GraphQL validations failures (graphprotocol#4230)

* `EmptyNodeCapabilities` for chains that don't discriminate nodes (graphprotocol#3985)

* chain(all), graph: EmptyNodeCapabilities

* chain-ethereum: fix PartialOrd for NodeCapabilities

The Ord and PartialOrd implementations of NodeCapabilities currently
break trait rules: `NodeCapabilities {true, false}` is both greater
than and less than (at the same time) `NodeCapabilities {false, true}`.
It'd be nice to get this fixed before we get some obscure bug during
comparisons, or a panic due to std assuming transitivity during
sorts.

* build(deps): bump express in /tests/integration-tests (graphprotocol#4235)

Bumps [express](https://github.com/expressjs/express) from 4.17.1 to 4.18.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](expressjs/express@4.17.1...4.18.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build: remove cargo-chef, revert to stable rust (graphprotocol#4187)

* build(deps): bump base64 from 0.13.1 to 0.20.0 (graphprotocol#4241)

Bumps [base64](https://github.com/marshallpierce/rust-base64) from 0.13.1 to 0.20.0.
- [Release notes](https://github.com/marshallpierce/rust-base64/releases)
- [Changelog](https://github.com/marshallpierce/rust-base64/blob/master/RELEASE-NOTES.md)
- [Commits](marshallpierce/rust-base64@v0.13.1...v0.20.0)

---
updated-dependencies:
- dependency-name: base64
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* graph, node: Move regex into the graph crate

* node, store: Parse index definitions

* node, store: Allow suppressing standard indexes in 'graphman index list'

* graph, node: Colorize the output of 'graphman index list'

* node, store: Use index::Method when creating manual indexes

* node, store: Add SQL printing to `graphman index list`

* node: Fix output from `graphman index list`

* node, store: Parse the index method using FromStr

* graphql: Simplify the arguments for prefetch::fetch

* store: Simplify arguments for Layout.query

* graph, graphql, store: Pass trace flag for query

* all: Allow tracing GraphQL queries via HTTP

* graph, graphql: Include query_id and variables in trace

* graph, node: Print execution errors from `graphman query`

* graph, graphql: Include block number in query trace

* build(deps): bump openssl from 0.10.43 to 0.10.45 (graphprotocol#4267)

Bumps [openssl](https://github.com/sfackler/rust-openssl) from 0.10.43 to 0.10.45.
- [Release notes](https://github.com/sfackler/rust-openssl/releases)
- [Commits](sfackler/rust-openssl@openssl-v0.10.43...openssl-v0.10.45)

---
updated-dependencies:
- dependency-name: openssl
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump proc-macro2 from 1.0.47 to 1.0.49 (graphprotocol#4259)

Bumps [proc-macro2](https://github.com/dtolnay/proc-macro2) from 1.0.47 to 1.0.49.
- [Release notes](https://github.com/dtolnay/proc-macro2/releases)
- [Commits](dtolnay/proc-macro2@1.0.47...1.0.49)

---
updated-dependencies:
- dependency-name: proc-macro2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump quote from 1.0.20 to 1.0.23 (graphprotocol#4258)

Bumps [quote](https://github.com/dtolnay/quote) from 1.0.20 to 1.0.23.
- [Release notes](https://github.com/dtolnay/quote/releases)
- [Commits](dtolnay/quote@1.0.20...1.0.23)

---
updated-dependencies:
- dependency-name: quote
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump anyhow from 1.0.66 to 1.0.68 (graphprotocol#4257)

Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.66 to 1.0.68.
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](dtolnay/anyhow@1.0.66...1.0.68)

---
updated-dependencies:
- dependency-name: anyhow
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump semver from 1.0.14 to 1.0.16 (graphprotocol#4256)

Bumps [semver](https://github.com/dtolnay/semver) from 1.0.14 to 1.0.16.
- [Release notes](https://github.com/dtolnay/semver/releases)
- [Commits](dtolnay/semver@1.0.14...1.0.16)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump num_cpus from 1.14.0 to 1.15.0 (graphprotocol#4265)

Bumps [num_cpus](https://github.com/seanmonstar/num_cpus) from 1.14.0 to 1.15.0.
- [Release notes](https://github.com/seanmonstar/num_cpus/releases)
- [Changelog](https://github.com/seanmonstar/num_cpus/blob/master/CHANGELOG.md)
- [Commits](seanmonstar/num_cpus@v1.14.0...v1.15.0)

---
updated-dependencies:
- dependency-name: num_cpus
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump termcolor from 1.1.2 to 1.1.3 (graphprotocol#4264)

Bumps [termcolor](https://github.com/BurntSushi/termcolor) from 1.1.2 to 1.1.3.
- [Release notes](https://github.com/BurntSushi/termcolor/releases)
- [Commits](BurntSushi/termcolor@1.1.2...1.1.3)

---
updated-dependencies:
- dependency-name: termcolor
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Updated link to graph-cli networks list link (graphprotocol#4246)

* Update protobuf-related dependencies (graphprotocol#4272)

* ci: run code coverage stats every 3 days (graphprotocol#4188)

* fix cloud build (graphprotocol#4279)

* Fix attestability of ValueParseError, EnumCoercionError, ScalarCoercionError (graphprotocol#4278)

* Fix attestability of ValueParseError

* Fix attestability of EnumCoercionError, ScalarCoercionError

* build(deps): bump git-testament from 0.2.0 to 0.2.2 (graphprotocol#4275)

Bumps [git-testament](https://github.com/kinnison/git-testament) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/kinnison/git-testament/releases)
- [Commits](kinnison/git-testament@0.2.0...0.2.2)

---
updated-dependencies:
- dependency-name: git-testament
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: Update ipfs api (graphprotocol#4283)

* build(deps): bump blake3 from 1.3.2 to 1.3.3 (graphprotocol#4209)

Bumps [blake3](https://github.com/BLAKE3-team/BLAKE3) from 1.3.2 to 1.3.3.
- [Release notes](https://github.com/BLAKE3-team/BLAKE3/releases)
- [Commits](BLAKE3-team/BLAKE3@1.3.2...1.3.3)

---
updated-dependencies:
- dependency-name: blake3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: Include graft ipfs lookup for raw_yaml in infinite retries (graphprotocol#4284)

* substreams: Fix spurious builds (graphprotocol#4286)

* graphql: Allow gt/lt comparisons with `Bytes` fields

Fixes graphprotocol#4282

* graph, store: Avoid a bind variable for fulltext queries

We control the string we pass as the language, and therefore do not need to
use a bind variable. We just need to make sure we are passing a valid SQL
string constant

* store: Properly account for fulltext columns in inserts

Fixes graphprotocol#2330

* docker: adds support for ipfs auth urls (graphprotocol#4252)

* `v0.29.0` release notes, `NEWS.md` and Cargo package version (graphprotocol#4298)

* Release v0.29.0

* news: release v0.29.0

* build(deps): bump proc-macro2 from 1.0.49 to 1.0.50 (graphprotocol#4295)

Bumps [proc-macro2](https://github.com/dtolnay/proc-macro2) from 1.0.49 to 1.0.50.
- [Release notes](https://github.com/dtolnay/proc-macro2/releases)
- [Commits](dtolnay/proc-macro2@1.0.49...1.0.50)

---
updated-dependencies:
- dependency-name: proc-macro2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump cid from 0.9.0 to 0.10.1 (graphprotocol#4289)

Bumps [cid](https://github.com/multiformats/rust-cid) from 0.9.0 to 0.10.1.
- [Release notes](https://github.com/multiformats/rust-cid/releases)
- [Changelog](https://github.com/multiformats/rust-cid/blob/master/CHANGELOG.md)
- [Commits](multiformats/rust-cid@v0.9.0...v0.10.1)

---
updated-dependencies:
- dependency-name: cid
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Cache recent blocks in memory to reduce load on the db (graphprotocol#4215)

* store: cache recent blocks in memory

* store: refactor RecentBlocksCache's Inner methods

* store: fix ancestor/child naming in RecentBlocksCache

* store: use a BTreeMap for RecentCachedBlocks

This commit significatly alters the design of RecentCachedBlocks. The
most prominent changes are:

1. We don't require a `.set_chain_head` call anymore. Block insertion
   and chain head update attempt are now the same thing.
2. We don't evict all items in the cache anymore every time the chain
   head advances.
3. Unlike the previous data structure, we are now limited to storing a
   contiguous range of blocks in the cache. This is not really a
   drawback (as the cache contents will usually be identical, i.e. the
   last N blocks before the chain head), but it's worth pointing out.

* rust: upgrade to 1.66

* store: readability improvements to RecentBlocksCache

* store: fix RecentBlocksCache for NEAR

This commit removes the requirement of continuous block number ranges
for RecentBlocksCache. Two reasons for that:

- NEAR doesn't have continuous block number ranges, so the previous
  cache design would have limited effectiveness for NEAR chains.
- Parent hash comparisons are actually enough to uphold all invariants,
  so block number checks were unnecessary in the first place.

The actual code changes are small and mostly limited to `insert_block`.

* build(deps): bump tower-test from `c9d84cd` to `b01bb12` (graphprotocol#4296)

Bumps [tower-test](https://github.com/tower-rs/tower) from `c9d84cd` to `b01bb12`.
- [Release notes](https://github.com/tower-rs/tower/releases)
- [Commits](tower-rs/tower@c9d84cd...b01bb12)

---
updated-dependencies:
- dependency-name: tower-test
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump prost from 0.11.5 to 0.11.6 (graphprotocol#4297)

Bumps [prost](https://github.com/tokio-rs/prost) from 0.11.5 to 0.11.6.
- [Release notes](https://github.com/tokio-rs/prost/releases)
- [Commits](tokio-rs/prost@v0.11.5...v0.11.6)

---
updated-dependencies:
- dependency-name: prost
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump termcolor from 1.1.3 to 1.2.0 (graphprotocol#4294)

Bumps [termcolor](https://github.com/BurntSushi/termcolor) from 1.1.3 to 1.2.0.
- [Release notes](https://github.com/BurntSushi/termcolor/releases)
- [Commits](BurntSushi/termcolor@1.1.3...1.2.0)

---
updated-dependencies:
- dependency-name: termcolor
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump atomic_refcell from 0.1.8 to 0.1.9 (graphprotocol#4290)

Bumps [atomic_refcell](https://github.com/bholley/atomic_refcell) from 0.1.8 to 0.1.9.
- [Release notes](https://github.com/bholley/atomic_refcell/releases)
- [Commits](https://github.com/bholley/atomic_refcell/commits)

---
updated-dependencies:
- dependency-name: atomic_refcell
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump bumpalo from 3.7.0 to 3.12.0 (graphprotocol#4306)

* Env. vars. for forking (graphprotocol#4308)

* adding env params for forking opts

* adding documentation

Co-authored-by: Jeff Wu <jeffywu@pm.me>

* build(deps): bump prost-types from 0.11.5 to 0.11.6 (graphprotocol#4312)

* build(deps): bump git-testament from 0.2.2 to 0.2.4 (graphprotocol#4313)

* Add causality region column and implement isolation rules (graphprotocol#4162)

* feature(offchain): Add `causality_region` column to entity tables

For now this just tracks the tables that need the column and adds the
column to the DDL, but still unconditionally inserts 0. Inserting the
correct causality region is follow up work.

* store: Move `has_causality_region` to manifest, rename to `entities_with_causality_region`

* *: Add `causality_region` to EntityKey

The tricky part was changing `get_many` to return the entity key.

* store: Insert the causality region

* store: Read isolation between causality regions

It was just necessary to make sure that `find` and `find_many` use
the causality region in their where clause.

* fix: Fix release build

* provider: Make stop idempotent

Callers wanted that anyways, and it helps tests.

* tests: Refactor file ds test to use events

* tests: Test conflict between onchain and offchain

* tests: Test conflict between offchain and offchain

* test: Fix unit test

* tests: Improve tests and comments to address review

* fix: Change migration to add column 'if not exists'

* store: Add a materialized view 'info.chain_sizes'

* config: Bump default ipfs timeout to 60 seconds (graphprotocol#4324)

It used to be that 30 seconds was sufficient, but now we see ipfs
requests taking minutes to find a file in the DHT. So 60 seconds
seems like a reasonable step.

* strip all null bytes from utf8 strings that come from substreams, like it's done on other sources (graphprotocol#4328)

* fix test

* add protobuf

* fix database setup for unit test on kyber-ci

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Filippo Costa <filippocosta.italy@gmail.com>
Co-authored-by: David Lutterkort <lutter@watzmann.net>
Co-authored-by: Saihajpreet Singh <saihajpreet.singh@gmail.com>
Co-authored-by: Adam Fuller <azf20@users.noreply.github.com>
Co-authored-by: Tiago Guimarães <tilacog@gmail.com>
Co-authored-by: Filippo Costa <filippo@neysofu.me>
Co-authored-by: Filippo Costa <filippo@edgeandnode.com>
Co-authored-by: Filipe Azevedo <filipe@azevedo.io>
Co-authored-by: Eva Pace <eba.pachi@gmail.com>
Co-authored-by: Leonardo Yvens <leoyvens@gmail.com>
Co-authored-by: Matthieu Vachon <matthieu.o.vachon@gmail.com>
Co-authored-by: Matthieu Vachon <matt@streamingfast.io>
Co-authored-by: Matthieu Vachon <matthieu.vachon@dfuse.io>
Co-authored-by: Shude Li <islishude@gmail.com>
Co-authored-by: Dotan Simha <dotansimha@gmail.com>
Co-authored-by: mudabbirk <59587832+mudabbirk@users.noreply.github.com>
Co-authored-by: Theo Butler <theodusbutler@gmail.com>
Co-authored-by: Leo <leonard.mocanu@ymail.com>
Co-authored-by: Jeff Wu <jeffywu@pm.me>
Co-authored-by: Stéphane Duchesneau <stephane.duchesneau@gmail.com>
Co-authored-by: Vu Tran <vutran@Vus-MacBook-Pro.lan>
Co-authored-by: Vu Tran <vutran@Vus-MacBook-Pro.local>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants