任务
依次核对校验和、字节数与对象数量,一次性列出全部不一致项,让恢复流程在开始之前就停下。
契约
- 输入:JSON 对象:{ backup: { checksum, sizeBytes, objectCount }, manifest: { checksum, sizeBytes, minimumObjects } }
- 输出:JSON 对象:{ verified: boolean, mismatches: string[] }
样例
- 输入
{"backup":{"checksum":"sha256:abc","sizeBytes":1024,"objectCount":40},"manifest":{"checksum":"sha256:abc","sizeBytes":1024,"minimumObjects":10}}-> 期望{"verified":true,"mismatches":[]}。校验和、体积与对象数都满足清单要求。 - 输入
{"backup":{"checksum":"sha256:def","sizeBytes":900,"objectCount":4},"manifest":{"checksum":"sha256:abc","sizeBytes":1024,"minimumObjects":10}}-> 期望{"verified":false,"mismatches":["checksum","object-count","size"]}。三项检查全部失败,并被一起按序报告。
参考实现
function solve({ backup, manifest }) {
const mismatches = [];
if (backup.checksum !== manifest.checksum) mismatches.push('checksum');
if (backup.sizeBytes !== manifest.sizeBytes) mismatches.push('size');
if (backup.objectCount < manifest.minimumObjects) mismatches.push('object-count');
return { verified: mismatches.length === 0, mismatches: mismatches.sort() };
}
为什么有效
恢复演练失败的根源,往往是没人验证过的产物。先校验清单,能把“赌一把能恢复”变成明确的前置条件。
要一次性报告所有失败项,而不是遇到第一个就停下;恢复团队需要完整的信息。