Skip to content

0-kvspace/ExtIndex 在 · 目录上静默失效(fs 写错 marker 位置、shm 回落不认 · 边界) #197

Description

@miaobyte

#116 衍生(与 #116 解耦,无论帧寻址走 / 还是 · 都独立成立)。

现象

对以 ·OBJ_SEP)结尾的目录建 ext_index:两后端都 rc=0 建立成功,但读取时永不回落——建索引静默成功、解析静默失效。按 p1「绝不容许代码以奇怪的方式成功运行」,这是必须杀掉的牛。

validate_dir / bad_dir_prefix 宣称 · 是合法目录分隔符(明确接受 · 结尾前缀),但 extindex 的建立与解析都不遵守。

根因(两后端各不相同,症状一致,均已逐行核对现状)

durable / fsresolve_parentkvspace-durable/src/fs/kvspace.rs:210-223):
is_dir_key/· 结尾都判 true,strip_dir_suf 剥掉尾分隔符,但 :219-221 无条件 result.push_str(DIR_INDEX_SUF)/ 补回——丢掉了「剥掉的是哪一种分隔符」。于是 ext_index("…/[3]·") 的 marker 写到 …/[3]/__extindex__,数据却落在 …/[3]·/。读路径去 [3]·/__extindex__ 扑空 → 无回落。(引入的 SepKind 只用于 split_index,未救此处。)

kvspace-c / shm — ext 回落走 psplitkvspace-c/src/kvspace.c:562-563kvspace.c:905 处调用),而 psplitstrrchr(k, '/')不认 · 边界…/[3]·[1,0] 被切成父目录 …/ + 成员名 [3]·[1,0],去查 …/ 的 extindex 扑空。同文件已有认 · 的 split(:995「取末段最后一个 ·」),但 ext 回落路径没用它。

次生问题· 目录下写坐标成员会触发 __map__ 标记(fs/kvspace.rs MAP_MARKER),把目录误标成 strkeymapindexparse_coord 拒绝负分量(如 [0,-1])后 grow_coord_dims 退化成「1 维、长度=成员数」,即该目录被错误标成 1 元素 ndarray。

修复方向(择一,当前静默成功是最坏选项)

  1. resolve_parent 记住剥掉的分隔符种类(补回 · 而非恒 /);kvspace-c ext 回落改用认 · 的 split(:995)而非 psplit
  2. 报错ext_index 入口对 · 结尾路径直接返回错误,明确「extindex 只支持 / 目录」。

· 目录坐标成员被误标 strkeymapindex / dims 退化是同一处的次生问题,随之处理。

关联:#116

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions