22#include <glog/logging.h>
27 std::unique_ptr<TransactionManager> global_transaction_manager,
29 : global_transaction_manager_(std::move(global_transaction_manager)),
34 order_thread_ = std::thread(&GeoGlobalExecutor::OrderRound,
this);
48 BatchUserRequest batch_request;
49 if (!batch_request.ParseFromString(request->data())) {
50 LOG(ERROR) <<
"[GeoGlobalExecutor] parse data fail!";
53 if (request->data().empty()) {
54 LOG(ERROR) <<
"[GeoGlobalExecutor] request->data() is empty ";
64 if (batch_response !=
nullptr &&
65 request->region_info().region_id() ==
my_region_) {
66 batch_response->set_createtime(batch_request.createtime());
67 batch_response->set_local_id(batch_request.local_id());
68 batch_response->set_proxy_id(batch_request.proxy_id());
69 batch_response->set_seq(batch_request.seq());
75bool GeoGlobalExecutor::IsStop() {
return is_stop_; }
82void GeoGlobalExecutor::AddData() {
84 if (request ==
nullptr) {
88 uint64_t seq_num = request->seq();
89 int region_id = request->region_info().region_id();
90 execute_map_[std::make_pair(seq_num, region_id)] = std::move(request);
93std::unique_ptr<Request> GeoGlobalExecutor::GetNextMap() {
102 std::unique_ptr<Request>
res = std::move(
execute_map_.begin()->second);
114void GeoGlobalExecutor::OrderRound() {
118 std::unique_ptr<Request> seq_map = GetNextMap();
119 if (seq_map ==
nullptr) {
virtual void Execute(std::unique_ptr< Request > request)
virtual ~GeoGlobalExecutor()
std::thread order_thread_
std::unique_ptr< BatchUserResponse > GetResponseMsg()
LockFreeQueue< Request > order_queue_
virtual int OrderGeoRequest(std::unique_ptr< Request > request)
LockFreeQueue< BatchUserResponse > resp_queue_
std::unique_ptr< TransactionManager > global_transaction_manager_
GeoGlobalExecutor(std::unique_ptr< TransactionManager > global_transaction_manager, const ResDBConfig &config)
std::atomic< bool > is_stop_
void Push(std::unique_ptr< T > data)
std::unique_ptr< T > Pop(int timeout_ms=100)
ResConfigData GetConfigData() const
void IncTotalGeoRequest(uint32_t num)
static Stats * GetGlobalStats(int sleep_seconds=5)
std::unique_ptr< ResDBConfig > config_