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,
|
&self,
|
||||||
origin: GetCollabOrigin,
|
origin: GetCollabOrigin,
|
||||||
params: QueryCollabParams,
|
params: QueryCollabParams,
|
||||||
|
from_editing_collab: bool,
|
||||||
) -> AppResult<EncodedCollab>;
|
) -> AppResult<EncodedCollab>;
|
||||||
|
|
||||||
async fn batch_get_collab(
|
async fn batch_get_collab(
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,47 @@ where
|
||||||
.await?;
|
.await?;
|
||||||
Ok(())
|
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(
|
async fn batch_get_encode_collab_from_editing(
|
||||||
&self,
|
&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(
|
async fn get_encode_collab(
|
||||||
&self,
|
&self,
|
||||||
origin: GetCollabOrigin,
|
origin: GetCollabOrigin,
|
||||||
params: QueryCollabParams,
|
params: QueryCollabParams,
|
||||||
|
from_editing_collab: bool,
|
||||||
) -> AppResult<EncodedCollab> {
|
) -> AppResult<EncodedCollab> {
|
||||||
params.validate()?;
|
params.validate()?;
|
||||||
match origin {
|
match origin {
|
||||||
|
|
@ -374,6 +416,18 @@ where
|
||||||
GetCollabOrigin::Server => {},
|
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
|
let encode_collab = self
|
||||||
.cache
|
.cache
|
||||||
.get_encode_collab(¶ms.workspace_id, params.inner)
|
.get_encode_collab(¶ms.workspace_id, params.inner)
|
||||||
|
|
|
||||||
|
|
@ -1265,7 +1265,7 @@ impl CollabPersister {
|
||||||
);
|
);
|
||||||
let result = self
|
let result = self
|
||||||
.storage
|
.storage
|
||||||
.get_encode_collab(GetCollabOrigin::Server, params)
|
.get_encode_collab(GetCollabOrigin::Server, params, false)
|
||||||
.await;
|
.await;
|
||||||
match result {
|
match result {
|
||||||
Ok(encoded_collab) => encoded_collab.doc_state,
|
Ok(encoded_collab) => encoded_collab.doc_state,
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ where
|
||||||
let params = QueryCollabParams::new(object_id, collab_type.clone(), workspace_id);
|
let params = QueryCollabParams::new(object_id, collab_type.clone(), workspace_id);
|
||||||
let res = self
|
let res = self
|
||||||
.storage
|
.storage
|
||||||
.get_encode_collab(GetCollabOrigin::Server, params)
|
.get_encode_collab(GetCollabOrigin::Server, params, false)
|
||||||
.await;
|
.await;
|
||||||
let state_vector = match res {
|
let state_vector = match res {
|
||||||
Ok(collab) => Collab::new_with_source(
|
Ok(collab) => Collab::new_with_source(
|
||||||
|
|
@ -175,7 +175,7 @@ where
|
||||||
S: CollabStorage,
|
S: CollabStorage,
|
||||||
{
|
{
|
||||||
let encode_collab = storage
|
let encode_collab = storage
|
||||||
.get_encode_collab(GetCollabOrigin::User { uid }, params.clone())
|
.get_encode_collab(GetCollabOrigin::User { uid }, params.clone(), false)
|
||||||
.await?;
|
.await?;
|
||||||
let result = Collab::new_with_source(
|
let result = Collab::new_with_source(
|
||||||
CollabOrigin::Server,
|
CollabOrigin::Server,
|
||||||
|
|
|
||||||
|
|
@ -345,7 +345,7 @@ fn get_unindexed_collabs(
|
||||||
match &cid.collab_type {
|
match &cid.collab_type {
|
||||||
CollabType::Document => {
|
CollabType::Document => {
|
||||||
let collab = storage
|
let collab = storage
|
||||||
.get_encode_collab(GetCollabOrigin::Server, cid.clone().into())
|
.get_encode_collab(GetCollabOrigin::Server, cid.clone().into(), false)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
yield UnindexedCollab {
|
yield UnindexedCollab {
|
||||||
|
|
|
||||||
|
|
@ -853,7 +853,7 @@ async fn get_collab_handler(
|
||||||
let object_id = params.object_id.clone();
|
let object_id = params.object_id.clone();
|
||||||
let encode_collab = state
|
let encode_collab = state
|
||||||
.collab_access_control_storage
|
.collab_access_control_storage
|
||||||
.get_encode_collab(GetCollabOrigin::User { uid }, params)
|
.get_encode_collab(GetCollabOrigin::User { uid }, params, true)
|
||||||
.await
|
.await
|
||||||
.map_err(AppResponseError::from)?;
|
.map_err(AppResponseError::from)?;
|
||||||
|
|
||||||
|
|
@ -889,7 +889,7 @@ async fn v1_get_collab_handler(
|
||||||
|
|
||||||
let encode_collab = state
|
let encode_collab = state
|
||||||
.collab_access_control_storage
|
.collab_access_control_storage
|
||||||
.get_encode_collab(GetCollabOrigin::User { uid }, param)
|
.get_encode_collab(GetCollabOrigin::User { uid }, param, true)
|
||||||
.await
|
.await
|
||||||
.map_err(AppResponseError::from)?;
|
.map_err(AppResponseError::from)?;
|
||||||
|
|
||||||
|
|
@ -1174,6 +1174,7 @@ async fn create_collab_snapshot_handler(
|
||||||
.get_encode_collab(
|
.get_encode_collab(
|
||||||
GetCollabOrigin::User { uid },
|
GetCollabOrigin::User { uid },
|
||||||
QueryCollabParams::new(&object_id, collab_type.clone(), &workspace_id),
|
QueryCollabParams::new(&object_id, collab_type.clone(), &workspace_id),
|
||||||
|
true,
|
||||||
)
|
)
|
||||||
.await?
|
.await?
|
||||||
.doc_state;
|
.doc_state;
|
||||||
|
|
|
||||||
|
|
@ -224,6 +224,7 @@ pub async fn get_latest_collab_encoded(
|
||||||
collab_type,
|
collab_type,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
true,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue