Filecoin 存储流程
S3 写入成功后,Filecoin 存储才开始。后台任务把每个对象作为副本存到存储桶的各个存储提供方,每个存储提供方一个副本。
存储桶准备
创建存储桶时,SynapS3 为每个副本分配一个存储提供方,并在每个存储提供方上创建一个付费数据集。所有数据集就绪前,存储桶显示 Provisioning,之后显示 Ready。向未就绪的存储桶上传会返回 503 SlowDown。准备停止时,存储桶会显示原因,并链接到可重试的任务。存储提供方如何选择,见存储提供方选择。
对象状态
| 状态 | 仪表盘显示 | 含义 |
|---|---|---|
cached | Stored in cache | 已保存在本地,等待上传。 |
uploading | Uploading | 正在上传到存储提供方。 |
committing | Submitting to Filecoin | 存储提供方已收到数据,所在批次等待提交或链上确认。 |
replicating | Syncing replicas | 至少有一个副本已提交,但少于存储桶的最小持久副本数。 |
stored | Stored on Filecoin | 已提交且可读的副本达到最小持久副本数。其余副本可能仍在同步。 |
failed | Needs attention | 某个存储步骤失败。见失败任务。 |
状态不表示对象是否仍在本地缓存中;stored 的对象可能仍在缓存中,也可能只在 Filecoin 上。
上传与复制
- SynapS3 把对象从本地缓存上传到存储桶的一个存储提供方:优先选有效测速最快的;都没有有效测速时,选副本顺序中的第一个。初始上传在任何副本提交前失败时,按同样的顺序由下一个已分配的存储提供方接替上传。
- 该副本以批次方式加入存储提供方在链上的数据集。见批次。
- 存储桶的其他存储提供方从已提交的副本复制对象,并以同样方式提交各自的副本。
已分配的存储提供方在其副本存储完成前变得不可达时,其他副本照常进行。未完成的副本会等待,不消耗重试次数,存储提供方恢复可达后自动继续。SynapS3 不会自行替换副本已分配的存储提供方,见替换存储提供方。
未完成的任务在重启后继续。重试次数用完的任务进入 failed;排除原因后再重试。见失败任务。
目标副本数与最小持久副本数
每个存储桶有两个副本设置。在创建存储桶时设置,或之后在存储桶的 Settings 标签页 Replica policy 中修改。
| 设置 | API 字段 | 含义 |
|---|---|---|
| Replicas | default_copies | 目标副本数,1 到 8。新存储桶取 filecoin.default_copies。 |
| Release cache after | minimum_durable_copies | 最小持久副本数:版本进入 stored、缓存可以释放前,需要多少个已提交且可读的副本。新存储桶取完整的目标副本数。 |
- 每次上传沿用开始时的目标副本数。修改 Replicas 只影响新上传。
- Replicas 只能调高。调高时会为新增的副本创建数据集。
- 显式设置的 Release cache after 在 Replicas 调高后保持不变,且不会超过单次上传的目标副本数。
- 调低 Release cache after 会让已缓存的版本更早释放,其余副本继续同步。调高它不会让
stored版本回退,也无法恢复已经删除的缓存。
在一个版本的所有目标副本完成前,仪表盘会持续显示副本同步进度。
存储提供方健康状态
SynapS3 每隔 filecoin.observability.interval 检查一次存储提供方和自己的数据集。仪表盘会标出存储提供方或数据集未通过检查的副本。Storage 页面的存储提供方详情会显示上次检查失败的原因。
替换存储提供方
存储提供方永久不可用,或者你想把副本迁离它时,替换该存储提供方。替换会创建新的付费数据集,并改变数据的存放位置,因此 SynapS3 只在你发起时执行。
- 打开存储桶,进入 Storage 标签页,在 Data sets 中打开该副本的菜单。
- 点击 Replace provider。
- 在 New provider 中选择 Choose automatically 或 Choose a provider,查看价格表后确认。
一次确认覆盖整个迁移:SynapS3 创建新数据集,就绪后把新上传发往它,从其他副本或本地缓存复制该存储桶已存储的数据,最后终止旧数据集。在每个保留的版本都能从新存储提供方读取之前,数据仍可从旧存储提供方读取。
副本的数据集已就绪,或者其数据集创建任务已失败时,可以替换该副本。创建任务仍在等待或运行时(例如存储提供方不可达),不能替换。
Storage 标签页显示每个替换的进度,以及它在等待什么:新数据集、新存储提供方、钱包资金或可读的来源。多数等待会自行恢复。重试后仍无法复制的内容(例如既没有可读副本、也没有本地副本的内容)会被搁置,其余内容继续迁移。之后替换会在终止旧数据集前停止;排除原因后,在 Storage 标签页点击 Retry。如果终止旧数据集需要先结清付款,结清后点击 Retry。如果旧存储提供方一直没有执行发给它的终止,替换会在重试用尽后停止。此时点击 Retry 会改由你的钱包终止该数据集:交易费由你支付,旧数据集的付款也会持续到服务结束 epoch,而不是立即结束。如果存储提供方之后也执行了它的终止,两笔交易中会有一笔在链上失败,其交易费照样扣除。
计划支持的副本修复
副本修复计划在后续版本提供。存储提供方变为不可用后,该功能将:
- 识别受该故障影响的已存储副本;
- 创建替代副本,直到重新达到存储桶的目标副本数;
- 显示修复进度,以及需要运维人员处理的失败。
副本修复不同于补齐上传的首批副本,也不同于重试失败任务。