File tree Expand file tree Collapse file tree 3 files changed +39
-1
lines changed Expand file tree Collapse file tree 3 files changed +39
-1
lines changed Original file line number Diff line number Diff 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 *
Original file line number Diff line number Diff line change @@ -52,7 +52,7 @@ use extent::ExtentState;
5252use region:: Region ;
5353
5454pub use admin:: run_dropshot;
55- pub use dump:: dump_region;
55+ pub use dump:: { verify_region , dump_region} ;
5656pub use dynamometer:: * ;
5757pub use stats:: { DsCountStat , DsStatOuter } ;
5858
Original file line number Diff line number Diff 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) ;
You can’t perform that action at this time.
0 commit comments