#2 seems to be correct

Merged
谢瑞阳 merged 1 commits from xry into master 9 months ago
  1. +12
    -9
      db/db_impl.cc
  2. +2
    -0
      db/db_impl.h
  3. +2
    -2
      test/test.cpp

+ 12
- 9
db/db_impl.cc View File

@ -281,6 +281,10 @@ void DBImpl::RemoveObsoleteFiles() {
}
Log(options_.info_log, "Delete type=%d #%lld\n", static_cast<int>(type),
static_cast<unsigned long long>(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<uint64_t> 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;

+ 2
- 0
db/db_impl.h View File

@ -10,6 +10,7 @@
#include <set>
#include <string>
#include <mutex>
#include <map>
#include <shared_mutex>
#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<uint64_t,uint64_t> oldvaluelog_ids;
uint32_t seed_ GUARDED_BY(mutex_); // For sampling.
// Queue of writers.

+ 2
- 2
test/test.cpp View File

@ -167,7 +167,7 @@ TEST(Test, LARGE_DATA_COMPACT_TEST) {
abort();
}
std::vector<std::string> 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);

Loading…
Cancel
Save