platform/config/resdb_config.cpp (189 lines of code) (raw):

/* * 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. */ #include "platform/config/resdb_config.h" #include <glog/logging.h> namespace resdb { ResDBConfig::ResDBConfig(const std::vector<ReplicaInfo>& replicas, const ReplicaInfo& self_info, ResConfigData config_data) : ResDBConfig(config_data, self_info, KeyInfo(), CertificateInfo()) { replicas_ = replicas; } ResDBConfig::ResDBConfig(const std::vector<ReplicaInfo>& replicas, const ReplicaInfo& self_info, const KeyInfo& private_key, const CertificateInfo& public_key_cert_info) : ResDBConfig(ResConfigData(), self_info, private_key, public_key_cert_info) { replicas_ = replicas; } ResDBConfig::ResDBConfig(const ResConfigData& config_data, const ReplicaInfo& self_info, const KeyInfo& private_key, const CertificateInfo& public_key_cert_info) : config_data_(config_data), self_info_(self_info), private_key_(private_key), public_key_cert_info_(public_key_cert_info) { for (const auto& region : config_data.region()) { if (region.region_id() == config_data.self_region_id()) { LOG(INFO) << "get region info:" << region.DebugString(); for (const auto& replica : region.replica_info()) { replicas_.push_back(replica); } LOG(INFO) << "get region config server size:" << region.replica_info_size(); break; } } if (config_data_.view_change_timeout_ms() == 0) { config_data_.set_view_change_timeout_ms(viewchange_commit_timeout_ms_); } if (config_data_.client_batch_num() == 0) { config_data_.set_client_batch_num(client_batch_num_); } if (config_data_.worker_num() == 0) { config_data_.set_worker_num(worker_num_); } if (config_data_.input_worker_num() == 0) { config_data_.set_input_worker_num(input_worker_num_); } if (config_data_.output_worker_num() == 0) { config_data_.set_output_worker_num(output_worker_num_); } if (config_data_.tcp_batch_num() == 0) { config_data_.set_tcp_batch_num(100); } if (config_data_.max_process_txn() == 0) { config_data_.set_max_process_txn(64); } } void ResDBConfig::SetConfigData(const ResConfigData& config_data) { config_data_ = config_data; replicas_.clear(); for (const auto& region : config_data.region()) { if (region.region_id() == config_data.self_region_id()) { LOG(INFO) << "get region info:" << region.DebugString(); for (const auto& replica : region.replica_info()) { replicas_.push_back(replica); } LOG(INFO) << "get region config server size:" << region.replica_info_size(); break; } } if (config_data_.view_change_timeout_ms() == 0) { config_data_.set_view_change_timeout_ms(viewchange_commit_timeout_ms_); } } KeyInfo ResDBConfig::GetPrivateKey() const { return private_key_; } CertificateInfo ResDBConfig::GetPublicKeyCertificateInfo() const { return public_key_cert_info_; } ResConfigData ResDBConfig::GetConfigData() const { return config_data_; } const std::vector<ReplicaInfo>& ResDBConfig::GetReplicaInfos() const { return replicas_; } const ReplicaInfo& ResDBConfig::GetSelfInfo() const { return self_info_; } size_t ResDBConfig::GetReplicaNum() const { return replicas_.size(); } int ResDBConfig::GetMinDataReceiveNum() const { int f = (replicas_.size() - 1) / 3; return std::max(2 * f + 1, 1); } int ResDBConfig::GetMinClientReceiveNum() const { int f = (replicas_.size() - 1) / 3; return std::max(f + 1, 1); } int ResDBConfig::GetMinCheckpointReceiveNum() const { int f = (replicas_.size() - 1) / 3; return std::max(f + 1, 1); } size_t ResDBConfig::GetMaxMaliciousReplicaNum() const { int f = (replicas_.size() - 1) / 3; return std::max(f, 0); } void ResDBConfig::SetClientTimeoutMs(int timeout_ms) { client_timeout_ms_ = timeout_ms; } int ResDBConfig::GetClientTimeoutMs() const { return client_timeout_ms_; } // Logging std::string ResDBConfig::GetCheckPointLoggingPath() const { return checkpoint_logging_path_; } void ResDBConfig::SetCheckPointLoggingPath(const std::string& path) { checkpoint_logging_path_ = path; } int ResDBConfig::GetCheckPointWaterMark() const { return checkpoint_water_mark_; } void ResDBConfig::SetCheckPointWaterMark(int water_mark) { checkpoint_water_mark_ = water_mark; } void ResDBConfig::EnableCheckPoint(bool is_enable) { is_enable_checkpoint_ = is_enable; } bool ResDBConfig::IsCheckPointEnabled() { return is_enable_checkpoint_; } bool ResDBConfig::HeartBeatEnabled() { return hb_enabled_; } void ResDBConfig::SetHeartBeatEnabled(bool enable_heartbeat) { hb_enabled_ = enable_heartbeat; } bool ResDBConfig::SignatureVerifierEnabled() { return signature_verifier_enabled_; } void ResDBConfig::SetSignatureVerifierEnabled(bool enable_sv) { signature_verifier_enabled_ = enable_sv; } // Performance setting bool ResDBConfig::IsPerformanceRunning() const { return is_performance_running_ || GetConfigData().is_performance_running(); } void ResDBConfig::RunningPerformance(bool is_performance_running) { is_performance_running_ = is_performance_running; } void ResDBConfig::SetTestMode(bool is_test_mode) { is_test_mode_ = is_test_mode; } bool ResDBConfig::IsTestMode() const { return is_test_mode_; } uint32_t ResDBConfig::GetMaxProcessTxn() const { if (config_data_.max_process_txn()) { return config_data_.max_process_txn(); } return max_process_txn_; } void ResDBConfig::SetMaxProcessTxn(uint32_t num) { config_data_.set_max_process_txn(num); max_process_txn_ = num; } uint32_t ResDBConfig::GetMaxClientComplaintNum() const { if (config_data_.max_client_complaint_num()) { return config_data_.max_client_complaint_num(); } return 10; } uint32_t ResDBConfig::ClientBatchWaitTimeMS() const { return client_batch_wait_time_ms_; } void ResDBConfig::SetClientBatchWaitTimeMS(uint32_t wait_time_ms) { client_batch_wait_time_ms_ = wait_time_ms; } uint32_t ResDBConfig::ClientBatchNum() const { return config_data_.client_batch_num(); } void ResDBConfig::SetClientBatchNum(uint32_t num) { config_data_.set_client_batch_num(num); } uint32_t ResDBConfig::GetWorkerNum() const { return config_data_.worker_num(); } uint32_t ResDBConfig::GetInputWorkerNum() const { return config_data_.input_worker_num(); } uint32_t ResDBConfig::GetOutputWorkerNum() const { return config_data_.output_worker_num(); } uint32_t ResDBConfig::GetTcpBatchNum() const { return config_data_.tcp_batch_num(); } uint32_t ResDBConfig::GetViewchangeCommitTimeout() const { return config_data_.view_change_timeout_ms() ? config_data_.view_change_timeout_ms() : viewchange_commit_timeout_ms_; } void ResDBConfig::SetViewchangeCommitTimeout(uint64_t timeout_ms) { config_data_.set_view_change_timeout_ms(timeout_ms); } } // namespace resdb