@@ -2950,6 +2950,10 @@ def test_unicode(ctx):
29502950
29512951@TestModule .register ('workers' )
29522952def test_workers (ctx ):
2953+ # Spin up a run in case a worker isn't already running, so it can be started by the worker manager.
2954+ uuid = _run_command ([cl , 'run' , 'echo' ])
2955+ wait (uuid )
2956+
29532957 result = _run_command ([cl , 'workers' ])
29542958 lines = result .split ("\n " )
29552959
@@ -2983,6 +2987,39 @@ def test_workers(ctx):
29832987 worker_info = lines [2 ].split ()
29842988 assert len (worker_info ) >= 10
29852989
2990+ # Make sure that when we run a worker that uses resources, the worker's available resources are decremented accordingly.
2991+ cpus_original , gpus_original , free_memory_original , free_disk_original = worker_info [1 :5 ]
2992+ cpus_available , cpus_total = (int (i ) for i in cpus_original .split ("/" ))
2993+ gpus_available , gpus_total = (int (i ) for i in gpus_original .split ("/" ))
2994+ uuid = _run_command (
2995+ [
2996+ cl ,
2997+ 'run' ,
2998+ 'sleep 100' ,
2999+ '--request-cpus' ,
3000+ str (cpus_available ),
3001+ '--request-gpus' ,
3002+ str (cpus_available ),
3003+ ],
3004+ request_memory = "100m" ,
3005+ request_disk = "100m" ,
3006+ )
3007+ wait_until_state (uuid , State .RUNNING )
3008+ result = _run_command ([cl , 'workers' ])
3009+ lines = result .split ("\n " )
3010+ worker_info = lines [2 ].split ()
3011+ cpus , gpus , free_memory , free_disk = worker_info [1 :5 ]
3012+ check_equals (f'0/{ cpus_total } ' , cpus )
3013+ check_equals (f'0/{ gpus_total } ' , gpus )
3014+
3015+ wait (uuid )
3016+ result = _run_command ([cl , 'workers' ])
3017+ lines = result .split ("\n " )
3018+ worker_info = lines [2 ].split ()
3019+ cpus , gpus , free_memory , free_disk = worker_info [1 :5 ]
3020+ check_equals (cpus_original , cpus )
3021+ check_equals (gpus_original , gpus )
3022+
29863023
29873024@TestModule .register ('sharing_workers' )
29883025def test_sharing_workers (ctx ):
0 commit comments