diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-01-04 14:59:05 +0100 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2021-01-04 14:59:05 +0100 |
commit | 0dc4a0c63503588e0531222c439d5cf3cfa74698 (patch) | |
tree | a8dea40fa935570bcbe292bb9cd8bee7c4d45611 /src/endpoint | |
parent | da35a9cf03180a299319e77ca98c5412f20b2f32 (diff) |
Make use of JobHandle::create_job_run_error() to add verbose error message
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
Diffstat (limited to 'src/endpoint')
-rw-r--r-- | src/endpoint/scheduler.rs | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/endpoint/scheduler.rs b/src/endpoint/scheduler.rs index 7beb0f5..f35b4ef 100644 --- a/src/endpoint/scheduler.rs +++ b/src/endpoint/scheduler.rs @@ -138,10 +138,12 @@ impl JobHandle { let envs = self.create_env_in_db()?; let job_id = self.job.uuid().clone(); trace!("Running on Job {} on Endpoint {}", job_id, ep.name()); - let running_container = ep.prepare_container(self.job, self.staging_store.clone()) - .await? + let prepared_container = ep.prepare_container(self.job, self.staging_store.clone()).await?; + let container_id = prepared_container.create_info().id.clone(); + let running_container = prepared_container .start() - .await? + .await + .with_context(|| Self::create_job_run_error(&job_id, &package.name, &package.version, ep.uri(), &container_id))? .execute_script(log_sender); let logres = LogReceiver { @@ -155,20 +157,24 @@ impl JobHandle { let (run_container, logres) = tokio::join!(running_container, logres); let log = logres.with_context(|| anyhow!("Collecting logs for job on '{}'", ep.name()))?; - let run_container = run_container.with_context(|| anyhow!("Running container {} failed"))?; + let run_container = run_container.with_context(|| anyhow!("Running container {} failed")) + .with_context(|| Self::create_job_run_error(&job_id, &package.name, &package.version, ep.uri(), &container_id))?; + let job = dbmodels::Job::create(&self.db, &job_id, &self.submit, &endpoint, &package, &image, &run_container.container_hash(), run_container.script(), &log)?; trace!("DB: Job entry for job {} created: {}", job.uuid, job.id); for env in envs { let _ = dbmodels::JobEnv::create(&self.db, &job, &env)?; } - let res : crate::endpoint::FinalizedContainer = run_container .finalize(self.staging_store.clone()) - .await?; + .await + .with_context(|| Self::create_job_run_error(&job.uuid, &package.name, &package.version, ep.uri(), &container_id))?; + trace!("Found result for job {}: {:?}", job_id, res); let (paths, res) = res.unpack(); - let _ = res.with_context(|| anyhow!("Error during running job on '{}'", ep.name()))?; + let _ = res.with_context(|| anyhow!("Error during running job on '{}'", ep.name())) + .with_context(|| Self::create_job_run_error(&job.uuid, &package.name, &package.version, ep.uri(), &container_id))?; // Have to do it the ugly way here because of borrowing semantics let mut r = vec![]; |