chore: revert from editing collab

This commit is contained in:
Bartosz Sypytkowski 2024-12-17 05:43:04 +01:00
parent d120860312
commit e85e60c0f2
7 changed files with 64 additions and 7 deletions

View File

@ -114,6 +114,7 @@ pub trait CollabStorage: Send + Sync + 'static {
&self,
origin: GetCollabOrigin,
params: QueryCollabParams,
from_editing_collab: bool,
) -> AppResult<EncodedCollab>;
async fn batch_get_collab(

View File

@ -131,6 +131,47 @@ where
.await?;
Ok(())
}
async fn get_encode_collab_from_editing(&self, oid: &str) -> Option<EncodedCollab> {
let object_id = oid.to_string();
let (ret, rx) = tokio::sync::oneshot::channel();
let timeout_duration = Duration::from_secs(5);
// Attempt to send the command to the realtime server
if let Err(err) = self
.rt_cmd_sender
.send(CollaborationCommand::GetEncodeCollab { object_id, ret })
.await
{
error!(
"Failed to send get encode collab command to realtime server: {}",
err
);
return None;
}
// Await the response from the realtime server with a timeout
match timeout(timeout_duration, rx).await {
Ok(Ok(Some(encode_collab))) => Some(encode_collab),
Ok(Ok(None)) => {
trace!("Editing collab not found: `{}`", oid);
None
},
Ok(Err(err)) => {
error!(
"Failed to get collab from realtime server `{}`: {}",
oid, err
);
None
},
Err(_) => {
error!(
"Timeout trying to read collab `{}` from realtime server",
oid
);
None
},
}
}
async fn batch_get_encode_collab_from_editing(
&self,
@ -356,11 +397,12 @@ where
}
}
#[instrument(level = "trace", skip_all, fields(oid = %params.object_id))]
#[instrument(level = "trace", skip_all, fields(oid = %params.object_id, from_editing_collab = %from_editing_collab))]
async fn get_encode_collab(
&self,
origin: GetCollabOrigin,
params: QueryCollabParams,
from_editing_collab: bool,
) -> AppResult<EncodedCollab> {
params.validate()?;
match origin {
@ -374,6 +416,18 @@ where
GetCollabOrigin::Server => {},
}
// Early return if editing collab is initialized, as it indicates no need to query further.
if from_editing_collab {
// Attempt to retrieve encoded collab from the editing collab
if let Some(value) = self.get_encode_collab_from_editing(&params.object_id).await {
trace!(
"Did get encode collab {} from editing collab",
params.object_id
);
return Ok(value);
}
}
let encode_collab = self
.cache
.get_encode_collab(&params.workspace_id, params.inner)

View File

@ -1265,7 +1265,7 @@ impl CollabPersister {
);
let result = self
.storage
.get_encode_collab(GetCollabOrigin::Server, params)
.get_encode_collab(GetCollabOrigin::Server, params, false)
.await;
match result {
Ok(encoded_collab) => encoded_collab.doc_state,

View File

@ -121,7 +121,7 @@ where
let params = QueryCollabParams::new(object_id, collab_type.clone(), workspace_id);
let res = self
.storage
.get_encode_collab(GetCollabOrigin::Server, params)
.get_encode_collab(GetCollabOrigin::Server, params, false)
.await;
let state_vector = match res {
Ok(collab) => Collab::new_with_source(
@ -175,7 +175,7 @@ where
S: CollabStorage,
{
let encode_collab = storage
.get_encode_collab(GetCollabOrigin::User { uid }, params.clone())
.get_encode_collab(GetCollabOrigin::User { uid }, params.clone(), false)
.await?;
let result = Collab::new_with_source(
CollabOrigin::Server,

View File

@ -345,7 +345,7 @@ fn get_unindexed_collabs(
match &cid.collab_type {
CollabType::Document => {
let collab = storage
.get_encode_collab(GetCollabOrigin::Server, cid.clone().into())
.get_encode_collab(GetCollabOrigin::Server, cid.clone().into(), false)
.await?;
yield UnindexedCollab {

View File

@ -853,7 +853,7 @@ async fn get_collab_handler(
let object_id = params.object_id.clone();
let encode_collab = state
.collab_access_control_storage
.get_encode_collab(GetCollabOrigin::User { uid }, params)
.get_encode_collab(GetCollabOrigin::User { uid }, params, true)
.await
.map_err(AppResponseError::from)?;
@ -889,7 +889,7 @@ async fn v1_get_collab_handler(
let encode_collab = state
.collab_access_control_storage
.get_encode_collab(GetCollabOrigin::User { uid }, param)
.get_encode_collab(GetCollabOrigin::User { uid }, param, true)
.await
.map_err(AppResponseError::from)?;
@ -1174,6 +1174,7 @@ async fn create_collab_snapshot_handler(
.get_encode_collab(
GetCollabOrigin::User { uid },
QueryCollabParams::new(&object_id, collab_type.clone(), &workspace_id),
true,
)
.await?
.doc_state;

View File

@ -224,6 +224,7 @@ pub async fn get_latest_collab_encoded(
collab_type,
},
},
true,
)
.await
}