From ace28c1f85f0fa41cbe48491259653a1f741906b Mon Sep 17 00:00:00 2001 From: Zhengchao An Date: Thu, 13 Aug 2026 03:27:17 +0800 Subject: [PATCH] chore(common): remove dead bucket_stats module and LastMinuteHistogram (#6011) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit crates/common/src/bucket_stats.rs (ReplicationLatency plus a commented-out ReplicationLastMinute corpse) had zero consumers anywhere in the workspace — the live replication statistics implementation is crates/replication/src/stats.rs. LastMinuteHistogram in last_minute.rs (already carrying allow(dead_code)) was equally unreferenced, and size_to_tag / SIZE_LAST_ELEM_MARKER had no user besides the histogram, so the whole block goes with it. LastMinuteLatency and AccElem stay: common's metrics.rs uses them. Ref rustfs/backlog#1833 (PR5). --- crates/common/src/bucket_stats.rs | 87 ------------------------------- crates/common/src/last_minute.rs | 41 --------------- crates/common/src/lib.rs | 1 - 3 files changed, 129 deletions(-) delete mode 100644 crates/common/src/bucket_stats.rs diff --git a/crates/common/src/bucket_stats.rs b/crates/common/src/bucket_stats.rs deleted file mode 100644 index 980586b32..000000000 --- a/crates/common/src/bucket_stats.rs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2024 RustFS Team -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use crate::last_minute::{self}; -use std::collections::HashMap; - -pub struct ReplicationLatency { - // Delays for single and multipart PUT requests - upload_histogram: last_minute::LastMinuteHistogram, -} - -impl ReplicationLatency { - // Merge two ReplicationLatency - pub fn merge(&mut self, other: &mut ReplicationLatency) -> &ReplicationLatency { - self.upload_histogram.merge(&other.upload_histogram); - self - } - - // Get upload delay (categorized by object size interval) - pub fn get_upload_latency(&mut self) -> HashMap { - let mut ret = HashMap::new(); - let avg = self.upload_histogram.get_avg_data(); - for (i, v) in avg.iter().enumerate() { - let avg_duration = v.avg(); - ret.insert(self.size_tag_to_string(i), avg_duration.as_millis() as u64); - } - ret - } - pub fn update(&mut self, size: i64, during: std::time::Duration) { - self.upload_histogram.add(size, during); - } - - // Simulate the conversion from size tag to string - fn size_tag_to_string(&self, tag: usize) -> String { - match tag { - 0 => String::from("Size < 1 KiB"), - 1 => String::from("Size < 1 MiB"), - 2 => String::from("Size < 10 MiB"), - 3 => String::from("Size < 100 MiB"), - 4 => String::from("Size < 1 GiB"), - _ => String::from("Size > 1 GiB"), - } - } -} - -// #[derive(Debug, Clone, Default)] -// pub struct ReplicationLastMinute { -// pub last_minute: LastMinuteLatency, -// } - -// impl ReplicationLastMinute { -// pub fn merge(&mut self, other: ReplicationLastMinute) -> ReplicationLastMinute { -// let mut nl = ReplicationLastMinute::default(); -// nl.last_minute = self.last_minute.merge(&mut other.last_minute); -// nl -// } - -// pub fn add_size(&mut self, n: i64) { -// let t = SystemTime::now() -// .duration_since(UNIX_EPOCH) -// .expect("Time went backwards") -// .as_secs(); -// self.last_minute.add_all(t - 1, &AccElem { total: t - 1, size: n as u64, n: 1 }); -// } - -// pub fn get_total(&self) -> AccElem { -// self.last_minute.get_total() -// } -// } - -// impl fmt::Display for ReplicationLastMinute { -// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -// let t = self.last_minute.get_total(); -// write!(f, "ReplicationLastMinute sz= {}, n= {}, dur= {}", t.size, t.n, t.total) -// } -// } diff --git a/crates/common/src/last_minute.rs b/crates/common/src/last_minute.rs index 8cb165ff9..82a1a83e6 100644 --- a/crates/common/src/last_minute.rs +++ b/crates/common/src/last_minute.rs @@ -572,44 +572,3 @@ mod tests { assert_eq!(total.n, 6); } } - -const SIZE_LAST_ELEM_MARKER: usize = 10; // Assumed marker size is 10, modify according to actual situation - -#[allow(dead_code)] -#[derive(Debug, Default)] -pub struct LastMinuteHistogram { - histogram: Vec, - size: u32, -} - -impl LastMinuteHistogram { - pub fn merge(&mut self, other: &LastMinuteHistogram) { - for i in 0..self.histogram.len() { - self.histogram[i].merge(&other.histogram[i]); - } - } - - pub fn add(&mut self, size: i64, t: Duration) { - let index = size_to_tag(size); - self.histogram[index].add(&t); - } - - pub fn get_avg_data(&mut self) -> [AccElem; SIZE_LAST_ELEM_MARKER] { - let mut res = [AccElem::default(); SIZE_LAST_ELEM_MARKER]; - for (i, elem) in self.histogram.iter_mut().enumerate() { - res[i] = elem.get_total(); - } - res - } -} - -fn size_to_tag(size: i64) -> usize { - match size { - _ if size < 1024 => 0, // sizeLessThan1KiB - _ if size < 1024 * 1024 => 1, // sizeLessThan1MiB - _ if size < 10 * 1024 * 1024 => 2, // sizeLessThan10MiB - _ if size < 100 * 1024 * 1024 => 3, // sizeLessThan100MiB - _ if size < 1024 * 1024 * 1024 => 4, // sizeLessThan1GiB - _ => 5, // sizeGreaterThan1GiB - } -} diff --git a/crates/common/src/lib.rs b/crates/common/src/lib.rs index b5f8d7064..09240e25b 100644 --- a/crates/common/src/lib.rs +++ b/crates/common/src/lib.rs @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -pub mod bucket_stats; // pub mod error; pub mod globals; pub mod heal_channel;