[16] | 1 | #include <stdio.h> |
---|
| 2 | #include <unistd.h> |
---|
| 3 | #include <string.h> |
---|
| 4 | #include <drmaa.h> |
---|
| 5 | |
---|
| 6 | #define JOB_CHUNK 1 |
---|
| 7 | #define NBULKS 1 |
---|
| 8 | |
---|
| 9 | static drmaa_job_template_t *create_job_template(const char *job_path, int seconds, |
---|
| 10 | int as_bulk_job); |
---|
| 11 | |
---|
| 12 | int main(int argc, char *argv[]) |
---|
| 13 | { |
---|
| 14 | char diagnosis[DRMAA_ERROR_STRING_BUFFER]; |
---|
| 15 | const char *all_jobids[NBULKS*JOB_CHUNK + JOB_CHUNK+1]; |
---|
| 16 | char jobid[100]; |
---|
| 17 | int drmaa_errno, i, pos = 0; |
---|
| 18 | const char *job_path = NULL; |
---|
| 19 | drmaa_job_template_t *jt = NULL; |
---|
| 20 | |
---|
| 21 | job_path = strdup("args_helper"); |
---|
| 22 | if (drmaa_init(NULL, diagnosis, sizeof(diagnosis)-1) != DRMAA_ERRNO_SUCCESS) |
---|
| 23 | { |
---|
| 24 | fprintf(stderr, "drmaa_init() failed: %s\n", diagnosis); |
---|
| 25 | return 1; |
---|
| 26 | } |
---|
| 27 | |
---|
| 28 | /* |
---|
| 29 | * submit some bulk jobs |
---|
| 30 | */ |
---|
| 31 | /* if (!(jt = create_job_template(job_path, 5, 1))) |
---|
| 32 | { |
---|
| 33 | fprintf(stderr, "create_job_template() failed\n"); |
---|
| 34 | return 1; |
---|
| 35 | } |
---|
| 36 | for (i=0; i<NBULKS; i++) |
---|
| 37 | { |
---|
| 38 | drmaa_job_ids_t *jobids = NULL; |
---|
| 39 | int j; |
---|
| 40 | while ((drmaa_errno=drmaa_run_bulk_jobs(&jobids, jt, 1, JOB_CHUNK, 1, diagnosis, |
---|
| 41 | sizeof(diagnosis)-1)) == DRMAA_ERRNO_DRM_COMMUNICATION_FAILURE) |
---|
| 42 | { |
---|
| 43 | fprintf(stderr, "drmaa_run_bulk_jobs() failed - retry: %s %s\n", diagnosis, |
---|
| 44 | drmaa_strerror(drmaa_errno)); |
---|
| 45 | sleep(1); |
---|
| 46 | } |
---|
| 47 | |
---|
| 48 | if (drmaa_errno != DRMAA_ERRNO_SUCCESS) |
---|
| 49 | { |
---|
| 50 | fprintf(stderr, "drmaa_run_bulk_jobs() failed: %s %s\n", diagnosis, |
---|
| 51 | drmaa_strerror(drmaa_errno)); |
---|
| 52 | return 1; |
---|
| 53 | } |
---|
| 54 | printf("submitted bulk job with jobids:\n"); |
---|
| 55 | for (j=0; j<JOB_CHUNK; j++) |
---|
| 56 | { |
---|
| 57 | drmaa_get_next_job_id(jobids, jobid, sizeof(jobid)-1); |
---|
| 58 | all_jobids[pos++] = strdup(jobid); |
---|
| 59 | printf("\t \"%s\"\n", jobid); |
---|
| 60 | } |
---|
| 61 | drmaa_release_job_ids(jobids); |
---|
| 62 | } |
---|
| 63 | drmaa_delete_job_template(jt, NULL, 0); */ |
---|
| 64 | /* |
---|
| 65 | * submit some sequential jobs |
---|
| 66 | */ |
---|
| 67 | if (!(jt = create_job_template(job_path, 1, 0))) |
---|
| 68 | { |
---|
| 69 | fprintf(stderr, "create_sleeper_job_template() failed\n"); |
---|
| 70 | return 1; |
---|
| 71 | } |
---|
| 72 | |
---|
| 73 | for (i=0; i<1; i++) |
---|
| 74 | { |
---|
| 75 | while ((drmaa_errno=drmaa_run_job(jobid, sizeof(jobid)-1, jt, diagnosis, |
---|
| 76 | sizeof(diagnosis)-1)) == |
---|
| 77 | DRMAA_ERRNO_DRM_COMMUNICATION_FAILURE) |
---|
| 78 | { |
---|
| 79 | fprintf(stderr, "drmaa_run_job() failed - retry: %s\n", diagnosis); |
---|
| 80 | sleep(1); |
---|
| 81 | } |
---|
| 82 | |
---|
| 83 | if (drmaa_errno != DRMAA_ERRNO_SUCCESS) |
---|
| 84 | { |
---|
| 85 | fprintf(stderr, "drmaa_run_job() failed: %s\n", diagnosis); |
---|
| 86 | return 1; |
---|
| 87 | } |
---|
| 88 | |
---|
| 89 | printf("\t \"%s\"\n", jobid); |
---|
| 90 | all_jobids[pos++] = strdup(jobid); |
---|
| 91 | } |
---|
| 92 | /* set string array end mark */ |
---|
| 93 | all_jobids[pos] = NULL; |
---|
| 94 | drmaa_delete_job_template(jt, NULL, 0); |
---|
| 95 | /* |
---|
| 96 | * synchronize with all jobs |
---|
| 97 | */ |
---|
| 98 | /*drmaa_errno = drmaa_synchronize(all_jobids, DRMAA_TIMEOUT_WAIT_FOREVER, 0, diagnosis, |
---|
| 99 | sizeof(diagnosis)-1); |
---|
| 100 | if (drmaa_errno != DRMAA_ERRNO_SUCCESS) |
---|
| 101 | { |
---|
| 102 | fprintf(stderr, "drmaa_synchronize(DRMAA_JOB_IDS_SESSION_ALL, dispose) failed: %s\n", diagnosis); |
---|
| 103 | return 1; |
---|
| 104 | } |
---|
| 105 | printf("synchronized with all jobs\n"); |
---|
| 106 | */ |
---|
| 107 | /* |
---|
| 108 | * wait all those jobs |
---|
| 109 | */ |
---|
| 110 | for (pos=0; pos< 1; pos++) |
---|
| 111 | { |
---|
| 112 | int stat; |
---|
| 113 | int aborted, exited, exit_status, signaled; |
---|
| 114 | printf("\nDrmaa_wait\n"); |
---|
| 115 | drmaa_errno = drmaa_wait(all_jobids[pos], jobid, sizeof(jobid)-1, &stat,DRMAA_TIMEOUT_WAIT_FOREVER, NULL, diagnosis, sizeof(diagnosis)-1); |
---|
| 116 | printf("\nAfter drmaa_wait\n"); |
---|
| 117 | if (drmaa_errno != DRMAA_ERRNO_SUCCESS) |
---|
| 118 | { |
---|
| 119 | fprintf(stderr, "drmaa_wait(%s) failed: %s\n", all_jobids[pos], diagnosis); |
---|
| 120 | return 1; |
---|
| 121 | } |
---|
| 122 | /* |
---|
| 123 | * report how job finished |
---|
| 124 | */ |
---|
| 125 | drmaa_wifaborted(&aborted, stat, NULL, 0); |
---|
| 126 | if (aborted) |
---|
| 127 | { |
---|
| 128 | printf("job \"%s\" never ran\n", all_jobids[pos]); |
---|
| 129 | } |
---|
| 130 | else |
---|
| 131 | { |
---|
| 132 | drmaa_wifexited(&exited, stat, NULL, 0); |
---|
| 133 | if (exited) |
---|
| 134 | { |
---|
| 135 | drmaa_wexitstatus(&exit_status, stat, NULL, 0); |
---|
| 136 | printf("job \"%s\" finished regularly with exit status %d\n", |
---|
| 137 | all_jobids[pos], exit_status); |
---|
| 138 | } |
---|
| 139 | else |
---|
| 140 | { |
---|
| 141 | drmaa_wifsignaled(&signaled, stat, NULL, 0); |
---|
| 142 | if (signaled) |
---|
| 143 | { |
---|
| 144 | char termsig[DRMAA_SIGNAL_BUFFER+1]; |
---|
| 145 | drmaa_wtermsig(termsig, DRMAA_SIGNAL_BUFFER, stat, NULL, 0); |
---|
| 146 | printf("job \"%s\" finished due to signal %s\n", |
---|
| 147 | all_jobids[pos], termsig); |
---|
| 148 | } |
---|
| 149 | else |
---|
| 150 | { |
---|
| 151 | printf("job \"%s\" finished with unclear conditions\n", |
---|
| 152 | all_jobids[pos]); |
---|
| 153 | } |
---|
| 154 | } |
---|
| 155 | } |
---|
| 156 | } |
---|
| 157 | |
---|
| 158 | if (drmaa_exit(diagnosis, sizeof(diagnosis)-1) != DRMAA_ERRNO_SUCCESS) |
---|
| 159 | { |
---|
| 160 | fprintf(stderr, "drmaa_exit() failed: %s\n", diagnosis); |
---|
| 161 | return 1; |
---|
| 162 | } |
---|
| 163 | return 0; |
---|
| 164 | } |
---|
| 165 | |
---|
| 166 | static drmaa_job_template_t *create_job_template(const char *job_path, int seconds, int as_bulk_job) |
---|
| 167 | { |
---|
| 168 | const char *job_argv[3]; |
---|
| 169 | drmaa_job_template_t *jt = NULL; |
---|
| 170 | char buffer[100]; |
---|
| 171 | if (drmaa_allocate_job_template(&jt, NULL, 0)!=DRMAA_ERRNO_SUCCESS) |
---|
| 172 | { |
---|
| 173 | return NULL; |
---|
| 174 | } |
---|
| 175 | /* run in users home directory */ |
---|
| 176 | drmaa_set_attribute(jt, DRMAA_WD, DRMAA_PLACEHOLDER_HD"/michal/experiments/DRMAA_tests/DRMAA_args", NULL, 0); |
---|
| 177 | drmaa_set_attribute(jt, DRMAA_OUTPUT_PATH, ":"DRMAA_PLACEHOLDER_HD"/test_out", NULL , 0); |
---|
| 178 | |
---|
| 179 | |
---|
| 180 | /* the job to be run */ |
---|
| 181 | drmaa_set_attribute(jt, DRMAA_REMOTE_COMMAND, job_path, NULL, 0); |
---|
| 182 | /*drmaa_set_attribute(jt, DRMAA_JOB_CATEGORY, "default", NULL, 0); */ |
---|
| 183 | /* the job's arguments */ |
---|
| 184 | sprintf(buffer, "%d", seconds); |
---|
| 185 | job_argv[0] = strdup("tabs dwaps trzyps"); |
---|
| 186 | job_argv[1] = strdup("jeden dwa"); |
---|
| 187 | job_argv[2] = NULL; |
---|
| 188 | drmaa_set_vector_attribute(jt, DRMAA_V_ARGV, job_argv, NULL, 0); |
---|
| 189 | /* join output/error file */ |
---|
| 190 | drmaa_set_attribute(jt, DRMAA_JOIN_FILES, "y", NULL, 0); |
---|
| 191 | /* path for output */ |
---|
| 192 | /* if (!as_bulk_job) |
---|
| 193 | { |
---|
| 194 | drmaa_set_attribute(jt, DRMAA_OUTPUT_PATH, ":"DRMAA_PLACEHOLDER_HD"/DRMAA_JOB", NULL, 0); |
---|
| 195 | } |
---|
| 196 | else |
---|
| 197 | { |
---|
| 198 | drmaa_set_attribute(jt, DRMAA_OUTPUT_PATH,":"DRMAA_PLACEHOLDER_HD"/DRMAA_JOB."DRMAA_PLACEHOLDER_INCR, NULL, 0); |
---|
| 199 | }*/ |
---|
| 200 | return jt; |
---|
| 201 | } |
---|