From 43fe2f30ed12d2d7722b6c94f5139b352627d7d9 Mon Sep 17 00:00:00 2001 From: Wesley <10225102463@stu.ecnu.edu.cn> Date: Wed, 6 Nov 2024 18:57:47 +0800 Subject: [PATCH] !NOT for USE! Compact last level --- db/db_impl.cc | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/db/db_impl.cc b/db/db_impl.cc index 72526c1..03b7c6b 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -604,10 +604,33 @@ void DBImpl::TEST_CompactRange(int level, const Slice* begin, assert(level >= 0); assert(level < config::kNumLevels); - if (level + 1 == config::kNumLevels) { - // TTL: TODO: update files in the last level - return; - } + // if (level == config::kNumLevels - 1) { + // // TTL: TODO: update files in the last level + // mutex_.AssertHeld(); + + // Compaction* c; + // c = versions_->CompactRange(level, begin, end); + + // Iterator* files = versions_->MakeInputIterator(c); + + // while (files->Valid() && !shutting_down_.load(std::memory_order_acquire)) { + // std::string value = files->value().ToString(); + // uint64_t ddl; + // DecodeDeadLineValue(&value, ddl); + + // if (ddl != 0) { + // if (ddl <= std::time(nullptr)) { + // c->edit()->RemoveFile(c->level(), number); + // versions_->LogAndApply(c->edit(), &mutex_); + // } + // } + + + // files->Next(); + // } + + // return; + // } InternalKey begin_storage, end_storage; @@ -627,6 +650,34 @@ void DBImpl::TEST_CompactRange(int level, const Slice* begin, manual.end = &end_storage; } + if (level == config::kNumLevels - 1) { + // TTL: TODO: update files in the last level + mutex_.AssertHeld(); + + Compaction* c; + c = versions_->CompactRange(level, nullptr, nullptr); + + Iterator* files = versions_->MakeInputIterator(c); + + while (files->Valid() && !shutting_down_.load(std::memory_order_acquire)) { + std::string value = files->value().ToString(); + uint64_t ddl; + DecodeDeadLineValue(&value, ddl); + + if (ddl != 0) { + if (ddl <= std::time(nullptr)) { + c->edit()->RemoveFile(c->level(), number); + versions_->LogAndApply(c->edit(), &mutex_); + } + } + + + files->Next(); + } + + return; + } // ttl end + MutexLock l(&mutex_); while (!manual.done && !shutting_down_.load(std::memory_order_acquire) && bg_error_.ok()) {