@@ -96,6 +96,7 @@ async def create_run_with_job(
9696 job_provisioning_data : Optional [JobProvisioningData ] = None ,
9797 termination_reason : Optional [JobTerminationReason ] = None ,
9898 exit_status : Optional [int ] = None ,
99+ termination_reason_message : Optional [str ] = None ,
99100 submitted_at : Optional [datetime ] = None ,
100101) -> Run :
101102 if submitted_at is None :
@@ -178,6 +179,9 @@ async def create_run_with_job(
178179
179180 if exit_status is not None :
180181 job_model .exit_status = exit_status
182+ if termination_reason_message is not None :
183+ job_model .termination_reason_message = termination_reason_message
184+ if exit_status is not None or termination_reason_message is not None :
181185 await session .commit ()
182186
183187 await session .refresh (run_model_db )
@@ -226,56 +230,77 @@ async def test_simple_run(self, session: AsyncSession):
226230 assert status_style == "bold sea_green3"
227231
228232 @pytest .mark .parametrize (
229- "job_status,termination_reason,exit_status,expected_status,expected_style" ,
233+ "job_status,termination_reason,exit_status,termination_reason_message, expected_status,expected_style" ,
230234 [
231- (JobStatus .DONE , None , None , "exited (0)" , "grey" ),
235+ (JobStatus .DONE , None , None , None , "exited (0)" , "grey" ),
232236 (
233237 JobStatus .FAILED ,
234238 JobTerminationReason .CONTAINER_EXITED_WITH_ERROR ,
235239 1 ,
240+ None ,
236241 "exited (1)" ,
237242 "indian_red1" ,
238243 ),
239244 (
240245 JobStatus .FAILED ,
241246 JobTerminationReason .CONTAINER_EXITED_WITH_ERROR ,
242247 42 ,
248+ None ,
243249 "exited (42)" ,
244250 "indian_red1" ,
245251 ),
246252 (
247253 JobStatus .FAILED ,
248254 JobTerminationReason .FAILED_TO_START_DUE_TO_NO_CAPACITY ,
249255 None ,
256+ None ,
250257 "no offers" ,
251258 "gold1" ,
252259 ),
260+ (
261+ JobStatus .FAILED ,
262+ JobTerminationReason .FAILED_TO_START_DUE_TO_NO_CAPACITY ,
263+ None ,
264+ "No fleet found. Create it before submitting a run: https://dstack.ai/docs/concepts/fleets" ,
265+ "no fleets" ,
266+ "indian_red1" ,
267+ ),
253268 (
254269 JobStatus .FAILED ,
255270 JobTerminationReason .INTERRUPTED_BY_NO_CAPACITY ,
256271 None ,
272+ None ,
257273 "interrupted" ,
258274 "gold1" ,
259275 ),
260276 (
261277 JobStatus .FAILED ,
262278 JobTerminationReason .INSTANCE_UNREACHABLE ,
263279 None ,
280+ None ,
264281 "error" ,
265282 "indian_red1" ,
266283 ),
267284 (
268285 JobStatus .TERMINATED ,
269286 JobTerminationReason .TERMINATED_BY_USER ,
270287 None ,
288+ None ,
271289 "stopped" ,
272290 "grey" ,
273291 ),
274- (JobStatus .TERMINATED , JobTerminationReason .ABORTED_BY_USER , None , "aborted" , "grey" ),
275- (JobStatus .RUNNING , None , None , "running" , "bold sea_green3" ),
276- (JobStatus .PROVISIONING , None , None , "provisioning" , "bold deep_sky_blue1" ),
277- (JobStatus .PULLING , None , None , "pulling" , "bold sea_green3" ),
278- (JobStatus .TERMINATING , None , None , "terminating" , "bold deep_sky_blue1" ),
292+ (
293+ JobStatus .TERMINATED ,
294+ JobTerminationReason .ABORTED_BY_USER ,
295+ None ,
296+ None ,
297+ "aborted" ,
298+ "grey" ,
299+ ),
300+ (JobStatus .RUNNING , None , None , None , "running" , "bold sea_green3" ),
301+ (JobStatus .PROVISIONING , None , None , None , "provisioning" , "bold deep_sky_blue1" ),
302+ (JobStatus .PULLING , None , None , None , "pulling" , "bold sea_green3" ),
303+ (JobStatus .TERMINATING , None , None , None , "terminating" , "bold deep_sky_blue1" ),
279304 ],
280305 )
281306 async def test_status_messages (
@@ -284,6 +309,7 @@ async def test_status_messages(
284309 job_status : JobStatus ,
285310 termination_reason : Optional [JobTerminationReason ],
286311 exit_status : Optional [int ],
312+ termination_reason_message : Optional [str ],
287313 expected_status : str ,
288314 expected_style : str ,
289315 ):
@@ -292,6 +318,7 @@ async def test_status_messages(
292318 job_status = job_status ,
293319 termination_reason = termination_reason ,
294320 exit_status = exit_status ,
321+ termination_reason_message = termination_reason_message ,
295322 )
296323
297324 table = get_runs_table ([api_run ], verbose = False )
0 commit comments