11// Copyright 2021 Oxide Computer Company
22use super :: * ;
33use crate :: extent:: ExtentMeta ;
4+ use rayon:: prelude:: * ;
45use std:: convert:: TryInto ;
56
67use 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 ( ( ) )
0 commit comments