[Bug] Very short retry timeout on 'Subgraph failed with non-deterministic error'

未关闭
#5,664 1 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
25/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
postgresql, rust
领域
backend, databases

调研方向

报告提到了 SubgraphInstanceManager、NotificationListener、EthereumPollingBlockIngestor 以及 PostgreSQL HA failover 错误;首先追踪针对所报告的非确定性故障的重试处理。完成的标准是:重试窗口可以配置,或者以其他方式持续覆盖所描述的 failover 过程,并且已根据所报告的错误验证其行为。

由索引模型根据 Issue 内容生成。

描述

bug Stale
Bug report

Hello!

subgraph version: 0.35.1

I see some of our subgraphs stop with the following error logs. The crux is that it stops retrying after 6 seconds!

As I understand, it is caused by HA Postgres doing a leader change or going through a fail-over.

Is there a way to make subgraph to retry for a larger time span? I have not found a setting for that. I think it should try for several hours.

Thank you!

Relevant log output
Oct 14 02:31:02.795 ERRO Subgraph failed with non-deterministic error: Failed to transact block operations: store error: cannot execute UPDATE in a read-only transaction, retry_delay_s: 135, attempt: 0, sgd: 39, subgraph_id: QmRLj4v8iRGBYfRaGPan45QzehUQxQzwrKBU514nEqNZSA, component: SubgraphInstanceManager
Oct 14 02:30:51.304 ERRO Failed to connect notification listener: error connecting to server: failed to lookup address information: Name or service not known, retry_delay_s: 8, attempt: 3, channel: store_events, component: NotificationListener
Oct 14 02:30:51.278 ERRO Failed to connect notification listener: error connecting to server: failed to lookup address information: Name or service not known, retry_delay_s: 8, attempt: 3, channel: chain_head_updates, component: ChainHeadUpdateListener > NotificationListener
Oct 14 02:30:51.086 ERRO Trying again after block polling failed: Ingestor error: store error: cannot execute INSERT in a read-only transaction, provider: mainnet, component: EthereumPollingBlockIngestor
Oct 14 02:30:50.341 ERRO Vacuum of subgraphs.subgraph_deployment failed: store error: cannot execute VACUUM during recovery, job: Vacuum subgraphs.subgraph_deployment, component: JobRunner
Oct 14 02:30:49.979 ERRO Trying again after block polling failed: Ingestor error: store error: cannot execute INSERT in a read-only transaction, provider: mainnet, component: EthereumPollingBlockIngestor
Oct 14 02:30:48.875 ERRO Trying again after block polling failed: Ingestor error: store error: cannot execute INSERT in a read-only transaction, provider: mainnet, component: EthereumPollingBlockIngestor
Oct 14 02:30:47.768 ERRO Trying again after block polling failed: Ingestor error: store error: cannot execute INSERT in a read-only transaction, provider: mainnet, component: EthereumPollingBlockIngestor
Oct 14 02:30:47.289 ERRO Failed to connect notification listener: db error: ERROR: cannot execute LISTEN during recovery, retry_delay_s: 4, attempt: 2, channel: store_events, component: NotificationListener
Oct 14 02:30:47.263 ERRO Failed to connect notification listener: db error: ERROR: cannot execute LISTEN during recovery, retry_delay_s: 4, attempt: 2, channel: chain_head_updates, component: ChainHeadUpdateListener > NotificationListener
Oct 14 02:30:46.651 ERRO Trying again after block polling failed: Ingestor error: store error: cannot execute INSERT in a read-only transaction, provider: mainnet, component: EthereumPollingBlockIngestor
Oct 14 02:30:45.524 ERRO Trying again after block polling failed: Ingestor error: store error: cannot execute INSERT in a read-only transaction, provider: mainnet, component: EthereumPollingBlockIngestor
Oct 14 02:30:45.228 ERRO Failed to connect notification listener: db error: ERROR: cannot execute LISTEN during recovery, retry_delay_s: 2, attempt: 1, channel: store_events, component: NotificationListener
Oct 14 02:30:45.199 ERRO Failed to connect notification listener: db error: ERROR: cannot execute LISTEN during recovery, retry_delay_s: 2, attempt: 1, channel: chain_head_updates, component: ChainHeadUpdateListener > NotificationListener
Oct 14 02:30:44.407 ERRO Trying again after block polling failed: Ingestor error: store error: cannot execute INSERT in a read-only transaction, provider: mainnet, component: EthereumPollingBlockIngestor
Oct 14 02:30:44.392 ERRO Subgraph instance failed to run: Failed to set subgraph status to `failed`: store error: cannot execute INSERT in a read-only transaction, sgd: 1, subgraph_id: QmP16jdXsZHFHgaxqUAVoTzHb5dhpfY83Tx2WfU3tvh3uo, component: SubgraphInstanceManager
IPFS hash

No response

Subgraph name or link to explorer

No response

Some information to help us out
  • Tick this box if this bug is caused by a regression found in the latest release.
  • Tick this box if this bug is specific to the hosted service.
  • I have searched the issue tracker to make sure this issue is not a duplicate.
OS information

Linux

主要语言
Rust
星标
3.2k
派生
1.1k
平均合并
4 天 1 小时
30 天内合并 PR
1

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

graphprotocol/graph-node 的其他 Issue

查看 graphprotocol/graph-node 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。