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

zhaoliwei 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 4514b8f  feat(manual_compaction): replica report status part2. 
implement function query_compact_status (#854)
4514b8f is described below

commit 4514b8fced99b34a8ee7aec5181cae404ec80825
Author: HeYuchen <[email protected]>
AuthorDate: Fri Dec 10 10:09:20 2021 +0800

    feat(manual_compaction): replica report status part2. implement function 
query_compact_status (#854)
---
 rdsn                                          |  2 +-
 src/server/pegasus_manual_compact_service.cpp | 27 +++++++++++++++++++++++++++
 src/server/pegasus_manual_compact_service.h   |  4 ++++
 src/server/pegasus_server_impl.cpp            |  5 +++++
 src/server/pegasus_server_impl.h              |  2 ++
 5 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/rdsn b/rdsn
index a81b31c..3b7756b 160000
--- a/rdsn
+++ b/rdsn
@@ -1 +1 @@
-Subproject commit a81b31ce763ea71d8ae57ae3e88520123d47fd36
+Subproject commit 3b7756b536ad2a4019df9ec77d318a5dfe0b6724
diff --git a/src/server/pegasus_manual_compact_service.cpp 
b/src/server/pegasus_manual_compact_service.cpp
index f20f0ca..cf4901c 100644
--- a/src/server/pegasus_manual_compact_service.cpp
+++ b/src/server/pegasus_manual_compact_service.cpp
@@ -351,5 +351,32 @@ std::string 
pegasus_manual_compact_service::query_compact_state() const
     return state.str();
 }
 
+dsn::replication::manual_compaction_status::type
+pegasus_manual_compact_service::query_compact_status() const
+{
+    // Case1. last finish at [-]
+    // - partition is not running manual compaction
+    // Case2. last finish at [timestamp], last used {time_used} ms
+    // - partition manual compaction finished
+    // Case3. last finish at [-], recent enqueue at [timestamp]
+    // - partition is in manual compaction queue
+    // Case4. last finish at [-], recent enqueue at [timestamp], recent start 
at [timestamp]
+    // - partition is running manual compaction
+    uint64_t enqueue_time_ms = _manual_compact_enqueue_time_ms.load();
+    uint64_t start_time_ms = _manual_compact_start_running_time_ms.load();
+    uint64_t last_finish_time_ms = _manual_compact_last_finish_time_ms.load();
+    uint64_t last_time_used_ms = _manual_compact_last_time_used_ms.load();
+
+    if (start_time_ms > 0) {
+        return dsn::replication::manual_compaction_status::RUNNING;
+    } else if (enqueue_time_ms > 0) {
+        return dsn::replication::manual_compaction_status::QUEUING;
+    } else if (last_time_used_ms > 0 && last_finish_time_ms > 0) {
+        return dsn::replication::manual_compaction_status::FINISHED;
+    } else {
+        return dsn::replication::manual_compaction_status::IDLE;
+    }
+}
+
 } // namespace server
 } // namespace pegasus
diff --git a/src/server/pegasus_manual_compact_service.h 
b/src/server/pegasus_manual_compact_service.h
index 603df01..0abb50b 100644
--- a/src/server/pegasus_manual_compact_service.h
+++ b/src/server/pegasus_manual_compact_service.h
@@ -23,6 +23,7 @@
 #include <dsn/utility/string_view.h>
 #include <dsn/perf_counter/perf_counter_wrapper.h>
 #include <dsn/dist/replication/replica_base.h>
+#include <dsn/dist/replication/replication_types.h>
 
 namespace pegasus {
 namespace server {
@@ -38,8 +39,11 @@ public:
 
     void start_manual_compact_if_needed(const std::map<std::string, 
std::string> &envs);
 
+    // Called by pegasus_manual_compaction.sh
     std::string query_compact_state() const;
 
+    dsn::replication::manual_compaction_status::type query_compact_status() 
const;
+
 private:
     friend class manual_compact_service_test;
 
diff --git a/src/server/pegasus_server_impl.cpp 
b/src/server/pegasus_server_impl.cpp
index e51195f..a0fa94c 100644
--- a/src/server/pegasus_server_impl.cpp
+++ b/src/server/pegasus_server_impl.cpp
@@ -3107,5 +3107,10 @@ void pegasus_server_impl::on_detect_hotkey(const 
dsn::replication::detect_hotkey
 
 uint32_t pegasus_server_impl::query_data_version() const { return 
_pegasus_data_version; }
 
+dsn::replication::manual_compaction_status::type 
pegasus_server_impl::query_compact_status() const
+{
+    return _manual_compact_svc.query_compact_status();
+}
+
 } // namespace server
 } // namespace pegasus
diff --git a/src/server/pegasus_server_impl.h b/src/server/pegasus_server_impl.h
index 2c4e0f9..37ff805 100644
--- a/src/server/pegasus_server_impl.h
+++ b/src/server/pegasus_server_impl.h
@@ -365,6 +365,8 @@ private:
 
     uint32_t query_data_version() const override;
 
+    dsn::replication::manual_compaction_status::type query_compact_status() 
const override;
+
 private:
     static const std::chrono::seconds kServerStatUpdateTimeSec;
     static const std::string COMPRESSION_HEADER;

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

Reply via email to