From 055b237126a1ee3b982cf577adf2220e4466dce8 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Wed, 19 Jun 2013 11:34:01 +0100 Subject: [PATCH] tweaks to metadata constructor, and some updated features. --- features/step_definitions/thin_steps.rb | 2 +- features/support/world_extensions.rb | 8 ++++++-- features/thin_rmap.feature | 1 + thin-provisioning/metadata.cc | 25 ++++++++++++++++--------- thin-provisioning/metadata.h | 2 +- 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/features/step_definitions/thin_steps.rb b/features/step_definitions/thin_steps.rb index 37ae174..0020bfd 100644 --- a/features/step_definitions/thin_steps.rb +++ b/features/step_definitions/thin_steps.rb @@ -1,6 +1,6 @@ Given(/^valid metadata$/) do in_current_dir do - write_valid_xml(xml_file) + system("thinp_xml create --nr-thins uniform[4..9] --nr-mappings uniform[1000..10000] > #{xml_file}") end run_simple("dd if=/dev/zero of=#{dev_file} bs=4k count=1024") diff --git a/features/support/world_extensions.rb b/features/support/world_extensions.rb index f59a0e1..f2b4a1b 100644 --- a/features/support/world_extensions.rb +++ b/features/support/world_extensions.rb @@ -1,3 +1,7 @@ +Before do + @aruba_timeout_seconds = 10 +end + module ThinpWorld def tools_version "0.1.5+" @@ -21,8 +25,8 @@ module ThinpWorld File.open(path, "w+") do |f| f.write < - - + + EOF diff --git a/features/thin_rmap.feature b/features/thin_rmap.feature index f8d458d..8f98631 100644 --- a/features/thin_rmap.feature +++ b/features/thin_rmap.feature @@ -48,6 +48,7 @@ Feature: thin_rmap When I run `thin_rmap --unleash-the-hedeghogs` Then it should fail + @announce Scenario: Valid region format should pass Given valid metadata When I run thin_rmap with --region 23..7890 diff --git a/thin-provisioning/metadata.cc b/thin-provisioning/metadata.cc index 39f31e3..c841614 100644 --- a/thin-provisioning/metadata.cc +++ b/thin-provisioning/metadata.cc @@ -34,7 +34,7 @@ using namespace base; using namespace thin_provisioning; //---------------------------------------------------------------- -#if 0 + namespace { using namespace superblock_detail; @@ -108,11 +108,18 @@ metadata::metadata(std::string const &dev_path, open_type ot, tm_->set_sm(metadata_sm_); data_sm_ = open_disk_sm(tm_, static_cast(&sb_.data_space_map_root_)); - 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_, - mapping_tree_detail::mtree_ref_counter(tm_))); - mappings_ = mapping_tree::ptr(new mapping_tree(tm_, sb_.data_mapping_root_, - mapping_tree_detail::block_time_ref_counter(data_sm_))); + + 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_, + mapping_tree_detail::mtree_ref_counter(tm_))); + + mappings_ = mapping_tree::ptr( + new mapping_tree(tm_, sb_.data_mapping_root_, + mapping_tree_detail::block_time_ref_counter(data_sm_))); break; case CREATE: @@ -142,10 +149,11 @@ metadata::metadata(std::string const &dev_path, open_type ot, } } -metadata::metadata(std::string const &dev_path, block_address metadata_snap) +metadata::metadata(std::string const &dev_path) { tm_ = open_tm(open_bm(dev_path, false)); - sb_ = read_superblock(tm_->get_bm(), metadata_snap); + sb_ = read_superblock(tm_->get_bm()); + // We don't open the metadata sm for a held root //metadata_sm_ = open_metadata_sm(tm_, &sb_.metadata_space_map_root_); tm_->set_sm(metadata_sm_); @@ -227,4 +235,3 @@ metadata::commit() } //---------------------------------------------------------------- -#endif diff --git a/thin-provisioning/metadata.h b/thin-provisioning/metadata.h index 3861827..250c216 100644 --- a/thin-provisioning/metadata.h +++ b/thin-provisioning/metadata.h @@ -65,7 +65,7 @@ namespace thin_provisioning { sector_t data_block_size = 128, block_address nr_data_blocks = 0); // Only used if CREATE - metadata(std::string const &dev_path, block_address metadata_snap); + metadata(std::string const &dev_path); // ... use these instead ... metadata(block_manager<>::ptr bm, open_type ot,