You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kvrocks.apache.org by hu...@apache.org on 2023/11/06 09:58:12 UTC
(kvrocks) branch unstable updated: Add column family parameter to Compact methon (#1878)
This is an automated email from the ASF dual-hosted git repository.
hulk pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks.git
The following commit(s) were added to refs/heads/unstable by this push:
new 0ea85d42 Add column family parameter to Compact methon (#1878)
0ea85d42 is described below
commit 0ea85d42ddcb7ad22347f5b19672a30762f765ac
Author: raffertyyu <ra...@tencent.com>
AuthorDate: Mon Nov 6 17:58:07 2023 +0800
Add column family parameter to Compact methon (#1878)
---
src/server/server.cc | 2 +-
src/storage/compaction_checker.cc | 6 +++---
src/storage/storage.cc | 5 +++--
src/storage/storage.h | 3 ++-
tests/cppunit/compact_test.cc | 10 +++++-----
5 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/src/server/server.cc b/src/server/server.cc
index 4f860152..03f2eae7 100644
--- a/src/server/server.cc
+++ b/src/server/server.cc
@@ -1253,7 +1253,7 @@ Status Server::AsyncCompactDB(const std::string &begin_key, const std::string &e
if (!begin_key.empty()) begin = std::make_unique<Slice>(begin_key);
if (!end_key.empty()) end = std::make_unique<Slice>(end_key);
- auto s = storage->Compact(begin.get(), end.get());
+ auto s = storage->Compact(nullptr, begin.get(), end.get());
if (!s.ok()) {
LOG(ERROR) << "[task runner] Failed to do compaction: " << s.ToString();
}
diff --git a/src/storage/compaction_checker.cc b/src/storage/compaction_checker.cc
index 17f9e87c..55502b2a 100644
--- a/src/storage/compaction_checker.cc
+++ b/src/storage/compaction_checker.cc
@@ -59,7 +59,7 @@ void CompactionChecker::PickCompactionFiles(const std::string &cf_name) {
auto force_compact_file_age = storage_->GetConfig()->force_compact_file_age;
auto force_compact_min_ratio =
- static_cast<double>(storage_->GetConfig()->force_compact_file_min_deleted_percentage / 100);
+ static_cast<double>(storage_->GetConfig()->force_compact_file_min_deleted_percentage) / 100.0;
std::string best_filename;
double best_delete_ratio = 0;
@@ -112,7 +112,7 @@ void CompactionChecker::PickCompactionFiles(const std::string &cf_name) {
if (file_creation_time < static_cast<uint64_t>(now - force_compact_file_age) &&
delete_ratio >= force_compact_min_ratio) {
LOG(INFO) << "[compaction checker] Going to compact the key in file (force compact policy): " << iter.first;
- auto s = storage_->Compact(&start_key, &stop_key);
+ auto s = storage_->Compact(cf, &start_key, &stop_key);
LOG(INFO) << "[compaction checker] Compact the key in file (force compact policy): " << iter.first
<< " finished, result: " << s.ToString();
max_files_to_compact--;
@@ -135,7 +135,7 @@ void CompactionChecker::PickCompactionFiles(const std::string &cf_name) {
if (best_delete_ratio > 0.1 && !best_start_key.empty() && !best_stop_key.empty()) {
LOG(INFO) << "[compaction checker] Going to compact the key in file: " << best_filename
<< ", delete ratio: " << best_delete_ratio;
- auto s = storage_->Compact(&best_start_key, &best_stop_key);
+ auto s = storage_->Compact(cf, &best_start_key, &best_stop_key);
if (!s.ok()) {
LOG(ERROR) << "[compaction checker] Failed to do compaction: " << s.ToString();
}
diff --git a/src/storage/storage.cc b/src/storage/storage.cc
index 70855dcb..5710823c 100644
--- a/src/storage/storage.cc
+++ b/src/storage/storage.cc
@@ -640,13 +640,14 @@ rocksdb::ColumnFamilyHandle *Storage::GetCFHandle(const std::string &name) {
return cf_handles_[0];
}
-rocksdb::Status Storage::Compact(const Slice *begin, const Slice *end) {
+rocksdb::Status Storage::Compact(rocksdb::ColumnFamilyHandle *cf, const Slice *begin, const Slice *end) {
rocksdb::CompactRangeOptions compact_opts;
compact_opts.change_level = true;
// For the manual compaction, we would like to force the bottommost level to be compacted.
// Or it may use the trivial mode and some expired key-values were still exist in the bottommost level.
compact_opts.bottommost_level_compaction = rocksdb::BottommostLevelCompaction::kForceOptimized;
- for (const auto &cf_handle : cf_handles_) {
+ const auto &cf_handles = cf ? std::vector<rocksdb::ColumnFamilyHandle *>{cf} : cf_handles_;
+ for (const auto &cf_handle : cf_handles) {
rocksdb::Status s = db_->CompactRange(compact_opts, cf_handle, begin, end);
if (!s.ok()) return s;
}
diff --git a/src/storage/storage.h b/src/storage/storage.h
index 902f7e76..e8d6562a 100644
--- a/src/storage/storage.h
+++ b/src/storage/storage.h
@@ -125,7 +125,8 @@ class Storage {
Status InWALBoundary(rocksdb::SequenceNumber seq);
Status WriteToPropagateCF(const std::string &key, const std::string &value);
- [[nodiscard]] rocksdb::Status Compact(const rocksdb::Slice *begin, const rocksdb::Slice *end);
+ [[nodiscard]] rocksdb::Status Compact(rocksdb::ColumnFamilyHandle *cf, const rocksdb::Slice *begin,
+ const rocksdb::Slice *end);
rocksdb::DB *GetDB();
bool IsClosing() const { return db_closing_; }
std::string GetName() const { return config_->db_name; }
diff --git a/tests/cppunit/compact_test.cc b/tests/cppunit/compact_test.cc
index 42ae3907..c482173f 100644
--- a/tests/cppunit/compact_test.cc
+++ b/tests/cppunit/compact_test.cc
@@ -49,11 +49,11 @@ TEST(Compact, Filter) {
hash->Set(live_hash_key, "f1", "v1", &ret);
hash->Set(live_hash_key, "f2", "v2", &ret);
- auto status = storage->Compact(nullptr, nullptr);
+ auto status = storage->Compact(nullptr, nullptr, nullptr);
assert(status.ok());
// Compact twice to workaround issue fixed by: https://github.com/facebook/rocksdb/pull/11468
// before rocksdb/speedb 8.1.1. This line can be removed after speedb upgraded above 8.1.1.
- status = storage->Compact(nullptr, nullptr);
+ status = storage->Compact(nullptr, nullptr, nullptr);
assert(status.ok());
rocksdb::DB* db = storage->GetDB();
@@ -85,9 +85,9 @@ TEST(Compact, Filter) {
usleep(10000);
// Same as the above compact, need to compact twice here
- status = storage->Compact(nullptr, nullptr);
+ status = storage->Compact(nullptr, nullptr, nullptr);
assert(status.ok());
- status = storage->Compact(nullptr, nullptr);
+ status = storage->Compact(nullptr, nullptr, nullptr);
assert(status.ok());
iter = new_iterator("default");
@@ -107,7 +107,7 @@ TEST(Compact, Filter) {
int retry = 2;
while (retry-- > 0) {
- status = storage->Compact(nullptr, nullptr);
+ status = storage->Compact(nullptr, nullptr, nullptr);
assert(status.ok());
std::vector<FieldValue> fieldvalues;
auto get_res = hash->GetAll(mk_with_ttl, &fieldvalues);