CCF
Loading...
Searching...
No Matches
ledger_enclave.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
6#include "ds/ccf_assert.h"
7#include "ds/serialized.h"
8#include "kv/kv_types.h"
10
11namespace consensus
12{
14 {
15 public:
16 static constexpr size_t FRAME_SIZE = sizeof(uint32_t);
17
26 static std::vector<uint8_t> get_entry(const uint8_t*& data, size_t& size)
27 {
28 auto header =
29 serialized::peek<ccf::kv::SerialisedEntryHeader>(data, size);
30 size_t entry_size = ccf::kv::serialised_entry_header_size + header.size;
31 std::vector<uint8_t> entry(data, data + entry_size);
32 serialized::skip(data, size, entry_size);
33 return entry;
34 }
35
36 private:
38
39 public:
41 to_host(writer_factory_.create_writer_to_outside())
42 {}
43
53 const std::vector<uint8_t>& entry,
54 bool globally_committable,
55 ccf::kv::Term term,
56 ccf::kv::Version index)
57 {
58 put_entry(entry.data(), entry.size(), globally_committable, term, index);
59 }
60
73 const uint8_t* data,
74 size_t size,
75 bool globally_committable,
76 ccf::kv::Term term,
77 ccf::kv::Version index)
78 {
79 serializer::ByteRange byte_range = {data, size};
81 ::consensus::ledger_append, to_host, globally_committable, byte_range);
82 }
83
92 static void skip_entry(const uint8_t*& data, size_t& size)
93 {
94 auto header =
95 serialized::read<ccf::kv::SerialisedEntryHeader>(data, size);
96 serialized::skip(data, size, header.size);
97 }
98
104 void truncate(Index idx)
105 {
107 ::consensus::ledger_truncate, to_host, idx, false /* no recovery */);
108 }
109
115 void commit(Index idx)
116 {
117 RINGBUFFER_WRITE_MESSAGE(::consensus::ledger_commit, to_host, idx);
118 }
119
126 void init(Index idx = 0, Index recovery_start_idx = 0)
127 {
129 ::consensus::ledger_init, to_host, idx, recovery_start_idx);
130 }
131 };
132}
Definition ledger_enclave.h:14
LedgerEnclave(ringbuffer::AbstractWriterFactory &writer_factory_)
Definition ledger_enclave.h:40
static constexpr size_t FRAME_SIZE
Definition ledger_enclave.h:16
void put_entry(const std::vector< uint8_t > &entry, bool globally_committable, ccf::kv::Term term, ccf::kv::Version index)
Definition ledger_enclave.h:52
void truncate(Index idx)
Definition ledger_enclave.h:104
static void skip_entry(const uint8_t *&data, size_t &size)
Definition ledger_enclave.h:92
static std::vector< uint8_t > get_entry(const uint8_t *&data, size_t &size)
Definition ledger_enclave.h:26
void put_entry(const uint8_t *data, size_t size, bool globally_committable, ccf::kv::Term term, ccf::kv::Version index)
Definition ledger_enclave.h:72
void init(Index idx=0, Index recovery_start_idx=0)
Definition ledger_enclave.h:126
void commit(Index idx)
Definition ledger_enclave.h:115
Definition ring_buffer_types.h:153
uint64_t Term
Definition kv_types.h:48
uint64_t Version
Definition version.h:8
Definition consensus_types.h:23
uint64_t Index
Definition ledger_enclave_types.h:11
std::shared_ptr< AbstractWriter > WriterPtr
Definition ring_buffer_types.h:150
void skip(const uint8_t *&data, size_t &size, size_t skip)
Definition serialized.h:166
#define RINGBUFFER_WRITE_MESSAGE(MSG,...)
Definition ring_buffer_types.h:255
Definition serializer.h:27