Skip to content

Commit 8bc7bd6

Browse files
committed
BF: CS-1139: job deletion via JAPI/DRMAA fails if job ID exceeds INT_MAX
BF: CS-1140: termination of event client via JAPI fails if event client ID exceeds INT_MAX
1 parent 920eb60 commit 8bc7bd6

File tree

1 file changed

+28
-34
lines changed

1 file changed

+28
-34
lines changed

source/libs/japi/japi.cc

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1748,10 +1748,8 @@ int japi_control(const char *jobid_str, int drmaa_action, dstring *diag)
17481748
dstring job_task_specifier;
17491749

17501750
sge_dstring_init(&job_task_specifier, buffer, sizeof(buffer));
1751-
sge_dstring_sprintf(&job_task_specifier, sge_u32, jobid);
1752-
lAddElemStr(&ref_list, ST_name,
1753-
sge_dstring_get_string (&job_task_specifier),
1754-
ST_Type);
1751+
sge_dstring_sprintf(&job_task_specifier, sge_uu32, jobid);
1752+
lAddElemStr(&ref_list, ST_name, sge_dstring_get_string (&job_task_specifier), ST_Type);
17551753
} else {
17561754
const lListElem *range;
17571755
for_each_ep(range, lGetList(japi_job, JJ_not_yet_finished_ids)) {
@@ -1760,12 +1758,10 @@ int japi_control(const char *jobid_str, int drmaa_action, dstring *diag)
17601758
u_long32 start, end, step;
17611759

17621760
sge_dstring_init(&job_task_specifier, buffer, sizeof(buffer));
1763-
sge_dstring_sprintf(&job_task_specifier, sge_u32".", jobid);
1761+
sge_dstring_sprintf(&job_task_specifier, sge_uu32 ".", jobid);
17641762
range_get_all_ids(range, &start, &end, &step);
17651763
range_to_dstring(start, end, step, &job_task_specifier, false, false, false);
1766-
lAddElemStr(&ref_list, ST_name,
1767-
sge_dstring_get_string(&job_task_specifier),
1768-
ST_Type);
1764+
lAddElemStr(&ref_list, ST_name, sge_dstring_get_string(&job_task_specifier), ST_Type);
17691765
}
17701766
}
17711767
}
@@ -1938,7 +1934,7 @@ int japi_control(const char *jobid_str, int drmaa_action, dstring *diag)
19381934
while (japi_job != nullptr) {
19391935
jobid = lGetUlong(japi_job, JJ_jobid);
19401936
/* This overwrites the previous contents of the dstring. */
1941-
sge_dstring_sprintf(&job_task_specifier, sge_u32, jobid);
1937+
sge_dstring_sprintf(&job_task_specifier, sge_uu32, jobid);
19421938

19431939
id_entry = lAddElemStr(&id_list, ID_str, sge_dstring_get_string(&job_task_specifier), ID_Type);
19441940
if (JOB_TYPE_IS_ARRAY(lGetUlong(japi_job, JJ_type))) {
@@ -2011,7 +2007,7 @@ int japi_control(const char *jobid_str, int drmaa_action, dstring *diag)
20112007
DRETURN(DRMAA_ERRNO_INVALID_ARGUMENT);
20122008
}
20132009

2014-
sge_dstring_sprintf(&job_task_specifier, sge_u32, jobid);
2010+
sge_dstring_sprintf(&job_task_specifier, sge_uu32, jobid);
20152011
id_entry = lAddElemStr(&id_list, ID_str, sge_dstring_get_string(&job_task_specifier), ID_Type);
20162012
if (array) {
20172013
lList *tlp = nullptr;
@@ -2269,7 +2265,7 @@ int japi_synchronize(const char *job_ids[], signed long timeout, bool dispose, d
22692265
/* The largest number representable by 64 unsigned bits is 19
22702266
* characters long. */
22712267
char char_id[40];
2272-
snprintf (char_id, 40, sge_u32 "." sge_u32, id, task_id);
2268+
snprintf (char_id, 40, sge_uu32 "." sge_uu32, id, task_id);
22732269

22742270
DPRINTF ("Synchronize All: adding %s to id list\n", char_id);
22752271
lAddElemStr (&sync_list, ST_name, char_id, ST_Type);
@@ -2403,21 +2399,21 @@ static int japi_synchronize_jobids_retry(const char *job_ids[], bool dispose)
24032399
japi_job = lGetElemUlongRW(Master_japi_job_list, JJ_jobid, jobid);
24042400

24052401
if (japi_job == nullptr) {
2406-
DPRINTF("synchronized with " sge_u32"." sge_u32"\n", jobid, taskid);
2402+
DPRINTF("synchronized with " sge_uu32 "." sge_uu32"\n", jobid, taskid);
24072403
continue;
24082404
}
24092405

24102406
not_yet_finished = lGetList(japi_job, JJ_not_yet_finished_ids);
24112407
if (not_yet_finished && range_list_is_id_within(not_yet_finished, taskid)) {
2412-
DPRINTF("job " sge_u32"." sge_u32" is a still unfinished task\n", jobid, taskid);
2408+
DPRINTF("job " sge_uu32 "." sge_uu32" is a still unfinished task\n", jobid, taskid);
24132409
DRETURN(JAPI_WAIT_UNFINISHED);
24142410
}
24152411

2416-
DPRINTF("synchronized with " sge_u32"." sge_u32"\n", jobid, taskid);
2412+
DPRINTF("synchronized with " sge_uu32 "." sge_uu32 "\n", jobid, taskid);
24172413
if (dispose) {
24182414
/* remove corresponding entry in JJ_finished_tasks */
24192415
lDelSubUlong(japi_job, JJAT_task_id, taskid, JJ_finished_tasks);
2420-
DPRINTF("dispose job finish information for job " sge_u32" task " sge_u32"\n", jobid, taskid);
2416+
DPRINTF("dispose job finish information for job " sge_uu32 " task " sge_uu32 "\n", jobid, taskid);
24212417
if (!lGetList(japi_job, JJ_finished_tasks) && !not_yet_finished) {
24222418
/* remove JAPI job if no longer needed */
24232419
lRemoveElem(Master_japi_job_list, &japi_job);
@@ -3050,7 +3046,7 @@ japi_sge_state_to_drmaa_state(const lListElem *job, bool is_array_task, u_long32
30503046
lListElem *japi_job = nullptr;
30513047
const lListElem *japi_task = nullptr;
30523048

3053-
DPRINTF("Job " sge_u32 "." sge_u32 " is finished.\n", jobid, taskid);
3049+
DPRINTF("Job " sge_uu32 "." sge_uu32 " is finished.\n", jobid, taskid);
30543050

30553051
JAPI_LOCK_JOB_LIST();
30563052

@@ -3070,7 +3066,7 @@ japi_sge_state_to_drmaa_state(const lListElem *job, bool is_array_task, u_long32
30703066
*/
30713067
if (range_list_is_id_within(lGetList(japi_job, JJ_not_yet_finished_ids), taskid)) {
30723068
JAPI_UNLOCK_JOB_LIST();
3073-
DPRINTF("Job " sge_u32 "." sge_u32 " is actually in unknown state.\n", jobid, taskid);
3069+
DPRINTF("Job " sge_uu32 "." sge_uu32 " is actually in unknown state.\n", jobid, taskid);
30743070
*remote_ps = DRMAA_PS_UNDETERMINED;
30753071
DRETURN(DRMAA_ERRNO_SUCCESS);
30763072
}
@@ -3079,7 +3075,7 @@ japi_sge_state_to_drmaa_state(const lListElem *job, bool is_array_task, u_long32
30793075

30803076
if (japi_task != nullptr) {
30813077
wait_status = lGetUlong(japi_task, JJAT_stat);
3082-
DPRINTF("wait_status(" sge_u32"/" sge_u32") = " sge_u32"\n", jobid, taskid, wait_status);
3078+
DPRINTF("wait_status(" sge_uu32 "/" sge_uu32") = " sge_uu32 "\n", jobid, taskid, wait_status);
30833079

30843080
if (SGE_GET_NEVERRAN(wait_status)) {
30853081
*remote_ps = DRMAA_PS_FAILED;
@@ -3129,8 +3125,8 @@ japi_sge_state_to_drmaa_state(const lListElem *job, bool is_array_task, u_long32
31293125
u_long32 ja_task_state = lGetUlong(ja_task, JAT_state);
31303126
u_long32 ja_task_hold = lGetUlong(ja_task, JAT_hold);
31313127

3132-
DPRINTF("Job " sge_u32 "." sge_u32 " status=%x state=%x hold=%x\n", jobid,
3133-
taskid, ja_task_status, ja_task_state, ja_task_hold);
3128+
DPRINTF("Job " sge_uu32 "." sge_uu32 " status=" sge_x32 " state=" sge_x32 " hold=" sge_x32 "\n",
3129+
jobid, taskid, ja_task_status, ja_task_state, ja_task_hold);
31343130

31353131
/* ERROR */
31363132
if (ja_task_state & JERROR) {
@@ -4219,7 +4215,7 @@ static void *japi_implementation_thread(void * a_user_data_pointer)
42194215
object_delete_range_id(japi_job, nullptr, JJ_not_yet_finished_ids, taskid);
42204216

42214217
/* add entry to the finished tasks */
4222-
DPRINTF("adding finished task " sge_u32" for job " sge_u32" existing not any longer\n", taskid, jobid);
4218+
DPRINTF("adding finished task " sge_uu32 " for job " sge_uu32 " existing not any longer\n", taskid, jobid);
42234219
lAddSubUlong(japi_job, JJAT_task_id, taskid, JJ_finished_tasks, JJAT_Type);
42244220
finished_tasks++;
42254221

@@ -4302,7 +4298,7 @@ static void *japi_implementation_thread(void * a_user_data_pointer)
43024298
} /* if range_list_is_id_within() */
43034299
} /* if japi_job != nullptr */
43044300
else {
4305-
DPRINTF("ignoring event on unknown job " sge_u32"\n", intkey);
4301+
DPRINTF("ignoring event on unknown job " sge_uu32 "\n", intkey);
43064302
}
43074303

43084304
JAPI_UNLOCK_JOB_LIST();
@@ -4344,7 +4340,7 @@ static void *japi_implementation_thread(void * a_user_data_pointer)
43444340
}
43454341
} /* if japi_job != nullptr */
43464342
else {
4347-
DPRINTF("ignoring event on unknown job " sge_u32"\n", intkey);
4343+
DPRINTF("ignoring event on unknown job " sge_uu32 "\n", intkey);
43484344
}
43494345

43504346
JAPI_UNLOCK_JOB_LIST();
@@ -4529,18 +4525,18 @@ static int japi_sync_job_tasks(lListElem *japi_job, lListElem *sge_job)
45294525
for (taskid = min; taskid <= max; taskid += step) {
45304526
task = job_search_task(sge_job, nullptr, taskid);
45314527
if (task != nullptr) {
4532-
DPRINTF("task " sge_u32"." sge_u32" contained in enrolled task list\n", lGetUlong(japi_job, JJ_jobid), taskid);
4528+
DPRINTF("task " sge_uu32 "." sge_uu32" contained in enrolled task list\n", lGetUlong(japi_job, JJ_jobid), taskid);
45334529

45344530
if ((lGetUlong(task, JAT_status) & JFINISHED) != 0) {
4535-
DPRINTF("task " sge_u32"." sge_u32" is finished\n", lGetUlong(japi_job, JJ_jobid), taskid);
4531+
DPRINTF("task " sge_uu32 "." sge_uu32 " is finished\n", lGetUlong(japi_job, JJ_jobid), taskid);
45364532
}
45374533
/* This is a potentially problematic animal. DRMAA has a problem
45384534
* with jobs in error state as DRMAA has no error state. This case
45394535
* should never occur, but if it does, this should be the correct
45404536
* way to handle it. However, because the code in complex, I'm not
45414537
* 100% certain. */
45424538
else if ((lGetUlong(task, JAT_state) & JERROR) != 0) {
4543-
DPRINTF("task " sge_u32"." sge_u32" has failed\n", lGetUlong(japi_job, JJ_jobid), taskid);
4539+
DPRINTF("task " sge_uu32 "." sge_uu32 " has failed\n", lGetUlong(japi_job, JJ_jobid), taskid);
45444540
}
45454541
else {
45464542
continue;
@@ -4550,15 +4546,15 @@ static int japi_sync_job_tasks(lListElem *japi_job, lListElem *sge_job)
45504546
range_list_is_id_within(lGetList(sge_job, JB_ja_u_h_ids), taskid) ||
45514547
range_list_is_id_within(lGetList(sge_job, JB_ja_s_h_ids), taskid) ||
45524548
range_list_is_id_within(lGetList(sge_job, JB_ja_o_h_ids), taskid)) {
4553-
DPRINTF("task " sge_u32"." sge_u32" is still pending\n", lGetUlong(japi_job, JJ_jobid), taskid);
4549+
DPRINTF("task " sge_uu32 "." sge_uu32" is still pending\n", lGetUlong(japi_job, JJ_jobid), taskid);
45544550
continue;
45554551
}
45564552
else {
45574553
if (range_list_is_id_within(lGetList(sge_job, JB_ja_z_ids), taskid)) {
4558-
DPRINTF("task " sge_u32"." sge_u32" contained in zombie list taskid list\n", lGetUlong(japi_job, JJ_jobid), taskid);
4554+
DPRINTF("task " sge_uu32 "." sge_uu32 " contained in zombie list taskid list\n", lGetUlong(japi_job, JJ_jobid), taskid);
45594555
}
45604556

4561-
DPRINTF("task " sge_u32"." sge_u32" presumably has finished meanwhile\n", lGetUlong(japi_job, JJ_jobid), taskid);
4557+
DPRINTF("task " sge_uu32 "." sge_uu32" presumably has finished meanwhile\n", lGetUlong(japi_job, JJ_jobid), taskid);
45624558
}
45634559

45644560
/* remove task from not yet finished job id list */
@@ -4628,10 +4624,8 @@ static int japi_clean_up_jobs(int flag, dstring *diag)
46284624

46294625
DPRINTF("Stopping job %ld\n", jobid);
46304626

4631-
sge_dstring_sprintf(&job_task_specifier, sge_u32, jobid);
4632-
id_entry = lAddElemStr(&id_list, ID_str,
4633-
sge_dstring_get_string(&job_task_specifier),
4634-
ID_Type);
4627+
sge_dstring_sprintf(&job_task_specifier, sge_uu32, jobid);
4628+
id_entry = lAddElemStr(&id_list, ID_str, sge_dstring_get_string(&job_task_specifier), ID_Type);
46354629

46364630
if (JOB_TYPE_IS_ARRAY(lGetUlong(japi_job, JJ_type))) {
46374631
/* Kill every task in the not yet finished list. Some of the tasks
@@ -4947,7 +4941,7 @@ static int japi_stop_event_client (const char *default_cell)
49474941
DENTER(TOP_LAYER);
49484942

49494943
DPRINTF (("Requesting that GDI kill our event client.\n"));
4950-
snprintf(id_string, sizeof(id_string)-1, sge_u32, japi_ec_id);
4944+
snprintf(id_string, sizeof(id_string)-1, sge_uu32, japi_ec_id);
49514945
lAddElemStr(&id_list, ID_str, id_string, ID_Type);
49524946
alp = gdi_kill(id_list, EVENTCLIENT_KILL);
49534947
lFreeList(&id_list);

0 commit comments

Comments
 (0)