From 6102110245eee8b130533f33efd85a7a3e640d76 Mon Sep 17 00:00:00 2001 From: alexfisher <1823748191@qq.com> Date: Sun, 1 Dec 2024 22:52:28 +0800 Subject: [PATCH] fix deletion bug for version 2 --- CMakeLists.txt | 4 ++-- db/db_impl.cc | 2 +- include/leveldb/slice.h | 3 +++ test/benchmark_4leveldb.cpp | 4 ++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 019814b..91a44f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -521,7 +521,7 @@ add_executable(db_test1 "${PROJECT_SOURCE_DIR}/test/test.cpp" ) target_link_libraries(db_test1 PRIVATE leveldb gtest) -add_executable(db_test2 +add_executable(db_test_bench "${PROJECT_SOURCE_DIR}/test/benchmark_4leveldb.cpp" ) -target_link_libraries(db_test2 PRIVATE leveldb gtest) \ No newline at end of file +target_link_libraries(db_test_bench PRIVATE leveldb gtest) \ No newline at end of file diff --git a/db/db_impl.cc b/db/db_impl.cc index d00a2fb..56d51ec 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -1044,7 +1044,7 @@ Status DBImpl::DoCompactionWork(CompactionState* compact) { Slice old_value=input->value(); Slice new_value; std::string buf=""; - if(old_value.data()[0]==(char)(0x00)){ + if(old_value.size()==0||old_value.data()[0]==(char)(0x00)){//when it is a deletion, input->value() will be "" new_value=old_value; } else{ diff --git a/include/leveldb/slice.h b/include/leveldb/slice.h index e97223a..d225f34 100644 --- a/include/leveldb/slice.h +++ b/include/leveldb/slice.h @@ -69,6 +69,9 @@ class LEVELDB_EXPORT Slice { // Drop the first "n" bytes from this slice. void remove_prefix(size_t n) { + if(n>size()){ + assert(0); + } assert(n <= size()); data_ += n; size_ -= n; diff --git a/test/benchmark_4leveldb.cpp b/test/benchmark_4leveldb.cpp index e5cd665..7573a04 100644 --- a/test/benchmark_4leveldb.cpp +++ b/test/benchmark_4leveldb.cpp @@ -7,11 +7,11 @@ #include "leveldb/db.h" // 配置 -const int TEST_EXPONENT = 4; +const int TEST_EXPONENT = 5; const int TEST_FREQUENCY = static_cast(std::pow(10, TEST_EXPONENT)); const int MIN_STR_LEN = 255; const int MAX_STR_LEN = 1024; -const std::string DB_PATH = "./db_benchmark"; +const std::string DB_PATH = "db_benchmark"; const std::string CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 多语言