#8268·dragonfly

当脚本结果表中有一个 __index 元方法调用 Redis.call 时,会发生 SIGABRT

作者: vyavdoshenko创建于 2026年9月9日更新于 2026年9月9日
标签bug

在运行 Valkey TCL 套件 (单元/脚本) "返回包含调用服务器的元表的表" 来测试 Dragonfly 时发现此问题。如果脚本返回一个元表 `__index` 调用 `Redis.call` 的表,则在结果序列化时会触发元方法,而此时脚本事务已经解锁。然后,嵌套命令会被安排在不再可运行的事务上,服务器会中止 (transaction.cc: "检查失败: !IsAtomicMulti() || cid_->IsMultiTransactional()")。任何具有 EVAL 访问权限的客户端都可以使服务器崩溃。在发行版构建中,DCHECK 已被移除,嵌套写入将在脚本的原子范围之外运行。

内容来源: dragonflydb/dragonfly