Exemplo n.º 1
0
drmaa2_j drmaa2_jsession_wait_any_terminated (const drmaa2_jsession js, 
    const drmaa2_j_list l, const time_t timeout)
{
    drmaa2_j terminated_j = NULL;
    drmaa2_j current_j = NULL;
    drmaa2_jstate state;
    size_t i;
    while (terminated_j == NULL) {
        for (i = 0; i < drmaa2_list_size(l); i++) {
            current_j = (drmaa2_j)drmaa2_list_get(l, i);
            state = get_state(current_j);
            if (state == DRMAA2_DONE || state == DRMAA2_FAILED) {
                terminated_j = (drmaa2_j)malloc(sizeof(drmaa2_j_s));
                terminated_j->session_name = strdup(js->name);
                terminated_j->id = strdup(current_j->id);
                break;
            }
        }
        if (terminated_j != NULL) {
            break;
        } else if (timeout == DRMAA2_ZERO_TIME || (timeout != DRMAA2_INFINITE_TIME && timeout <= time(NULL))) {
            drmaa2_lasterror_v = DRMAA2_TIMEOUT;
            drmaa2_lasterror_text_v = "A timeout occured while waiting for job termination.";
            break;
        }
        sleep(1);
    }
    return terminated_j;
}
Exemplo n.º 2
0
// 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;
}
Exemplo n.º 3
0
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;
    
}
Exemplo n.º 4
0
drmaa2_j drmaa2_jsession_run_job(const drmaa2_jsession js, const drmaa2_jtemplate jt) {
    if (!jsession_is_valid(js)) {
        drmaa2_lasterror_v = DRMAA2_INVALID_SESSION;
        drmaa2_lasterror_text_v = "Job session is invalid.";
        return NULL;
    }

    if (jt->jobCategory != DRMAA2_UNSET_STRING) {
        drmaa2_string_list sl = drmaa2_jsession_get_job_categories(js);
        drmaa2_bool supported = DRMAA2_FALSE;
        size_t i;
        for (i = 0; i < drmaa2_list_size(sl); i++) {
            if (strcmp(jt->jobCategory, drmaa2_list_get(sl, i)) == 0) {
                supported = DRMAA2_TRUE;
                break;
            }
        }
        if (supported == DRMAA2_FALSE) {
            drmaa2_lasterror_v = DRMAA2_INVALID_ARGUMENT;
            drmaa2_lasterror_text_v = "Given job category is not supported.";
            return NULL;
        }
    }

    if (!drmaa2_supports(DRMAA2_JT_EMAIL) && (jt->email != DRMAA2_UNSET_LIST
            || jt->emailOnStarted != DRMAA2_UNSET_BOOL || jt->emailOnTerminated != DRMAA2_UNSET_BOOL)) {
        drmaa2_lasterror_v = DRMAA2_UNSUPPORTED_ATTRIBUTE;
        drmaa2_lasterror_text_v = "Email is not supported.";
        return NULL;
    }

    if (!drmaa2_supports(DRMAA2_JT_MAXSLOTS) && jt->maxSlots != DRMAA2_UNSET_NUM) {
        drmaa2_lasterror_v = DRMAA2_UNSUPPORTED_ATTRIBUTE;
        drmaa2_lasterror_text_v = "MaxSlot is not supported.";
        return NULL;
    }

    if (!drmaa2_supports(DRMAA2_JT_DEADLINE) && jt->deadlineTime != DRMAA2_UNSET_TIME) {
        drmaa2_lasterror_v = DRMAA2_UNSUPPORTED_ATTRIBUTE;
        drmaa2_lasterror_text_v = "DeadLineTime is not supported.";
        return NULL;
    }

    if (!drmaa2_supports(DRMAA2_JT_STAGING) && (jt->stageInFiles != DRMAA2_UNSET_DICT ||
            jt->stageOutFiles != DRMAA2_UNSET_DICT)) {
        drmaa2_lasterror_v = DRMAA2_UNSUPPORTED_ATTRIBUTE;
        drmaa2_lasterror_text_v = "Staging is not supported.";
        return NULL;
    }

    if (!drmaa2_supports(DRMAA2_JT_ACCOUNTINGID) && jt->accountingId != DRMAA2_UNSET_STRING) {
        drmaa2_lasterror_v = DRMAA2_UNSUPPORTED_ATTRIBUTE;
        drmaa2_lasterror_text_v = "AccountingID is not supported.";
        return NULL;
    }

    // further evaluation can be done here

    long long template_id = save_jtemplate(jt, js->name);
    long long job_id = save_job(js, template_id); 
    return submit_job_to_DRMS(js, job_id, jt);
}