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