// Decodes the SnapshotRecoveryRequest from a buffer. Returns the number of bytes read and // any error that occurs. func (req *SnapshotRecoveryRequest) Decode(r io.Reader) (int, error) { data, err := ioutil.ReadAll(r) if err != nil { return 0, err } totalBytes := len(data) pb := &protobuf.SnapshotRecoveryRequest{} if err = proto.Unmarshal(data, pb); err != nil { return -1, err } req.LeaderName = pb.GetLeaderName() req.LastIndex = pb.GetLastIndex() req.LastTerm = pb.GetLastTerm() req.State = pb.GetState() req.Peers = make([]*Peer, len(pb.Peers)) for i, peer := range pb.Peers { req.Peers[i] = &Peer{ Name: peer.GetName(), ConnectionString: peer.GetConnectionString(), } } return totalBytes, nil }
// Decodes the AppendEntriesResponse from a buffer. Returns the number of bytes read and // any error that occurs. func (resp *AppendEntriesResponse) Decode(r io.Reader) (int, error) { data, err := ioutil.ReadAll(r) if err != nil { return -1, err } resp.pb = new(protobuf.AppendEntriesResponse) if err := proto.Unmarshal(data, resp.pb); err != nil { return -1, err } return len(data), nil }
// Decodes the SnapshotResponse from a buffer. Returns the number of bytes read and // any error that occurs. func (resp *SnapshotResponse) Decode(r io.Reader) (int, error) { data, err := ioutil.ReadAll(r) if err != nil { return 0, err } totalBytes := len(data) pb := &protobuf.SnapshotResponse{} if err := proto.Unmarshal(data, pb); err != nil { return -1, err } resp.Success = pb.GetSuccess() return totalBytes, nil }
// Decodes the RequestVoteResponse from a buffer. Returns the number of bytes read and // any error that occurs. func (resp *RequestVoteResponse) Decode(r io.Reader) (int, error) { data, err := ioutil.ReadAll(r) if err != nil { return 0, err } totalBytes := len(data) pb := &protobuf.RequestVoteResponse{} if err = proto.Unmarshal(data, pb); err != nil { return -1, err } resp.Term = pb.GetTerm() resp.VoteGranted = pb.GetVoteGranted() return totalBytes, nil }
// Decodes the log entry from a buffer. Returns the number of bytes read and // any error that occurs. func (e *LogEntry) Decode(r io.Reader) (int, error) { var length int _, err := fmt.Fscanf(r, "%8x\n", &length) if err != nil { return -1, err } data := make([]byte, length) _, err = io.ReadFull(r, data) if err != nil { return -1, err } if err = proto.Unmarshal(data, e.pb); err != nil { return -1, err } return length + 8 + 1, nil }
// Decodes the SnapshotRequest from a buffer. Returns the number of bytes read and // any error that occurs. func (req *SnapshotRequest) Decode(r io.Reader) (int, error) { data, err := ioutil.ReadAll(r) if err != nil { return 0, err } totalBytes := len(data) pb := &protobuf.SnapshotRequest{} if err := proto.Unmarshal(data, pb); err != nil { return -1, err } req.LeaderName = pb.GetLeaderName() req.LastIndex = pb.GetLastIndex() req.LastTerm = pb.GetLastTerm() return totalBytes, nil }
// Decodes the AppendEntriesRequest from a buffer. Returns the number of bytes read and // any error that occurs. func (req *AppendEntriesRequest) Decode(r io.Reader) (int, error) { data, err := ioutil.ReadAll(r) if err != nil { return -1, err } pb := new(protobuf.AppendEntriesRequest) if err := proto.Unmarshal(data, pb); err != nil { return -1, err } req.Term = pb.GetTerm() req.PrevLogIndex = pb.GetPrevLogIndex() req.PrevLogTerm = pb.GetPrevLogTerm() req.CommitIndex = pb.GetCommitIndex() req.LeaderName = pb.GetLeaderName() req.Entries = pb.GetEntries() return len(data), nil }
// Decodes the RequestVoteRequest from a buffer. Returns the number of bytes read and // any error that occurs. func (req *RequestVoteRequest) Decode(r io.Reader) (int, error) { data, err := ioutil.ReadAll(r) if err != nil { return -1, err } totalBytes := len(data) pb := &protobuf.RequestVoteRequest{} if err = proto.Unmarshal(data, pb); err != nil { return -1, err } req.Term = pb.GetTerm() req.LastLogIndex = pb.GetLastLogIndex() req.LastLogTerm = pb.GetLastLogTerm() req.CandidateName = pb.GetCandidateName() return totalBytes, nil }