148 lines
3.9 KiB
Go
148 lines
3.9 KiB
Go
package transport
|
|
|
|
import (
|
|
pb "deevirt.fr/compute/pkg/api/proto"
|
|
"github.com/hashicorp/raft"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
)
|
|
|
|
func encodeAppendEntriesRequest(s *raft.AppendEntriesRequest) *pb.AppendEntriesRequest {
|
|
return &pb.AppendEntriesRequest{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
Term: s.Term,
|
|
//Leader: s.Leader,
|
|
PrevLogEntry: s.PrevLogEntry,
|
|
PrevLogTerm: s.PrevLogTerm,
|
|
Entries: encodeLogs(s.Entries),
|
|
LeaderCommitIndex: s.LeaderCommitIndex,
|
|
}
|
|
}
|
|
|
|
func encodeRPCHeader(s raft.RPCHeader) *pb.RPCHeader {
|
|
return &pb.RPCHeader{
|
|
ProtocolVersion: int64(s.ProtocolVersion),
|
|
Id: s.ID,
|
|
Addr: s.Addr,
|
|
}
|
|
}
|
|
|
|
func encodeLogs(s []*raft.Log) []*pb.Log {
|
|
ret := make([]*pb.Log, len(s))
|
|
for i, l := range s {
|
|
ret[i] = encodeLog(l)
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func encodeLog(s *raft.Log) *pb.Log {
|
|
return &pb.Log{
|
|
Index: s.Index,
|
|
Term: s.Term,
|
|
Type: encodeLogType(s.Type),
|
|
Data: s.Data,
|
|
Extensions: s.Extensions,
|
|
AppendedAt: timestamppb.New(s.AppendedAt),
|
|
}
|
|
}
|
|
|
|
func encodeLogType(s raft.LogType) pb.Log_LogType {
|
|
switch s {
|
|
case raft.LogCommand:
|
|
return pb.Log_LOG_COMMAND
|
|
case raft.LogNoop:
|
|
return pb.Log_LOG_NOOP
|
|
case raft.LogAddPeerDeprecated:
|
|
return pb.Log_LOG_ADD_PEER_DEPRECATED
|
|
case raft.LogRemovePeerDeprecated:
|
|
return pb.Log_LOG_REMOVE_PEER_DEPRECATED
|
|
case raft.LogBarrier:
|
|
return pb.Log_LOG_BARRIER
|
|
case raft.LogConfiguration:
|
|
return pb.Log_LOG_CONFIGURATION
|
|
default:
|
|
panic("invalid LogType")
|
|
}
|
|
}
|
|
|
|
func encodeAppendEntriesResponse(s *raft.AppendEntriesResponse) *pb.AppendEntriesResponse {
|
|
return &pb.AppendEntriesResponse{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
Term: s.Term,
|
|
LastLog: s.LastLog,
|
|
Success: s.Success,
|
|
NoRetryBackoff: s.NoRetryBackoff,
|
|
}
|
|
}
|
|
|
|
func encodeRequestVoteRequest(s *raft.RequestVoteRequest) *pb.RequestVoteRequest {
|
|
return &pb.RequestVoteRequest{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
Term: s.Term,
|
|
//Candidate: s.Candidate,
|
|
LastLogIndex: s.LastLogIndex,
|
|
LastLogTerm: s.LastLogTerm,
|
|
LeadershipTransfer: s.LeadershipTransfer,
|
|
}
|
|
}
|
|
|
|
func encodeRequestVoteResponse(s *raft.RequestVoteResponse) *pb.RequestVoteResponse {
|
|
return &pb.RequestVoteResponse{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
Term: s.Term,
|
|
Peers: s.Peers,
|
|
Granted: s.Granted,
|
|
}
|
|
}
|
|
|
|
func encodeInstallSnapshotRequest(s *raft.InstallSnapshotRequest) *pb.InstallSnapshotRequest {
|
|
return &pb.InstallSnapshotRequest{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
SnapshotVersion: int64(s.SnapshotVersion),
|
|
Term: s.Term,
|
|
Leader: s.Leader,
|
|
LastLogIndex: s.LastLogIndex,
|
|
LastLogTerm: s.LastLogTerm,
|
|
Peers: s.Peers,
|
|
Configuration: s.Configuration,
|
|
ConfigurationIndex: s.ConfigurationIndex,
|
|
Size: s.Size,
|
|
}
|
|
}
|
|
|
|
func encodeInstallSnapshotResponse(s *raft.InstallSnapshotResponse) *pb.InstallSnapshotResponse {
|
|
return &pb.InstallSnapshotResponse{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
Term: s.Term,
|
|
Success: s.Success,
|
|
}
|
|
}
|
|
|
|
func encodeTimeoutNowRequest(s *raft.TimeoutNowRequest) *pb.TimeoutNowRequest {
|
|
return &pb.TimeoutNowRequest{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
}
|
|
}
|
|
|
|
func encodeTimeoutNowResponse(s *raft.TimeoutNowResponse) *pb.TimeoutNowResponse {
|
|
return &pb.TimeoutNowResponse{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
}
|
|
}
|
|
|
|
func encodeRequestPreVoteRequest(s *raft.RequestPreVoteRequest) *pb.RequestPreVoteRequest {
|
|
return &pb.RequestPreVoteRequest{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
Term: s.Term,
|
|
LastLogIndex: s.LastLogIndex,
|
|
LastLogTerm: s.LastLogTerm,
|
|
}
|
|
}
|
|
|
|
func encodeRequestPreVoteResponse(s *raft.RequestPreVoteResponse) *pb.RequestPreVoteResponse {
|
|
return &pb.RequestPreVoteResponse{
|
|
RpcHeader: encodeRPCHeader(s.RPCHeader),
|
|
Term: s.Term,
|
|
Granted: s.Granted,
|
|
}
|
|
}
|