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均为门禁失败,禁止标记通过。