118118
119119def _send_to_compute_worker (submission , is_scoring , target_group = None ):
120120 logger .info (
121- "Site Worker ==> STARTING submission_id=%s is_scoring=%s target_group=%s" ,
121+ "Site Worker ==> STARTING submission_id=%s is_scoring=%s "
122+ "target_group_param=%s submission.queue=%s parent=%s" ,
122123 submission .pk ,
123124 is_scoring ,
124125 getattr (target_group , "pk" , None ),
126+ getattr (getattr (submission , "queue" , None ), "name" , None ),
127+ getattr (submission .parent , "pk" , None ) if submission .parent else None ,
125128 )
126129
127130 run_args = {
@@ -281,6 +284,12 @@ def _send_to_compute_worker(submission, is_scoring, target_group=None):
281284 if getattr (target_group , "queue" , None ):
282285 run_args ["queue" ] = target_group .queue .name
283286 target_vhost = getattr (target_group .queue , "vhost" , None )
287+ try :
288+ submission .queue = target_group .queue
289+ submission .save (update_fields = ["queue" ])
290+ logger .debug ("Persisted submission.queue=%s for submission %s" , getattr (target_group .queue , "name" , None ), submission .pk )
291+ except Exception :
292+ logger .exception ("Failed to persist submission.queue for submission %s" , submission .pk )
284293 logger .info (
285294 "Submission %s forced to group %s queue=%s vhost=%s" ,
286295 submission .pk ,
@@ -289,44 +298,92 @@ def _send_to_compute_worker(submission, is_scoring, target_group=None):
289298 target_vhost ,
290299 )
291300 else :
292- competition = submission .phase .competition
293- user_group_ids = list (
294- submission .owner .groups .values_list ("id" , flat = True )
295- )
296- logger .debug (
297- "User %s group ids for competition %s: %s" ,
298- submission .owner .pk ,
299- competition .pk ,
300- user_group_ids ,
301- )
302-
303- comp_user_groups_qs = (
304- competition .participant_groups
305- .filter (id__in = user_group_ids )
306- .select_related ("queue" )
307- )
308-
309- group = (
310- comp_user_groups_qs .filter (queue__isnull = False ).first ()
311- or comp_user_groups_qs .first ()
312- )
313-
314- if group and getattr (group , "queue" , None ):
315- run_args ["queue" ] = group .queue .name
316- target_vhost = getattr (group .queue , "vhost" , None )
317- logger .info (
318- "Submission %s resolved group=%s queue=%s vhost=%s" ,
319- submission .pk ,
320- group .pk ,
321- group .queue .name ,
322- target_vhost ,
323- )
301+ persisted_queue = None
302+ try :
303+ persisted_queue = getattr (submission , "queue" , None )
304+ except Exception :
305+ persisted_queue = None
306+
307+ if persisted_queue :
308+ try :
309+ run_args ["queue" ] = persisted_queue .name
310+ target_vhost = getattr (persisted_queue , "vhost" , None )
311+ logger .info (
312+ "Submission %s resolved queue=%s vhost=%s (by persisted submission.queue)" ,
313+ submission .pk ,
314+ run_args .get ("queue" ),
315+ target_vhost ,
316+ )
317+ except Exception :
318+ logger .exception ("Error reading persisted submission.queue for submission %s" , submission .pk )
324319 else :
320+ competition = submission .phase .competition
321+ user_group_ids = list (submission .owner .groups .values_list ("id" , flat = True ))
325322 logger .debug (
326- "Submission %s: no matching group with queue for competition %s" ,
327- submission .pk ,
323+ "User %s group ids for competition %s: %s" ,
324+ submission .owner . pk ,
328325 competition .pk ,
326+ user_group_ids ,
329327 )
328+
329+ comp_user_groups_qs = (
330+ competition .participant_groups
331+ .filter (id__in = user_group_ids )
332+ .select_related ("queue" )
333+ )
334+
335+ group = (
336+ comp_user_groups_qs .filter (queue__isnull = False ).first ()
337+ or comp_user_groups_qs .first ()
338+ )
339+
340+ if group and getattr (group , "queue" , None ):
341+ run_args ["queue" ] = group .queue .name
342+ target_vhost = getattr (group .queue , "vhost" , None )
343+ logger .info (
344+ "Submission %s resolved group=%s queue=%s vhost=%s (by owner membership)" ,
345+ submission .pk ,
346+ group .pk ,
347+ group .queue .name ,
348+ target_vhost ,
349+ )
350+ else :
351+ logger .debug (
352+ "Submission %s: no matching group with queue for competition %s via owner membership" ,
353+ submission .pk ,
354+ competition .pk ,
355+ )
356+
357+ if submission .parent :
358+ try :
359+ sibling = (
360+ Submission .objects
361+ .filter (parent = submission .parent )
362+ .exclude (pk = submission .pk )
363+ .filter (queue__isnull = False )
364+ .select_related ("queue" )
365+ .first ()
366+ )
367+ if sibling and getattr (sibling , "queue" , None ):
368+ run_args ["queue" ] = sibling .queue .name
369+ target_vhost = getattr (sibling .queue , "vhost" , None )
370+ # optionally persist to current child for future
371+ try :
372+ submission .queue = sibling .queue
373+ submission .save (update_fields = ["queue" ])
374+ logger .debug ("Persisted submission.queue from sibling=%s to submission=%s" , sibling .pk , submission .pk )
375+ except Exception :
376+ logger .exception ("Failed to persist submission.queue (from sibling) for submission %s" , submission .pk )
377+
378+ logger .info (
379+ "Submission %s resolved queue=%s vhost=%s (by sibling child %s)" ,
380+ submission .pk ,
381+ run_args .get ("queue" ),
382+ target_vhost ,
383+ sibling .pk ,
384+ )
385+ except Exception :
386+ logger .exception ("Error while trying to resolve queue from sibling for submission %s" , submission .pk )
330387 except Exception :
331388 logger .exception (
332389 "Error while resolving routing for submission %s" , submission .pk
0 commit comments