backup target: create snapshot and cache files per target

snapshot file tracks the snapshot directory. when app gets deleted,
the cleaner will remove the upstream snapshot directory when it runs.

cache files are used in rsync logic to track what was uploading into
snapshot in the previous run without needing to rescan upstream.
This commit is contained in:
Girish Ramakrishnan
2025-07-30 11:19:07 +02:00
parent b971f2ab22
commit ae3a34287a
9 changed files with 87 additions and 71 deletions
+4 -6
View File
@@ -198,7 +198,7 @@ async function uploadBoxSnapshot(backupTarget, progressCallback) {
debug(`uploadBoxSnapshot: took ${(new Date() - startTime)/1000} seconds`);
await backupTargets.setSnapshotInfo('box', { timestamp: new Date().toISOString(), format: backupTarget.format });
await backupTargets.setSnapshotInfo(backupTarget, 'box', { timestamp: new Date().toISOString() });
}
async function copy(backupTarget, srcRemotePath, destRemotePath, progressCallback) {
@@ -272,9 +272,7 @@ async function rotateAppBackup(backupTarget, app, tag, options, progressCallback
assert.strictEqual(typeof options, 'object');
assert.strictEqual(typeof progressCallback, 'function');
const snapshotInfo = backupTargets.getSnapshotInfo(app.id);
const manifest = snapshotInfo.restoreConfig ? snapshotInfo.restoreConfig.manifest : snapshotInfo.manifest; // compat
const manifest = app.manifest;
const remotePath = `${tag}/app_${app.fqdn}_v${manifest.version}`;
debug(`rotateAppBackup: rotating ${app.fqdn} to path ${remotePath}`);
@@ -362,7 +360,7 @@ async function uploadAppSnapshot(backupTarget, app, progressCallback) {
debug(`uploadAppSnapshot: ${app.fqdn} uploaded to ${remotePath}. ${(new Date() - startTime)/1000} seconds`);
await backupTargets.setSnapshotInfo(app.id, { timestamp: new Date().toISOString(), manifest: app.manifest, format: backupTarget.format });
await backupTargets.setSnapshotInfo(backupTarget, app.id, { timestamp: new Date().toISOString(), manifest: app.manifest });
}
async function backupAppWithTag(app, backupTarget, tag, options, progressCallback) {
@@ -404,7 +402,7 @@ async function uploadMailSnapshot(backupTarget, progressCallback) {
debug(`uploadMailSnapshot: took ${(new Date() - startTime)/1000} seconds`);
await backupTargets.setSnapshotInfo('mail', { timestamp: new Date().toISOString(), format: backupTarget.format });
await backupTargets.setSnapshotInfo(backupTarget, 'mail', { timestamp: new Date().toISOString() });
}
async function rotateMailBackup(backupTarget, tag, options, progressCallback) {