1 /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2 *
3 * Gearmand client and server library.
4 *
5 * Copyright (C) 2011 Data Differential, http://datadifferential.com/
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are
10 * met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * * Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following disclaimer
17 * in the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * * The names of its contributors may not be used to endorse or
21 * promote products derived from this software without specific prior
22 * written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 *
36 */
37
38 #include "gear_config.h"
39 #include <libgearman/common.h>
40
41 #include <libgearman/packet.hpp>
42 #include <libgearman/function/base.hpp>
43 #include <libgearman/function/function_v2.hpp>
44
45 /*
46 FunctionV2 function
47 */
callback(gearman_job_st * job,void * context_arg)48 gearman_function_error_t FunctionV2::callback(gearman_job_st* job, void *context_arg)
49 {
50 if (gearman_job_is_map(job))
51 {
52 gearman_job_build_reducer(job, NULL);
53 }
54
55 gearman_return_t error= _function(job, context_arg);
56 switch (error)
57 {
58 case GEARMAN_SHUTDOWN:
59 job->error_code= GEARMAN_SUCCESS;
60 return GEARMAN_FUNCTION_SHUTDOWN;
61
62 case GEARMAN_FATAL:
63 job->error_code= GEARMAN_FATAL;
64 return GEARMAN_FUNCTION_FATAL;
65
66 case GEARMAN_ERROR:
67 job->error_code= GEARMAN_ERROR;
68 return GEARMAN_FUNCTION_ERROR;
69
70 case GEARMAN_SUCCESS:
71 job->error_code= GEARMAN_SUCCESS;
72 return GEARMAN_FUNCTION_SUCCESS;
73
74 case GEARMAN_IO_WAIT:
75 case GEARMAN_SHUTDOWN_GRACEFUL:
76 case GEARMAN_ERRNO:
77 case GEARMAN_EVENT:
78 case GEARMAN_TOO_MANY_ARGS:
79 case GEARMAN_NO_ACTIVE_FDS:
80 case GEARMAN_INVALID_MAGIC:
81 case GEARMAN_INVALID_COMMAND:
82 case GEARMAN_INVALID_PACKET:
83 case GEARMAN_UNEXPECTED_PACKET:
84 case GEARMAN_GETADDRINFO:
85 case GEARMAN_NO_SERVERS:
86 case GEARMAN_LOST_CONNECTION:
87 case GEARMAN_MEMORY_ALLOCATION_FAILURE:
88 case GEARMAN_JOB_EXISTS:
89 case GEARMAN_JOB_QUEUE_FULL:
90 case GEARMAN_SERVER_ERROR:
91 case GEARMAN_WORK_DATA:
92 case GEARMAN_WORK_WARNING:
93 case GEARMAN_WORK_STATUS:
94 case GEARMAN_WORK_EXCEPTION:
95 case GEARMAN_NOT_CONNECTED:
96 case GEARMAN_COULD_NOT_CONNECT:
97 case GEARMAN_SEND_IN_PROGRESS:
98 case GEARMAN_RECV_IN_PROGRESS:
99 case GEARMAN_NOT_FLUSHING:
100 case GEARMAN_DATA_TOO_LARGE:
101 case GEARMAN_INVALID_FUNCTION_NAME:
102 case GEARMAN_INVALID_WORKER_FUNCTION:
103 case GEARMAN_NO_REGISTERED_FUNCTION:
104 case GEARMAN_NO_REGISTERED_FUNCTIONS:
105 case GEARMAN_NO_JOBS:
106 case GEARMAN_ECHO_DATA_CORRUPTION:
107 case GEARMAN_NEED_WORKLOAD_FN:
108 case GEARMAN_PAUSE:
109 case GEARMAN_UNKNOWN_STATE:
110 case GEARMAN_PTHREAD:
111 case GEARMAN_PIPE_EOF:
112 case GEARMAN_QUEUE_ERROR:
113 case GEARMAN_FLUSH_DATA:
114 case GEARMAN_SEND_BUFFER_TOO_SMALL:
115 case GEARMAN_IGNORE_PACKET:
116 case GEARMAN_UNKNOWN_OPTION:
117 case GEARMAN_TIMEOUT:
118 case GEARMAN_ARGUMENT_TOO_LARGE:
119 case GEARMAN_INVALID_ARGUMENT:
120 case GEARMAN_IN_PROGRESS:
121 case GEARMAN_INVALID_SERVER_OPTION:
122 case GEARMAN_MAX_RETURN:
123 break;
124 }
125
126 return GEARMAN_FUNCTION_INVALID_ARGUMENT;
127 }
128