From fa2a5fe6505b22ba5d3a236da847f3d787e9cfe9 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Fri, 2 Mar 2012 13:01:07 +0000 Subject: [PATCH] write the data device size to the xml output --- emitter.h | 3 ++- human_readable_format.cc | 4 +++- metadata_dumper.cc | 5 ++++- restore_emitter.cc | 4 +++- thin_restore.cc | 13 ++++++++----- xml_format.cc | 9 ++++++--- 6 files changed, 26 insertions(+), 12 deletions(-) diff --git a/emitter.h b/emitter.h index 14e3e82..8409cfb 100644 --- a/emitter.h +++ b/emitter.h @@ -47,7 +47,8 @@ namespace thin_provisioning { virtual void begin_superblock(std::string const &uuid, uint64_t time, uint64_t trans_id, - uint32_t data_block_size) = 0; + uint32_t data_block_size, + uint64_t nr_data_blocks) = 0; virtual void end_superblock() = 0; virtual void begin_device(uint32_t dev_id, diff --git a/human_readable_format.cc b/human_readable_format.cc index ad60c21..f30f50c 100644 --- a/human_readable_format.cc +++ b/human_readable_format.cc @@ -35,11 +35,13 @@ namespace { void begin_superblock(string const &uuid, uint64_t time, uint64_t trans_id, - uint32_t data_block_size) { + uint32_t data_block_size, + uint64_t nr_data_blocks) { out_ << "begin superblock: \"" << uuid << "\"" << ", " << time << ", " << trans_id << ", " << data_block_size + << ", " << nr_data_blocks << endl; } diff --git a/metadata_dumper.cc b/metadata_dumper.cc index 1448ae2..f73c44a 100644 --- a/metadata_dumper.cc +++ b/metadata_dumper.cc @@ -186,7 +186,10 @@ namespace { void thin_provisioning::metadata_dump(metadata::ptr md, emitter::ptr e, bool repair) { - e->begin_superblock("", md->sb_.time_, md->sb_.trans_id_, md->sb_.data_block_size_); + e->begin_superblock("", md->sb_.time_, + md->sb_.trans_id_, + md->sb_.data_block_size_, + md->data_sm_->get_nr_blocks()); details_extractor::ptr de(new details_extractor); diff --git a/restore_emitter.cc b/restore_emitter.cc index 9c7de30..88f365c 100644 --- a/restore_emitter.cc +++ b/restore_emitter.cc @@ -38,7 +38,8 @@ namespace { virtual void begin_superblock(std::string const &uuid, uint64_t time, uint64_t trans_id, - uint32_t data_block_size) { + uint32_t data_block_size, + uint64_t nr_data_blocks) { in_superblock_ = true; superblock &sb = md_->sb_; @@ -46,6 +47,7 @@ namespace { sb.time_ = time; sb.trans_id_ = trans_id; sb.data_block_size_ = data_block_size; + md_->data_sm_->extend(nr_data_blocks); } virtual void end_superblock() { diff --git a/thin_restore.cc b/thin_restore.cc index d05115f..4ec2409 100644 --- a/thin_restore.cc +++ b/thin_restore.cc @@ -24,9 +24,14 @@ #include "version.h" #include -#include #include +#include #include +#include +#include +#include +#include +#include using namespace persistent_data; using namespace std; @@ -37,13 +42,11 @@ using namespace thin_provisioning; namespace { int restore(string const &backup_file, string const &dev) { try { - // FIXME: hard coded - block_address const NR_BLOCKS = 100000; - - metadata::ptr md(new metadata(dev, metadata::CREATE, 128, NR_BLOCKS)); + metadata::ptr md(new metadata(dev, metadata::CREATE, 128, 0)); emitter::ptr restorer = create_restore_emitter(md); ifstream in(backup_file.c_str(), ifstream::in); parse_xml(in, restorer); + } catch (std::exception &e) { cerr << e.what(); return 1; diff --git a/xml_format.cc b/xml_format.cc index 2809878..5e5004d 100644 --- a/xml_format.cc +++ b/xml_format.cc @@ -48,12 +48,14 @@ namespace { void begin_superblock(string const &uuid, uint64_t time, uint64_t trans_id, - uint32_t data_block_size) { + uint32_t data_block_size, + uint64_t nr_data_blocks) { indent(); out_ << "" + << " data_block_size=\"" << data_block_size << "\"" + << " nr_data_blocks=\"" << nr_data_blocks << "\">" << endl; inc(); } @@ -176,7 +178,8 @@ namespace { e->begin_superblock(get_attr(attr, "uuid"), get_attr(attr, "time"), get_attr(attr, "transaction"), - get_attr(attr, "data_block_size")); + get_attr(attr, "data_block_size"), + get_attr(attr, "nr_data_blocks")); } void parse_device(emitter *e, attributes const &attr) {