未验证 提交 10da73af 编写于 作者: S Smilencer 提交者: GitHub

feat(hotkey): add a state machine of hotkey_collector (#616)

上级 0d3ea55f
......@@ -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
......
// 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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册