04 / resilience
断连,
不该等于失忆
连续一天连不上中心,本地节点就在暂存的数据上,一小批一小批地自己整理;满五天还没恢复,就先把自己当中心用。 中心回来以后,两边按固定顺序合回去:推上去 → 送回去 → 确认 → 拉快照,一步都不能跳。 只有最后一步成功、本地那份还在,才删掉暂存。
01
把网线拔掉试试
断开中心,然后推进时间。状态名、暂存行数和自备份计数都按真实状态机走; 数值仅作示范,不代表线上读数。
edge
recollect-node
连不上中心
primary
hub
0
小时连不上
正常同步
0h
24h · 断满一天
120h · 断满五天
第一步:先断开和中心的连接
node status
正常同步
self_distillfalse
pending_turns0
staging_rows0
dr_backup_count0
replica/只读 · 字节不动
auto_unlocktrue
00
正常同步 connected
正常同步;失败的同步不进暂存。
01 · 24h
本地整理中 offline_distilling
在本地暂存上小批小批地整理;只读副本一个字节不动。
02 · 120h
脱离中心,继续整理 detached_distilling
自备份成功后才进下一态;没确认的备份永远不删。
03
自己当中心 detached_promoted
自己当中心;等确认并回之后,才允许清理旧备份。
04
已并回 rejoined
四步全部走完,暂存才允许删。
02
并回去只有一种顺序
先把本机新写的行推上去(push),再把离线期间攒的行送回去(rows),中心确认之后才拉新快照(pull)。 前一步失败,后一步就不做,本地那份也不删;下一轮把同一批再送一次,中心认得出来,不会写重。 读会话也一样:中心不可达就回落本机,回执里标 source=local + degraded,不把本机结果冒充中心结果。
step 01
push
把本机新写的内容推给中心;失败就先停下。
step 02
rows
把离线期间攒的行送回去;中心答 200(成功)才进下一步。
step 03
确认
同一批送两次也只算一次,不会写重。
step 04
pull
拉回新快照;成功了、本地那份还在,才删暂存。
401 / 403 / 409
不是断网。401/403 是没资格或被拒,409 是两边版本对不上;当成断网会误触本地整理。
1 天 / 5 天
两个关口都按「连续连不上」累计,不是数失败了几次。
0 字节
断网期间只读副本不动;本地整理只写 pending.db 和 dr/。
03
备份只管一件事:追平
备份按复制序号一条条追。落后就追;缺条目就报「不可用 + 缺口」,不拿旧内容冒充。 追平并核对通过,才允许接班。
hub backup · 读数口径三件套
| 项目 | 值 | 说明 |
|---|---|---|
| hub backup | 原始对话 · 记忆 · 清单 | 三件一起写,保留最近 7 组;清单带版本和进度 |
| hub restore | 三步 | 不带 --confirm 只做检查;恢复时把抽取进度退回清单上的位置 |
| dr/ | 每小时 | 脱离中心(断满五天)之后才启动;当前副本 + 暂存 + 原始对话 + 状态 |
| 未确认的自备份 | 永不删除 | 并回原中心、确认之后,才允许清理 |
| 备份里的私钥 | 不含明文 | hub key export 单独加密归档;doctor 只报指纹 |