diff --git a/db/db_impl.cc b/db/db_impl.cc index 458a951..435945a 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -389,6 +389,7 @@ Status DBImpl::Recover(VersionEdit* edit, bool* save_manifest) { // Recover in the order in which the logs were generated std::sort(logs.begin(), logs.end()); + assert( logs.size() == 0 || logs[logs.size() - 1] >= versions_->ImmLogFileNumber() ); // for (size_t i = 0; i < logs.size(); i++) { // s = RecoverLogFile(logs[i], (i == logs.size() - 1), save_manifest, edit, // &max_sequence); @@ -516,7 +517,8 @@ Status DBImpl::RecoverLogFile(uint64_t log_number, bool last_log, mem = new MemTable(internal_comparator_); mem->Ref(); } - status = WriteBatchInternal::InsertInto(&batch, mem); + // status = WriteBatchInternal::InsertInto(&batch, mem); + status = WriteBatchInternal::InsertInto(&batch, mem,log_number,record_offset + 4); MaybeIgnoreError(&status); if (!status.ok()) { break; @@ -545,6 +547,8 @@ Status DBImpl::RecoverLogFile(uint64_t log_number, bool last_log, break; } } + // 前面已经移除了一个头部了,所以偏移位置要个头部 + record_offset += record.size() + log::vHeaderSize ; } delete file; diff --git a/include/leveldb/options.h b/include/leveldb/options.h index cae933c..5ef05e5 100644 --- a/include/leveldb/options.h +++ b/include/leveldb/options.h @@ -155,7 +155,7 @@ struct LEVELDB_EXPORT Options { // gc 后台回收时候重新put的时候,默认的kv分离的值。 uint64_t background_garbage_collection_separate_ = 1024 * 1024 - 1; // 在open 数据库的时候就进行全盘的log文件回收 - bool start_garbage_collection = true; + bool start_garbage_collection = false; }; // Options that control read operations diff --git a/test/kv_test.cc b/test/kv_test.cc index 823b75e..173dc1f 100644 --- a/test/kv_test.cc +++ b/test/kv_test.cc @@ -11,8 +11,6 @@ constexpr int long_value_size = 32; constexpr int data_size = 512; Status OpenDB(std::string dbName, DB **db) { - - Options options; options.create_if_missing = true; return DB::Open(options, dbName, db); diff --git a/test/value_field_test.cc b/test/value_field_test.cc index b0ccb3d..ba0f1ad 100644 --- a/test/value_field_test.cc +++ b/test/value_field_test.cc @@ -7,8 +7,8 @@ using namespace leveldb; Status OpenDB(const std::string& dbName, DB** db) { // 如果数据库已经存在,则删除它。 - std::string rm_command = "rm -rf " + dbName; - system(rm_command.c_str()); +// std::string rm_command = "rm -rf " + dbName; +// system(rm_command.c_str()); Options options; options.create_if_missing = true;