diff --git a/src/garage/admin_rpc.rs b/src/garage/admin_rpc.rs index aec791a4..10087f74 100644 --- a/src/garage/admin_rpc.rs +++ b/src/garage/admin_rpc.rs @@ -443,12 +443,14 @@ impl AdminRpcHandler { self.gather_table_stats(&mut ret, &self.garage.block_ref_table, &opt)?; writeln!(&mut ret, "\nBlock manager stats:").unwrap(); - writeln!( - &mut ret, - " number of blocks: {}", - self.garage.block_manager.rc_len() - ) - .unwrap(); + if opt.detailed { + writeln!( + &mut ret, + " number of blocks: {}", + self.garage.block_manager.rc_len() + ) + .unwrap(); + } writeln!( &mut ret, " resync queue length: {}", @@ -456,10 +458,6 @@ impl AdminRpcHandler { ) .unwrap(); - if opt.detailed { - writeln!(&mut ret, "\nDetailed stats not implemented yet.").unwrap(); - } - Ok(ret) } @@ -467,26 +465,28 @@ impl AdminRpcHandler { &self, to: &mut String, t: &Arc>, - _opt: &StatsOpt, + opt: &StatsOpt, ) -> Result<(), Error> where F: TableSchema + 'static, R: TableReplication + 'static, { writeln!(to, "\nTable stats for {}", t.data.name).unwrap(); - writeln!(to, " number of items: {}", t.data.store.len()).unwrap(); + if opt.detailed { + writeln!(to, " number of items: {}", t.data.store.len()).unwrap(); + writeln!( + to, + " Merkle tree size: {}", + t.merkle_updater.merkle_tree_len() + ) + .unwrap(); + } writeln!( to, " Merkle updater todo queue length: {}", t.merkle_updater.todo_len() ) .unwrap(); - writeln!( - to, - " Merkle tree size: {}", - t.merkle_updater.merkle_tree_len() - ) - .unwrap(); writeln!(to, " GC todo queue length: {}", t.data.gc_todo_len()).unwrap(); Ok(()) } diff --git a/src/table/gc.rs b/src/table/gc.rs index 20ebe3c7..a37c052f 100644 --- a/src/table/gc.rs +++ b/src/table/gc.rs @@ -146,16 +146,19 @@ where .map(|(nodes, items)| self.try_send_and_delete(nodes, items)), ) .await; + + let mut errs = vec![]; for resp in resps { if let Err(e) = resp { - warn!( - "({}) Unable to send and delete for GC: {}", - self.data.name, e - ); + errs.push(e); } } - Ok(true) + if errs.is_empty() { + Ok(true) + } else { + Err(Error::Message(errs.into_iter().map(|x| format!("{}", x)).collect::>().join(", "))) + } } async fn try_send_and_delete(