Skip to content

Commit 9583632

Browse files
author
Alan Hanson
committed
Made a verify subcommand to crucible-downstairs directly.
Return an error if the verify failed.
1 parent 42048f9 commit 9583632

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

downstairs/src/dump.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,33 @@ struct ExtInfo {
1010
ei_hm: HashMap<u32, ExtentMeta>,
1111
}
1212

13+
pub fn verify_region(
14+
region_dir: PathBuf,
15+
log: Logger,
16+
) -> Result<()> {
17+
18+
let mut verify_error = false;
19+
let region = Region::open(region_dir, false, true, &log)?;
20+
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+
};
26+
27+
if let Err(err) = e.validate() {
28+
println!(
29+
"validation failed for extent {}: {:?}",
30+
e.number, err
31+
);
32+
verify_error = true;
33+
}
34+
}
35+
if verify_error {
36+
bail!("Region failed to verify");
37+
}
38+
Ok(())
39+
}
1340
/*
1441
* Dump the metadata for one or more region directories.
1542
*

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::dump_region;
55+
pub use dump::{verify_region, dump_region};
5656
pub use dynamometer::*;
5757
pub use stats::{DsCountStat, DsStatOuter};
5858

downstairs/src/main.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,12 @@ enum Args {
222222
#[clap(long, default_value = "127.0.0.1:4567", action)]
223223
bind_addr: SocketAddr,
224224
},
225+
/// Verify region
226+
Verify {
227+
/// Directory containing a region.
228+
#[clap(short, long, value_name = "DIRECTORY", action)]
229+
data: PathBuf,
230+
},
225231
Version,
226232
/// Measure an isolated downstairs' disk usage
227233
Dynamometer {
@@ -471,6 +477,11 @@ async fn main() -> Result<()> {
471477

472478
run_dropshot(bind_addr, &log).await
473479
}
480+
Args::Verify {
481+
data,
482+
} => {
483+
verify_region(data, log)
484+
}
474485
Args::Version => {
475486
let info = crucible_common::BuildInfo::default();
476487
println!("Crucible Version: {}", info);

0 commit comments

Comments
 (0)