Skip to content

Proposal: establish a VectorSet lifecycle, replication, and compatibility gate #421

Description

@happy-v587

VectorSet lifecycle, replication, and compatibility gate

Primary Issue: #421

规划状态

这是一个 planning-only 提案,不解除当前 SDD 对 VectorSet 的 frozen 状态,也不授权直接修改生产源码。当前项目仍以 main@688d905fec31b54aec76f36676f55efd8b5cfa17 为实时基线;WP0 尚未完成 exact-main verification,VectorSet 仍是当前非目标。

背景与动机

PR #356 为 standalone Kiwi 增加了 VectorSet 命令,但最新评审暴露出跨层合同尚未闭合的问题。现有 Issue #418 只跟踪 VectorSet 的 known differences 与 Redis Oracle differential CI,不能作为完整 VectorSet 生命周期、迁移恢复、资源边界和集群门禁的 primary Issue。

本提案将这些问题收敛为一个独立的 VectorSet 工作包,避免以“补几条 review comment”的方式绕过 SDD 控制面。工作包只有在治理链、依赖工作包和全部验收证据完成后,才可以请求解除 VectorSet frozen 状态。

范围

  1. 治理链:建立 SDD 工作包、primary Issue、正式 REQ-VECTOR-* 需求、设计/实现计划、依赖关系和 exact-ref 验收证据;实现 PR 只能使用 Refs,全部 required acceptance 通过后才允许使用 Closes
  2. RocksDB 生命周期与迁移:定义 Vector CF、manifest、format version、generation、删除/过期/重建、compaction 和 snapshot/reopen 的一致合同;legacy → Head 升级必须有可恢复的迁移状态机。推荐采用 staged directory + 原子切换:先在独立目录完成 CF/manifest 迁移和校验,持久化切换标记,再切换目录并保留可验证的旧目录回滚点;任何中断都必须能明确继续、回滚或 fail closed。
  3. VSIM 一致性:ELE 查询向量读取与成员扫描必须属于同一个存储一致性视图。优先在 Storage 层合并为一次受控调用并持有同一 snapshot;若 API 生命周期不允许暴露 snapshot,则使用同一 key 的读锁覆盖准备和扫描,并由 VADD/VREM/DEL/重建使用写锁。不得用未经校验的 generation 作为唯一补丁。
  4. 资源 admission:在网络 runtime 将 argv 深拷贝到 storage runtime 之前,对所有消费 element/vector payload 的命令执行无分配 admission,统一覆盖 VADDVSIM key ELE memberVEMBVREMVISMEMBER,并验证超限请求不会进入 storage 执行入口。
  5. 兼容性与测试隔离:RESP2/RESP3 测试使用独立、明确协议的客户端;零向量分别覆盖 RESP2 array 和 RESP3 map;VectorSet manifest、raw differential、skip 记录和 trusted Oracle 路径必须闭合。Issue tracking: register vector-set known differences and trusted-oracle differential CI #418 作为 related/child 继续跟踪差异登记和 Oracle job。
  6. 安全与 CIrkyv advisory 豁免必须配套 feature-graph sentinel,rkyv@0.7.46 一旦进入实际 resolve/feature graph 即使 CI 失败;新增 required Linux cluster gate,显式安装 grpcurl、构建当前 binary、设置 KIWI_RUN_CLUSTER_TESTS=1,并将 zero collected/skipped 视为失败。该 gate 只证明 cluster fail-closed,不开启 Raft Vector mutation。

非目标

  • 不在本提案中实现源码、提交 PR、修改当前生产命令表或解除 cluster unsupported gate。
  • 不实现 Embedded Redis Hot Tier、HNSW/IVF、Q8/BIN、VEMB RAW、Multi-Raft、跨 Slot 原子性或 2PC。
  • 不将 Redis-derived 源码、动态 loader 或 redis-rs 引入生产 server 依赖。
  • 不把当前 PR feat: add Redis Vector Set support #356 的局部绿色测试当作生命周期、迁移回滚、Raft replay 或 M6 stability 证据。

提议的需求合同

以下编号在 SDD 控制面正式接纳前只是本工作包提议,不能被实现 PR 当作已授权需求:

  • REQ-VECTOR-001:VectorSet 的 persisted generation、DEL/VREM-last、TTL、同名重建、compaction 和 reopen 在所有 read/scan/recreate 路径上保持旧代不可见。
  • REQ-VECTOR-002:VectorSet 的逻辑 mutation、binlog、Raft apply、snapshot/replay 和 cluster fail-closed 合同必须可验证;VSIM 结果必须对应单一一致性视图。
  • REQ-VECTOR-003:VectorSet public behavior 以 Redis 8.8.1 exact commit 为 Oracle,RESP2/RESP3 raw frame、error precedence、known difference 和 skip 都有可复现证据。
  • REQ-VECTOR-004:Vector CF/manifest/schema migration 在创建 CF、写 manifest、切换目录和进程重启的每个故障窗口都能继续、回滚或 fail closed;旧 Base 对未完成迁移的行为有实测证明。
  • REQ-VECTOR-005:Vector payload 在跨 runtime copy 前完成 bounded admission,安全豁免随实际 feature graph 失效,cluster fail-closed contract 由 required CI 真实执行。

既有需求映射:REQ-COMPAT-001..007REQ-STORAGE-001..006REQ-RAFT-001/002/005/008REQ-STABILITY-002/003REQ-OBS-001/002REQ-WORK-005..007。正式接纳时必须把提议编号加入 .planning/REQUIREMENTS.md,并由 SDD validator 维护唯一注册和引用闭包。

依赖与关联

验收标准

  1. SDD 中存在唯一、可解析的 WP8 条目,状态为 proposed/frozen,且明确 primary Issue、正式 REQ、依赖、scope、non-goals、acceptance 和 verification;在批准前不改变 current work package。
  2. 设计审查给出 manifest/generation、同一 snapshot/锁、迁移切换、跨 runtime admission 和 cluster gate 的状态机与失败语义。
  3. 设计计划列出真实源码、测试、manifest、CI 和文档文件,并将每个 P1 review finding 映射到一个独立可验证任务。
  4. 实现阶段必须有真实 non-empty legacy Base → Head interruption after CF creation → Head retry → Base reopen/read 矩阵;不得只依赖删除 CF 的人工 fixture。
  5. 实现阶段必须有带确定性 barrier 的 VSIM 与 VADD/VREM/DEL+recreate 并发测试,并证明结果对应一个合法串行时刻。
  6. 实现阶段必须有 TCP/网络入口的超限 admission 测试、RESP2/RESP3 隔离测试、rkyv feature sentinel 和 required cluster gate;skip/zero collection 均失败。
  7. 解除 frozen 前,所有 required VectorSet compatibility、lifecycle、recovery、cluster 和 M6 相关 P0/P1 风险均有 exact-ref evidence,且不再存在未登记的 known difference 或静默 skip。

下一步

本提案的 primary Issue 已创建为 #421。下一步由维护者确认 WP8 是否接纳、正式需求编号是否写入 SDD 控制面、以及是否需要为 migration、admission/安全和 CI 基础设施拆分 child Issue。接纳前只维护规划材料,不在 PR #356 分支继续实现。

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