diff --git a/.gitignore b/.gitignore index b0877e428..4775f6521 100644 --- a/.gitignore +++ b/.gitignore @@ -85,6 +85,10 @@ src/durability/single_node_ha/state_delta.hpp src/query/plan/distributed_ops.capnp src/query/plan/distributed_ops.hpp src/query/plan/operator.hpp +src/raft/log_entry.capnp +src/raft/log_entry.hpp +src/raft/raft_rpc_messages.capnp +src/raft/raft_rpc_messages.hpp src/stats/stats_rpc_messages.capnp src/stats/stats_rpc_messages.hpp src/storage/distributed/rpc/concurrent_id_mapper_rpc_messages.capnp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e08bebb5a..4b5eeb2eb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -291,6 +291,10 @@ add_lcp_single_node_ha(database/single_node_ha/serialization.lcp CAPNP_SCHEMA @0 add_capnp_single_node_ha(database/single_node_ha/serialization.capnp) add_lcp_single_node_ha(query/frontend/ast/ast.lcp) add_lcp_single_node_ha(query/plan/operator.lcp) +add_lcp_single_node_ha(raft/raft_rpc_messages.lcp CAPNP_SCHEMA @0xa6c29b4287233b66) +add_capnp_single_node_ha(raft/raft_rpc_messages.capnp) +add_lcp_single_node_ha(raft/log_entry.lcp CAPNP_SCHEMA @0x96c07fe13850c22a) +add_capnp_single_node_ha(raft/log_entry.capnp) add_custom_target(generate_lcp_single_node_ha DEPENDS ${generated_lcp_single_node_ha_files}) diff --git a/src/raft/log_entry.lcp b/src/raft/log_entry.lcp new file mode 100644 index 000000000..59562b47f --- /dev/null +++ b/src/raft/log_entry.lcp @@ -0,0 +1,19 @@ +#>cpp +#pragma once + +#include "database/single_node_ha/serialization.hpp" +#include "durability/single_node_ha/state_delta.hpp" +#include "raft/log_entry.capnp.h" +cpp<# + +(lcp:namespace raft) + +(lcp:capnp-namespace "raft") + +(lcp:capnp-import 'database "/database/single_node_ha/serialization.capnp") + +(lcp:define-struct log-entry () + ((deltas "std::vector" :capnp-type "List(Database.StateDelta)")) + (:serialize :capnp)) + +(lcp:pop-namespace) ;; raft diff --git a/src/raft/raft_rpc_messages.lcp b/src/raft/raft_rpc_messages.lcp new file mode 100644 index 000000000..0311309f7 --- /dev/null +++ b/src/raft/raft_rpc_messages.lcp @@ -0,0 +1,39 @@ +#>cpp +#pragma once + +#include + +#include "communication/rpc/messages.hpp" +#include "raft/log_entry.hpp" +#include "raft/raft_rpc_messages.capnp.h" +cpp<# + +(lcp:namespace raft) + +(lcp:capnp-namespace "raft") + +(lcp:capnp-import 'raft "/raft/log_entry.capnp") + +(lcp:define-rpc request-vote + (:request + ((candidate-id :uint16_t) + (term :uint64_t) + (last-log-index :uint64_t) + (last-log-term :uint64_t))) + (:response + ((vote-granted :bool) + (term :uint64_t)))) + +(lcp:define-rpc append-entries + (:request + ((leader-id :uint16_t) + (leader-commit :uint16_t) + (term :uint64_t) + (prev-log-index :uint64_t) + (prev-log-term :uint64_t) + (entries "std::vector" :capnp-type "List(Raft.LogEntry)"))) + (:response + ((success :bool) + (term :uint64_t)))) + +(lcp:pop-namespace) ;; raft