Loading...
Searching...
No Matches
consensus_manager_pbft.h
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20#pragma once
21
33
34namespace resdb {
35
37 public:
39 std::unique_ptr<TransactionManager> executor,
40 std::unique_ptr<CustomQuery> query_executor = nullptr);
41 virtual ~ConsensusManagerPBFT() = default;
42
43 int ConsensusCommit(std::unique_ptr<Context> context,
44 std::unique_ptr<Request> request) override;
45
46 std::vector<ReplicaInfo> GetReplicas() override;
47 uint32_t GetPrimary() override;
48 uint32_t GetVersion() override;
49
50 void SetPrimary(uint32_t primary, uint64_t version) override;
51
52 void Start() override;
53 void SetupPerformanceDataFunc(std::function<std::string()> func);
54
55 void SetPreVerifyFunc(std::function<bool(const Request&)>);
56 void SetNeedCommitQC(bool need_qc);
57
58 protected:
59 int InternalConsensusCommit(std::unique_ptr<Context> context,
60 std::unique_ptr<Request> request);
61 void AddPendingRequest(std::unique_ptr<Context> context,
62 std::unique_ptr<Request> request);
63 void AddComplainedRequest(std::unique_ptr<Context> context,
64 std::unique_ptr<Request> request);
65 absl::StatusOr<std::pair<std::unique_ptr<Context>, std::unique_ptr<Request>>>
67 absl::StatusOr<std::pair<std::unique_ptr<Context>, std::unique_ptr<Request>>>
69
70 protected:
71 std::unique_ptr<SystemInfo> system_info_;
72 std::unique_ptr<CheckPointManager> checkpoint_manager_;
73 std::unique_ptr<MessageManager> message_manager_;
74 std::unique_ptr<Commitment> commitment_;
75 std::unique_ptr<Query> query_;
76 std::unique_ptr<ResponseManager> response_manager_;
77 std::unique_ptr<PerformanceManager> performance_manager_;
78 std::unique_ptr<ViewChangeManager> view_change_manager_;
79 std::unique_ptr<Recovery> recovery_;
81 std::queue<std::pair<std::unique_ptr<Context>, std::unique_ptr<Request>>>
83 std::queue<std::pair<std::unique_ptr<Context>, std::unique_ptr<Request>>>
85 std::mutex mutex_;
86};
87
88} // namespace resdb
std::unique_ptr< Commitment > commitment_
std::queue< std::pair< std::unique_ptr< Context >, std::unique_ptr< Request > > > request_complained_
std::unique_ptr< PerformanceManager > performance_manager_
std::vector< ReplicaInfo > GetReplicas() override
void AddPendingRequest(std::unique_ptr< Context > context, std::unique_ptr< Request > request)
std::unique_ptr< CheckPointManager > checkpoint_manager_
std::unique_ptr< ResponseManager > response_manager_
void AddComplainedRequest(std::unique_ptr< Context > context, std::unique_ptr< Request > request)
std::unique_ptr< MessageManager > message_manager_
int InternalConsensusCommit(std::unique_ptr< Context > context, std::unique_ptr< Request > request)
int ConsensusCommit(std::unique_ptr< Context > context, std::unique_ptr< Request > request) override
std::unique_ptr< SystemInfo > system_info_
void SetupPerformanceDataFunc(std::function< std::string()> func)
std::unique_ptr< ViewChangeManager > view_change_manager_
void SetPrimary(uint32_t primary, uint64_t version) override
absl::StatusOr< std::pair< std::unique_ptr< Context >, std::unique_ptr< Request > > > PopComplainedRequest()
std::unique_ptr< Recovery > recovery_
virtual ~ConsensusManagerPBFT()=default
std::queue< std::pair< std::unique_ptr< Context >, std::unique_ptr< Request > > > request_pending_
std::unique_ptr< Query > query_
void SetPreVerifyFunc(std::function< bool(const Request &)>)
absl::StatusOr< std::pair< std::unique_ptr< Context >, std::unique_ptr< Request > > > PopPendingRequest()