mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Fix snapshot migrations
Summary: Migrations were failing in snapshots due to the sandbox no longer being started in snapshots. We now start up an instance of the sandbox whenever there are migrations to run, and immediately shut it down on completion. Test Plan: Server test. Reviewers: paulfitz Reviewed By: paulfitz Subscribers: dsagal Differential Revision: https://phab.getgrist.com/D3898
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import {ErrorOrValue, freezeError, mapGetOrSet, MapWithTTL} from 'app/common/AsyncCreate';
|
||||
import {ObjMetadata, ObjSnapshot, ObjSnapshotWithMetadata} from 'app/common/DocSnapshot';
|
||||
import {SCHEMA_VERSION} from 'app/common/schema';
|
||||
import {DocWorkerMap} from 'app/gen-server/lib/DocWorkerMap';
|
||||
import {HomeDBManager} from 'app/gen-server/lib/HomeDBManager';
|
||||
import {ActiveDoc} from 'app/server/lib/ActiveDoc';
|
||||
@@ -817,6 +818,31 @@ describe('HostedStorageManager', function() {
|
||||
await store.end();
|
||||
});
|
||||
|
||||
it('can access snapshots with old schema versions', async function() {
|
||||
const snapshotId = `World~v=1`;
|
||||
await workers.assignDocWorker(snapshotId);
|
||||
await store.begin();
|
||||
// Pretend we have a snapshot of World-v33.grist and fetch/load it.
|
||||
await useFixtureDoc('World-v33.grist', store.storageManager, `${snapshotId}.grist`);
|
||||
const doc = await store.docManager.fetchDoc(docSession, snapshotId);
|
||||
|
||||
// Check that the snapshot isn't broken.
|
||||
assert.doesNotThrow(async () => await doc.waitForInitialization());
|
||||
|
||||
// Check that the snapshot was migrated to the latest schema version.
|
||||
assert.equal(
|
||||
SCHEMA_VERSION,
|
||||
(await doc.docStorage.get("select schemaVersion from _grist_DocInfo where id = 1"))!.schemaVersion
|
||||
);
|
||||
|
||||
// Check that the document is actually a snapshot.
|
||||
await assert.isRejected(doc.replace(docSession, {sourceDocId: 'docId'}),
|
||||
/Snapshots cannot be replaced/);
|
||||
await assert.isRejected(doc.applyUserActions(docSession, [['AddTable', 'NewTable', [{id: 'A'}]]]),
|
||||
/pyCall is not available in snapshots/);
|
||||
await store.end();
|
||||
});
|
||||
|
||||
it('can prune snapshots', async function() {
|
||||
const versions = 8;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user