[WORKER] Make Alive Check run in parallel
Some checks failed
/ build (push) Failing after 1m40s
/ clippy (push) Failing after 1m42s

This commit is contained in:
xqtc 2024-09-12 02:34:52 +02:00
parent bc84e9164f
commit 150df72e00
3 changed files with 55 additions and 46 deletions

View file

@ -6,6 +6,7 @@ use std::collections::HashMap;
use crate::config::CONFIG;
use clap::{Parser, Subcommand};
use log::{debug, info};
use sched::AliveCheckRequest;
use tonic::transport::Server;
// Import generated protobuf
mod sched {
@ -92,11 +93,12 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
info!("Starting gRPC server on {}", addr);
let data = grpc::DataService::default();
let auth = grpc::AuthService::default();
Server::builder()
let alive = grpc::AliveCheckService::default();
let grpc_server = Server::builder()
.add_service(sched::data_server::DataServer::new(data))
.add_service(sched::auth_server::AuthServer::new(auth))
.serve(addr)
.await?;
debug!("{:?}", CONFIG.node);
.add_service(sched::alive_check_server::AliveCheckServer::new(alive))
.serve(addr);
grpc_server.await?;
Ok(())
}

View file

@ -1,11 +1,14 @@
use std::net::SocketAddr;
use std::{
net::SocketAddr,
sync::{atomic::AtomicBool, Arc},
};
mod grpc;
mod config;
use crate::config::CONFIG;
use log::{debug, info};
use sched::{LoginRequest, LogoutRequest};
use log::{debug, error, info};
use sched::{DataRequest, LoginRequest, LogoutRequest};
pub mod sched {
tonic::include_proto!("sched");
@ -29,20 +32,34 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
std::env::set_var("RUST_LOG", CONFIG.log.level.clone());
pretty_env_logger::init();
greet();
// println!(" {}", "+-------------+".color(Color::LightBlue));
// println!(" {}", "| 予 定 |".color(Color::LightPink1));
// println!(
// " {}",
// "+-------------+".color(colorful::RGB::new(252, 252, 252))
// );
// println!(" {}", "YOTEI SCHEDULER".color(Color::LightPink1));
// println!(" {}", " WORKER NODE\n".color(Color::LightBlue));
let server_addr = "http://[::1]:50051";
let addr: SocketAddr = "[::1]:50053".parse()?;
let data = sched::data_client::DataClient::connect(server_addr).await?;
let mut auth = sched::auth_client::AuthClient::connect(server_addr).await?;
// Start server here
let alive_check_server = alive_check_serve(addr);
std::thread::sleep(std::time::Duration::from_secs(4));
let mut data = sched::data_client::DataClient::connect(server_addr).await?;
let mut auth = sched::auth_client::AuthClient::connect(server_addr).await?;
let mut alive = sched::alive_check_client::AliveCheckClient::connect(server_addr).await?;
let mut shutdown = Arc::new(AtomicBool::new(false));
let (send_shutdown, mut recv_shutdown) = tokio::sync::oneshot::channel::<()>();
let alive_thr = tokio::spawn(async move {
let mut alive_interval = tokio::time::interval(std::time::Duration::from_secs(10));
loop {
tokio::select! {
msg = &mut recv_shutdown => { break; }
_ = alive_interval.tick() => {
debug!(
"{:#?}",
alive
.alive_check(tonic::Request::new(sched::AliveCheckRequest {
node_id: format!("compute-{}", 1),
}))
.await?
);
},
}
}
Ok::<(), tonic::Status>(())
});
debug!(
"{:#?}",
auth.login(tonic::Request::new(LoginRequest {
@ -50,33 +67,23 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
}))
.await?
);
debug!("{:#?}", auth.logout(tonic::Request::new(LogoutRequest {
node_id: "compute-1".to_string(),
})).await?);
// Await server at end
alive_check_server.await?;
Ok(())
}
async fn alive_check_serve(addr: SocketAddr) -> Result<(), Box<dyn std::error::Error>> {
use grpc::AliveCheckService;
use sched::alive_check_server::AliveCheckServer;
use tokio::task;
use tonic::transport::Server;
task::spawn(async move {
info!(
"Starting Alive Check gRPC server on: http://{}",
addr.to_string()
);
let alive_check_service = AliveCheckService::default();
Server::builder()
.add_service(AliveCheckServer::new(alive_check_service))
.serve(addr)
.await
.unwrap();
});
debug!(
"{:#?}",
data.data(tonic::Request::new(DataRequest {
node_id: "compute-1".to_string(),
uuid: "foo".to_string(),
hashmap_id: "bar".to_string(),
}))
.await?
);
debug!(
"{:#?}",
auth.logout(tonic::Request::new(LogoutRequest {
node_id: "compute-1".to_string(),
}))
.await?
);
let mut debug_iter = 0;
alive_thr.await?;
Ok(())
}