Move device_details_traits into the device_tree_detail namespace.
This commit is contained in:
parent
fcb617f858
commit
35880f3038
@ -37,6 +37,24 @@ namespace {
|
|||||||
|
|
||||||
namespace thin_provisioning {
|
namespace thin_provisioning {
|
||||||
namespace device_tree_detail {
|
namespace device_tree_detail {
|
||||||
|
void
|
||||||
|
device_details_traits::unpack(device_details_disk const &disk, device_details &value)
|
||||||
|
{
|
||||||
|
value.mapped_blocks_ = to_cpu<uint64_t>(disk.mapped_blocks_);
|
||||||
|
value.transaction_id_ = to_cpu<uint64_t>(disk.transaction_id_);
|
||||||
|
value.creation_time_ = to_cpu<uint32_t>(disk.creation_time_);
|
||||||
|
value.snapshotted_time_ = to_cpu<uint32_t>(disk.snapshotted_time_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
device_details_traits::pack(device_details const &value, device_details_disk &disk)
|
||||||
|
{
|
||||||
|
disk.mapped_blocks_ = to_disk<le64>(value.mapped_blocks_);
|
||||||
|
disk.transaction_id_ = to_disk<le64>(value.transaction_id_);
|
||||||
|
disk.creation_time_ = to_disk<le32>(value.creation_time_);
|
||||||
|
disk.snapshotted_time_ = to_disk<le32>(value.snapshotted_time_);
|
||||||
|
}
|
||||||
|
|
||||||
missing_devices::missing_devices(std::string const &desc,
|
missing_devices::missing_devices(std::string const &desc,
|
||||||
range<uint64_t> const &keys)
|
range<uint64_t> const &keys)
|
||||||
: desc_(desc),
|
: desc_(desc),
|
||||||
|
@ -4,14 +4,33 @@
|
|||||||
#include "persistent-data/data-structures/btree.h"
|
#include "persistent-data/data-structures/btree.h"
|
||||||
#include "persistent-data/range.h"
|
#include "persistent-data/range.h"
|
||||||
|
|
||||||
#include "thin-provisioning/metadata_disk_structures.h"
|
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
namespace thin_provisioning {
|
namespace thin_provisioning {
|
||||||
typedef persistent_data::btree<1, device_details_traits> device_tree;
|
|
||||||
|
|
||||||
namespace device_tree_detail {
|
namespace device_tree_detail {
|
||||||
|
struct device_details_disk {
|
||||||
|
le64 mapped_blocks_;
|
||||||
|
le64 transaction_id_; /* when created */
|
||||||
|
le32 creation_time_;
|
||||||
|
le32 snapshotted_time_;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
struct device_details {
|
||||||
|
uint64_t mapped_blocks_;
|
||||||
|
uint64_t transaction_id_; /* when created */
|
||||||
|
uint32_t creation_time_;
|
||||||
|
uint32_t snapshotted_time_;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct device_details_traits {
|
||||||
|
typedef device_details_disk disk_type;
|
||||||
|
typedef device_details value_type;
|
||||||
|
typedef persistent_data::no_op_ref_counter<device_details> ref_counter;
|
||||||
|
|
||||||
|
static void unpack(device_details_disk const &disk, device_details &value);
|
||||||
|
static void pack(device_details const &value, device_details_disk &disk);
|
||||||
|
};
|
||||||
|
|
||||||
class damage_visitor;
|
class damage_visitor;
|
||||||
|
|
||||||
struct damage {
|
struct damage {
|
||||||
@ -42,6 +61,8 @@ namespace thin_provisioning {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef persistent_data::btree<1, device_tree_detail::device_details_traits> device_tree;
|
||||||
|
|
||||||
void check_device_tree(device_tree const &tree,
|
void check_device_tree(device_tree const &tree,
|
||||||
device_tree_detail::damage_visitor &visitor);
|
device_tree_detail::damage_visitor &visitor);
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ metadata::metadata(std::string const &dev_path, open_type ot,
|
|||||||
tm_->set_sm(metadata_sm_);
|
tm_->set_sm(metadata_sm_);
|
||||||
|
|
||||||
data_sm_ = open_disk_sm(tm_, static_cast<void *>(&sb_.data_space_map_root_));
|
data_sm_ = open_disk_sm(tm_, static_cast<void *>(&sb_.data_space_map_root_));
|
||||||
details_ = device_tree::ptr(new device_tree(tm_, sb_.device_details_root_, device_details_traits::ref_counter()));
|
details_ = device_tree::ptr(new device_tree(tm_, sb_.device_details_root_, device_tree_detail::device_details_traits::ref_counter()));
|
||||||
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, sb_.data_mapping_root_, mtree_ref_counter(tm_)));
|
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, sb_.data_mapping_root_, mtree_ref_counter(tm_)));
|
||||||
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, sb_.data_mapping_root_, block_time_ref_counter(data_sm_)));
|
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, sb_.data_mapping_root_, block_time_ref_counter(data_sm_)));
|
||||||
break;
|
break;
|
||||||
@ -120,7 +120,7 @@ metadata::metadata(std::string const &dev_path, open_type ot,
|
|||||||
tm_->set_sm(metadata_sm_);
|
tm_->set_sm(metadata_sm_);
|
||||||
|
|
||||||
data_sm_ = create_disk_sm(tm_, nr_data_blocks);
|
data_sm_ = create_disk_sm(tm_, nr_data_blocks);
|
||||||
details_ = device_tree::ptr(new device_tree(tm_, device_details_traits::ref_counter()));
|
details_ = device_tree::ptr(new device_tree(tm_, device_tree_detail::device_details_traits::ref_counter()));
|
||||||
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, block_time_ref_counter(data_sm_)));
|
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, block_time_ref_counter(data_sm_)));
|
||||||
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, mappings_->get_root(), mtree_ref_counter(tm_)));
|
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, mappings_->get_root(), mtree_ref_counter(tm_)));
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ metadata::metadata(std::string const &dev_path, block_address metadata_snap)
|
|||||||
tm_->set_sm(metadata_sm_);
|
tm_->set_sm(metadata_sm_);
|
||||||
|
|
||||||
data_sm_ = open_disk_sm(tm_, static_cast<void *>(&sb_.data_space_map_root_));
|
data_sm_ = open_disk_sm(tm_, static_cast<void *>(&sb_.data_space_map_root_));
|
||||||
details_ = device_tree::ptr(new device_tree(tm_, sb_.device_details_root_, device_details_traits::ref_counter()));
|
details_ = device_tree::ptr(new device_tree(tm_, sb_.device_details_root_, device_tree_detail::device_details_traits::ref_counter()));
|
||||||
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, sb_.data_mapping_root_, mtree_ref_counter(tm_)));
|
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, sb_.data_mapping_root_, mtree_ref_counter(tm_)));
|
||||||
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, sb_.data_mapping_root_, block_time_ref_counter(data_sm_)));
|
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, sb_.data_mapping_root_, block_time_ref_counter(data_sm_)));
|
||||||
}
|
}
|
||||||
@ -168,7 +168,7 @@ metadata::metadata(block_manager<>::ptr bm, open_type ot,
|
|||||||
tm_->set_sm(metadata_sm_);
|
tm_->set_sm(metadata_sm_);
|
||||||
|
|
||||||
data_sm_ = open_disk_sm(tm_, static_cast<void *>(&sb_.data_space_map_root_));
|
data_sm_ = open_disk_sm(tm_, static_cast<void *>(&sb_.data_space_map_root_));
|
||||||
details_ = device_tree::ptr(new device_tree(tm_, sb_.device_details_root_, device_details_traits::ref_counter()));
|
details_ = device_tree::ptr(new device_tree(tm_, sb_.device_details_root_, device_tree_detail::device_details_traits::ref_counter()));
|
||||||
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, sb_.data_mapping_root_, mtree_ref_counter(tm_)));
|
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, sb_.data_mapping_root_, mtree_ref_counter(tm_)));
|
||||||
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, sb_.data_mapping_root_, block_time_ref_counter(data_sm_)));
|
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, sb_.data_mapping_root_, block_time_ref_counter(data_sm_)));
|
||||||
break;
|
break;
|
||||||
@ -181,7 +181,7 @@ metadata::metadata(block_manager<>::ptr bm, open_type ot,
|
|||||||
tm_->set_sm(metadata_sm_);
|
tm_->set_sm(metadata_sm_);
|
||||||
|
|
||||||
data_sm_ = create_disk_sm(tm_, nr_data_blocks);
|
data_sm_ = create_disk_sm(tm_, nr_data_blocks);
|
||||||
details_ = device_tree::ptr(new device_tree(tm_, device_details_traits::ref_counter()));
|
details_ = device_tree::ptr(new device_tree(tm_, device_tree_detail::device_details_traits::ref_counter()));
|
||||||
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, block_time_ref_counter(data_sm_)));
|
mappings_ = mapping_tree::ptr(new mapping_tree(tm_, block_time_ref_counter(data_sm_)));
|
||||||
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, mappings_->get_root(), mtree_ref_counter(tm_)));
|
mappings_top_level_ = dev_tree::ptr(new dev_tree(tm_, mappings_->get_root(), mtree_ref_counter(tm_)));
|
||||||
|
|
||||||
|
@ -24,24 +24,6 @@ using namespace thin_provisioning;
|
|||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
void
|
|
||||||
device_details_traits::unpack(device_details_disk const &disk, device_details &value)
|
|
||||||
{
|
|
||||||
value.mapped_blocks_ = to_cpu<uint64_t>(disk.mapped_blocks_);
|
|
||||||
value.transaction_id_ = to_cpu<uint64_t>(disk.transaction_id_);
|
|
||||||
value.creation_time_ = to_cpu<uint32_t>(disk.creation_time_);
|
|
||||||
value.snapshotted_time_ = to_cpu<uint32_t>(disk.snapshotted_time_);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
device_details_traits::pack(device_details const &value, device_details_disk &disk)
|
|
||||||
{
|
|
||||||
disk.mapped_blocks_ = to_disk<le64>(value.mapped_blocks_);
|
|
||||||
disk.transaction_id_ = to_disk<le64>(value.transaction_id_);
|
|
||||||
disk.creation_time_ = to_disk<le32>(value.creation_time_);
|
|
||||||
disk.snapshotted_time_ = to_disk<le32>(value.snapshotted_time_);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
superblock_traits::unpack(superblock_disk const &disk, superblock &value)
|
superblock_traits::unpack(superblock_disk const &disk, superblock &value)
|
||||||
{
|
{
|
||||||
|
@ -27,29 +27,6 @@
|
|||||||
namespace thin_provisioning {
|
namespace thin_provisioning {
|
||||||
using namespace base; // FIXME: don't use namespaces in headers.
|
using namespace base; // FIXME: don't use namespaces in headers.
|
||||||
|
|
||||||
struct device_details_disk {
|
|
||||||
le64 mapped_blocks_;
|
|
||||||
le64 transaction_id_; /* when created */
|
|
||||||
le32 creation_time_;
|
|
||||||
le32 snapshotted_time_;
|
|
||||||
} __attribute__ ((packed));
|
|
||||||
|
|
||||||
struct device_details {
|
|
||||||
uint64_t mapped_blocks_;
|
|
||||||
uint64_t transaction_id_; /* when created */
|
|
||||||
uint32_t creation_time_;
|
|
||||||
uint32_t snapshotted_time_;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct device_details_traits {
|
|
||||||
typedef device_details_disk disk_type;
|
|
||||||
typedef device_details value_type;
|
|
||||||
typedef persistent_data::no_op_ref_counter<device_details> ref_counter;
|
|
||||||
|
|
||||||
static void unpack(device_details_disk const &disk, device_details &value);
|
|
||||||
static void pack(device_details const &value, device_details_disk &disk);
|
|
||||||
};
|
|
||||||
|
|
||||||
unsigned const SPACE_MAP_ROOT_SIZE = 128;
|
unsigned const SPACE_MAP_ROOT_SIZE = 128;
|
||||||
|
|
||||||
typedef unsigned char __u8;
|
typedef unsigned char __u8;
|
||||||
|
@ -135,11 +135,11 @@ namespace {
|
|||||||
bool found_errors_;
|
bool found_errors_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class details_extractor : public btree<1, device_details_traits>::visitor {
|
class details_extractor : public btree<1, device_tree_detail::device_details_traits>::visitor {
|
||||||
public:
|
public:
|
||||||
typedef typename btree<1, device_details_traits>::visitor::node_location node_location;
|
typedef typename btree<1, device_tree_detail::device_details_traits>::visitor::node_location node_location;
|
||||||
typedef boost::shared_ptr<details_extractor> ptr;
|
typedef boost::shared_ptr<details_extractor> ptr;
|
||||||
typedef btree_checker<1, device_details_traits> checker;
|
typedef btree_checker<1, device_tree_detail::device_details_traits> checker;
|
||||||
|
|
||||||
details_extractor()
|
details_extractor()
|
||||||
: counter_(),
|
: counter_(),
|
||||||
@ -157,7 +157,7 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool visit_leaf(node_location const &loc,
|
bool visit_leaf(node_location const &loc,
|
||||||
btree_detail::node_ref<device_details_traits> const &n) {
|
btree_detail::node_ref<device_tree_detail::device_details_traits> const &n) {
|
||||||
if (!checker_.visit_leaf(loc, n))
|
if (!checker_.visit_leaf(loc, n))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ namespace {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
map<uint64_t, device_details> const &get_devices() const {
|
map<uint64_t, device_tree_detail::device_details> const &get_devices() const {
|
||||||
return devices_;
|
return devices_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ namespace {
|
|||||||
// Declaration order of counter_ and checker_ is important.
|
// Declaration order of counter_ and checker_ is important.
|
||||||
block_counter counter_;
|
block_counter counter_;
|
||||||
checker checker_;
|
checker checker_;
|
||||||
map<uint64_t, device_details> devices_;
|
map<uint64_t, device_tree_detail::device_details> devices_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,12 +203,12 @@ thin_provisioning::metadata_dump(metadata::ptr md, emitter::ptr e, bool repair)
|
|||||||
if (de.corruption() && !repair)
|
if (de.corruption() && !repair)
|
||||||
throw runtime_error("corruption in device details tree");
|
throw runtime_error("corruption in device details tree");
|
||||||
|
|
||||||
map<uint64_t, device_details> const &devs = de.get_devices();
|
map<uint64_t, device_tree_detail::device_details> const &devs = de.get_devices();
|
||||||
|
|
||||||
map<uint64_t, device_details>::const_iterator it, end = devs.end();
|
map<uint64_t, device_tree_detail::device_details>::const_iterator it, end = devs.end();
|
||||||
for (it = devs.begin(); it != end; ++it) {
|
for (it = devs.begin(); it != end; ++it) {
|
||||||
uint64_t dev_id = it->first;
|
uint64_t dev_id = it->first;
|
||||||
device_details const &dd = it->second;
|
device_tree_detail::device_details const &dd = it->second;
|
||||||
|
|
||||||
e->begin_device(dev_id,
|
e->begin_device(dev_id,
|
||||||
dd.mapped_blocks_,
|
dd.mapped_blocks_,
|
||||||
|
@ -76,7 +76,7 @@ namespace {
|
|||||||
|
|
||||||
// Add entry to the details tree
|
// Add entry to the details tree
|
||||||
uint64_t key[1] = {dev};
|
uint64_t key[1] = {dev};
|
||||||
device_details details = {mapped_blocks, trans_id, (uint32_t)creation_time, (uint32_t)snap_time};
|
device_tree_detail::device_details details = {mapped_blocks, trans_id, (uint32_t)creation_time, (uint32_t)snap_time};
|
||||||
md_->details_->insert(key, details);
|
md_->details_->insert(key, details);
|
||||||
|
|
||||||
current_mapping_ = empty_mapping_->clone();
|
current_mapping_ = empty_mapping_->clone();
|
||||||
|
@ -73,7 +73,7 @@ void
|
|||||||
thin::set_snapshot_time(uint32_t time)
|
thin::set_snapshot_time(uint32_t time)
|
||||||
{
|
{
|
||||||
uint64_t key[1] = { dev_ };
|
uint64_t key[1] = { dev_ };
|
||||||
optional<device_details> mdetail = pool_->md_->details_->lookup(key);
|
optional<device_tree_detail::device_details> mdetail = pool_->md_->details_->lookup(key);
|
||||||
if (!mdetail)
|
if (!mdetail)
|
||||||
throw runtime_error("no such device");
|
throw runtime_error("no such device");
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ block_address
|
|||||||
thin::get_mapped_blocks() const
|
thin::get_mapped_blocks() const
|
||||||
{
|
{
|
||||||
uint64_t key[1] = { dev_ };
|
uint64_t key[1] = { dev_ };
|
||||||
optional<device_details> mdetail = pool_->md_->details_->lookup(key);
|
optional<device_tree_detail::device_details> mdetail = pool_->md_->details_->lookup(key);
|
||||||
if (!mdetail)
|
if (!mdetail)
|
||||||
throw runtime_error("no such device");
|
throw runtime_error("no such device");
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ void
|
|||||||
thin::set_mapped_blocks(block_address count)
|
thin::set_mapped_blocks(block_address count)
|
||||||
{
|
{
|
||||||
uint64_t key[1] = { dev_ };
|
uint64_t key[1] = { dev_ };
|
||||||
optional<device_details> mdetail = pool_->md_->details_->lookup(key);
|
optional<device_tree_detail::device_details> mdetail = pool_->md_->details_->lookup(key);
|
||||||
if (!mdetail)
|
if (!mdetail)
|
||||||
throw runtime_error("no such device");
|
throw runtime_error("no such device");
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ thin::ptr
|
|||||||
thin_pool::open_thin(thin_dev_t dev)
|
thin_pool::open_thin(thin_dev_t dev)
|
||||||
{
|
{
|
||||||
uint64_t key[1] = {dev};
|
uint64_t key[1] = {dev};
|
||||||
optional<device_details> mdetails = md_->details_->lookup(key);
|
optional<device_tree_detail::device_details> mdetails = md_->details_->lookup(key);
|
||||||
if (!mdetails)
|
if (!mdetails)
|
||||||
throw runtime_error("no such device");
|
throw runtime_error("no such device");
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user