Implement logic behind suspended and suspend_reason job status attributes.
authorZdeněk Salvet <salvet@ics.muni.cz>
Fri, 24 Aug 2007 06:13:36 +0000 (06:13 +0000)
committerZdeněk Salvet <salvet@ics.muni.cz>
Fri, 24 Aug 2007 06:13:36 +0000 (06:13 +0000)
Fixes bug #28772.

org.glite.lb.server/src/jobstat.h
org.glite.lb.server/src/jobstat_supp.c
org.glite.lb.server/src/process_event.c

index 761403c..77ac99d 100644 (file)
@@ -11,7 +11,7 @@
  * (includes edg_wll_JobStat API structure)
  */
 
-#define INTSTAT_VERSION "release-3.3.3"
+#define INTSTAT_VERSION "release-3.3.4"
 
 
 // Internal error codes 
index 0838a74..9b80bd9 100644 (file)
@@ -497,6 +497,8 @@ static char *enc_JobStat(char *old, edg_wll_JobStat* stat)
        if (ret) ret = enc_int(ret, stat->payload_running);
        if (ret) ret = enc_strlist(ret, stat->possible_destinations);
        if (ret) ret = enc_strlist(ret, stat->possible_ce_nodes);
+       if (ret) ret = enc_int(ret, stat->suspended);
+       if (ret) ret = enc_string(ret, stat->suspend_reason);
        if (ret) ret = enc_int_array(ret, stat->children_hist, EDG_WLL_NUMBER_OF_STATCODES);
        if (ret) ret = enc_string(ret, stat->pbs_state);
        if (ret) ret = enc_string(ret, stat->pbs_queue);
@@ -569,6 +571,8 @@ static edg_wll_JobStat* dec_JobStat(char *in, char **rest)
         if (tmp_in != NULL) stat->payload_running = dec_int(tmp_in, &tmp_in);
         if (tmp_in != NULL) stat->possible_destinations = dec_strlist(tmp_in, &tmp_in);
         if (tmp_in != NULL) stat->possible_ce_nodes = dec_strlist(tmp_in, &tmp_in);
+        if (tmp_in != NULL) stat->suspended = dec_int(tmp_in, &tmp_in);
+        if (tmp_in != NULL) stat->suspend_reason = dec_string(tmp_in, &tmp_in);
         if (tmp_in != NULL) {
                            stat->children_hist = (int*)calloc(EDG_WLL_NUMBER_OF_STATCODES+1, sizeof(int));
                            dec_int_array(tmp_in, &tmp_in, stat->children_hist);
index d4529ef..7024462 100644 (file)
@@ -651,6 +651,22 @@ static int processEvent_glite(intJobStat *js, edg_wll_Event *e, int ev_seq, int
                        }
 #endif
                        break;
+               case EDG_WLL_EVENT_SUSPEND:
+                       if (USABLE(res, strict)) {
+                               if (js->pub.state == EDG_WLL_JOB_RUNNING) {
+                                       js->pub.suspended = 1;
+                                       rep(js->pub.suspend_reason, e->suspend.reason);
+                               }
+                       }
+                       break;
+               case EDG_WLL_EVENT_RESUME:
+                       if (USABLE(res, strict)) {
+                               if (js->pub.state == EDG_WLL_JOB_RUNNING) {
+                                       js->pub.suspended = 0;
+                                       rep(js->pub.suspend_reason, e->resume.reason);
+                               }
+                       }
+                       break;
                case EDG_WLL_EVENT_RESUBMISSION:
                        if (USABLE(res, strict)) {
                                if (e->resubmission.result == EDG_WLL_RESUBMISSION_WONTRESUB) {
@@ -897,6 +913,11 @@ static int processEvent_glite(intJobStat *js, edg_wll_Event *e, int ev_seq, int
                        else rep(js->last_seqcode, e->any.seqcode);
                }
 
+               if (js->pub.state != EDG_WLL_JOB_RUNNING) {
+                       js->pub.suspended = 0;
+                       rep(js->pub.suspend_reason, NULL);
+               }
+
                if (fine_res == RET_GOODBRANCH) {
                        rep(js->last_branch_seqcode, e->any.seqcode);
                }