1
/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
* Gearmand client and server library.
5
* Copyright (C) 2011 Data Differential, http://datadifferential.com/
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions are
12
* * Redistributions of source code must retain the above copyright
13
* notice, this list of conditions and the following disclaimer.
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
20
* * The names of its contributors may not be used to endorse or
21
* promote products derived from this software without specific prior
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.
38
#include <libgearman/common.h>
40
#include <libgearman/packet.hpp>
41
#include <libgearman/function/base.hpp>
42
#include <libgearman/function/partition.hpp>
47
gearman_function_error_t Partition::callback(gearman_job_st* job, void *context_arg)
49
if (gearman_job_is_map(job))
51
gearman_job_build_reducer(job, aggregator_fn);
54
gearman_return_t error= _partition_fn(job, context_arg);
58
job->error_code= GEARMAN_FATAL;
59
return GEARMAN_FUNCTION_FATAL;
61
case GEARMAN_SHUTDOWN:
62
job->error_code= GEARMAN_SUCCESS;
63
return GEARMAN_FUNCTION_SHUTDOWN;
66
job->error_code= GEARMAN_ERROR;
67
return GEARMAN_FUNCTION_ERROR;
70
job->error_code= GEARMAN_SUCCESS;
71
return GEARMAN_FUNCTION_SUCCESS;
74
case GEARMAN_SHUTDOWN_GRACEFUL:
77
case GEARMAN_TOO_MANY_ARGS:
78
case GEARMAN_NO_ACTIVE_FDS:
79
case GEARMAN_INVALID_MAGIC:
80
case GEARMAN_INVALID_COMMAND:
81
case GEARMAN_INVALID_PACKET:
82
case GEARMAN_UNEXPECTED_PACKET:
83
case GEARMAN_GETADDRINFO:
84
case GEARMAN_NO_SERVERS:
85
case GEARMAN_LOST_CONNECTION:
86
case GEARMAN_MEMORY_ALLOCATION_FAILURE:
87
case GEARMAN_JOB_EXISTS:
88
case GEARMAN_JOB_QUEUE_FULL:
89
case GEARMAN_SERVER_ERROR:
90
case GEARMAN_WORK_DATA:
91
case GEARMAN_WORK_WARNING:
92
case GEARMAN_WORK_STATUS:
93
case GEARMAN_WORK_EXCEPTION:
94
case GEARMAN_NOT_CONNECTED:
95
case GEARMAN_COULD_NOT_CONNECT:
96
case GEARMAN_SEND_IN_PROGRESS:
97
case GEARMAN_RECV_IN_PROGRESS:
98
case GEARMAN_NOT_FLUSHING:
99
case GEARMAN_DATA_TOO_LARGE:
100
case GEARMAN_INVALID_FUNCTION_NAME:
101
case GEARMAN_INVALID_WORKER_FUNCTION:
102
case GEARMAN_NO_REGISTERED_FUNCTION:
103
case GEARMAN_NO_REGISTERED_FUNCTIONS:
104
case GEARMAN_NO_JOBS:
105
case GEARMAN_ECHO_DATA_CORRUPTION:
106
case GEARMAN_NEED_WORKLOAD_FN:
108
case GEARMAN_UNKNOWN_STATE:
109
case GEARMAN_PTHREAD:
110
case GEARMAN_PIPE_EOF:
111
case GEARMAN_QUEUE_ERROR:
112
case GEARMAN_FLUSH_DATA:
113
case GEARMAN_SEND_BUFFER_TOO_SMALL:
114
case GEARMAN_IGNORE_PACKET:
115
case GEARMAN_UNKNOWN_OPTION:
116
case GEARMAN_TIMEOUT:
117
case GEARMAN_ARGUMENT_TOO_LARGE:
118
case GEARMAN_INVALID_ARGUMENT:
119
case GEARMAN_IN_PROGRESS:
120
case GEARMAN_MAX_RETURN:
124
return GEARMAN_FUNCTION_INVALID_ARGUMENT;