Changeset 29 for trunk/slurm_drmaa/job.c


Ignore:
Timestamp:
10/31/12 14:10:21 (12 years ago)
Author:
mmamonski
Message:

bump version, avoid segault on missing jobs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/slurm_drmaa/job.c

    r27 r29  
    121121                                self->on_missing(self); 
    122122                        } else { 
    123                                 fsd_exc_raise_fmt(      FSD_ERRNO_INTERNAL_ERROR,"slurm_load_jobs error: %s,job_id: %s", slurm_strerror(slurm_get_errno()), self->job_id); 
    124                         } 
    125                 } 
     123                                fsd_exc_raise_fmt(FSD_ERRNO_INTERNAL_ERROR,"slurm_load_jobs error: %s,job_id: %s", slurm_strerror(slurm_get_errno()), self->job_id); 
     124                        } 
     125                } 
     126                if (job_info) { 
     127                        fsd_log_debug(("state = %d, state_reason = %d", job_info->job_array[0].job_state, job_info->job_array[0].state_reason)); 
     128                         
     129                        switch(job_info->job_array[0].job_state & JOB_STATE_BASE) 
     130                        { 
     131 
     132                                case JOB_PENDING: 
     133                                        switch(job_info->job_array[0].state_reason) 
     134                                        { 
     135                                                #if SLURM_VERSION_NUMBER >= SLURM_VERSION_NUM(2,2,0) 
     136                                                case WAIT_HELD_USER:   /* job is held by user */ 
     137                                                        fsd_log_debug(("interpreting as DRMAA_PS_USER_ON_HOLD")); 
     138                                                        self->state = DRMAA_PS_USER_ON_HOLD; 
     139                                                        break; 
     140                                                #endif 
     141                                                case WAIT_HELD:  /* job is held by administrator */ 
     142                                                        fsd_log_debug(("interpreting as DRMAA_PS_SYSTEM_ON_HOLD")); 
     143                                                        self->state = DRMAA_PS_SYSTEM_ON_HOLD; 
     144                                                        break; 
     145                                                default: 
     146                                                        fsd_log_debug(("interpreting as DRMAA_PS_QUEUED_ACTIVE")); 
     147                                                        self->state = DRMAA_PS_QUEUED_ACTIVE; 
     148                                        } 
     149                                        break; 
     150                                case JOB_RUNNING: 
     151                                        fsd_log_debug(("interpreting as DRMAA_PS_RUNNING")); 
     152                                        self->state = DRMAA_PS_RUNNING; 
     153                                        break; 
     154                                case JOB_SUSPENDED: 
     155                                        if(slurm_self->user_suspended == true) { 
     156                                                fsd_log_debug(("interpreting as DRMAA_PS_USER_SUSPENDED")); 
     157                                                self->state = DRMAA_PS_USER_SUSPENDED; 
     158                                        } else { 
     159                                                fsd_log_debug(("interpreting as DRMAA_PS_SYSTEM_SUSPENDED")); 
     160                                                self->state = DRMAA_PS_SYSTEM_SUSPENDED; 
     161                                        } 
     162                                        break; 
     163                                case JOB_COMPLETE: 
     164                                        fsd_log_debug(("interpreting as DRMAA_PS_DONE")); 
     165                                        self->state = DRMAA_PS_DONE; 
     166                                        self->exit_status = job_info->job_array[0].exit_code; 
     167                                        fsd_log_debug(("exit_status = %d -> %d",self->exit_status, WEXITSTATUS(self->exit_status))); 
     168                                        break; 
     169                                case JOB_CANCELLED: 
     170                                        fsd_log_debug(("interpreting as DRMAA_PS_FAILED (aborted)")); 
     171                                        self->state = DRMAA_PS_FAILED; 
     172                                        self->exit_status = -1; 
     173                                case JOB_FAILED: 
     174                                case JOB_TIMEOUT: 
     175                                case JOB_NODE_FAIL: 
     176                                #if SLURM_VERSION_NUMBER >= SLURM_VERSION_NUM(2,3,0) 
     177                                case JOB_PREEMPTED: 
     178                                #endif 
     179                                        fsd_log_debug(("interpreting as DRMAA_PS_FAILED")); 
     180                                        self->state = DRMAA_PS_FAILED; 
     181                                        self->exit_status = job_info->job_array[0].exit_code; 
     182                                        fsd_log_debug(("exit_status = %d -> %d",self->exit_status, WEXITSTATUS(self->exit_status))); 
     183                                        break; 
     184                                default: /*unknown state */ 
     185                                        fsd_log_error(("Unknown job state: %d. Please send bug report: http://apps.man.poznan.pl/trac/slurm-drmaa", job_info->job_array[0].job_state)); 
     186                        } 
     187 
     188                        if (job_info->job_array[0].job_state & JOB_STATE_FLAGS & JOB_COMPLETING) { 
     189                                fsd_log_debug(("Epilog completing")); 
     190                        } 
     191 
     192                        if (job_info->job_array[0].job_state & JOB_STATE_FLAGS & JOB_CONFIGURING) { 
     193                                fsd_log_debug(("Nodes booting")); 
     194                        } 
     195 
     196                        if (self->exit_status == -1) /* input,output,error path failure etc*/ 
     197                                self->state = DRMAA_PS_FAILED; 
     198 
     199                        self->last_update_time = time(NULL); 
    126200                 
    127                 switch(job_info->job_array[0].job_state & JOB_STATE_BASE) 
    128                 { 
    129                         fsd_log_debug(("state = %d, state_reason = %d", job_info->job_array[0].job_state, job_info->job_array[0].state_reason)); 
    130  
    131                         case JOB_PENDING: 
    132                                 switch(job_info->job_array[0].state_reason) 
    133                                 { 
    134                                         #if SLURM_VERSION_NUMBER >= SLURM_VERSION_NUM(2,2,0) 
    135                                         case WAIT_HELD_USER:   /* job is held by user */ 
    136                                                 fsd_log_debug(("interpreting as DRMAA_PS_USER_ON_HOLD")); 
    137                                                 self->state = DRMAA_PS_USER_ON_HOLD; 
    138                                                 break; 
    139                                         #endif 
    140                                         case WAIT_HELD:  /* job is held by administrator */ 
    141                                                 fsd_log_debug(("interpreting as DRMAA_PS_SYSTEM_ON_HOLD")); 
    142                                                 self->state = DRMAA_PS_SYSTEM_ON_HOLD; 
    143                                                 break; 
    144                                         default: 
    145                                                 fsd_log_debug(("interpreting as DRMAA_PS_QUEUED_ACTIVE")); 
    146                                                 self->state = DRMAA_PS_QUEUED_ACTIVE; 
    147                                 } 
    148                                 break; 
    149                         case JOB_RUNNING: 
    150                                 fsd_log_debug(("interpreting as DRMAA_PS_RUNNING")); 
    151                                 self->state = DRMAA_PS_RUNNING; 
    152                                 break; 
    153                         case JOB_SUSPENDED: 
    154                                 if(slurm_self->user_suspended == true) { 
    155                                         fsd_log_debug(("interpreting as DRMAA_PS_USER_SUSPENDED")); 
    156                                         self->state = DRMAA_PS_USER_SUSPENDED; 
    157                                 } else { 
    158                                         fsd_log_debug(("interpreting as DRMAA_PS_SYSTEM_SUSPENDED")); 
    159                                         self->state = DRMAA_PS_SYSTEM_SUSPENDED; 
    160                                 } 
    161                                 break; 
    162                         case JOB_COMPLETE: 
    163                                 fsd_log_debug(("interpreting as DRMAA_PS_DONE")); 
    164                                 self->state = DRMAA_PS_DONE; 
    165                                 self->exit_status = job_info->job_array[0].exit_code; 
    166                                 fsd_log_debug(("exit_status = %d -> %d",self->exit_status, WEXITSTATUS(self->exit_status))); 
    167                                 break; 
    168                         case JOB_CANCELLED: 
    169                                 fsd_log_debug(("interpreting as DRMAA_PS_FAILED (aborted)")); 
    170                                 self->state = DRMAA_PS_FAILED; 
    171                                 self->exit_status = -1; 
    172                         case JOB_FAILED: 
    173                         case JOB_TIMEOUT: 
    174                         case JOB_NODE_FAIL: 
    175                         #if SLURM_VERSION_NUMBER >= SLURM_VERSION_NUM(2,3,0) 
    176                         case JOB_PREEMPTED: 
    177                         #endif 
    178                                 fsd_log_debug(("interpreting as DRMAA_PS_FAILED")); 
    179                                 self->state = DRMAA_PS_FAILED; 
    180                                 self->exit_status = job_info->job_array[0].exit_code; 
    181                                 fsd_log_debug(("exit_status = %d -> %d",self->exit_status, WEXITSTATUS(self->exit_status))); 
    182                                 break; 
    183                         default: /*unknown state */ 
    184                                 fsd_log_error(("Unknown job state: %d. Please send bug report: http://apps.man.poznan.pl/trac/slurm-drmaa", job_info->job_array[0].job_state)); 
    185                 } 
    186  
    187                 if (job_info->job_array[0].job_state & JOB_STATE_FLAGS & JOB_COMPLETING) { 
    188                         fsd_log_debug(("Epilog completing")); 
    189                 } 
    190  
    191                 if (job_info->job_array[0].job_state & JOB_STATE_FLAGS & JOB_CONFIGURING) { 
    192                         fsd_log_debug(("Nodes booting")); 
    193                 } 
    194  
    195                 if (self->exit_status == -1) /* input,output,error path failure etc*/ 
    196                         self->state = DRMAA_PS_FAILED; 
    197  
    198                 self->last_update_time = time(NULL); 
    199          
    200                 if( self->state >= DRMAA_PS_DONE ) { 
    201                         fsd_log_debug(("exit_status = %d, WEXITSTATUS(exit_status) = %d", self->exit_status, WEXITSTATUS(self->exit_status))); 
    202                         fsd_cond_broadcast( &self->status_cond ); 
     201                        if( self->state >= DRMAA_PS_DONE ) { 
     202                                fsd_log_debug(("exit_status = %d, WEXITSTATUS(exit_status) = %d", self->exit_status, WEXITSTATUS(self->exit_status))); 
     203                                fsd_cond_broadcast( &self->status_cond ); 
     204                        } 
    203205                } 
    204206        } 
Note: See TracChangeset for help on using the changeset viewer.