You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pegasus.apache.org by zh...@apache.org on 2020/10/14 08:30:54 UTC

[incubator-pegasus] branch master updated: feat(hotkey): add a state machine of hotkey_collector (#616)

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 10da73a  feat(hotkey): add a state machine of hotkey_collector (#616)
10da73a is described below

commit 10da73afcbf3398c1d5946c2550f1f553f67f6f8
Author: Smilencer <52...@qq.com>
AuthorDate: Wed Oct 14 16:30:43 2020 +0800

    feat(hotkey): add a state machine of hotkey_collector (#616)
---
 src/server/hotkey_collector.h       |  4 +++
 src/server/hotkey_collector_state.h | 65 +++++++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)

diff --git a/src/server/hotkey_collector.h b/src/server/hotkey_collector.h
index 57c7482..a1818d3 100644
--- a/src/server/hotkey_collector.h
+++ b/src/server/hotkey_collector.h
@@ -19,6 +19,7 @@
 
 #include <dsn/utility/string_view.h>
 #include <dsn/dist/replication/replication_types.h>
+#include "hotkey_collector_state.h"
 
 namespace pegasus {
 namespace server {
@@ -69,6 +70,9 @@ public:
     void capture_hash_key(const dsn::blob &hash_key, int64_t weight);
     void handle_rpc(const dsn::replication::detect_hotkey_request &req,
                     /*out*/ dsn::replication::detect_hotkey_response &resp);
+
+private:
+    std::atomic<hotkey_collector_state> _state;
 };
 
 } // namespace server
diff --git a/src/server/hotkey_collector_state.h b/src/server/hotkey_collector_state.h
new file mode 100644
index 0000000..315ac7c
--- /dev/null
+++ b/src/server/hotkey_collector_state.h
@@ -0,0 +1,65 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include <dsn/utility/enum_helper.h>
+
+namespace pegasus {
+namespace server {
+
+//                          hotkey_collector
+//                               state
+// data has been cleared, +----------------+
+// ready to start         |    STOPPED     |<--------------+------------+
+//                        +-------+--------+               |            |
+//                                |                        |            |
+//                           Receive START RPC           Timeout        |
+//                                |                        +            |
+//  is running COARSE     +-------v--------+               |            |
+//  capture and analysis  |COARSE_DETECTING+---------------^   Receive STOPPED RPC
+//                        +-------+--------+               |            |
+//                                |                        +            |
+//                           Find a hot bucket           Timeout        |
+//                                |                        +            |
+//  is running FINE       +-------v--------+               |            |
+//  capture and analysis  | FINE_DETECTING |+--------------+            |
+//                        +-------+--------+                            |
+//                                |                                     |
+//                           Find a hotkey                              |
+//                                |                                     |
+//  capture and analyse   +-------v--------+                            |
+//  is done, ready to get |    FINISHED    |+---------------------------+
+//  the result            +----------------+
+
+enum class hotkey_collector_state
+{
+    STOPPED,
+    COARSE_DETECTING,
+    FINE_DETECTING,
+    FINISHED
+};
+
+ENUM_BEGIN2(hotkey_collector_state, hotkey_collector_state, hotkey_collector_state::STOPPED)
+ENUM_REG(hotkey_collector_state::STOPPED)
+ENUM_REG(hotkey_collector_state::COARSE_DETECTING)
+ENUM_REG(hotkey_collector_state::FINE_DETECTING)
+ENUM_REG(hotkey_collector_state::FINISHED)
+ENUM_END2(hotkey_collector_state, hotkey_collector_state)
+
+} // namespace server
+} // namespace pegasus


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pegasus.apache.org
For additional commands, e-mail: commits-help@pegasus.apache.org