CCF
Loading...
Searching...
No Matches
recovery_decision_protocol.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the Apache 2.0 License.
3#pragma once
4
5#include "ccf/ds/json.h"
7#include "ccf/pal/locking.h"
9#include "ccf/tx.h"
10#include "ccf/tx_id.h"
11#include "tasks/task.h"
12
14{
16 {
17 public:
19 };
22
24 {
26 };
29
35
37 DECLARE_JSON_REQUIRED_FIELDS(IAmOpenRequest, prev_service_fingerprint, txid);
38}
39
40namespace ccf
41{
42 class NodeState;
44 {
45 private:
46 // RecoveryDecisionProtocolSubsystem is solely owned by NodeState, and all
47 // tasks should finish before NodeState is destroyed
48 NodeState* node_state;
49
50 // Periodic task handles - kept to allow cancellation
51 ccf::tasks::Task retry_task;
52 ccf::tasks::Task failover_task;
53
54 pal::Mutex recovery_decision_protocol_lock;
55 std::optional<recovery_decision_protocol::RequestNodeInfo> node_info_cache;
56 std::optional<recovery_decision_protocol::IAmOpenRequest>
57 iamopen_request_cache;
58
59 public:
61 void reset_state(ccf::kv::Tx& tx);
62 void try_start(ccf::kv::Tx& tx, bool recovering);
63 void advance(ccf::kv::Tx& tx, bool timeout);
64
66 kv::ReadOnlyTx& tx);
67
68 private:
69 // Start path
70 void start_message_retry_timers();
71 void start_failover_timers();
72
73 // Stop periodic tasks
74 void stop_timers();
75
76 // Steady state operations
78 kv::ReadOnlyTx& tx);
79 void send_gossip_unsafe(kv::ReadOnlyTx& tx);
80 void send_vote_unsafe(
83 void send_iamopen_unsafe(kv::ReadOnlyTx& tx);
84
86 sealing_recovery::Location& get_location();
87 ccf::TxID get_last_recovered_signed_txid();
88 };
89}
Definition node_state.h:138
Definition recovery_decision_protocol.h:44
void try_start(ccf::kv::Tx &tx, bool recovering)
Definition recovery_decision_protocol.cpp:54
recovery_decision_protocol::IAmOpenRequest & get_iamopen_request(kv::ReadOnlyTx &tx)
Definition recovery_decision_protocol.cpp:634
void reset_state(ccf::kv::Tx &tx)
Definition recovery_decision_protocol.cpp:28
void advance(ccf::kv::Tx &tx, bool timeout)
Definition recovery_decision_protocol.cpp:96
Definition tx.h:159
Definition tx.h:200
#define DECLARE_JSON_TYPE_WITH_BASE(TYPE, BASE)
Definition json.h:687
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:736
#define DECLARE_JSON_TYPE(TYPE)
Definition json.h:685
std::mutex Mutex
Definition locking.h:12
Definition self_healing_open.h:35
std::shared_ptr< BaseTask > Task
Definition task.h:36
Definition app_interface.h:13
Definition startup_config.h:132
Definition tx_id.h:44
Definition recovery_decision_protocol.h:24
ccf::TxID txid
Definition recovery_decision_protocol.h:25
Definition recovery_decision_protocol.h:31
std::string prev_service_fingerprint
Definition recovery_decision_protocol.h:32
ccf::TxID txid
Definition recovery_decision_protocol.h:33
Definition self_healing_open.h:54
Definition self_healing_open.h:44
Definition recovery_decision_protocol.h:16
RequestNodeInfo info
Definition recovery_decision_protocol.h:18
Definition self_healing_open.h:23