From d9cb45f466f3a002e882eb225fd6d7b7b767d1b2 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 28 Aug 2023 15:38:40 -0500 Subject: [PATCH] fix(electron): upgrade db file (#3984) --- README.md | 6 +- apps/electron/src/helper/db/migration.ts | 72 +++++++++++++++++- apps/electron/src/helper/dialog/dialog.ts | 21 ++++- packages/infra/src/blocksuite/index.ts | 9 ++- packages/native/__tests__/db.spec.mts | 15 ++++ .../native/__tests__/fixtures/test01.affine | Bin 0 -> 225280 bytes packages/native/index.d.ts | 7 +- packages/native/schema/src/lib.rs | 7 +- packages/native/src/sqlite/mod.rs | 51 +++++++++++++ 9 files changed, 177 insertions(+), 11 deletions(-) create mode 100644 packages/native/__tests__/db.spec.mts create mode 100644 packages/native/__tests__/fixtures/test01.affine diff --git a/README.md b/README.md index 66295a9a56..46abe29db3 100644 --- a/README.md +++ b/README.md @@ -172,9 +172,9 @@ If you encounter any problems when upgrading the version, please feel free to [c | AFFiNE Version | Export/Import workspace | Data auto migration | | -------------- | ----------------------- | ------------------- | | <= 0.5.4 | ❌️ | ❌ | -| ^0.6.0 | ⚠️ | ✅ | -| ^0.7.0 | ⚠️ | ✅ | -| ^0.8.0 | ✅ | ✅ | +| 0.6.x | ✅️ | ✅ | +| 0.7.x | ✅️ | ✅ | +| 0.8.x | ✅ | ✅ | ## Self-Host diff --git a/apps/electron/src/helper/db/migration.ts b/apps/electron/src/helper/db/migration.ts index 2323130d53..add0b85d74 100644 --- a/apps/electron/src/helper/db/migration.ts +++ b/apps/electron/src/helper/db/migration.ts @@ -1,7 +1,11 @@ +import { equal } from 'node:assert'; import { resolve } from 'node:path'; import { SqliteConnection } from '@affine/native'; -import { migrateToSubdoc } from '@toeverything/infra/blocksuite'; +import { + migrateToSubdoc, + WorkspaceVersion, +} from '@toeverything/infra/blocksuite'; import fs from 'fs-extra'; import { nanoid } from 'nanoid'; import { applyUpdate, Doc as YDoc, encodeStateAsUpdate } from 'yjs'; @@ -30,6 +34,72 @@ export const migrateToSubdocAndReplaceDatabase = async (path: string) => { await db.close(); }; +import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models'; +import { Schema, Workspace } from '@blocksuite/store'; +import { migrateWorkspace } from '@toeverything/infra/blocksuite'; + +// v1 v2 -> v3 +export const migrateToLatestDatabase = async (path: string) => { + const connection = new SqliteConnection(path); + await connection.connect(); + await connection.initVersion(); + const schema = new Schema(); + schema.register(AffineSchemas).register(__unstableSchemas); + const rootDoc = new YDoc(); + const downloadBinary = async (doc: YDoc, isRoot: boolean): Promise => { + const update = ( + await connection.getUpdates(isRoot ? undefined : doc.guid) + ).map(update => update.data); + // Buffer[] -> Uint8Array + const data = new Uint8Array(Buffer.concat(update).buffer); + applyUpdate(doc, data); + // trigger data manually + if (isRoot) { + doc.getMap('meta'); + doc.getMap('spaces'); + } else { + doc.getMap('blocks'); + } + await Promise.all( + [...doc.subdocs].map(subdoc => { + return downloadBinary(subdoc, false); + }) + ); + }; + await downloadBinary(rootDoc, true); + const result = await migrateWorkspace(WorkspaceVersion.SubDoc, { + getSchema: () => schema, + getCurrentRootDoc: () => Promise.resolve(rootDoc), + createWorkspace: () => + Promise.resolve( + new Workspace({ + id: nanoid(10), + schema, + blobStorages: [], + providerCreators: [], + }) + ), + }); + equal( + typeof result, + 'boolean', + 'migrateWorkspace should return boolean value' + ); + const uploadBinary = async (doc: YDoc, isRoot: boolean) => { + await connection.replaceUpdates(doc.guid, [ + { docId: isRoot ? undefined : doc.guid, data: encodeStateAsUpdate(doc) }, + ]); + // connection..applyUpdate(encodeStateAsUpdate(doc), 'self', doc.guid) + await Promise.all( + [...doc.subdocs].map(subdoc => { + return uploadBinary(subdoc, false); + }) + ); + }; + await uploadBinary(rootDoc, true); + await connection.close(); +}; + export const copyToTemp = async (path: string) => { const tmpDirPath = resolve(await mainRPC.getPath('sessionData'), 'tmp'); const tmpFilePath = resolve(tmpDirPath, nanoid()); diff --git a/apps/electron/src/helper/dialog/dialog.ts b/apps/electron/src/helper/dialog/dialog.ts index a304a4c1d0..85ba3ecc9a 100644 --- a/apps/electron/src/helper/dialog/dialog.ts +++ b/apps/electron/src/helper/dialog/dialog.ts @@ -12,7 +12,11 @@ import fs from 'fs-extra'; import { nanoid } from 'nanoid'; import { ensureSQLiteDB } from '../db/ensure-db'; -import { copyToTemp, migrateToSubdocAndReplaceDatabase } from '../db/migration'; +import { + copyToTemp, + migrateToLatestDatabase, + migrateToSubdocAndReplaceDatabase, +} from '../db/migration'; import type { WorkspaceSQLiteDB } from '../db/workspace-db-adapter'; import { logger } from '../logger'; import { mainRPC } from '../main-rpc'; @@ -197,7 +201,22 @@ export async function loadDBFile(): Promise { } } + if (validationResult === ValidationResult.MissingVersionColumn) { + try { + const tmpDBPath = await copyToTemp(originalPath); + await migrateToLatestDatabase(tmpDBPath); + originalPath = tmpDBPath; + } catch (error) { + logger.warn( + `loadDBFile, migration version column failed: ${originalPath}`, + error + ); + return { error: 'DB_FILE_MIGRATION_FAILED' }; + } + } + if ( + validationResult !== ValidationResult.MissingVersionColumn && validationResult !== ValidationResult.MissingDocIdColumn && validationResult !== ValidationResult.Valid ) { diff --git a/packages/infra/src/blocksuite/index.ts b/packages/infra/src/blocksuite/index.ts index 0eedc14e67..f422f207a6 100644 --- a/packages/infra/src/blocksuite/index.ts +++ b/packages/infra/src/blocksuite/index.ts @@ -490,9 +490,14 @@ const upgradeV1ToV2 = async (options: UpgradeOptions) => { return newWorkspace; }; -const upgradeV2ToV3 = async (options: UpgradeOptions): Promise => { +const upgradeV2ToV3 = async (options: UpgradeOptions): Promise => { const rootDoc = await options.getCurrentRootDoc(); const spaces = rootDoc.getMap('spaces') as YMap; + const meta = rootDoc.getMap('meta') as YMap; + const versions = meta.get('blockVersions') as YMap; + if (versions.get('affine:database') === 3) { + return false; + } const schema = options.getSchema(); spaces.forEach(space => { schema.upgradePage( @@ -511,8 +516,6 @@ const upgradeV2ToV3 = async (options: UpgradeOptions): Promise => { space ); }); - const meta = rootDoc.getMap('meta') as YMap; - const versions = meta.get('blockVersions') as YMap; versions.set('affine:database', 3); return true; }; diff --git a/packages/native/__tests__/db.spec.mts b/packages/native/__tests__/db.spec.mts new file mode 100644 index 0000000000..d98889094d --- /dev/null +++ b/packages/native/__tests__/db.spec.mts @@ -0,0 +1,15 @@ +import assert from 'node:assert'; +import { test } from 'node:test'; +import { fileURLToPath } from 'node:url'; + +import { SqliteConnection, ValidationResult } from '../index'; + +test('db', { concurrency: false }, async t => { + await t.test('validate', async () => { + const path = fileURLToPath( + new URL('./fixtures/test01.affine', import.meta.url) + ); + const result = await SqliteConnection.validate(path); + assert.equal(result, ValidationResult.MissingVersionColumn); + }); +}); diff --git a/packages/native/__tests__/fixtures/test01.affine b/packages/native/__tests__/fixtures/test01.affine new file mode 100644 index 0000000000000000000000000000000000000000..f939ee1453767c13b864f9df68670b21d0013c15 GIT binary patch literal 225280 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%0Dc#e5YhtoUk1oagMc=WrrZ9mX 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

-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 z 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 ): Promise; + initVersion(): Promise; + setVersion(version: number): Promise; close(): Promise; get isClose(): boolean; static validate(path: string): Promise; diff --git a/packages/native/schema/src/lib.rs b/packages/native/schema/src/lib.rs index 231ad19dcb..b5709a15d9 100644 --- a/packages/native/schema/src/lib.rs +++ b/packages/native/schema/src/lib.rs @@ -11,4 +11,9 @@ CREATE TABLE IF NOT EXISTS "blobs" ( key TEXT PRIMARY KEY NOT NULL, data BLOB NOT NULL, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL -);"#; +); +CREATE TABLE IF NOT EXISTS "version_info" ( + version NUMBER NOT NULL, + timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL +) +"#; diff --git a/packages/native/src/sqlite/mod.rs b/packages/native/src/sqlite/mod.rs index d82243d01d..bb5b6b1027 100644 --- a/packages/native/src/sqlite/mod.rs +++ b/packages/native/src/sqlite/mod.rs @@ -7,6 +7,9 @@ use sqlx::{ Pool, Row, }; +// latest version +const LATEST_VERSION: i32 = 3; + #[napi(object)] pub struct BlobRow { pub key: String, @@ -38,6 +41,7 @@ pub struct SqliteConnection { pub enum ValidationResult { MissingTables, MissingDocIdColumn, + MissingVersionColumn, GeneralError, Valid, } @@ -228,6 +232,39 @@ impl SqliteConnection { Ok(()) } + #[napi] + pub async fn init_version(&self) -> napi::Result<()> { + // create version_info table + sqlx::query!( + "CREATE TABLE IF NOT EXISTS version_info ( + version NUMBER NOT NULL, + timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL + )" + ) + .execute(&self.pool) + .await + .map_err(anyhow::Error::from)?; + // `3` is the first version that has version_info table, + // do not modify the version number. + sqlx::query!("INSERT INTO version_info (version) VALUES (3)") + .execute(&self.pool) + .await + .map_err(anyhow::Error::from)?; + Ok(()) + } + + #[napi] + pub async fn set_version(&self, version: i32) -> napi::Result<()> { + if version > LATEST_VERSION { + return Err(anyhow::Error::msg("Version is too new").into()); + } + sqlx::query!("UPDATE version_info SET version = ?", version) + .execute(&self.pool) + .await + .map_err(anyhow::Error::from)?; + Ok(()) + } + #[napi] pub async fn close(&self) { self.pool.close().await; @@ -261,6 +298,18 @@ impl SqliteConnection { Err(_) => return ValidationResult::GeneralError, }; + let tables_res = sqlx::query("SELECT name FROM sqlite_master WHERE type='table'") + .fetch_all(&pool) + .await; + + let version_exist = match tables_res { + Ok(res) => { + let names: Vec = res.iter().map(|row| row.get(0)).collect(); + names.contains(&"version_info".to_string()) + } + Err(_) => return ValidationResult::GeneralError, + }; + let columns_res = sqlx::query("PRAGMA table_info(updates)") .fetch_all(&pool) .await; @@ -277,6 +326,8 @@ impl SqliteConnection { ValidationResult::MissingTables } else if !doc_id_exist { ValidationResult::MissingDocIdColumn + } else if !version_exist { + ValidationResult::MissingVersionColumn } else { ValidationResult::Valid }