@@ -215,17 +215,22 @@ <h1>Source code for biomero.views</h1><div class="highlight"><pre>
215215
216216< div class ="viewcode-block " id ="JobAccounting.update_view_table "> < a class ="viewcode-back " href ="../../biomero.html#biomero.views.JobAccounting.update_view_table "> [docs]</ a > < span class ="nd "> @retry_on_database_conflict</ span > < span class ="p "> (</ span > < span class ="n "> max_retries</ span > < span class ="o "> =</ span > < span class ="mi "> 3</ span > < span class ="p "> )</ span >
217217 < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> update_view_table</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> job_id</ span > < span class ="p "> ,</ span > < span class ="n "> user</ span > < span class ="p "> ,</ span > < span class ="n "> group</ span > < span class ="p "> ,</ span > < span class ="n "> task_id</ span > < span class ="p "> ):</ span >
218- < span class ="w "> </ span > < span class ="sd "> """Update the view table with new job information."""</ span >
218+ < span class ="w "> </ span > < span class ="sd "> """Update the view table with new job information.</ span >
219+
220+ < span class ="sd "> Uses merge (upsert) so that if SLURM recycles a job ID the new</ span >
221+ < span class ="sd "> task_id/user/group overwrites the stale row instead of silently</ span >
222+ < span class ="sd "> failing and leaving the old mapping in place.</ span >
223+ < span class ="sd "> """</ span >
219224 < span class ="k "> with</ span > < span class ="n "> EngineManager</ span > < span class ="o "> .</ span > < span class ="n "> get_session</ span > < span class ="p "> ()</ span > < span class ="k "> as</ span > < span class ="n "> session</ span > < span class ="p "> :</ span >
220225 < span class ="k "> try</ span > < span class ="p "> :</ span >
221226 < span class ="n "> new_job</ span > < span class ="o "> =</ span > < span class ="n "> JobView</ span > < span class ="p "> (</ span > < span class ="n "> slurm_job_id</ span > < span class ="o "> =</ span > < span class ="n "> job_id</ span > < span class ="p "> ,</ span > < span class ="n "> user</ span > < span class ="o "> =</ span > < span class ="n "> user</ span > < span class ="p "> ,</ span > < span class ="n "> group</ span > < span class ="o "> =</ span > < span class ="n "> group</ span > < span class ="p "> ,</ span > < span class ="n "> task_id</ span > < span class ="o "> =</ span > < span class ="n "> task_id</ span > < span class ="p "> )</ span >
222- < span class ="n "> session</ span > < span class ="o "> .</ span > < span class ="n "> add </ span > < span class ="p "> (</ span > < span class ="n "> new_job</ span > < span class ="p "> )</ span >
227+ < span class ="n "> session</ span > < span class ="o "> .</ span > < span class ="n "> merge </ span > < span class ="p "> (</ span > < span class ="n "> new_job</ span > < span class ="p "> )</ span >
223228 < span class ="n "> session</ span > < span class ="o "> .</ span > < span class ="n "> commit</ span > < span class ="p "> ()</ span >
224- < span class ="n "> logger</ span > < span class ="o "> .</ span > < span class ="n "> debug</ span > < span class ="p "> (</ span > < span class ="sa "> f</ span > < span class ="s2 "> "Inserted job into view table: job_id=</ span > < span class ="si "> {</ span > < span class ="n "> job_id</ span > < span class ="si "> }</ span > < span class ="s2 "> , user=</ span > < span class ="si "> {</ span > < span class ="n "> user</ span > < span class ="si "> }</ span > < span class ="s2 "> , group=</ span > < span class ="si "> {</ span > < span class ="n "> group</ span > < span class ="si "> }</ span > < span class ="s2 "> , task_id=</ span > < span class ="si "> {</ span > < span class ="n "> task_id</ span > < span class ="si "> }</ span > < span class ="s2 "> "</ span > < span class ="p "> )</ span >
229+ < span class ="n "> logger</ span > < span class ="o "> .</ span > < span class ="n "> debug</ span > < span class ="p "> (</ span > < span class ="sa "> f</ span > < span class ="s2 "> "Upserted job into view table: job_id=</ span > < span class ="si "> {</ span > < span class ="n "> job_id</ span > < span class ="si "> }</ span > < span class ="s2 "> , user=</ span > < span class ="si "> {</ span > < span class ="n "> user</ span > < span class ="si "> }</ span > < span class ="s2 "> , group=</ span > < span class ="si "> {</ span > < span class ="n "> group</ span > < span class ="si "> }</ span > < span class ="s2 "> , task_id=</ span > < span class ="si "> {</ span > < span class ="n "> task_id</ span > < span class ="si "> }</ span > < span class ="s2 "> "</ span > < span class ="p "> )</ span >
225230 < span class ="k "> except</ span > < span class ="n "> IntegrityError</ span > < span class ="k "> as</ span > < span class ="n "> e</ span > < span class ="p "> :</ span >
226231 < span class ="n "> session</ span > < span class ="o "> .</ span > < span class ="n "> rollback</ span > < span class ="p "> ()</ span >
227- < span class ="c1 " > # Handle the case where the job already exists in the table if necessary </ span >
228- < span class ="n " > logger </ span > < span class =" o " > . </ span > < span class =" n " > warning </ span > < span class =" p " > ( </ span > < span class =" sa " > f </ span > < span class =" s2 " > "Database conflict inserting job (will retry): job_id= </ span > < span class =" si " > { </ span > < span class =" n " > job_id </ span > < span class =" si " > } </ span > < span class =" s2 " > , user= </ span > < span class =" si " > { </ span > < span class =" n " > user </ span > < span class =" si " > } </ span > < span class =" s2 " > , group= </ span > < span class =" si " > { </ span > < span class =" n " > group </ span > < span class =" si " > } </ span > < span class =" s2 " > , error= </ span > < span class =" si " > { </ span > < span class =" n " > e </ span > < span class =" si " > } </ span > < span class =" s2 " > " </ span > < span class =" p " > ) </ span > </ div >
232+ < span class ="n " > logger </ span > < span class =" o " > . </ span > < span class =" n " > warning </ span > < span class =" p " > ( </ span > < span class =" sa " > f </ span > < span class =" s2 " > "Database conflict upserting job (will retry): job_id= </ span > < span class =" si " > { </ span > < span class =" n " > job_id </ span > < span class =" si " > } </ span > < span class =" s2 " > , user= </ span > < span class =" si " > { </ span > < span class =" n " > user </ span > < span class =" si " > } </ span > < span class =" s2 " > , group= </ span > < span class =" si " > { </ span > < span class =" n " > group </ span > < span class =" si " > } </ span > < span class =" s2 " > , error= </ span > < span class =" si " > { </ span > < span class =" n " > e </ span > < span class =" si " > } </ span > < span class =" s2 " > " </ span > < span class =" p " > ) </ span >
233+ < span class ="k " > raise </ span > </ div >
229234
230235< div class ="viewcode-block " id ="JobAccounting.get_jobs "> < a class ="viewcode-back " href ="../../biomero.html#biomero.views.JobAccounting.get_jobs "> [docs]</ a > < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> get_jobs</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> user</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span > < span class ="n "> group</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ):</ span >
231236< span class ="w "> </ span > < span class ="sd "> """Retrieve jobs for a specific user and/or group.</ span >
0 commit comments