@@ -15,7 +15,7 @@ use crate::common::placeholders::{
1515 fill_placeholders_after_submit, fill_placeholders_log, normalize_path,
1616} ;
1717use crate :: server:: Senders ;
18- use crate :: server:: job:: { Job , SubmittedJobDescription } ;
18+ use crate :: server:: job:: { Job , JobTaskState , SubmittedJobDescription } ;
1919use crate :: server:: state:: { State , StateRef } ;
2020use crate :: transfer:: messages:: {
2121 JobDescription , JobSubmitDescription , JobTaskDescription , OpenJobResponse , SingleIdSelector ,
@@ -390,13 +390,26 @@ pub(crate) fn handle_task_explain(
390390 SingleIdSelector :: Specific ( job_id) => JobId :: new ( job_id) ,
391391 SingleIdSelector :: Last => state. last_job_id ( ) ,
392392 } ;
393- let task_id = TaskId :: new ( job_id, request. task_id ) ;
394- match senders. server_control . task_explain ( task_id) {
395- Ok ( explanation) => ToClientMessage :: TaskExplain ( TaskExplainResponse {
396- task_id,
397- explanation,
398- } ) ,
399- Err ( e) => ToClientMessage :: Error ( e. to_string ( ) ) ,
393+ let Some ( job) = state. get_job ( job_id) else {
394+ return ToClientMessage :: Error ( "Job not found" . to_string ( ) ) ;
395+ } ;
396+ let Some ( task) = job. tasks . get ( & request. task_id ) else {
397+ return ToClientMessage :: Error ( "Task not found" . to_string ( ) ) ;
398+ } ;
399+ match task. state {
400+ JobTaskState :: Waiting | JobTaskState :: Running { .. } => {
401+ let task_id = TaskId :: new ( job_id, request. task_id ) ;
402+ match senders. server_control . task_explain ( task_id) {
403+ Ok ( explanation) => ToClientMessage :: TaskExplain ( TaskExplainResponse {
404+ task_id,
405+ explanation,
406+ } ) ,
407+ Err ( e) => ToClientMessage :: Error ( e. to_string ( ) ) ,
408+ }
409+ }
410+ _ => ToClientMessage :: Error (
411+ "Explain command works only for tasks in WAITING or RUNNING state" . to_string ( ) ,
412+ ) ,
400413 }
401414}
402415
0 commit comments