use sm transactional around sm disks
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
#include "math_utils.h"
|
#include "math_utils.h"
|
||||||
#include "space_map_disk_structures.h"
|
#include "space_map_disk_structures.h"
|
||||||
#include "space_map_recursive.h"
|
#include "space_map_recursive.h"
|
||||||
|
#include "space_map_transactional.h"
|
||||||
#include "transaction_manager.h"
|
#include "transaction_manager.h"
|
||||||
|
|
||||||
using namespace boost;
|
using namespace boost;
|
||||||
@@ -661,6 +662,7 @@ persistent_data::create_disk_sm(transaction_manager::ptr tm,
|
|||||||
index_store::ptr store(new btree_index_store(tm));
|
index_store::ptr store(new btree_index_store(tm));
|
||||||
checked_space_map::ptr sm(new sm_disk(store, tm));
|
checked_space_map::ptr sm(new sm_disk(store, tm));
|
||||||
sm->extend(nr_blocks);
|
sm->extend(nr_blocks);
|
||||||
|
sm->commit();
|
||||||
return sm;
|
return sm;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -682,7 +684,9 @@ persistent_data::create_metadata_sm(transaction_manager::ptr tm, block_address n
|
|||||||
index_store::ptr store(new metadata_index_store(tm));
|
index_store::ptr store(new metadata_index_store(tm));
|
||||||
checked_space_map::ptr sm(new sm_disk(store, tm));
|
checked_space_map::ptr sm(new sm_disk(store, tm));
|
||||||
sm->extend(nr_blocks);
|
sm->extend(nr_blocks);
|
||||||
return create_recursive_sm(sm);
|
sm->commit();
|
||||||
|
return create_transactional_sm(
|
||||||
|
create_recursive_sm(sm));
|
||||||
}
|
}
|
||||||
|
|
||||||
checked_space_map::ptr
|
checked_space_map::ptr
|
||||||
@@ -695,7 +699,9 @@ persistent_data::open_metadata_sm(transaction_manager::ptr tm, void *root)
|
|||||||
sm_root_traits::unpack(d, v);
|
sm_root_traits::unpack(d, v);
|
||||||
block_address nr_indexes = div_up<block_address>(v.nr_blocks_, ENTRIES_PER_BLOCK);
|
block_address nr_indexes = div_up<block_address>(v.nr_blocks_, ENTRIES_PER_BLOCK);
|
||||||
index_store::ptr store(new metadata_index_store(tm, v.bitmap_root_, nr_indexes));
|
index_store::ptr store(new metadata_index_store(tm, v.bitmap_root_, nr_indexes));
|
||||||
return create_recursive_sm(checked_space_map::ptr(new sm_disk(store, tm, v)));
|
return create_transactional_sm(
|
||||||
|
create_recursive_sm(
|
||||||
|
checked_space_map::ptr(new sm_disk(store, tm, v))));
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ namespace {
|
|||||||
if (end <= search_start_)
|
if (end <= search_start_)
|
||||||
return maybe_block();
|
return maybe_block();
|
||||||
|
|
||||||
maybe_block mb = sm_->new_block(max(search_start_, begin), end);
|
maybe_block mb = committed_->new_block(max(search_start_, begin), end);
|
||||||
if (mb) {
|
if (mb) {
|
||||||
allocated_++;
|
allocated_++;
|
||||||
search_start_ = *mb + 1;
|
search_start_ = *mb + 1;
|
||||||
@@ -73,6 +73,10 @@ namespace {
|
|||||||
return sm_->extend(extra_blocks);
|
return sm_->extend(extra_blocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void iterate(iterator &it) const {
|
||||||
|
sm_->iterate(it);
|
||||||
|
}
|
||||||
|
|
||||||
virtual size_t root_size() const {
|
virtual size_t root_size() const {
|
||||||
return sm_->root_size();
|
return sm_->root_size();
|
||||||
}
|
}
|
||||||
@@ -81,6 +85,10 @@ namespace {
|
|||||||
return sm_->copy_root(dest, len);
|
return sm_->copy_root(dest, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void check(block_counter &counter) const {
|
||||||
|
return sm_->check(counter);
|
||||||
|
}
|
||||||
|
|
||||||
virtual checked_space_map::ptr clone() const {
|
virtual checked_space_map::ptr clone() const {
|
||||||
return checked_space_map::ptr(new sm_transactional(sm_));
|
return checked_space_map::ptr(new sm_transactional(sm_));
|
||||||
}
|
}
|
||||||
@@ -93,4 +101,13 @@ namespace {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
|
checked_space_map::ptr
|
||||||
|
persistent_data::create_transactional_sm(checked_space_map::ptr sm)
|
||||||
|
{
|
||||||
|
return checked_space_map::ptr(new sm_transactional(sm));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user