#69304·tidb

session: 如果已终止的事务清理 MemDB,则 LazyTxn.Commit 可能会崩溃

作者: AilinKid创建于 2026年6月17日更新于 2026年9月17日
标签type/bugsig/executionsig/transactioncomponent/sessionseverity/majormay-affects-8.1report/customeraffects-8.5

□ 错误报告

请在提交问题之前回答这些问题。 谢谢!

  1. 最小繁殖步骤(需要)

这是63956 / #64001 / #64185的续作. 他们修好了"LazyTxn" 回滚路径,在回滚清理前将交易内存-脚印钩取而代之. 在LazyTxn上仍可复制同样的恐慌课。 承诺路径。

以下模拟单元测试在本地复制这个问题. 它与 MemDB 内容创建交易,将会话内存跟踪器附在模拟会话根部跟踪器上,武器"weery Interrupted",然后直接调用"承诺Txn",这样在承诺/memdb清理时仍然存在死亡信号.

开始 func TestPanic On CommitKilledTxn(t *testing.T) { 存档副本. 存储 := testkit. CreateMockStore(t) tk: = testkit. New TestKit(t, store) (中文(简体) ). tk.MustExec (“ 使用测试”) tk.MustExec ("如果存在 t" 则将表格丢出) tk.MustExec ("创建表格 t (id int)") tk.MustExec ("开始悲观") tk.MustExec ("插入 t 值(1);") tk.MustExec ("插入从 t 中选择 *") tk.MustExec ("插入从 t 中选择 *") tk.MustExec ("插入从 t 中选择 *") tk.MustExec ("插入从 t 中选择 *") tk.MustExec ("插入从 t 中选择 *") tk.MustExec ("插入从 t 中选择 *") 模拟跟踪器:=内存. NewTracker (1, -1). 模拟追踪器。 IsRootTrackerOfs = 真实 模拟追踪器。 杀手 = & sqlkiller. SQLKiller * * tk.session (.). Get SessionVars (. MemTracker. Attachto (mockTracker)) (英语). 模拟 Tracker. Killer. SendKillSignal (sqlkiller. Query Interputed) (英语). var 错误 需要。notPanics(t, func () { 错误=tk.session (.). 承诺Txn(背景.background ()). ) (中文(简体) ). 需要。没有错误( t, 错误) tk.MustQuery( 从 t 中选择计数( *) ) 。 检查(testkit.Rows ("64")). {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


运行 :

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
./工具/检查/失效-go-test.sh pkg/session/test/txn - 运行的TestPanicOn CommittKilledTxn - counts=1

2.你期望看到什么? (必须)

`承诺Txn ' 在交易被杀死后清理MemDB内存追踪时不应惊慌失措。 如果承诺已经进行,交易应当正常完成,或者通过现有承诺路径返回普通错误。

在上文的当地模拟中,在拟议调整测试通行证后,从t ' 返回`64 ' 中选择 " (*) " 。

  1. 你所看到的(要求)

试验失败了,

页:1 恐慌值: [执行器: 1317] 查询执行被中断


相关的堆栈是:

页:1
GitHub.com/平盖/tidb/pkg/util/memory. (*追踪器). 旋转
pkg/util/memory/tracker.go:540
GitHub.com/平盖/tidb/pkg/util/memory. (*Tracker). 替换已使用的字节
pkg/util/memory/tracker.go:819
GitHub.com/pingcap/tidb/pkg/会话. (*会话). Set MemoryFootprintChangeHook.func1 (中文(简体) ).
pkg/会/会。
GitHub.com/tikv/客户端-go/v2/内部/工会商店/艺术 (*ART). Set MemoryFootprint ChangeHook.func1 (中文(简体) ).
GitHub.com/tikv/客户-go/v2/内部/工会商店/arena.(*MemdbArena). 主题
. . . . . . .