mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-26 08:18:18 +00:00
build(toolchain): switch Rust channel to stable (#4775)
* Change Rust toolchain channel to stable Signed-off-by: houseme <housemecn@gmail.com> * style: apply clippy --fix and cargo fix lint suggestions Run `cargo clippy --fix --all-targets --all-features` and `cargo fix --lib --all-targets` across the workspace, then resolve the remaining warnings by hand: - collapse needless borrows in `format!` args, prefer `?` over explicit early returns, and use `.values()` / `.flatten()` iterator adapters - rewrite the `Md5` scan loop via `manual_flatten` and re-indent the `select!` macro body (rustfmt skips macro interiors) - annotate the intentional dead-code `Md5` inherent methods (constructed only by the test factory) with `#[allow(dead_code)]` Behavior is unchanged. Co-Authored-By: heihutu <heihutu@gmail.com> --------- Signed-off-by: houseme <housemecn@gmail.com> Co-authored-by: heihutu <heihutu@gmail.com>
This commit is contained in:
@@ -291,6 +291,7 @@ struct Md5 {
|
|||||||
hasher: md5::Md5,
|
hasher: md5::Md5,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
impl Md5 {
|
impl Md5 {
|
||||||
fn update(&mut self, bytes: &[u8]) {
|
fn update(&mut self, bytes: &[u8]) {
|
||||||
use md5::Digest;
|
use md5::Digest;
|
||||||
|
|||||||
@@ -434,7 +434,7 @@ impl ReplicationAllStats {
|
|||||||
if self.replica_size != 0 && self.replica_count != 0 {
|
if self.replica_size != 0 && self.replica_count != 0 {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (_, v) in self.targets.iter() {
|
for v in self.targets.values() {
|
||||||
if !v.empty() {
|
if !v.empty() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2312,7 +2312,7 @@ pub fn gen_transition_objname(bucket: &str) -> Result<String, Error> {
|
|||||||
let mut hasher = Sha256::new();
|
let mut hasher = Sha256::new();
|
||||||
hasher.update(format!("{}/{}", runtime_sources::deployment_id().unwrap_or_default(), bucket).as_bytes());
|
hasher.update(format!("{}/{}", runtime_sources::deployment_id().unwrap_or_default(), bucket).as_bytes());
|
||||||
let hash = rustfs_utils::crypto::hex(hasher.finalize().as_slice());
|
let hash = rustfs_utils::crypto::hex(hasher.finalize().as_slice());
|
||||||
let obj = format!("{}/{}/{}/{}", &hash[0..16], &us[0..2], &us[2..4], &us);
|
let obj = format!("{}/{}/{}/{}", &hash[0..16], &us[0..2], &us[2..4], us);
|
||||||
Ok(obj)
|
Ok(obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -250,10 +250,9 @@ pub async fn check_object_lock_for_deletion(
|
|||||||
let now = objectlock::utc_now_ntp();
|
let now = objectlock::utc_now_ntp();
|
||||||
let retain_until = if let Some(days) = default_retention.days {
|
let retain_until = if let Some(days) = default_retention.days {
|
||||||
mod_time.saturating_add(time::Duration::days(days as i64))
|
mod_time.saturating_add(time::Duration::days(days as i64))
|
||||||
} else if let Some(years) = default_retention.years {
|
|
||||||
add_years(mod_time, years)
|
|
||||||
} else {
|
} else {
|
||||||
return None; // No retention period specified
|
let years = default_retention.years?;
|
||||||
|
add_years(mod_time, years)
|
||||||
};
|
};
|
||||||
|
|
||||||
if retain_until.unix_timestamp() > now.unix_timestamp()
|
if retain_until.unix_timestamp() > now.unix_timestamp()
|
||||||
|
|||||||
@@ -1405,7 +1405,7 @@ pub(crate) async fn schedule_replication_delete(dv: DeletedObjectReplicationInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let (Some(rs), Some(stats)) = (dv.delete_object.replication_state, runtime_sources::replication_stats()) {
|
if let (Some(rs), Some(stats)) = (dv.delete_object.replication_state, runtime_sources::replication_stats()) {
|
||||||
for (k, _v) in rs.targets.iter() {
|
for k in rs.targets.keys() {
|
||||||
let ri = ReplicatedTargetInfo {
|
let ri = ReplicatedTargetInfo {
|
||||||
arn: k.clone(),
|
arn: k.clone(),
|
||||||
size: 0,
|
size: 0,
|
||||||
|
|||||||
@@ -1348,7 +1348,7 @@ pub async fn replicate_delete<S: ReplicationStorage>(dobj: DeletedObjectReplicat
|
|||||||
let mut join_set = JoinSet::new();
|
let mut join_set = JoinSet::new();
|
||||||
|
|
||||||
// Process each target
|
// Process each target
|
||||||
for (_, tgt_entry) in dsc.targets_map.iter() {
|
for tgt_entry in dsc.targets_map.values() {
|
||||||
// Skip targets that should not be replicated
|
// Skip targets that should not be replicated
|
||||||
if !tgt_entry.replicate {
|
if !tgt_entry.replicate {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ impl ReplicationStats {
|
|||||||
let now = SystemTime::now();
|
let now = SystemTime::now();
|
||||||
|
|
||||||
let cache_read = cache.read().await;
|
let cache_read = cache.read().await;
|
||||||
for (_bucket, stats) in cache_read.iter() {
|
for stats in cache_read.values() {
|
||||||
for stat in stats.stats.values() {
|
for stat in stats.stats.values() {
|
||||||
// Now we can update the moving averages using interior mutability
|
// Now we can update the moving averages using interior mutability
|
||||||
stat.xfer_rate_lrg.measure.update_exponential_moving_average(now);
|
stat.xfer_rate_lrg.measure.update_exponential_moving_average(now);
|
||||||
|
|||||||
@@ -1203,7 +1203,7 @@ pub async fn save_data_usage_cache(cache: &DataUsageCache, name: &str) -> crate:
|
|||||||
|
|
||||||
let name_clone = name.clone();
|
let name_clone = name.clone();
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
let _ = save_config(store_clone, &format!("{}{}", &name_clone, ".bkp"), buf_clone).await;
|
let _ = save_config(store_clone, &format!("{}{}", name_clone, ".bkp"), buf_clone).await;
|
||||||
});
|
});
|
||||||
save_config(store, &name, buf).await?;
|
save_config(store, &name, buf).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -5135,12 +5135,11 @@ impl LocalDisk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let metadata =
|
let metadata =
|
||||||
with_walk_stall_timeout(stall, self.read_metadata(bucket, format!("{}/{}", ¤t, &entry).as_str()))
|
with_walk_stall_timeout(stall, self.read_metadata(bucket, format!("{}/{}", current, entry).as_str())).await?;
|
||||||
.await?;
|
|
||||||
|
|
||||||
let entry = entry.strip_suffix(STORAGE_FORMAT_FILE).unwrap_or_default().to_owned();
|
let entry = entry.strip_suffix(STORAGE_FORMAT_FILE).unwrap_or_default().to_owned();
|
||||||
let name = entry.trim_end_matches(SLASH_SEPARATOR);
|
let name = entry.trim_end_matches(SLASH_SEPARATOR);
|
||||||
let name = decode_dir_object(format!("{}/{}", ¤t, &name).as_str());
|
let name = decode_dir_object(format!("{}/{}", current, name).as_str());
|
||||||
|
|
||||||
if opts.limit <= 0 || metadata_counts_toward_limit(&metadata) {
|
if opts.limit <= 0 || metadata_counts_toward_limit(&metadata) {
|
||||||
*objs_returned += 1;
|
*objs_returned += 1;
|
||||||
@@ -5252,7 +5251,7 @@ impl LocalDisk {
|
|||||||
meta.name.push_str(GLOBAL_DIR_SUFFIX_WITH_SLASH);
|
meta.name.push_str(GLOBAL_DIR_SUFFIX_WITH_SLASH);
|
||||||
}
|
}
|
||||||
|
|
||||||
let fname = format!("{}/{}", &meta.name, STORAGE_FORMAT_FILE);
|
let fname = format!("{}/{}", meta.name, STORAGE_FORMAT_FILE);
|
||||||
|
|
||||||
match with_walk_stall_timeout(stall, self.read_metadata(&opts.bucket, fname.as_str())).await {
|
match with_walk_stall_timeout(stall, self.read_metadata(&opts.bucket, fname.as_str())).await {
|
||||||
Ok(res) => {
|
Ok(res) => {
|
||||||
@@ -6647,8 +6646,8 @@ impl DiskAPI for LocalDisk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// xl.meta path
|
// xl.meta path
|
||||||
let src_file_path = self.get_object_path(src_volume, format!("{}/{}", &src_path, STORAGE_FORMAT_FILE).as_str())?;
|
let src_file_path = self.get_object_path(src_volume, format!("{}/{}", src_path, STORAGE_FORMAT_FILE).as_str())?;
|
||||||
let dst_file_path = self.get_object_path(dst_volume, format!("{}/{}", &dst_path, STORAGE_FORMAT_FILE).as_str())?;
|
let dst_file_path = self.get_object_path(dst_volume, format!("{}/{}", dst_path, STORAGE_FORMAT_FILE).as_str())?;
|
||||||
|
|
||||||
// data_dir path
|
// data_dir path
|
||||||
let has_data_dir_path = {
|
let has_data_dir_path = {
|
||||||
@@ -6664,11 +6663,11 @@ impl DiskAPI for LocalDisk {
|
|||||||
if let Some(data_dir) = has_data_dir {
|
if let Some(data_dir) = has_data_dir {
|
||||||
let src_data_path = self.get_object_path(
|
let src_data_path = self.get_object_path(
|
||||||
src_volume,
|
src_volume,
|
||||||
rustfs_utils::path::retain_slash(format!("{}/{}", &src_path, data_dir).as_str()).as_str(),
|
rustfs_utils::path::retain_slash(format!("{}/{}", src_path, data_dir).as_str()).as_str(),
|
||||||
)?;
|
)?;
|
||||||
let dst_data_path = self.get_object_path(
|
let dst_data_path = self.get_object_path(
|
||||||
dst_volume,
|
dst_volume,
|
||||||
rustfs_utils::path::retain_slash(format!("{}/{}", &dst_path, data_dir).as_str()).as_str(),
|
rustfs_utils::path::retain_slash(format!("{}/{}", dst_path, data_dir).as_str()).as_str(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Some((src_data_path, dst_data_path))
|
Some((src_data_path, dst_data_path))
|
||||||
@@ -6776,7 +6775,7 @@ impl DiskAPI for LocalDisk {
|
|||||||
// rename below to report through the existing rollback path. Payload
|
// rename below to report through the existing rollback path. Payload
|
||||||
// durability is kept by both strict and relaxed.
|
// durability is kept by both strict and relaxed.
|
||||||
// Bound to a local so the borrow lives across the join! below.
|
// Bound to a local so the borrow lives across the join! below.
|
||||||
let tmp_meta_rel_path = format!("{}/{}", &src_path, STORAGE_FORMAT_FILE);
|
let tmp_meta_rel_path = format!("{}/{}", src_path, STORAGE_FORMAT_FILE);
|
||||||
let tmp_meta_write =
|
let tmp_meta_write =
|
||||||
self.write_all_private(src_volume, &tmp_meta_rel_path, new_dst_buf.into(), tmp_meta_sync, src_file_parent);
|
self.write_all_private(src_volume, &tmp_meta_rel_path, new_dst_buf.into(), tmp_meta_sync, src_file_parent);
|
||||||
let shard_sync = async {
|
let shard_sync = async {
|
||||||
@@ -6850,7 +6849,7 @@ impl DiskAPI for LocalDisk {
|
|||||||
&& let Err(err) = self
|
&& let Err(err) = self
|
||||||
.write_all_private(
|
.write_all_private(
|
||||||
dst_volume,
|
dst_volume,
|
||||||
&format!("{}/{}/{}", &dst_path, &old_data_dir, STORAGE_FORMAT_FILE_BACKUP),
|
&format!("{}/{}/{}", dst_path, old_data_dir, STORAGE_FORMAT_FILE_BACKUP),
|
||||||
dst_buf.clone().into(),
|
dst_buf.clone().into(),
|
||||||
backup_sync,
|
backup_sync,
|
||||||
&skip_parent,
|
&skip_parent,
|
||||||
@@ -7326,7 +7325,7 @@ impl DiskAPI for LocalDisk {
|
|||||||
check_path_length(file_path.to_string_lossy().as_ref())?;
|
check_path_length(file_path.to_string_lossy().as_ref())?;
|
||||||
|
|
||||||
let buf = self
|
let buf = self
|
||||||
.read_all(volume, format!("{}/{}", &path, STORAGE_FORMAT_FILE).as_str())
|
.read_all(volume, format!("{}/{}", path, STORAGE_FORMAT_FILE).as_str())
|
||||||
.await
|
.await
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
if e == DiskError::FileNotFound && fi.version_id.is_some() {
|
if e == DiskError::FileNotFound && fi.version_id.is_some() {
|
||||||
@@ -7750,7 +7749,7 @@ impl DiskAPI for LocalDisk {
|
|||||||
let mut found = 0;
|
let mut found = 0;
|
||||||
|
|
||||||
for v in req.files.iter() {
|
for v in req.files.iter() {
|
||||||
let fpath = self.get_object_path(&req.bucket, format!("{}/{}", &req.prefix, v).as_str())?;
|
let fpath = self.get_object_path(&req.bucket, format!("{}/{}", req.prefix, v).as_str())?;
|
||||||
let mut res = ReadMultipleResp {
|
let mut res = ReadMultipleResp {
|
||||||
bucket: req.bucket.clone(),
|
bucket: req.bucket.clone(),
|
||||||
prefix: req.prefix.clone(),
|
prefix: req.prefix.clone(),
|
||||||
@@ -12389,7 +12388,7 @@ mod test {
|
|||||||
.resolve_abs_path(Path::new(RUSTFS_META_TMP_DELETED_BUCKET))
|
.resolve_abs_path(Path::new(RUSTFS_META_TMP_DELETED_BUCKET))
|
||||||
.expect("operation should succeed");
|
.expect("operation should succeed");
|
||||||
|
|
||||||
println!("ppp :{:?}", &tmpp);
|
println!("ppp :{:?}", tmpp);
|
||||||
|
|
||||||
let volumes = vec!["a123", "b123", "c123"];
|
let volumes = vec!["a123", "b123", "c123"];
|
||||||
|
|
||||||
@@ -12413,7 +12412,7 @@ mod test {
|
|||||||
.resolve_abs_path(Path::new(RUSTFS_META_TMP_DELETED_BUCKET))
|
.resolve_abs_path(Path::new(RUSTFS_META_TMP_DELETED_BUCKET))
|
||||||
.expect("operation should succeed");
|
.expect("operation should succeed");
|
||||||
|
|
||||||
println!("ppp :{:?}", &tmpp);
|
println!("ppp :{:?}", tmpp);
|
||||||
|
|
||||||
let volumes = vec!["a123", "b123", "c123"];
|
let volumes = vec!["a123", "b123", "c123"];
|
||||||
|
|
||||||
|
|||||||
@@ -423,7 +423,7 @@ fn get_set_indexes<T: AsRef<str>>(
|
|||||||
if !has_set_drive_count {
|
if !has_set_drive_count {
|
||||||
return Err(Error::other(format!(
|
return Err(Error::other(format!(
|
||||||
"Invalid set drive count {}. Acceptable values for {:?} number drives are {:?}",
|
"Invalid set drive count {}. Acceptable values for {:?} number drives are {:?}",
|
||||||
set_drive_count, common_size, &set_counts
|
set_drive_count, common_size, set_counts
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
set_drive_count
|
set_drive_count
|
||||||
@@ -432,7 +432,7 @@ fn get_set_indexes<T: AsRef<str>>(
|
|||||||
if set_counts.is_empty() {
|
if set_counts.is_empty() {
|
||||||
return Err(Error::other(format!(
|
return Err(Error::other(format!(
|
||||||
"No symmetric distribution detected with input endpoints , drives {} cannot be spread symmetrically by any supported erasure set sizes {:?}",
|
"No symmetric distribution detected with input endpoints , drives {} cannot be spread symmetrically by any supported erasure set sizes {:?}",
|
||||||
common_size, &set_counts
|
common_size, set_counts
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
// Final set size with all the symmetry accounted for.
|
// Final set size with all the symmetry accounted for.
|
||||||
|
|||||||
@@ -2209,7 +2209,7 @@ mod test {
|
|||||||
if Some(&pools.setup_type) != test_case.expected_setup_type.as_ref() {
|
if Some(&pools.setup_type) != test_case.expected_setup_type.as_ref() {
|
||||||
panic!(
|
panic!(
|
||||||
"Test {}: setupType: expected = {:?}, got = {:?}",
|
"Test {}: setupType: expected = {:?}, got = {:?}",
|
||||||
test_case.num, test_case.expected_setup_type, &pools.setup_type
|
test_case.num, test_case.expected_setup_type, pools.setup_type
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ impl SetDisks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !latest_meta.deleted && !latest_meta.is_remote() {
|
if !latest_meta.deleted && !latest_meta.is_remote() {
|
||||||
for (_, part_errs) in data_errs_by_part.iter() {
|
for part_errs in data_errs_by_part.values() {
|
||||||
if count_part_not_success(part_errs) > latest_meta.erasure.parity_blocks {
|
if count_part_not_success(part_errs) > latest_meta.erasure.parity_blocks {
|
||||||
cannot_heal = true;
|
cannot_heal = true;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ use uuid::Uuid;
|
|||||||
use xxhash_rust::xxh64;
|
use xxhash_rust::xxh64;
|
||||||
|
|
||||||
// XL header specifies the format
|
// XL header specifies the format
|
||||||
pub static XL_FILE_HEADER: [u8; 4] = [b'X', b'L', b'2', b' '];
|
pub static XL_FILE_HEADER: [u8; 4] = *b"XL2 ";
|
||||||
// pub static XL_FILE_VERSION_CURRENT: [u8; 4] = [0; 4];
|
// pub static XL_FILE_VERSION_CURRENT: [u8; 4] = [0; 4];
|
||||||
|
|
||||||
// Current version being written.
|
// Current version being written.
|
||||||
|
|||||||
@@ -2223,16 +2223,44 @@ impl HealManager {
|
|||||||
let mut endpoints = Vec::new();
|
let mut endpoints = Vec::new();
|
||||||
let mut seen_returning_sets = HashSet::new();
|
let mut seen_returning_sets = HashSet::new();
|
||||||
let local_disk_map = local_disk_map_read().await;
|
let local_disk_map = local_disk_map_read().await;
|
||||||
for (_, disk_opt) in local_disk_map.iter() {
|
for disk in local_disk_map.values().flatten() {
|
||||||
if let Some(disk) = disk_opt {
|
let endpoint = disk.endpoint();
|
||||||
let endpoint = disk.endpoint();
|
let runtime_state = disk.runtime_state();
|
||||||
let runtime_state = disk.runtime_state();
|
let set_disk_id =
|
||||||
let set_disk_id =
|
crate::heal::utils::format_set_disk_id_from_i32(endpoint.pool_idx, endpoint.set_idx);
|
||||||
crate::heal::utils::format_set_disk_id_from_i32(endpoint.pool_idx, endpoint.set_idx);
|
|
||||||
|
|
||||||
// detect unformatted disk via get_disk_id()
|
// detect unformatted disk via get_disk_id()
|
||||||
match disk.get_disk_id().await {
|
match disk.get_disk_id().await {
|
||||||
Err(DiskError::UnformattedDisk) => {
|
Err(DiskError::UnformattedDisk) => {
|
||||||
|
candidate_count += 1;
|
||||||
|
debug!(
|
||||||
|
target: "rustfs::heal::manager",
|
||||||
|
event = EVENT_HEAL_AUTO_SCAN_DISK,
|
||||||
|
component = LOG_COMPONENT_HEAL,
|
||||||
|
subsystem = LOG_SUBSYSTEM_DISK_SCANNER,
|
||||||
|
endpoint = %endpoint,
|
||||||
|
disk_state = "unformatted",
|
||||||
|
"Heal auto-scan candidate detected"
|
||||||
|
);
|
||||||
|
endpoints.push(endpoint);
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
warn!(
|
||||||
|
target: "rustfs::heal::manager",
|
||||||
|
event = EVENT_HEAL_AUTO_SCAN_DISK,
|
||||||
|
component = LOG_COMPONENT_HEAL,
|
||||||
|
subsystem = LOG_SUBSYSTEM_DISK_SCANNER,
|
||||||
|
endpoint = %endpoint,
|
||||||
|
disk_state = "check_failed",
|
||||||
|
error = ?e,
|
||||||
|
"Heal auto-scan disk inspection failed"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Ok(_) => {
|
||||||
|
if runtime_state.as_str() == "returning"
|
||||||
|
&& let Some(set_disk_id) = set_disk_id
|
||||||
|
&& seen_returning_sets.insert(set_disk_id.clone())
|
||||||
|
{
|
||||||
candidate_count += 1;
|
candidate_count += 1;
|
||||||
debug!(
|
debug!(
|
||||||
target: "rustfs::heal::manager",
|
target: "rustfs::heal::manager",
|
||||||
@@ -2240,42 +2268,12 @@ impl HealManager {
|
|||||||
component = LOG_COMPONENT_HEAL,
|
component = LOG_COMPONENT_HEAL,
|
||||||
subsystem = LOG_SUBSYSTEM_DISK_SCANNER,
|
subsystem = LOG_SUBSYSTEM_DISK_SCANNER,
|
||||||
endpoint = %endpoint,
|
endpoint = %endpoint,
|
||||||
disk_state = "unformatted",
|
set_disk_id,
|
||||||
"Heal auto-scan candidate detected"
|
disk_state = "returning",
|
||||||
|
"Heal auto-scan returning disk candidate detected"
|
||||||
);
|
);
|
||||||
endpoints.push(endpoint);
|
endpoints.push(endpoint);
|
||||||
}
|
}
|
||||||
Err(e) => {
|
|
||||||
warn!(
|
|
||||||
target: "rustfs::heal::manager",
|
|
||||||
event = EVENT_HEAL_AUTO_SCAN_DISK,
|
|
||||||
component = LOG_COMPONENT_HEAL,
|
|
||||||
subsystem = LOG_SUBSYSTEM_DISK_SCANNER,
|
|
||||||
endpoint = %endpoint,
|
|
||||||
disk_state = "check_failed",
|
|
||||||
error = ?e,
|
|
||||||
"Heal auto-scan disk inspection failed"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Ok(_) => {
|
|
||||||
if runtime_state.as_str() == "returning"
|
|
||||||
&& let Some(set_disk_id) = set_disk_id
|
|
||||||
&& seen_returning_sets.insert(set_disk_id.clone())
|
|
||||||
{
|
|
||||||
candidate_count += 1;
|
|
||||||
debug!(
|
|
||||||
target: "rustfs::heal::manager",
|
|
||||||
event = EVENT_HEAL_AUTO_SCAN_DISK,
|
|
||||||
component = LOG_COMPONENT_HEAL,
|
|
||||||
subsystem = LOG_SUBSYSTEM_DISK_SCANNER,
|
|
||||||
endpoint = %endpoint,
|
|
||||||
set_disk_id,
|
|
||||||
disk_state = "returning",
|
|
||||||
"Heal auto-scan returning disk candidate detected"
|
|
||||||
);
|
|
||||||
endpoints.push(endpoint);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -695,7 +695,7 @@ where
|
|||||||
let mut user_exists = false;
|
let mut user_exists = false;
|
||||||
let mut ret = Vec::new();
|
let mut ret = Vec::new();
|
||||||
|
|
||||||
for (_, v) in users.iter() {
|
for v in users.values() {
|
||||||
let is_derived = v.credentials.is_service_account() || v.credentials.is_temp();
|
let is_derived = v.credentials.is_service_account() || v.credentials.is_temp();
|
||||||
|
|
||||||
if !is_derived && v.credentials.access_key.as_str() == access_key {
|
if !is_derived && v.credentials.access_key.as_str() == access_key {
|
||||||
@@ -713,7 +713,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
let sts_accounts = Arc::clone(&cache.sts_accounts);
|
let sts_accounts = Arc::clone(&cache.sts_accounts);
|
||||||
for (_, v) in sts_accounts.iter() {
|
for v in sts_accounts.values() {
|
||||||
if v.credentials.parent_user == access_key {
|
if v.credentials.parent_user == access_key {
|
||||||
user_exists = true;
|
user_exists = true;
|
||||||
if v.credentials.is_temp() && !v.credentials.is_service_account() {
|
if v.credentials.is_temp() && !v.credentials.is_service_account() {
|
||||||
@@ -1384,7 +1384,7 @@ where
|
|||||||
let mut service_accounts_to_delete = Vec::new();
|
let mut service_accounts_to_delete = Vec::new();
|
||||||
let mut temp_accounts_to_delete = HashSet::new();
|
let mut temp_accounts_to_delete = HashSet::new();
|
||||||
let cache = self.cache.snapshot();
|
let cache = self.cache.snapshot();
|
||||||
for (_, v) in cache.users.iter() {
|
for v in cache.users.values() {
|
||||||
let u = &v.credentials;
|
let u = &v.credentials;
|
||||||
if u.parent_user.as_str() == access_key {
|
if u.parent_user.as_str() == access_key {
|
||||||
if u.is_service_account() {
|
if u.is_service_account() {
|
||||||
@@ -1396,7 +1396,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (_, v) in cache.sts_accounts.iter() {
|
for v in cache.sts_accounts.values() {
|
||||||
let u = &v.credentials;
|
let u = &v.credentials;
|
||||||
if u.parent_user.as_str() == access_key {
|
if u.parent_user.as_str() == access_key {
|
||||||
temp_accounts_to_delete.insert(u.access_key.clone());
|
temp_accounts_to_delete.insert(u.access_key.clone());
|
||||||
@@ -1972,14 +1972,14 @@ where
|
|||||||
let mut temp_accounts_to_delete = HashSet::new();
|
let mut temp_accounts_to_delete = HashSet::new();
|
||||||
if user_type == UserType::Reg {
|
if user_type == UserType::Reg {
|
||||||
let cache = self.cache.snapshot();
|
let cache = self.cache.snapshot();
|
||||||
for (_, v) in cache.users.iter() {
|
for v in cache.users.values() {
|
||||||
let u = &v.credentials;
|
let u = &v.credentials;
|
||||||
if u.parent_user.as_str() == name && u.is_service_account() {
|
if u.parent_user.as_str() == name && u.is_service_account() {
|
||||||
service_accounts_to_delete.push(u.access_key.clone());
|
service_accounts_to_delete.push(u.access_key.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (_, u) in cache.sts_accounts.iter() {
|
for u in cache.sts_accounts.values() {
|
||||||
let u = &u.credentials;
|
let u = &u.credentials;
|
||||||
if u.parent_user.as_str() == name {
|
if u.parent_user.as_str() == name {
|
||||||
temp_accounts_to_delete.insert(u.access_key.clone());
|
temp_accounts_to_delete.insert(u.access_key.clone());
|
||||||
|
|||||||
@@ -1251,7 +1251,7 @@ impl Store for ObjectStore {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
for (_, v) in items_cache.iter() {
|
for v in items_cache.values() {
|
||||||
let parent = v.credentials.parent_user.clone();
|
let parent = v.credentials.parent_user.clone();
|
||||||
if !user_items_cache.contains_key(&parent) {
|
if !user_items_cache.contains_key(&parent) {
|
||||||
debug!(user = %parent, "IAM STS parent policy loaded");
|
debug!(user = %parent, "IAM STS parent policy loaded");
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ where
|
|||||||
}
|
}
|
||||||
*this.buffer = out;
|
*this.buffer = out;
|
||||||
*this.pos = 0;
|
*this.pos = 0;
|
||||||
this.temp_buffer.truncate(0); // More efficient way to clear
|
this.temp_buffer.clear(); // More efficient way to clear
|
||||||
let to_copy = min(buf.remaining(), this.buffer.len());
|
let to_copy = min(buf.remaining(), this.buffer.len());
|
||||||
buf.put_slice(&this.buffer[..to_copy]);
|
buf.put_slice(&this.buffer[..to_copy]);
|
||||||
*this.pos += to_copy;
|
*this.pos += to_copy;
|
||||||
|
|||||||
@@ -178,9 +178,9 @@ impl IpUtils {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
match Self::parse_ip_or_cidr(part) {
|
{
|
||||||
Ok(network) => networks.push(network),
|
let network = Self::parse_ip_or_cidr(part)?;
|
||||||
Err(e) => return Err(e),
|
networks.push(network)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ fn test_base64_encoding_decoding() {
|
|||||||
|
|
||||||
let encoded_string = base64_encode_url_safe_no_pad(original_uuid_timestamp.as_bytes());
|
let encoded_string = base64_encode_url_safe_no_pad(original_uuid_timestamp.as_bytes());
|
||||||
|
|
||||||
println!("Encoded: {}", &encoded_string);
|
println!("Encoded: {}", encoded_string);
|
||||||
|
|
||||||
let decoded_bytes = base64_decode_url_safe_no_pad(encoded_string.as_bytes()).expect("operation should succeed");
|
let decoded_bytes = base64_decode_url_safe_no_pad(encoded_string.as_bytes()).expect("operation should succeed");
|
||||||
let decoded_string = String::from_utf8(decoded_bytes).expect("operation should succeed");
|
let decoded_string = String::from_utf8(decoded_bytes).expect("operation should succeed");
|
||||||
|
|||||||
+1
-1
@@ -13,5 +13,5 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
[toolchain]
|
[toolchain]
|
||||||
channel = "1.96"
|
channel = "stable"
|
||||||
components = ["rustfmt", "clippy", "rust-src", "rust-analyzer"]
|
components = ["rustfmt", "clippy", "rust-src", "rust-analyzer"]
|
||||||
|
|||||||
@@ -786,7 +786,7 @@ impl Operation for StartDecommission {
|
|||||||
if let Some(first_idx) = pools_indices.first().copied()
|
if let Some(first_idx) = pools_indices.first().copied()
|
||||||
&& let Some(client) = decommission_peer_target(&endpoints, first_idx, "start decommission", audit)?
|
&& let Some(client) = decommission_peer_target(&endpoints, first_idx, "start decommission", audit)?
|
||||||
{
|
{
|
||||||
let pool_context = format!("pools {:?}", &pools_indices);
|
let pool_context = format!("pools {:?}", pools_indices);
|
||||||
client
|
client
|
||||||
.start_decommission(pools_indices.clone())
|
.start_decommission(pools_indices.clone())
|
||||||
.await
|
.await
|
||||||
@@ -819,7 +819,7 @@ impl Operation for StartDecommission {
|
|||||||
validate_start_decommission_guards(decommission_running, rebalance_running)?;
|
validate_start_decommission_guards(decommission_running, rebalance_running)?;
|
||||||
|
|
||||||
if !pools_indices.is_empty() {
|
if !pools_indices.is_empty() {
|
||||||
let pool_context = format!("pools {:?}", &pools_indices);
|
let pool_context = format!("pools {:?}", pools_indices);
|
||||||
store
|
store
|
||||||
.decommission(ctx.clone(), pools_indices.clone())
|
.decommission(ctx.clone(), pools_indices.clone())
|
||||||
.await
|
.await
|
||||||
|
|||||||
@@ -2538,7 +2538,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
let canonical_path = canonicalize_admin_path(req.uri.path());
|
let canonical_path = canonicalize_admin_path(req.uri.path());
|
||||||
let uri = format!("{}|{}", &req.method, canonical_path.as_ref());
|
let uri = format!("{}|{}", req.method, canonical_path.as_ref());
|
||||||
|
|
||||||
if let Ok(mat) = self.router.at(&uri) {
|
if let Ok(mat) = self.router.at(&uri) {
|
||||||
let op: &T = mat.value;
|
let op: &T = mat.value;
|
||||||
|
|||||||
Reference in New Issue
Block a user