diff --git a/logstore.cpp b/logstore.cpp index 3bd1290..68e21a4 100644 --- a/logstore.cpp +++ b/logstore.cpp @@ -33,7 +33,7 @@ logtable::logtable(pageid_t internal_region_size, pageid_t datapage_regio tree_c2 = NULL; // This bool is purely for external code. this->accepting_new_requests = true; - this->still_running_ = true; + this->shutting_down_ = false; flushing = false; this->merge_mgr = new mergeManager(this); this->mergedata = 0; @@ -87,8 +87,8 @@ void logtable::init_stasis() { DataPage::register_stasis_page_impl(); stasis_buffer_manager_size = 768 * 1024; // 4GB = 2^10 pages: // XXX Workaround Stasis' (still broken) default concurrent buffer manager - stasis_buffer_manager_factory = stasis_buffer_manager_hash_factory; - stasis_buffer_manager_hint_writes_are_sequential = 0; +// stasis_buffer_manager_factory = stasis_buffer_manager_hash_factory; +// stasis_buffer_manager_hint_writes_are_sequential = 0; Tinit(); } diff --git a/logstore.h b/logstore.h index 37475ee..2d68ba7 100644 --- a/logstore.h +++ b/logstore.h @@ -131,11 +131,11 @@ public: mergeManager * merge_mgr; bool accepting_new_requests; - inline bool is_still_running() { return still_running_; } + inline bool is_still_running() { return !shutting_down_; } inline void stop() { rwlc_writelock(header_mut); - if(still_running_) { - still_running_ = false; + if(!shutting_down_) { + shutting_down_ = true; flushTable(); flushing = true; } @@ -171,8 +171,9 @@ private: std::vector its; mergeStats * c0_stats; - bool still_running_; + public: + bool shutting_down_; template class mergeManyIterator { diff --git a/merger.cpp b/merger.cpp index 9ad4945..45f43e2 100644 --- a/merger.cpp +++ b/merger.cpp @@ -172,7 +172,8 @@ void* memMergeThread(void*arg) // memTreeComponent::batchedRevalidatingIterator *itrB = // new memTreeComponent::batchedRevalidatingIterator(ltable->get_tree_c0(), <able->tree_bytes, ltable->max_c0_size, <able->flushing, 100, <able->rb_mut); #endif - const int64_t min_bloom_target = 1000000000; + const int64_t min_bloom_target = ltable->max_c0_size; + //create a new tree diskTreeComponent * c1_prime = new diskTreeComponent(xid, ltable->internal_region_size, ltable->datapage_region_size, ltable->datapage_size, stats, (stats->target_size < min_bloom_target ? min_bloom_target : stats->target_size) / 100); @@ -343,11 +344,12 @@ void *diskMergeThread(void*arg) #ifdef NO_SNOWSHOVEL diskTreeComponent::iterator *itrB = ltable->get_tree_c1_mergeable()->open_iterator(); #else - diskTreeComponent::iterator *itrB = ltable->get_tree_c1_mergeable()->open_iterator(<able->merge_mgr->cur_c1_c2_progress_delta, 0.05, 0 /*XXX*/); + diskTreeComponent::iterator *itrB = ltable->get_tree_c1_mergeable()->open_iterator(<able->merge_mgr->cur_c1_c2_progress_delta, 0.05, <able->shutting_down_); #endif //create a new tree - diskTreeComponent * c2_prime = new diskTreeComponent(xid, ltable->internal_region_size, ltable->datapage_region_size, ltable->datapage_size, stats); + diskTreeComponent * c2_prime = new diskTreeComponent(xid, ltable->internal_region_size, ltable->datapage_region_size, ltable->datapage_size, stats, (ltable->max_c0_size * *ltable->R() + stats->base_size)/ 1000); +// diskTreeComponent * c2_prime = new diskTreeComponent(xid, ltable->internal_region_size, ltable->datapage_region_size, ltable->datapage_size, stats); rwlc_unlock(ltable->header_mut);