mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-19 02:56:18 +00:00
chore: adjudicate 26 bare dead_code allows across five crates (#6187)
Remove every bare `#[allow(dead_code)]` in io-core, object-capacity, targets, rio, and scanner. Each allow was stripped first and clippy was then asked which ones the compiler actually missed, so the verdicts rest on the diagnostic rather than on inspection. 23 were inert: they sat on `pub fn`s inside `pub mod`s, where `dead_code` does not apply, or on scanner integration-test helpers that the tests in the same file do call. The remaining 3 are in rio's private `compress_index` module and the code behind them is deleted rather than annotated. `remove_index_headers` is dead and also wrong — after skipping the 4-byte chunk header it matches against `S2_INDEX_TRAILER` where `S2_INDEX_HEADER` sits, so it returns `None` for every well-formed index; rio-v2 carries the correct equivalent that is actually in use. `restore_index_headers` is its unreachable counterpart, likewise duplicated live in rio-v2. `Index::reset` is a private method with no caller. Refs backlog#1823
This commit is contained in:
@@ -26,7 +26,6 @@ pub enum StorageMedia {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl StorageMedia {
|
impl StorageMedia {
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn as_str(&self) -> &'static str {
|
pub fn as_str(&self) -> &'static str {
|
||||||
match self {
|
match self {
|
||||||
Self::Nvme => "nvme",
|
Self::Nvme => "nvme",
|
||||||
@@ -60,7 +59,6 @@ pub enum AccessPattern {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl AccessPattern {
|
impl AccessPattern {
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn as_str(&self) -> &'static str {
|
pub fn as_str(&self) -> &'static str {
|
||||||
match self {
|
match self {
|
||||||
Self::Sequential => "sequential",
|
Self::Sequential => "sequential",
|
||||||
@@ -71,25 +69,21 @@ impl AccessPattern {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Check if this is a sequential access pattern.
|
/// Check if this is a sequential access pattern.
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn is_sequential(&self) -> bool {
|
pub fn is_sequential(&self) -> bool {
|
||||||
matches!(self, Self::Sequential)
|
matches!(self, Self::Sequential)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if this is a random access pattern.
|
/// Check if this is a random access pattern.
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn is_random(&self) -> bool {
|
pub fn is_random(&self) -> bool {
|
||||||
matches!(self, Self::Random)
|
matches!(self, Self::Random)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if this is a mixed access pattern.
|
/// Check if this is a mixed access pattern.
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn is_mixed(&self) -> bool {
|
pub fn is_mixed(&self) -> bool {
|
||||||
matches!(self, Self::Mixed)
|
matches!(self, Self::Mixed)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if this pattern is unknown.
|
/// Check if this pattern is unknown.
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn is_unknown(&self) -> bool {
|
pub fn is_unknown(&self) -> bool {
|
||||||
matches!(self, Self::Unknown)
|
matches!(self, Self::Unknown)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -427,7 +427,6 @@ pub enum DataSource {
|
|||||||
/// Write triggered
|
/// Write triggered
|
||||||
WriteTriggered,
|
WriteTriggered,
|
||||||
/// Fallback value
|
/// Fallback value
|
||||||
#[allow(dead_code)]
|
|
||||||
Fallback,
|
Fallback,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -603,7 +602,6 @@ impl WriteRecord {
|
|||||||
|
|
||||||
/// Hybrid strategy configuration
|
/// Hybrid strategy configuration
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
#[allow(dead_code)]
|
|
||||||
pub struct HybridStrategyConfig {
|
pub struct HybridStrategyConfig {
|
||||||
/// Scheduled update interval
|
/// Scheduled update interval
|
||||||
pub scheduled_update_interval: Duration,
|
pub scheduled_update_interval: Duration,
|
||||||
@@ -998,14 +996,12 @@ impl HybridCapacityManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Get cache age
|
/// Get cache age
|
||||||
#[allow(dead_code)]
|
|
||||||
pub async fn get_cache_age(&self) -> Option<Duration> {
|
pub async fn get_cache_age(&self) -> Option<Duration> {
|
||||||
let cache = self.cache.read().await;
|
let cache = self.cache.read().await;
|
||||||
cache.as_ref().map(|c| c.last_update.elapsed())
|
cache.as_ref().map(|c| c.last_update.elapsed())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get write frequency (writes/minute)
|
/// Get write frequency (writes/minute)
|
||||||
#[allow(dead_code)]
|
|
||||||
pub async fn get_write_frequency(&self) -> usize {
|
pub async fn get_write_frequency(&self) -> usize {
|
||||||
let record = &self.write_record;
|
let record = &self.write_record;
|
||||||
record.recent_write_count(record.monotonic_second())
|
record.recent_write_count(record.monotonic_second())
|
||||||
@@ -1300,7 +1296,6 @@ pub fn get_capacity_manager() -> Arc<HybridCapacityManager> {
|
|||||||
/// .update_capacity(CapacityUpdate::exact(1000, 0), DataSource::RealTime)
|
/// .update_capacity(CapacityUpdate::exact(1000, 0), DataSource::RealTime)
|
||||||
/// .await;
|
/// .await;
|
||||||
/// ```
|
/// ```
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn create_isolated_manager(config: HybridStrategyConfig) -> Arc<HybridCapacityManager> {
|
pub fn create_isolated_manager(config: HybridStrategyConfig) -> Arc<HybridCapacityManager> {
|
||||||
Arc::new(HybridCapacityManager::new(config))
|
Arc::new(HybridCapacityManager::new(config))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ pub struct IndexInfo {
|
|||||||
pub uncompressed_offset: i64,
|
pub uncompressed_offset: i64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
impl Index {
|
impl Index {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
@@ -60,14 +59,6 @@ impl Index {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
fn reset(&mut self, max_block: usize) {
|
|
||||||
self.est_block_uncomp = max_block as i64;
|
|
||||||
self.total_compressed = -1;
|
|
||||||
self.total_uncompressed = -1;
|
|
||||||
self.info.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn len(&self) -> usize {
|
pub fn len(&self) -> usize {
|
||||||
self.info.len()
|
self.info.len()
|
||||||
}
|
}
|
||||||
@@ -511,47 +502,6 @@ fn read_varint(buf: &[u8]) -> io::Result<(i64, usize)> {
|
|||||||
Err(io::Error::new(io::ErrorKind::UnexpectedEof, "unexpected EOF"))
|
Err(io::Error::new(io::ErrorKind::UnexpectedEof, "unexpected EOF"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper functions for index header manipulation
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn remove_index_headers(b: &[u8]) -> Option<&[u8]> {
|
|
||||||
if b.len() < 4 + S2_INDEX_TRAILER.len() {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Skip size
|
|
||||||
let b = &b[4..];
|
|
||||||
|
|
||||||
// Check trailer
|
|
||||||
if !b.starts_with(S2_INDEX_TRAILER) {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
Some(&b[S2_INDEX_TRAILER.len()..])
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn restore_index_headers(in_data: &[u8]) -> Vec<u8> {
|
|
||||||
if in_data.is_empty() {
|
|
||||||
return Vec::new();
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut b = Vec::with_capacity(4 + S2_INDEX_HEADER.len() + in_data.len() + S2_INDEX_TRAILER.len() + 4);
|
|
||||||
b.extend_from_slice(&[0x50, 0x2A, 0x4D, 0x18]);
|
|
||||||
b.extend_from_slice(S2_INDEX_HEADER);
|
|
||||||
b.extend_from_slice(in_data);
|
|
||||||
|
|
||||||
let total_size = (b.len() + 4 + S2_INDEX_TRAILER.len()) as u32;
|
|
||||||
b.extend_from_slice(&total_size.to_le_bytes());
|
|
||||||
b.extend_from_slice(S2_INDEX_TRAILER);
|
|
||||||
|
|
||||||
let chunk_len = b.len() - 4;
|
|
||||||
b[1] = chunk_len as u8;
|
|
||||||
b[2] = (chunk_len >> 8) as u8;
|
|
||||||
b[3] = (chunk_len >> 16) as u8;
|
|
||||||
|
|
||||||
b
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
@@ -206,7 +206,6 @@ async fn setup_isolated_test_env(init_expiry: bool) -> (Vec<PathBuf>, Arc<ECStor
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Test helper: Create a test bucket
|
/// Test helper: Create a test bucket
|
||||||
#[allow(dead_code)]
|
|
||||||
async fn create_test_bucket(ecstore: &Arc<ECStore>, bucket_name: &str) {
|
async fn create_test_bucket(ecstore: &Arc<ECStore>, bucket_name: &str) {
|
||||||
(**ecstore)
|
(**ecstore)
|
||||||
.make_bucket(bucket_name, &Default::default())
|
.make_bucket(bucket_name, &Default::default())
|
||||||
@@ -251,7 +250,6 @@ async fn modeled_versioned_delete_opts(bucket: &str, object: &str) -> ObjectOpti
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Test helper: Set bucket lifecycle configuration
|
/// Test helper: Set bucket lifecycle configuration
|
||||||
#[allow(dead_code)]
|
|
||||||
async fn set_bucket_lifecycle(bucket_name: &str) -> Result<(), Box<dyn std::error::Error>> {
|
async fn set_bucket_lifecycle(bucket_name: &str) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
// Create a simple lifecycle configuration XML with 0 days expiry for immediate testing
|
// Create a simple lifecycle configuration XML with 0 days expiry for immediate testing
|
||||||
let lifecycle_xml = r#"<?xml version="1.0" encoding="UTF-8"?>
|
let lifecycle_xml = r#"<?xml version="1.0" encoding="UTF-8"?>
|
||||||
@@ -274,7 +272,6 @@ async fn set_bucket_lifecycle(bucket_name: &str) -> Result<(), Box<dyn std::erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Test helper: Set bucket lifecycle configuration
|
/// Test helper: Set bucket lifecycle configuration
|
||||||
#[allow(dead_code)]
|
|
||||||
async fn set_bucket_lifecycle_deletemarker(bucket_name: &str) -> Result<(), Box<dyn std::error::Error>> {
|
async fn set_bucket_lifecycle_deletemarker(bucket_name: &str) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
// Create lifecycle rule that targets delete-marker cleanup only.
|
// Create lifecycle rule that targets delete-marker cleanup only.
|
||||||
// Keep Expiration.Days unset to avoid expiring live transitioned object versions.
|
// Keep Expiration.Days unset to avoid expiring live transitioned object versions.
|
||||||
@@ -297,7 +294,6 @@ async fn set_bucket_lifecycle_deletemarker(bucket_name: &str) -> Result<(), Box<
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
async fn set_bucket_lifecycle_delmarker_expiration(bucket_name: &str, days: i64) -> Result<(), Box<dyn std::error::Error>> {
|
async fn set_bucket_lifecycle_delmarker_expiration(bucket_name: &str, days: i64) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let lifecycle_xml = format!(
|
let lifecycle_xml = format!(
|
||||||
r#"<?xml version="1.0" encoding="UTF-8"?>
|
r#"<?xml version="1.0" encoding="UTF-8"?>
|
||||||
@@ -320,7 +316,6 @@ async fn set_bucket_lifecycle_delmarker_expiration(bucket_name: &str, days: i64)
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
async fn set_bucket_lifecycle_transition_with_tier(
|
async fn set_bucket_lifecycle_transition_with_tier(
|
||||||
bucket_name: &str,
|
bucket_name: &str,
|
||||||
storage_class: &str,
|
storage_class: &str,
|
||||||
@@ -368,7 +363,6 @@ async fn object_exists(ecstore: &Arc<ECStore>, bucket: &str, object: &str) -> bo
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Test helper: Check if object exists
|
/// Test helper: Check if object exists
|
||||||
#[allow(dead_code)]
|
|
||||||
async fn object_is_delete_marker(ecstore: &Arc<ECStore>, bucket: &str, object: &str) -> bool {
|
async fn object_is_delete_marker(ecstore: &Arc<ECStore>, bucket: &str, object: &str) -> bool {
|
||||||
if let Ok(oi) = (**ecstore).get_object_info(bucket, object, &ObjectOptions::default()).await {
|
if let Ok(oi) = (**ecstore).get_object_info(bucket, object, &ObjectOptions::default()).await {
|
||||||
println!("oi: {oi:?}");
|
println!("oi: {oi:?}");
|
||||||
@@ -379,7 +373,6 @@ async fn object_is_delete_marker(ecstore: &Arc<ECStore>, bucket: &str, object: &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
async fn wait_for_object_absence(ecstore: &Arc<ECStore>, bucket: &str, object: &str, timeout: Duration) -> bool {
|
async fn wait_for_object_absence(ecstore: &Arc<ECStore>, bucket: &str, object: &str, timeout: Duration) -> bool {
|
||||||
let deadline = tokio::time::Instant::now() + timeout;
|
let deadline = tokio::time::Instant::now() + timeout;
|
||||||
|
|
||||||
|
|||||||
@@ -428,7 +428,6 @@ pub fn parse_url(s: &str) -> Result<ParsedURL, NetError> {
|
|||||||
Ok(ParsedURL(uu))
|
Ok(ParsedURL(uu))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn parse_http_url(s: &str) -> Result<ParsedURL, NetError> {
|
pub fn parse_http_url(s: &str) -> Result<ParsedURL, NetError> {
|
||||||
let u = parse_url(s)?;
|
let u = parse_url(s)?;
|
||||||
match u.0.scheme() {
|
match u.0.scheme() {
|
||||||
@@ -437,7 +436,6 @@ pub fn parse_http_url(s: &str) -> Result<ParsedURL, NetError> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn is_network_or_host_down(err: &std::io::Error, expect_timeouts: bool) -> bool {
|
pub fn is_network_or_host_down(err: &std::io::Error, expect_timeouts: bool) -> bool {
|
||||||
if err.kind() == std::io::ErrorKind::TimedOut {
|
if err.kind() == std::io::ErrorKind::TimedOut {
|
||||||
return !expect_timeouts;
|
return !expect_timeouts;
|
||||||
@@ -449,12 +447,10 @@ pub fn is_network_or_host_down(err: &std::io::Error, expect_timeouts: bool) -> b
|
|||||||
|| err_str.contains("use of closed network connection")
|
|| err_str.contains("use of closed network connection")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn is_conn_reset_err(err: &std::io::Error) -> bool {
|
pub fn is_conn_reset_err(err: &std::io::Error) -> bool {
|
||||||
err.to_string().contains("connection reset by peer") || matches!(err.raw_os_error(), Some(libc::ECONNRESET))
|
err.to_string().contains("connection reset by peer") || matches!(err.raw_os_error(), Some(libc::ECONNRESET))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn is_conn_refused_err(err: &std::io::Error) -> bool {
|
pub fn is_conn_refused_err(err: &std::io::Error) -> bool {
|
||||||
err.to_string().contains("connection refused") || matches!(err.raw_os_error(), Some(libc::ECONNREFUSED))
|
err.to_string().contains("connection refused") || matches!(err.raw_os_error(), Some(libc::ECONNREFUSED))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user