文档核心概念导入状态与待处理操作 (Import Status and Pending Operations)

Import 状态

快速概览

Import 状态 会告诉你哪些操作已应用,哪些因缺少依赖而暂挂。它是处理分布式系统乱序更新的关键工具。

状态结构

interface ImportStatus {
  : PeerVersionRange;  // 已成功应用的范围
  ?: PeerVersionRange; // 缺失依赖、暂未应用的范围
}
 
interface PeerVersionRange {
  [: `${number}`]: {
    : number; // 包含起点
    : number;   // 不包含终点(例如 0-50 表示 0-49)
  };
}

待处理的操作

当某个操作依赖的前置操作缺失(存在因果依赖)时,便会进入 pending 状态。

常见场景:乱序投递

const  = new ();
 
// Peer A 先产生操作 0-4,再产生 5-10
const  = new ();
.("text").(0, "Hello");
const  = .({ : "update" });
 
.("text").(5, " World");
const  = .({ : "update", : .() });
 
// 如果 update2 先到达:
const  = .();
.(.); // 操作 10-19 暂挂,需要 0-9
 
// 导入缺失依赖:
.(); // 两个更新都已生效

处理 Pending 操作

async function (
  : ,
  : ,
  : (: ) => <>
) {
  const  = .();
  
  if (.) {
    const  = await (.());
    .();
  }
}

最佳实践

始终检查状态

const  = new ();
const  = .();
if (.) {
  .("Operations pending:", .);
  // 获取缺失的更新
}

使用批量导入

const : [] = [
  // ...
];
const  = new ();
const  = .();
// 一次性检查所有更新的状态

相关文档