前端:活跃句柄表 + atexit 兜底落盘,漏调 Close 不再丢最后一笔写 - #25
Merged
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 三后端各跑一遍。配套 PR:array2d/kvspace-durable#30(close 落盘失败写 stderr,补上「真丢也绝不静默」那半句)。
🤖 Generated with Claude Code