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}",
self.nats_client nats_client.addr(),
.object_store_upload_data(&events, &url) )) else {
.await tracing::warn!("Failed to parse snapshot URL");
.map_err(|e| anyhow::anyhow!("Failed to upload snapshot: {e:?}"))?; return;
};
if let Err(e) = nats_client.object_store_upload_data(&events, &url).await {
tracing::warn!("Failed to upload snapshot: {e:?}");
return;
}
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(), start_time.elapsed().as_millis()
self.bucket_name, );
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