1 module hunt.raft.Msg;
2 
3 enum EntryType {
4 	EntryNormal     = 0,
5 	EntryConfChange = 1,
6 }
7 
8 struct Entry {
9 	ulong     	Term;
10 	ulong     	Index;
11 	EntryType  	Type;
12 	string     	Data;
13 }
14 
15 struct SnapshotMetadata {
16 	ConfState 	CS;
17 	ulong    	Index;
18 	ulong    	Term;
19 }
20 
21 struct Snapshot {
22 	string    			Data;
23 	SnapshotMetadata 	Metadata;
24 }
25 
26 enum MessageType {
27 	MsgHup             = 0,
28 	MsgBeat            = 1,
29 	MsgProp            = 2,
30 	MsgApp             = 3,
31 	MsgAppResp         = 4,
32 	MsgVote            = 5,
33 	MsgVoteResp        = 6,
34 	MsgSnap            = 7,
35 	MsgHeartbeat       = 8,
36 	MsgHeartbeatResp   = 9,
37 	MsgUnreachable     = 10,
38 	MsgSnapStatus      = 11,
39 	MsgCheckQuorum     = 12,
40 	MsgTransferLeader  = 13,
41 	MsgTimeoutNow      = 14,
42 	MsgReadIndex       = 15,
43 	MsgReadIndexResp   = 16,
44 	MsgPreVote         = 17,
45 	MsgPreVoteResp     = 18,
46 }
47 
48 struct Message {
49 	MessageType 	Type;
50 	ulong      		To;
51 	ulong      		From;
52 	ulong      		Term;
53 	ulong      		LogTerm;
54 	ulong      		Index;
55 	Entry[]     	Entries;
56 	ulong     	 	Commit;
57 	Snapshot    	snap;
58 	bool        	Reject;
59 	ulong     	 	RejectHint;
60 	string      	Context;
61 }
62 
63 struct HardState {
64 	ulong 		Term;
65 	ulong 		Vote;
66 	ulong 		Commit;
67 }
68 
69 struct ConfState {
70 	ulong[] 	Nodes;
71 }
72 
73 enum ConfChangeType {
74 	ConfChangeAddNode    = 0,
75 	ConfChangeRemoveNode = 1,
76 	ConfChangeUpdateNode = 2,
77 }
78 
79 struct ConfChange{
80 	ulong          		ID;
81 	ConfChangeType  	Type;
82 	ulong          		NodeID ;
83 	string          	Context;
84 }
85