chore: revert from editing collab
This commit is contained in:
parent
d120860312
commit
e85e60c0f2
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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(¶ms.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(¶ms.workspace_id, params.inner)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -224,6 +224,7 @@ pub async fn get_latest_collab_encoded(
|
|||
collab_type,
|
||||
},
|
||||
},
|
||||
true,
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue