Browse Source

Merge pull request 'seems to be correct' (#2) from xry into master

Reviewed-on: https://gitea.shuishan.net.cn/10225101483/XOY-leveldb-exp2/pulls/2
xry
谢瑞阳 9 months ago
parent
commit
59cab35663
3 changed files with 16 additions and 11 deletions
  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), Log(options_.info_log, "Delete type=%d #%lld\n", static_cast<int>(type),
static_cast<unsigned long long>(number)); 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; std::string current_user_key;
bool has_current_user_key = false; bool has_current_user_key = false;
SequenceNumber last_sequence_for_key = kMaxSequenceNumber; SequenceNumber last_sequence_for_key = kMaxSequenceNumber;
std::set<uint64_t> old_valuelog_ids;
for (int which = 0; which < 2; which++) { for (int which = 0; which < 2; which++) {
for (int i = 0; i < compact->compaction->num_input_files(which); i++) { 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)) { while (input->Valid() && !shutting_down_.load(std::memory_order_acquire)) {
@ -1090,13 +1093,13 @@ Status DBImpl::DoCompactionWork(CompactionState* compact) {
status = input->status(); status = input->status();
} }
//not completely correct, should be written in new function, related to removeabsol... //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; delete input;
input = nullptr; input = nullptr;

+ 2
- 0
db/db_impl.h View File

@ -10,6 +10,7 @@
#include <set> #include <set>
#include <string> #include <string>
#include <mutex> #include <mutex>
#include <map>
#include <shared_mutex> #include <shared_mutex>
#include "db/dbformat.h" #include "db/dbformat.h"
@ -203,6 +204,7 @@ class DBImpl : public DB {
uint64_t logfile_number_; uint64_t logfile_number_;
uint64_t valuelogfile_number_; uint64_t valuelogfile_number_;
log::Writer* log_; log::Writer* log_;
std::map<uint64_t,uint64_t> oldvaluelog_ids;
uint32_t seed_ GUARDED_BY(mutex_); // For sampling. uint32_t seed_ GUARDED_BY(mutex_); // For sampling.
// Queue of writers. // Queue of writers.

+ 2
- 2
test/test.cpp View File

@ -167,7 +167,7 @@ TEST(Test, LARGE_DATA_COMPACT_TEST) {
abort(); abort();
} }
std::vector<std::string> values; 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 key=std::to_string(i);
std::string value; std::string value;
for(int j=0;j<1000;j++){ for(int j=0;j<1000;j++){
@ -176,7 +176,7 @@ TEST(Test, LARGE_DATA_COMPACT_TEST) {
values.push_back(value); values.push_back(value);
db->Put(writeOptions,key,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 key=std::to_string(i);
std::string value; std::string value;
Status s=db->Get(readOptions,key,&value); Status s=db->Get(readOptions,key,&value);

Loading…
Cancel
Save