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]