void drmaa2_rtemplate_free(drmaa2_rtemplate * rtRef) { drmaa2_rtemplate rt = *rtRef; if (rt != NULL) { drmaa2_string_free(&(rt->reservationName)); drmaa2_string_free(&(rt->jobCategory)); drmaa2_list_free(&(rt->usersACL)); drmaa2_list_free(&(rt->candidateMachines)); free(rt); *rtRef = NULL; } }
void drmaa2_rinfo_free(drmaa2_rinfo * riRef) { drmaa2_rinfo ri = *riRef; if (ri != NULL) { drmaa2_string_free(&(ri->reservationId)); drmaa2_string_free(&(ri->reservationName)); drmaa2_list_free (&(ri->usersACL)); drmaa2_list_free (&(ri->reservedMachines)); free(ri); *riRef = NULL; } }
// helper method to avoid code duplication drmaa2_error drmaa2_jarray_change_state(drmaa2_jarray ja, drmaa2_error (*chage_state_method)(drmaa2_j)) { drmaa2_j_list jl = drmaa2_jarray_get_jobs(ja); size_t i; for (i = 0; i < drmaa2_list_size(jl); i++) { chage_state_method((drmaa2_j)drmaa2_list_get(jl, i)); } drmaa2_list_free(&jl); return DRMAA2_SUCCESS; }
int main(int argc, char *argv[]) { char cwd[100]; drmaa2_string jid1, jid2; printf("==== Create a job session with given session name.\n"); drmaa2_jsession js = drmaa2_create_jsession("mysession", NULL); printf("==== Creating the job template.\n"); drmaa2_jtemplate jt = drmaa2_jtemplate_create(); jt->jobName = strdup("ht2"); jt->remoteCommand = strdup("/bin/ls"); if ( getcwd(cwd, DRMAA2_ATTR_BUFFER) == NULL ) { perror("Error getting current working directory"); exit(-1); } jt->workingDirectory = strdup(cwd); jt->args=drmaa2_list_create(DRMAA2_STRINGLIST,DRMAA2_UNSET_CALLBACK); drmaa2_list_add(jt->args,"-l"); drmaa2_list_add(jt->args,"-a"); drmaa2_list_add(jt->args,"/tmp"); jt->outputPath=strdup("stdout."DRMAA2_GW_JOB_ID); jt->errorPath =strdup("stderr."DRMAA2_GW_JOB_ID); drmaa2_j j1=NULL; drmaa2_j j2=NULL; printf("==== Submiting 2 jobs.\n"); j1 = drmaa2_jsession_run_job(js, jt); j2 = drmaa2_jsession_run_job(js, jt); jid1 = drmaa2_j_get_id(j1); jid2 = drmaa2_j_get_id(j2); printf("==== Your jobs have been submitted with id: %s and %s\n", jid1, jid2); drmaa2_j_list jobs = drmaa2_jsession_get_jobs(js, NULL); printf("==== There are %ld jobs in the job list\n", drmaa2_list_size(jobs)); drmaa2_j_wait_terminated(j1, DRMAA2_INFINITE_TIME); drmaa2_j_wait_terminated(j2, DRMAA2_INFINITE_TIME); printf("==== Destroying job template and job session.\n"); drmaa2_list_free(&jobs); drmaa2_jtemplate_free(&jt); drmaa2_destroy_jsession("mysession"); drmaa2_jsession_free(&js); printf("==== Exiting now.\n"); return 0; }
void drmaa2_jinfo_free(drmaa2_jinfo * jiRef) { drmaa2_jinfo ji = *jiRef; if (ji != NULL) { drmaa2_string_free(&(ji->jobId)); drmaa2_string_free(&(ji->terminatingSignal)); drmaa2_string_free(&(ji->annotation)); drmaa2_string_free(&(ji->jobSubState)); drmaa2_list_free (&(ji->allocatedMachines)); drmaa2_string_free(&(ji->submissionMachine)); drmaa2_string_free(&(ji->jobOwner)); drmaa2_string_free(&(ji->queueName)); free(ji); *jiRef = NULL; } }
void drmaa2_jtemplate_free(drmaa2_jtemplate * jtRef) { drmaa2_jtemplate jt = *jtRef; if (jt != NULL) { drmaa2_string_free(&(jt->remoteCommand)); drmaa2_list_free(&(jt->args)); drmaa2_dict_free(&(jt->jobEnvironment)); drmaa2_string_free(&(jt->workingDirectory)); drmaa2_string_free(&(jt->jobCategory)); drmaa2_list_free(&(jt->email)); drmaa2_string_free(&(jt->jobName)); drmaa2_string_free(&(jt->inputPath)); drmaa2_string_free(&(jt->outputPath)); drmaa2_string_free(&(jt->errorPath)); drmaa2_string_free(&(jt->reservationId)); drmaa2_string_free(&(jt->queueName)); drmaa2_list_free(&(jt->candidateMachines)); drmaa2_dict_free(&(jt->stageInFiles)); drmaa2_dict_free(&(jt->stageOutFiles)); drmaa2_dict_free(&(jt->resourceLimits)); drmaa2_string_free(&(jt->accountingId)); free(jt); *jtRef = NULL; } }
drmaa2_jarray drmaa2_jsession_run_bulk_jobs(const drmaa2_jsession js, const drmaa2_jtemplate jt, long long begin_index, long long end_index, long long step, long long max_parallel) { if (end_index < begin_index) { drmaa2_lasterror_v = DRMAA2_INVALID_ARGUMENT; drmaa2_lasterror_text_v = "The beginIndex value must be less than or equal to endIndex."; return NULL; } else if (begin_index < 1) { drmaa2_lasterror_v = DRMAA2_INVALID_ARGUMENT; drmaa2_lasterror_text_v = "Only positive index numbers are allowed for the beginIndex."; return NULL; } unsigned long index = begin_index; drmaa2_j j; drmaa2_string_list sl = drmaa2_list_create(DRMAA2_STRINGLIST, (drmaa2_list_entryfree)drmaa2_string_free); char *workingDirectory = jt->workingDirectory; char *inputPath = jt->inputPath; char *outputPath = jt->outputPath; char *errorPath = jt->errorPath; while (index <= end_index) { // Start replace placeholders char *index_c; char *tmp_working_dir; char *tmp_input_path; char *tmp_output_path; char *tmp_error_path; if (-1 == asprintf(&index_c, "%lu", index)) { drmaa2_lasterror_v = DRMAA2_INTERNAL; drmaa2_lasterror_text_v = "Error on asprintf() usage."; return NULL; } tmp_working_dir = str_replace(jt->workingDirectory, "$DRMAA2_INDEX$", index_c); jt->workingDirectory = str_replace(tmp_working_dir, "$DRMAA2_HOME_DIR$", "~"); drmaa2_string_free(&tmp_working_dir); tmp_input_path = str_replace(jt->inputPath, "$DRMAA2_INDEX$", index_c); jt->inputPath = str_replace(tmp_input_path, "$DRMAA2_HOME_DIR$", "~"); drmaa2_string_free(&tmp_input_path); tmp_input_path = jt->inputPath; jt->inputPath = str_replace(tmp_input_path, "$DRMAA2_WORKING_DIR$", "."); drmaa2_string_free(&tmp_input_path); tmp_output_path = str_replace(jt->outputPath, "$DRMAA2_INDEX$", index_c); jt->outputPath = str_replace(tmp_output_path, "$DRMAA2_HOME_DIR$", "~"); drmaa2_string_free(&tmp_output_path); tmp_output_path = jt->outputPath; jt->outputPath = str_replace(tmp_output_path, "$DRMAA2_WORKING_DIR$", "."); drmaa2_string_free(&tmp_output_path); tmp_error_path = str_replace(jt->errorPath, "$DRMAA2_INDEX$", index_c); jt->errorPath = str_replace(tmp_error_path, "$DRMAA2_HOME_DIR$", "~"); drmaa2_string_free(&tmp_error_path); tmp_error_path = jt->errorPath; jt->errorPath = str_replace(tmp_error_path, "$DRMAA2_WORKING_DIR$", "."); drmaa2_string_free(&tmp_error_path); // End replace placeholders j = drmaa2_jsession_run_job(js, jt); // Start clean up replacement variables tmp_working_dir = jt->workingDirectory; jt->workingDirectory = workingDirectory; drmaa2_string_free(&tmp_working_dir); tmp_input_path = jt->inputPath; jt->inputPath = inputPath; drmaa2_string_free(&tmp_input_path); tmp_output_path = jt->outputPath; jt->outputPath = outputPath; drmaa2_string_free(&tmp_output_path); tmp_error_path = jt->errorPath; jt->errorPath = errorPath; drmaa2_string_free(&tmp_error_path); free(index_c); // End clean up replacement variables drmaa2_list_add(sl, strdup(j->id)); drmaa2_j_free(&j); index += step; } long long template_id = save_jtemplate(jt, js->name); long long id = save_jarray(js->name, template_id, sl); drmaa2_list_free(&sl); drmaa2_jarray ja = (drmaa2_jarray)malloc(sizeof(drmaa2_jarray_s)); char *cid; if (-1 == asprintf(&cid, "%lld", id)) { drmaa2_lasterror_v = DRMAA2_INTERNAL; drmaa2_lasterror_text_v = "Error on asprintf() usage."; return NULL; } ja->id = cid; //already allocated ja->session_name = strdup(js->name); return ja; }