superblock damage visitor
This commit is contained in:
parent
24ddc4f5c4
commit
6fcda37dbc
@ -19,7 +19,6 @@
|
||||
#include "thin-provisioning/device_tree.h"
|
||||
#include "thin-provisioning/file_utils.h"
|
||||
#include "thin-provisioning/metadata.h"
|
||||
#include "thin-provisioning/superblock_validator.h"
|
||||
|
||||
#include "persistent-data/math_utils.h"
|
||||
#include "persistent-data/space-maps/core.h"
|
||||
|
@ -19,7 +19,6 @@
|
||||
#include "thin-provisioning/file_utils.h"
|
||||
#include "thin-provisioning/metadata.h"
|
||||
#include "thin-provisioning/metadata_checker.h"
|
||||
#include "thin-provisioning/superblock_validator.h"
|
||||
|
||||
using namespace persistent_data;
|
||||
using namespace thin_provisioning;
|
||||
|
@ -1,7 +1,6 @@
|
||||
#include "persistent-data/checksum.h"
|
||||
#include "persistent-data/errors.h"
|
||||
#include "thin-provisioning/superblock.h"
|
||||
#include "thin-provisioning/superblock_validator.h"
|
||||
|
||||
using namespace thin_provisioning;
|
||||
using namespace superblock_detail;
|
||||
@ -109,3 +108,36 @@ thin_provisioning::superblock_validator()
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
namespace thin_provisioning {
|
||||
namespace superblock_detail {
|
||||
superblock_corruption::superblock_corruption(std::string const &desc)
|
||||
: desc_(desc) {
|
||||
}
|
||||
|
||||
void
|
||||
superblock_corruption::visit(damage_visitor &v) const {
|
||||
v.visit(*this);
|
||||
}
|
||||
|
||||
void
|
||||
damage_visitor::visit(damage const &d) {
|
||||
d.visit(*this);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
check_superblock(block_manager<>::ptr bm,
|
||||
superblock_detail::damage_visitor &visitor) {
|
||||
using namespace superblock_detail;
|
||||
|
||||
try {
|
||||
bm->read_lock(SUPERBLOCK_LOCATION, superblock_validator());
|
||||
|
||||
} catch (std::exception const &e) {
|
||||
visitor.visit(superblock_corruption(e.what()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
@ -93,9 +93,37 @@ namespace thin_provisioning {
|
||||
|
||||
block_address const SUPERBLOCK_LOCATION = 0;
|
||||
uint32_t const SUPERBLOCK_MAGIC = 27022010;
|
||||
|
||||
//--------------------------------
|
||||
|
||||
class damage_visitor;
|
||||
|
||||
struct damage {
|
||||
virtual ~damage() {}
|
||||
virtual void visit(damage_visitor &v) const = 0;
|
||||
};
|
||||
|
||||
struct superblock_corruption : public damage {
|
||||
superblock_corruption(std::string const &desc);
|
||||
void visit(damage_visitor &v) const;
|
||||
|
||||
std::string desc_;
|
||||
};
|
||||
|
||||
class damage_visitor {
|
||||
public:
|
||||
virtual ~damage_visitor() {}
|
||||
|
||||
void visit(damage const &d);
|
||||
|
||||
virtual void visit(superblock_corruption const &d) = 0;
|
||||
};
|
||||
}
|
||||
|
||||
block_manager<>::validator::ptr superblock_validator();
|
||||
|
||||
void check_superblock(block_manager<>::ptr bm,
|
||||
superblock_detail::damage_visitor &visitor);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user