/
raft_msg.go
117 lines (103 loc) · 2.55 KB
/
raft_msg.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package oramnode
import (
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
type CommandType int
const (
ReplicateBeginEviction CommandType = iota
ReplicateEndEviction
ReplicateBeginReadPath
ReplicateEndReadPath
)
type Command struct {
Type CommandType
Payload []byte
}
type ReplicateBeginEvictionPayload struct {
CurrentEvictionCount int
StorageID int
}
type ReplicateEndEvictionPayload struct {
UpdatedEvictionCount int
StorageID int
}
type ReplicateBeginReadPathPayload struct {
Paths []int
StorageID int
}
func newReplicateBeginEvictionCommand(currentEvictionCount int, storageID int) ([]byte, error) {
payload, err := msgpack.Marshal(
&ReplicateBeginEvictionPayload{
CurrentEvictionCount: currentEvictionCount,
StorageID: storageID,
},
)
if err != nil {
return nil, fmt.Errorf("could not marshall payload for the begin eviction command; %s", err)
}
command, err := msgpack.Marshal(
&Command{
Type: ReplicateBeginEviction,
Payload: payload,
},
)
if err != nil {
return nil, fmt.Errorf("could not marshal the begin eviction command; %s", err)
}
return command, nil
}
func newReplicateEndEvictionCommand(updatedEvictionCount int, storageID int) ([]byte, error) {
payload, err := msgpack.Marshal(
&ReplicateEndEvictionPayload{
UpdatedEvictionCount: updatedEvictionCount,
StorageID: storageID,
},
)
if err != nil {
return nil, fmt.Errorf("could not marshall payload for the end eviction command; %s", err)
}
command, err := msgpack.Marshal(
&Command{
Type: ReplicateEndEviction,
Payload: payload,
},
)
if err != nil {
return nil, fmt.Errorf("could not marshal the end eviction command; %s", err)
}
return command, nil
}
func newReplicateBeginReadPathCommand(paths []int, storageID int) ([]byte, error) {
payload, err := msgpack.Marshal(
&ReplicateBeginReadPathPayload{
Paths: paths,
StorageID: storageID,
},
)
if err != nil {
return nil, fmt.Errorf("could not marshall payload for the begin read path command; %s", err)
}
command, err := msgpack.Marshal(
&Command{
Type: ReplicateBeginReadPath,
Payload: payload,
},
)
if err != nil {
return nil, fmt.Errorf("could not marshal the begin read path command; %s", err)
}
return command, nil
}
func newReplicateEndReadPathCommand() ([]byte, error) {
command, err := msgpack.Marshal(
&Command{
Type: ReplicateEndReadPath,
Payload: []byte{},
},
)
if err != nil {
return nil, fmt.Errorf("could not marshal the end read path command; %s", err)
}
return command, nil
}