Merge lp:~brianaker/gearmand/job-cleanup-for-exception into lp:gearmand
- job-cleanup-for-exception
- Merge into 1.2
Proposed by
Brian Aker
Status: | Merged |
---|---|
Merged at revision: | 803 |
Proposed branch: | lp:~brianaker/gearmand/job-cleanup-for-exception |
Merge into: | lp:gearmand |
Diff against target: |
499 lines (+116/-59) 13 files modified
libgearman-server/queue.cc (+18/-8) libgearman-server/server.cc (+20/-0) libgearman/add.cc (+3/-9) libgearman/add.hpp (+1/-1) libgearman/client.cc (+6/-6) libgearman/function/function_v1.hpp (+5/-5) libgearman/function/function_v2.cc (+4/-4) libgearman/function/partition.cc (+4/-4) libgearman/interface/worker.hpp (+5/-0) libgearman/job.cc (+8/-3) libgearman/job.hpp (+11/-1) libgearman/worker.cc (+15/-15) tests/libgearman-1.0/worker_test.cc (+16/-3) |
To merge this branch: | bzr merge lp:~brianaker/gearmand/job-cleanup-for-exception |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Tangent Trunk | Pending | ||
Review via email: mp+173287@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'libgearman-server/queue.cc' | |||
2 | --- libgearman-server/queue.cc 2013-06-05 21:12:38 +0000 | |||
3 | +++ libgearman-server/queue.cc 2013-07-05 22:08:31 +0000 | |||
4 | @@ -61,7 +61,11 @@ | |||
5 | 61 | { | 61 | { |
6 | 62 | assert(server->state.queue_startup == false); | 62 | assert(server->state.queue_startup == false); |
7 | 63 | gearmand_error_t ret; | 63 | gearmand_error_t ret; |
9 | 64 | if (server->queue_version == QUEUE_VERSION_FUNCTION) | 64 | if (server->queue_version == QUEUE_VERSION_NONE) |
10 | 65 | { | ||
11 | 66 | return GEARMAND_SUCCESS; | ||
12 | 67 | } | ||
13 | 68 | else if (server->queue_version == QUEUE_VERSION_FUNCTION) | ||
14 | 65 | { | 69 | { |
15 | 66 | assert(server->queue.functions->_add_fn); | 70 | assert(server->queue.functions->_add_fn); |
16 | 67 | ret= (*(server->queue.functions->_add_fn))(server, | 71 | ret= (*(server->queue.functions->_add_fn))(server, |
17 | @@ -114,7 +118,11 @@ | |||
18 | 114 | const char *function_name, | 118 | const char *function_name, |
19 | 115 | size_t function_name_size) | 119 | size_t function_name_size) |
20 | 116 | { | 120 | { |
22 | 117 | if (server->queue_version == QUEUE_VERSION_FUNCTION) | 121 | if (server->queue_version == QUEUE_VERSION_NONE) |
23 | 122 | { | ||
24 | 123 | return GEARMAND_SUCCESS; | ||
25 | 124 | } | ||
26 | 125 | else if (server->queue_version == QUEUE_VERSION_FUNCTION) | ||
27 | 118 | { | 126 | { |
28 | 119 | assert(server->queue.functions->_done_fn); | 127 | assert(server->queue.functions->_done_fn); |
29 | 120 | return (*(server->queue.functions->_done_fn))(server, | 128 | return (*(server->queue.functions->_done_fn))(server, |
30 | @@ -123,12 +131,14 @@ | |||
31 | 123 | function_name, | 131 | function_name, |
32 | 124 | function_name_size); | 132 | function_name_size); |
33 | 125 | } | 133 | } |
40 | 126 | 134 | else | |
41 | 127 | assert(server->queue.object); | 135 | { |
42 | 128 | return server->queue.object->done(server, | 136 | assert(server->queue.object); |
43 | 129 | unique, unique_size, | 137 | return server->queue.object->done(server, |
44 | 130 | function_name, | 138 | unique, unique_size, |
45 | 131 | function_name_size); | 139 | function_name, |
46 | 140 | function_name_size); | ||
47 | 141 | } | ||
48 | 132 | } | 142 | } |
49 | 133 | 143 | ||
50 | 134 | void gearman_server_save_job(gearman_server_st& server, | 144 | void gearman_server_save_job(gearman_server_st& server, |
51 | 135 | 145 | ||
52 | === modified file 'libgearman-server/server.cc' | |||
53 | --- libgearman-server/server.cc 2013-06-27 22:00:23 +0000 | |||
54 | +++ libgearman-server/server.cc 2013-07-05 22:08:31 +0000 | |||
55 | @@ -827,6 +827,26 @@ | |||
56 | 827 | { | 827 | { |
57 | 828 | return gearmand_gerror("_server_queue_work_data", ret); | 828 | return gearmand_gerror("_server_queue_work_data", ret); |
58 | 829 | } | 829 | } |
59 | 830 | |||
60 | 831 | #if 0 | ||
61 | 832 | /* Remove from persistent queue if one exists. */ | ||
62 | 833 | if (server_job->job_queued) | ||
63 | 834 | { | ||
64 | 835 | ret= gearman_queue_done(Server, | ||
65 | 836 | server_job->unique, | ||
66 | 837 | server_job->unique_length, | ||
67 | 838 | server_job->function->function_name, | ||
68 | 839 | server_job->function->function_name_size); | ||
69 | 840 | if (gearmand_failed(ret)) | ||
70 | 841 | { | ||
71 | 842 | gearmand_gerror("Remove from persistent queue", ret); | ||
72 | 843 | return ret; | ||
73 | 844 | } | ||
74 | 845 | } | ||
75 | 846 | |||
76 | 847 | /* Job is done, remove it. */ | ||
77 | 848 | gearman_server_job_free(server_job); | ||
78 | 849 | #endif | ||
79 | 830 | } | 850 | } |
80 | 831 | 851 | ||
81 | 832 | break; | 852 | break; |
82 | 833 | 853 | ||
83 | === modified file 'libgearman/add.cc' | |||
84 | --- libgearman/add.cc 2013-06-23 08:23:26 +0000 | |||
85 | +++ libgearman/add.cc 2013-07-05 22:08:31 +0000 | |||
86 | @@ -139,15 +139,9 @@ | |||
87 | 139 | const char *unique, | 139 | const char *unique, |
88 | 140 | const void *workload_str, size_t workload_size, | 140 | const void *workload_str, size_t workload_size, |
89 | 141 | time_t when, | 141 | time_t when, |
91 | 142 | gearman_return_t *ret_ptr, | 142 | gearman_return_t& ret_ptr, |
92 | 143 | const gearman_actions_t &actions) | 143 | const gearman_actions_t &actions) |
93 | 144 | { | 144 | { |
94 | 145 | gearman_return_t unused; | ||
95 | 146 | if (ret_ptr == NULL) | ||
96 | 147 | { | ||
97 | 148 | ret_ptr= &unused; | ||
98 | 149 | } | ||
99 | 150 | |||
100 | 151 | gearman_string_t function= { gearman_string_param_cstr(function_name) }; | 145 | gearman_string_t function= { gearman_string_param_cstr(function_name) }; |
101 | 152 | gearman_unique_t local_unique= gearman_unique_make(unique, unique ? strlen(unique) : 0); | 146 | gearman_unique_t local_unique= gearman_unique_make(unique, unique ? strlen(unique) : 0); |
102 | 153 | gearman_string_t workload= { static_cast<const char *>(workload_str), workload_size }; | 147 | gearman_string_t workload= { static_cast<const char *>(workload_str), workload_size }; |
103 | @@ -155,11 +149,11 @@ | |||
104 | 155 | task= add_task(client, task, context, command, function, local_unique, workload, when, actions); | 149 | task= add_task(client, task, context, command, function, local_unique, workload, when, actions); |
105 | 156 | if (task == NULL) | 150 | if (task == NULL) |
106 | 157 | { | 151 | { |
108 | 158 | *ret_ptr= client.impl()->universal.error_code(); | 152 | ret_ptr= client.impl()->universal.error_code(); |
109 | 159 | return NULL; | 153 | return NULL; |
110 | 160 | } | 154 | } |
111 | 161 | 155 | ||
113 | 162 | *ret_ptr= GEARMAN_SUCCESS; | 156 | ret_ptr= GEARMAN_SUCCESS; |
114 | 163 | 157 | ||
115 | 164 | return task; | 158 | return task; |
116 | 165 | } | 159 | } |
117 | 166 | 160 | ||
118 | === modified file 'libgearman/add.hpp' | |||
119 | --- libgearman/add.hpp 2012-05-13 23:19:56 +0000 | |||
120 | +++ libgearman/add.hpp 2013-07-05 22:08:31 +0000 | |||
121 | @@ -59,7 +59,7 @@ | |||
122 | 59 | const char *unique, | 59 | const char *unique, |
123 | 60 | const void *workload_str, size_t workload_size, | 60 | const void *workload_str, size_t workload_size, |
124 | 61 | time_t when, | 61 | time_t when, |
126 | 62 | gearman_return_t *ret_ptr, | 62 | gearman_return_t& ret_ptr, |
127 | 63 | const gearman_actions_t &actions); | 63 | const gearman_actions_t &actions); |
128 | 64 | 64 | ||
129 | 65 | gearman_task_st *add_task(gearman_client_st& client, | 65 | gearman_task_st *add_task(gearman_client_st& client, |
130 | 66 | 66 | ||
131 | === modified file 'libgearman/client.cc' | |||
132 | --- libgearman/client.cc 2013-06-27 22:00:23 +0000 | |||
133 | +++ libgearman/client.cc 2013-07-05 22:08:31 +0000 | |||
134 | @@ -1052,7 +1052,7 @@ | |||
135 | 1052 | unique, | 1052 | unique, |
136 | 1053 | workload, workload_size, | 1053 | workload, workload_size, |
137 | 1054 | time_t(0), | 1054 | time_t(0), |
139 | 1055 | ret_ptr, | 1055 | *ret_ptr, |
140 | 1056 | client->impl()->actions); | 1056 | client->impl()->actions); |
141 | 1057 | } | 1057 | } |
142 | 1058 | 1058 | ||
143 | @@ -1082,7 +1082,7 @@ | |||
144 | 1082 | unique, | 1082 | unique, |
145 | 1083 | workload, workload_size, | 1083 | workload, workload_size, |
146 | 1084 | time_t(0), | 1084 | time_t(0), |
148 | 1085 | ret_ptr, | 1085 | *ret_ptr, |
149 | 1086 | client->impl()->actions); | 1086 | client->impl()->actions); |
150 | 1087 | } | 1087 | } |
151 | 1088 | 1088 | ||
152 | @@ -1111,7 +1111,7 @@ | |||
153 | 1111 | unique, | 1111 | unique, |
154 | 1112 | workload, workload_size, | 1112 | workload, workload_size, |
155 | 1113 | time_t(0), | 1113 | time_t(0), |
157 | 1114 | ret_ptr, | 1114 | *ret_ptr, |
158 | 1115 | client->impl()->actions); | 1115 | client->impl()->actions); |
159 | 1116 | } | 1116 | } |
160 | 1117 | 1117 | ||
161 | @@ -1140,7 +1140,7 @@ | |||
162 | 1140 | unique, | 1140 | unique, |
163 | 1141 | workload, workload_size, | 1141 | workload, workload_size, |
164 | 1142 | time_t(0), | 1142 | time_t(0), |
166 | 1143 | ret_ptr, | 1143 | *ret_ptr, |
167 | 1144 | client->impl()->actions); | 1144 | client->impl()->actions); |
168 | 1145 | } | 1145 | } |
169 | 1146 | 1146 | ||
170 | @@ -1171,7 +1171,7 @@ | |||
171 | 1171 | unique, | 1171 | unique, |
172 | 1172 | workload, workload_size, | 1172 | workload, workload_size, |
173 | 1173 | time_t(0), | 1173 | time_t(0), |
175 | 1174 | ret_ptr, | 1174 | *ret_ptr, |
176 | 1175 | client->impl()->actions); | 1175 | client->impl()->actions); |
177 | 1176 | } | 1176 | } |
178 | 1177 | 1177 | ||
179 | @@ -1201,7 +1201,7 @@ | |||
180 | 1201 | unique, | 1201 | unique, |
181 | 1202 | workload, workload_size, | 1202 | workload, workload_size, |
182 | 1203 | time_t(0), | 1203 | time_t(0), |
184 | 1204 | ret_ptr, | 1204 | *ret_ptr, |
185 | 1205 | client->impl()->actions); | 1205 | client->impl()->actions); |
186 | 1206 | 1206 | ||
187 | 1207 | } | 1207 | } |
188 | 1208 | 1208 | ||
189 | === modified file 'libgearman/function/function_v1.hpp' | |||
190 | --- libgearman/function/function_v1.hpp 2013-07-02 23:51:10 +0000 | |||
191 | +++ libgearman/function/function_v1.hpp 2013-07-05 22:08:31 +0000 | |||
192 | @@ -62,20 +62,20 @@ | |||
193 | 62 | gearman_job_build_reducer(job, NULL); | 62 | gearman_job_build_reducer(job, NULL); |
194 | 63 | } | 63 | } |
195 | 64 | 64 | ||
198 | 65 | job->error_code= GEARMAN_SUCCESS; | 65 | job->_error_code= GEARMAN_SUCCESS; |
199 | 66 | job->_worker.work_result= _worker_fn(job, context_arg, &(job->_worker.work_result_size), &job->error_code); | 66 | job->_worker.work_result= _worker_fn(job, context_arg, &(job->_worker.work_result_size), &job->_error_code); |
200 | 67 | 67 | ||
202 | 68 | if (job->error_code == GEARMAN_LOST_CONNECTION) | 68 | if (job->_error_code == GEARMAN_LOST_CONNECTION) |
203 | 69 | { | 69 | { |
204 | 70 | return GEARMAN_FUNCTION_ERROR; | 70 | return GEARMAN_FUNCTION_ERROR; |
205 | 71 | } | 71 | } |
206 | 72 | 72 | ||
208 | 73 | if (job->error_code == GEARMAN_SHUTDOWN) | 73 | if (job->_error_code == GEARMAN_SHUTDOWN) |
209 | 74 | { | 74 | { |
210 | 75 | return GEARMAN_FUNCTION_SHUTDOWN; | 75 | return GEARMAN_FUNCTION_SHUTDOWN; |
211 | 76 | } | 76 | } |
212 | 77 | 77 | ||
214 | 78 | if (gearman_failed(job->error_code)) | 78 | if (gearman_failed(job->_error_code)) |
215 | 79 | { | 79 | { |
216 | 80 | return GEARMAN_FUNCTION_FATAL; | 80 | return GEARMAN_FUNCTION_FATAL; |
217 | 81 | } | 81 | } |
218 | 82 | 82 | ||
219 | === modified file 'libgearman/function/function_v2.cc' | |||
220 | --- libgearman/function/function_v2.cc 2013-02-03 13:13:26 +0000 | |||
221 | +++ libgearman/function/function_v2.cc 2013-07-05 22:08:31 +0000 | |||
222 | @@ -56,19 +56,19 @@ | |||
223 | 56 | switch (error) | 56 | switch (error) |
224 | 57 | { | 57 | { |
225 | 58 | case GEARMAN_SHUTDOWN: | 58 | case GEARMAN_SHUTDOWN: |
227 | 59 | job->error_code= GEARMAN_SUCCESS; | 59 | job->_error_code= GEARMAN_SUCCESS; |
228 | 60 | return GEARMAN_FUNCTION_SHUTDOWN; | 60 | return GEARMAN_FUNCTION_SHUTDOWN; |
229 | 61 | 61 | ||
230 | 62 | case GEARMAN_FATAL: | 62 | case GEARMAN_FATAL: |
232 | 63 | job->error_code= GEARMAN_FATAL; | 63 | job->_error_code= GEARMAN_FATAL; |
233 | 64 | return GEARMAN_FUNCTION_FATAL; | 64 | return GEARMAN_FUNCTION_FATAL; |
234 | 65 | 65 | ||
235 | 66 | case GEARMAN_ERROR: | 66 | case GEARMAN_ERROR: |
237 | 67 | job->error_code= GEARMAN_ERROR; | 67 | job->_error_code= GEARMAN_ERROR; |
238 | 68 | return GEARMAN_FUNCTION_ERROR; | 68 | return GEARMAN_FUNCTION_ERROR; |
239 | 69 | 69 | ||
240 | 70 | case GEARMAN_SUCCESS: | 70 | case GEARMAN_SUCCESS: |
242 | 71 | job->error_code= GEARMAN_SUCCESS; | 71 | job->_error_code= GEARMAN_SUCCESS; |
243 | 72 | return GEARMAN_FUNCTION_SUCCESS; | 72 | return GEARMAN_FUNCTION_SUCCESS; |
244 | 73 | 73 | ||
245 | 74 | case GEARMAN_IO_WAIT: | 74 | case GEARMAN_IO_WAIT: |
246 | 75 | 75 | ||
247 | === modified file 'libgearman/function/partition.cc' | |||
248 | --- libgearman/function/partition.cc 2013-02-03 13:13:26 +0000 | |||
249 | +++ libgearman/function/partition.cc 2013-07-05 22:08:31 +0000 | |||
250 | @@ -56,19 +56,19 @@ | |||
251 | 56 | switch (error) | 56 | switch (error) |
252 | 57 | { | 57 | { |
253 | 58 | case GEARMAN_FATAL: | 58 | case GEARMAN_FATAL: |
255 | 59 | job->error_code= GEARMAN_FATAL; | 59 | job->_error_code= GEARMAN_FATAL; |
256 | 60 | return GEARMAN_FUNCTION_FATAL; | 60 | return GEARMAN_FUNCTION_FATAL; |
257 | 61 | 61 | ||
258 | 62 | case GEARMAN_SHUTDOWN: | 62 | case GEARMAN_SHUTDOWN: |
260 | 63 | job->error_code= GEARMAN_SUCCESS; | 63 | job->_error_code= GEARMAN_SUCCESS; |
261 | 64 | return GEARMAN_FUNCTION_SHUTDOWN; | 64 | return GEARMAN_FUNCTION_SHUTDOWN; |
262 | 65 | 65 | ||
263 | 66 | case GEARMAN_ERROR: | 66 | case GEARMAN_ERROR: |
265 | 67 | job->error_code= GEARMAN_ERROR; | 67 | job->_error_code= GEARMAN_ERROR; |
266 | 68 | return GEARMAN_FUNCTION_ERROR; | 68 | return GEARMAN_FUNCTION_ERROR; |
267 | 69 | 69 | ||
268 | 70 | case GEARMAN_SUCCESS: | 70 | case GEARMAN_SUCCESS: |
270 | 71 | job->error_code= GEARMAN_SUCCESS; | 71 | job->_error_code= GEARMAN_SUCCESS; |
271 | 72 | return GEARMAN_FUNCTION_SUCCESS; | 72 | return GEARMAN_FUNCTION_SUCCESS; |
272 | 73 | 73 | ||
273 | 74 | case GEARMAN_IO_WAIT: | 74 | case GEARMAN_IO_WAIT: |
274 | 75 | 75 | ||
275 | === modified file 'libgearman/interface/worker.hpp' | |||
276 | --- libgearman/interface/worker.hpp 2013-07-02 23:51:10 +0000 | |||
277 | +++ libgearman/interface/worker.hpp 2013-07-05 22:08:31 +0000 | |||
278 | @@ -132,6 +132,11 @@ | |||
279 | 132 | return universal.error(); | 132 | return universal.error(); |
280 | 133 | } | 133 | } |
281 | 134 | 134 | ||
282 | 135 | gearman_return_t error_code() const | ||
283 | 136 | { | ||
284 | 137 | return universal.error_code(); | ||
285 | 138 | } | ||
286 | 139 | |||
287 | 135 | private: | 140 | private: |
288 | 136 | gearman_worker_st* _shell; | 141 | gearman_worker_st* _shell; |
289 | 137 | gearman_worker_st _owned_shell; | 142 | gearman_worker_st _owned_shell; |
290 | 138 | 143 | ||
291 | === modified file 'libgearman/job.cc' | |||
292 | --- libgearman/job.cc 2013-07-03 04:42:18 +0000 | |||
293 | +++ libgearman/job.cc 2013-07-05 22:08:31 +0000 | |||
294 | @@ -191,7 +191,7 @@ | |||
295 | 191 | job->options.finished= false; | 191 | job->options.finished= false; |
296 | 192 | 192 | ||
297 | 193 | job->reducer= NULL; | 193 | job->reducer= NULL; |
299 | 194 | job->error_code= GEARMAN_UNKNOWN_STATE; | 194 | job->_error_code= GEARMAN_UNKNOWN_STATE; |
300 | 195 | 195 | ||
301 | 196 | if (job->_worker.job_list) | 196 | if (job->_worker.job_list) |
302 | 197 | { | 197 | { |
303 | @@ -456,7 +456,6 @@ | |||
304 | 456 | { | 456 | { |
305 | 457 | return ret; | 457 | return ret; |
306 | 458 | } | 458 | } |
307 | 459 | |||
308 | 460 | job->finished(true); | 459 | job->finished(true); |
309 | 461 | } | 460 | } |
310 | 462 | 461 | ||
311 | @@ -488,7 +487,13 @@ | |||
312 | 488 | job->options.work_in_use= true; | 487 | job->options.work_in_use= true; |
313 | 489 | } | 488 | } |
314 | 490 | 489 | ||
316 | 491 | return _job_send(job); | 490 | if (gearman_failed(_job_send(job))) |
317 | 491 | { | ||
318 | 492 | return job->error_code(); | ||
319 | 493 | } | ||
320 | 494 | #if 0 | ||
321 | 495 | job->finished(true); | ||
322 | 496 | #endif | ||
323 | 492 | } | 497 | } |
324 | 493 | 498 | ||
325 | 494 | return GEARMAN_SUCCESS; | 499 | return GEARMAN_SUCCESS; |
326 | 495 | 500 | ||
327 | === modified file 'libgearman/job.hpp' | |||
328 | --- libgearman/job.hpp 2013-07-02 23:51:10 +0000 | |||
329 | +++ libgearman/job.hpp 2013-07-05 22:08:31 +0000 | |||
330 | @@ -69,10 +69,20 @@ | |||
331 | 69 | gearman_packet_st assigned; | 69 | gearman_packet_st assigned; |
332 | 70 | gearman_packet_st work; | 70 | gearman_packet_st work; |
333 | 71 | struct gearman_job_reducer_st *reducer; | 71 | struct gearman_job_reducer_st *reducer; |
335 | 72 | gearman_return_t error_code; | 72 | gearman_return_t _error_code; |
336 | 73 | 73 | ||
337 | 74 | gearman_universal_st& universal() | 74 | gearman_universal_st& universal() |
338 | 75 | { | 75 | { |
339 | 76 | return _worker.universal; | 76 | return _worker.universal; |
340 | 77 | } | 77 | } |
341 | 78 | |||
342 | 79 | gearman_universal_st& universal() const | ||
343 | 80 | { | ||
344 | 81 | return _worker.universal; | ||
345 | 82 | } | ||
346 | 83 | |||
347 | 84 | gearman_return_t error_code() const | ||
348 | 85 | { | ||
349 | 86 | return universal().error_code(); | ||
350 | 87 | } | ||
351 | 78 | }; | 88 | }; |
352 | 79 | 89 | ||
353 | === modified file 'libgearman/worker.cc' | |||
354 | --- libgearman/worker.cc 2013-07-02 23:51:10 +0000 | |||
355 | +++ libgearman/worker.cc 2013-07-05 22:08:31 +0000 | |||
356 | @@ -1043,19 +1043,19 @@ | |||
357 | 1043 | static_cast<void *>(worker->impl()->work_function->context))) | 1043 | static_cast<void *>(worker->impl()->work_function->context))) |
358 | 1044 | { | 1044 | { |
359 | 1045 | case GEARMAN_FUNCTION_INVALID_ARGUMENT: | 1045 | case GEARMAN_FUNCTION_INVALID_ARGUMENT: |
361 | 1046 | worker->impl()->work_job->error_code= gearman_error(worker->impl()->universal, GEARMAN_INVALID_ARGUMENT, "worker returned an invalid response, gearman_return_t"); | 1046 | worker->impl()->work_job->_error_code= gearman_error(worker->impl()->universal, GEARMAN_INVALID_ARGUMENT, "worker returned an invalid response, gearman_return_t"); |
362 | 1047 | case GEARMAN_FUNCTION_FATAL: | 1047 | case GEARMAN_FUNCTION_FATAL: |
363 | 1048 | if (gearman_job_send_fail_fin(worker->impl()->work_job) == GEARMAN_LOST_CONNECTION) // If we fail this, we have no connection, @note this causes us to lose the current error | 1048 | if (gearman_job_send_fail_fin(worker->impl()->work_job) == GEARMAN_LOST_CONNECTION) // If we fail this, we have no connection, @note this causes us to lose the current error |
364 | 1049 | { | 1049 | { |
366 | 1050 | worker->impl()->work_job->error_code= GEARMAN_LOST_CONNECTION; | 1050 | worker->impl()->work_job->_error_code= GEARMAN_LOST_CONNECTION; |
367 | 1051 | break; | 1051 | break; |
368 | 1052 | } | 1052 | } |
369 | 1053 | worker->impl()->work_state= GEARMAN_WORKER_WORK_UNIVERSAL_FAIL; | 1053 | worker->impl()->work_state= GEARMAN_WORKER_WORK_UNIVERSAL_FAIL; |
371 | 1054 | return worker->impl()->work_job->error_code; | 1054 | return worker->impl()->work_job->_error_code; |
372 | 1055 | 1055 | ||
373 | 1056 | case GEARMAN_FUNCTION_ERROR: // retry | 1056 | case GEARMAN_FUNCTION_ERROR: // retry |
374 | 1057 | gearman_reset(worker->impl()->universal); | 1057 | gearman_reset(worker->impl()->universal); |
376 | 1058 | worker->impl()->work_job->error_code= GEARMAN_LOST_CONNECTION; | 1058 | worker->impl()->work_job->_error_code= GEARMAN_LOST_CONNECTION; |
377 | 1059 | break; | 1059 | break; |
378 | 1060 | 1060 | ||
379 | 1061 | case GEARMAN_FUNCTION_SHUTDOWN: | 1061 | case GEARMAN_FUNCTION_SHUTDOWN: |
380 | @@ -1065,7 +1065,7 @@ | |||
381 | 1065 | break; | 1065 | break; |
382 | 1066 | } | 1066 | } |
383 | 1067 | 1067 | ||
385 | 1068 | if (worker->impl()->work_job->error_code == GEARMAN_LOST_CONNECTION) | 1068 | if (worker->impl()->work_job->_error_code == GEARMAN_LOST_CONNECTION) |
386 | 1069 | { | 1069 | { |
387 | 1070 | break; | 1070 | break; |
388 | 1071 | } | 1071 | } |
389 | @@ -1073,12 +1073,12 @@ | |||
390 | 1073 | 1073 | ||
391 | 1074 | case GEARMAN_WORKER_WORK_UNIVERSAL_COMPLETE: | 1074 | case GEARMAN_WORKER_WORK_UNIVERSAL_COMPLETE: |
392 | 1075 | { | 1075 | { |
394 | 1076 | worker->impl()->work_job->error_code= gearman_job_send_complete_fin(worker->impl()->work_job, | 1076 | worker->impl()->work_job->_error_code= gearman_job_send_complete_fin(worker->impl()->work_job, |
395 | 1077 | worker->impl()->work_result, worker->impl()->work_result_size); | 1077 | worker->impl()->work_result, worker->impl()->work_result_size); |
397 | 1078 | if (worker->impl()->work_job->error_code == GEARMAN_IO_WAIT) | 1078 | if (worker->impl()->work_job->_error_code == GEARMAN_IO_WAIT) |
398 | 1079 | { | 1079 | { |
399 | 1080 | worker->impl()->work_state= GEARMAN_WORKER_WORK_UNIVERSAL_COMPLETE; | 1080 | worker->impl()->work_state= GEARMAN_WORKER_WORK_UNIVERSAL_COMPLETE; |
401 | 1081 | return gearman_error(worker->impl()->universal, worker->impl()->work_job->error_code, | 1081 | return gearman_error(worker->impl()->universal, worker->impl()->work_job->_error_code, |
402 | 1082 | "A failure occurred after worker had successful complete, unless gearman_job_send_complete() was called directly by worker, client has not been informed of success."); | 1082 | "A failure occurred after worker had successful complete, unless gearman_job_send_complete() was called directly by worker, client has not been informed of success."); |
403 | 1083 | } | 1083 | } |
404 | 1084 | 1084 | ||
405 | @@ -1089,31 +1089,31 @@ | |||
406 | 1089 | } | 1089 | } |
407 | 1090 | 1090 | ||
408 | 1091 | // If we lost the connection, we retry the work, otherwise we error | 1091 | // If we lost the connection, we retry the work, otherwise we error |
410 | 1092 | if (worker->impl()->work_job->error_code == GEARMAN_LOST_CONNECTION) | 1092 | if (worker->impl()->work_job->_error_code == GEARMAN_LOST_CONNECTION) |
411 | 1093 | { | 1093 | { |
412 | 1094 | break; | 1094 | break; |
413 | 1095 | } | 1095 | } |
415 | 1096 | else if (worker->impl()->work_job->error_code == GEARMAN_SHUTDOWN) | 1096 | else if (worker->impl()->work_job->_error_code == GEARMAN_SHUTDOWN) |
416 | 1097 | { } | 1097 | { } |
418 | 1098 | else if (gearman_failed(worker->impl()->work_job->error_code)) | 1098 | else if (gearman_failed(worker->impl()->work_job->_error_code)) |
419 | 1099 | { | 1099 | { |
420 | 1100 | worker->impl()->work_state= GEARMAN_WORKER_WORK_UNIVERSAL_FAIL; | 1100 | worker->impl()->work_state= GEARMAN_WORKER_WORK_UNIVERSAL_FAIL; |
421 | 1101 | 1101 | ||
423 | 1102 | return worker->impl()->work_job->error_code; | 1102 | return worker->impl()->work_job->_error_code; |
424 | 1103 | } | 1103 | } |
425 | 1104 | } | 1104 | } |
426 | 1105 | break; | 1105 | break; |
427 | 1106 | 1106 | ||
428 | 1107 | case GEARMAN_WORKER_WORK_UNIVERSAL_FAIL: | 1107 | case GEARMAN_WORKER_WORK_UNIVERSAL_FAIL: |
429 | 1108 | { | 1108 | { |
431 | 1109 | if (gearman_failed(worker->impl()->work_job->error_code= gearman_job_send_fail_fin(worker->impl()->work_job))) | 1109 | if (gearman_failed(worker->impl()->work_job->_error_code= gearman_job_send_fail_fin(worker->impl()->work_job))) |
432 | 1110 | { | 1110 | { |
434 | 1111 | if (worker->impl()->work_job->error_code == GEARMAN_LOST_CONNECTION) | 1111 | if (worker->impl()->work_job->_error_code == GEARMAN_LOST_CONNECTION) |
435 | 1112 | { | 1112 | { |
436 | 1113 | break; | 1113 | break; |
437 | 1114 | } | 1114 | } |
438 | 1115 | 1115 | ||
440 | 1116 | return worker->impl()->work_job->error_code; | 1116 | return worker->impl()->work_job->_error_code; |
441 | 1117 | } | 1117 | } |
442 | 1118 | } | 1118 | } |
443 | 1119 | break; | 1119 | break; |
444 | 1120 | 1120 | ||
445 | === modified file 'tests/libgearman-1.0/worker_test.cc' | |||
446 | --- tests/libgearman-1.0/worker_test.cc 2013-06-27 22:00:23 +0000 | |||
447 | +++ tests/libgearman-1.0/worker_test.cc 2013-07-05 22:08:31 +0000 | |||
448 | @@ -759,6 +759,12 @@ | |||
449 | 759 | return TEST_SUCCESS; | 759 | return TEST_SUCCESS; |
450 | 760 | } | 760 | } |
451 | 761 | 761 | ||
452 | 762 | static gearman_return_t exception_fn(gearman_task_st* task) | ||
453 | 763 | { | ||
454 | 764 | Out << "Task Handle: " << gearman_task_job_handle(task); | ||
455 | 765 | return GEARMAN_SUCCESS; | ||
456 | 766 | } | ||
457 | 767 | |||
458 | 762 | static test_return_t gearman_job_send_exception_mass_TEST(void *) | 768 | static test_return_t gearman_job_send_exception_mass_TEST(void *) |
459 | 763 | { | 769 | { |
460 | 764 | gearman_function_t call_exception_WORKER_FN= gearman_function_create(call_exception_WORKER); | 770 | gearman_function_t call_exception_WORKER_FN= gearman_function_create(call_exception_WORKER); |
461 | @@ -772,6 +778,10 @@ | |||
462 | 772 | 778 | ||
463 | 773 | std::vector<gearman_task_st*> tasks; | 779 | std::vector<gearman_task_st*> tasks; |
464 | 774 | libgearman::Client client(libtest::default_port()); | 780 | libgearman::Client client(libtest::default_port()); |
465 | 781 | |||
466 | 782 | gearman_exception_fn *func= exception_fn; | ||
467 | 783 | gearman_client_set_exception_fn(&client, func); | ||
468 | 784 | |||
469 | 775 | for (size_t x= 0; x < 100; ++x) | 785 | for (size_t x= 0; x < 100; ++x) |
470 | 776 | { | 786 | { |
471 | 777 | char buffer[GEARMAN_MAXIMUM_INTEGER_DISPLAY_LENGTH]; | 787 | char buffer[GEARMAN_MAXIMUM_INTEGER_DISPLAY_LENGTH]; |
472 | @@ -1371,14 +1381,17 @@ | |||
473 | 1371 | max_block_size= 24; | 1381 | max_block_size= 24; |
474 | 1372 | } | 1382 | } |
475 | 1373 | 1383 | ||
476 | 1384 | libtest::vchar_t workload; | ||
477 | 1385 | libtest::vchar::make(workload, block_size); | ||
478 | 1386 | |||
479 | 1374 | for (size_t x= 1; x < max_block_size; ++x) | 1387 | for (size_t x= 1; x < max_block_size; ++x) |
480 | 1375 | { | 1388 | { |
481 | 1376 | if (valgrind_is_caller() and (x * block_size) > 15728640) | 1389 | if (valgrind_is_caller() and (x * block_size) > 15728640) |
482 | 1377 | { | 1390 | { |
483 | 1378 | continue; | 1391 | continue; |
484 | 1379 | } | 1392 | } |
487 | 1380 | libtest::vchar_t workload; | 1393 | |
488 | 1381 | libtest::vchar::make(workload, x * block_size); | 1394 | workload.resize(x * block_size); |
489 | 1382 | 1395 | ||
490 | 1383 | gearman_argument_t value= gearman_argument_make(0, 0, vchar_param(workload)); | 1396 | gearman_argument_t value= gearman_argument_make(0, 0, vchar_param(workload)); |
491 | 1384 | 1397 | ||
492 | @@ -1403,7 +1416,7 @@ | |||
493 | 1403 | gearman_task_return(task)); | 1416 | gearman_task_return(task)); |
494 | 1404 | 1417 | ||
495 | 1405 | gearman_result_st *result= gearman_task_result(task); | 1418 | gearman_result_st *result= gearman_task_result(task); |
497 | 1406 | test_true(result); | 1419 | ASSERT_TRUE(result); |
498 | 1407 | ASSERT_EQ(gearman_result_size(result), workload.size()); | 1420 | ASSERT_EQ(gearman_result_size(result), workload.size()); |
499 | 1408 | } | 1421 | } |
500 | 1409 | 1422 |