Skip to content

前端:活跃句柄表 + atexit 兜底落盘,漏调 Close 不再丢最后一笔写 - #25

Merged
miaobyte merged 1 commit into
mainfrom
fix/exit-flush-live-handles
Sep 24, 2026
Merged

miaobyte merged 1 commit into
mainfrom
fix/exit-flush-live-handles

Conversation

@miaobyte

Copy link
Copy Markdown
Contributor

Closes #23

durable 的写侧是惰性的:body 由调用方在返回后填,所以本笔在返回前无法落盘,落盘点只能是「下一次 kvspace* 调用」或 Close。于是「写 N 笔、不 Close、正常退出」就丢第 N 笔——「写即持久」不成立,而且一点告警都没有。shm 后端写即落盘,不受影响,同一份 ABI 两种可观察行为。

修法

前端加一张活跃句柄表(pthread 互斥保护),首个 Connect 时 atexit 注册退出兜底:进程正常退出时把未 Close 的句柄逐个关闭,durable 的 Close 顺带落盘未决写。Close 则从表里摘除,避免二次关闭。

配套:kvspace.h 的写原语注释删掉「写即持久」——body 在返回后才填,那句承诺本来就是错的,改成写明真实落盘时机 + 退出保证;CMakeLists 新增 find_package(Threads REQUIRED);README / frontend.c 头注释不再写死符号个数(数字会随 ABI 漂)。

回归

tutorial-durable/test.py 新增 exit-flush:子进程写 4 笔、不 Close、正常退出,再经 CLI 复核四笔全在(最后一笔由退出兜底落盘);redis / fs / shm 三后端各跑一遍。

19/19 passed   (含 exit-flush redis / exit-flush fs / exit-flush shm)

配套 PR:array2d/kvspace-durable#30(close 落盘失败写 stderr,补上「真丢也绝不静默」那半句)。

🤖 Generated with Claude Code

durable 的写侧是惰性的:body 由调用方在返回后填,所以本笔在返回前无法落盘,落盘点
只能是「下一次 kvspace* 调用」或 Close。于是「写 N 笔、不 Close、正常退出」就丢第 N
笔——「写即持久」不成立,而且一点告警都没有(#23)。shm 后端写即落盘,不受影响,
同一份 ABI 两种可观察行为。

前端加一张活跃句柄表(pthread 互斥保护),首个 Connect 时 atexit 注册退出兜底:进程
正常退出时把未 Close 的句柄逐个关闭,durable 的 Close 顺带落盘未决写。Close 则从表里
摘除,避免二次关闭。

- frontend.c:live 表 + exit_close;kvspaceClose 改为 live_unlink + handle_free
- kvspace.h:写原语注释删掉「写即持久」,写明落盘时机恒为「下一次 op 或 Close」——
  body 在返回后才填,承诺「写即持久」本来就是错的;并给出退出保证(漏调 Close 不丢
  数据,真丢也绝不静默)
- CMakeLists:活跃表用 pthread,新增 find_package(Threads REQUIRED)
- README / frontend.c 头注释:不再写死符号个数(25 / 27)——数字会随 ABI 漂,写
  「同名同签名」即可
- tutorial-durable/test.py:新增 exit-flush 回归——子进程写 4 笔、不 Close、正常退出,
  再经 CLI 复核四笔全在;redis / fs / shm 三后端各跑一遍

19/19 passed(含 exit-flush redis/fs/shm)。

Closes #23

Co-Authored-By: Claude Code <noreply@anthropic.com>
@miaobyte
miaobyte merged commit a33d913 into main Sep 24, 2026
4 checks passed
@miaobyte
miaobyte deleted the fix/exit-flush-live-handles branch September 24, 2026 06:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

durable 句柄未 close 时最后一笔写静默丢失——「写即持久」不成立(shm 正常)

1 participant