support mc admin heal command

Signed-off-by: mujunxiang <1948535941@qq.com>
This commit is contained in:
mujunxiang
2024-11-30 21:29:37 +08:00
parent 26c5ebea53
commit 1a418c74b4
19 changed files with 388 additions and 142 deletions
+9 -13
View File
@@ -635,7 +635,7 @@ impl ECStore {
Err(to_object_err(Error::new(DiskError::FileNotFound), vec![bucket, object]))
}
async fn pools_with_object(&self, pools: &Vec<PoolObjInfo>, opts: &ObjectOptions) -> Vec<PoolErr> {
async fn pools_with_object(&self, pools: &[PoolObjInfo], opts: &ObjectOptions) -> Vec<PoolErr> {
let mut errs = Vec::new();
let pool_meta = self.pool_meta.read().await;
for pool in pools.iter() {
@@ -1183,7 +1183,7 @@ impl StorageAPI for ECStore {
}
let backend = self.backend_info().await;
StorageInfo { backend: backend, disks }
StorageInfo { backend, disks }
}
async fn list_bucket(&self, opts: &BucketOptions) -> Result<Vec<BucketInfo>> {
@@ -1323,7 +1323,7 @@ impl StorageAPI for ECStore {
for obj in objects.iter() {
futures.push(async move {
self.internal_get_pool_info_existing_with_opts(
&bucket,
bucket,
&obj.object_name,
&ObjectOptions {
no_lock: true,
@@ -1381,18 +1381,14 @@ impl StorageAPI for ECStore {
if let Some(obj) = objects.get(i) {
if !pool_obj_idx_map.contains_key(&pinfo.index) {
pool_obj_idx_map.insert(pinfo.index, vec![obj.clone()]);
} else {
if let Some(val) = pool_obj_idx_map.get_mut(&pinfo.index) {
val.push(obj.clone());
}
} else if let Some(val) = pool_obj_idx_map.get_mut(&pinfo.index) {
val.push(obj.clone());
}
if !orig_index_map.contains_key(&pinfo.index) {
orig_index_map.insert(pinfo.index, vec![i]);
} else {
if let Some(val) = orig_index_map.get_mut(&pinfo.index) {
val.push(i);
}
} else if let Some(val) = orig_index_map.get_mut(&pinfo.index) {
val.push(i);
}
}
}
@@ -1934,8 +1930,8 @@ impl StorageAPI for ECStore {
}
r.disk_count += result.disk_count;
r.set_count += result.set_count;
r.before.append(&mut result.before);
r.after.append(&mut result.after);
r.before.drives.append(&mut result.before.drives);
r.after.drives.append(&mut result.after.drives);
}
if count_no_heal == self.pools.len() {
return Ok((r, Some(Error::new(DiskError::NoHealRequired))));