Rename types pertaining to SectionRunner
This commit is contained in:
parent
a509303bc2
commit
10abb912d4
@ -19,7 +19,7 @@ use tokio::{
|
||||
use tracing::{debug, trace, trace_span, warn};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct RunHandle(i32);
|
||||
pub struct SectionRunHandle(i32);
|
||||
|
||||
#[derive(Debug)]
|
||||
struct SectionRunnerInner {
|
||||
@ -37,27 +37,27 @@ impl SectionRunnerInner {
|
||||
#[derive(Debug)]
|
||||
enum RunnerMsg {
|
||||
Quit,
|
||||
QueueRun(RunHandle, SectionRef, Duration),
|
||||
CancelRun(RunHandle),
|
||||
QueueRun(SectionRunHandle, SectionRef, Duration),
|
||||
CancelRun(SectionRunHandle),
|
||||
CancelAll,
|
||||
Pause,
|
||||
Unpause,
|
||||
Subscribe(oneshot::Sender<RunnerEventRecv>),
|
||||
Subscribe(oneshot::Sender<SectionEventRecv>),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum RunnerEvent {
|
||||
RunStart(RunHandle),
|
||||
RunFinish(RunHandle),
|
||||
RunPause(RunHandle),
|
||||
RunUnpause(RunHandle),
|
||||
RunCancel(RunHandle),
|
||||
pub enum SectionEvent {
|
||||
RunStart(SectionRunHandle),
|
||||
RunFinish(SectionRunHandle),
|
||||
RunPause(SectionRunHandle),
|
||||
RunUnpause(SectionRunHandle),
|
||||
RunCancel(SectionRunHandle),
|
||||
RunnerPause,
|
||||
RunnerUnpause,
|
||||
}
|
||||
|
||||
pub type RunnerEventRecv = broadcast::Receiver<RunnerEvent>;
|
||||
type RunnerEventSend = broadcast::Sender<RunnerEvent>;
|
||||
pub type SectionEventRecv = broadcast::Receiver<SectionEvent>;
|
||||
type SectionEventSend = broadcast::Sender<SectionEvent>;
|
||||
|
||||
const EVENT_CAPACITY: usize = 8;
|
||||
|
||||
@ -77,7 +77,7 @@ enum RunState {
|
||||
|
||||
#[derive(Debug)]
|
||||
struct SecRun {
|
||||
handle: RunHandle,
|
||||
handle: SectionRunHandle,
|
||||
section: SectionRef,
|
||||
duration: Duration,
|
||||
total_duration: Duration,
|
||||
@ -85,7 +85,7 @@ struct SecRun {
|
||||
}
|
||||
|
||||
impl SecRun {
|
||||
fn new(handle: RunHandle, section: SectionRef, duration: Duration) -> Self {
|
||||
fn new(handle: SectionRunHandle, section: SectionRef, duration: Duration) -> Self {
|
||||
Self {
|
||||
handle,
|
||||
section,
|
||||
@ -111,7 +111,7 @@ struct RunnerTask {
|
||||
running: bool,
|
||||
delay_future: OptionFuture<tokio::time::Delay>,
|
||||
paused: bool,
|
||||
event_send: Option<RunnerEventSend>,
|
||||
event_send: Option<SectionEventSend>,
|
||||
}
|
||||
|
||||
impl RunnerTask {
|
||||
@ -129,7 +129,7 @@ impl RunnerTask {
|
||||
}
|
||||
}
|
||||
|
||||
fn send_event(&mut self, event: RunnerEvent) {
|
||||
fn send_event(&mut self, event: SectionEvent) {
|
||||
if let Some(event_send) = &mut self.event_send {
|
||||
match event_send.send(event) {
|
||||
Ok(_) => {}
|
||||
@ -140,7 +140,7 @@ impl RunnerTask {
|
||||
}
|
||||
}
|
||||
|
||||
fn subscribe_event(&mut self) -> RunnerEventRecv {
|
||||
fn subscribe_event(&mut self) -> SectionEventRecv {
|
||||
match &mut self.event_send {
|
||||
Some(event_send) => event_send.subscribe(),
|
||||
None => {
|
||||
@ -159,7 +159,7 @@ impl RunnerTask {
|
||||
run.state = Running {
|
||||
start_time: Instant::now(),
|
||||
};
|
||||
self.send_event(RunnerEvent::RunStart(run.handle.clone()));
|
||||
self.send_event(SectionEvent::RunStart(run.handle.clone()));
|
||||
}
|
||||
|
||||
fn finish_run(&mut self, run: &mut SecRun) {
|
||||
@ -168,7 +168,7 @@ impl RunnerTask {
|
||||
self.interface
|
||||
.set_section_state(run.section.interface_id, false);
|
||||
run.state = RunState::Finished;
|
||||
self.send_event(RunnerEvent::RunFinish(run.handle.clone()));
|
||||
self.send_event(SectionEvent::RunFinish(run.handle.clone()));
|
||||
} else {
|
||||
warn!(
|
||||
section_id = run.section.id,
|
||||
@ -185,7 +185,7 @@ impl RunnerTask {
|
||||
.set_section_state(run.section.interface_id, false);
|
||||
}
|
||||
run.state = RunState::Cancelled;
|
||||
self.send_event(RunnerEvent::RunCancel(run.handle.clone()));
|
||||
self.send_event(SectionEvent::RunCancel(run.handle.clone()));
|
||||
}
|
||||
|
||||
fn pause_run(&mut self, run: &mut SecRun) {
|
||||
@ -212,7 +212,7 @@ impl RunnerTask {
|
||||
}
|
||||
};
|
||||
run.state = new_state;
|
||||
self.send_event(RunnerEvent::RunPause(run.handle.clone()));
|
||||
self.send_event(SectionEvent::RunPause(run.handle.clone()));
|
||||
}
|
||||
|
||||
fn unpause_run(&mut self, run: &mut SecRun) {
|
||||
@ -230,7 +230,7 @@ impl RunnerTask {
|
||||
};
|
||||
let ran_for = pause_time - start_time;
|
||||
run.duration -= ran_for;
|
||||
self.send_event(RunnerEvent::RunUnpause(run.handle.clone()));
|
||||
self.send_event(SectionEvent::RunUnpause(run.handle.clone()));
|
||||
}
|
||||
Waiting | Finished | Cancelled | Running { .. } => {
|
||||
warn!(
|
||||
@ -313,11 +313,11 @@ impl RunnerTask {
|
||||
}
|
||||
Pause => {
|
||||
self.paused = true;
|
||||
self.send_event(RunnerEvent::RunnerPause);
|
||||
self.send_event(SectionEvent::RunnerPause);
|
||||
}
|
||||
Unpause => {
|
||||
self.paused = false;
|
||||
self.send_event(RunnerEvent::RunnerUnpause);
|
||||
self.send_event(SectionEvent::RunnerUnpause);
|
||||
}
|
||||
Subscribe(res_send) => {
|
||||
let event_recv = self.subscribe_event();
|
||||
@ -390,16 +390,16 @@ impl SectionRunner {
|
||||
&mut self,
|
||||
section: SectionRef,
|
||||
duration: Duration,
|
||||
) -> Result<RunHandle> {
|
||||
) -> Result<SectionRunHandle> {
|
||||
let run_id = self.inner.next_run_id.fetch_add(1, Ordering::Relaxed);
|
||||
let handle = RunHandle(run_id);
|
||||
let handle = SectionRunHandle(run_id);
|
||||
self.msg_send
|
||||
.send(RunnerMsg::QueueRun(handle.clone(), section, duration))
|
||||
.await?;
|
||||
Ok(handle)
|
||||
}
|
||||
|
||||
pub async fn cancel_run(&mut self, handle: RunHandle) -> Result<()> {
|
||||
pub async fn cancel_run(&mut self, handle: SectionRunHandle) -> Result<()> {
|
||||
self.msg_send.send(RunnerMsg::CancelRun(handle)).await?;
|
||||
Ok(())
|
||||
}
|
||||
@ -419,7 +419,7 @@ impl SectionRunner {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn subscribe(&mut self) -> Result<RunnerEventRecv> {
|
||||
pub async fn subscribe(&mut self) -> Result<SectionEventRecv> {
|
||||
let (res_send, res_recv) = oneshot::channel();
|
||||
self.msg_send.send(RunnerMsg::Subscribe(res_send)).await?;
|
||||
let event_recv = res_recv.await?;
|
||||
@ -432,9 +432,10 @@ mod test {
|
||||
use super::*;
|
||||
use crate::section_interface::MockSectionInterface;
|
||||
use crate::{
|
||||
model::Section,
|
||||
model::{Section, Sections},
|
||||
trace_listeners::{EventListener, Filters, SpanFilters, SpanListener},
|
||||
};
|
||||
use im::ordmap;
|
||||
use tracing_subscriber::prelude::*;
|
||||
|
||||
#[tokio::test]
|
||||
@ -465,19 +466,19 @@ mod test {
|
||||
assert_eq!(task_span.get_exit_count(), 1);
|
||||
}
|
||||
|
||||
fn make_sections_and_interface() -> (Vec<SectionRef>, Arc<MockSectionInterface>) {
|
||||
fn make_sections_and_interface() -> (Sections, Arc<MockSectionInterface>) {
|
||||
let interface = Arc::new(MockSectionInterface::new(2));
|
||||
let sections: Vec<SectionRef> = vec![
|
||||
Arc::new(Section {
|
||||
let sections: Sections = ordmap![
|
||||
1 => Section {
|
||||
id: 1,
|
||||
name: "Section 1".into(),
|
||||
interface_id: 0,
|
||||
}),
|
||||
Arc::new(Section {
|
||||
}.into(),
|
||||
2 => Section {
|
||||
id: 2,
|
||||
name: "Section 2".into(),
|
||||
interface_id: 1,
|
||||
}),
|
||||
}.into()
|
||||
];
|
||||
(sections, interface)
|
||||
}
|
||||
@ -510,7 +511,7 @@ mod test {
|
||||
|
||||
// Queue single section, make sure it runs
|
||||
runner
|
||||
.queue_run(sections[0].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&1].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
@ -524,12 +525,12 @@ mod test {
|
||||
|
||||
// Queue two sections, make sure they run one at a time
|
||||
runner
|
||||
.queue_run(sections[1].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&2].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
runner
|
||||
.queue_run(sections[0].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&1].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
@ -555,17 +556,17 @@ mod test {
|
||||
let mut runner = SectionRunner::new(interface.clone());
|
||||
|
||||
let run1 = runner
|
||||
.queue_run(sections[1].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&2].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let _run2 = runner
|
||||
.queue_run(sections[0].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&1].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let run3 = runner
|
||||
.queue_run(sections[1].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&2].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
@ -593,17 +594,17 @@ mod test {
|
||||
let mut runner = SectionRunner::new(interface.clone());
|
||||
|
||||
runner
|
||||
.queue_run(sections[1].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&2].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
runner
|
||||
.queue_run(sections[0].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&1].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
runner
|
||||
.queue_run(sections[1].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&2].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
@ -628,17 +629,17 @@ mod test {
|
||||
let mut runner = SectionRunner::new(interface.clone());
|
||||
|
||||
let _run1 = runner
|
||||
.queue_run(sections[1].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&2].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let run2 = runner
|
||||
.queue_run(sections[0].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&1].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let _run3 = runner
|
||||
.queue_run(sections[1].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&2].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
@ -690,73 +691,73 @@ mod test {
|
||||
let mut event_recv = runner.subscribe().await.unwrap();
|
||||
|
||||
let run1 = runner
|
||||
.queue_run(sections[1].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&2].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let run2 = runner
|
||||
.queue_run(sections[0].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&1].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let run3 = runner
|
||||
.queue_run(sections[1].clone(), Duration::from_secs(10))
|
||||
.queue_run(sections[&2].clone(), Duration::from_secs(10))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
event_recv.recv().await,
|
||||
Ok(RunnerEvent::RunStart(run1.clone()))
|
||||
Ok(SectionEvent::RunStart(run1.clone()))
|
||||
);
|
||||
|
||||
runner.pause().await.unwrap();
|
||||
assert_eq!(event_recv.recv().await, Ok(RunnerEvent::RunnerPause));
|
||||
assert_eq!(event_recv.recv().await, Ok(SectionEvent::RunnerPause));
|
||||
assert_eq!(
|
||||
event_recv.recv().await,
|
||||
Ok(RunnerEvent::RunPause(run1.clone()))
|
||||
Ok(SectionEvent::RunPause(run1.clone()))
|
||||
);
|
||||
|
||||
runner.unpause().await.unwrap();
|
||||
assert_eq!(event_recv.recv().await, Ok(RunnerEvent::RunnerUnpause));
|
||||
assert_eq!(event_recv.recv().await, Ok(SectionEvent::RunnerUnpause));
|
||||
assert_eq!(
|
||||
event_recv.recv().await,
|
||||
Ok(RunnerEvent::RunUnpause(run1.clone()))
|
||||
Ok(SectionEvent::RunUnpause(run1.clone()))
|
||||
);
|
||||
|
||||
advance(Duration::from_secs(11)).await;
|
||||
assert_eq!(event_recv.recv().await, Ok(RunnerEvent::RunFinish(run1)));
|
||||
assert_eq!(event_recv.recv().await, Ok(SectionEvent::RunFinish(run1)));
|
||||
assert_eq!(
|
||||
event_recv.recv().await,
|
||||
Ok(RunnerEvent::RunStart(run2.clone()))
|
||||
Ok(SectionEvent::RunStart(run2.clone()))
|
||||
);
|
||||
|
||||
runner.pause().await.unwrap();
|
||||
assert_eq!(event_recv.recv().await, Ok(RunnerEvent::RunnerPause));
|
||||
assert_eq!(event_recv.recv().await, Ok(SectionEvent::RunnerPause));
|
||||
assert_eq!(
|
||||
event_recv.recv().await,
|
||||
Ok(RunnerEvent::RunPause(run2.clone()))
|
||||
Ok(SectionEvent::RunPause(run2.clone()))
|
||||
);
|
||||
|
||||
// cancel paused run
|
||||
runner.cancel_run(run2.clone()).await.unwrap();
|
||||
assert_eq!(
|
||||
event_recv.recv().await,
|
||||
Ok(RunnerEvent::RunCancel(run2.clone()))
|
||||
Ok(SectionEvent::RunCancel(run2.clone()))
|
||||
);
|
||||
assert_eq!(
|
||||
event_recv.recv().await,
|
||||
Ok(RunnerEvent::RunPause(run3.clone()))
|
||||
Ok(SectionEvent::RunPause(run3.clone()))
|
||||
);
|
||||
|
||||
runner.unpause().await.unwrap();
|
||||
assert_eq!(event_recv.recv().await, Ok(RunnerEvent::RunnerUnpause));
|
||||
assert_eq!(event_recv.recv().await, Ok(SectionEvent::RunnerUnpause));
|
||||
assert_eq!(
|
||||
event_recv.recv().await,
|
||||
Ok(RunnerEvent::RunUnpause(run3.clone()))
|
||||
Ok(SectionEvent::RunUnpause(run3.clone()))
|
||||
);
|
||||
|
||||
advance(Duration::from_secs(11)).await;
|
||||
assert_eq!(event_recv.recv().await, Ok(RunnerEvent::RunFinish(run3)));
|
||||
assert_eq!(event_recv.recv().await, Ok(SectionEvent::RunFinish(run3)));
|
||||
|
||||
runner.quit().await.unwrap();
|
||||
tokio::task::yield_now().await;
|
||||
|
Loading…
x
Reference in New Issue
Block a user