backuptask: save backupinfo in one place

This commit is contained in:
Girish Ramakrishnan
2025-08-15 14:33:31 +05:30
parent fd2705a49d
commit e7fb444bb3
3 changed files with 22 additions and 26 deletions

View File

@@ -13,7 +13,6 @@ const assert = require('node:assert'),
async = require('async'),
backupTargets = require('../backuptargets.js'),
BoxError = require('../boxerror.js'),
crypto = require('node:crypto'),
DataLayout = require('../datalayout.js'),
{ DecryptStream } = require('../hush.js'),
debug = require('debug')('box:backupformat/rsync'),
@@ -25,7 +24,6 @@ const assert = require('node:assert'),
paths = require('../paths.js'),
ProgressStream = require('../progress-stream.js'),
promiseRetry = require('../promise-retry.js'),
{ Readable } = require('node:stream'),
safe = require('safetydance'),
shell = require('../shell.js')('backupformat/rsync'),
stream = require('stream/promises'),
@@ -129,7 +127,7 @@ async function sync(backupTarget, remotePath, dataLayout, progressCallback) {
return {
stats: { ...aggregatedStats, totalMsecs: Date.now()-aggregatedStats.startTime },
integrity: [...integrityMap.entries()].sort(([a], [b]) => a < b) // for readability, order the entries
integrityMap
};
}
@@ -289,15 +287,7 @@ async function upload(backupTarget, remotePath, dataLayout, progressCallback) {
assert.strictEqual(typeof progressCallback, 'function');
await saveFsMetadata(dataLayout, `${dataLayout.localRoot()}/fsmetadata.json`);
const { stats, integrity } = await sync(backupTarget, remotePath, dataLayout, progressCallback);
const integrityDataJsonString = JSON.stringify(Object.fromEntries(integrity), null, 2);
const integrityDataStream = Readable.from(integrityDataJsonString);
const integrityUploader = await backupTargets.storageApi(backupTarget).upload(backupTarget.config, `${remotePath}.backupinfo`);
await stream.pipeline(integrityDataStream, integrityUploader.stream);
await integrityUploader.finish();
const signature = await crypto.sign(null /* algorithm */, integrityDataJsonString, backupTarget.integrityKeyPair.privateKey);
return { stats, integrity: { signature } };
return await sync(backupTarget, remotePath, dataLayout, progressCallback); // { stats, integrityMap }
}
function getFileExtension(encryption) {