From dc19f3908644d2d49f0ca97ae60d1d6f825d5dc9 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 30 Oct 2021 13:22:50 +0200 Subject: driver: skip submission of empty tasks --- crates/common/src/types.rs | 2 +- crates/driver/src/driver.rs | 22 +++++++++++++++------- crates/driver/src/task.rs | 6 ++++++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/crates/common/src/types.rs b/crates/common/src/types.rs index 14d8c16..120630c 100644 --- a/crates/common/src/types.rs +++ b/crates/common/src/types.rs @@ -43,7 +43,7 @@ pub struct Task { pub outputs: HashMap, } -#[derive(Clone, Debug, Deserialize, Serialize)] +#[derive(Clone, Debug, Deserialize, Serialize, Default)] pub struct TaskOutput { pub input_hash: Option, pub layer: Option, diff --git a/crates/driver/src/driver.rs b/crates/driver/src/driver.rs index 375c567..bafba1b 100644 --- a/crates/driver/src/driver.rs +++ b/crates/driver/src/driver.rs @@ -266,8 +266,12 @@ impl<'ctx> Driver<'ctx> { } } - fn spawn_task(&self, task_ref: &TaskRef<'ctx>, runner: &Runner) -> Result { + fn spawn_task(&self, task_ref: &TaskRef<'ctx>, runner: &Runner) -> Result> { let task_def = &self.state.ctx[task_ref.id]; + if task_def.action.is_empty() { + return Ok(None); + } + let task_deps = self.state.task_deps(task_ref)?; let task_output = task_def .output @@ -302,15 +306,19 @@ impl<'ctx> Driver<'ctx> { outputs: task_output, }; - Ok(runner.spawn(&task)) + Ok(Some(runner.spawn(&task))) } fn run_task(&mut self, task_ref: TaskRef<'ctx>, runner: &Runner) -> Result<()> { - let socket = self.spawn_task(&task_ref, runner)?; - assert!(self - .tasks_running - .insert(socket.as_raw_fd(), (socket, task_ref)) - .is_none()); + if let Some(socket) = self.spawn_task(&task_ref, runner)? { + assert!(self + .tasks_running + .insert(socket.as_raw_fd(), (socket, task_ref)) + .is_none()); + } else { + println!("Skipping empty task {:#}", task_ref); + self.update_runnable(task_ref, TaskOutput::default()); + } Ok(()) } diff --git a/crates/driver/src/task.rs b/crates/driver/src/task.rs index fe9572c..6b9083b 100644 --- a/crates/driver/src/task.rs +++ b/crates/driver/src/task.rs @@ -63,6 +63,12 @@ pub struct Action { pub run: String, } +impl Action { + pub fn is_empty(&self) -> bool { + self.run.is_empty() + } +} + #[derive(Clone, Debug, Deserialize)] pub struct TaskDef { #[serde(skip)] -- cgit v1.2.3