Просмотр исходного кода

TestTTL.CompactionTTL passed

master
马也驰 6 месяцев назад
Родитель
Сommit
0cefdf5ace
2 измененных файлов: 33 добавлений и 16 удалений
  1. +32
    -15
      db/db_impl.cc
  2. +1
    -1
      test/ttl_test.cc

+ 32
- 15
db/db_impl.cc Просмотреть файл

@ -594,6 +594,8 @@ void DBImpl::CompactRange(const Slice* begin, const Slice* end) {
for (int level = 0; level < max_level_with_files; level++) { for (int level = 0; level < max_level_with_files; level++) {
TEST_CompactRange(level, begin, end); TEST_CompactRange(level, begin, end);
} }
/// For TTL
TEST_CompactRange(max_level_with_files, begin, end);
} }
void DBImpl::TEST_CompactRange(int level, const Slice* begin, void DBImpl::TEST_CompactRange(int level, const Slice* begin,
@ -735,21 +737,21 @@ void DBImpl::BackgroundCompaction() {
if (c == nullptr) { if (c == nullptr) {
// Nothing to do // Nothing to do
} else if (!is_manual && c->IsTrivialMove()) { } else if (!is_manual && c->IsTrivialMove()) {
// Move file to next level // // Move file to next level
assert(c->num_input_files(0) == 1); // assert(c->num_input_files(0) == 1);
FileMetaData* f = c->input(0, 0); // FileMetaData* f = c->input(0, 0);
c->edit()->RemoveFile(c->level(), f->number); // c->edit()->RemoveFile(c->level(), f->number);
c->edit()->AddFile(c->level() + 1, f->number, f->file_size, f->smallest, // c->edit()->AddFile(c->level() + 1, f->number, f->file_size, f->smallest,
f->largest); // f->largest);
status = versions_->LogAndApply(c->edit(), &mutex_); // status = versions_->LogAndApply(c->edit(), &mutex_);
if (!status.ok()) { // if (!status.ok()) {
RecordBackgroundError(status); // RecordBackgroundError(status);
} // }
VersionSet::LevelSummaryStorage tmp; // VersionSet::LevelSummaryStorage tmp;
Log(options_.info_log, "Moved #%lld to level-%d %lld bytes %s: %s\n", // Log(options_.info_log, "Moved #%lld to level-%d %lld bytes %s: %s\n",
static_cast<unsigned long long>(f->number), c->level() + 1, // static_cast<unsigned long long>(f->number), c->level() + 1,
static_cast<unsigned long long>(f->file_size), // static_cast<unsigned long long>(f->file_size),
status.ToString().c_str(), versions_->LevelSummary(&tmp)); // status.ToString().c_str(), versions_->LevelSummary(&tmp));
} else { } else {
CompactionState* compact = new CompactionState(c); CompactionState* compact = new CompactionState(c);
status = DoCompactionWork(compact); status = DoCompactionWork(compact);
@ -979,6 +981,21 @@ Status DBImpl::DoCompactionWork(CompactionState* compact) {
drop = true; drop = true;
} }
/// For TTL
Slice value_ddl = input->value();
std::string value = value_ddl.ToString();
size_t pos = value.find_last_of('_');
if (pos != std::string::npos) {
std::string substring = value.substr(pos + 1);
auto ddl = static_cast<uint64_t>(std::stoll(substring));
auto now = std::chrono::system_clock::now();
auto timestamp = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()).count();
auto microsecondsTimestamp = static_cast<uint64_t>(timestamp);
if (ddl <= microsecondsTimestamp) {
drop = true;
}
}
last_sequence_for_key = ikey.sequence; last_sequence_for_key = ikey.sequence;
} }
#if 0 #if 0

+ 1
- 1
test/ttl_test.cc Просмотреть файл

@ -81,7 +81,7 @@ TEST(TestTTL, ReadTTL) {
TEST(TestTTL, CompactionTTL) { TEST(TestTTL, CompactionTTL) {
DB *db; DB *db;
if(OpenDB("testdb", &db).ok() == false) { if(OpenDB("testdb_", &db).ok() == false) {
std::cerr << "open db failed" << std::endl; std::cerr << "open db failed" << std::endl;
abort(); abort();
} }

||||||
x
 
000:0
Загрузка…
Отмена
Сохранить