"docs/vscode:/vscode.git/clone" did not exist on "bf9c93c7e0cd644433237aae8f72a46e99608b61"
Unverified Commit c7ad78f3 authored by Yan Ru Pei's avatar Yan Ru Pei Committed by GitHub
Browse files

feat: non blocking radix snapshot upload (#4839)


Signed-off-by: default avatarPeaBrane <yanrpei@gmail.com>
parent fe10dbfd
...@@ -187,24 +187,29 @@ impl SnapshotResources { ...@@ -187,24 +187,29 @@ impl SnapshotResources {
.await .await
.map_err(|e| anyhow::anyhow!("Failed to receive dump response: {e:?}"))?; .map_err(|e| anyhow::anyhow!("Failed to receive dump response: {e:?}"))?;
// Upload the snapshot to NATS object store // Upload the snapshot to NATS object store in background (non-blocking)
let url = url::Url::parse(&format!( let nats_client = self.nats_client.clone();
"nats://{}/{}/{RADIX_STATE_FILE}", let bucket_name = self.bucket_name.clone();
self.nats_client.addr(), let event_count = events.len();
self.bucket_name tokio::spawn(async move {
))?; let Ok(url) = url::Url::parse(&format!(
"nats://{}/{bucket_name}/{RADIX_STATE_FILE}",
nats_client.addr(),
)) else {
tracing::warn!("Failed to parse snapshot URL");
return;
};
self.nats_client if let Err(e) = nats_client.object_store_upload_data(&events, &url).await {
.object_store_upload_data(&events, &url) tracing::warn!("Failed to upload snapshot: {e:?}");
.await return;
.map_err(|e| anyhow::anyhow!("Failed to upload snapshot: {e:?}"))?; }
tracing::info!( tracing::info!(
"Successfully performed snapshot of radix tree with {} events to bucket {} in {}ms", "Successfully uploaded snapshot with {event_count} events to bucket {bucket_name} in {}ms",
events.len(),
self.bucket_name,
start_time.elapsed().as_millis() start_time.elapsed().as_millis()
); );
});
Ok(()) Ok(())
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment