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