00001
00002
00003
00004
00005
00006
00007
00008
00014 #ifndef __GEARMAN_CONSTANTS_H__
00015 #define __GEARMAN_CONSTANTS_H__
00016
00017 #ifdef __cplusplus
00018 extern "C" {
00019 #endif
00020
00026
00027 #define GEARMAN_DEFAULT_TCP_HOST "127.0.0.1"
00028 #define GEARMAN_DEFAULT_TCP_PORT 4730
00029 #define GEARMAN_DEFAULT_SOCKET_TIMEOUT 10
00030 #define GEARMAN_DEFAULT_SOCKET_SEND_SIZE 32768
00031 #define GEARMAN_DEFAULT_SOCKET_RECV_SIZE 32768
00032 #define GEARMAN_MAX_ERROR_SIZE 1024
00033 #define GEARMAN_PACKET_HEADER_SIZE 12
00034 #define GEARMAN_JOB_HANDLE_SIZE 64
00035 #define GEARMAN_OPTION_SIZE 64
00036 #define GEARMAN_UNIQUE_SIZE 64
00037 #define GEARMAN_MAX_COMMAND_ARGS 8
00038 #define GEARMAN_ARGS_BUFFER_SIZE 128
00039 #define GEARMAN_SEND_BUFFER_SIZE 8192
00040 #define GEARMAN_RECV_BUFFER_SIZE 8192
00041 #define GEARMAN_WORKER_WAIT_TIMEOUT (10 * 1000)
00042
00043
00044 typedef struct gearman_st gearman_st;
00045 typedef struct gearman_con_st gearman_con_st;
00046 typedef struct gearman_packet_st gearman_packet_st;
00047 typedef struct gearman_command_info_st gearman_command_info_st;
00048 typedef struct gearman_task_st gearman_task_st;
00049 typedef struct gearman_client_st gearman_client_st;
00050 typedef struct gearman_job_st gearman_job_st;
00051 typedef struct gearman_worker_st gearman_worker_st;
00052 typedef struct gearman_worker_function_st gearman_worker_function_st;
00053
00057 typedef enum
00058 {
00059 GEARMAN_SUCCESS,
00060 GEARMAN_IO_WAIT,
00061 GEARMAN_SHUTDOWN,
00062 GEARMAN_SHUTDOWN_GRACEFUL,
00063 GEARMAN_ERRNO,
00064 GEARMAN_EVENT,
00065 GEARMAN_TOO_MANY_ARGS,
00066 GEARMAN_NO_ACTIVE_FDS,
00067 GEARMAN_INVALID_MAGIC,
00068 GEARMAN_INVALID_COMMAND,
00069 GEARMAN_INVALID_PACKET,
00070 GEARMAN_UNEXPECTED_PACKET,
00071 GEARMAN_GETADDRINFO,
00072 GEARMAN_NO_SERVERS,
00073 GEARMAN_LOST_CONNECTION,
00074 GEARMAN_MEMORY_ALLOCATION_FAILURE,
00075 GEARMAN_JOB_EXISTS,
00076 GEARMAN_JOB_QUEUE_FULL,
00077 GEARMAN_SERVER_ERROR,
00078 GEARMAN_WORK_ERROR,
00079 GEARMAN_WORK_DATA,
00080 GEARMAN_WORK_WARNING,
00081 GEARMAN_WORK_STATUS,
00082 GEARMAN_WORK_EXCEPTION,
00083 GEARMAN_WORK_FAIL,
00084 GEARMAN_NOT_CONNECTED,
00085 GEARMAN_COULD_NOT_CONNECT,
00086 GEARMAN_SEND_IN_PROGRESS,
00087 GEARMAN_RECV_IN_PROGRESS,
00088 GEARMAN_NOT_FLUSHING,
00089 GEARMAN_DATA_TOO_LARGE,
00090 GEARMAN_INVALID_FUNCTION_NAME,
00091 GEARMAN_INVALID_WORKER_FUNCTION,
00092 GEARMAN_NO_REGISTERED_FUNCTIONS,
00093 GEARMAN_NO_JOBS,
00094 GEARMAN_ECHO_DATA_CORRUPTION,
00095 GEARMAN_NEED_WORKLOAD_FN,
00096 GEARMAN_PAUSE,
00097 GEARMAN_UNKNOWN_STATE,
00098 GEARMAN_PTHREAD,
00099 GEARMAN_PIPE_EOF,
00100 GEARMAN_QUEUE_ERROR,
00101 GEARMAN_FLUSH_DATA,
00102 GEARMAN_SEND_BUFFER_TOO_SMALL,
00103 GEARMAN_IGNORE_PACKET,
00104 GEARMAN_UNKNOWN_OPTION,
00105 GEARMAN_TIMEOUT,
00106 GEARMAN_MAX_RETURN
00107 } gearman_return_t;
00108
00112 typedef enum
00113 {
00114 GEARMAN_VERBOSE_FATAL,
00115 GEARMAN_VERBOSE_ERROR,
00116 GEARMAN_VERBOSE_INFO,
00117 GEARMAN_VERBOSE_DEBUG,
00118 GEARMAN_VERBOSE_CRAZY,
00119 GEARMAN_VERBOSE_MAX
00120 } gearman_verbose_t;
00121
00128 typedef enum
00129 {
00130 GEARMAN_ALLOCATED= (1 << 0),
00131 GEARMAN_NON_BLOCKING= (1 << 1),
00132 GEARMAN_DONT_TRACK_PACKETS= (1 << 2)
00133 } gearman_options_t;
00134
00139 typedef enum
00140 {
00141 GEARMAN_CON_ALLOCATED= (1 << 0),
00142 GEARMAN_CON_READY= (1 << 1),
00143 GEARMAN_CON_PACKET_IN_USE= (1 << 2),
00144 GEARMAN_CON_EXTERNAL_FD= (1 << 3),
00145 GEARMAN_CON_IGNORE_LOST_CONNECTION= (1 << 4),
00146 GEARMAN_CON_CLOSE_AFTER_FLUSH= (1 << 5)
00147 } gearman_con_options_t;
00148
00153 typedef enum
00154 {
00155 GEARMAN_CON_STATE_ADDRINFO,
00156 GEARMAN_CON_STATE_CONNECT,
00157 GEARMAN_CON_STATE_CONNECTING,
00158 GEARMAN_CON_STATE_CONNECTED
00159 } gearman_con_state_t;
00160
00165 typedef enum
00166 {
00167 GEARMAN_CON_SEND_STATE_NONE,
00168 GEARMAN_CON_SEND_STATE_PRE_FLUSH,
00169 GEARMAN_CON_SEND_STATE_FORCE_FLUSH,
00170 GEARMAN_CON_SEND_STATE_FLUSH,
00171 GEARMAN_CON_SEND_STATE_FLUSH_DATA
00172 } gearman_con_send_state_t;
00173
00178 typedef enum
00179 {
00180 GEARMAN_CON_RECV_STATE_NONE,
00181 GEARMAN_CON_RECV_STATE_READ,
00182 GEARMAN_CON_RECV_STATE_READ_DATA
00183 } gearman_con_recv_state_t;
00184
00189 typedef enum
00190 {
00191 GEARMAN_PACKET_ALLOCATED= (1 << 0),
00192 GEARMAN_PACKET_COMPLETE= (1 << 1),
00193 GEARMAN_PACKET_FREE_DATA= (1 << 2)
00194 } gearman_packet_options_t;
00195
00200 typedef enum
00201 {
00202 GEARMAN_MAGIC_TEXT,
00203 GEARMAN_MAGIC_REQUEST,
00204 GEARMAN_MAGIC_RESPONSE
00205 } gearman_magic_t;
00206
00212 typedef enum
00213 {
00214 GEARMAN_COMMAND_TEXT,
00215 GEARMAN_COMMAND_CAN_DO,
00216 GEARMAN_COMMAND_CANT_DO,
00217 GEARMAN_COMMAND_RESET_ABILITIES,
00218 GEARMAN_COMMAND_PRE_SLEEP,
00219 GEARMAN_COMMAND_UNUSED,
00220 GEARMAN_COMMAND_NOOP,
00221 GEARMAN_COMMAND_SUBMIT_JOB,
00222 GEARMAN_COMMAND_JOB_CREATED,
00223 GEARMAN_COMMAND_GRAB_JOB,
00224 GEARMAN_COMMAND_NO_JOB,
00225 GEARMAN_COMMAND_JOB_ASSIGN,
00226 GEARMAN_COMMAND_WORK_STATUS,
00227 GEARMAN_COMMAND_WORK_COMPLETE,
00228 GEARMAN_COMMAND_WORK_FAIL,
00229 GEARMAN_COMMAND_GET_STATUS,
00230 GEARMAN_COMMAND_ECHO_REQ,
00231 GEARMAN_COMMAND_ECHO_RES,
00232 GEARMAN_COMMAND_SUBMIT_JOB_BG,
00233 GEARMAN_COMMAND_ERROR,
00234 GEARMAN_COMMAND_STATUS_RES,
00235 GEARMAN_COMMAND_SUBMIT_JOB_HIGH,
00236 GEARMAN_COMMAND_SET_CLIENT_ID,
00237 GEARMAN_COMMAND_CAN_DO_TIMEOUT,
00238 GEARMAN_COMMAND_ALL_YOURS,
00239 GEARMAN_COMMAND_WORK_EXCEPTION,
00240 GEARMAN_COMMAND_OPTION_REQ,
00241 GEARMAN_COMMAND_OPTION_RES,
00242 GEARMAN_COMMAND_WORK_DATA,
00243 GEARMAN_COMMAND_WORK_WARNING,
00244 GEARMAN_COMMAND_GRAB_JOB_UNIQ,
00245 GEARMAN_COMMAND_JOB_ASSIGN_UNIQ,
00246 GEARMAN_COMMAND_SUBMIT_JOB_HIGH_BG,
00247 GEARMAN_COMMAND_SUBMIT_JOB_LOW,
00248 GEARMAN_COMMAND_SUBMIT_JOB_LOW_BG,
00249 GEARMAN_COMMAND_SUBMIT_JOB_SCHED,
00250 GEARMAN_COMMAND_SUBMIT_JOB_EPOCH,
00251 GEARMAN_COMMAND_MAX
00252 } gearman_command_t;
00253
00258 typedef enum
00259 {
00260 GEARMAN_TASK_ALLOCATED= (1 << 0),
00261 GEARMAN_TASK_SEND_IN_USE= (1 << 1)
00262 } gearman_task_options_t;
00263
00268 typedef enum
00269 {
00270 GEARMAN_TASK_STATE_NEW,
00271 GEARMAN_TASK_STATE_SUBMIT,
00272 GEARMAN_TASK_STATE_WORKLOAD,
00273 GEARMAN_TASK_STATE_WORK,
00274 GEARMAN_TASK_STATE_CREATED,
00275 GEARMAN_TASK_STATE_DATA,
00276 GEARMAN_TASK_STATE_WARNING,
00277 GEARMAN_TASK_STATE_STATUS,
00278 GEARMAN_TASK_STATE_COMPLETE,
00279 GEARMAN_TASK_STATE_EXCEPTION,
00280 GEARMAN_TASK_STATE_FAIL,
00281 GEARMAN_TASK_STATE_FINISHED
00282 } gearman_task_state_t;
00283
00288 typedef enum
00289 {
00290 GEARMAN_JOB_ALLOCATED= (1 << 0),
00291 GEARMAN_JOB_ASSIGNED_IN_USE= (1 << 1),
00292 GEARMAN_JOB_WORK_IN_USE= (1 << 2),
00293 GEARMAN_JOB_FINISHED= (1 << 3)
00294 } gearman_job_options_t;
00295
00300 typedef enum
00301 {
00302 GEARMAN_JOB_PRIORITY_HIGH,
00303 GEARMAN_JOB_PRIORITY_NORMAL,
00304 GEARMAN_JOB_PRIORITY_LOW,
00305 GEARMAN_JOB_PRIORITY_MAX
00306 } gearman_job_priority_t;
00307
00312 typedef enum
00313 {
00314 GEARMAN_CLIENT_ALLOCATED= (1 << 0),
00315 GEARMAN_CLIENT_NON_BLOCKING= (1 << 1),
00316 GEARMAN_CLIENT_TASK_IN_USE= (1 << 2),
00317 GEARMAN_CLIENT_UNBUFFERED_RESULT= (1 << 3),
00318 GEARMAN_CLIENT_NO_NEW= (1 << 4),
00319 GEARMAN_CLIENT_FREE_TASKS= (1 << 5)
00320 } gearman_client_options_t;
00321
00326 typedef enum
00327 {
00328 GEARMAN_CLIENT_STATE_IDLE,
00329 GEARMAN_CLIENT_STATE_NEW,
00330 GEARMAN_CLIENT_STATE_SUBMIT,
00331 GEARMAN_CLIENT_STATE_PACKET
00332 } gearman_client_state_t;
00333
00338 typedef enum
00339 {
00340 GEARMAN_WORKER_ALLOCATED= (1 << 0),
00341 GEARMAN_WORKER_NON_BLOCKING= (1 << 1),
00342 GEARMAN_WORKER_PACKET_INIT= (1 << 2),
00343 GEARMAN_WORKER_GRAB_JOB_IN_USE= (1 << 3),
00344 GEARMAN_WORKER_PRE_SLEEP_IN_USE= (1 << 4),
00345 GEARMAN_WORKER_WORK_JOB_IN_USE= (1 << 5),
00346 GEARMAN_WORKER_CHANGE= (1 << 6),
00347 GEARMAN_WORKER_GRAB_UNIQ= (1 << 7),
00348 GEARMAN_WORKER_TIMEOUT_RETURN= (1 << 8)
00349 } gearman_worker_options_t;
00350
00355 typedef enum
00356 {
00357 GEARMAN_WORKER_STATE_START,
00358 GEARMAN_WORKER_STATE_FUNCTION_SEND,
00359 GEARMAN_WORKER_STATE_CONNECT,
00360 GEARMAN_WORKER_STATE_GRAB_JOB_SEND,
00361 GEARMAN_WORKER_STATE_GRAB_JOB_RECV,
00362 GEARMAN_WORKER_STATE_PRE_SLEEP
00363 } gearman_worker_state_t;
00364
00369 typedef enum
00370 {
00371 GEARMAN_WORKER_FUNCTION_PACKET_IN_USE= (1 << 0),
00372 GEARMAN_WORKER_FUNCTION_CHANGE= (1 << 1),
00373 GEARMAN_WORKER_FUNCTION_REMOVE= (1 << 2)
00374 } gearman_worker_function_options_t;
00375
00380 typedef enum
00381 {
00382 GEARMAN_WORKER_WORK_STATE_GRAB_JOB,
00383 GEARMAN_WORKER_WORK_STATE_FUNCTION,
00384 GEARMAN_WORKER_WORK_STATE_COMPLETE,
00385 GEARMAN_WORKER_WORK_STATE_FAIL
00386 } gearman_worker_work_state_t;
00387
00393
00394 typedef gearman_return_t (gearman_workload_fn)(gearman_task_st *task);
00395 typedef gearman_return_t (gearman_created_fn)(gearman_task_st *task);
00396 typedef gearman_return_t (gearman_data_fn)(gearman_task_st *task);
00397 typedef gearman_return_t (gearman_warning_fn)(gearman_task_st *task);
00398 typedef gearman_return_t (gearman_status_fn)(gearman_task_st *task);
00399 typedef gearman_return_t (gearman_complete_fn)(gearman_task_st *task);
00400 typedef gearman_return_t (gearman_exception_fn)(gearman_task_st *task);
00401 typedef gearman_return_t (gearman_fail_fn)(gearman_task_st *task);
00402
00403 typedef gearman_return_t (gearman_parse_server_fn)(const char *host,
00404 in_port_t port,
00405 void *context);
00406
00407 typedef void* (gearman_worker_fn)(gearman_job_st *job, void *context,
00408 size_t *result_size,
00409 gearman_return_t *ret_ptr);
00410
00411 typedef gearman_return_t (gearman_event_watch_fn)(gearman_con_st *con,
00412 short events, void *context);
00413
00414 typedef void* (gearman_malloc_fn)(size_t size, void *context);
00415 typedef void (gearman_free_fn)(void *ptr, void *context);
00416
00417 typedef void (gearman_task_context_free_fn)(gearman_task_st *task,
00418 void *context);
00419
00420 typedef void (gearman_log_fn)(const char *line, gearman_verbose_t verbose,
00421 void *context);
00422
00423 typedef void (gearman_con_protocol_context_free_fn)(gearman_con_st *con,
00424 void *context);
00425
00426 typedef size_t (gearman_packet_pack_fn)(const gearman_packet_st *packet,
00427 gearman_con_st *con,
00428 void *data, size_t data_size,
00429 gearman_return_t *ret_ptr);
00430 typedef size_t (gearman_packet_unpack_fn)(gearman_packet_st *packet,
00431 gearman_con_st *con, const void *data,
00432 size_t data_size,
00433 gearman_return_t *ret_ptr);
00434
00437 #ifdef __cplusplus
00438 }
00439 #endif
00440
00441 #endif