summaryrefslogtreecommitdiffstats
path: root/src/orchestrator/orchestrator.rs
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-02-11 14:49:43 +0100
committerMatthias Beyer <mail@beyermatthias.de>2021-02-11 17:20:59 +0100
commit01bc599d7e44c7fd606296312a1fdb9584dbaa60 (patch)
tree9891572a2b94ab032bd33caf8381d709d230678b /src/orchestrator/orchestrator.rs
parent269afd5d42294c2f80419d1def06b6730e312a14 (diff)
Fix: Check whether package depends on itself, abort if it does
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net> Tested-by: Matthias Beyer <matthias.beyer@atos.net>
Diffstat (limited to 'src/orchestrator/orchestrator.rs')
-rw-r--r--src/orchestrator/orchestrator.rs17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs
index 710b53f..7ed81fd 100644
--- a/src/orchestrator/orchestrator.rs
+++ b/src/orchestrator/orchestrator.rs
@@ -19,6 +19,7 @@ use anyhow::Result;
use anyhow::anyhow;
use diesel::PgConnection;
use indicatif::ProgressBar;
+use itertools::Itertools;
use log::debug;
use log::trace;
use tokio::sync::RwLock;
@@ -276,9 +277,19 @@ impl<'a> Orchestrator<'a> {
*job.3.borrow_mut() = {
let depending_on_job = jobs.iter()
.filter(|j| j.1.jobdef.dependencies.contains(job.1.jobdef.job.uuid()))
- .map(|j| j.2.clone())
- .collect::<Vec<Sender<JobResult>>>();
-
+ .map(|j| {
+ if j.1.jobdef.job.uuid() == job.1.jobdef.job.uuid() {
+ Err(anyhow!("Package does depend on itself: {} {}",
+ job.1.jobdef.job.package().name(),
+ job.1.jobdef.job.package().version()))
+ } else {
+ Ok(j)
+ }
+ })
+ .map_ok(|j| j.2.clone())
+ .collect::<Result<Vec<Sender<JobResult>>>>()?;
+
+ trace!("{:?} is depending on {}", depending_on_job, job.1.jobdef.job.uuid());
if depending_on_job.is_empty() {
None
} else {