run.rs 895 B

12345678910111213141516171819202122232425262728293031
  1. use std::net::SocketAddr;
  2. use std::sync::Arc;
  3. use kvraft::KVServer;
  4. use crate::kv_service::start_kv_service_server;
  5. use crate::persister::DoNothingPersister;
  6. use crate::raft_service::{start_raft_service_server, LazyRaftServiceClient};
  7. pub(crate) async fn run_kv_instance(
  8. addr: SocketAddr,
  9. raft_peers: Vec<SocketAddr>,
  10. me: usize,
  11. ) -> std::io::Result<Arc<KVServer>> {
  12. let local_raft_peer = raft_peers[me];
  13. let mut remote_rafts = vec![];
  14. for raft_peer in raft_peers {
  15. remote_rafts.push(LazyRaftServiceClient::new(raft_peer));
  16. }
  17. let persister = Arc::new(DoNothingPersister::default());
  18. let kv_server = KVServer::new(remote_rafts, me, persister, None);
  19. let raft = Arc::new(kv_server.raft().clone());
  20. start_raft_service_server(local_raft_peer, raft).await?;
  21. start_kv_service_server(addr, kv_server.clone()).await?;
  22. Ok(kv_server)
  23. }