fsd_iter_t * fsd_drmaa_session_run_bulk( fsd_drmaa_session_t *self, const fsd_template_t *jt, int start, int end, int incr ) { volatile unsigned n_jobs; char **volatile result = NULL; if( incr > 0 ) n_jobs = (end-start) / incr + 1; else n_jobs = (start-end) / -incr + 1; TRY { unsigned i; int idx; fsd_calloc( result, n_jobs, char* ); for( i=0, idx=start; i < n_jobs; i++, idx+=incr ) result[i] = self->run_impl( self, jt, idx ); } EXCEPT_DEFAULT { if( result ) fsd_free_vector( result ); fsd_exc_reraise(); } END_TRY return fsd_iter_new( result, -1 ); }
void fsd_job_get_termination_status( fsd_job_t *self, int *status, fsd_iter_t **rusage_out ) { fsd_iter_t* volatile rusage = NULL; TRY { if( rusage_out ) { rusage = fsd_iter_new( NULL, 0 ); rusage->append( rusage, fsd_asprintf( "submission_time=%ld", (long)self->submit_time ) ); if (self->start_time) rusage->append( rusage, fsd_asprintf( "start_time=%ld", (long)self->start_time ) ); if (self->end_time) rusage->append( rusage, fsd_asprintf( "end_time=%ld", (long)self->end_time ) ); rusage->append( rusage, fsd_asprintf( "cpu=%ld", self->cpu_usage ) ); rusage->append( rusage, fsd_asprintf( "mem=%ld", self->mem_usage ) ); rusage->append( rusage, fsd_asprintf( "vmem=%ld", self->vmem_usage ) ); rusage->append( rusage, fsd_asprintf( "walltime=%ld", self->walltime ) ); rusage->append( rusage, fsd_asprintf( "hosts=%s", self->execution_hosts ) ); if (self->queue) { rusage->append( rusage, fsd_asprintf("queue=%s", self->queue ) ); } if (self->project) { rusage->append( rusage, fsd_asprintf("project=%s", self->project ) ); } } } EXCEPT_DEFAULT { if( rusage ) rusage->destroy( rusage ); if( rusage_out ) *rusage_out = NULL; fsd_exc_reraise(); } ELSE { if( status ) *status = self->exit_status; if( rusage_out ) *rusage_out = rusage; } END_TRY }