fix: web update should update both disk and mem cache

This commit is contained in:
khorshuheng 2024-12-05 16:50:30 +08:00
parent 445d3af5fa
commit aa64b7cd6b
6 changed files with 26 additions and 15 deletions

View File

@ -94,7 +94,7 @@ pub trait CollabStorage: Send + Sync + 'static {
/// # Returns /// # Returns
/// ///
/// * `Result<()>` - Returns `Ok(())` if the collaboration was created successfully, `Err` otherwise. /// * `Result<()>` - Returns `Ok(())` if the collaboration was created successfully, `Err` otherwise.
async fn insert_new_collab_with_transaction( async fn upsert_new_collab_with_transaction(
&self, &self,
workspace_id: &str, workspace_id: &str,
uid: &i64, uid: &i64,

View File

@ -343,7 +343,7 @@ where
#[instrument(level = "trace", skip(self, params), oid = %params.oid, ty = %params.collab_type, err)] #[instrument(level = "trace", skip(self, params), oid = %params.oid, ty = %params.collab_type, err)]
#[allow(clippy::blocks_in_conditions)] #[allow(clippy::blocks_in_conditions)]
async fn insert_new_collab_with_transaction( async fn upsert_new_collab_with_transaction(
&self, &self,
workspace_id: &str, workspace_id: &str,
uid: &i64, uid: &i64,

View File

@ -705,7 +705,7 @@ async fn create_collab_handler(
let action = format!("Create new collab: {}", params); let action = format!("Create new collab: {}", params);
state state
.collab_access_control_storage .collab_access_control_storage
.insert_new_collab_with_transaction(&workspace_id, &uid, params, &mut transaction, &action) .upsert_new_collab_with_transaction(&workspace_id, &uid, params, &mut transaction, &action)
.await?; .await?;
transaction transaction
@ -911,6 +911,7 @@ async fn post_web_update_handler(
.await .await
.map_err(AppResponseError::from)?; .map_err(AppResponseError::from)?;
update_page_collab_data( update_page_collab_data(
&state.pg_pool,
state.collab_access_control_storage.clone(), state.collab_access_control_storage.clone(),
state.metrics.appflowy_web_metrics.clone(), state.metrics.appflowy_web_metrics.clone(),
uid, uid,

View File

@ -130,7 +130,7 @@ pub(crate) async fn create_user_awareness(
.map_err(|err| AppError::Internal(anyhow::Error::from(err)))?; .map_err(|err| AppError::Internal(anyhow::Error::from(err)))?;
storage storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
workspace_id, workspace_id,
uid, uid,
CollabParams { CollabParams {
@ -167,7 +167,7 @@ pub(crate) async fn create_workspace_collab(
.map_err(|err| AppError::Internal(anyhow::Error::from(err)))?; .map_err(|err| AppError::Internal(anyhow::Error::from(err)))?;
storage storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
workspace_id, workspace_id,
&uid, &uid,
CollabParams { CollabParams {
@ -206,7 +206,7 @@ pub(crate) async fn create_workspace_database_collab(
.map_err(|err| AppError::Internal(anyhow::Error::from(err)))?; .map_err(|err| AppError::Internal(anyhow::Error::from(err)))?;
storage storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
workspace_id, workspace_id,
uid, uid,
CollabParams { CollabParams {

View File

@ -131,7 +131,7 @@ pub async fn create_space(
let mut transaction = pg_pool.begin().await?; let mut transaction = pg_pool.begin().await?;
let action = format!("Create new space: {}", view_id); let action = format!("Create new space: {}", view_id);
collab_storage collab_storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
&workspace_id.to_string(), &workspace_id.to_string(),
&uid, &uid,
default_document_collab_params, default_document_collab_params,
@ -652,7 +652,7 @@ async fn insert_and_broadcast_workspace_database_update(
}; };
let action_description = format!("Update workspace database: {}", workspace_id); let action_description = format!("Update workspace database: {}", workspace_id);
collab_storage collab_storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
&workspace_id.to_string(), &workspace_id.to_string(),
&uid, &uid,
params, params,
@ -684,7 +684,7 @@ async fn insert_and_broadcast_workspace_folder_update(
}; };
let action_description = format!("Update workspace folder: {}", workspace_id); let action_description = format!("Update workspace folder: {}", workspace_id);
collab_storage collab_storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
&workspace_id.to_string(), &workspace_id.to_string(),
&uid, &uid,
params, params,
@ -726,7 +726,7 @@ async fn create_document_page(
let mut transaction = pg_pool.begin().await?; let mut transaction = pg_pool.begin().await?;
let action = format!("Create new collab: {}", view_id); let action = format!("Create new collab: {}", view_id);
collab_storage collab_storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
&workspace_id.to_string(), &workspace_id.to_string(),
&uid, &uid,
default_document_collab_params, default_document_collab_params,
@ -876,7 +876,7 @@ async fn create_database_page(
let mut transaction = pg_pool.begin().await?; let mut transaction = pg_pool.begin().await?;
let action = format!("Create new database collab: {}", database_id); let action = format!("Create new database collab: {}", database_id);
collab_storage collab_storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
&workspace_id.to_string(), &workspace_id.to_string(),
&uid, &uid,
database_collab_params, database_collab_params,
@ -1225,7 +1225,9 @@ async fn get_page_collab_data_for_document(
}) })
} }
#[allow(clippy::too_many_arguments)]
pub async fn update_page_collab_data( pub async fn update_page_collab_data(
pg_pool: &PgPool,
collab_access_control_storage: Arc<CollabAccessControlStorage>, collab_access_control_storage: Arc<CollabAccessControlStorage>,
appflowy_web_metrics: Arc<AppFlowyWebMetrics>, appflowy_web_metrics: Arc<AppFlowyWebMetrics>,
uid: i64, uid: i64,
@ -1264,9 +1266,17 @@ pub async fn update_page_collab_data(
encoded_collab_v1: updated_encoded_collab.into(), encoded_collab_v1: updated_encoded_collab.into(),
embeddings: None, embeddings: None,
}; };
let mut transaction = pg_pool.begin().await?;
collab_access_control_storage collab_access_control_storage
.queue_insert_or_update_collab(&workspace_id.to_string(), &uid, params, true) .upsert_new_collab_with_transaction(
&workspace_id.to_string(),
&uid,
params,
&mut transaction,
"upsert collab",
)
.await?; .await?;
transaction.commit().await?;
broadcast_update( broadcast_update(
&collab_access_control_storage, &collab_access_control_storage,
&object_id.to_string(), &object_id.to_string(),

View File

@ -183,7 +183,7 @@ impl PublishCollabDuplicator {
}; };
let action = format!("duplicate collab: {}", params); let action = format!("duplicate collab: {}", params);
collab_storage collab_storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
&dest_workspace_id, &dest_workspace_id,
&duplicator_uid, &duplicator_uid,
params, params,
@ -239,7 +239,7 @@ impl PublishCollabDuplicator {
let updated_ws_w_db_collab = updated_ws_w_db_collab?; let updated_ws_w_db_collab = updated_ws_w_db_collab?;
collab_storage collab_storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
&dest_workspace_id, &dest_workspace_id,
&duplicator_uid, &duplicator_uid,
CollabParams { CollabParams {
@ -331,7 +331,7 @@ impl PublishCollabDuplicator {
.await?; .await?;
collab_storage collab_storage
.insert_new_collab_with_transaction( .upsert_new_collab_with_transaction(
&dest_workspace_id, &dest_workspace_id,
&duplicator_uid, &duplicator_uid,
CollabParams { CollabParams {