mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-27 15:37:02 +00:00
refactor(ecstore): migrate mutable globals into ECStore struct fields (#3214)
* refactor(ecstore): migrate mutable globals into ECStore struct fields Phase 1 of global singleton consolidation. Move mutable globals from lazy_static into ECStore struct fields as the first step toward dependency injection and multi-instance support. New ECStore fields: - is_erasure, is_dist_erasure, is_erasure_sd (erasure type flags) - local_disk_map, local_disk_id_map, local_disk_set_drives - root_disk_threshold - tier_config_mgr, event_notifier, bucket_monitor New accessor methods: - is_erasure(), is_dist_erasure(), is_erasure_sd() - update_erasure_type() - tier_config_mgr(), event_notifier(), bucket_monitor() Global functions in global.rs preserved for backward compatibility. 1151 ecstore tests pass. * fix: address PR #3214 review comments - Sync ECStore fields from globals after init() - Enforce DistErasure => is_erasure invariant in update_erasure_type() - Change bucket_monitor from Option to OnceLock for deferred initialization - Restrict TypeLocalDiskSetDrives to pub(crate) - 1151 tests pass * fix: address PR #3150 review comments - Restore get_host_addr as best-effort wrapper (String return type) - Replace bare expect("err") with descriptive messages in unsigned trailer - Simplify aws-chunked header construction - 20 signer + 96 io-core tests pass * fix(ecstore): format store imports * fix(ecstore): keep migrated accessors in sync * fix(signer): preserve host fallback and unsigned trailer errors * fix(ecstore): defer migrated global accessors * fix(signer): box unsigned trailer signing errors * fix(ecstore): avoid lock awaits during sync * fix(ecstore): narrow phase one globals --------- Co-authored-by: houseme <housemecn@gmail.com>
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
|
||||
use super::*;
|
||||
use crate::bucket::{metadata::BUCKET_TABLE_RESERVED_PREFIX, utils::is_meta_bucketname};
|
||||
use crate::global::get_global_bucket_monitor;
|
||||
use crate::set_disk::get_lock_acquire_timeout;
|
||||
|
||||
fn should_override_created_from_metadata(created: OffsetDateTime) -> bool {
|
||||
|
||||
@@ -14,7 +14,10 @@
|
||||
|
||||
use super::*;
|
||||
use crate::error::is_err_decommission_running;
|
||||
use crate::global::is_first_cluster_node_local;
|
||||
use crate::global::{
|
||||
GLOBAL_EventNotifier, GLOBAL_LOCAL_DISK_ID_MAP, GLOBAL_LOCAL_DISK_MAP, GLOBAL_LOCAL_DISK_SET_DRIVES, GLOBAL_TierConfigMgr,
|
||||
get_global_bucket_monitor, is_dist_erasure, is_first_cluster_node_local,
|
||||
};
|
||||
|
||||
fn pool_first_endpoint_is_local(pool: &crate::endpoints::PoolEndpoints) -> bool {
|
||||
pool.endpoints.as_ref().first().is_some_and(|endpoint| endpoint.is_local)
|
||||
@@ -244,6 +247,13 @@ impl ECStore {
|
||||
pool_meta: RwLock::new(pool_meta),
|
||||
rebalance_meta: RwLock::new(None),
|
||||
decommission_cancelers,
|
||||
|
||||
local_disk_map: GLOBAL_LOCAL_DISK_MAP.clone(),
|
||||
local_disk_id_map: GLOBAL_LOCAL_DISK_ID_MAP.clone(),
|
||||
local_disk_set_drives: GLOBAL_LOCAL_DISK_SET_DRIVES.clone(),
|
||||
tier_config_mgr: GLOBAL_TierConfigMgr.clone(),
|
||||
event_notifier: GLOBAL_EventNotifier.clone(),
|
||||
bucket_monitor: OnceLock::new(),
|
||||
});
|
||||
|
||||
// Only set it when the global deployment ID is not yet configured
|
||||
@@ -275,6 +285,10 @@ impl ECStore {
|
||||
|
||||
set_object_layer(ec.clone()).await;
|
||||
|
||||
if let Some(monitor) = get_global_bucket_monitor() {
|
||||
let _ = ec.bucket_monitor.set(monitor);
|
||||
}
|
||||
|
||||
Ok(ec)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user