From 0ce43ca5fa5b5f53f81b94680a2d5815b87828f0 Mon Sep 17 00:00:00 2001 From: "Nathan.fooo" <86001920+appflowy@users.noreply.github.com> Date: Wed, 21 Aug 2024 14:04:53 +0800 Subject: [PATCH] chore: write collab to disk if it's not exist (#6023) * chore: write collab to disk if it's not exist * chore: write collab if it's not exit * chore: fix test --- frontend/appflowy_tauri/src-tauri/Cargo.lock | 15 ++-- frontend/appflowy_tauri/src-tauri/Cargo.toml | 14 ++-- .../appflowy_web_app/src-tauri/Cargo.lock | 15 ++-- .../appflowy_web_app/src-tauri/Cargo.toml | 14 ++-- frontend/rust-lib/Cargo.lock | 15 ++-- frontend/rust-lib/Cargo.toml | 14 ++-- .../collab-integrate/src/collab_builder.rs | 82 ++++++++++++++++++- .../tests/user/migration_test/version_test.rs | 3 + .../rust-lib/flowy-database2/src/manager.rs | 14 ++-- .../rust-lib/flowy-document/src/manager.rs | 2 +- frontend/rust-lib/flowy-server/Cargo.toml | 1 + .../src/local_server/impls/database.rs | 34 +------- .../src/migrations/document_empty_content.rs | 7 +- .../migrations/workspace_and_favorite_v1.rs | 6 +- .../src/migrations/workspace_trash_v1.rs | 6 +- 15 files changed, 151 insertions(+), 91 deletions(-) diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.lock b/frontend/appflowy_tauri/src-tauri/Cargo.lock index 695b36fe1e..99f7541e17 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.lock +++ b/frontend/appflowy_tauri/src-tauri/Cargo.lock @@ -963,7 +963,7 @@ dependencies = [ [[package]] name = "collab" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "arc-swap", @@ -988,7 +988,7 @@ dependencies = [ [[package]] name = "collab-database" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "async-trait", @@ -1018,7 +1018,7 @@ dependencies = [ [[package]] name = "collab-document" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "arc-swap", @@ -1038,7 +1038,7 @@ dependencies = [ [[package]] name = "collab-entity" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "bytes", @@ -1057,7 +1057,7 @@ dependencies = [ [[package]] name = "collab-folder" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "arc-swap", @@ -1100,7 +1100,7 @@ dependencies = [ [[package]] name = "collab-plugins" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "async-stream", @@ -1180,7 +1180,7 @@ dependencies = [ [[package]] name = "collab-user" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "collab", @@ -2429,6 +2429,7 @@ dependencies = [ "chrono", "client-api", "collab", + "collab-database", "collab-document", "collab-entity", "collab-folder", diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.toml b/frontend/appflowy_tauri/src-tauri/Cargo.toml index 2aac8f12c9..23e30f4bfd 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.toml +++ b/frontend/appflowy_tauri/src-tauri/Cargo.toml @@ -116,13 +116,13 @@ custom-protocol = ["tauri/custom-protocol"] # To switch to the local path, run: # scripts/tool/update_collab_source.sh # ⚠️⚠️⚠️️ -collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } +collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } # Working directory: frontend # To update the commit ID, run: diff --git a/frontend/appflowy_web_app/src-tauri/Cargo.lock b/frontend/appflowy_web_app/src-tauri/Cargo.lock index 3c6481f07e..56ffd76575 100644 --- a/frontend/appflowy_web_app/src-tauri/Cargo.lock +++ b/frontend/appflowy_web_app/src-tauri/Cargo.lock @@ -946,7 +946,7 @@ dependencies = [ [[package]] name = "collab" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "arc-swap", @@ -971,7 +971,7 @@ dependencies = [ [[package]] name = "collab-database" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "async-trait", @@ -1001,7 +1001,7 @@ dependencies = [ [[package]] name = "collab-document" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "arc-swap", @@ -1021,7 +1021,7 @@ dependencies = [ [[package]] name = "collab-entity" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "bytes", @@ -1040,7 +1040,7 @@ dependencies = [ [[package]] name = "collab-folder" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "arc-swap", @@ -1083,7 +1083,7 @@ dependencies = [ [[package]] name = "collab-plugins" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "async-stream", @@ -1163,7 +1163,7 @@ dependencies = [ [[package]] name = "collab-user" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "collab", @@ -2459,6 +2459,7 @@ dependencies = [ "chrono", "client-api", "collab", + "collab-database", "collab-document", "collab-entity", "collab-folder", diff --git a/frontend/appflowy_web_app/src-tauri/Cargo.toml b/frontend/appflowy_web_app/src-tauri/Cargo.toml index 05e3b89617..10142f4acc 100644 --- a/frontend/appflowy_web_app/src-tauri/Cargo.toml +++ b/frontend/appflowy_web_app/src-tauri/Cargo.toml @@ -116,13 +116,13 @@ custom-protocol = ["tauri/custom-protocol"] # To switch to the local path, run: # scripts/tool/update_collab_source.sh # ⚠️⚠️⚠️️ -collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } +collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } # Working directory: frontend # To update the commit ID, run: diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock index 3831b53f05..01f2ca464a 100644 --- a/frontend/rust-lib/Cargo.lock +++ b/frontend/rust-lib/Cargo.lock @@ -824,7 +824,7 @@ dependencies = [ [[package]] name = "collab" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "arc-swap", @@ -849,7 +849,7 @@ dependencies = [ [[package]] name = "collab-database" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "async-trait", @@ -879,7 +879,7 @@ dependencies = [ [[package]] name = "collab-document" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "arc-swap", @@ -899,7 +899,7 @@ dependencies = [ [[package]] name = "collab-entity" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "bytes", @@ -918,7 +918,7 @@ dependencies = [ [[package]] name = "collab-folder" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "arc-swap", @@ -961,7 +961,7 @@ dependencies = [ [[package]] name = "collab-plugins" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "async-stream", @@ -1041,7 +1041,7 @@ dependencies = [ [[package]] name = "collab-user" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2cc23e05010a7ed72e5c63c59dfa3db7d789620c#2cc23e05010a7ed72e5c63c59dfa3db7d789620c" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=6a5e7e49c159fcf782df84208cdb26c212c28ede#6a5e7e49c159fcf782df84208cdb26c212c28ede" dependencies = [ "anyhow", "collab", @@ -2260,6 +2260,7 @@ dependencies = [ "chrono", "client-api", "collab", + "collab-database", "collab-document", "collab-entity", "collab-folder", diff --git a/frontend/rust-lib/Cargo.toml b/frontend/rust-lib/Cargo.toml index f6c2073a83..cb09e65d6b 100644 --- a/frontend/rust-lib/Cargo.toml +++ b/frontend/rust-lib/Cargo.toml @@ -136,13 +136,13 @@ rocksdb = { git = "https://github.com/rust-rocksdb/rust-rocksdb", rev = "1710120 # To switch to the local path, run: # scripts/tool/update_collab_source.sh # ⚠️⚠️⚠️️ -collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } -collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2cc23e05010a7ed72e5c63c59dfa3db7d789620c" } +collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } +collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "6a5e7e49c159fcf782df84208cdb26c212c28ede" } # Working directory: frontend # To update the commit ID, run: diff --git a/frontend/rust-lib/collab-integrate/src/collab_builder.rs b/frontend/rust-lib/collab-integrate/src/collab_builder.rs index f539cca182..9800e1a130 100644 --- a/frontend/rust-lib/collab-integrate/src/collab_builder.rs +++ b/frontend/rust-lib/collab-integrate/src/collab_builder.rs @@ -15,6 +15,7 @@ use collab_entity::{CollabObject, CollabType}; use collab_folder::{Folder, FolderData, FolderNotify}; use collab_plugins::connect_state::{CollabConnectReachability, CollabConnectState}; use collab_plugins::local_storage::kv::snapshot::SnapshotPersistence; + if_native! { use collab_plugins::local_storage::rocksdb::rocksdb_plugin::{RocksdbBackup, RocksdbDiskPlugin}; } @@ -155,9 +156,19 @@ impl AppFlowyCollabBuilder { builder_config: CollabBuilderConfig, data: Option, ) -> Result>, Error> { - assert_eq!(object.collab_type, CollabType::Document); + let expected_collab_type = CollabType::Document; + assert_eq!(object.collab_type, expected_collab_type); let collab = self.build_collab(&object, &collab_db, data_source)?; let document = Document::open_with(collab, data)?; + + self.flush_collab_if_not_exist( + object.uid, + &object.object_id, + collab_db.clone(), + &expected_collab_type, + &document, + )?; + let document = Arc::new(RwLock::new(document)); self.finalize(object, builder_config, document) } @@ -176,9 +187,19 @@ impl AppFlowyCollabBuilder { folder_notifier: Option, folder_data: Option, ) -> Result>, Error> { - assert_eq!(object.collab_type, CollabType::Folder); + let expected_collab_type = CollabType::Folder; + assert_eq!(object.collab_type, expected_collab_type); let collab = self.build_collab(&object, &collab_db, doc_state)?; let folder = Folder::open_with(object.uid, collab, folder_notifier, folder_data); + + self.flush_collab_if_not_exist( + object.uid, + &object.object_id, + collab_db.clone(), + &expected_collab_type, + &folder, + )?; + let folder = Arc::new(RwLock::new(folder)); self.finalize(object, builder_config, folder) } @@ -196,9 +217,19 @@ impl AppFlowyCollabBuilder { builder_config: CollabBuilderConfig, notifier: Option, ) -> Result>, Error> { - assert_eq!(object.collab_type, CollabType::UserAwareness); + let expected_collab_type = CollabType::UserAwareness; + assert_eq!(object.collab_type, expected_collab_type); let collab = self.build_collab(&object, &collab_db, doc_state)?; let user_awareness = UserAwareness::open(collab, notifier); + + self.flush_collab_if_not_exist( + object.uid, + &object.object_id, + collab_db.clone(), + &expected_collab_type, + &user_awareness, + )?; + let user_awareness = Arc::new(RwLock::new(user_awareness)); self.finalize(object, builder_config, user_awareness) } @@ -216,9 +247,19 @@ impl AppFlowyCollabBuilder { builder_config: CollabBuilderConfig, collab_service: impl DatabaseCollabService, ) -> Result>, Error> { - assert_eq!(object.collab_type, CollabType::WorkspaceDatabase); + let expected_collab_type = CollabType::WorkspaceDatabase; + assert_eq!(object.collab_type, expected_collab_type); let collab = self.build_collab(&object, &collab_db, doc_state)?; let workspace = WorkspaceDatabase::open(object.uid, collab, collab_db.clone(), collab_service); + + self.flush_collab_if_not_exist( + object.uid, + &object.object_id, + collab_db.clone(), + &expected_collab_type, + &workspace, + )?; + let workspace = Arc::new(RwLock::new(workspace)); self.finalize(object, builder_config, workspace) } @@ -290,6 +331,39 @@ impl AppFlowyCollabBuilder { drop(write_collab); Ok(collab) } + + /// Remove all updates in disk and write the final state vector to disk. + pub fn flush_collab_if_not_exist( + &self, + uid: i64, + object_id: &str, + collab_db: Weak, + collab_type: &CollabType, + collab: &T, + ) -> Result<(), Error> + where + T: BorrowMut + Send + Sync + 'static, + { + if let Some(collab_db) = collab_db.upgrade() { + let write_txn = collab_db.write_txn(); + let is_not_exist_on_disk = !write_txn.is_exist(uid, object_id); + if is_not_exist_on_disk { + trace!("flush collab:{}-{} to disk", collab_type, object_id); + let collab: &Collab = collab.borrow(); + let encode_collab = + collab.encode_collab_v1(|collab| collab_type.validate_require_data(collab))?; + + write_txn.flush_doc( + uid, + object_id, + encode_collab.state_vector.to_vec(), + encode_collab.doc_state.to_vec(), + )?; + } + } + + Ok(()) + } } pub struct CollabBuilderConfig { diff --git a/frontend/rust-lib/event-integration-test/tests/user/migration_test/version_test.rs b/frontend/rust-lib/event-integration-test/tests/user/migration_test/version_test.rs index 3e925ba0ec..5edbb64caf 100644 --- a/frontend/rust-lib/event-integration-test/tests/user/migration_test/version_test.rs +++ b/frontend/rust-lib/event-integration-test/tests/user/migration_test/version_test.rs @@ -135,6 +135,9 @@ async fn collab_db_backup_test() { EventIntegrationTest::new_with_user_data_path(user_db_path, DEFAULT_NAME.to_string()).await; let uid = test.get_user_profile().await.unwrap().id; + // sleep a bit to make sure the backup is generated + + tokio::time::sleep(Duration::from_secs(10)).await; let backups = test.user_manager.get_collab_backup_list(uid); assert_eq!(backups.len(), 1); diff --git a/frontend/rust-lib/flowy-database2/src/manager.rs b/frontend/rust-lib/flowy-database2/src/manager.rs index 5a83316ea6..f4f95b8d39 100644 --- a/frontend/rust-lib/flowy-database2/src/manager.rs +++ b/frontend/rust-lib/flowy-database2/src/manager.rs @@ -109,10 +109,11 @@ impl DatabaseManager { let workspace_id = self.user.workspace_id()?; let workspace_database_object_id = self.user.workspace_database_object_id()?; - let mut workspace_database_doc_state = + let mut workspace_database_data_source = KVDBCollabPersistenceImpl::new(collab_db.clone(), uid).into_data_source(); - // If the workspace database not exist in disk, try to fetch from remote. - if !self.is_collab_exist(uid, &collab_db, &workspace_database_object_id) { + let is_exist_in_disk = self.is_collab_exist(uid, &collab_db, &workspace_database_object_id); + // 4.If the workspace database not exist in disk, try to fetch from remote. + if !is_exist_in_disk { trace!("workspace database not exist, try to fetch from remote"); match self .cloud_service @@ -125,7 +126,7 @@ impl DatabaseManager { { Ok(value) => { if let Some(encode_collab) = value { - workspace_database_doc_state = DataSource::from(encode_collab); + workspace_database_data_source = DataSource::from(encode_collab); } }, Err(err) => { @@ -140,7 +141,7 @@ impl DatabaseManager { // Construct the workspace database. event!( tracing::Level::INFO, - "open aggregate database views object: {}", + "create workspace database object: {}", &workspace_database_object_id ); @@ -154,9 +155,10 @@ impl DatabaseManager { &workspace_database_object_id, CollabType::WorkspaceDatabase, )?; + let workspace_database = self.collab_builder.create_workspace_database( collab_object, - workspace_database_doc_state, + workspace_database_data_source, collab_db, CollabBuilderConfig::default().sync_enable(true), collab_builder, diff --git a/frontend/rust-lib/flowy-document/src/manager.rs b/frontend/rust-lib/flowy-document/src/manager.rs index bf503b0cfc..8eadf2b55f 100644 --- a/frontend/rust-lib/flowy-document/src/manager.rs +++ b/frontend/rust-lib/flowy-document/src/manager.rs @@ -310,8 +310,8 @@ impl DocumentManager { // clear the awareness state when close the document let mut lock = document.write().await; lock.clean_awareness_local_state(); - lock.flush(); } + let clone_doc_id = doc_id.clone(); trace!("move document to removing_documents: {}", doc_id); self.removing_documents.insert(doc_id, document); diff --git a/frontend/rust-lib/flowy-server/Cargo.toml b/frontend/rust-lib/flowy-server/Cargo.toml index e746aca35a..0ae7da2093 100644 --- a/frontend/rust-lib/flowy-server/Cargo.toml +++ b/frontend/rust-lib/flowy-server/Cargo.toml @@ -31,6 +31,7 @@ collab-plugins = { workspace = true } collab-document = { workspace = true } collab-entity = { workspace = true } collab-folder = { workspace = true } +collab-database = { workspace = true } hex = "0.4.3" postgrest = "1.0" lib-infra = { workspace = true } diff --git a/frontend/rust-lib/flowy-server/src/local_server/impls/database.rs b/frontend/rust-lib/flowy-server/src/local_server/impls/database.rs index 6d2ad4deab..fc42709b93 100644 --- a/frontend/rust-lib/flowy-server/src/local_server/impls/database.rs +++ b/frontend/rust-lib/flowy-server/src/local_server/impls/database.rs @@ -1,13 +1,7 @@ use anyhow::Error; -use collab::core::transaction::DocTransactionExtension; use collab::entity::EncodedCollab; -use collab::preclude::Collab; -use collab_entity::define::{DATABASE, DATABASE_ROW_DATA, WORKSPACE_DATABASES}; use collab_entity::CollabType; -use yrs::{ArrayPrelim, Map, MapPrelim}; - use flowy_database_pub::cloud::{DatabaseCloudService, DatabaseSnapshot, EncodeCollabByOid}; - use lib_infra::async_trait::async_trait; pub(crate) struct LocalServerDatabaseCloudServiceImpl(); @@ -16,33 +10,11 @@ pub(crate) struct LocalServerDatabaseCloudServiceImpl(); impl DatabaseCloudService for LocalServerDatabaseCloudServiceImpl { async fn get_database_encode_collab( &self, - object_id: &str, - collab_type: CollabType, + _object_id: &str, + _collab_type: CollabType, _workspace_id: &str, ) -> Result, Error> { - let object_id = object_id.to_string(); - // create the minimal required data for the given collab type - - let mut collab = Collab::new(1, object_id, collab_type.clone(), vec![], false); - let mut txn = collab.context.transact_mut(); - match collab_type { - CollabType::Database => { - collab.data.insert(&mut txn, DATABASE, MapPrelim::default()); - }, - CollabType::WorkspaceDatabase => { - collab - .data - .insert(&mut txn, WORKSPACE_DATABASES, ArrayPrelim::default()); - }, - CollabType::DatabaseRow => { - collab - .data - .insert(&mut txn, DATABASE_ROW_DATA, MapPrelim::default()); - }, - _ => { /* do nothing */ }, - }; - - Ok(Some(txn.get_encoded_collab_v1())) + Ok(None) } async fn batch_get_database_encode_collab( diff --git a/frontend/rust-lib/flowy-user/src/migrations/document_empty_content.rs b/frontend/rust-lib/flowy-user/src/migrations/document_empty_content.rs index 8b0b0694b5..7d64647fd4 100644 --- a/frontend/rust-lib/flowy-user/src/migrations/document_empty_content.rs +++ b/frontend/rust-lib/flowy-user/src/migrations/document_empty_content.rs @@ -89,7 +89,12 @@ where let collab = Collab::new_with_origin(origin.clone(), &view.id, vec![], false); let document = Document::open_with(collab, Some(default_document_data(&view.id)))?; let encode = document.encode_collab_v1(|_| Ok::<(), PersistenceError>(()))?; - write_txn.flush_doc_with(user_id, &view.id, &encode.doc_state, &encode.state_vector)?; + write_txn.flush_doc( + user_id, + &view.id, + encode.state_vector.to_vec(), + encode.doc_state.to_vec(), + )?; event!( tracing::Level::INFO, "Did migrate empty document {}", diff --git a/frontend/rust-lib/flowy-user/src/migrations/workspace_and_favorite_v1.rs b/frontend/rust-lib/flowy-user/src/migrations/workspace_and_favorite_v1.rs index e15bc5109c..2aaf3b8063 100644 --- a/frontend/rust-lib/flowy-user/src/migrations/workspace_and_favorite_v1.rs +++ b/frontend/rust-lib/flowy-user/src/migrations/workspace_and_favorite_v1.rs @@ -55,11 +55,11 @@ impl UserDataMigration for FavoriteV1AndWorkspaceArrayMigration { let encode = folder .encode_collab() .map_err(|err| PersistenceError::Internal(err.into()))?; - write_txn.flush_doc_with( + write_txn.flush_doc( session.user_id, &session.user_workspace.id, - &encode.doc_state, - &encode.state_vector, + encode.state_vector.to_vec(), + encode.doc_state.to_vec(), )?; } Ok(()) diff --git a/frontend/rust-lib/flowy-user/src/migrations/workspace_trash_v1.rs b/frontend/rust-lib/flowy-user/src/migrations/workspace_trash_v1.rs index 168c7e2510..47cecc35a0 100644 --- a/frontend/rust-lib/flowy-user/src/migrations/workspace_trash_v1.rs +++ b/frontend/rust-lib/flowy-user/src/migrations/workspace_trash_v1.rs @@ -49,11 +49,11 @@ impl UserDataMigration for WorkspaceTrashMapToSectionMigration { let encode = folder .encode_collab() .map_err(|err| PersistenceError::Internal(err.into()))?; - write_txn.flush_doc_with( + write_txn.flush_doc( session.user_id, &session.user_workspace.id, - &encode.doc_state, - &encode.state_vector, + encode.state_vector.to_vec(), + encode.doc_state.to_vec(), )?; } Ok(())