From 8e36792dd99f16cf783f3b9b64dfdc0a55814abd Mon Sep 17 00:00:00 2001 From: "Nathan.fooo" <86001920+appflowy@users.noreply.github.com> Date: Tue, 20 Feb 2024 08:34:57 +0800 Subject: [PATCH] fix: metrics (#331) --- src/application.rs | 1 + src/biz/collab/access_control.rs | 1 - src/biz/workspace/access_control.rs | 1 - src/state.rs | 2 +- tests/collab/single_device_edit.rs | 46 +++++++++++++++++++++++++++++ 5 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/application.rs b/src/application.rs index 78c1eb92..40bd5eea 100644 --- a/src/application.rs +++ b/src/application.rs @@ -122,6 +122,7 @@ pub async fn run( .service(ws_scope()) .service(file_storage_scope()) .service(metrics_scope()) + .app_data(Data::new(state.metrics.registry.clone())) .app_data(Data::new(state.metrics.request_metrics.clone())) .app_data(Data::new(state.metrics.realtime_metrics.clone())) .app_data(Data::new(state.metrics.access_control_metrics.clone())) diff --git a/src/biz/collab/access_control.rs b/src/biz/collab/access_control.rs index 95470033..f48f5dd2 100644 --- a/src/biz/collab/access_control.rs +++ b/src/biz/collab/access_control.rs @@ -36,7 +36,6 @@ where } #[instrument(level = "debug", skip_all, err)] - #[allow(clippy::blocks_in_if_conditions)] async fn check_collab_permission( &self, oid: &str, diff --git a/src/biz/workspace/access_control.rs b/src/biz/workspace/access_control.rs index 1ce78b81..98274e6a 100644 --- a/src/biz/workspace/access_control.rs +++ b/src/biz/workspace/access_control.rs @@ -54,7 +54,6 @@ where } #[instrument(level = "trace", skip_all, err)] - #[allow(clippy::blocks_in_if_conditions)] async fn check_workspace_permission( &self, workspace_id: &Uuid, diff --git a/src/state.rs b/src/state.rs index 9abf7a8e..54685a23 100644 --- a/src/state.rs +++ b/src/state.rs @@ -96,7 +96,7 @@ impl UserCache { #[derive(Clone)] pub struct AppMetrics { #[allow(dead_code)] - registry: Arc, + pub registry: Arc, pub request_metrics: Arc, pub realtime_metrics: Arc, pub access_control_metrics: Arc, diff --git a/tests/collab/single_device_edit.rs b/tests/collab/single_device_edit.rs index 6be14115..c235ec40 100644 --- a/tests/collab/single_device_edit.rs +++ b/tests/collab/single_device_edit.rs @@ -526,3 +526,49 @@ async fn collab_flush_test() { } // TODO(nathan): assert the collab content in disk } + +#[tokio::test] +async fn simulate_50_offline_user_connect_and_then_sync_document_test() { + let text = generate_random_string(1024 * 1024 * 3); + let mut tasks = Vec::new(); + for i in 0..50 { + let cloned_text = text.clone(); + let task = tokio::spawn(async move { + let mut new_user = TestClient::new_user_without_ws_conn().await; + // sleep to make sure it do not trigger register user too fast in gotrue + sleep(Duration::from_secs(i % 5)).await; + + let object_id = Uuid::new_v4().to_string(); + let workspace_id = new_user.workspace_id().await; + let doc_state = make_big_collab_doc_state(&object_id, "text", cloned_text); + new_user + .open_collab_with_doc_state(&workspace_id, &object_id, CollabType::Document, doc_state) + .await; + (new_user, object_id) + }); + tasks.push(task); + } + + let results = futures::future::join_all(tasks).await; + let mut tasks = Vec::new(); + for result in results.into_iter() { + let task = tokio::spawn(async move { + let (mut client, object_id) = result.unwrap(); + client.reconnect().await; + client.wait_object_sync_complete(&object_id).await; + + for i in 0..100 { + client + .collab_by_object_id + .get_mut(&object_id) + .unwrap() + .collab + .lock() + .insert(&i.to_string(), i.to_string()); + sleep(Duration::from_millis(30)).await; + } + }); + tasks.push(task); + } + let _results = futures::future::join_all(tasks).await; +}