Skip to content

Commit be855d3

Browse files
committed
Log download stats for s3 snapshot API and cleanup
1 parent 6b8d719 commit be855d3

4 files changed

Lines changed: 22 additions & 12 deletions

File tree

lib/collection/src/operations/snapshot_storage_ops.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use fs_err as fs;
66
use fs_err::{File, tokio as tokio_fs};
77
use futures::StreamExt;
88
use object_store::WriteMultipart;
9+
use segment::common::BYTES_IN_MB;
910
use tokio::io::AsyncWriteExt;
1011

1112
use super::snapshot_ops::SnapshotDescription;
@@ -196,6 +197,7 @@ pub async fn download_snapshot(
196197
path: &Path,
197198
target_path: &Path,
198199
) -> CollectionResult<()> {
200+
let download_start_time = tokio::time::Instant::now();
199201
let s3_path = trim_dot_slash(path)?;
200202
let download = client.get(&s3_path).await.map_err(|e| match e {
201203
object_store::Error::NotFound { .. } => {
@@ -232,6 +234,17 @@ pub async fn download_snapshot(
232234
.await
233235
.map_err(|e| CollectionError::service_error(format!("Failed to flush file: {e}")))?;
234236

237+
let download_duration = download_start_time.elapsed();
238+
let total_size_mb = total_size as f64 / BYTES_IN_MB as f64;
239+
let download_speed_mbps = total_size_mb / download_duration.as_secs_f64();
240+
log::debug!(
241+
"Object storage snapshot download completed: path={}, size={:.2} MB, duration={:.2}s, speed={:.2} MB/s",
242+
target_path.display(),
243+
total_size_mb,
244+
download_duration.as_secs_f64(),
245+
download_speed_mbps
246+
);
247+
235248
// check len to file len
236249
let file_meta = tokio_fs::metadata(target_path).await?;
237250
if file_meta.len() != total_size as u64 {

lib/segment/src/common/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,4 @@ pub fn check_stopped(is_stopped: &AtomicBool) -> OperationResult<()> {
245245
}
246246

247247
pub const BYTES_IN_KB: usize = 1024;
248+
pub const BYTES_IN_MB: usize = 1_048_576;

lib/storage/src/content_manager/snapshots/download.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::path::Path;
44
use common::tempfile_ext::MaybeTempPath;
55
use fs_err::tokio as tokio_fs;
66
use futures::StreamExt;
7+
use segment::common::BYTES_IN_MB;
78
use tap::Tap;
89
use tempfile::TempPath;
910
use tokio::io::AsyncWriteExt;
@@ -63,15 +64,12 @@ async fn download_file(
6364
file.flush().await?;
6465

6566
let download_duration = download_start_time.elapsed();
66-
let download_speed_mbps = if download_duration.as_secs_f64() > 0.0 {
67-
(total_bytes_downloaded as f64 / 1_048_576.0) / download_duration.as_secs_f64()
68-
} else {
69-
0.0
70-
};
67+
let total_size_mb = total_bytes_downloaded as f64 / BYTES_IN_MB as f64;
68+
let download_speed_mbps = total_size_mb / download_duration.as_secs_f64();
7169
log::debug!(
7270
"Snapshot download completed: path={}, size={:.2} MB, duration={:.2}s, speed={:.2} MB/s",
7371
temp_path.display(),
74-
total_bytes_downloaded as f64 / 1_048_576.0,
72+
total_size_mb,
7573
download_duration.as_secs_f64(),
7674
download_speed_mbps
7775
);

src/actix/api/snapshot_api.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use fs_err::tokio as tokio_fs;
1818
use futures::{FutureExt as _, StreamExt as _, TryFutureExt as _};
1919
use reqwest::Url;
2020
use schemars::JsonSchema;
21+
use segment::common::BYTES_IN_MB;
2122
use segment::data_types::manifest::SnapshotManifest;
2223
use serde::{Deserialize, Serialize};
2324
use storage::content_manager::errors::{StorageError, StorageResult};
@@ -798,16 +799,13 @@ async fn recover_partial_snapshot_from(
798799
};
799800

800801
let download_duration = download_start_time.elapsed();
801-
let download_speed_mbps = if download_duration.as_secs_f64() > 0.0 {
802-
(bytes_downloaded as f64 / 1_048_576.0) / download_duration.as_secs_f64()
803-
} else {
804-
0.0
805-
};
802+
let total_size_mb = bytes_downloaded as f64 / BYTES_IN_MB as f64;
803+
let download_speed_mbps = total_size_mb / download_duration.as_secs_f64();
806804

807805
log::debug!(
808806
"Partial snapshot download completed: path={}, size={:.2} MB, duration={:.2}s, speed={:.2} MB/s, shard_id={}",
809807
partial_snapshot_temp_path.display(),
810-
bytes_downloaded as f64 / 1_048_576.0,
808+
total_size_mb,
811809
download_duration.as_secs_f64(),
812810
download_speed_mbps,
813811
shard_id

0 commit comments

Comments
 (0)