#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;
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 ) {
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;
}
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;
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 ) {