@@ -439,31 +439,34 @@ async def _get_service_state(
439
439
tasks = await client .tasks .list (filters = {"service" : service_name })
440
440
# only keep the ones with the right service ID (we're being a bit picky maybe)
441
441
tasks = [x for x in tasks if x ["ServiceID" ] == service ["ID" ]]
442
+
442
443
# we are only interested in the last task which has index 0
443
444
if tasks :
444
445
last_task = tasks [0 ]
445
446
task_state = last_task ["Status" ]["State" ]
446
447
log .debug ("%s %s" , service ["ID" ], task_state )
447
- simcore_state = ServiceState .STARTING
448
- simcore_message = (
448
+
449
+ last_task_state = ServiceState .STARTING # default
450
+ last_task_error_msg = (
449
451
last_task ["Status" ]["Err" ] if "Err" in last_task ["Status" ] else ""
450
452
)
451
453
if task_state in ("failed" , "rejected" ):
452
454
log .error (
453
455
"service %s failed with %s" , service_name , last_task ["Status" ]
454
456
)
455
- simcore_state = ServiceState .FAILED
457
+ last_task_state = ServiceState .FAILED
456
458
elif task_state in ("pending" ):
457
- simcore_state = ServiceState .PENDING
459
+ last_task_state = ServiceState .PENDING
458
460
elif task_state in ("assigned" , "accepted" , "preparing" ):
459
- simcore_state = ServiceState .PULLING
461
+ last_task_state = ServiceState .PULLING
460
462
elif task_state in ("ready" , "starting" ):
461
- simcore_state = ServiceState .STARTING
463
+ last_task_state = ServiceState .STARTING
462
464
elif task_state in ("running" ):
463
- simcore_state = ServiceState .RUNNING
465
+ last_task_state = ServiceState .RUNNING
464
466
elif task_state in ("complete" , "shutdown" ):
465
- simcore_state = ServiceState .COMPLETE
466
- return (simcore_state , simcore_message )
467
+ last_task_state = ServiceState .COMPLETE
468
+ return (last_task_state , last_task_error_msg )
469
+
467
470
# allows dealing with other events instead of wasting time here
468
471
await asyncio .sleep (1 ) # 1s
469
472
log .debug ("Waited for service %s to start" , service_name )
@@ -600,6 +603,7 @@ async def _start_docker_service(
600
603
service = await client .services .inspect (service ["ID" ])
601
604
service_name = service ["Spec" ]["Name" ]
602
605
service_state , service_msg = await _get_service_state (client , service )
606
+
603
607
# wait for service to start
604
608
# await _wait_until_service_running_or_failed(client, service, node_uuid)
605
609
log .debug ("Service %s successfully started" , service_name )
0 commit comments