Skip to content

Commit e77fef3

Browse files
authored
chore: remove invalid revisions (#1816)
1 parent 5f760ad commit e77fef3

File tree

16 files changed

+132
-98
lines changed

16 files changed

+132
-98
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ node_modules
2121

2222
**/resources/proto
2323

24-
frontend/.vscode/*
2524
!frontend/.vscode/settings.json
2625
!frontend/.vscode/tasks.json
2726
!frontend/.vscode/launch.json

frontend/.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"type": "dart",
1313
"preLaunchTask": "AF: Build Appflowy Core",
1414
"env": {
15-
"RUST_LOG": "trace"
15+
"RUST_LOG": "trace",
1616
// "RUST_LOG": "debug"
1717
},
1818
"cwd": "${workspaceRoot}/app_flowy"

frontend/rust-lib/flowy-client-sync/src/util.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,18 @@ pub fn contain_newline(s: &str) -> bool {
3232
pub fn recover_operation_from_revisions<T>(
3333
revisions: Vec<Revision>,
3434
validator: impl Fn(&DeltaOperations<T>) -> bool,
35-
) -> Option<DeltaOperations<T>>
35+
) -> Option<(DeltaOperations<T>, i64)>
3636
where
3737
T: OperationAttributes + DeserializeOwned + OperationAttributes,
3838
{
3939
let mut new_operations = DeltaOperations::<T>::new();
40+
let mut rev_id = 0;
4041
for revision in revisions {
4142
if let Ok(operations) = DeltaOperations::<T>::from_bytes(revision.bytes) {
4243
match new_operations.compose(&operations) {
4344
Ok(composed_operations) => {
4445
if validator(&composed_operations) {
46+
rev_id = revision.rev_id;
4547
new_operations = composed_operations;
4648
} else {
4749
break;
@@ -56,7 +58,7 @@ where
5658
if new_operations.is_empty() {
5759
None
5860
} else {
59-
Some(new_operations)
61+
Some((new_operations, rev_id))
6062
}
6163
}
6264

frontend/rust-lib/flowy-database/src/manager.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use crate::entities::DatabaseViewLayout;
2-
use crate::services::grid_editor::{DatabaseRevisionEditor, GridRevisionMergeable};
2+
use crate::services::grid_editor::{
3+
DatabaseRevisionEditor, GridRevisionCloudService, GridRevisionMergeable, GridRevisionSerde,
4+
};
35
use crate::services::persistence::block_index::BlockIndexCache;
46
use crate::services::persistence::kv::DatabaseKVPersistence;
57
use crate::services::persistence::migration::DatabaseMigration;
@@ -144,10 +146,16 @@ impl DatabaseManager {
144146
pool: Arc<ConnectionPool>,
145147
) -> Result<Arc<DatabaseRevisionEditor>, FlowyError> {
146148
let user = self.database_user.clone();
147-
let rev_manager = self.make_database_rev_manager(database_id, pool.clone())?;
149+
let token = user.token()?;
150+
let cloud = Arc::new(GridRevisionCloudService::new(token));
151+
let mut rev_manager = self.make_database_rev_manager(database_id, pool.clone())?;
152+
let database_pad = Arc::new(RwLock::new(
153+
rev_manager.initialize::<GridRevisionSerde>(Some(cloud)).await?,
154+
));
148155
let database_editor = DatabaseRevisionEditor::new(
149156
database_id,
150157
user,
158+
database_pad,
151159
rev_manager,
152160
self.block_index_cache.clone(),
153161
self.task_scheduler.clone(),

frontend/rust-lib/flowy-database/src/services/block_editor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ impl RevisionObjectDeserializer for DatabaseBlockRevisionSerde {
199199
Ok(pad)
200200
}
201201

202-
fn recover_operations_from_revisions(_revisions: Vec<Revision>) -> Option<Self::Output> {
202+
fn recover_from_revisions(_revisions: Vec<Revision>) -> Option<(Self::Output, i64)> {
203203
None
204204
}
205205
}

frontend/rust-lib/flowy-database/src/services/grid_editor.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,12 @@ impl DatabaseRevisionEditor {
5757
pub async fn new(
5858
database_id: &str,
5959
user: Arc<dyn DatabaseUser>,
60-
mut rev_manager: RevisionManager<Arc<ConnectionPool>>,
60+
database_pad: Arc<RwLock<DatabaseRevisionPad>>,
61+
rev_manager: RevisionManager<Arc<ConnectionPool>>,
6162
persistence: Arc<BlockIndexCache>,
6263
task_scheduler: Arc<RwLock<TaskDispatcher>>,
6364
) -> FlowyResult<Arc<Self>> {
64-
let token = user.token()?;
65-
let cloud = Arc::new(GridRevisionCloudService { token });
66-
let database_pad = rev_manager.initialize::<GridRevisionSerde>(Some(cloud)).await?;
6765
let rev_manager = Arc::new(rev_manager);
68-
let database_pad = Arc::new(RwLock::new(database_pad));
6966
let cell_data_cache = AnyTypeCache::<u64>::new();
7067

7168
// Block manager
@@ -891,7 +888,7 @@ impl RevisionObjectDeserializer for GridRevisionSerde {
891888
Ok(pad)
892889
}
893890

894-
fn recover_operations_from_revisions(_revisions: Vec<Revision>) -> Option<Self::Output> {
891+
fn recover_from_revisions(_revisions: Vec<Revision>) -> Option<(Self::Output, i64)> {
895892
None
896893
}
897894
}
@@ -901,11 +898,18 @@ impl RevisionObjectSerializer for GridRevisionSerde {
901898
Ok(operations.json_bytes())
902899
}
903900
}
904-
struct GridRevisionCloudService {
901+
902+
pub struct GridRevisionCloudService {
905903
#[allow(dead_code)]
906904
token: String,
907905
}
908906

907+
impl GridRevisionCloudService {
908+
pub fn new(token: String) -> Self {
909+
Self { token }
910+
}
911+
}
912+
909913
impl RevisionCloudService for GridRevisionCloudService {
910914
#[tracing::instrument(level = "trace", skip(self))]
911915
fn fetch_object(&self, _user_id: &str, _object_id: &str) -> FutureResult<Vec<Revision>, FlowyError> {

frontend/rust-lib/flowy-database/src/services/view_editor/trait_impl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ impl RevisionObjectDeserializer for GridViewRevisionSerde {
4242
Ok(pad)
4343
}
4444

45-
fn recover_operations_from_revisions(_revisions: Vec<Revision>) -> Option<Self::Output> {
45+
fn recover_from_revisions(_revisions: Vec<Revision>) -> Option<(Self::Output, i64)> {
4646
None
4747
}
4848
}

frontend/rust-lib/flowy-document/src/editor/document.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl RevisionObjectDeserializer for DocumentRevisionSerde {
8787
Result::<Document, FlowyError>::Ok(document)
8888
}
8989

90-
fn recover_operations_from_revisions(_revisions: Vec<Revision>) -> Option<Self::Output> {
90+
fn recover_from_revisions(_revisions: Vec<Revision>) -> Option<(Self::Output, i64)> {
9191
None
9292
}
9393
}

frontend/rust-lib/flowy-document/src/old_editor/editor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ impl RevisionObjectDeserializer for DeltaDocumentRevisionSerde {
263263
})
264264
}
265265

266-
fn recover_operations_from_revisions(_revisions: Vec<Revision>) -> Option<Self::Output> {
266+
fn recover_from_revisions(_revisions: Vec<Revision>) -> Option<(Self::Output, i64)> {
267267
None
268268
}
269269
}

frontend/rust-lib/flowy-folder/src/services/folder_editor.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@ impl RevisionObjectDeserializer for FolderRevisionSerde {
107107
Ok(FolderPad::from_operations(operations)?)
108108
}
109109

110-
fn recover_operations_from_revisions(revisions: Vec<Revision>) -> Option<Self::Output> {
111-
if let Some(operations) = recover_operation_from_revisions(revisions, |operations| {
110+
fn recover_from_revisions(revisions: Vec<Revision>) -> Option<(Self::Output, i64)> {
111+
if let Some((operations, rev_id)) = recover_operation_from_revisions(revisions, |operations| {
112112
FolderPad::from_operations(operations.clone()).is_ok()
113113
}) {
114114
if let Ok(pad) = FolderPad::from_operations(operations) {
115-
return Some(pad);
115+
return Some((pad, rev_id));
116116
}
117117
}
118118
None

0 commit comments

Comments
 (0)