github / github/gh-ost

injectHeartbeat writing failed on teardown

未关闭
#1,663 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
bug
主要语言
Go
星标
13.6k
派生
1.4k
平均合并
2 小时 31 分钟
30 天内合并 PR
4

描述

Hi all!

Environment:
Azure Mysql Flexible Sever, 8.0.44-azure
gh-ost 1.1.8

We have an instance with a number of partitioned tables and a large schema metadata. With this setup, the dry run check fails with the following errors (from the first to the last):

```code
Closed streamer connection. err=
Dropping table `_ghc`
Table dropped
Error 1146 (42S02): Table '_ghc' doesn't exist
...
Error 1146 (42S02): Table '_ghc' doesn't exist
...
injectHeartbeat writing failed 61 times, last error: Error 1146 (42S02): Table '_ghc' doesn't exist
```

It appears that on slow disks/thousands of tables, [finalCleanup](https://github.com/github/gh-ost/blob/v1.1.8/go/logic/migrator.go#L1723) is executed too early and drops the table before [teardown](https://github.com/github/gh-ost/blob/v1.1.8/go/logic/migrator.go#L373) (where injectHeartbeat actually stops). And deleting a '_ghc' table takes longer than `default-retries` (60) * `heartbeat-interval-millis` (100 ms).

Currently, this can be fixed by increasing `default-retries` or `heartbeat-interval-millis` (or both), but this seems like a workaround.

Is it possible to fix the order of execution?

Thanks in advance!

贡献指南

打开贡献指南

调研方向

Start in go/logic/migrator.go at finalCleanup and teardown, then trace where injectHeartbeat is stopped during the dry-run flow. Reproduce with a slow cleanup or large schema and verify that heartbeat writes stop before the _ghc table is dropped, without the reported teardown errors.

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

评估

技术栈
go, mysql
领域
database
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
冷清
描述清晰度
描述清楚
新手友好度
58/100

把新 issue 发到你的邮箱

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