messages.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. use serde_derive::{Deserialize, Serialize};
  2. use crate::log_array::LogEntry;
  3. use crate::raft::{Peer, Term};
  4. use crate::{Index, IndexTerm};
  5. #[derive(Clone, Debug, Serialize, Deserialize)]
  6. pub struct RequestVoteArgs {
  7. pub(crate) term: Term,
  8. pub(crate) candidate_id: Peer,
  9. pub(crate) last_log_index: Index,
  10. pub(crate) last_log_term: Term,
  11. }
  12. #[derive(Clone, Debug, Serialize, Deserialize)]
  13. pub struct RequestVoteReply {
  14. pub(crate) term: Term,
  15. pub(crate) vote_granted: bool,
  16. }
  17. #[derive(Clone, Debug, Serialize, Deserialize)]
  18. pub struct AppendEntriesArgs<Command> {
  19. pub(crate) term: Term,
  20. pub(crate) leader_id: Peer,
  21. pub(crate) prev_log_index: Index,
  22. pub(crate) prev_log_term: Term,
  23. pub(crate) entries: Vec<LogEntry<Command>>,
  24. pub(crate) leader_commit: Index,
  25. }
  26. #[derive(Clone, Debug, Serialize, Deserialize)]
  27. pub struct AppendEntriesReply {
  28. pub(crate) term: Term,
  29. pub(crate) success: bool,
  30. pub(crate) committed: Option<IndexTerm>,
  31. }
  32. #[derive(Clone, Debug, Serialize, Deserialize)]
  33. pub struct InstallSnapshotArgs {
  34. pub(crate) term: Term,
  35. pub(crate) leader_id: Peer,
  36. pub(crate) last_included_index: Index,
  37. pub(crate) last_included_term: Term,
  38. // TODO(ditsing): Serde cannot handle Vec<u8> as efficient as expected.
  39. pub(crate) data: Vec<u8>,
  40. pub(crate) offset: usize,
  41. pub(crate) done: bool,
  42. }
  43. #[derive(Clone, Debug, Serialize, Deserialize)]
  44. pub struct InstallSnapshotReply {
  45. pub(crate) term: Term,
  46. pub(crate) committed: Option<IndexTerm>,
  47. }