Skip to content

Commit 647887c

Browse files
author
Alan Hanson
committed
dump verify, now with par_iter
1 parent 9583632 commit 647887c

File tree

3 files changed

+22
-25
lines changed

3 files changed

+22
-25
lines changed

downstairs/src/dump.rs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright 2021 Oxide Computer Company
22
use super::*;
33
use crate::extent::ExtentMeta;
4+
use rayon::prelude::*;
45
use std::convert::TryInto;
56

67
use sha2::{Digest, Sha256};
@@ -10,29 +11,29 @@ struct ExtInfo {
1011
ei_hm: HashMap<u32, ExtentMeta>,
1112
}
1213

13-
pub fn verify_region(
14-
region_dir: PathBuf,
15-
log: Logger,
16-
) -> Result<()> {
17-
18-
let mut verify_error = false;
14+
pub fn verify_region(region_dir: PathBuf, log: Logger) -> Result<()> {
1915
let region = Region::open(region_dir, false, true, &log)?;
16+
let errors: Vec<_> = region
17+
.extents
18+
.par_iter()
19+
.filter_map(|e| {
20+
let extent = match e {
21+
extent::ExtentState::Opened(extent) => extent,
22+
extent::ExtentState::Closed => panic!("dump on closed extent!"),
23+
};
2024

21-
for e in &region.extents {
22-
let e = match e {
23-
extent::ExtentState::Opened(extent) => extent,
24-
extent::ExtentState::Closed => panic!("dump on closed extent!"),
25-
};
25+
if let Err(err) = extent.validate() {
26+
Some((extent.number, err))
27+
} else {
28+
None
29+
}
30+
})
31+
.collect();
2632

27-
if let Err(err) = e.validate() {
28-
println!(
29-
"validation failed for extent {}: {:?}",
30-
e.number, err
31-
);
32-
verify_error = true;
33+
if !errors.is_empty() {
34+
for (number, err) in &errors {
35+
println!("validation failed for extent {}: {:?}", number, err);
3336
}
34-
}
35-
if verify_error {
3637
bail!("Region failed to verify");
3738
}
3839
Ok(())

downstairs/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ use extent::ExtentState;
5252
use region::Region;
5353

5454
pub use admin::run_dropshot;
55-
pub use dump::{verify_region, dump_region};
55+
pub use dump::{dump_region, verify_region};
5656
pub use dynamometer::*;
5757
pub use stats::{DsCountStat, DsStatOuter};
5858

downstairs/src/main.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -477,11 +477,7 @@ async fn main() -> Result<()> {
477477

478478
run_dropshot(bind_addr, &log).await
479479
}
480-
Args::Verify {
481-
data,
482-
} => {
483-
verify_region(data, log)
484-
}
480+
Args::Verify { data } => verify_region(data, log),
485481
Args::Version => {
486482
let info = crucible_common::BuildInfo::default();
487483
println!("Crucible Version: {}", info);

0 commit comments

Comments
 (0)