platform/config/resdb_config.h (79 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.
*/
#pragma once
#include "common/proto/signature_info.pb.h"
#include "platform/proto/replica_info.pb.h"
namespace resdb {
// TODO read from a proto json file.
class ResDBConfig {
public:
ResDBConfig(const std::vector<ReplicaInfo>& replicas,
const ReplicaInfo& self_info,
ResConfigData config_data = ResConfigData());
ResDBConfig(const std::vector<ReplicaInfo>& replicas,
const ReplicaInfo& self_info, const KeyInfo& private_key,
const CertificateInfo& public_key_cert_info);
ResDBConfig(const ResConfigData& config_data, const ReplicaInfo& self_info,
const KeyInfo& private_key,
const CertificateInfo& public_key_cert_info);
void SetConfigData(const ResConfigData& config_data);
// Get the private key.
KeyInfo GetPrivateKey() const;
// Get the public key with its certificate.
CertificateInfo GetPublicKeyCertificateInfo() const;
// Each replica infomation, including the binding urls(or ip,port).
const std::vector<ReplicaInfo>& GetReplicaInfos() const;
ResConfigData GetConfigData() const;
// The current replica infomation, including the binding urls(or ip,port).
const ReplicaInfo& GetSelfInfo() const;
// The total number of replicas.
size_t GetReplicaNum() const;
// The minimum number of messages that replicas have to receive after jumping
// to the next status.. 2f+1
int GetMinDataReceiveNum() const;
// The max malicious replicas to be tolerated (the number of f).
size_t GetMaxMaliciousReplicaNum() const;
// const int GetMaxMaliciousNum() const;
// The minimum number of messages that client has to receive from the
// replicas.
int GetMinClientReceiveNum() const;
int GetMinCheckpointReceiveNum() const;
// The timeout microseconds to process a client request.
// Default value is 3s.
void SetClientTimeoutMs(int timeout_ms);
int GetClientTimeoutMs() const;
// CheckPoint Window
int GetCheckPointWaterMark() const;
void SetCheckPointWaterMark(int water_mark);
// Logging
std::string GetCheckPointLoggingPath() const;
void SetCheckPointLoggingPath(const std::string& path);
// Checkpoint flag
void EnableCheckPoint(bool is_enable);
bool IsCheckPointEnabled();
// HeartBeat
bool HeartBeatEnabled();
void SetHeartBeatEnabled(bool enable_heartbeat);
// Signature Verifier
bool SignatureVerifierEnabled();
void SetSignatureVerifierEnabled(bool enable_sv);
// Performance setting
bool IsPerformanceRunning() const;
void RunningPerformance(bool);
bool IsTestMode() const;
void SetTestMode(bool);
// The maximun transactions being processed.
uint32_t GetMaxProcessTxn() const;
void SetMaxProcessTxn(uint32_t num);
uint32_t GetMaxClientComplaintNum() const;
uint32_t ClientBatchWaitTimeMS() const;
void SetClientBatchWaitTimeMS(uint32_t wait_time_ms);
uint32_t ClientBatchNum() const;
void SetClientBatchNum(uint32_t num);
uint32_t GetWorkerNum() const;
uint32_t GetInputWorkerNum() const;
uint32_t GetOutputWorkerNum() const;
uint32_t GetTcpBatchNum() const;
// ViewChange Timeout
uint32_t GetViewchangeCommitTimeout() const;
void SetViewchangeCommitTimeout(uint64_t timeout_ms);
private:
ResConfigData config_data_;
std::vector<ReplicaInfo> replicas_;
ReplicaInfo self_info_;
const KeyInfo private_key_;
const CertificateInfo public_key_cert_info_;
int client_timeout_ms_ = 3000000;
std::string checkpoint_logging_path_;
int checkpoint_water_mark_ = 5;
bool is_enable_checkpoint_ = false;
bool hb_enabled_ = true;
bool signature_verifier_enabled_ = true;
bool is_performance_running_ = false;
bool is_test_mode_ = false;
uint32_t client_batch_wait_time_ms_ = 100; // milliseconds, 0.1s
uint64_t viewchange_commit_timeout_ms_ =
60000; // default 60s to change viewchange
// This is the default settings.
// change these parameters in the configuration.
uint32_t max_process_txn_ = 64;
uint32_t worker_num_ = 16;
uint32_t input_worker_num_ = 5;
uint32_t output_worker_num_ = 5;
uint32_t client_batch_num_ = 100;
};
} // namespace resdb