ruaft_service.rs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. use std::sync::Arc;
  2. use tarpc::context::Context;
  3. use kvraft::UniqueKVOp;
  4. use ruaft::{
  5. AppendEntriesArgs, AppendEntriesReply, InstallSnapshotArgs,
  6. InstallSnapshotReply, Raft, RequestVoteArgs, RequestVoteReply,
  7. };
  8. #[tarpc::service]
  9. trait RuaftSerivce {
  10. async fn append_entries(
  11. args: AppendEntriesArgs<UniqueKVOp>,
  12. ) -> AppendEntriesReply;
  13. async fn install_snapshot(
  14. args: InstallSnapshotArgs,
  15. ) -> InstallSnapshotReply;
  16. async fn request_vote(args: RequestVoteArgs) -> RequestVoteReply;
  17. }
  18. struct RuaftRpcServer(Arc<Raft<UniqueKVOp>>);
  19. #[tarpc::server]
  20. impl RuaftSerivce for RuaftRpcServer {
  21. async fn append_entries(
  22. self,
  23. _context: Context,
  24. args: AppendEntriesArgs<UniqueKVOp>,
  25. ) -> AppendEntriesReply {
  26. self.0.process_append_entries(args)
  27. }
  28. async fn install_snapshot(
  29. self,
  30. _context: Context,
  31. args: InstallSnapshotArgs,
  32. ) -> InstallSnapshotReply {
  33. self.0.process_install_snapshot(args)
  34. }
  35. async fn request_vote(
  36. self,
  37. _context: Context,
  38. args: RequestVoteArgs,
  39. ) -> RequestVoteReply {
  40. self.0.process_request_vote(args)
  41. }
  42. }