Make supervisor heartbeat only fire on main loop progress (#283)

This commit is contained in:
Cheick Keita
2020-11-11 15:30:02 -08:00
committed by GitHub
parent ca209eb543
commit c56f72b37c
3 changed files with 45 additions and 10 deletions

View File

@ -48,9 +48,7 @@ pub async fn init_task_heartbeat(queue_url: Url, task_id: Uuid) -> Result<TaskHe
let machine_id = context.state.machine_id;
let machine_name = context.state.machine_name.clone();
let mut data =
HeartbeatClient::<TaskContext, _>::drain_current_messages(context.clone());
data.push(HeartbeatData::MachineAlive);
let data = HeartbeatClient::<TaskContext, _>::drain_current_messages(context.clone());
let _ = context
.queue_client
.enqueue(Heartbeat {
@ -69,13 +67,19 @@ pub trait HeartbeatSender {
fn send(&self, data: HeartbeatData) -> Result<()>;
fn alive(&self) {
self.send(HeartbeatData::TaskAlive).unwrap()
if let Err(error) = self.send(HeartbeatData::TaskAlive) {
error!("failed to send heartbeat: {}", error);
}
}
}
impl HeartbeatSender for TaskHeartbeatClient {
fn send(&self, data: HeartbeatData) -> Result<()> {
let mut messages_lock = self.context.pending_messages.lock().unwrap();
let mut messages_lock = self
.context
.pending_messages
.lock()
.map_err(|_| anyhow::format_err!("Unable to acquire the lock"))?;
messages_lock.insert(data);
Ok(())
}