跳转至

Redis / ScyllaDB 存储一致性契约

依赖:message_commit.md、mailbox.md、shared.md。该文件只定义后端可替换性,不暴露任何存储布局或驱动配置。

pub trait MessageStoreBackend: MessageStore {
    fn backend(&self) -> StorageBackend;
}

pub trait MailboxStoreBackend: MailboxStore {
    fn backend(&self) -> StorageBackend;
}

pub trait StorageContractSuite: Send + Sync {
    async fn verify_message_store(
        &self,
        backend: StorageBackend,
    ) -> Result<(), StorageConformanceError>;

    async fn verify_mailbox_store(
        &self,
        backend: StorageBackend,
    ) -> Result<(), StorageConformanceError>;
}

前置条件

  • 每条存储线只可通过上述共同 trait 暴露能力;调用服务不得分支依赖后端专属 API。
  • 契约向量必须在本测试创建的隔离依赖上运行;依赖不可用是失败,不是跳过。

后置条件

  • Redis 和 ScyllaDB 对 reserve、提交恢复、历史分页、append_batch、范围扫描、裁剪与水位的可见语义及领域错误一致。
  • 两者都必须保持精确 MailboxSeq 比较、全局递增范围页、事件组不切分和重复同值覆盖;不得以浮点、无条件初始化或未发出序号制造可见空洞。
  • 后端差异只能体现在私有持久性策略;对业务服务与客户端均不可观察。

错误

  • StorageConformanceError::SemanticMismatch 阻断后端切换或分支发布。
  • IsolatedDependencyUnavailable 与 ContractVectorFailed 均为门禁失败,禁止标记通过。