mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
(core) make sure forks with no changes are persisted
Summary: This fixes a problem where a fork could be created, have no changes made, and then (e.g. if worker rolled over) fail to open with a `cannot create fork` error. Adds a test that fails priot to this diff. Test Plan: added test Reviewers: georgegevoian Reviewed By: georgegevoian Differential Revision: https://phab.getgrist.com/D3162
This commit is contained in:
parent
1425461cd8
commit
a94905dd0a
@ -240,9 +240,12 @@ export class ChecksummedExternalStorage implements ExternalStorage {
|
|||||||
// exist in this case, and this should fail if it does.
|
// exist in this case, and this should fail if it does.
|
||||||
await fse.move(tmpPath, fname, {overwrite: false});
|
await fse.move(tmpPath, fname, {overwrite: false});
|
||||||
if (fromKey === toKey) {
|
if (fromKey === toKey) {
|
||||||
|
// Save last S3 snapshot id observed for this key.
|
||||||
await this._options.latestVersion.save(toKey, downloadedSnapshotId);
|
await this._options.latestVersion.save(toKey, downloadedSnapshotId);
|
||||||
|
// Save last S3 hash observed for this key (so if we have a version with that hash
|
||||||
|
// locally we can skip pushing it back needlessly later).
|
||||||
|
await this._options.localHash.save(toKey, checksum);
|
||||||
}
|
}
|
||||||
await this._options.localHash.save(toKey, checksum);
|
|
||||||
|
|
||||||
log.info("ext %s download: %s%s%s with checksum %s and version %s", this.label, fromKey,
|
log.info("ext %s download: %s%s%s with checksum %s and version %s", this.label, fromKey,
|
||||||
snapshotId ? ` [VersionId ${snapshotId}]` : '',
|
snapshotId ? ` [VersionId ${snapshotId}]` : '',
|
||||||
|
@ -252,6 +252,9 @@ export class HostedStorageManager implements IDocStorageManager {
|
|||||||
*/
|
*/
|
||||||
public async prepareFork(srcDocName: string, destDocName: string): Promise<string> {
|
public async prepareFork(srcDocName: string, destDocName: string): Promise<string> {
|
||||||
await this.prepareLocalDoc(destDocName, srcDocName);
|
await this.prepareLocalDoc(destDocName, srcDocName);
|
||||||
|
this.markAsChanged(destDocName); // Make sure fork is actually stored in S3, even
|
||||||
|
// if no changes are made, since we'd refuse to
|
||||||
|
// create it later.
|
||||||
return this.getPath(destDocName);
|
return this.getPath(destDocName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user