22#include <glog/logging.h>
29 const ResDBConfig& config, std::unique_ptr<SystemInfo> system_info,
30 std::unique_ptr<ReplicaCommunicator> replica_communicator,
31 std::unique_ptr<TransactionManager> local_transaction_manager)
36 local_transaction_manager_(std::move(local_transaction_manager)),
38 geo_thread_ = std::thread(&GeoTransactionExecutor::SendGeoMessages,
this);
50void GeoTransactionExecutor::SendGeoMessages() {
51 std::vector<std::unique_ptr<Request>> messages;
54 if (message !=
nullptr) {
55 messages.push_back(std::move(message));
58 if (message ==
nullptr) {
61 messages.push_back(std::move(message));
67 if (messages.size() > 0) {
68 SendBatchGeoMessage(messages);
75void GeoTransactionExecutor::SendBatchGeoMessage(
76 const std::vector<std::unique_ptr<Request>>& batch_geo_request) {
82 LOG(ERROR) <<
"send batch_geo_request to self FAIL!";
86 for (
const auto& region : config_data.region()) {
87 if (region.region_id() == config_data.self_region_id()) {
91 int max_faulty = (region.replica_info_size() - 1) / 3;
92 int num_request_sent = 0;
93 for (
const auto& replica : region.replica_info()) {
95 if (num_request_sent > max_faulty) {
110 const BatchUserRequest& request) {
115 geo_request->set_seq(request.seq());
116 geo_request->set_proxy_id(request.proxy_id());
118 geo_request->data() + std::to_string(request.seq()) +
121 request.SerializeToString(geo_request->mutable_data());
MockReplicaCommunicator replica_communicator_
LockFreeQueue< Request > queue_
virtual ~GeoTransactionExecutor()
virtual std::unique_ptr< BatchUserResponse > ExecuteBatch(const BatchUserRequest &request) override
GeoTransactionExecutor(const ResDBConfig &config, std::unique_ptr< SystemInfo > system_info, std::unique_ptr< ReplicaCommunicator > replica_communicator, std::unique_ptr< TransactionManager > local_transaction_manager)
std::unique_ptr< SystemInfo > system_info_
std::unique_ptr< ReplicaCommunicator > replica_communicator_
std::atomic< bool > is_stop_
void Push(std::unique_ptr< T > data)
std::unique_ptr< T > Pop(int timeout_ms=100)
ResConfigData GetConfigData() const
const ReplicaInfo & GetSelfInfo() const
static std::string CalculateHash(const std::string &str)
std::unique_ptr< Request > NewRequest(Request::Type type, const Request &request, int sender_id)
std::unique_ptr< ResDBConfig > config_