147 lines
3.9 KiB
Go
147 lines
3.9 KiB
Go
package transport
|
|
|
|
import (
|
|
pb "deevirt.fr/compute/pkg/proto"
|
|
"github.com/hashicorp/raft"
|
|
)
|
|
|
|
func decodeAppendEntriesRequest(m *pb.AppendEntriesRequest) *raft.AppendEntriesRequest {
|
|
return &raft.AppendEntriesRequest{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
Term: m.Term,
|
|
Leader: m.Leader,
|
|
PrevLogEntry: m.PrevLogEntry,
|
|
PrevLogTerm: m.PrevLogTerm,
|
|
Entries: decodeLogs(m.Entries),
|
|
LeaderCommitIndex: m.LeaderCommitIndex,
|
|
}
|
|
}
|
|
|
|
func decodeRPCHeader(m *pb.RPCHeader) raft.RPCHeader {
|
|
return raft.RPCHeader{
|
|
ProtocolVersion: raft.ProtocolVersion(m.ProtocolVersion),
|
|
ID: m.Id,
|
|
Addr: m.Addr,
|
|
}
|
|
}
|
|
|
|
func decodeLogs(m []*pb.Log) []*raft.Log {
|
|
ret := make([]*raft.Log, len(m))
|
|
for i, l := range m {
|
|
ret[i] = decodeLog(l)
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func decodeLog(m *pb.Log) *raft.Log {
|
|
return &raft.Log{
|
|
Index: m.Index,
|
|
Term: m.Term,
|
|
Type: decodeLogType(m.Type),
|
|
Data: m.Data,
|
|
Extensions: m.Extensions,
|
|
AppendedAt: m.AppendedAt.AsTime(),
|
|
}
|
|
}
|
|
|
|
func decodeLogType(m pb.Log_LogType) raft.LogType {
|
|
switch m {
|
|
case pb.Log_LOG_COMMAND:
|
|
return raft.LogCommand
|
|
case pb.Log_LOG_NOOP:
|
|
return raft.LogNoop
|
|
case pb.Log_LOG_ADD_PEER_DEPRECATED:
|
|
return raft.LogAddPeerDeprecated
|
|
case pb.Log_LOG_REMOVE_PEER_DEPRECATED:
|
|
return raft.LogRemovePeerDeprecated
|
|
case pb.Log_LOG_BARRIER:
|
|
return raft.LogBarrier
|
|
case pb.Log_LOG_CONFIGURATION:
|
|
return raft.LogConfiguration
|
|
default:
|
|
panic("invalid LogType")
|
|
}
|
|
}
|
|
|
|
func decodeAppendEntriesResponse(m *pb.AppendEntriesResponse) *raft.AppendEntriesResponse {
|
|
return &raft.AppendEntriesResponse{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
Term: m.Term,
|
|
LastLog: m.LastLog,
|
|
Success: m.Success,
|
|
NoRetryBackoff: m.NoRetryBackoff,
|
|
}
|
|
}
|
|
|
|
func decodeRequestVoteRequest(m *pb.RequestVoteRequest) *raft.RequestVoteRequest {
|
|
return &raft.RequestVoteRequest{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
Term: m.Term,
|
|
Candidate: m.Candidate,
|
|
LastLogIndex: m.LastLogIndex,
|
|
LastLogTerm: m.LastLogTerm,
|
|
LeadershipTransfer: m.LeadershipTransfer,
|
|
}
|
|
}
|
|
|
|
func decodeRequestVoteResponse(m *pb.RequestVoteResponse) *raft.RequestVoteResponse {
|
|
return &raft.RequestVoteResponse{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
Term: m.Term,
|
|
Peers: m.Peers,
|
|
Granted: m.Granted,
|
|
}
|
|
}
|
|
|
|
func decodeInstallSnapshotRequest(m *pb.InstallSnapshotRequest) *raft.InstallSnapshotRequest {
|
|
return &raft.InstallSnapshotRequest{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
SnapshotVersion: raft.SnapshotVersion(m.SnapshotVersion),
|
|
Term: m.Term,
|
|
Leader: m.Leader,
|
|
LastLogIndex: m.LastLogIndex,
|
|
LastLogTerm: m.LastLogTerm,
|
|
Peers: m.Peers,
|
|
Configuration: m.Configuration,
|
|
ConfigurationIndex: m.ConfigurationIndex,
|
|
Size: m.Size,
|
|
}
|
|
}
|
|
|
|
func decodeInstallSnapshotResponse(m *pb.InstallSnapshotResponse) *raft.InstallSnapshotResponse {
|
|
return &raft.InstallSnapshotResponse{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
Term: m.Term,
|
|
Success: m.Success,
|
|
}
|
|
}
|
|
|
|
func decodeTimeoutNowRequest(m *pb.TimeoutNowRequest) *raft.TimeoutNowRequest {
|
|
return &raft.TimeoutNowRequest{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
}
|
|
}
|
|
|
|
func decodeTimeoutNowResponse(m *pb.TimeoutNowResponse) *raft.TimeoutNowResponse {
|
|
return &raft.TimeoutNowResponse{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
}
|
|
}
|
|
|
|
func decodeRequestPreVoteRequest(m *pb.RequestPreVoteRequest) *raft.RequestPreVoteRequest {
|
|
return &raft.RequestPreVoteRequest{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
Term: m.Term,
|
|
LastLogIndex: m.LastLogIndex,
|
|
LastLogTerm: m.LastLogTerm,
|
|
}
|
|
}
|
|
|
|
func decodeRequestPreVoteResponse(m *pb.RequestPreVoteResponse) *raft.RequestPreVoteResponse {
|
|
return &raft.RequestPreVoteResponse{
|
|
RPCHeader: decodeRPCHeader(m.RpcHeader),
|
|
Term: m.Term,
|
|
Granted: m.Granted,
|
|
}
|
|
}
|