This is an automated email from the ASF dual-hosted git repository.

gehafearless pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git


The following commit(s) were added to refs/heads/master by this push:
     new 1c4fcbb2d refactor(meta_store): Reduce the dependency of meta_store 
(#1932)
1c4fcbb2d is described below

commit 1c4fcbb2de063c8a264a3db582391993d15d0eaa
Author: Yingchun Lai <[email protected]>
AuthorDate: Thu Mar 7 14:37:27 2024 +0800

    refactor(meta_store): Reduce the dependency of meta_store (#1932)
    
    Make class meta_store not derive from class replica_base and move it
    to pegasus_base module, then we can reuse it freely.
---
 src/{server => base}/meta_store.cpp          |  8 ++++----
 src/{server => base}/meta_store.h            | 14 +++++++++-----
 src/server/pegasus_server_impl.cpp           | 25 ++++++++++++-------------
 src/server/pegasus_server_impl.h             |  3 ---
 src/server/pegasus_server_impl_init.cpp      |  2 +-
 src/server/pegasus_write_service_impl.h      |  2 +-
 src/server/rocksdb_wrapper.cpp               |  2 +-
 src/server/test/CMakeLists.txt               |  2 +-
 src/server/test/pegasus_server_impl_test.cpp |  2 +-
 9 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/src/server/meta_store.cpp b/src/base/meta_store.cpp
similarity index 96%
rename from src/server/meta_store.cpp
rename to src/base/meta_store.cpp
index db0b9a0a4..94aaf7db7 100644
--- a/src/server/meta_store.cpp
+++ b/src/base/meta_store.cpp
@@ -23,13 +23,13 @@
 #include <rocksdb/status.h>
 
 #include "common/replica_envs.h"
-#include "server/pegasus_server_impl.h"
 #include "utils/fmt_logging.h"
 #include "utils/string_conv.h"
 
 namespace pegasus {
 namespace server {
-
+const std::string meta_store::DATA_COLUMN_FAMILY_NAME = "default";
+const std::string meta_store::META_COLUMN_FAMILY_NAME = "pegasus_meta_cf";
 const std::string meta_store::DATA_VERSION = "pegasus_data_version";
 const std::string meta_store::LAST_FLUSHED_DECREE = 
"pegasus_last_flushed_decree";
 const std::string meta_store::LAST_MANUAL_COMPACT_FINISH_TIME =
@@ -38,10 +38,10 @@ const std::string 
meta_store::ROCKSDB_ENV_USAGE_SCENARIO_NORMAL = "normal";
 const std::string meta_store::ROCKSDB_ENV_USAGE_SCENARIO_PREFER_WRITE = 
"prefer_write";
 const std::string meta_store::ROCKSDB_ENV_USAGE_SCENARIO_BULK_LOAD = 
"bulk_load";
 
-meta_store::meta_store(pegasus_server_impl *server,
+meta_store::meta_store(const char *log_prefix,
                        rocksdb::DB *db,
                        rocksdb::ColumnFamilyHandle *meta_cf)
-    : replica_base(server), _db(db), _meta_cf(meta_cf)
+    : _log_prefix(log_prefix), _db(db), _meta_cf(meta_cf)
 {
     // disable write ahead logging as replication handles logging instead now
     _wt_opts.disableWAL = true;
diff --git a/src/server/meta_store.h b/src/base/meta_store.h
similarity index 92%
rename from src/server/meta_store.h
rename to src/base/meta_store.h
index d8744a1cc..060692d5c 100644
--- a/src/server/meta_store.h
+++ b/src/base/meta_store.h
@@ -24,7 +24,6 @@
 #include <stdint.h>
 #include <string>
 
-#include "replica/replica_base.h"
 #include "utils/error_code.h"
 
 namespace rocksdb {
@@ -35,16 +34,18 @@ class DB;
 namespace pegasus {
 namespace server {
 
-class pegasus_server_impl;
-
 // Manage meta data of Pegasus, now support
 // - pegasus_data_version
 // - pegasus_last_flushed_decree
 // - pegasus_last_manual_compact_finish_time
-class meta_store : public dsn::replication::replica_base
+class meta_store
 {
 public:
-    meta_store(pegasus_server_impl *server, rocksdb::DB *db, 
rocksdb::ColumnFamilyHandle *meta_cf);
+    // Column family names.
+    static const std::string DATA_COLUMN_FAMILY_NAME;
+    static const std::string META_COLUMN_FAMILY_NAME;
+
+    meta_store(const char *log_prefix, rocksdb::DB *db, 
rocksdb::ColumnFamilyHandle *meta_cf);
 
     dsn::error_code get_last_flushed_decree(uint64_t *decree) const;
     uint64_t get_decree_from_readonly_db(rocksdb::DB *db,
@@ -85,6 +86,8 @@ private:
     FRIEND_TEST(pegasus_server_impl_test, test_open_db_with_latest_options);
     FRIEND_TEST(pegasus_server_impl_test, test_open_db_with_app_envs);
 
+    const char *log_prefix() const { return _log_prefix.c_str(); }
+
     // Keys of meta data wrote into meta column family.
     static const std::string DATA_VERSION;
     static const std::string LAST_FLUSHED_DECREE;
@@ -93,6 +96,7 @@ private:
     static const std::string ROCKSDB_ENV_USAGE_SCENARIO_PREFER_WRITE;
     static const std::string ROCKSDB_ENV_USAGE_SCENARIO_BULK_LOAD;
 
+    const std::string _log_prefix;
     rocksdb::DB *_db;
     rocksdb::ColumnFamilyHandle *_meta_cf;
     rocksdb::WriteOptions _wt_opts;
diff --git a/src/server/pegasus_server_impl.cpp 
b/src/server/pegasus_server_impl.cpp
index 5c62455cc..2ccf73f1d 100644
--- a/src/server/pegasus_server_impl.cpp
+++ b/src/server/pegasus_server_impl.cpp
@@ -46,6 +46,7 @@
 
 #include "absl/strings/string_view.h"
 #include "base/idl_utils.h" // IWYU pragma: keep
+#include "base/meta_store.h"
 #include "base/pegasus_key_schema.h"
 #include "base/pegasus_utils.h"
 #include "base/pegasus_value_schema.h"
@@ -56,7 +57,6 @@
 #include "consensus_types.h"
 #include "dsn.layer2_types.h"
 #include "hotkey_collector.h"
-#include "meta_store.h"
 #include "pegasus_rpc_types.h"
 #include "pegasus_server_write.h"
 #include "replica_admin_types.h"
@@ -142,8 +142,6 @@ std::shared_ptr<rocksdb::WriteBufferManager> 
pegasus_server_impl::_s_write_buffe
 METRIC_VAR_DEFINE_gauge_int64(rdb_block_cache_mem_usage_bytes, 
pegasus_server_impl);
 METRIC_VAR_DEFINE_gauge_int64(rdb_write_rate_limiter_through_bytes_per_sec, 
pegasus_server_impl);
 const std::string pegasus_server_impl::COMPRESSION_HEADER = "per_level:";
-const std::string pegasus_server_impl::DATA_COLUMN_FAMILY_NAME = "default";
-const std::string pegasus_server_impl::META_COLUMN_FAMILY_NAME = 
"pegasus_meta_cf";
 const std::chrono::seconds pegasus_server_impl::kServerStatUpdateTimeSec = 
std::chrono::seconds(10);
 
 // should be same with items in dsn::backup_restore_constant
@@ -1691,7 +1689,7 @@ dsn::error_code pegasus_server_impl::start(int argc, char 
**argv)
 
         if (!has_incompatible_db_options) {
             for (int i = 0; i < loaded_cf_descs.size(); ++i) {
-                if (loaded_cf_descs[i].name == DATA_COLUMN_FAMILY_NAME) {
+                if (loaded_cf_descs[i].name == 
meta_store::DATA_COLUMN_FAMILY_NAME) {
                     loaded_data_cf_opts = loaded_cf_descs[i].options;
                 }
             }
@@ -1710,7 +1708,8 @@ dsn::error_code pegasus_server_impl::start(int argc, char 
**argv)
     }
 
     std::vector<rocksdb::ColumnFamilyDescriptor> column_families(
-        {{DATA_COLUMN_FAMILY_NAME, _table_data_cf_opts}, 
{META_COLUMN_FAMILY_NAME, _meta_cf_opts}});
+        {{meta_store::DATA_COLUMN_FAMILY_NAME, _table_data_cf_opts},
+         {meta_store::META_COLUMN_FAMILY_NAME, _meta_cf_opts}});
     rocksdb::ConfigOptions config_options;
     config_options.ignore_unknown_options = true;
     config_options.ignore_unsupported_options = true;
@@ -1730,13 +1729,13 @@ dsn::error_code pegasus_server_impl::start(int argc, 
char **argv)
         return dsn::ERR_LOCAL_APP_FAILURE;
     }
     CHECK_EQ_PREFIX(2, handles_opened.size());
-    CHECK_EQ_PREFIX(handles_opened[0]->GetName(), DATA_COLUMN_FAMILY_NAME);
-    CHECK_EQ_PREFIX(handles_opened[1]->GetName(), META_COLUMN_FAMILY_NAME);
+    CHECK_EQ_PREFIX(handles_opened[0]->GetName(), 
meta_store::DATA_COLUMN_FAMILY_NAME);
+    CHECK_EQ_PREFIX(handles_opened[1]->GetName(), 
meta_store::META_COLUMN_FAMILY_NAME);
     _data_cf = handles_opened[0];
     _meta_cf = handles_opened[1];
 
     // Create _meta_store which provide Pegasus meta data read and write.
-    _meta_store = std::make_unique<meta_store>(this, _db, _meta_cf);
+    _meta_store = std::make_unique<meta_store>(replica_name(), _db, _meta_cf);
 
     if (db_exist) {
         auto cleanup = dsn::defer([this]() { release_db(); });
@@ -2192,8 +2191,8 @@ private:
         // Because of RocksDB's restriction, we have to to open default column 
family even though
         // not use it
         std::vector<rocksdb::ColumnFamilyDescriptor> column_families(
-            {{DATA_COLUMN_FAMILY_NAME, rocksdb::ColumnFamilyOptions()},
-             {META_COLUMN_FAMILY_NAME, rocksdb::ColumnFamilyOptions()}});
+            {{meta_store::DATA_COLUMN_FAMILY_NAME, 
rocksdb::ColumnFamilyOptions()},
+             {meta_store::META_COLUMN_FAMILY_NAME, 
rocksdb::ColumnFamilyOptions()}});
         status = rocksdb::DB::OpenForReadOnly(
             _db_opts, checkpoint_dir, column_families, &handles_opened, 
&snapshot_db);
         if (!status.ok()) {
@@ -2204,7 +2203,7 @@ private:
             return ::dsn::ERR_LOCAL_APP_FAILURE;
         }
         CHECK_EQ_PREFIX(handles_opened.size(), 2);
-        CHECK_EQ_PREFIX(handles_opened[1]->GetName(), META_COLUMN_FAMILY_NAME);
+        CHECK_EQ_PREFIX(handles_opened[1]->GetName(), 
meta_store::META_COLUMN_FAMILY_NAME);
         uint64_t last_flushed_decree =
             _meta_store->get_decree_from_readonly_db(snapshot_db, 
handles_opened[1]);
         *checkpoint_decree = last_flushed_decree;
@@ -3322,9 +3321,9 @@ bool pegasus_server_impl::set_options(
     }
 
     for (const auto &column_family : column_families) {
-        if (column_family == META_COLUMN_FAMILY_NAME) {
+        if (column_family == meta_store::META_COLUMN_FAMILY_NAME) {
             *missing_meta_cf = false;
-        } else if (column_family == DATA_COLUMN_FAMILY_NAME) {
+        } else if (column_family == meta_store::DATA_COLUMN_FAMILY_NAME) {
             *missing_data_cf = false;
         } else {
             LOG_ERROR_PREFIX("unknown column family name: {}", column_family);
diff --git a/src/server/pegasus_server_impl.h b/src/server/pegasus_server_impl.h
index 7cac63440..69d02d061 100644
--- a/src/server/pegasus_server_impl.h
+++ b/src/server/pegasus_server_impl.h
@@ -476,9 +476,6 @@ private:
 private:
     static const std::chrono::seconds kServerStatUpdateTimeSec;
     static const std::string COMPRESSION_HEADER;
-    // Column family names.
-    static const std::string DATA_COLUMN_FAMILY_NAME;
-    static const std::string META_COLUMN_FAMILY_NAME;
 
     dsn::gpid _gpid;
     std::string _primary_address;
diff --git a/src/server/pegasus_server_impl_init.cpp 
b/src/server/pegasus_server_impl_init.cpp
index 4d2e3f1aa..e2321f2e8 100644
--- a/src/server/pegasus_server_impl_init.cpp
+++ b/src/server/pegasus_server_impl_init.cpp
@@ -37,6 +37,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/meta_store.h" // IWYU pragma: keep
 #include "common/gpid.h"
 #include "hashkey_transform.h"
 #include "hotkey_collector.h"
@@ -48,7 +49,6 @@
 #include "runtime/rpc/rpc_address.h"
 #include "server/capacity_unit_calculator.h" // IWYU pragma: keep
 #include "server/key_ttl_compaction_filter.h"
-#include "server/meta_store.h" // IWYU pragma: keep
 #include "server/pegasus_read_service.h"
 #include "server/pegasus_server_write.h" // IWYU pragma: keep
 #include "server/range_read_limiter.h"
diff --git a/src/server/pegasus_write_service_impl.h 
b/src/server/pegasus_write_service_impl.h
index 3ac6bfe95..df57c59be 100644
--- a/src/server/pegasus_write_service_impl.h
+++ b/src/server/pegasus_write_service_impl.h
@@ -22,9 +22,9 @@
 #include <gtest/gtest_prod.h>
 
 #include "base/idl_utils.h"
+#include "base/meta_store.h"
 #include "base/pegasus_key_schema.h"
 #include "logging_utils.h"
-#include "meta_store.h"
 #include "pegasus_server_impl.h"
 #include "pegasus_write_service.h"
 #include "rocksdb_wrapper.h"
diff --git a/src/server/rocksdb_wrapper.cpp b/src/server/rocksdb_wrapper.cpp
index 8331dbfd9..e4d6e3b21 100644
--- a/src/server/rocksdb_wrapper.cpp
+++ b/src/server/rocksdb_wrapper.cpp
@@ -24,12 +24,12 @@
 #include <rocksdb/slice.h>
 #include <rocksdb/status.h>
 
+#include "base/meta_store.h"
 #include "base/pegasus_value_schema.h"
 #include "pegasus_key_schema.h"
 #include "pegasus_utils.h"
 #include "pegasus_write_service_impl.h"
 #include "server/logging_utils.h"
-#include "server/meta_store.h"
 #include "server/pegasus_server_impl.h"
 #include "server/pegasus_write_service.h"
 #include "utils/autoref_ptr.h"
diff --git a/src/server/test/CMakeLists.txt b/src/server/test/CMakeLists.txt
index 5907476d3..082a98c1e 100644
--- a/src/server/test/CMakeLists.txt
+++ b/src/server/test/CMakeLists.txt
@@ -26,11 +26,11 @@ set(MY_PROJ_SRC
         "../capacity_unit_calculator.cpp"
         "../pegasus_mutation_duplicator.cpp"
         "../hotspot_partition_calculator.cpp"
-        "../meta_store.cpp"
         "../hotkey_collector.cpp"
         "../rocksdb_wrapper.cpp"
         "../compaction_filter_rule.cpp"
         "../compaction_operation.cpp")
+
 set(MY_SRC_SEARCH_MODE "GLOB")
 set(MY_PROJ_LIBS
         dsn_replica_server
diff --git a/src/server/test/pegasus_server_impl_test.cpp 
b/src/server/test/pegasus_server_impl_test.cpp
index a1cf77db4..229927d35 100644
--- a/src/server/test/pegasus_server_impl_test.cpp
+++ b/src/server/test/pegasus_server_impl_test.cpp
@@ -28,6 +28,7 @@
 #include <string>
 #include <utility>
 
+#include "base/meta_store.h"
 #include "common/replica_envs.h"
 #include "gmock/gmock.h"
 #include "gtest/gtest.h"
@@ -35,7 +36,6 @@
 #include "rrdb/rrdb.code.definition.h"
 #include "rrdb/rrdb_types.h"
 #include "runtime/serverlet.h"
-#include "server/meta_store.h"
 #include "server/pegasus_read_service.h"
 #include "utils/autoref_ptr.h"
 #include "utils/blob.h"


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to