@@ -965,7 +965,7 @@ def process_queued_task_messages(self) -> None:
965
965
"""Process incoming task messages for each task proxy.
966
966
967
967
"""
968
- messages : 'Dict [str, List[Tuple[Optional[int], TaskMsg]]]' = {}
968
+ messages : dict [str , list [ TaskMsg ]] = {}
969
969
970
970
# Retrieve queued messages
971
971
while self .message_queue .qsize ():
@@ -974,28 +974,23 @@ def process_queued_task_messages(self) -> None:
974
974
except Empty :
975
975
break
976
976
self .message_queue .task_done ()
977
- tokens = Tokens (task_msg .job_id , relative = True )
978
977
# task ID (job stripped)
979
- task_id = tokens .duplicate (job = None ).relative_id
980
- messages .setdefault (task_id , [])
981
- # job may be None (e.g. simulation mode)
982
- job = int (tokens ['job' ]) if tokens ['job' ] else None
983
- messages [task_id ].append (
984
- (job , task_msg )
985
- )
978
+ task_id = task_msg .job_id .duplicate (job = None ).relative_id
979
+ messages .setdefault (task_id , []).append (task_msg )
986
980
981
+ unprocessed_messages : List [TaskMsg ] = []
987
982
# Poll tasks for which messages caused a backward state change.
988
- to_poll_tasks = []
989
- for itask in self .pool .get_tasks ():
990
- message_items = messages .get (itask .identity )
991
- if message_items is None :
983
+ to_poll_tasks : List [TaskProxy ] = []
984
+ for task_id , message_items in messages .items ():
985
+ itask = self .pool ._get_task_by_id (task_id )
986
+ if itask is None :
987
+ unprocessed_messages .extend (message_items )
992
988
continue
993
989
should_poll = False
994
- del messages [itask .identity ]
995
- for submit_num , tm in message_items :
990
+ for tm in message_items :
996
991
if self .task_events_mgr .process_message (
997
992
itask , tm .severity , tm .message , tm .event_time ,
998
- self .task_events_mgr .FLAG_RECEIVED , submit_num
993
+ self .task_events_mgr .FLAG_RECEIVED , tm . job_id . submit_num
999
994
):
1000
995
should_poll = True
1001
996
if should_poll :
@@ -1006,11 +1001,18 @@ def process_queued_task_messages(self) -> None:
1006
1001
# Remaining unprocessed messages have no corresponding task proxy.
1007
1002
# For example, if I manually set a running task to succeeded, the
1008
1003
# proxy can be removed, but the orphaned job still sends messages.
1009
- for tms in messages .values ():
1010
- warn = "Undeliverable task messages received and ignored:"
1011
- for _ , msg in tms :
1012
- warn += f'\n { msg .job_id } : { msg .severity } - "{ msg .message } "'
1013
- LOG .warning (warn )
1004
+ warn = ""
1005
+ for tm in unprocessed_messages :
1006
+ job_tokens = self .tokens .duplicate (tm .job_id )
1007
+ tdef = self .config .get_taskdef (job_tokens ['task' ])
1008
+ if not self .task_events_mgr .process_job_message (
1009
+ job_tokens , tdef , tm .message , tm .event_time
1010
+ ):
1011
+ warn += f'\n { tm .job_id } : { tm .severity } - "{ tm .message } "'
1012
+ if warn :
1013
+ LOG .warning (
1014
+ f"Undeliverable task messages received and ignored:{ warn } "
1015
+ )
1014
1016
1015
1017
async def process_command_queue (self ) -> None :
1016
1018
"""Process queued commands."""
0 commit comments