From: Miloš Mulač Date: Tue, 30 Sep 2008 12:29:04 +0000 (+0000) Subject: - recount subjob states if int_jobstat version changes X-Git-Tag: myproxy-config-R_2_0_2_1~17 X-Git-Url: http://scientific.zcu.cz/git/?a=commitdiff_plain;h=1492eca4a1ef0ed003e56dc9049ca24d79f85b28;p=jra1mw.git - recount subjob states if int_jobstat version changes - return all subjobs despite of their int_jobstat version --- diff --git a/org.glite.lb.server/src/jobstat.c b/org.glite.lb.server/src/jobstat.c index c1bc6e1..bfc9796 100644 --- a/org.glite.lb.server/src/jobstat.c +++ b/org.glite.lb.server/src/jobstat.c @@ -91,9 +91,9 @@ int edg_wll_JobStatusServer( #if DAG_ENABLE char *stmt = NULL; #endif - char *stat_str, *s_out; + char *s_out; intJobStat *js; - char *out[1]; + char *out[1], *out_stat[3]; glite_lbu_Statement sh = NULL; int num_sub, num_f, i, ii; @@ -171,9 +171,7 @@ int edg_wll_JobStatusServer( if (flags & EDG_WLL_STAT_CHILDSTAT) { - trio_asprintf(&stmt, "SELECT int_status FROM states WHERE parent_job='%|Ss'" - " AND version='%|Ss'", - md5_jobid, INTSTAT_VERSION); + trio_asprintf(&stmt, "SELECT version,int_status,jobid FROM states WHERE parent_job='%|Ss'", md5_jobid); if (stmt != NULL) { num_sub = edg_wll_ExecSQL(ctx, stmt, &sh); if (num_sub >=0 ) { @@ -183,16 +181,42 @@ int edg_wll_JobStatusServer( edg_wll_SetError(ctx, ENOMEM, "edg_wll_JobStatusServer() calloc children_states failed!"); goto rollback; } - while ((num_f = edg_wll_FetchRow(ctx, sh, 1, NULL, &stat_str)) == 1 + while ((num_f = edg_wll_FetchRow(ctx, sh, sizeof(out_stat), NULL, out_stat)) == 3 && i < num_sub) { - js = dec_intJobStat(stat_str, &s_out); - if (s_out != NULL && js != NULL) { + if (!strcmp(INTSTAT_VERSION,out_stat[0])) { + js = dec_intJobStat(out_stat[1], &s_out); + if (s_out != NULL && js != NULL) { + stat->children_states[i] = js->pub; + destroy_intJobStat_extension(js); + free(js); + i++; // Careful, this value will also be used further + } + } + else { // recount state + glite_jobid_t subjob; + intJobStat js_real; + char *name; + int port; + + + js = &js_real; + glite_jobid_getServerParts(job, &name, &port); + if (glite_jobid_recreate(name, port, out_stat[2], &subjob)) { + goto rollback; + } + free(name); + + if (edg_wll_intJobStatus(ctx, subjob, flags, js, js_enable_store, 0)) { + goto rollback; + } + glite_jobid_free(subjob); stat->children_states[i] = js->pub; destroy_intJobStat_extension(js); - free(js); i++; // Careful, this value will also be used further } - free(stat_str); + free(out_stat[0]); out_stat[0] = NULL; + free(out_stat[1]); out_stat[1] = NULL; + free(out_stat[2]); out_stat[2] = NULL; } if (num_f < 0) goto rollback; @@ -234,17 +258,43 @@ int edg_wll_JobStatusServer( } else { // Get child states from the database - trio_asprintf(&stmt, "SELECT status FROM states WHERE parent_job='%|Ss' AND version='%|Ss'", - md5_jobid, INTSTAT_VERSION); - out[1] = NULL; + trio_asprintf(&stmt, "SELECT version,status,jobid FROM states WHERE parent_job='%|Ss'", md5_jobid); if (stmt != NULL) { num_sub = edg_wll_ExecSQL(ctx, stmt, &sh); if (num_sub >=0 ) { - while ((num_f = edg_wll_FetchRow(ctx, sh, sizeof(out)/sizeof(out[0]), NULL, out)) == 1 ) { - num_f = atoi(out[0]); - if (num_f > EDG_WLL_JOB_UNDEF && num_f < EDG_WLL_NUMBER_OF_STATCODES) - stat->children_hist[num_f+1]++; - free(out[0]); + while ((num_f = edg_wll_FetchRow(ctx, sh, sizeof(out_stat)/sizeof(out_stat[0]), NULL, out_stat)) == 3 ) { + if (!strcmp(INTSTAT_VERSION,out_stat[0])) { + num_f = atoi(out_stat[1]); + if (num_f > EDG_WLL_JOB_UNDEF && num_f < EDG_WLL_NUMBER_OF_STATCODES) + stat->children_hist[num_f+1]++; + } + else { // recount state + glite_jobid_t subjob; + intJobStat js_real; + char *name; + int port; + + + js = &js_real; + glite_jobid_getServerParts(job, &name, &port); + if (glite_jobid_recreate(name, port, out_stat[2], &subjob)) { + goto rollback; + } + free(name); + + if (edg_wll_intJobStatus(ctx, subjob, flags, js, js_enable_store, 0)) { + goto rollback; + } + glite_jobid_free(subjob); + num_f = js->pub.state; + if (num_f > EDG_WLL_JOB_UNDEF && num_f < EDG_WLL_NUMBER_OF_STATCODES) + stat->children_hist[num_f+1]++; + + destroy_intJobStat(js); + } + free(out_stat[0]); out_stat[0] = NULL; + free(out_stat[1]); out_stat[1] = NULL; + free(out_stat[2]); out_stat[2] = NULL; } if (num_f < 0) goto rollback; @@ -287,8 +337,8 @@ int edg_wll_JobStatusServer( if (flags & EDG_WLL_STAT_CHILDREN) { trio_asprintf(&stmt, "SELECT j.dg_jobid FROM states s,jobs j " - "WHERE s.parent_job='%|Ss' AND s.version='%|Ss' AND s.jobid=j.jobid", - md5_jobid, INTSTAT_VERSION); + "WHERE s.parent_job='%|Ss' AND s.jobid=j.jobid", + md5_jobid); if (stmt != NULL) { num_sub = edg_wll_ExecSQL(ctx, stmt, &sh); if (num_sub >=0 ) {