From 5096ce226edb2ae7e85c4a0538e5054bef8d7168 Mon Sep 17 00:00:00 2001 From: alexfisher <1823748191@qq.com> Date: Sun, 1 Dec 2024 22:13:48 +0800 Subject: [PATCH] seems to be correct --- db/db_impl.cc | 21 ++++++++++++--------- db/db_impl.h | 2 ++ test/test.cpp | 4 ++-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/db/db_impl.cc b/db/db_impl.cc index 94a45b2..d00a2fb 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -281,6 +281,10 @@ void DBImpl::RemoveObsoleteFiles() { } Log(options_.info_log, "Delete type=%d #%lld\n", static_cast(type), static_cast(number)); + if(oldvaluelog_ids.count(number)){ + std::string valuelog_filename=ValueLogFileName(dbname_,oldvaluelog_ids[number]); + env_->RemoveFile(valuelog_filename); + } } } } @@ -951,10 +955,9 @@ Status DBImpl::DoCompactionWork(CompactionState* compact) { std::string current_user_key; bool has_current_user_key = false; SequenceNumber last_sequence_for_key = kMaxSequenceNumber; - std::set old_valuelog_ids; for (int which = 0; which < 2; which++) { for (int i = 0; i < compact->compaction->num_input_files(which); i++) { - if(compact->compaction->input(which, i)->valuelog_id)old_valuelog_ids.emplace(compact->compaction->input(which, i)->valuelog_id); + if(compact->compaction->input(which, i)->valuelog_id)oldvaluelog_ids[compact->compaction->input(which, i)->number]=compact->compaction->input(which, i)->valuelog_id; } } while (input->Valid() && !shutting_down_.load(std::memory_order_acquire)) { @@ -1090,13 +1093,13 @@ Status DBImpl::DoCompactionWork(CompactionState* compact) { status = input->status(); } //not completely correct, should be written in new function, related to removeabsol... - if(status.ok()){ - for(auto id:old_valuelog_ids){ - auto valuelog_filename=ValueLogFileName(dbname_,id); - Status s=env_->RemoveFile(valuelog_filename); - assert(s.ok()); - } - } + // if(status.ok()){ + // for(auto id:old_valuelog_ids){ + // auto valuelog_filename=ValueLogFileName(dbname_,id); + // Status s=env_->RemoveFile(valuelog_filename); + // assert(s.ok()); + // } + // } delete input; input = nullptr; diff --git a/db/db_impl.h b/db/db_impl.h index 767d41c..ab21773 100644 --- a/db/db_impl.h +++ b/db/db_impl.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include "db/dbformat.h" @@ -203,6 +204,7 @@ class DBImpl : public DB { uint64_t logfile_number_; uint64_t valuelogfile_number_; log::Writer* log_; + std::map oldvaluelog_ids; uint32_t seed_ GUARDED_BY(mutex_); // For sampling. // Queue of writers. diff --git a/test/test.cpp b/test/test.cpp index ca6a5ec..0464fbd 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -167,7 +167,7 @@ TEST(Test, LARGE_DATA_COMPACT_TEST) { abort(); } std::vector values; - for(int i=0;i<100000;i++){ + for(int i=0;i<500000;i++){ std::string key=std::to_string(i); std::string value; for(int j=0;j<1000;j++){ @@ -176,7 +176,7 @@ TEST(Test, LARGE_DATA_COMPACT_TEST) { values.push_back(value); db->Put(writeOptions,key,value); } - for(int i=0;i<100000;i++){ + for(int i=0;i<500000;i++){ std::string key=std::to_string(i); std::string value; Status s=db->Get(readOptions,key,&value);