mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-10 01:01:34 +00:00
Make supervisor heartbeat only fire on main loop progress (#283)
This commit is contained in:
parent
ca209eb543
commit
c56f72b37c
@ -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_id = context.state.machine_id;
|
||||||
let machine_name = context.state.machine_name.clone();
|
let machine_name = context.state.machine_name.clone();
|
||||||
|
|
||||||
let mut data =
|
let data = HeartbeatClient::<TaskContext, _>::drain_current_messages(context.clone());
|
||||||
HeartbeatClient::<TaskContext, _>::drain_current_messages(context.clone());
|
|
||||||
data.push(HeartbeatData::MachineAlive);
|
|
||||||
let _ = context
|
let _ = context
|
||||||
.queue_client
|
.queue_client
|
||||||
.enqueue(Heartbeat {
|
.enqueue(Heartbeat {
|
||||||
@ -69,13 +67,19 @@ pub trait HeartbeatSender {
|
|||||||
fn send(&self, data: HeartbeatData) -> Result<()>;
|
fn send(&self, data: HeartbeatData) -> Result<()>;
|
||||||
|
|
||||||
fn alive(&self) {
|
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 {
|
impl HeartbeatSender for TaskHeartbeatClient {
|
||||||
fn send(&self, data: HeartbeatData) -> Result<()> {
|
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);
|
messages_lock.insert(data);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ use tokio::time;
|
|||||||
|
|
||||||
use crate::coordinator::*;
|
use crate::coordinator::*;
|
||||||
use crate::done::set_done_lock;
|
use crate::done::set_done_lock;
|
||||||
use crate::heartbeat::AgentHeartbeatClient;
|
use crate::heartbeat::{AgentHeartbeatClient, HeartbeatSender};
|
||||||
use crate::reboot::*;
|
use crate::reboot::*;
|
||||||
use crate::scheduler::*;
|
use crate::scheduler::*;
|
||||||
use crate::setup::*;
|
use crate::setup::*;
|
||||||
@ -20,7 +20,7 @@ pub struct Agent {
|
|||||||
setup_runner: Box<dyn ISetupRunner>,
|
setup_runner: Box<dyn ISetupRunner>,
|
||||||
work_queue: Box<dyn IWorkQueue>,
|
work_queue: Box<dyn IWorkQueue>,
|
||||||
worker_runner: Box<dyn IWorkerRunner>,
|
worker_runner: Box<dyn IWorkerRunner>,
|
||||||
_heartbeat: Option<AgentHeartbeatClient>,
|
heartbeat: Option<AgentHeartbeatClient>,
|
||||||
previous_state: NodeState,
|
previous_state: NodeState,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ impl Agent {
|
|||||||
setup_runner,
|
setup_runner,
|
||||||
work_queue,
|
work_queue,
|
||||||
worker_runner,
|
worker_runner,
|
||||||
_heartbeat: heartbeat,
|
heartbeat,
|
||||||
previous_state,
|
previous_state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,6 +67,7 @@ impl Agent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
self.heartbeat.alive();
|
||||||
if delay.is_elapsed() {
|
if delay.is_elapsed() {
|
||||||
self.execute_pending_commands().await?;
|
self.execute_pending_commands().await?;
|
||||||
delay = command_delay();
|
delay = command_delay();
|
||||||
|
@ -40,8 +40,7 @@ pub async fn init_agent_heartbeat(queue_url: Url) -> Result<AgentHeartbeatClient
|
|||||||
queue_url,
|
queue_url,
|
||||||
None,
|
None,
|
||||||
|context| async move {
|
|context| async move {
|
||||||
let mut data = HeartbeatClient::drain_current_messages(context.clone());
|
let data = HeartbeatClient::drain_current_messages(context.clone());
|
||||||
data.push(HeartbeatData::MachineAlive);
|
|
||||||
let _ = context
|
let _ = context
|
||||||
.queue_client
|
.queue_client
|
||||||
.enqueue(Heartbeat {
|
.enqueue(Heartbeat {
|
||||||
@ -54,3 +53,34 @@ pub async fn init_agent_heartbeat(queue_url: Url) -> Result<AgentHeartbeatClient
|
|||||||
);
|
);
|
||||||
Ok(hb)
|
Ok(hb)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait HeartbeatSender {
|
||||||
|
fn send(&self, data: HeartbeatData) -> Result<()>;
|
||||||
|
|
||||||
|
fn alive(&self) {
|
||||||
|
if let Err(error) = self.send(HeartbeatData::MachineAlive) {
|
||||||
|
error!("failed to send heartbeat: {}", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl HeartbeatSender for AgentHeartbeatClient {
|
||||||
|
fn send(&self, data: HeartbeatData) -> Result<()> {
|
||||||
|
let mut messages_lock = self
|
||||||
|
.context
|
||||||
|
.pending_messages
|
||||||
|
.lock()
|
||||||
|
.map_err(|_| anyhow::format_err!("Unable to acquire the lock"))?;
|
||||||
|
messages_lock.insert(data);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl HeartbeatSender for Option<AgentHeartbeatClient> {
|
||||||
|
fn send(&self, data: HeartbeatData) -> Result<()> {
|
||||||
|
match self {
|
||||||
|
Some(client) => client.send(data),
|
||||||
|
None => Ok(()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user