1syntax = "proto2";
2package raftpb;
3
4import "gogoproto/gogo.proto";
5
6option (gogoproto.marshaler_all) = true;
7option (gogoproto.sizer_all) = true;
8option (gogoproto.unmarshaler_all) = true;
9option (gogoproto.goproto_getters_all) = false;
10option (gogoproto.goproto_enum_prefix_all) = false;
11
12enum EntryType {
13	EntryNormal     = 0;
14	EntryConfChange = 1;
15}
16
17message Entry {
18	optional uint64     Term  = 2 [(gogoproto.nullable) = false]; // must be 64-bit aligned for atomic operations
19	optional uint64     Index = 3 [(gogoproto.nullable) = false]; // must be 64-bit aligned for atomic operations
20	optional EntryType  Type  = 1 [(gogoproto.nullable) = false];
21	optional bytes      Data  = 4;
22}
23
24message SnapshotMetadata {
25	optional ConfState conf_state = 1 [(gogoproto.nullable) = false];
26	optional uint64    index      = 2 [(gogoproto.nullable) = false];
27	optional uint64    term       = 3 [(gogoproto.nullable) = false];
28}
29
30message Snapshot {
31	optional bytes            data     = 1;
32	optional SnapshotMetadata metadata = 2 [(gogoproto.nullable) = false];
33}
34
35enum MessageType {
36	MsgHup             = 0;
37	MsgBeat            = 1;
38	MsgProp            = 2;
39	MsgApp             = 3;
40	MsgAppResp         = 4;
41	MsgVote            = 5;
42	MsgVoteResp        = 6;
43	MsgSnap            = 7;
44	MsgHeartbeat       = 8;
45	MsgHeartbeatResp   = 9;
46	MsgUnreachable     = 10;
47	MsgSnapStatus      = 11;
48	MsgCheckQuorum     = 12;
49	MsgTransferLeader  = 13;
50	MsgTimeoutNow      = 14;
51	MsgReadIndex       = 15;
52	MsgReadIndexResp   = 16;
53	MsgPreVote         = 17;
54	MsgPreVoteResp     = 18;
55}
56
57message Message {
58	optional MessageType type        = 1  [(gogoproto.nullable) = false];
59	optional uint64      to          = 2  [(gogoproto.nullable) = false];
60	optional uint64      from        = 3  [(gogoproto.nullable) = false];
61	optional uint64      term        = 4  [(gogoproto.nullable) = false];
62	optional uint64      logTerm     = 5  [(gogoproto.nullable) = false];
63	optional uint64      index       = 6  [(gogoproto.nullable) = false];
64	repeated Entry       entries     = 7  [(gogoproto.nullable) = false];
65	optional uint64      commit      = 8  [(gogoproto.nullable) = false];
66	optional Snapshot    snapshot    = 9  [(gogoproto.nullable) = false];
67	optional bool        reject      = 10 [(gogoproto.nullable) = false];
68	optional uint64      rejectHint  = 11 [(gogoproto.nullable) = false];
69	optional bytes       context     = 12;
70}
71
72message HardState {
73	optional uint64 term   = 1 [(gogoproto.nullable) = false];
74	optional uint64 vote   = 2 [(gogoproto.nullable) = false];
75	optional uint64 commit = 3 [(gogoproto.nullable) = false];
76}
77
78message ConfState {
79	repeated uint64 nodes    = 1;
80	repeated uint64 learners = 2;
81}
82
83enum ConfChangeType {
84	ConfChangeAddNode        = 0;
85	ConfChangeRemoveNode     = 1;
86	ConfChangeUpdateNode     = 2;
87	ConfChangeAddLearnerNode = 3;
88}
89
90message ConfChange {
91	optional uint64          ID      = 1 [(gogoproto.nullable) = false];
92	optional ConfChangeType  Type    = 2 [(gogoproto.nullable) = false];
93	optional uint64          NodeID  = 3 [(gogoproto.nullable) = false];
94	optional bytes           Context = 4;
95}
96