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 | } |
---|