From 522b57ade482b4f8829a2aa9f86c8d9bf9adf555 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Mon, 25 Jul 2022 18:37:39 +0200 Subject: [PATCH] fix(Jobs): change request state to prepare_to_finish in case of an error --- winixd/core/job.cpp | 20 ++++++++++++++------ winixd/core/request.h | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/winixd/core/job.cpp b/winixd/core/job.cpp index 03849b3..478de2d 100644 --- a/winixd/core/job.cpp +++ b/winixd/core/job.cpp @@ -335,20 +335,28 @@ void Job::DoRequestContinuationJob(JobTask & job_task, size_t priority) cur->request->mount = cur->mount; cur->request->run_state = Request::RunState::job_continuation_run; functions->ContinueMakeFunction(); + + if( cur->request->run_state == Request::RunState::assigned_to_job ) + { + log << log3 << "Job: this request (" << cur->request << ") has been moved to the job queue again" << logend; + Add(cur->request->job_id, cur->request, cur->request->job, priority); + } + } + else + { + main_log << log4 << "Job: directories have not been correctly prepared, finishing the request" << logend; + cur->request->http_status = Header::status_500_internal_server_error; + cur->request->run_state = Request::RunState::prepare_to_finish; } } else { main_log << log2 << "Job: request continuation task doesn't have a funtion set, return 500 internal error" << logend; cur->request->http_status = Header::status_500_internal_server_error; + cur->request->run_state = Request::RunState::prepare_to_finish; } - if( cur->request->run_state == Request::RunState::assigned_to_job ) - { - log << log3 << "Job: this request (" << cur->request << ") has been moved to the job queue again" << logend; - Add(cur->request->job_id, cur->request, cur->request->job, priority); - } - else + if( cur->request->run_state != Request::RunState::assigned_to_job ) { cur->request->FinishRequest(); // jak cur->request->function bedzie null to nie zadzialaja funkcje templajtowe load_avg->StopRequest(cur->request); diff --git a/winixd/core/request.h b/winixd/core/request.h index 469cf62..0b09d48 100644 --- a/winixd/core/request.h +++ b/winixd/core/request.h @@ -98,7 +98,7 @@ public: // assigned_to_job - the request is preserved and a new job will be called // job_run - run in the job thread (objects are locked) // finished - the request is finished and the object can be removed - enum RunState { not_assigned = 0, normal_run, assigned_to_job, job_run, job_continuation_run, finished}; + enum RunState { not_assigned = 0, normal_run, assigned_to_job, job_run, job_continuation_run, prepare_to_finish, finished}; RunState run_state;