Merge lp:~eday/gearmand/fixes into lp:gearmand/1.0

Proposed by Eric Day
Status: Superseded
Proposed branch: lp:~eday/gearmand/fixes
Merge into: lp:gearmand/1.0
Diff against target: 4072 lines
67 files modified
ChangeLog (+8/-0)
benchmark/blobslap_worker.c (+5/-5)
bin/gearman.c (+5/-5)
configure.ac (+3/-3)
docs/Doxyfile.api (+32/-4)
docs/Doxyfile.dev (+31/-1)
examples/reverse_worker.c (+5/-5)
examples/wc_worker.c (+3/-3)
gearmand/gearmand.c (+7/-0)
libgearman-server/client.h (+4/-2)
libgearman-server/common.h (+5/-3)
libgearman-server/conf.h (+3/-2)
libgearman-server/conf_module.h (+3/-2)
libgearman-server/conn.c (+1/-1)
libgearman-server/conn.h (+4/-2)
libgearman-server/constants.h (+31/-19)
libgearman-server/function.h (+4/-2)
libgearman-server/gearmand.c (+5/-0)
libgearman-server/gearmand.h (+13/-2)
libgearman-server/gearmand_con.c (+2/-2)
libgearman-server/gearmand_con.h (+6/-3)
libgearman-server/gearmand_thread.h (+5/-2)
libgearman-server/job.c (+24/-13)
libgearman-server/job.h (+4/-2)
libgearman-server/packet.c (+2/-2)
libgearman-server/packet.h (+4/-2)
libgearman-server/protocol_http.c (+7/-10)
libgearman-server/protocol_http.h (+6/-2)
libgearman-server/queue_libdrizzle.c (+4/-8)
libgearman-server/queue_libdrizzle.h (+2/-2)
libgearman-server/queue_libmemcached.c (+4/-8)
libgearman-server/queue_libmemcached.h (+2/-2)
libgearman-server/queue_libpq.c (+4/-8)
libgearman-server/queue_libpq.h (+2/-2)
libgearman-server/queue_libsqlite3.c (+4/-8)
libgearman-server/queue_libsqlite3.h (+2/-2)
libgearman-server/server.c (+9/-2)
libgearman-server/server.h (+13/-1)
libgearman-server/structs.h (+2/-1)
libgearman-server/thread.c (+1/-1)
libgearman-server/thread.h (+5/-2)
libgearman-server/worker.c (+28/-2)
libgearman-server/worker.h (+4/-2)
libgearman/Makefile.am (+2/-1)
libgearman/client.c (+64/-41)
libgearman/client.h (+5/-4)
libgearman/common.h (+2/-30)
libgearman/conn.c (+52/-53)
libgearman/conn.h (+5/-2)
libgearman/constants.h (+20/-13)
libgearman/gearman.c (+94/-91)
libgearman/gearman.h (+45/-33)
libgearman/gearman_local.h (+150/-0)
libgearman/job.c (+64/-36)
libgearman/job.h (+4/-2)
libgearman/packet.c (+9/-13)
libgearman/packet.h (+5/-2)
libgearman/structs.h (+1/-1)
libgearman/task.c (+2/-2)
libgearman/task.h (+4/-2)
libgearman/visibility.h (+4/-2)
libgearman/worker.c (+63/-54)
libgearman/worker.h (+3/-2)
tests/client_test.c (+7/-6)
tests/memcached_test.c (+1/-2)
tests/sqlite_test.c (+1/-2)
tests/worker_test.c (+80/-70)
To merge this branch: bzr merge lp:~eday/gearmand/fixes
Reviewer Review Type Date Requested Status
Gearman-developers Pending
Review via email: mp+14235@code.launchpad.net

This proposal has been superseded by a proposal from 2009-11-04.

To post a comment you must log in.
lp:~eday/gearmand/fixes updated
251. By Eric Day

Removed va_args packet add function, replaced with array passing.

252. By Eric Day

Merged trunk.

253. By Eric Day

Updated ChangeLog

254. By Eric Day

Small fixes for release while working with Monty on packaging.

255. By Eric Day

Fixed job handle compare for work_fail bug, added test case.

256. By Eric Day

Merged Monty's build fixes.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'ChangeLog'
--- ChangeLog 2009-09-28 17:47:34 +0000
+++ ChangeLog 2009-11-04 22:14:13 +0000
@@ -1,3 +1,11 @@
10.11 - 2009-11-03
2 * Added max wakeup-worker option to gearmand. Default is still to wakeup all.
3 * API and documentation cleanup.
4 * Fixed bug where task context free function was getting called for do()
5 functions. This was PECL/Gearman bug #16899 as well.
6 * Fixed bug #458912, not flushing with multiple gearmands in client.
7 * Fixed PECL/Gearman bug #16847, was actually in C library and not in PHP.
8
10.10 - 2009-09-2890.10 - 2009-09-28
2 * Added timeout option.10 * Added timeout option.
3 * Separated libgearman client/worker library from the server/gearmand code.11 * Separated libgearman client/worker library from the server/gearmand code.
412
=== modified file 'benchmark/blobslap_worker.c'
--- benchmark/blobslap_worker.c 2009-06-14 07:26:30 +0000
+++ benchmark/blobslap_worker.c 2009-11-04 22:14:13 +0000
@@ -13,8 +13,8 @@
1313
14#include "benchmark.h"14#include "benchmark.h"
1515
16static void *worker_fn(gearman_job_st *job, void *cb_arg, size_t *result_size,16static void *worker_fn(gearman_job_st *job, void *context,
17 gearman_return_t *ret_ptr);17 size_t *result_size, gearman_return_t *ret_ptr);
1818
19static void usage(char *name);19static void usage(char *name);
2020
@@ -130,10 +130,10 @@
130 return 0;130 return 0;
131}131}
132132
133static void *worker_fn(gearman_job_st *job, void *cb_arg, size_t *result_size,133static void *worker_fn(gearman_job_st *job, void *context,
134 gearman_return_t *ret_ptr)134 size_t *result_size, gearman_return_t *ret_ptr)
135{135{
136 gearman_benchmark_st *benchmark= (gearman_benchmark_st *)cb_arg;136 gearman_benchmark_st *benchmark= (gearman_benchmark_st *)context;
137137
138 (void)result_size;138 (void)result_size;
139139
140140
=== modified file 'bin/gearman.c'
--- bin/gearman.c 2009-09-28 17:47:34 +0000
+++ bin/gearman.c 2009-11-04 22:14:13 +0000
@@ -92,8 +92,8 @@
92/**92/**
93 * Callback function when worker gets a job.93 * Callback function when worker gets a job.
94 */94 */
95static void *_worker_cb(gearman_job_st *job, void *cb_arg, size_t *result_size,95static void *_worker_cb(gearman_job_st *job, void *context,
96 gearman_return_t *ret_ptr);96 size_t *result_size, gearman_return_t *ret_ptr);
9797
98/**98/**
99 * Read workload chunk from a file descriptor and put into allocated memory.99 * Read workload chunk from a file descriptor and put into allocated memory.
@@ -460,10 +460,10 @@
460 gearman_worker_free(&worker);460 gearman_worker_free(&worker);
461}461}
462462
463static void *_worker_cb(gearman_job_st *job, void *cb_arg, size_t *result_size,463static void *_worker_cb(gearman_job_st *job, void *context,
464 gearman_return_t *ret_ptr)464 size_t *result_size, gearman_return_t *ret_ptr)
465{465{
466 gearman_args_st *args= (gearman_args_st *)cb_arg;466 gearman_args_st *args= (gearman_args_st *)context;
467 int in_fds[2];467 int in_fds[2];
468 int out_fds[2];468 int out_fds[2];
469 char *result= NULL;469 char *result= NULL;
470470
=== modified file 'configure.ac'
--- configure.ac 2009-09-30 06:07:17 +0000
+++ configure.ac 2009-11-04 22:14:13 +0000
@@ -6,7 +6,7 @@
6# the COPYING file in this directory for full text.6# the COPYING file in this directory for full text.
77
8AC_PREREQ(2.59)8AC_PREREQ(2.59)
9AC_INIT([gearmand],[0.10],[https://launchpad.net/gearmand])9AC_INIT([gearmand],[0.11],[https://launchpad.net/gearmand])
10AC_CONFIG_SRCDIR(libgearman/gearman.c)10AC_CONFIG_SRCDIR(libgearman/gearman.c)
11AC_CONFIG_AUX_DIR(config)11AC_CONFIG_AUX_DIR(config)
12AC_CONFIG_HEADERS([config.h])12AC_CONFIG_HEADERS([config.h])
@@ -14,7 +14,7 @@
1414
15PANDORA_CANONICAL_TARGET(require-cxx)15PANDORA_CANONICAL_TARGET(require-cxx)
1616
17GEARMAN_LIBRARY_VERSION=2:0:017GEARMAN_LIBRARY_VERSION=2:1:0
18# | | |18# | | |
19# +------+ | +---+19# +------+ | +---+
20# | | |20# | | |
@@ -28,7 +28,7 @@
28# +- increment if interfaces have been added, removed or changed28# +- increment if interfaces have been added, removed or changed
29AC_SUBST(GEARMAN_LIBRARY_VERSION)29AC_SUBST(GEARMAN_LIBRARY_VERSION)
3030
31GEARMAN_SERVER_LIBRARY_VERSION=0:0:031GEARMAN_SERVER_LIBRARY_VERSION=0:1:0
32# | | |32# | | |
33# +------+ | +---+33# +------+ | +---+
34# | | |34# | | |
3535
=== modified file 'docs/Doxyfile.api'
--- docs/Doxyfile.api 2009-09-25 00:04:06 +0000
+++ docs/Doxyfile.api 2009-11-04 22:14:13 +0000
@@ -534,7 +534,35 @@
534# directories like "/usr/src/myproject". Separate the files or directories 534# directories like "/usr/src/myproject". Separate the files or directories
535# with spaces.535# with spaces.
536536
537INPUT = docs libgearman libgearman-server examples examples/reverse_client.c examples/reverse_client_bg.c examples/reverse_client_cb.c examples/reverse_worker.c537INPUT = docs/doxygen.h \
538 libgearman/constants.h \
539 libgearman/client.h \
540 libgearman/task.h \
541 libgearman/worker.h \
542 libgearman/job.h \
543 libgearman/gearman.h \
544 libgearman/conn.h \
545 libgearman/packet.h \
546 libgearman-server/constants.h \
547 libgearman-server/client.h \
548 libgearman-server/conf.h \
549 libgearman-server/conf_module.h \
550 libgearman-server/conn.h \
551 libgearman-server/function.h \
552 libgearman-server/job.h \
553 libgearman-server/packet.h \
554 libgearman-server/server.h \
555 libgearman-server/thread.h \
556 libgearman-server/worker.h \
557 libgearman-server/protocol_http.h \
558 libgearman-server/queue_libdrizzle.h \
559 libgearman-server/queue_libmemcached.h \
560 libgearman-server/queue_libpq.h \
561 libgearman-server/queue_libsqlite3.h \
562 libgearman-server/gearmand.h \
563 libgearman-server/gearmand_con.h \
564 libgearman-server/gearmand_thread.h \
565 examples
538566
539# This tag can be used to specify the character encoding of the source files 567# This tag can be used to specify the character encoding of the source files
540# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 568# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -551,7 +579,7 @@
551# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 579# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
552# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90580# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
553581
554FILE_PATTERNS = *.h582FILE_PATTERNS = *.h *.c
555583
556# The RECURSIVE tag can be used to turn specify whether or not subdirectories 584# The RECURSIVE tag can be used to turn specify whether or not subdirectories
557# should be searched for input files as well. Possible values are YES and NO. 585# should be searched for input files as well. Possible values are YES and NO.
@@ -563,7 +591,7 @@
563# excluded from the INPUT source files. This way you can easily exclude a 591# excluded from the INPUT source files. This way you can easily exclude a
564# subdirectory from a directory tree whose root is specified with the INPUT tag.592# subdirectory from a directory tree whose root is specified with the INPUT tag.
565593
566EXCLUDE = libgearman/common.h libgearman/structs.h libgearman-server/common.h libgearman-server/structs.h594EXCLUDE =
567595
568# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 596# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
569# directories that are symbolic links (a Unix filesystem feature) are excluded 597# directories that are symbolic links (a Unix filesystem feature) are excluded
@@ -747,7 +775,7 @@
747# each generated HTML page. If it is left blank doxygen will generate a 775# each generated HTML page. If it is left blank doxygen will generate a
748# standard footer.776# standard footer.
749777
750HTML_FOOTER =778HTML_FOOTER =
751779
752# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 780# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
753# style sheet that is used by each HTML page. It can be used to 781# style sheet that is used by each HTML page. It can be used to
754782
=== modified file 'docs/Doxyfile.dev'
--- docs/Doxyfile.dev 2009-09-25 00:04:06 +0000
+++ docs/Doxyfile.dev 2009-11-04 22:14:13 +0000
@@ -534,7 +534,37 @@
534# directories like "/usr/src/myproject". Separate the files or directories 534# directories like "/usr/src/myproject". Separate the files or directories
535# with spaces.535# with spaces.
536536
537INPUT = docs libgearman libgearman-server examples537INPUT = docs/doxygen.h \
538 libgearman/constants.h \
539 libgearman/client.h \
540 libgearman/task.h \
541 libgearman/worker.h \
542 libgearman/job.h \
543 libgearman/gearman.h \
544 libgearman/conn.h \
545 libgearman/packet.h \
546 libgearman \
547 libgearman-server/constants.h \
548 libgearman-server/client.h \
549 libgearman-server/conf.h \
550 libgearman-server/conf_module.h \
551 libgearman-server/conn.h \
552 libgearman-server/function.h \
553 libgearman-server/job.h \
554 libgearman-server/packet.h \
555 libgearman-server/server.h \
556 libgearman-server/thread.h \
557 libgearman-server/worker.h \
558 libgearman-server/protocol_http.h \
559 libgearman-server/queue_libdrizzle.h \
560 libgearman-server/queue_libmemcached.h \
561 libgearman-server/queue_libpq.h \
562 libgearman-server/queue_libsqlite3.h \
563 libgearman-server/gearmand.h \
564 libgearman-server/gearmand_con.h \
565 libgearman-server/gearmand_thread.h \
566 libgearman-server \
567 examples
538568
539# This tag can be used to specify the character encoding of the source files 569# This tag can be used to specify the character encoding of the source files
540# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 570# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
541571
=== modified file 'examples/reverse_worker.c'
--- examples/reverse_worker.c 2009-09-28 17:47:34 +0000
+++ examples/reverse_worker.c 2009-11-04 22:14:13 +0000
@@ -27,8 +27,8 @@
27 REVERSE_WORKER_OPTIONS_UNIQUE= (1 << 2)27 REVERSE_WORKER_OPTIONS_UNIQUE= (1 << 2)
28} reverse_worker_options_t;28} reverse_worker_options_t;
2929
30static void *reverse(gearman_job_st *job, void *cb_arg, size_t *result_size,30static void *reverse(gearman_job_st *job, void *context,
31 gearman_return_t *ret_ptr);31 size_t *result_size, gearman_return_t *ret_ptr);
3232
33static void usage(char *name);33static void usage(char *name);
3434
@@ -136,10 +136,10 @@
136 return 0;136 return 0;
137}137}
138138
139static void *reverse(gearman_job_st *job, void *cb_arg, size_t *result_size,139static void *reverse(gearman_job_st *job, void *context,
140 gearman_return_t *ret_ptr)140 size_t *result_size, gearman_return_t *ret_ptr)
141{141{
142 reverse_worker_options_t options= *((reverse_worker_options_t *)cb_arg);142 reverse_worker_options_t options= *((reverse_worker_options_t *)context);
143 const uint8_t *workload;143 const uint8_t *workload;
144 uint8_t *result;144 uint8_t *result;
145 size_t x;145 size_t x;
146146
=== modified file 'examples/wc_worker.c'
--- examples/wc_worker.c 2009-06-14 07:26:30 +0000
+++ examples/wc_worker.c 2009-11-04 22:14:14 +0000
@@ -19,7 +19,7 @@
1919
20#include <libgearman/gearman.h>20#include <libgearman/gearman.h>
2121
22static void *wc(gearman_job_st *job, void *cb_arg, size_t *result_size,22static void *wc(gearman_job_st *job, void *context, size_t *result_size,
23 gearman_return_t *ret_ptr);23 gearman_return_t *ret_ptr);
2424
25static void usage(char *name);25static void usage(char *name);
@@ -97,14 +97,14 @@
97 return 0;97 return 0;
98}98}
9999
100static void *wc(gearman_job_st *job, void *cb_arg, size_t *result_size,100static void *wc(gearman_job_st *job, void *context, size_t *result_size,
101 gearman_return_t *ret_ptr)101 gearman_return_t *ret_ptr)
102{102{
103 const uint8_t *workload;103 const uint8_t *workload;
104 uint8_t *result;104 uint8_t *result;
105 size_t x;105 size_t x;
106 uint64_t count= 0;106 uint64_t count= 0;
107 (void)cb_arg;107 (void)context;
108108
109 workload= gearman_job_workload(job);109 workload= gearman_job_workload(job);
110 *result_size= gearman_job_workload_size(job);110 *result_size= gearman_job_workload_size(job);
111111
=== modified file 'gearmand/gearmand.c'
--- gearmand/gearmand.c 2009-09-24 23:43:15 +0000
+++ gearmand/gearmand.c 2009-11-04 22:14:14 +0000
@@ -102,6 +102,7 @@
102 int backlog= GEARMAND_LISTEN_BACKLOG;102 int backlog= GEARMAND_LISTEN_BACKLOG;
103 rlim_t fds= 0;103 rlim_t fds= 0;
104 uint8_t job_retries= 0;104 uint8_t job_retries= 0;
105 uint8_t worker_wakeup= 0;
105 in_port_t port= 0;106 in_port_t port= 0;
106 const char *host= NULL;107 const char *host= NULL;
107 const char *pid_file= NULL;108 const char *pid_file= NULL;
@@ -157,6 +158,9 @@
157 MCO("user", 'u', "USER", "Switch to given user after startup.")158 MCO("user", 'u', "USER", "Switch to given user after startup.")
158 MCO("verbose", 'v', NULL, "Increase verbosity level by one.")159 MCO("verbose", 'v', NULL, "Increase verbosity level by one.")
159 MCO("version", 'V', NULL, "Display the version of gearmand and exit.")160 MCO("version", 'V', NULL, "Display the version of gearmand and exit.")
161 MCO("worker-wakeup", 'w', "WORKERS",
162 "Number of workers to wakeup for each job received. The default is to "
163 "wakeup all avaiable workers.")
160164
161 /* Make sure none of the gearman_conf_module_add_option calls failed. */165 /* Make sure none of the gearman_conf_module_add_option calls failed. */
162 if (gearman_conf_return(&conf) != GEARMAN_SUCCESS)166 if (gearman_conf_return(&conf) != GEARMAN_SUCCESS)
@@ -280,6 +284,8 @@
280 verbose++;284 verbose++;
281 else if (!strcmp(name, "version"))285 else if (!strcmp(name, "version"))
282 printf("\ngearmand %s - %s\n", gearman_version(), gearman_bugreport());286 printf("\ngearmand %s - %s\n", gearman_version(), gearman_bugreport());
287 else if (!strcmp(name, "worker-wakeup"))
288 worker_wakeup= (uint8_t)atoi(value);
283 else289 else
284 {290 {
285 fprintf(stderr, "gearmand: Unknown option:%s\n", name);291 fprintf(stderr, "gearmand: Unknown option:%s\n", name);
@@ -331,6 +337,7 @@
331 gearmand_set_backlog(_gearmand, backlog);337 gearmand_set_backlog(_gearmand, backlog);
332 gearmand_set_threads(_gearmand, threads);338 gearmand_set_threads(_gearmand, threads);
333 gearmand_set_job_retries(_gearmand, job_retries);339 gearmand_set_job_retries(_gearmand, job_retries);
340 gearmand_set_worker_wakeup(_gearmand, worker_wakeup);
334 gearmand_set_log_fn(_gearmand, _log, &log_info, verbose);341 gearmand_set_log_fn(_gearmand, _log, &log_info, verbose);
335342
336 if (queue_type != NULL)343 if (queue_type != NULL)
337344
=== modified file 'libgearman-server/client.h'
--- libgearman-server/client.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/client.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Server client declarations11 * @brief Client Declarations
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_CLIENT_H__14#ifndef __GEARMAN_SERVER_CLIENT_H__
@@ -19,10 +19,12 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_server_client Server Client Handling22 * @addtogroup gearman_server_client Client Declarations
23 * @ingroup gearman_server23 * @ingroup gearman_server
24 *
24 * This is a low level interface for gearman server clients. This is used25 * This is a low level interface for gearman server clients. This is used
25 * internally by the server interface, so you probably want to look there first.26 * internally by the server interface, so you probably want to look there first.
27 *
26 * @{28 * @{
27 */29 */
2830
2931
=== modified file 'libgearman-server/common.h'
--- libgearman-server/common.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/common.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief System include files11 * @brief System Include Files
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_COMMON_H__14#ifndef __GEARMAN_SERVER_COMMON_H__
@@ -106,8 +106,10 @@
106 * Macro to log fatal errors.106 * Macro to log fatal errors.
107 * @ingroup gearman_constants107 * @ingroup gearman_constants
108 */108 */
109#define GEARMAN_FATAL(__gearman, ...) \109#define GEARMAN_FATAL(__gearman, ...) { \
110 GEARMAN_LOG(__gearman, GEARMAN_VERBOSE_FATAL, __VA_ARGS__)110 unlikely ((__gearman)->verbose >= GEARMAN_VERBOSE_FATAL) \
111 GEARMAN_LOG(__gearman, GEARMAN_VERBOSE_FATAL, __VA_ARGS__) \
112}
111#define GEARMAN_SERVER_FATAL(__server, ...) \113#define GEARMAN_SERVER_FATAL(__server, ...) \
112 GEARMAN_FATAL((__server)->gearman, __VA_ARGS__)114 GEARMAN_FATAL((__server)->gearman, __VA_ARGS__)
113115
114116
=== modified file 'libgearman-server/conf.h'
--- libgearman-server/conf.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/conf.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Gearman conf declarations11 * @brief Configuration Declarations
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_CONF_H__14#ifndef __GEARMAN_SERVER_CONF_H__
@@ -19,7 +19,8 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_conf Gearman Conf Interface22 * @addtogroup gearman_conf Configuration Declarations
23 * @ingroup gearman_server
23 * @{24 * @{
24 */25 */
2526
2627
=== modified file 'libgearman-server/conf_module.h'
--- libgearman-server/conf_module.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/conf_module.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Gearman conf module declarations11 * @brief Configuration Module Declarations
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_CONF_MODULE_H__14#ifndef __GEARMAN_SERVER_CONF_MODULE_H__
@@ -19,7 +19,8 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_conf_module Gearman conf module interface22 * @addtogroup gearman_conf_module Configuration Module Declarations
23 * @ingroup gearman_server
23 * @{24 * @{
24 */25 */
2526
2627
=== modified file 'libgearman-server/conn.c'
--- libgearman-server/conn.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/conn.c 2009-11-04 22:14:14 +0000
@@ -66,7 +66,7 @@
66 }66 }
67 }67 }
6868
69 if (gearman_con_create(thread->gearman, &(con->con)) == NULL)69 if (gearman_add_con(thread->gearman, &(con->con)) == NULL)
70 {70 {
71 free(con);71 free(con);
72 return NULL;72 return NULL;
7373
=== modified file 'libgearman-server/conn.h'
--- libgearman-server/conn.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/conn.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Server connection declarations11 * @brief Connection Declarations
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_CON_H__14#ifndef __GEARMAN_SERVER_CON_H__
@@ -19,10 +19,12 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_server_con Server Connection Handling22 * @addtogroup gearman_server_con Connection Declarations
23 * @ingroup gearman_server23 * @ingroup gearman_server
24 *
24 * This is a low level interface for gearman server connections. This is used25 * This is a low level interface for gearman server connections. This is used
25 * internally by the server interface, so you probably want to look there first.26 * internally by the server interface, so you probably want to look there first.
27 *
26 * @{28 * @{
27 */29 */
2830
2931
=== modified file 'libgearman-server/constants.h'
--- libgearman-server/constants.h 2009-09-25 00:04:06 +0000
+++ libgearman-server/constants.h 2009-11-04 22:14:14 +0000
@@ -19,7 +19,8 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_server_constants Gearman Server Constants22 * @addtogroup gearman_server_constants Constants
23 * @ingroup gearman_server
23 * @{24 * @{
24 */25 */
2526
@@ -38,23 +39,6 @@
38#define GEARMAN_CONF_MAX_OPTION_SHORT 12839#define GEARMAN_CONF_MAX_OPTION_SHORT 128
39#define GEARMAN_CONF_DISPLAY_WIDTH 8040#define GEARMAN_CONF_DISPLAY_WIDTH 80
4041
41/* Types. */
42typedef struct gearman_server_st gearman_server_st;
43typedef struct gearman_server_thread_st gearman_server_thread_st;
44typedef struct gearman_server_con_st gearman_server_con_st;
45typedef struct gearman_server_packet_st gearman_server_packet_st;
46typedef struct gearman_server_function_st gearman_server_function_st;
47typedef struct gearman_server_client_st gearman_server_client_st;
48typedef struct gearman_server_worker_st gearman_server_worker_st;
49typedef struct gearman_server_job_st gearman_server_job_st;
50typedef struct gearmand_st gearmand_st;
51typedef struct gearmand_port_st gearmand_port_st;
52typedef struct gearmand_con_st gearmand_con_st;
53typedef struct gearmand_thread_st gearmand_thread_st;
54typedef struct gearman_conf_st gearman_conf_st;
55typedef struct gearman_conf_option_st gearman_conf_option_st;
56typedef struct gearman_conf_module_st gearman_conf_module_st;
57
58/** @} */42/** @} */
5943
60/**44/**
@@ -180,10 +164,28 @@
180164
181165
182/**166/**
183 * @addtogroup gearman_server_constants Gearman Server Constants167 * @addtogroup gearman_server_types Types
168 * @ingroup gearman_server
184 * @{169 * @{
185 */170 */
186171
172/* Types. */
173typedef struct gearman_server_st gearman_server_st;
174typedef struct gearman_server_thread_st gearman_server_thread_st;
175typedef struct gearman_server_con_st gearman_server_con_st;
176typedef struct gearman_server_packet_st gearman_server_packet_st;
177typedef struct gearman_server_function_st gearman_server_function_st;
178typedef struct gearman_server_client_st gearman_server_client_st;
179typedef struct gearman_server_worker_st gearman_server_worker_st;
180typedef struct gearman_server_job_st gearman_server_job_st;
181typedef struct gearmand_st gearmand_st;
182typedef struct gearmand_port_st gearmand_port_st;
183typedef struct gearmand_con_st gearmand_con_st;
184typedef struct gearmand_thread_st gearmand_thread_st;
185typedef struct gearman_conf_st gearman_conf_st;
186typedef struct gearman_conf_option_st gearman_conf_option_st;
187typedef struct gearman_conf_module_st gearman_conf_module_st;
188
187/* Function types. */189/* Function types. */
188typedef void (gearman_server_thread_run_fn)(gearman_server_thread_st *thread,190typedef void (gearman_server_thread_run_fn)(gearman_server_thread_st *thread,
189 void *context);191 void *context);
@@ -214,6 +216,16 @@
214216
215/** @} */217/** @} */
216218
219/**
220 * @addtogroup gearman_server_protocol Protocol Plugins
221 * @ingroup gearman_server
222 */
223
224/**
225 * @addtogroup gearman_server_queue Queue Plugins
226 * @ingroup gearman_server
227 */
228
217#ifdef __cplusplus229#ifdef __cplusplus
218}230}
219#endif231#endif
220232
=== modified file 'libgearman-server/function.h'
--- libgearman-server/function.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/function.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Server function declarations11 * @brief Function Declarations
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_FUNCTION_H__14#ifndef __GEARMAN_SERVER_FUNCTION_H__
@@ -19,10 +19,12 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_server_function Server Function Handling22 * @addtogroup gearman_server_function Function Declarations
23 * @ingroup gearman_server23 * @ingroup gearman_server
24 *
24 * This is a low level interface for gearman server functions. This is used25 * This is a low level interface for gearman server functions. This is used
25 * internally by the server interface, so you probably want to look there first.26 * internally by the server interface, so you probably want to look there first.
27 *
26 * @{28 * @{
27 */29 */
2830
2931
=== modified file 'libgearman-server/gearmand.c'
--- libgearman-server/gearmand.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/gearmand.c 2009-11-04 22:14:14 +0000
@@ -146,6 +146,11 @@
146 gearman_server_set_job_retries(&(gearmand->server), job_retries);146 gearman_server_set_job_retries(&(gearmand->server), job_retries);
147}147}
148148
149void gearmand_set_worker_wakeup(gearmand_st *gearmand, uint8_t worker_wakeup)
150{
151 gearman_server_set_worker_wakeup(&(gearmand->server), worker_wakeup);
152}
153
149void gearmand_set_threads(gearmand_st *gearmand, uint32_t threads)154void gearmand_set_threads(gearmand_st *gearmand, uint32_t threads)
150{155{
151 gearmand->threads= threads;156 gearmand->threads= threads;
152157
=== modified file 'libgearman-server/gearmand.h'
--- libgearman-server/gearmand.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/gearmand.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Gearmand declarations11 * @brief Gearmand Declarations
12 */12 */
1313
14#ifndef __GEARMAND_H__14#ifndef __GEARMAND_H__
@@ -23,8 +23,10 @@
23#endif23#endif
2424
25/**25/**
26 * @addtogroup gearmand Gearmand26 * @addtogroup gearmand Gearmand Declarations
27 *
27 * This is a server implementation using the gearman_server interface.28 * This is a server implementation using the gearman_server interface.
29 *
28 * @{30 * @{
29 */31 */
3032
@@ -64,6 +66,15 @@
64void gearmand_set_job_retries(gearmand_st *gearmand, uint8_t job_retries);66void gearmand_set_job_retries(gearmand_st *gearmand, uint8_t job_retries);
6567
66/**68/**
69 * Set maximum number of workers to wake up per job.
70 * @param gearmand Server instance structure previously initialized with
71 * gearmand_create.
72 * @param worker_wakeup Number of workers to wake up.
73 */
74GEARMAN_API
75void gearmand_set_worker_wakeup(gearmand_st *gearmand, uint8_t worker_wakeup);
76
77/**
67 * Set number of I/O threads for server to use.78 * Set number of I/O threads for server to use.
68 * @param gearmand Server instance structure previously initialized with79 * @param gearmand Server instance structure previously initialized with
69 * gearmand_create.80 * gearmand_create.
7081
=== modified file 'libgearman-server/gearmand_con.c'
--- libgearman-server/gearmand_con.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/gearmand_con.c 2009-11-04 22:14:14 +0000
@@ -178,9 +178,9 @@
178}178}
179179
180gearman_return_t gearmand_con_watch(gearman_con_st *con, short events,180gearman_return_t gearmand_con_watch(gearman_con_st *con, short events,
181 void *arg __attribute__ ((unused)))181 void *context __attribute__ ((unused)))
182{182{
183 (void) arg;183 (void) context;
184 gearmand_con_st *dcon;184 gearmand_con_st *dcon;
185 short set_events= 0;185 short set_events= 0;
186186
187187
=== modified file 'libgearman-server/gearmand_con.h'
--- libgearman-server/gearmand_con.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/gearmand_con.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Gearmand Connection Declarations11 * @brief Connection Declarations
12 */12 */
1313
14#ifndef __GEARMAND_CON_H__14#ifndef __GEARMAND_CON_H__
@@ -19,8 +19,11 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearmand_con Gearmand Connections22 * @addtogroup gearmand_con Connection Declarations
23 * @ingroup gearmand
24 *
23 * Connection handling for gearmand.25 * Connection handling for gearmand.
26 *
24 * @{27 * @{
25 */28 */
2629
@@ -58,7 +61,7 @@
58 */61 */
59GEARMAN_API62GEARMAN_API
60gearman_return_t gearmand_con_watch(gearman_con_st *con, short events,63gearman_return_t gearmand_con_watch(gearman_con_st *con, short events,
61 void *arg);64 void *context);
6265
63/** @} */66/** @} */
6467
6568
=== modified file 'libgearman-server/gearmand_thread.h'
--- libgearman-server/gearmand_thread.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/gearmand_thread.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Gearmand Thread Declarations11 * @brief Thread Declarations
12 */12 */
1313
14#ifndef __GEARMAND_THREAD_H__14#ifndef __GEARMAND_THREAD_H__
@@ -19,8 +19,11 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearmand_thread Gearmand Threads22 * @addtogroup gearmand_thread Thread Declarations
23 * @ingroup gearmand
24 *
23 * Thread handling for gearmand.25 * Thread handling for gearmand.
26 *
24 * @{27 * @{
25 */28 */
2629
2730
=== modified file 'libgearman-server/job.c'
--- libgearman-server/job.c 2009-09-26 17:11:51 +0000
+++ libgearman-server/job.c 2009-11-04 22:14:14 +0000
@@ -380,6 +380,7 @@
380{380{
381 gearman_server_client_st *client;381 gearman_server_client_st *client;
382 gearman_server_worker_st *worker;382 gearman_server_worker_st *worker;
383 uint32_t noop_sent;
383 gearman_return_t ret;384 gearman_return_t ret;
384385
385 if (job->worker != NULL)386 if (job->worker != NULL)
@@ -415,22 +416,32 @@
415 }416 }
416417
417 /* Queue NOOP for possible sleeping workers. */418 /* Queue NOOP for possible sleeping workers. */
418 for (worker= job->function->worker_list; worker != NULL;419 if (job->function->worker_list != NULL)
419 worker= worker->function_next)
420 {420 {
421 if (!(worker->con->options & GEARMAN_SERVER_CON_SLEEPING) ||421 worker= job->function->worker_list;
422 worker->con->options & GEARMAN_SERVER_CON_NOOP_SENT)422 noop_sent= 0;
423 do
423 {424 {
424 continue;425 if (worker->con->options & GEARMAN_SERVER_CON_SLEEPING &&
426 !(worker->con->options & GEARMAN_SERVER_CON_NOOP_SENT))
427 {
428 ret= gearman_server_io_packet_add(worker->con, false,
429 GEARMAN_MAGIC_RESPONSE,
430 GEARMAN_COMMAND_NOOP, NULL);
431 if (ret != GEARMAN_SUCCESS)
432 return ret;
433
434 worker->con->options|= GEARMAN_SERVER_CON_NOOP_SENT;
435 noop_sent++;
436 }
437
438 worker= worker->function_next;
425 }439 }
426440 while (worker != job->function->worker_list &&
427 ret= gearman_server_io_packet_add(worker->con, false,441 (job->server->worker_wakeup == 0 ||
428 GEARMAN_MAGIC_RESPONSE,442 noop_sent < job->server->worker_wakeup));
429 GEARMAN_COMMAND_NOOP, NULL);443
430 if (ret != GEARMAN_SUCCESS)444 job->function->worker_list= worker;
431 return ret;
432
433 worker->con->options|= GEARMAN_SERVER_CON_NOOP_SENT;
434 }445 }
435446
436 /* Queue the job to be run. */447 /* Queue the job to be run. */
437448
=== modified file 'libgearman-server/job.h'
--- libgearman-server/job.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/job.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Server job declarations11 * @brief Job Declarations
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_JOB_H__14#ifndef __GEARMAN_SERVER_JOB_H__
@@ -19,10 +19,12 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_server_job Server Job Handling22 * @addtogroup gearman_server_job Job Declarations
23 * @ingroup gearman_server23 * @ingroup gearman_server
24 *
24 * This is a low level interface for gearman server jobs. This is used25 * This is a low level interface for gearman server jobs. This is used
25 * internally by the server interface, so you probably want to look there first.26 * internally by the server interface, so you probably want to look there first.
27 *
26 * @{28 * @{
27 */29 */
2830
2931
=== modified file 'libgearman-server/packet.c'
--- libgearman-server/packet.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/packet.c 2009-11-04 22:14:14 +0000
@@ -101,8 +101,8 @@
101 if (server_packet == NULL)101 if (server_packet == NULL)
102 return GEARMAN_MEMORY_ALLOCATION_FAILURE;102 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
103103
104 if (gearman_packet_create(con->thread->gearman,104 if (gearman_add_packet(con->thread->gearman,
105 &(server_packet->packet)) == NULL)105 &(server_packet->packet)) == NULL)
106 {106 {
107 gearman_server_packet_free(server_packet, con->thread, false);107 gearman_server_packet_free(server_packet, con->thread, false);
108 return GEARMAN_MEMORY_ALLOCATION_FAILURE;108 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
109109
=== modified file 'libgearman-server/packet.h'
--- libgearman-server/packet.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/packet.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Server Packet declarations11 * @brief Packet Declarations
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_PACKET_H__14#ifndef __GEARMAN_SERVER_PACKET_H__
@@ -19,10 +19,12 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_server_con Server Connection Handling22 * @addtogroup gearman_server_packet Packet Declarations
23 * @ingroup gearman_server23 * @ingroup gearman_server
24 *
24 * This is a low level interface for gearman server connections. This is used25 * This is a low level interface for gearman server connections. This is used
25 * internally by the server interface, so you probably want to look there first.26 * internally by the server interface, so you probably want to look there first.
27 *
26 * @{28 * @{
27 */29 */
2830
2931
=== modified file 'libgearman-server/protocol_http.c'
--- libgearman-server/protocol_http.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/protocol_http.c 2009-11-04 22:14:14 +0000
@@ -17,8 +17,8 @@
17#include <libgearman-server/protocol_http.h>17#include <libgearman-server/protocol_http.h>
1818
19/**19/**
20 * @addtogroup gearman_protocol_http HTTP Protocol Functions20 * @addtogroup gearman_protocol_http_static Static HTTP Protocol Definitions
21 * @ingroup gearman_protocol21 * @ingroup gearman_protocol_http
22 * @{22 * @{
23 */23 */
2424
@@ -27,10 +27,6 @@
27 */27 */
28#define GEARMAN_PROTOCOL_HTTP_DEFAULT_PORT 808028#define GEARMAN_PROTOCOL_HTTP_DEFAULT_PORT 8080
2929
30/*
31 * Private declarations
32 */
33
34/**30/**
35 * Structure for HTTP specific data.31 * Structure for HTTP specific data.
36 */32 */
@@ -42,7 +38,7 @@
4238
43/* Protocol callback functions. */39/* Protocol callback functions. */
44static gearman_return_t _http_con_add(gearman_con_st *con);40static gearman_return_t _http_con_add(gearman_con_st *con);
45static void _http_free(gearman_con_st *con , void *data);41static void _http_free(gearman_con_st *con, void *context);
46static size_t _http_pack(const gearman_packet_st *packet, gearman_con_st *con,42static size_t _http_pack(const gearman_packet_st *packet, gearman_con_st *con,
47 void *data, size_t data_size,43 void *data, size_t data_size,
48 gearman_return_t *ret_ptr);44 gearman_return_t *ret_ptr);
@@ -115,7 +111,7 @@
115}111}
116112
117/*113/*
118 * Private definitions114 * Static definitions
119 */115 */
120116
121static gearman_return_t _http_con_add(gearman_con_st *con)117static gearman_return_t _http_con_add(gearman_con_st *con)
@@ -140,9 +136,10 @@
140 return GEARMAN_SUCCESS;136 return GEARMAN_SUCCESS;
141}137}
142138
143static void _http_free(gearman_con_st *con __attribute__ ((unused)), void *data)139static void _http_free(gearman_con_st *con __attribute__ ((unused)),
140 void *context)
144{141{
145 free(data);142 free((gearman_protocol_http_st *)context);
146}143}
147144
148static size_t _http_pack(const gearman_packet_st *packet, gearman_con_st *con,145static size_t _http_pack(const gearman_packet_st *packet, gearman_con_st *con,
149146
=== modified file 'libgearman-server/protocol_http.h'
--- libgearman-server/protocol_http.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/protocol_http.h 2009-11-04 22:14:14 +0000
@@ -19,20 +19,24 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_protocol_http HTTP Protocol Functions22 * @addtogroup gearman_protocol_http HTTP Protocol Declarations
23 * @ingroup gearman_protocol23 * @ingroup gearman_server_protocol
24 *
24 * This module provides a simple HTTP interface into the Gearman job server. It25 * This module provides a simple HTTP interface into the Gearman job server. It
25 * is also meant to serve as an example of how other protocols can plug into26 * is also meant to serve as an example of how other protocols can plug into
26 * the server. This module will ignore all headers except:27 * the server. This module will ignore all headers except:
28 *
27 * Content-Length: SIZE29 * Content-Length: SIZE
28 * Connection: Keep-Alive30 * Connection: Keep-Alive
29 * X-Gearman-Unique: UNIQUE_KEY31 * X-Gearman-Unique: UNIQUE_KEY
30 * X-Gearman-Background: true32 * X-Gearman-Background: true
31 * X-Gearman-Priority: HIGH | LOW33 * X-Gearman-Priority: HIGH | LOW
34 *
32 * All HTTP requests are translated into SUBMIT_JOB requests, and only35 * All HTTP requests are translated into SUBMIT_JOB requests, and only
33 * WORK_COMPLETE, WORK_FAIL, and JOB_CREATED responses are returned.36 * WORK_COMPLETE, WORK_FAIL, and JOB_CREATED responses are returned.
34 * JOB_CREATED packet are only sent back if the "X-Gearman-Background: true"37 * JOB_CREATED packet are only sent back if the "X-Gearman-Background: true"
35 * header is given.38 * header is given.
39 *
36 * @{40 * @{
37 */41 */
3842
3943
=== modified file 'libgearman-server/queue_libdrizzle.c'
--- libgearman-server/queue_libdrizzle.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/queue_libdrizzle.c 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Drizzle Queue Storage Definitions11 * @brief libdrizzle Queue Storage Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
@@ -17,8 +17,8 @@
17#include <libdrizzle/drizzle_client.h>17#include <libdrizzle/drizzle_client.h>
1818
19/**19/**
20 * @addtogroup gearman_queue_libdrizzle libdrizzle Queue Storage Functions20 * @addtogroup gearman_queue_libdrizzle_static Static libdrizzle Queue Storage Definitions
21 * @ingroup gearman_queue21 * @ingroup gearman_queue_libdrizzle
22 * @{22 * @{
23 */23 */
2424
@@ -29,10 +29,6 @@
29#define GEARMAN_QUEUE_LIBDRIZZLE_DEFAULT_TABLE "queue"29#define GEARMAN_QUEUE_LIBDRIZZLE_DEFAULT_TABLE "queue"
30#define GEARMAN_QUEUE_QUERY_BUFFER 25630#define GEARMAN_QUEUE_QUERY_BUFFER 256
3131
32/*
33 * Private declarations
34 */
35
36/**32/**
37 * Structure for libdrizzle specific data.33 * Structure for libdrizzle specific data.
38 */34 */
@@ -289,7 +285,7 @@
289}285}
290286
291/*287/*
292 * Private definitions288 * Static definitions
293 */289 */
294290
295static drizzle_return_t _libdrizzle_query(gearman_server_st *server,291static drizzle_return_t _libdrizzle_query(gearman_server_st *server,
296292
=== modified file 'libgearman-server/queue_libdrizzle.h'
--- libgearman-server/queue_libdrizzle.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/queue_libdrizzle.h 2009-11-04 22:14:14 +0000
@@ -19,8 +19,8 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_queue_libdrizzle libdrizzle Queue Storage Functions22 * @addtogroup gearman_queue_libdrizzle libdrizzle Queue Storage Declarations
23 * @ingroup gearman_queue23 * @ingroup gearman_server_queue
24 * @{24 * @{
25 */25 */
2626
2727
=== modified file 'libgearman-server/queue_libmemcached.c'
--- libgearman-server/queue_libmemcached.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/queue_libmemcached.c 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Drizzle Queue Storage Definitions11 * @brief libmemcached Queue Storage Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
@@ -17,8 +17,8 @@
17#include <libmemcached/memcached.h>17#include <libmemcached/memcached.h>
1818
19/**19/**
20 * @addtogroup gearman_queue_libmemcached libmemcached Queue Storage Functions20 * @addtogroup gearman_queue_libmemcached_static Static libmemcached Queue Storage Functions
21 * @ingroup gearman_queue21 * @ingroup gearman_queue_libmemcached
22 * @{22 * @{
23 */23 */
2424
@@ -27,10 +27,6 @@
27 */27 */
28#define GEARMAN_QUEUE_LIBMEMCACHED_DEFAULT_PREFIX "gear_"28#define GEARMAN_QUEUE_LIBMEMCACHED_DEFAULT_PREFIX "gear_"
2929
30/*
31 * Private declarations
32 */
33
34/**30/**
35 * Structure for libmemcached specific data.31 * Structure for libmemcached specific data.
36 */32 */
@@ -191,7 +187,7 @@
191}187}
192188
193/*189/*
194 * Private definitions190 * Static definitions
195 */191 */
196192
197static gearman_return_t _libmemcached_add(gearman_server_st *server,193static gearman_return_t _libmemcached_add(gearman_server_st *server,
198194
=== modified file 'libgearman-server/queue_libmemcached.h'
--- libgearman-server/queue_libmemcached.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/queue_libmemcached.h 2009-11-04 22:14:14 +0000
@@ -19,8 +19,8 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_queue_libmemcached libmemcached Queue Storage Functions22 * @addtogroup gearman_queue_libmemcached libmemcached Queue Storage Declarations
23 * @ingroup gearman_queue23 * @ingroup gearman_server_queue
24 * @{24 * @{
25 */25 */
2626
2727
=== modified file 'libgearman-server/queue_libpq.c'
--- libgearman-server/queue_libpq.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/queue_libpq.c 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief PostgreSQL Queue Storage Definitions11 * @brief libpq Queue Storage Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
@@ -24,8 +24,8 @@
24#endif24#endif
2525
26/**26/**
27 * @addtogroup gearman_queue_libpq libpq Queue Storage Functions27 * @addtogroup gearman_queue_libpq_static Static libpq Queue Storage Definitions
28 * @ingroup gearman_queue28 * @ingroup gearman_queue_libpq
29 * @{29 * @{
30 */30 */
3131
@@ -35,10 +35,6 @@
35#define GEARMAN_QUEUE_LIBPQ_DEFAULT_TABLE "queue"35#define GEARMAN_QUEUE_LIBPQ_DEFAULT_TABLE "queue"
36#define GEARMAN_QUEUE_QUERY_BUFFER 25636#define GEARMAN_QUEUE_QUERY_BUFFER 256
3737
38/*
39 * Private declarations
40 */
41
42/**38/**
43 * Structure for libpq specific data.39 * Structure for libpq specific data.
44 */40 */
@@ -241,7 +237,7 @@
241}237}
242238
243/*239/*
244 * Private definitions240 * Static definitions
245 */241 */
246242
247static void _libpq_notice_processor(void *arg, const char *message)243static void _libpq_notice_processor(void *arg, const char *message)
248244
=== modified file 'libgearman-server/queue_libpq.h'
--- libgearman-server/queue_libpq.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/queue_libpq.h 2009-11-04 22:14:14 +0000
@@ -19,8 +19,8 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_queue_libpq libpq Queue Storage Functions22 * @addtogroup gearman_queue_libpq libpq Queue Storage Declarations
23 * @ingroup gearman_queue23 * @ingroup gearman_server_queue
24 * @{24 * @{
25 */25 */
2626
2727
=== modified file 'libgearman-server/queue_libsqlite3.c'
--- libgearman-server/queue_libsqlite3.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/queue_libsqlite3.c 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Sqlite Queue Storage Definitions11 * @brief libsqlite3 Queue Storage Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
@@ -17,8 +17,8 @@
17#include <sqlite3.h>17#include <sqlite3.h>
1818
19/**19/**
20 * @addtogroup gearman_queue_sqlite sqlite Queue Storage Functions20 * @addtogroup gearman_queue_libsqlite3_static Static libsqlite3 Queue Storage Definitions
21 * @ingroup gearman_queue21 * @ingroup gearman_queue_libsqlite3
22 * @{22 * @{
23 */23 */
2424
@@ -27,10 +27,6 @@
27 */27 */
28#define GEARMAN_QUEUE_SQLITE_DEFAULT_TABLE "gearman_queue"28#define GEARMAN_QUEUE_SQLITE_DEFAULT_TABLE "gearman_queue"
29#define GEARMAN_QUEUE_QUERY_BUFFER 25629#define GEARMAN_QUEUE_QUERY_BUFFER 256
30
31/*
32 * Private declarations
33 */
34#define SQLITE_MAX_TABLE_SIZE 25630#define SQLITE_MAX_TABLE_SIZE 256
35#define SQLITE_MAX_CREATE_TABLE_SIZE 102431#define SQLITE_MAX_CREATE_TABLE_SIZE 1024
3632
@@ -281,7 +277,7 @@
281}277}
282278
283/*279/*
284 * Private definitions280 * Static definitions
285 */281 */
286282
287int _sqlite_query(gearman_server_st *server,283int _sqlite_query(gearman_server_st *server,
288284
=== modified file 'libgearman-server/queue_libsqlite3.h'
--- libgearman-server/queue_libsqlite3.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/queue_libsqlite3.h 2009-11-04 22:14:14 +0000
@@ -19,8 +19,8 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_queue_libsqlite3 libsqlite3 Queue Storage Functions22 * @addtogroup gearman_queue_libsqlite3 libsqlite3 Queue Storage Declarations
23 * @ingroup gearman_queue23 * @ingroup gearman_server_queue
24 * @{24 * @{
25 */25 */
2626
2727
=== modified file 'libgearman-server/server.c'
--- libgearman-server/server.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/server.c 2009-11-04 22:14:14 +0000
@@ -84,6 +84,7 @@
84 server->proc_wakeup= false;84 server->proc_wakeup= false;
85 server->proc_shutdown= false;85 server->proc_shutdown= false;
86 server->job_retries= 0;86 server->job_retries= 0;
87 server->worker_wakeup= 0;
87 server->thread_count= 0;88 server->thread_count= 0;
88 server->free_packet_count= 0;89 server->free_packet_count= 0;
89 server->function_count= 0;90 server->function_count= 0;
@@ -191,6 +192,12 @@
191 server->job_retries= job_retries;192 server->job_retries= job_retries;
192}193}
193194
195void gearman_server_set_worker_wakeup(gearman_server_st *server,
196 uint8_t worker_wakeup)
197{
198 server->worker_wakeup= worker_wakeup;
199}
200
194void gearman_server_set_log_fn(gearman_server_st *server,201void gearman_server_set_log_fn(gearman_server_st *server,
195 gearman_log_fn *function,202 gearman_log_fn *function,
196 const void *context, gearman_verbose_t verbose)203 const void *context, gearman_verbose_t verbose)
@@ -906,8 +913,8 @@
906 return GEARMAN_MEMORY_ALLOCATION_FAILURE;913 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
907 }914 }
908915
909 if (gearman_packet_create(server_con->thread->gearman,916 if (gearman_add_packet(server_con->thread->gearman,
910 &(server_packet->packet)) == NULL)917 &(server_packet->packet)) == NULL)
911 {918 {
912 free(data);919 free(data);
913 gearman_server_packet_free(server_packet, server_con->thread, false);920 gearman_server_packet_free(server_packet, server_con->thread, false);
914921
=== modified file 'libgearman-server/server.h'
--- libgearman-server/server.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/server.h 2009-11-04 22:14:14 +0000
@@ -15,6 +15,8 @@
15#define __GEARMAN_SERVER_H__15#define __GEARMAN_SERVER_H__
1616
17#include <libgearman/gearman.h>17#include <libgearman/gearman.h>
18#include <event.h>
19
18#include <libgearman-server/constants.h>20#include <libgearman-server/constants.h>
19#include <libgearman-server/structs.h>21#include <libgearman-server/structs.h>
20#include <libgearman-server/conf.h>22#include <libgearman-server/conf.h>
@@ -32,7 +34,7 @@
32#endif34#endif
3335
34/**36/**
35 * @addtogroup gearman_server Server Interface37 * @addtogroup gearman_server Gearman Server Declarations
36 * This is the interface gearman servers should use.38 * This is the interface gearman servers should use.
37 * @{39 * @{
38 */40 */
@@ -66,6 +68,16 @@
66 uint8_t job_retries);68 uint8_t job_retries);
6769
68/**70/**
71 * Set maximum number of workers to wake up per job.
72 * @param server Server structure previously initialized with
73 * gearman_server_create.
74 * @param worker_wakeup Number of workers to wake up.
75 */
76GEARMAN_API
77void gearman_server_set_worker_wakeup(gearman_server_st *server,
78 uint8_t worker_wakeup);
79
80/**
69 * Set logging callback for server instance.81 * Set logging callback for server instance.
70 * @param server Server structure previously initialized with82 * @param server Server structure previously initialized with
71 * gearman_server_create.83 * gearman_server_create.
7284
=== modified file 'libgearman-server/structs.h'
--- libgearman-server/structs.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/structs.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Struct definitions11 * @brief Struct Definitions
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_STRUCTS_H__14#ifndef __GEARMAN_SERVER_STRUCTS_H__
@@ -29,6 +29,7 @@
29 bool proc_wakeup;29 bool proc_wakeup;
30 bool proc_shutdown;30 bool proc_shutdown;
31 uint8_t job_retries;31 uint8_t job_retries;
32 uint8_t worker_wakeup;
32 uint32_t job_handle_count;33 uint32_t job_handle_count;
33 uint32_t thread_count;34 uint32_t thread_count;
34 uint32_t function_count;35 uint32_t function_count;
3536
=== modified file 'libgearman-server/thread.c'
--- libgearman-server/thread.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/thread.c 2009-11-04 22:14:14 +0000
@@ -227,7 +227,7 @@
227 }227 }
228228
229 /* Check for new activity on connections. */229 /* Check for new activity on connections. */
230 while ((con= gearman_con_ready(thread->gearman)) != NULL)230 while ((con= gearman_ready(thread->gearman)) != NULL)
231 {231 {
232 /* Inherited classes anyone? Some people would call this a hack, I call232 /* Inherited classes anyone? Some people would call this a hack, I call
233 it clean (avoids extra ptrs). Brian, I'll give you your C99 0-byte233 it clean (avoids extra ptrs). Brian, I'll give you your C99 0-byte
234234
=== modified file 'libgearman-server/thread.h'
--- libgearman-server/thread.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/thread.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Server Thread Declarations11 * @brief Thread Declarations
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_THREAD_H__14#ifndef __GEARMAN_SERVER_THREAD_H__
@@ -19,8 +19,11 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_server_thread Server Thread Handling22 * @addtogroup gearman_server_thread Thread Declarations
23 * @ingroup gearman_server
24 *
23 * This is the interface gearman servers should use for creating threads.25 * This is the interface gearman servers should use for creating threads.
26 *
24 * @{27 * @{
25 */28 */
2629
2730
=== modified file 'libgearman-server/worker.c'
--- libgearman-server/worker.c 2009-09-24 23:43:15 +0000
+++ libgearman-server/worker.c 2009-11-04 22:14:14 +0000
@@ -73,7 +73,23 @@
73 worker->con= con;73 worker->con= con;
74 GEARMAN_LIST_ADD(con->worker, worker, con_)74 GEARMAN_LIST_ADD(con->worker, worker, con_)
75 worker->function= function;75 worker->function= function;
76 GEARMAN_LIST_ADD(function->worker, worker, function_)76
77 /* Add worker to the function list, which is a double-linked circular list. */
78 if (function->worker_list == NULL)
79 {
80 function->worker_list= worker;
81 worker->function_next= worker;
82 worker->function_prev= worker;
83 }
84 else
85 {
86 worker->function_next= function->worker_list;
87 worker->function_prev= function->worker_list->function_prev;
88 worker->function_next->function_prev= worker;
89 worker->function_prev->function_next= worker;
90 }
91 function->worker_count++;
92
77 worker->job_list= NULL;93 worker->job_list= NULL;
7894
79 return worker;95 return worker;
@@ -88,7 +104,17 @@
88 (void)gearman_server_job_queue(worker->job_list);104 (void)gearman_server_job_queue(worker->job_list);
89105
90 GEARMAN_LIST_DEL(worker->con->worker, worker, con_)106 GEARMAN_LIST_DEL(worker->con->worker, worker, con_)
91 GEARMAN_LIST_DEL(worker->function->worker, worker, function_)107
108 if (worker == worker->function_next)
109 worker->function->worker_list= NULL;
110 else
111 {
112 worker->function_next->function_prev= worker->function_prev;
113 worker->function_prev->function_next= worker->function_next;
114 if (worker == worker->function->worker_list)
115 worker->function->worker_list= worker->function_next;
116 }
117 worker->function->worker_count--;
92118
93 if (worker->options & GEARMAN_SERVER_WORKER_ALLOCATED)119 if (worker->options & GEARMAN_SERVER_WORKER_ALLOCATED)
94 {120 {
95121
=== modified file 'libgearman-server/worker.h'
--- libgearman-server/worker.h 2009-09-24 23:43:15 +0000
+++ libgearman-server/worker.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Server worker declarations11 * @brief Worker Declarations
12 */12 */
1313
14#ifndef __GEARMAN_SERVER_WORKER_H__14#ifndef __GEARMAN_SERVER_WORKER_H__
@@ -19,10 +19,12 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_server_worker Server Worker Handling22 * @addtogroup gearman_server_worker Worker Declarations
23 * @ingroup gearman_server23 * @ingroup gearman_server
24 *
24 * This is a low level interface for gearman server workers. This is used25 * This is a low level interface for gearman server workers. This is used
25 * internally by the server interface, so you probably want to look there first.26 * internally by the server interface, so you probably want to look there first.
27 *
26 * @{28 * @{
27 */29 */
2830
2931
=== modified file 'libgearman/Makefile.am'
--- libgearman/Makefile.am 2009-09-26 16:54:44 +0000
+++ libgearman/Makefile.am 2009-11-04 22:14:14 +0000
@@ -22,7 +22,8 @@
22 worker.h22 worker.h
2323
24noinst_HEADERS= \24noinst_HEADERS= \
25 common.h25 common.h \
26 gearman_local.h
2627
27libgearman_la_SOURCES= \28libgearman_la_SOURCES= \
28 client.c \29 client.c \
2930
=== modified file 'libgearman/client.c'
--- libgearman/client.c 2009-09-28 17:47:34 +0000
+++ libgearman/client.c 2009-11-04 22:14:14 +0000
@@ -8,17 +8,13 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Client definitions11 * @brief Client Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
1515
16/*
17 * Private declarations
18 */
19
20/**16/**
21 * @addtogroup gearman_client_private Private Client Functions17 * @addtogroup gearman_client_static Static Client Declarations
22 * @ingroup gearman_client18 * @ingroup gearman_client
23 * @{19 * @{
24 */20 */
@@ -102,7 +98,7 @@
102/** @} */98/** @} */
10399
104/*100/*
105 * Public definitions101 * Public Definitions
106 */102 */
107103
108gearman_client_st *gearman_client_create(gearman_client_st *client)104gearman_client_st *gearman_client_create(gearman_client_st *client)
@@ -251,7 +247,7 @@
251gearman_return_t gearman_client_add_server(gearman_client_st *client,247gearman_return_t gearman_client_add_server(gearman_client_st *client,
252 const char *host, in_port_t port)248 const char *host, in_port_t port)
253{249{
254 if (gearman_con_add(client->gearman, NULL, host, port) == NULL)250 if (gearman_add_con_args(client->gearman, NULL, host, port) == NULL)
255 return GEARMAN_MEMORY_ALLOCATION_FAILURE;251 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
256252
257 return GEARMAN_SUCCESS;253 return GEARMAN_SUCCESS;
@@ -265,12 +261,12 @@
265261
266void gearman_client_remove_servers(gearman_client_st *client)262void gearman_client_remove_servers(gearman_client_st *client)
267{263{
268 gearman_con_free_all(client->gearman);264 gearman_free_all_cons(client->gearman);
269}265}
270266
271gearman_return_t gearman_client_wait(gearman_client_st *client)267gearman_return_t gearman_client_wait(gearman_client_st *client)
272{268{
273 return gearman_con_wait(client->gearman);269 return gearman_wait(client->gearman);
274}270}
275271
276void *gearman_client_do(gearman_client_st *client, const char *function_name,272void *gearman_client_do(gearman_client_st *client, const char *function_name,
@@ -394,7 +390,7 @@
394 const void *workload,390 const void *workload,
395 size_t workload_size)391 size_t workload_size)
396{392{
397 return gearman_con_echo(client->gearman, workload, workload_size);393 return gearman_echo(client->gearman, workload, workload_size);
398}394}
399395
400void gearman_task_free(gearman_task_st *task)396void gearman_task_free(gearman_task_st *task)
@@ -402,8 +398,11 @@
402 if (task->options & GEARMAN_TASK_SEND_IN_USE)398 if (task->options & GEARMAN_TASK_SEND_IN_USE)
403 gearman_packet_free(&(task->send));399 gearman_packet_free(&(task->send));
404400
405 if (task->context != NULL && task->client->task_context_free_fn != NULL)401 if (task != &(task->client->do_task) && task->context != NULL &&
406 (*(task->client->task_context_free_fn))(task, (void *)(task->context));402 task->client->task_context_free_fn != NULL)
403 {
404 task->client->task_context_free_fn(task, (void *)task->context);
405 }
407406
408 if (task->client->task_list == task)407 if (task->client->task_list == task)
409 task->client->task_list= task->next;408 task->client->task_list= task->next;
@@ -521,6 +520,9 @@
521 const char *job_handle,520 const char *job_handle,
522 gearman_return_t *ret_ptr)521 gearman_return_t *ret_ptr)
523{522{
523 const void *args[1];
524 size_t args_size[1];
525
524 task= _task_create(client, task);526 task= _task_create(client, task);
525 if (task == NULL)527 if (task == NULL)
526 {528 {
@@ -531,10 +533,12 @@
531 task->context= context;533 task->context= context;
532 snprintf(task->job_handle, GEARMAN_JOB_HANDLE_SIZE, "%s", job_handle);534 snprintf(task->job_handle, GEARMAN_JOB_HANDLE_SIZE, "%s", job_handle);
533535
534 *ret_ptr= gearman_packet_add(client->gearman, &(task->send),536 args[0]= job_handle;
535 GEARMAN_MAGIC_REQUEST,537 args_size[0]= strlen(job_handle);
536 GEARMAN_COMMAND_GET_STATUS,538 *ret_ptr= gearman_add_packet_args(client->gearman, &(task->send),
537 (uint8_t *)job_handle, strlen(job_handle), NULL);539 GEARMAN_MAGIC_REQUEST,
540 GEARMAN_COMMAND_GET_STATUS,
541 args, args_size, 1);
538 if (*ret_ptr == GEARMAN_SUCCESS)542 if (*ret_ptr == GEARMAN_SUCCESS)
539 {543 {
540 client->new_tasks++;544 client->new_tasks++;
@@ -636,10 +640,20 @@
636 return ret;640 return ret;
637 }641 }
638 }642 }
643
644 if (client->new_tasks == 0)
645 {
646 ret= gearman_flush_all(client->gearman);
647 if (ret != GEARMAN_SUCCESS)
648 {
649 client->gearman->options= options;
650 return ret;
651 }
652 }
639 }653 }
640654
641 /* See if there are any connections ready for I/O. */655 /* See if there are any connections ready for I/O. */
642 while ((client->con= gearman_con_ready(client->gearman)) != NULL)656 while ((client->con= gearman_ready(client->gearman)) != NULL)
643 {657 {
644 if (client->con->revents & (POLLOUT | POLLERR | POLLHUP | POLLNVAL))658 if (client->con->revents & (POLLOUT | POLLERR | POLLHUP | POLLNVAL))
645 {659 {
@@ -738,7 +752,7 @@
738 }752 }
739 else if (client->con->packet.command == GEARMAN_COMMAND_ERROR)753 else if (client->con->packet.command == GEARMAN_COMMAND_ERROR)
740 {754 {
741 gearman_error_set(client->gearman, "gearman_client_run_tasks",755 gearman_set_error(client->gearman, "gearman_client_run_tasks",
742 "%s:%.*s",756 "%s:%.*s",
743 (char *)(client->con->packet.arg[0]),757 (char *)(client->con->packet.arg[0]),
744 (int)(client->con->packet.arg_size[1]),758 (int)(client->con->packet.arg_size[1]),
@@ -800,7 +814,7 @@
800 }814 }
801815
802 /* Wait for activity on one of the connections. */816 /* Wait for activity on one of the connections. */
803 ret= gearman_con_wait(client->gearman);817 ret= gearman_wait(client->gearman);
804 if (ret != GEARMAN_SUCCESS && ret != GEARMAN_IO_WAIT)818 if (ret != GEARMAN_SUCCESS && ret != GEARMAN_IO_WAIT)
805 {819 {
806 client->state= GEARMAN_CLIENT_STATE_IDLE;820 client->state= GEARMAN_CLIENT_STATE_IDLE;
@@ -812,7 +826,7 @@
812 break;826 break;
813827
814 default:828 default:
815 gearman_error_set(client->gearman, "gearman_client_run_tasks",829 gearman_set_error(client->gearman, "gearman_client_run_tasks",
816 "unknown state: %u", client->state);830 "unknown state: %u", client->state);
817 client->gearman->options= options;831 client->gearman->options= options;
818 return GEARMAN_UNKNOWN_STATE;832 return GEARMAN_UNKNOWN_STATE;
@@ -824,7 +838,7 @@
824}838}
825839
826/*840/*
827 * Private definitions841 * Static Definitions
828 */842 */
829843
830static gearman_client_st *_client_allocate(gearman_client_st *client)844static gearman_client_st *_client_allocate(gearman_client_st *client)
@@ -883,6 +897,8 @@
883{897{
884 uuid_t uuid;898 uuid_t uuid;
885 char uuid_string[37];899 char uuid_string[37];
900 const void *args[3];
901 size_t args_size[3];
886902
887 task= _task_create(client, task);903 task= _task_create(client, task);
888 if (task == NULL)904 if (task == NULL)
@@ -900,12 +916,16 @@
900 unique= uuid_string;916 unique= uuid_string;
901 }917 }
902918
903 *ret_ptr= gearman_packet_add(client->gearman, &(task->send),919 args[0]= function_name;
904 GEARMAN_MAGIC_REQUEST, command,920 args_size[0]= (size_t)strlen(function_name) + 1;
905 (uint8_t *)function_name,921 args[1]= unique;
906 (size_t)(strlen(function_name) + 1),922 args_size[1]= (size_t)strlen(unique) + 1;
907 (uint8_t *)unique, (size_t)(strlen(unique) + 1),923 args[2]= workload;
908 workload, workload_size, NULL);924 args_size[2]= workload_size;
925
926 *ret_ptr= gearman_add_packet_args(client->gearman, &(task->send),
927 GEARMAN_MAGIC_REQUEST, command,
928 args, args_size, 3);
909 if (*ret_ptr == GEARMAN_SUCCESS)929 if (*ret_ptr == GEARMAN_SUCCESS)
910 {930 {
911 client->new_tasks++;931 client->new_tasks++;
@@ -930,7 +950,8 @@
930 {950 {
931 client->new_tasks--;951 client->new_tasks--;
932 client->running_tasks--;952 client->running_tasks--;
933 gearman_error_set(client->gearman, "_client_run_task", "no servers added");953 gearman_set_error(client->gearman, "_client_run_task",
954 "no servers added");
934 return GEARMAN_NO_SERVERS;955 return GEARMAN_NO_SERVERS;
935 }956 }
936957
@@ -981,6 +1002,8 @@
981 break;1002 break;
982 }1003 }
983 }1004 }
1005 else
1006 task->con= NULL;
9841007
985 if (task->con == NULL)1008 if (task->con == NULL)
986 {1009 {
@@ -1000,13 +1023,13 @@
1000 {1023 {
1001 if (client->workload_fn == NULL)1024 if (client->workload_fn == NULL)
1002 {1025 {
1003 gearman_error_set(client->gearman, "_client_run_task",1026 gearman_set_error(client->gearman, "_client_run_task",
1004 "workload size > 0, but no data pointer or workload_fn was given");1027 "workload size > 0, but no data pointer or workload_fn was given");
1005 return GEARMAN_NEED_WORKLOAD_FN;1028 return GEARMAN_NEED_WORKLOAD_FN;
1006 }1029 }
10071030
1008 case GEARMAN_TASK_STATE_WORKLOAD:1031 case GEARMAN_TASK_STATE_WORKLOAD:
1009 ret= (*(client->workload_fn))(task);1032 ret= client->workload_fn(task);
1010 if (ret != GEARMAN_SUCCESS)1033 if (ret != GEARMAN_SUCCESS)
1011 {1034 {
1012 task->state= GEARMAN_TASK_STATE_WORKLOAD;1035 task->state= GEARMAN_TASK_STATE_WORKLOAD;
@@ -1028,7 +1051,7 @@
1028 case GEARMAN_TASK_STATE_CREATED:1051 case GEARMAN_TASK_STATE_CREATED:
1029 if (client->created_fn != NULL)1052 if (client->created_fn != NULL)
1030 {1053 {
1031 ret= (*(client->created_fn))(task);1054 ret= client->created_fn(task);
1032 if (ret != GEARMAN_SUCCESS)1055 if (ret != GEARMAN_SUCCESS)
1033 {1056 {
1034 task->state= GEARMAN_TASK_STATE_CREATED;1057 task->state= GEARMAN_TASK_STATE_CREATED;
@@ -1048,7 +1071,7 @@
1048 case GEARMAN_TASK_STATE_DATA:1071 case GEARMAN_TASK_STATE_DATA:
1049 if (client->data_fn != NULL)1072 if (client->data_fn != NULL)
1050 {1073 {
1051 ret= (*(client->data_fn))(task);1074 ret= client->data_fn(task);
1052 if (ret != GEARMAN_SUCCESS)1075 if (ret != GEARMAN_SUCCESS)
1053 {1076 {
1054 task->state= GEARMAN_TASK_STATE_DATA;1077 task->state= GEARMAN_TASK_STATE_DATA;
@@ -1061,7 +1084,7 @@
1061 case GEARMAN_TASK_STATE_WARNING:1084 case GEARMAN_TASK_STATE_WARNING:
1062 if (client->warning_fn != NULL)1085 if (client->warning_fn != NULL)
1063 {1086 {
1064 ret= (*(client->warning_fn))(task);1087 ret= client->warning_fn(task);
1065 if (ret != GEARMAN_SUCCESS)1088 if (ret != GEARMAN_SUCCESS)
1066 {1089 {
1067 task->state= GEARMAN_TASK_STATE_WARNING;1090 task->state= GEARMAN_TASK_STATE_WARNING;
@@ -1098,7 +1121,7 @@
1098 case GEARMAN_TASK_STATE_STATUS:1121 case GEARMAN_TASK_STATE_STATUS:
1099 if (client->status_fn != NULL)1122 if (client->status_fn != NULL)
1100 {1123 {
1101 ret= (*(client->status_fn))(task);1124 ret= client->status_fn(task);
1102 if (ret != GEARMAN_SUCCESS)1125 if (ret != GEARMAN_SUCCESS)
1103 {1126 {
1104 task->state= GEARMAN_TASK_STATE_STATUS;1127 task->state= GEARMAN_TASK_STATE_STATUS;
@@ -1114,7 +1137,7 @@
1114 case GEARMAN_TASK_STATE_COMPLETE:1137 case GEARMAN_TASK_STATE_COMPLETE:
1115 if (client->complete_fn != NULL)1138 if (client->complete_fn != NULL)
1116 {1139 {
1117 ret= (*(client->complete_fn))(task);1140 ret= client->complete_fn(task);
1118 if (ret != GEARMAN_SUCCESS)1141 if (ret != GEARMAN_SUCCESS)
1119 {1142 {
1120 task->state= GEARMAN_TASK_STATE_COMPLETE;1143 task->state= GEARMAN_TASK_STATE_COMPLETE;
@@ -1129,7 +1152,7 @@
1129 case GEARMAN_TASK_STATE_EXCEPTION:1152 case GEARMAN_TASK_STATE_EXCEPTION:
1130 if (client->exception_fn != NULL)1153 if (client->exception_fn != NULL)
1131 {1154 {
1132 ret= (*(client->exception_fn))(task);1155 ret= client->exception_fn(task);
1133 if (ret != GEARMAN_SUCCESS)1156 if (ret != GEARMAN_SUCCESS)
1134 {1157 {
1135 task->state= GEARMAN_TASK_STATE_EXCEPTION;1158 task->state= GEARMAN_TASK_STATE_EXCEPTION;
@@ -1142,7 +1165,7 @@
1142 case GEARMAN_TASK_STATE_FAIL:1165 case GEARMAN_TASK_STATE_FAIL:
1143 if (client->fail_fn != NULL)1166 if (client->fail_fn != NULL)
1144 {1167 {
1145 ret= (*(client->fail_fn))(task);1168 ret= client->fail_fn(task);
1146 if (ret != GEARMAN_SUCCESS)1169 if (ret != GEARMAN_SUCCESS)
1147 {1170 {
1148 task->state= GEARMAN_TASK_STATE_FAIL;1171 task->state= GEARMAN_TASK_STATE_FAIL;
@@ -1160,7 +1183,7 @@
1160 break;1183 break;
11611184
1162 default:1185 default:
1163 gearman_error_set(client->gearman, "_client_run_task", "unknown state: %u",1186 gearman_set_error(client->gearman, "_client_run_task", "unknown state: %u",
1164 task->state);1187 task->state);
1165 return GEARMAN_UNKNOWN_STATE;1188 return GEARMAN_UNKNOWN_STATE;
1166 }1189 }
@@ -1311,7 +1334,7 @@
1311 task= malloc(sizeof(gearman_task_st));1334 task= malloc(sizeof(gearman_task_st));
1312 if (task == NULL)1335 if (task == NULL)
1313 {1336 {
1314 gearman_error_set(client->gearman, "_task_create", "malloc");1337 gearman_set_error(client->gearman, "_task_create", "malloc");
1315 return NULL;1338 return NULL;
1316 }1339 }
13171340
13181341
=== modified file 'libgearman/client.h'
--- libgearman/client.h 2009-10-02 01:13:31 +0000
+++ libgearman/client.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Client declarations11 * @brief Client Declarations
12 */12 */
1313
14#ifndef __GEARMAN_CLIENT_H__14#ifndef __GEARMAN_CLIENT_H__
@@ -19,7 +19,8 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_client Client Interface22 * @addtogroup gearman_client Client Declarations
23 *
23 * This is the interface gearman clients should use. You can run tasks one at a24 * This is the interface gearman clients should use. You can run tasks one at a
24 * time or concurrently.25 * time or concurrently.
25 *26 *
@@ -227,6 +228,8 @@
227GEARMAN_API228GEARMAN_API
228gearman_return_t gearman_client_wait(gearman_client_st *client);229gearman_return_t gearman_client_wait(gearman_client_st *client);
229230
231/** @} */
232
230/**233/**
231 * @addtogroup gearman_client_single Single Task Interface234 * @addtogroup gearman_client_single Single Task Interface
232 * @ingroup gearman_client235 * @ingroup gearman_client
@@ -654,8 +657,6 @@
654657
655/** @} */658/** @} */
656659
657/** @} */
658
659#ifdef __cplusplus660#ifdef __cplusplus
660}661}
661#endif662#endif
662663
=== modified file 'libgearman/common.h'
--- libgearman/common.h 2009-09-26 16:54:44 +0000
+++ libgearman/common.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief System include files11 * @brief System Include Files
12 */12 */
1313
14#ifndef __GEARMAN_COMMON_H__14#ifndef __GEARMAN_COMMON_H__
@@ -75,34 +75,6 @@
75# endif75# endif
76#endif76#endif
7777
78#ifdef __cplusplus78#include "gearman_local.h"
79extern "C" {
80#endif
81
82/**
83 * Utility function used for error logging
84 * @ingroup gearman_private
85 *
86 * @param[in] gearman Structure previously initialized with gearman_create() or
87 * gearman_clone().
88 * @param[in] function Name of function the error happened in.
89 * @param[in] format Format and variable argument list of message.
90 */
91GEARMAN_LOCAL
92void gearman_error_set(gearman_st *gearman, const char *function,
93 const char *format, ...);
94
95/**
96 * Utility function used for parsing server lists.
97 * @ingroup gearman_private
98 */
99GEARMAN_LOCAL
100gearman_return_t gearman_parse_servers(const char *servers,
101 gearman_parse_server_fn *callback,
102 const void *context);
103
104#ifdef __cplusplus
105}
106#endif
10779
108#endif /* __GEARMAN_COMMON_H__ */80#endif /* __GEARMAN_COMMON_H__ */
10981
=== modified file 'libgearman/conn.c'
--- libgearman/conn.c 2009-09-28 17:47:34 +0000
+++ libgearman/conn.c 2009-11-04 22:14:14 +0000
@@ -8,17 +8,13 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Connection definitions11 * @brief Connection Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
1515
16/*
17 * Private declarations
18 */
19
20/**16/**
21 * @addtogroup gearman_con_private Private Connection Functions17 * @addtogroup gearman_con_static Static Connection Declarations
22 * @ingroup gearman_con18 * @ingroup gearman_con
23 * @{19 * @{
24 */20 */
@@ -31,7 +27,7 @@
31/** @} */27/** @} */
3228
33/*29/*
34 * Public definitions30 * Public Definitions
35 */31 */
3632
37void gearman_con_set_host(gearman_con_st *con, const char *host)33void gearman_con_set_host(gearman_con_st *con, const char *host)
@@ -156,19 +152,18 @@
156 case GEARMAN_CON_SEND_STATE_NONE:152 case GEARMAN_CON_SEND_STATE_NONE:
157 if (!(packet->options & GEARMAN_PACKET_COMPLETE))153 if (!(packet->options & GEARMAN_PACKET_COMPLETE))
158 {154 {
159 gearman_error_set(con->gearman, "gearman_con_send", "packet not complete");155 gearman_set_error(con->gearman, "gearman_con_send",
156 "packet not complete");
160 return GEARMAN_INVALID_PACKET;157 return GEARMAN_INVALID_PACKET;
161 }158 }
162159
163 /* Pack first part of packet, which is everything but the payload. */160 /* Pack first part of packet, which is everything but the payload. */
164 while (1)161 while (1)
165 {162 {
166 send_size= (*con->packet_pack_fn)(packet, con,163 send_size= con->packet_pack_fn(packet, con,
167 con->send_buffer +164 con->send_buffer + con->send_buffer_size,
168 con->send_buffer_size,165 GEARMAN_SEND_BUFFER_SIZE -
169 GEARMAN_SEND_BUFFER_SIZE -166 con->send_buffer_size, &ret);
170 con->send_buffer_size,
171 &ret);
172 if (ret == GEARMAN_SUCCESS)167 if (ret == GEARMAN_SUCCESS)
173 {168 {
174 con->send_buffer_size+= send_size;169 con->send_buffer_size+= send_size;
@@ -182,7 +177,7 @@
182 /* We were asked to flush when the buffer is already flushed! */177 /* We were asked to flush when the buffer is already flushed! */
183 if (con->send_buffer_size == 0)178 if (con->send_buffer_size == 0)
184 {179 {
185 gearman_error_set(con->gearman, "gearman_con_send",180 gearman_set_error(con->gearman, "gearman_con_send",
186 "send buffer too small (%u)",181 "send buffer too small (%u)",
187 GEARMAN_SEND_BUFFER_SIZE);182 GEARMAN_SEND_BUFFER_SIZE);
188 return GEARMAN_SEND_BUFFER_TOO_SMALL;183 return GEARMAN_SEND_BUFFER_TOO_SMALL;
@@ -264,7 +259,7 @@
264 return ret;259 return ret;
265260
266 default:261 default:
267 gearman_error_set(con->gearman, "gearman_con_send", "unknown state: %u",262 gearman_set_error(con->gearman, "gearman_con_send", "unknown state: %u",
268 con->send_state);263 con->send_state);
269 return GEARMAN_UNKNOWN_STATE;264 return GEARMAN_UNKNOWN_STATE;
270 }265 }
@@ -290,13 +285,13 @@
290{285{
291 if (con->send_state != GEARMAN_CON_SEND_STATE_FLUSH_DATA)286 if (con->send_state != GEARMAN_CON_SEND_STATE_FLUSH_DATA)
292 {287 {
293 gearman_error_set(con->gearman, "gearman_con_send_data", "not flushing");288 gearman_set_error(con->gearman, "gearman_con_send_data", "not flushing");
294 return GEARMAN_NOT_FLUSHING;289 return GEARMAN_NOT_FLUSHING;
295 }290 }
296291
297 if (data_size > (con->send_data_size - con->send_data_offset))292 if (data_size > (con->send_data_size - con->send_data_offset))
298 {293 {
299 gearman_error_set(con->gearman, "gearman_con_send_data", "data too large");294 gearman_set_error(con->gearman, "gearman_con_send_data", "data too large");
300 return GEARMAN_DATA_TOO_LARGE;295 return GEARMAN_DATA_TOO_LARGE;
301 }296 }
302297
@@ -336,7 +331,7 @@
336 ret= getaddrinfo(con->host, port_str, &ai, &(con->addrinfo));331 ret= getaddrinfo(con->host, port_str, &ai, &(con->addrinfo));
337 if (ret != 0)332 if (ret != 0)
338 {333 {
339 gearman_error_set(con->gearman, "gearman_con_flush", "getaddrinfo:%s",334 gearman_set_error(con->gearman, "gearman_con_flush", "getaddrinfo:%s",
340 gai_strerror(ret));335 gai_strerror(ret));
341 return GEARMAN_GETADDRINFO;336 return GEARMAN_GETADDRINFO;
342 }337 }
@@ -350,7 +345,7 @@
350 if (con->addrinfo_next == NULL)345 if (con->addrinfo_next == NULL)
351 {346 {
352 con->state= GEARMAN_CON_STATE_ADDRINFO;347 con->state= GEARMAN_CON_STATE_ADDRINFO;
353 gearman_error_set(con->gearman, "gearman_con_flush",348 gearman_set_error(con->gearman, "gearman_con_flush",
354 "could not connect");349 "could not connect");
355 return GEARMAN_COULD_NOT_CONNECT;350 return GEARMAN_COULD_NOT_CONNECT;
356 }351 }
@@ -361,7 +356,8 @@
361 if (con->fd == -1)356 if (con->fd == -1)
362 {357 {
363 con->state= GEARMAN_CON_STATE_ADDRINFO;358 con->state= GEARMAN_CON_STATE_ADDRINFO;
364 gearman_error_set(con->gearman, "gearman_con_flush", "socket:%d", errno);359 gearman_set_error(con->gearman, "gearman_con_flush", "socket:%d",
360 errno);
365 con->gearman->last_errno= errno;361 con->gearman->last_errno= errno;
366 return GEARMAN_ERRNO;362 return GEARMAN_ERRNO;
367 }363 }
@@ -401,7 +397,8 @@
401 break;397 break;
402 }398 }
403399
404 gearman_error_set(con->gearman, "gearman_con_flush", "connect:%d", errno);400 gearman_set_error(con->gearman, "gearman_con_flush", "connect:%d",
401 errno);
405 con->gearman->last_errno= errno;402 con->gearman->last_errno= errno;
406 gearman_con_close(con);403 gearman_con_close(con);
407 return GEARMAN_ERRNO;404 return GEARMAN_ERRNO;
@@ -435,7 +432,7 @@
435 return GEARMAN_IO_WAIT;432 return GEARMAN_IO_WAIT;
436 }433 }
437434
438 gret= gearman_con_wait(con->gearman);435 gret= gearman_wait(con->gearman);
439 if (gret != GEARMAN_SUCCESS)436 if (gret != GEARMAN_SUCCESS)
440 return gret;437 return gret;
441 }438 }
@@ -451,7 +448,7 @@
451 {448 {
452 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))449 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))
453 {450 {
454 gearman_error_set(con->gearman, "gearman_con_flush",451 gearman_set_error(con->gearman, "gearman_con_flush",
455 "lost connection to server (EOF)");452 "lost connection to server (EOF)");
456 }453 }
457 gearman_con_close(con);454 gearman_con_close(con);
@@ -468,7 +465,7 @@
468 if (con->gearman->options & GEARMAN_NON_BLOCKING)465 if (con->gearman->options & GEARMAN_NON_BLOCKING)
469 return GEARMAN_IO_WAIT;466 return GEARMAN_IO_WAIT;
470467
471 gret= gearman_con_wait(con->gearman);468 gret= gearman_wait(con->gearman);
472 if (gret != GEARMAN_SUCCESS)469 if (gret != GEARMAN_SUCCESS)
473 return gret;470 return gret;
474471
@@ -480,14 +477,15 @@
480 {477 {
481 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))478 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))
482 {479 {
483 gearman_error_set(con->gearman, "gearman_con_flush",480 gearman_set_error(con->gearman, "gearman_con_flush",
484 "lost connection to server (%d)", errno);481 "lost connection to server (%d)", errno);
485 }482 }
486 gearman_con_close(con);483 gearman_con_close(con);
487 return GEARMAN_LOST_CONNECTION;484 return GEARMAN_LOST_CONNECTION;
488 }485 }
489486
490 gearman_error_set(con->gearman, "gearman_con_flush", "write:%d", errno);487 gearman_set_error(con->gearman, "gearman_con_flush", "write:%d",
488 errno);
491 con->gearman->last_errno= errno;489 con->gearman->last_errno= errno;
492 gearman_con_close(con);490 gearman_con_close(con);
493 return GEARMAN_ERRNO;491 return GEARMAN_ERRNO;
@@ -518,7 +516,8 @@
518 return GEARMAN_SUCCESS;516 return GEARMAN_SUCCESS;
519517
520 default:518 default:
521 gearman_error_set(con->gearman, "gearman_con_flush", "unknown state: %u", con->state);519 gearman_set_error(con->gearman, "gearman_con_flush", "unknown state: %u",
520 con->state);
522521
523 return GEARMAN_UNKNOWN_STATE;522 return GEARMAN_UNKNOWN_STATE;
524 }523 }
@@ -536,12 +535,12 @@
536 case GEARMAN_CON_RECV_STATE_NONE:535 case GEARMAN_CON_RECV_STATE_NONE:
537 if (con->state != GEARMAN_CON_STATE_CONNECTED)536 if (con->state != GEARMAN_CON_STATE_CONNECTED)
538 {537 {
539 gearman_error_set(con->gearman, "gearman_con_recv", "not connected");538 gearman_set_error(con->gearman, "gearman_con_recv", "not connected");
540 *ret_ptr= GEARMAN_NOT_CONNECTED;539 *ret_ptr= GEARMAN_NOT_CONNECTED;
541 return NULL;540 return NULL;
542 }541 }
543542
544 con->recv_packet= gearman_packet_create(con->gearman, packet);543 con->recv_packet= gearman_add_packet(con->gearman, packet);
545 if (con->recv_packet == NULL)544 if (con->recv_packet == NULL)
546 {545 {
547 *ret_ptr= GEARMAN_MEMORY_ALLOCATION_FAILURE;546 *ret_ptr= GEARMAN_MEMORY_ALLOCATION_FAILURE;
@@ -555,9 +554,9 @@
555 {554 {
556 if (con->recv_buffer_size > 0)555 if (con->recv_buffer_size > 0)
557 {556 {
558 recv_size= (*con->packet_unpack_fn)(con->recv_packet, con,557 recv_size= con->packet_unpack_fn(con->recv_packet, con,
559 con->recv_buffer_ptr,558 con->recv_buffer_ptr,
560 con->recv_buffer_size, ret_ptr);559 con->recv_buffer_size, ret_ptr);
561 con->recv_buffer_ptr+= recv_size;560 con->recv_buffer_ptr+= recv_size;
562 con->recv_buffer_size-= recv_size;561 con->recv_buffer_size-= recv_size;
563 if (*ret_ptr == GEARMAN_SUCCESS)562 if (*ret_ptr == GEARMAN_SUCCESS)
@@ -602,7 +601,7 @@
602 else601 else
603 {602 {
604 packet->data= packet->gearman->workload_malloc_fn(packet->data_size,603 packet->data= packet->gearman->workload_malloc_fn(packet->data_size,
605 (void *)(packet->gearman->workload_malloc_context));604 (void *)packet->gearman->workload_malloc_context);
606 }605 }
607 if (packet->data == NULL)606 if (packet->data == NULL)
608 {607 {
@@ -630,7 +629,7 @@
630 break;629 break;
631630
632 default:631 default:
633 gearman_error_set(con->gearman, "gearman_con_recv", "unknown state: %u",632 gearman_set_error(con->gearman, "gearman_con_recv", "unknown state: %u",
634 con->recv_state);633 con->recv_state);
635 *ret_ptr= GEARMAN_UNKNOWN_STATE;634 *ret_ptr= GEARMAN_UNKNOWN_STATE;
636 return NULL;635 return NULL;
@@ -702,7 +701,7 @@
702 {701 {
703 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))702 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))
704 {703 {
705 gearman_error_set(con->gearman, "gearman_con_read",704 gearman_set_error(con->gearman, "gearman_con_read",
706 "lost connection to server (EOF)");705 "lost connection to server (EOF)");
707 }706 }
708 gearman_con_close(con);707 gearman_con_close(con);
@@ -723,7 +722,7 @@
723 return 0;722 return 0;
724 }723 }
725724
726 *ret_ptr= gearman_con_wait(con->gearman);725 *ret_ptr= gearman_wait(con->gearman);
727 if (*ret_ptr != GEARMAN_SUCCESS)726 if (*ret_ptr != GEARMAN_SUCCESS)
728 return 0;727 return 0;
729728
@@ -735,14 +734,14 @@
735 {734 {
736 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))735 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))
737 {736 {
738 gearman_error_set(con->gearman, "gearman_con_read",737 gearman_set_error(con->gearman, "gearman_con_read",
739 "lost connection to server (%d)", errno);738 "lost connection to server (%d)", errno);
740 }739 }
741 *ret_ptr= GEARMAN_LOST_CONNECTION;740 *ret_ptr= GEARMAN_LOST_CONNECTION;
742 }741 }
743 else742 else
744 {743 {
745 gearman_error_set(con->gearman, "gearman_con_read", "read:%d", errno);744 gearman_set_error(con->gearman, "gearman_con_read", "read:%d", errno);
746 con->gearman->last_errno= errno;745 con->gearman->last_errno= errno;
747 *ret_ptr= GEARMAN_ERRNO;746 *ret_ptr= GEARMAN_ERRNO;
748 }747 }
@@ -769,7 +768,7 @@
769768
770 if (con->gearman->event_watch_fn != NULL)769 if (con->gearman->event_watch_fn != NULL)
771 {770 {
772 ret= (con->gearman->event_watch_fn)(con, con->events,771 ret= con->gearman->event_watch_fn(con, con->events,
773 (void *)con->gearman->event_watch_context);772 (void *)con->gearman->event_watch_context);
774 if (ret != GEARMAN_SUCCESS)773 if (ret != GEARMAN_SUCCESS)
775 {774 {
@@ -797,7 +796,7 @@
797 if (revents & POLLOUT && !(con->events & POLLOUT) &&796 if (revents & POLLOUT && !(con->events & POLLOUT) &&
798 con->gearman->event_watch_fn != NULL)797 con->gearman->event_watch_fn != NULL)
799 {798 {
800 ret= (con->gearman->event_watch_fn)(con, con->events,799 ret= con->gearman->event_watch_fn(con, con->events,
801 (void *)con->gearman->event_watch_context);800 (void *)con->gearman->event_watch_context);
802 if (ret != GEARMAN_SUCCESS)801 if (ret != GEARMAN_SUCCESS)
803 {802 {
@@ -840,7 +839,7 @@
840}839}
841840
842/*841/*
843 * Private definitions842 * Static Definitions
844 */843 */
845844
846static gearman_return_t _con_setsockopt(gearman_con_st *con)845static gearman_return_t _con_setsockopt(gearman_con_st *con)
@@ -852,9 +851,9 @@
852 ret= 1;851 ret= 1;
853 ret= setsockopt(con->fd, IPPROTO_TCP, TCP_NODELAY, &ret,852 ret= setsockopt(con->fd, IPPROTO_TCP, TCP_NODELAY, &ret,
854 (socklen_t)sizeof(int));853 (socklen_t)sizeof(int));
855 if (ret == -1)854 if (ret == -1 && errno != EOPNOTSUPP)
856 {855 {
857 gearman_error_set(con->gearman, "_con_setsockopt",856 gearman_set_error(con->gearman, "_con_setsockopt",
858 "setsockopt:TCP_NODELAY:%d", errno);857 "setsockopt:TCP_NODELAY:%d", errno);
859 return GEARMAN_ERRNO;858 return GEARMAN_ERRNO;
860 }859 }
@@ -865,7 +864,7 @@
865 (socklen_t)sizeof(struct linger));864 (socklen_t)sizeof(struct linger));
866 if (ret == -1)865 if (ret == -1)
867 {866 {
868 gearman_error_set(con->gearman, "_con_setsockopt",867 gearman_set_error(con->gearman, "_con_setsockopt",
869 "setsockopt:SO_LINGER:%d", errno);868 "setsockopt:SO_LINGER:%d", errno);
870 return GEARMAN_ERRNO;869 return GEARMAN_ERRNO;
871 }870 }
@@ -876,7 +875,7 @@
876 (socklen_t)sizeof(struct timeval));875 (socklen_t)sizeof(struct timeval));
877 if (ret == -1 && errno != ENOPROTOOPT)876 if (ret == -1 && errno != ENOPROTOOPT)
878 {877 {
879 gearman_error_set(con->gearman, "_con_setsockopt",878 gearman_set_error(con->gearman, "_con_setsockopt",
880 "setsockopt:SO_SNDTIMEO:%d", errno);879 "setsockopt:SO_SNDTIMEO:%d", errno);
881 return GEARMAN_ERRNO;880 return GEARMAN_ERRNO;
882 }881 }
@@ -885,7 +884,7 @@
885 (socklen_t)sizeof(struct timeval));884 (socklen_t)sizeof(struct timeval));
886 if (ret == -1 && errno != ENOPROTOOPT)885 if (ret == -1 && errno != ENOPROTOOPT)
887 {886 {
888 gearman_error_set(con->gearman, "_con_setsockopt",887 gearman_set_error(con->gearman, "_con_setsockopt",
889 "setsockopt:SO_RCVTIMEO:%d", errno);888 "setsockopt:SO_RCVTIMEO:%d", errno);
890 return GEARMAN_ERRNO;889 return GEARMAN_ERRNO;
891 }890 }
@@ -894,7 +893,7 @@
894 ret= setsockopt(con->fd, SOL_SOCKET, SO_SNDBUF, &ret, (socklen_t)sizeof(int));893 ret= setsockopt(con->fd, SOL_SOCKET, SO_SNDBUF, &ret, (socklen_t)sizeof(int));
895 if (ret == -1)894 if (ret == -1)
896 {895 {
897 gearman_error_set(con->gearman, "_con_setsockopt",896 gearman_set_error(con->gearman, "_con_setsockopt",
898 "setsockopt:SO_SNDBUF:%d", errno);897 "setsockopt:SO_SNDBUF:%d", errno);
899 return GEARMAN_ERRNO;898 return GEARMAN_ERRNO;
900 }899 }
@@ -903,7 +902,7 @@
903 ret= setsockopt(con->fd, SOL_SOCKET, SO_RCVBUF, &ret, (socklen_t)sizeof(int));902 ret= setsockopt(con->fd, SOL_SOCKET, SO_RCVBUF, &ret, (socklen_t)sizeof(int));
904 if (ret == -1)903 if (ret == -1)
905 {904 {
906 gearman_error_set(con->gearman, "_con_setsockopt",905 gearman_set_error(con->gearman, "_con_setsockopt",
907 "setsockopt:SO_RCVBUF:%d", errno);906 "setsockopt:SO_RCVBUF:%d", errno);
908 return GEARMAN_ERRNO;907 return GEARMAN_ERRNO;
909 }908 }
@@ -911,16 +910,16 @@
911 ret= fcntl(con->fd, F_GETFL, 0);910 ret= fcntl(con->fd, F_GETFL, 0);
912 if (ret == -1)911 if (ret == -1)
913 {912 {
914 gearman_error_set(con->gearman, "_con_setsockopt", "fcntl:F_GETFL:%d", errno);913 gearman_set_error(con->gearman, "_con_setsockopt", "fcntl:F_GETFL:%d",
915914 errno);
916 return GEARMAN_ERRNO;915 return GEARMAN_ERRNO;
917 }916 }
918917
919 ret= fcntl(con->fd, F_SETFL, ret | O_NONBLOCK);918 ret= fcntl(con->fd, F_SETFL, ret | O_NONBLOCK);
920 if (ret == -1)919 if (ret == -1)
921 {920 {
922 gearman_error_set(con->gearman, "_con_setsockopt", "fcntl:F_SETFL:%d", errno);921 gearman_set_error(con->gearman, "_con_setsockopt", "fcntl:F_SETFL:%d",
923922 errno);
924 return GEARMAN_ERRNO;923 return GEARMAN_ERRNO;
925 }924 }
926925
927926
=== modified file 'libgearman/conn.h'
--- libgearman/conn.h 2009-09-24 23:43:15 +0000
+++ libgearman/conn.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Connection declarations11 * @brief Connection Declarations
12 */12 */
1313
14#ifndef __GEARMAN_CON_H__14#ifndef __GEARMAN_CON_H__
@@ -19,11 +19,14 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_con Connection Handling22 * @addtogroup gearman_con Connection Declarations
23 * @ingroup gearman
24 *
23 * This is a low level interface for gearman connections. This is used25 * This is a low level interface for gearman connections. This is used
24 * internally by both client and worker interfaces, so you probably want to26 * internally by both client and worker interfaces, so you probably want to
25 * look there first. This is usually used to write lower level clients, workers,27 * look there first. This is usually used to write lower level clients, workers,
26 * proxies, or your own server.28 * proxies, or your own server.
29 *
27 * @{30 * @{
28 */31 */
2932
3033
=== modified file 'libgearman/constants.h'
--- libgearman/constants.h 2009-09-28 17:47:34 +0000
+++ libgearman/constants.h 2009-11-04 22:14:14 +0000
@@ -19,7 +19,10 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_constants Gearman Constants22 * @addtogroup gearman_constants Constants
23 * @ingroup gearman
24 * @ingroup gearman_client
25 * @ingroup gearman_worker
23 * @{26 * @{
24 */27 */
2528
@@ -40,17 +43,6 @@
40#define GEARMAN_RECV_BUFFER_SIZE 819243#define GEARMAN_RECV_BUFFER_SIZE 8192
41#define GEARMAN_WORKER_WAIT_TIMEOUT (10 * 1000) /* Milliseconds */44#define GEARMAN_WORKER_WAIT_TIMEOUT (10 * 1000) /* Milliseconds */
4245
43/* Types. */
44typedef struct gearman_st gearman_st;
45typedef struct gearman_con_st gearman_con_st;
46typedef struct gearman_packet_st gearman_packet_st;
47typedef struct gearman_command_info_st gearman_command_info_st;
48typedef struct gearman_task_st gearman_task_st;
49typedef struct gearman_client_st gearman_client_st;
50typedef struct gearman_job_st gearman_job_st;
51typedef struct gearman_worker_st gearman_worker_st;
52typedef struct gearman_worker_function_st gearman_worker_function_st;
53
54/**46/**
55 * Return codes.47 * Return codes.
56 */48 */
@@ -111,6 +103,7 @@
111 */103 */
112typedef enum104typedef enum
113{105{
106 GEARMAN_VERBOSE_NEVER,
114 GEARMAN_VERBOSE_FATAL,107 GEARMAN_VERBOSE_FATAL,
115 GEARMAN_VERBOSE_ERROR,108 GEARMAN_VERBOSE_ERROR,
116 GEARMAN_VERBOSE_INFO,109 GEARMAN_VERBOSE_INFO,
@@ -386,10 +379,24 @@
386} gearman_worker_work_state_t;379} gearman_worker_work_state_t;
387380
388/**381/**
389 * @addtogroup gearman_constants Gearman Constants382 * @addtogroup gearman_types Types
383 * @ingroup gearman
384 * @ingroup gearman_client
385 * @ingroup gearman_worker
390 * @{386 * @{
391 */387 */
392388
389/* Types. */
390typedef struct gearman_st gearman_st;
391typedef struct gearman_con_st gearman_con_st;
392typedef struct gearman_packet_st gearman_packet_st;
393typedef struct gearman_command_info_st gearman_command_info_st;
394typedef struct gearman_task_st gearman_task_st;
395typedef struct gearman_client_st gearman_client_st;
396typedef struct gearman_job_st gearman_job_st;
397typedef struct gearman_worker_st gearman_worker_st;
398typedef struct gearman_worker_function_st gearman_worker_function_st;
399
393/* Function types. */400/* Function types. */
394typedef gearman_return_t (gearman_workload_fn)(gearman_task_st *task);401typedef gearman_return_t (gearman_workload_fn)(gearman_task_st *task);
395typedef gearman_return_t (gearman_created_fn)(gearman_task_st *task);402typedef gearman_return_t (gearman_created_fn)(gearman_task_st *task);
396403
=== modified file 'libgearman/gearman.c'
--- libgearman/gearman.c 2009-09-28 17:47:34 +0000
+++ libgearman/gearman.c 2009-11-04 22:14:14 +0000
@@ -8,17 +8,13 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Gearman core definitions11 * @brief Gearman Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
1515
16/*
17 * Private declarations
18 */
19
20/**16/**
21 * @addtogroup gearman_private Private Functions17 * @addtogroup gearman_static Static Gearman Declarations
22 * @ingroup gearman18 * @ingroup gearman
23 * @{19 * @{
24 */20 */
@@ -28,6 +24,7 @@
28 */24 */
29static const char *_verbose_name[GEARMAN_VERBOSE_MAX]=25static const char *_verbose_name[GEARMAN_VERBOSE_MAX]=
30{26{
27 "NEVER",
31 "FATAL",28 "FATAL",
32 "ERROR",29 "ERROR",
33 "INFO",30 "INFO",
@@ -38,7 +35,7 @@
38/** @} */35/** @} */
3936
40/*37/*
41 * Public definitions38 * Public Definitions
42 */39 */
4340
44const char *gearman_version(void)41const char *gearman_version(void)
@@ -108,7 +105,7 @@
108105
109 for (con= from->con_list; con != NULL; con= con->next)106 for (con= from->con_list; con != NULL; con= con->next)
110 {107 {
111 if (gearman_con_clone(gearman, NULL, con) == NULL)108 if (gearman_clone_con(gearman, NULL, con) == NULL)
112 {109 {
113 gearman_free(gearman);110 gearman_free(gearman);
114 return NULL;111 return NULL;
@@ -123,8 +120,8 @@
123120
124void gearman_free(gearman_st *gearman)121void gearman_free(gearman_st *gearman)
125{122{
126 gearman_con_free_all(gearman);123 gearman_free_all_cons(gearman);
127 gearman_packet_free_all(gearman);124 gearman_free_all_packets(gearman);
128125
129 if (gearman->pfds != NULL)126 if (gearman->pfds != NULL)
130 free(gearman->pfds);127 free(gearman->pfds);
@@ -209,14 +206,14 @@
209 * Connection related functions.206 * Connection related functions.
210 */207 */
211208
212gearman_con_st *gearman_con_create(gearman_st *gearman, gearman_con_st *con)209gearman_con_st *gearman_add_con(gearman_st *gearman, gearman_con_st *con)
213{210{
214 if (con == NULL)211 if (con == NULL)
215 {212 {
216 con= malloc(sizeof(gearman_con_st));213 con= malloc(sizeof(gearman_con_st));
217 if (con == NULL)214 if (con == NULL)
218 {215 {
219 gearman_error_set(gearman, "gearman_con_create", "malloc");216 gearman_set_error(gearman, "gearman_add_con", "malloc");
220 return NULL;217 return NULL;
221 }218 }
222219
@@ -264,10 +261,10 @@
264 return con;261 return con;
265}262}
266263
267gearman_con_st *gearman_con_add(gearman_st *gearman, gearman_con_st *con,264gearman_con_st *gearman_add_con_args(gearman_st *gearman, gearman_con_st *con,
268 const char *host, in_port_t port)265 const char *host, in_port_t port)
269{266{
270 con= gearman_con_create(gearman, con);267 con= gearman_add_con(gearman, con);
271 if (con == NULL)268 if (con == NULL)
272 return NULL;269 return NULL;
273270
@@ -277,10 +274,10 @@
277 return con;274 return con;
278}275}
279276
280gearman_con_st *gearman_con_clone(gearman_st *gearman, gearman_con_st *con,277gearman_con_st *gearman_clone_con(gearman_st *gearman, gearman_con_st *con,
281 const gearman_con_st *from)278 const gearman_con_st *from)
282{279{
283 con= gearman_con_create(gearman, con);280 con= gearman_add_con(gearman, con);
284 if (con == NULL)281 if (con == NULL)
285 return NULL;282 return NULL;
286283
@@ -300,7 +297,7 @@
300 gearman_con_reset_addrinfo(con);297 gearman_con_reset_addrinfo(con);
301298
302 if (con->protocol_context != NULL && con->protocol_context_free_fn != NULL)299 if (con->protocol_context != NULL && con->protocol_context_free_fn != NULL)
303 (*con->protocol_context_free_fn)(con, (void *)con->protocol_context);300 con->protocol_context_free_fn(con, (void *)con->protocol_context);
304301
305 if (con->gearman->con_list == con)302 if (con->gearman->con_list == con)
306 con->gearman->con_list= con->next;303 con->gearman->con_list= con->next;
@@ -317,13 +314,13 @@
317 free(con);314 free(con);
318}315}
319316
320void gearman_con_free_all(gearman_st *gearman)317void gearman_free_all_cons(gearman_st *gearman)
321{318{
322 while (gearman->con_list != NULL)319 while (gearman->con_list != NULL)
323 gearman_con_free(gearman->con_list);320 gearman_con_free(gearman->con_list);
324}321}
325322
326gearman_return_t gearman_con_flush_all(gearman_st *gearman)323gearman_return_t gearman_flush_all(gearman_st *gearman)
327{324{
328 gearman_con_st *con;325 gearman_con_st *con;
329 gearman_return_t ret;326 gearman_return_t ret;
@@ -341,8 +338,8 @@
341 return GEARMAN_SUCCESS;338 return GEARMAN_SUCCESS;
342}339}
343340
344gearman_return_t gearman_con_send_all(gearman_st *gearman,341gearman_return_t gearman_send_all(gearman_st *gearman,
345 const gearman_packet_st *packet)342 const gearman_packet_st *packet)
346{343{
347 gearman_return_t ret;344 gearman_return_t ret;
348 gearman_con_st *con;345 gearman_con_st *con;
@@ -371,7 +368,7 @@
371368
372 while (gearman->sending != 0)369 while (gearman->sending != 0)
373 {370 {
374 while ((con= gearman_con_ready(gearman)) != NULL)371 while ((con= gearman_ready(gearman)) != NULL)
375 {372 {
376 ret= gearman_con_send(con, packet, true);373 ret= gearman_con_send(con, packet, true);
377 if (ret != GEARMAN_SUCCESS)374 if (ret != GEARMAN_SUCCESS)
@@ -397,7 +394,7 @@
397 return GEARMAN_IO_WAIT;394 return GEARMAN_IO_WAIT;
398 }395 }
399396
400 ret= gearman_con_wait(gearman);397 ret= gearman_wait(gearman);
401 if (ret != GEARMAN_SUCCESS)398 if (ret != GEARMAN_SUCCESS)
402 {399 {
403 gearman->options= options;400 gearman->options= options;
@@ -409,7 +406,7 @@
409 return GEARMAN_SUCCESS;406 return GEARMAN_SUCCESS;
410}407}
411408
412gearman_return_t gearman_con_wait(gearman_st *gearman)409gearman_return_t gearman_wait(gearman_st *gearman)
413{410{
414 gearman_con_st *con;411 gearman_con_st *con;
415 struct pollfd *pfds;412 struct pollfd *pfds;
@@ -422,7 +419,7 @@
422 pfds= realloc(gearman->pfds, gearman->con_count * sizeof(struct pollfd));419 pfds= realloc(gearman->pfds, gearman->con_count * sizeof(struct pollfd));
423 if (pfds == NULL)420 if (pfds == NULL)
424 {421 {
425 gearman_error_set(gearman, "gearman_con_wait", "realloc");422 gearman_set_error(gearman, "gearman_wait", "realloc");
426 return GEARMAN_MEMORY_ALLOCATION_FAILURE;423 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
427 }424 }
428425
@@ -446,8 +443,7 @@
446443
447 if (x == 0)444 if (x == 0)
448 {445 {
449 gearman_error_set(gearman, "gearman_con_wait",446 gearman_set_error(gearman, "gearman_wait", "no active file descriptors");
450 "no active file descriptors");
451 return GEARMAN_NO_ACTIVE_FDS;447 return GEARMAN_NO_ACTIVE_FDS;
452 }448 }
453449
@@ -459,7 +455,7 @@
459 if (errno == EINTR)455 if (errno == EINTR)
460 continue;456 continue;
461457
462 gearman_error_set(gearman, "gearman_con_wait", "poll:%d", errno);458 gearman_set_error(gearman, "gearman_wait", "poll:%d", errno);
463 gearman->last_errno= errno;459 gearman->last_errno= errno;
464 return GEARMAN_ERRNO;460 return GEARMAN_ERRNO;
465 }461 }
@@ -469,7 +465,7 @@
469465
470 if (ret == 0)466 if (ret == 0)
471 {467 {
472 gearman_error_set(gearman, "gearman_con_wait", "timeout reached");468 gearman_set_error(gearman, "gearman_wait", "timeout reached");
473 return GEARMAN_TIMEOUT;469 return GEARMAN_TIMEOUT;
474 }470 }
475471
@@ -489,7 +485,7 @@
489 return GEARMAN_SUCCESS;485 return GEARMAN_SUCCESS;
490}486}
491487
492gearman_con_st *gearman_con_ready(gearman_st *gearman)488gearman_con_st *gearman_ready(gearman_st *gearman)
493{489{
494 gearman_con_st *con;490 gearman_con_st *con;
495491
@@ -508,17 +504,17 @@
508 return NULL;504 return NULL;
509}505}
510506
511gearman_return_t gearman_con_echo(gearman_st *gearman, const void *workload,507gearman_return_t gearman_echo(gearman_st *gearman, const void *workload,
512 size_t workload_size)508 size_t workload_size)
513{509{
514 gearman_con_st *con;510 gearman_con_st *con;
515 gearman_options_t options= gearman->options;511 gearman_options_t options= gearman->options;
516 gearman_packet_st packet;512 gearman_packet_st packet;
517 gearman_return_t ret;513 gearman_return_t ret;
518514
519 ret= gearman_packet_add(gearman, &packet, GEARMAN_MAGIC_REQUEST,515 ret= gearman_add_packet_args(gearman, &packet, GEARMAN_MAGIC_REQUEST,
520 GEARMAN_COMMAND_ECHO_REQ, workload, workload_size,516 GEARMAN_COMMAND_ECHO_REQ, &workload,
521 NULL);517 &workload_size, 1);
522 if (ret != GEARMAN_SUCCESS)518 if (ret != GEARMAN_SUCCESS)
523 return ret;519 return ret;
524520
@@ -548,7 +544,7 @@
548 gearman_packet_free(&(con->packet));544 gearman_packet_free(&(con->packet));
549 gearman_packet_free(&packet);545 gearman_packet_free(&packet);
550 gearman->options= options;546 gearman->options= options;
551 gearman_error_set(gearman, "gearman_con_echo", "corruption during echo");547 gearman_set_error(gearman, "gearman_echo", "corruption during echo");
552 return GEARMAN_ECHO_DATA_CORRUPTION;548 return GEARMAN_ECHO_DATA_CORRUPTION;
553 }549 }
554550
@@ -564,15 +560,15 @@
564 * Packet related functions.560 * Packet related functions.
565 */561 */
566562
567gearman_packet_st *gearman_packet_create(gearman_st *gearman,563gearman_packet_st *gearman_add_packet(gearman_st *gearman,
568 gearman_packet_st *packet)564 gearman_packet_st *packet)
569{565{
570 if (packet == NULL)566 if (packet == NULL)
571 {567 {
572 packet= malloc(sizeof(gearman_packet_st));568 packet= malloc(sizeof(gearman_packet_st));
573 if (packet == NULL)569 if (packet == NULL)
574 {570 {
575 gearman_error_set(gearman, "gearman_packet_create", "malloc");571 gearman_set_error(gearman, "gearman_add_packet", "malloc");
576 return NULL;572 return NULL;
577 }573 }
578574
@@ -604,42 +600,34 @@
604 return packet;600 return packet;
605}601}
606602
607gearman_return_t gearman_packet_add(gearman_st *gearman,603gearman_return_t gearman_add_packet_args(gearman_st *gearman,
608 gearman_packet_st *packet,604 gearman_packet_st *packet,
609 gearman_magic_t magic,605 gearman_magic_t magic,
610 gearman_command_t command,606 gearman_command_t command,
611 const void *arg, ...)607 const void *args[],
608 const size_t args_size[],
609 size_t args_count)
612{610{
613 va_list ap;
614 size_t arg_size;
615 gearman_return_t ret;611 gearman_return_t ret;
612 size_t x;
616613
617 packet= gearman_packet_create(gearman, packet);614 packet= gearman_add_packet(gearman, packet);
618 if (packet == NULL)615 if (packet == NULL)
619 return GEARMAN_MEMORY_ALLOCATION_FAILURE;616 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
620617
621 packet->magic= magic;618 packet->magic= magic;
622 packet->command= command;619 packet->command= command;
623620
624 va_start(ap, arg);621 for (x= 0; x < args_count; x++)
625
626 while (arg != NULL)
627 {622 {
628 arg_size = va_arg(ap, size_t);623 ret= gearman_packet_add_arg(packet, args[x], args_size[x]);
629
630 ret= gearman_packet_add_arg(packet, arg, arg_size);
631 if (ret != GEARMAN_SUCCESS)624 if (ret != GEARMAN_SUCCESS)
632 {625 {
633 va_end(ap);
634 gearman_packet_free(packet);626 gearman_packet_free(packet);
635 return ret;627 return ret;
636 }628 }
637
638 arg = va_arg(ap, void *);
639 }629 }
640630
641 va_end(ap);
642
643 return gearman_packet_pack_header(packet);631 return gearman_packet_pack_header(packet);
644}632}
645633
@@ -651,11 +639,11 @@
651 if (packet->options & GEARMAN_PACKET_FREE_DATA && packet->data != NULL)639 if (packet->options & GEARMAN_PACKET_FREE_DATA && packet->data != NULL)
652 {640 {
653 if (packet->gearman->workload_free_fn == NULL)641 if (packet->gearman->workload_free_fn == NULL)
654 free((void *)(packet->data));642 free((void *)packet->data);
655 else643 else
656 {644 {
657 packet->gearman->workload_free_fn((void *)(packet->data),645 packet->gearman->workload_free_fn((void *)(packet->data),
658 (void *)(packet->gearman->workload_free_context));646 (void *)packet->gearman->workload_free_context);
659 }647 }
660 }648 }
661649
@@ -674,50 +662,65 @@
674 free(packet);662 free(packet);
675}663}
676664
677void gearman_packet_free_all(gearman_st *gearman)665void gearman_free_all_packets(gearman_st *gearman)
678{666{
679 while (gearman->packet_list != NULL)667 while (gearman->packet_list != NULL)
680 gearman_packet_free(gearman->packet_list);668 gearman_packet_free(gearman->packet_list);
681}669}
682670
683/*671/*
684 * Local package functions.672 * Local Definitions
685 */673 */
686void gearman_error_set(gearman_st *gearman, const char *function,674
675void gearman_set_error(gearman_st *gearman, const char *function,
687 const char *format, ...)676 const char *format, ...)
688{677{
689 size_t length;678 size_t size;
690 char *ptr;679 char *ptr;
691 char log_buffer[GEARMAN_MAX_ERROR_SIZE];680 char log_buffer[GEARMAN_MAX_ERROR_SIZE];
692 va_list arg;681 va_list args;
693682
694 va_start(arg, format);683 size= strlen(function);
695684 ptr= memcpy(log_buffer, function, size);
696 length= strlen(function);685 ptr+= size;
697
698 /* Copy the function name and : before the format */
699 ptr= memcpy(log_buffer, function, length);
700 ptr+= length;
701 ptr[0]= ':';686 ptr[0]= ':';
702 length++;687 size++;
703 ptr++;688 ptr++;
704689
705 length+= (size_t)vsnprintf(ptr, GEARMAN_MAX_ERROR_SIZE - length, format, arg);690 va_start(args, format);
706691 size+= (size_t)vsnprintf(ptr, GEARMAN_MAX_ERROR_SIZE - size, format, args);
707 if (gearman->log_fn == NULL)692 va_end(args);
708 {693
709 if (length >= GEARMAN_MAX_ERROR_SIZE)694 if (gearman->log_fn == NULL)
710 length= GEARMAN_MAX_ERROR_SIZE - 1;695 {
711696 if (size >= GEARMAN_MAX_ERROR_SIZE)
712 memcpy(gearman->last_error, log_buffer, length + 1);697 size= GEARMAN_MAX_ERROR_SIZE - 1;
713 }698
714 else699 memcpy(gearman->last_error, log_buffer, size + 1);
715 {700 }
716 (*(gearman->log_fn))(log_buffer, GEARMAN_VERBOSE_FATAL,701 else
717 (void *)(gearman)->log_context);702 {
718 }703 gearman->log_fn(log_buffer, GEARMAN_VERBOSE_FATAL,
719704 (void *)gearman->log_context);
720 va_end(arg);705 }
706}
707
708void gearman_log(gearman_st *gearman, gearman_verbose_t verbose,
709 const char *format, va_list args)
710{
711 char log_buffer[GEARMAN_MAX_ERROR_SIZE];
712
713 if (gearman->log_fn == NULL)
714 {
715 printf("%5s: ", gearman_verbose_name(verbose));
716 vprintf(format, args);
717 printf("\n");
718 }
719 else
720 {
721 vsnprintf(log_buffer, GEARMAN_MAX_ERROR_SIZE, format, args);
722 gearman->log_fn(log_buffer, verbose, (void *)gearman->log_context);
723 }
721}724}
722725
723gearman_return_t gearman_parse_servers(const char *servers,726gearman_return_t gearman_parse_servers(const char *servers,
724727
=== modified file 'libgearman/gearman.h'
--- libgearman/gearman.h 2009-10-02 01:13:31 +0000
+++ libgearman/gearman.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Gearman core declarations11 * @brief Gearman Declarations
12 */12 */
1313
14#ifndef __GEARMAN_H__14#ifndef __GEARMAN_H__
@@ -25,7 +25,6 @@
25#include <arpa/inet.h>25#include <arpa/inet.h>
26#include <poll.h>26#include <poll.h>
27#include <sys/uio.h>27#include <sys/uio.h>
28#include <event.h>
29#include <stdarg.h>28#include <stdarg.h>
3029
31#include <libgearman/visibility.h>30#include <libgearman/visibility.h>
@@ -43,7 +42,8 @@
43#endif42#endif
4443
45/**44/**
46 * @addtogroup gearman Gearman Core Interface45 * @addtogroup gearman Gearman Declarations
46 *
47 * This is a low level interface for gearman library instances. This is used47 * This is a low level interface for gearman library instances. This is used
48 * internally by both client and worker interfaces, so you probably want to48 * internally by both client and worker interfaces, so you probably want to
49 * look there first. This is usually used to write lower level clients, workers,49 * look there first. This is usually used to write lower level clients, workers,
@@ -52,6 +52,7 @@
52 * There is no locking within a single gearman_st structure, so for threaded52 * There is no locking within a single gearman_st structure, so for threaded
53 * applications you must either ensure isolation in the application or use53 * applications you must either ensure isolation in the application or use
54 * multiple gearman_st structures (for example, one for each thread).54 * multiple gearman_st structures (for example, one for each thread).
55 *
55 * @{56 * @{
56 */57 */
5758
@@ -266,7 +267,7 @@
266 * failure this will be NULL.267 * failure this will be NULL.
267 */268 */
268GEARMAN_API269GEARMAN_API
269gearman_con_st *gearman_con_create(gearman_st *gearman, gearman_con_st *con);270gearman_con_st *gearman_add_con(gearman_st *gearman, gearman_con_st *con);
270271
271/**272/**
272 * Create a connection structure with the given host and port.273 * Create a connection structure with the given host and port.
@@ -280,8 +281,8 @@
280 * failure this will be NULL.281 * failure this will be NULL.
281 */282 */
282GEARMAN_API283GEARMAN_API
283gearman_con_st *gearman_con_add(gearman_st *gearman, gearman_con_st *con,284gearman_con_st *gearman_add_con_args(gearman_st *gearman, gearman_con_st *con,
284 const char *host, in_port_t port);285 const char *host, in_port_t port);
285286
286/**287/**
287 * Clone a connection structure.288 * Clone a connection structure.
@@ -294,14 +295,14 @@
294 * failure this will be NULL.295 * failure this will be NULL.
295 */296 */
296GEARMAN_API297GEARMAN_API
297gearman_con_st *gearman_con_clone(gearman_st *gearman, gearman_con_st *con,298gearman_con_st *gearman_clone_con(gearman_st *gearman, gearman_con_st *con,
298 const gearman_con_st *from);299 const gearman_con_st *from);
299300
300/**301/**
301 * Free a connection structure.302 * Free a connection structure.
302 *303 *
303 * @param[in] con Structure previously initialized with gearman_con_create(),304 * @param[in] con Structure previously initialized with gearman_add_con(),
304 * gearman_con_add(), or gearman_con_clone().305 * gearman_add_con_args(), or gearman_clone_con().
305 */306 */
306GEARMAN_API307GEARMAN_API
307void gearman_con_free(gearman_con_st *con);308void gearman_con_free(gearman_con_st *con);
@@ -313,7 +314,7 @@
313 * gearman_clone().314 * gearman_clone().
314 */315 */
315GEARMAN_API316GEARMAN_API
316void gearman_con_free_all(gearman_st *gearman);317void gearman_free_all_cons(gearman_st *gearman);
317318
318/**319/**
319 * Flush the send buffer for all connections.320 * Flush the send buffer for all connections.
@@ -323,7 +324,7 @@
323 * @return Standard gearman return value.324 * @return Standard gearman return value.
324 */325 */
325GEARMAN_API326GEARMAN_API
326gearman_return_t gearman_con_flush_all(gearman_st *gearman);327gearman_return_t gearman_flush_all(gearman_st *gearman);
327328
328/**329/**
329 * Send packet to all connections.330 * Send packet to all connections.
@@ -334,8 +335,8 @@
334 * @return Standard gearman return value.335 * @return Standard gearman return value.
335 */336 */
336GEARMAN_API337GEARMAN_API
337gearman_return_t gearman_con_send_all(gearman_st *gearman,338gearman_return_t gearman_send_all(gearman_st *gearman,
338 const gearman_packet_st *packet);339 const gearman_packet_st *packet);
339340
340/**341/**
341 * Wait for I/O on connections.342 * Wait for I/O on connections.
@@ -345,7 +346,7 @@
345 * @return Standard gearman return value.346 * @return Standard gearman return value.
346 */347 */
347GEARMAN_API348GEARMAN_API
348gearman_return_t gearman_con_wait(gearman_st *gearman);349gearman_return_t gearman_wait(gearman_st *gearman);
349350
350/**351/**
351 * Get next connection that is ready for I/O.352 * Get next connection that is ready for I/O.
@@ -355,7 +356,7 @@
355 * @return Connection that is ready for I/O, or NULL if there are none.356 * @return Connection that is ready for I/O, or NULL if there are none.
356 */357 */
357GEARMAN_API358GEARMAN_API
358gearman_con_st *gearman_con_ready(gearman_st *gearman);359gearman_con_st *gearman_ready(gearman_st *gearman);
359360
360/**361/**
361 * Test echo with all connections.362 * Test echo with all connections.
@@ -367,8 +368,8 @@
367 * @return Standard gearman return value.368 * @return Standard gearman return value.
368 */369 */
369GEARMAN_API370GEARMAN_API
370gearman_return_t gearman_con_echo(gearman_st *gearman, const void *workload,371gearman_return_t gearman_echo(gearman_st *gearman, const void *workload,
371 size_t workload_size);372 size_t workload_size);
372373
373/*374/*
374 * Packet related functions.375 * Packet related functions.
@@ -384,20 +385,27 @@
384 * failure this will be NULL.385 * failure this will be NULL.
385 */386 */
386GEARMAN_API387GEARMAN_API
387gearman_packet_st *gearman_packet_create(gearman_st *gearman,388gearman_packet_st *gearman_add_packet(gearman_st *gearman,
388 gearman_packet_st *packet);389 gearman_packet_st *packet);
389390
390/**391/**
391 * Initialize a packet with all arguments. Variable list is NULL terminated392 * Initialize a packet with all arguments. For example:
392 * alternating argument and argument size (size_t) pairs. For example:
393 *393 *
394 * @code394 * @code
395 * ret= gearman_packet_add_args(gearman, packet,395 * void *args[3];
396 * size_t args_suze[3];
397 *
398 * args[0]= function_name;
399 * args_size[0]= strlen(function_name) + 1;
400 * args[1]= unique_string;
401 * args_size[1]= strlen(unique_string,) + 1;
402 * args[2]= workload;
403 * args_size[2]= workload_size;
404 *
405 * ret= gearman_add_packet_args(gearman, packet,
396 * GEARMAN_MAGIC_REQUEST,406 * GEARMAN_MAGIC_REQUEST,
397 * GEARMAN_COMMAND_SUBMIT_JOB,407 * GEARMAN_COMMAND_SUBMIT_JOB,
398 * function_name, strlen(function_name) + 1,408 * args, args_size, 3);
399 * unique_string, strlen(unique_string) + 1,
400 * workload, workload_size, NULL);
401 * @endcode409 * @endcode
402 *410 *
403 * @param[in] gearman Structure previously initialized with gearman_create() or411 * @param[in] gearman Structure previously initialized with gearman_create() or
@@ -405,21 +413,25 @@
405 * @param[in] packet Pre-allocated packet to initialize with arguments.413 * @param[in] packet Pre-allocated packet to initialize with arguments.
406 * @param[in] magic Magic type for packet header.414 * @param[in] magic Magic type for packet header.
407 * @param[in] command Command type for packet.415 * @param[in] command Command type for packet.
408 * @param[in] arg NULL terminated argument list in pairs of "arg, arg_size".416 * @param[in] args Array of arguments to add.
417 * @param[in] args_size Array of sizes of each byte array in the args array.
418 * @param[in] args_count Number of elements in args/args_sizes arrays.
409 * @return Standard gearman return value.419 * @return Standard gearman return value.
410 */420 */
411GEARMAN_API421GEARMAN_API
412gearman_return_t gearman_packet_add(gearman_st *gearman,422gearman_return_t gearman_add_packet_args(gearman_st *gearman,
413 gearman_packet_st *packet,423 gearman_packet_st *packet,
414 gearman_magic_t magic,424 gearman_magic_t magic,
415 gearman_command_t command,425 gearman_command_t command,
416 const void *arg, ...);426 const void *args[],
427 const size_t args_size[],
428 size_t args_count);
417429
418/**430/**
419 * Free a packet structure.431 * Free a packet structure.
420 *432 *
421 * @param[in] packet Structure previously initialized with433 * @param[in] packet Structure previously initialized with
422 * gearman_packet_create() or gearman_packet_add().434 * gearman_add_packet() or gearman_add_packet_args().
423 */435 */
424GEARMAN_API436GEARMAN_API
425void gearman_packet_free(gearman_packet_st *packet);437void gearman_packet_free(gearman_packet_st *packet);
@@ -431,7 +443,7 @@
431 * gearman_clone().443 * gearman_clone().
432 */444 */
433GEARMAN_API445GEARMAN_API
434void gearman_packet_free_all(gearman_st *gearman);446void gearman_free_all_packets(gearman_st *gearman);
435447
436/** @} */448/** @} */
437449
438450
=== added file 'libgearman/gearman_local.h'
--- libgearman/gearman_local.h 1970-01-01 00:00:00 +0000
+++ libgearman/gearman_local.h 2009-11-04 22:14:14 +0000
@@ -0,0 +1,150 @@
1/* Gearman server and library
2 * Copyright (C) 2008 Brian Aker, Eric Day
3 * All rights reserved.
4 *
5 * Use and distribution licensed under the BSD license. See
6 * the COPYING file in the parent directory for full text.
7 */
8
9/**
10 * @file
11 * @brief Local Gearman Declarations
12 */
13
14#ifndef __GEARMAN_LOCAL_H__
15#define __GEARMAN_LOCAL_H__
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21/**
22 * @addtogroup gearman_local Local Gearman Declarations
23 * @ingroup gearman
24 * @{
25 */
26
27/**
28 * Set the error string.
29 *
30 * @param[in] gearman Structure previously initialized with gearman_create() or
31 * gearman_clone().
32 * @param[in] function Name of function the error happened in.
33 * @param[in] format Format and variable argument list of message.
34 */
35GEARMAN_LOCAL
36void gearman_set_error(gearman_st *gearman, const char *function,
37 const char *format, ...);
38
39/**
40 * Log a message.
41 *
42 * @param[in] gearman Structure previously initialized with gearman_create() or
43 * gearman_clone().
44 * @param[in] verbose Logging level of the message.
45 * @param[in] format Format and variable argument list of message.
46 * @param[in] args Variable argument list that has been initialized.
47 */
48GEARMAN_LOCAL
49void gearman_log(gearman_st *gearman, gearman_verbose_t verbose,
50 const char *format, va_list args);
51
52/**
53 * Log a fatal message, see gearman_log() for argument details.
54 */
55static inline void gearman_log_fatal(gearman_st *gearman, const char *format,
56 ...)
57{
58 va_list args;
59
60 if (gearman->verbose >= GEARMAN_VERBOSE_FATAL)
61 {
62 va_start(args, format);
63 gearman_log(gearman, GEARMAN_VERBOSE_FATAL, format, args);
64 va_end(args);
65 }
66}
67/**
68 * Log an error message, see gearman_log() for argument details.
69 */
70static inline void gearman_log_error(gearman_st *gearman, const char *format,
71 ...)
72{
73 va_list args;
74
75 if (gearman->verbose >= GEARMAN_VERBOSE_ERROR)
76 {
77 va_start(args, format);
78 gearman_log(gearman, GEARMAN_VERBOSE_ERROR, format, args);
79 va_end(args);
80 }
81}
82
83/**
84 * Log an info message, see gearman_log() for argument details.
85 */
86static inline void gearman_log_info(gearman_st *gearman, const char *format,
87 ...)
88{
89 va_list args;
90
91 if (gearman->verbose >= GEARMAN_VERBOSE_INFO)
92 {
93 va_start(args, format);
94 gearman_log(gearman, GEARMAN_VERBOSE_INFO, format, args);
95 va_end(args);
96 }
97}
98
99/**
100 * Log a debug message, see gearman_log() for argument details.
101 */
102static inline void gearman_log_debug(gearman_st *gearman, const char *format,
103 ...)
104{
105 va_list args;
106
107 if (gearman->verbose >= GEARMAN_VERBOSE_DEBUG)
108 {
109 va_start(args, format);
110 gearman_log(gearman, GEARMAN_VERBOSE_DEBUG, format, args);
111 va_end(args);
112 }
113}
114
115/**
116 * Log a crazy message, see gearman_log() for argument details.
117 */
118static inline void gearman_log_crazy(gearman_st *gearman, const char *format,
119 ...)
120{
121 va_list args;
122
123 if (gearman->verbose >= GEARMAN_VERBOSE_CRAZY)
124 {
125 va_start(args, format);
126 gearman_log(gearman, GEARMAN_VERBOSE_CRAZY, format, args);
127 va_end(args);
128 }
129}
130
131/**
132 * Utility function used for parsing server lists.
133 *
134 * @param[in] servers String containing a list of servers to parse.
135 * @param[in] callback Function to call for each server that is found.
136 * @param[in] context Argument to pass along with callback function.
137 * @return Standard Gearman return value.
138 */
139GEARMAN_LOCAL
140gearman_return_t gearman_parse_servers(const char *servers,
141 gearman_parse_server_fn *callback,
142 const void *context);
143
144/** @} */
145
146#ifdef __cplusplus
147}
148#endif
149
150#endif /* __GEARMAN_LOCAL_H__ */
0151
=== modified file 'libgearman/job.c'
--- libgearman/job.c 2009-09-23 05:25:01 +0000
+++ libgearman/job.c 2009-11-04 22:14:14 +0000
@@ -8,17 +8,13 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Job definitions11 * @brief Job Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
1515
16/*
17 * Private declarations
18 */
19
20/**16/**
21 * @addtogroup gearman_job_private Private Job Functions17 * @addtogroup gearman_job_static Static Job Declarations
22 * @ingroup gearman_job18 * @ingroup gearman_job
23 * @{19 * @{
24 */20 */
@@ -31,20 +27,26 @@
31/** @} */27/** @} */
3228
33/*29/*
34 * Public definitions30 * Public Definitions
35 */31 */
3632
37gearman_return_t gearman_job_send_data(gearman_job_st *job, const void *data,33gearman_return_t gearman_job_send_data(gearman_job_st *job, const void *data,
38 size_t data_size)34 size_t data_size)
39{35{
40 gearman_return_t ret;36 gearman_return_t ret;
37 const void *args[2];
38 size_t args_size[2];
4139
42 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))40 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
43 {41 {
44 ret= gearman_packet_add(job->worker->gearman, &(job->work),42 args[0]= job->assigned.arg[0];
45 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_WORK_DATA,43 args_size[0]= job->assigned.arg_size[0];
46 job->assigned.arg[0], job->assigned.arg_size[0],44 args[1]= data;
47 data, data_size, NULL);45 args_size[1]= data_size;
46 ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
47 GEARMAN_MAGIC_REQUEST,
48 GEARMAN_COMMAND_WORK_DATA,
49 args, args_size, 2);
48 if (ret != GEARMAN_SUCCESS)50 if (ret != GEARMAN_SUCCESS)
49 return ret;51 return ret;
5052
@@ -59,13 +61,19 @@
59 size_t warning_size)61 size_t warning_size)
60{62{
61 gearman_return_t ret;63 gearman_return_t ret;
64 const void *args[2];
65 size_t args_size[2];
6266
63 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))67 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
64 {68 {
65 ret= gearman_packet_add(job->worker->gearman, &(job->work),69 args[0]= job->assigned.arg[0];
66 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_WORK_WARNING,70 args_size[0]= job->assigned.arg_size[0];
67 job->assigned.arg[0], job->assigned.arg_size[0],71 args[1]= warning;
68 warning, warning_size, NULL);72 args_size[1]= warning_size;
73 ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
74 GEARMAN_MAGIC_REQUEST,
75 GEARMAN_COMMAND_WORK_WARNING,
76 args, args_size, 2);
69 if (ret != GEARMAN_SUCCESS)77 if (ret != GEARMAN_SUCCESS)
70 return ret;78 return ret;
7179
@@ -82,18 +90,24 @@
82 gearman_return_t ret;90 gearman_return_t ret;
83 char numerator_string[12];91 char numerator_string[12];
84 char denominator_string[12];92 char denominator_string[12];
93 const void *args[3];
94 size_t args_size[3];
8595
86 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))96 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
87 {97 {
88 snprintf(numerator_string, 12, "%u", numerator);98 snprintf(numerator_string, 12, "%u", numerator);
89 snprintf(denominator_string, 12, "%u", denominator);99 snprintf(denominator_string, 12, "%u", denominator);
90100
91 ret= gearman_packet_add(job->worker->gearman, &(job->work),101 args[0]= job->assigned.arg[0];
92 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_WORK_STATUS,102 args_size[0]= job->assigned.arg_size[0];
93 job->assigned.arg[0], job->assigned.arg_size[0],103 args[1]= numerator_string;
94 numerator_string, strlen(numerator_string) + 1,104 args_size[1]= strlen(numerator_string) + 1;
95 denominator_string, strlen(denominator_string),105 args[2]= denominator_string;
96 NULL);106 args_size[2]= strlen(denominator_string);
107 ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
108 GEARMAN_MAGIC_REQUEST,
109 GEARMAN_COMMAND_WORK_STATUS,
110 args, args_size, 3);
97 if (ret != GEARMAN_SUCCESS)111 if (ret != GEARMAN_SUCCESS)
98 return ret;112 return ret;
99113
@@ -108,17 +122,22 @@
108 size_t result_size)122 size_t result_size)
109{123{
110 gearman_return_t ret;124 gearman_return_t ret;
125 const void *args[2];
126 size_t args_size[2];
111127
112 if (job->options & GEARMAN_JOB_FINISHED)128 if (job->options & GEARMAN_JOB_FINISHED)
113 return GEARMAN_SUCCESS;129 return GEARMAN_SUCCESS;
114130
115 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))131 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
116 {132 {
117 ret= gearman_packet_add(job->worker->gearman, &(job->work),133 args[0]= job->assigned.arg[0];
118 GEARMAN_MAGIC_REQUEST,134 args_size[0]= job->assigned.arg_size[0];
119 GEARMAN_COMMAND_WORK_COMPLETE,135 args[1]= result;
120 job->assigned.arg[0], job->assigned.arg_size[0],136 args_size[1]= result_size;
121 result, result_size, NULL);137 ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
138 GEARMAN_MAGIC_REQUEST,
139 GEARMAN_COMMAND_WORK_COMPLETE,
140 args, args_size, 2);
122 if (ret != GEARMAN_SUCCESS)141 if (ret != GEARMAN_SUCCESS)
123 return ret;142 return ret;
124143
@@ -138,14 +157,19 @@
138 size_t exception_size)157 size_t exception_size)
139{158{
140 gearman_return_t ret;159 gearman_return_t ret;
160 const void *args[2];
161 size_t args_size[2];
141162
142 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))163 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
143 {164 {
144 ret= gearman_packet_add(job->worker->gearman, &(job->work),165 args[0]= job->assigned.arg[0];
145 GEARMAN_MAGIC_REQUEST,166 args_size[0]= job->assigned.arg_size[0];
146 GEARMAN_COMMAND_WORK_EXCEPTION,167 args[1]= exception;
147 job->assigned.arg[0], job->assigned.arg_size[0],168 args_size[1]= exception_size;
148 exception, exception_size, NULL);169 ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
170 GEARMAN_MAGIC_REQUEST,
171 GEARMAN_COMMAND_WORK_EXCEPTION,
172 args, args_size, 2);
149 if (ret != GEARMAN_SUCCESS)173 if (ret != GEARMAN_SUCCESS)
150 return ret;174 return ret;
151175
@@ -158,16 +182,20 @@
158gearman_return_t gearman_job_send_fail(gearman_job_st *job)182gearman_return_t gearman_job_send_fail(gearman_job_st *job)
159{183{
160 gearman_return_t ret;184 gearman_return_t ret;
185 const void *args[1];
186 size_t args_size[1];
161187
162 if (job->options & GEARMAN_JOB_FINISHED)188 if (job->options & GEARMAN_JOB_FINISHED)
163 return GEARMAN_SUCCESS;189 return GEARMAN_SUCCESS;
164190
165 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))191 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
166 {192 {
167 ret= gearman_packet_add(job->worker->gearman, &(job->work),193 args[0]= job->assigned.arg[0];
168 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_WORK_FAIL,194 args_size[0]= job->assigned.arg_size[0] - 1;
169 job->assigned.arg[0], job->assigned.arg_size[0] - 1,195 ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
170 NULL);196 GEARMAN_MAGIC_REQUEST,
197 GEARMAN_COMMAND_WORK_FAIL,
198 args, args_size, 2);
171 if (ret != GEARMAN_SUCCESS)199 if (ret != GEARMAN_SUCCESS)
172 return ret;200 return ret;
173201
@@ -215,7 +243,7 @@
215}243}
216244
217/*245/*
218 * Private definitions246 * Static Definitions
219 */247 */
220248
221static gearman_return_t _job_send(gearman_job_st *job)249static gearman_return_t _job_send(gearman_job_st *job)
222250
=== modified file 'libgearman/job.h'
--- libgearman/job.h 2009-09-23 05:25:01 +0000
+++ libgearman/job.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Job declarations11 * @brief Job Declarations
12 */12 */
1313
14#ifndef __GEARMAN_JOB_H__14#ifndef __GEARMAN_JOB_H__
@@ -19,10 +19,12 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_job Job Management22 * @addtogroup gearman_job Job Declarations
23 * @ingroup gearman_worker23 * @ingroup gearman_worker
24 *
24 * The job functions are used to manage jobs assigned to workers. It is most25 * The job functions are used to manage jobs assigned to workers. It is most
25 * commonly used with the worker interface.26 * commonly used with the worker interface.
27 *
26 * @{28 * @{
27 */29 */
2830
2931
=== modified file 'libgearman/packet.c'
--- libgearman/packet.c 2009-09-26 08:14:01 +0000
+++ libgearman/packet.c 2009-11-04 22:14:14 +0000
@@ -8,17 +8,13 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Packet definitions11 * @brief Packet Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
1515
16/*
17 * Private declarations
18 */
19
20/**16/**
21 * @addtogroup gearman_packet_private Private Packet Functions17 * @addtogroup gearman_packet_static Static Packet Declarations
22 * @ingroup gearman_packet18 * @ingroup gearman_packet
23 * @{19 * @{
24 */20 */
@@ -71,7 +67,7 @@
71/** @} */67/** @} */
7268
73/*69/*
74 * Public definitions70 * Public Definitions
75 */71 */
7672
77gearman_return_t gearman_packet_add_arg(gearman_packet_st *packet,73gearman_return_t gearman_packet_add_arg(gearman_packet_st *packet,
@@ -85,7 +81,7 @@
85 (!(gearman_command_info_list[packet->command].data) ||81 (!(gearman_command_info_list[packet->command].data) ||
86 packet->data != NULL))82 packet->data != NULL))
87 {83 {
88 gearman_error_set(packet->gearman, "gearman_packet_add_arg",84 gearman_set_error(packet->gearman, "gearman_packet_add_arg",
89 "too many arguments for command");85 "too many arguments for command");
90 return GEARMAN_TOO_MANY_ARGS;86 return GEARMAN_TOO_MANY_ARGS;
91 }87 }
@@ -110,7 +106,7 @@
110 new_args= realloc(packet->args, packet->args_size + arg_size);106 new_args= realloc(packet->args, packet->args_size + arg_size);
111 if (new_args == NULL)107 if (new_args == NULL)
112 {108 {
113 gearman_error_set(packet->gearman, "gearman_packet_add_arg", "realloc");109 gearman_set_error(packet->gearman, "gearman_packet_add_arg", "realloc");
114 return GEARMAN_MEMORY_ALLOCATION_FAILURE;110 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
115 }111 }
116112
@@ -169,7 +165,7 @@
169 break;165 break;
170166
171 default:167 default:
172 gearman_error_set(packet->gearman, "gearman_packet_pack_header",168 gearman_set_error(packet->gearman, "gearman_packet_pack_header",
173 "invalid magic value");169 "invalid magic value");
174 return GEARMAN_INVALID_MAGIC;170 return GEARMAN_INVALID_MAGIC;
175 }171 }
@@ -177,7 +173,7 @@
177 if (packet->command == GEARMAN_COMMAND_TEXT ||173 if (packet->command == GEARMAN_COMMAND_TEXT ||
178 packet->command >= GEARMAN_COMMAND_MAX)174 packet->command >= GEARMAN_COMMAND_MAX)
179 {175 {
180 gearman_error_set(packet->gearman, "gearman_packet_pack_header",176 gearman_set_error(packet->gearman, "gearman_packet_pack_header",
181 "invalid command value");177 "invalid command value");
182 return GEARMAN_INVALID_COMMAND;178 return GEARMAN_INVALID_COMMAND;
183 }179 }
@@ -206,7 +202,7 @@
206 packet->magic= GEARMAN_MAGIC_RESPONSE;202 packet->magic= GEARMAN_MAGIC_RESPONSE;
207 else203 else
208 {204 {
209 gearman_error_set(packet->gearman, "gearman_packet_unpack_header",205 gearman_set_error(packet->gearman, "gearman_packet_unpack_header",
210 "invalid magic value");206 "invalid magic value");
211 return GEARMAN_INVALID_MAGIC;207 return GEARMAN_INVALID_MAGIC;
212 }208 }
@@ -217,7 +213,7 @@
217 if (packet->command == GEARMAN_COMMAND_TEXT ||213 if (packet->command == GEARMAN_COMMAND_TEXT ||
218 packet->command >= GEARMAN_COMMAND_MAX)214 packet->command >= GEARMAN_COMMAND_MAX)
219 {215 {
220 gearman_error_set(packet->gearman, "gearman_packet_unpack_header",216 gearman_set_error(packet->gearman, "gearman_packet_unpack_header",
221 "invalid command value");217 "invalid command value");
222 return GEARMAN_INVALID_COMMAND;218 return GEARMAN_INVALID_COMMAND;
223 }219 }
224220
=== modified file 'libgearman/packet.h'
--- libgearman/packet.h 2009-09-24 23:43:15 +0000
+++ libgearman/packet.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Packet declarations11 * @brief Packet Declarations
12 */12 */
1313
14#ifndef __GEARMAN_PACKET_H__14#ifndef __GEARMAN_PACKET_H__
@@ -26,11 +26,14 @@
26gearman_command_info_st gearman_command_info_list[GEARMAN_COMMAND_MAX];26gearman_command_info_st gearman_command_info_list[GEARMAN_COMMAND_MAX];
2727
28/**28/**
29 * @addtogroup gearman_packet Packet Handling29 * @addtogroup gearman_packet Packet Declarations
30 * @ingroup gearman
31 *
30 * This is a low level interface for gearman packet. This is used internally32 * This is a low level interface for gearman packet. This is used internally
31 * internally by both client and worker interfaces (or more specifically, tasks33 * internally by both client and worker interfaces (or more specifically, tasks
32 * and jobs), so you probably want to look there first. This is usually used to34 * and jobs), so you probably want to look there first. This is usually used to
33 * write lower level clients, workers, proxies, or your own server.35 * write lower level clients, workers, proxies, or your own server.
36 *
34 * @{37 * @{
35 */38 */
3639
3740
=== modified file 'libgearman/structs.h'
--- libgearman/structs.h 2009-09-28 17:47:34 +0000
+++ libgearman/structs.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Struct definitions11 * @brief Struct Definitions
12 */12 */
1313
14#ifndef __GEARMAN_STRUCTS_H__14#ifndef __GEARMAN_STRUCTS_H__
1515
=== modified file 'libgearman/task.c'
--- libgearman/task.c 2009-09-23 05:25:01 +0000
+++ libgearman/task.c 2009-11-04 22:14:14 +0000
@@ -8,13 +8,13 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Task definitions11 * @brief Task Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
1515
16/*16/*
17 * Public definitions17 * Public Definitions
18 */18 */
1919
20void *gearman_task_context(const gearman_task_st *task)20void *gearman_task_context(const gearman_task_st *task)
2121
=== modified file 'libgearman/task.h'
--- libgearman/task.h 2009-09-23 05:25:01 +0000
+++ libgearman/task.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Task declarations11 * @brief Task Declarations
12 */12 */
1313
14#ifndef __GEARMAN_TASK_H__14#ifndef __GEARMAN_TASK_H__
@@ -19,10 +19,12 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_task Task Management22 * @addtogroup gearman_task Task Declarations
23 * @ingroup gearman_client23 * @ingroup gearman_client
24 *
24 * The task functions are used to manage tasks being run by clients. They are25 * The task functions are used to manage tasks being run by clients. They are
25 * most commonly used with the client interface.26 * most commonly used with the client interface.
27 *
26 * @{28 * @{
27 */29 */
2830
2931
=== modified file 'libgearman/visibility.h'
--- libgearman/visibility.h 2009-09-18 02:48:06 +0000
+++ libgearman/visibility.h 2009-11-04 22:14:14 +0000
@@ -10,14 +10,13 @@
1010
11/**11/**
12 * @file12 * @file
13 * @brief Visibility control macros13 * @brief Visibility Control Macros
14 */14 */
1515
16#ifndef __GEARMAN_VISIBILITY_H16#ifndef __GEARMAN_VISIBILITY_H
17#define __GEARMAN_VISIBILITY_H17#define __GEARMAN_VISIBILITY_H
1818
19/**19/**
20 *
21 * GEARMAN_API is used for the public API symbols. It either DLL imports or20 * GEARMAN_API is used for the public API symbols. It either DLL imports or
22 * DLL exports (or does nothing for static build).21 * DLL exports (or does nothing for static build).
23 *22 *
@@ -28,6 +27,9 @@
28# if defined(HAVE_VISIBILITY)27# if defined(HAVE_VISIBILITY)
29# define GEARMAN_API __attribute__ ((visibility("default")))28# define GEARMAN_API __attribute__ ((visibility("default")))
30# define GEARMAN_LOCAL __attribute__ ((visibility("hidden")))29# define GEARMAN_LOCAL __attribute__ ((visibility("hidden")))
30# elif defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550)
31# define GEARMAN_API __global
32# define GEARMAN_API __hidden
31# elif defined(_MSC_VER)33# elif defined(_MSC_VER)
32# define GEARMAN_API extern __declspec(dllexport)34# define GEARMAN_API extern __declspec(dllexport)
33# define GEARMAN_LOCAL35# define GEARMAN_LOCAL
3436
=== modified file 'libgearman/worker.c'
--- libgearman/worker.c 2009-09-28 17:47:34 +0000
+++ libgearman/worker.c 2009-11-04 22:14:14 +0000
@@ -8,17 +8,13 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Worker definitions11 * @brief Worker Definitions
12 */12 */
1313
14#include "common.h"14#include "common.h"
1515
16/*
17 * Private declarations
18 */
19
20/**16/**
21 * @addtogroup gearman_worker_private Private Worker Functions17 * @addtogroup gearman_worker_static Static Worker Declarations
22 * @ingroup gearman_worker18 * @ingroup gearman_worker
23 * @{19 * @{
24 */20 */
@@ -63,7 +59,7 @@
63/** @} */59/** @} */
6460
65/*61/*
66 * Public definitions62 * Public Definitions
67 */63 */
6864
69gearman_worker_st *gearman_worker_create(gearman_worker_st *worker)65gearman_worker_st *gearman_worker_create(gearman_worker_st *worker)
@@ -140,7 +136,7 @@
140 else136 else
141 {137 {
142 worker->gearman->workload_free_fn(worker->work_result,138 worker->gearman->workload_free_fn(worker->work_result,
143 (void *)(worker->gearman->workload_free_context));139 (void *)worker->gearman->workload_free_context);
144 }140 }
145 }141 }
146142
@@ -262,7 +258,7 @@
262gearman_return_t gearman_worker_add_server(gearman_worker_st *worker,258gearman_return_t gearman_worker_add_server(gearman_worker_st *worker,
263 const char *host, in_port_t port)259 const char *host, in_port_t port)
264{260{
265 if (gearman_con_add(worker->gearman, NULL, host, port) == NULL)261 if (gearman_add_con_args(worker->gearman, NULL, host, port) == NULL)
266 return GEARMAN_MEMORY_ALLOCATION_FAILURE;262 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
267263
268 return GEARMAN_SUCCESS;264 return GEARMAN_SUCCESS;
@@ -274,9 +270,14 @@
274 return gearman_parse_servers(servers, _worker_add_server, worker);270 return gearman_parse_servers(servers, _worker_add_server, worker);
275}271}
276272
273void gearman_worker_remove_servers(gearman_worker_st *worker)
274{
275 gearman_free_all_cons(worker->gearman);
276}
277
277gearman_return_t gearman_worker_wait(gearman_worker_st *worker)278gearman_return_t gearman_worker_wait(gearman_worker_st *worker)
278{279{
279 return gearman_con_wait(worker->gearman);280 return gearman_wait(worker->gearman);
280}281}
281282
282gearman_return_t gearman_worker_register(gearman_worker_st *worker,283gearman_return_t gearman_worker_register(gearman_worker_st *worker,
@@ -291,6 +292,8 @@
291{292{
292 gearman_worker_function_st *function;293 gearman_worker_function_st *function;
293 gearman_return_t ret;294 gearman_return_t ret;
295 const void *args[1];
296 size_t args_size[1];
294297
295 for (function= worker->function_list; function != NULL;298 for (function= worker->function_list; function != NULL;
296 function= function->next)299 function= function->next)
@@ -304,10 +307,11 @@
304307
305 gearman_packet_free(&(function->packet));308 gearman_packet_free(&(function->packet));
306309
307 ret= gearman_packet_add(worker->gearman, &(function->packet),310 args[0]= function_name;
308 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_CANT_DO,311 args_size[0]= strlen(function_name);
309 (uint8_t *)function_name, strlen(function_name),312 ret= gearman_add_packet_args(worker->gearman, &(function->packet),
310 NULL);313 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_CANT_DO,
314 args, args_size, 1);
311 if (ret != GEARMAN_SUCCESS)315 if (ret != GEARMAN_SUCCESS)
312 {316 {
313 function->options&=317 function->options&=
@@ -335,9 +339,11 @@
335339
336 gearman_packet_free(&(worker->function_list->packet));340 gearman_packet_free(&(worker->function_list->packet));
337341
338 ret= gearman_packet_add(worker->gearman, &(worker->function_list->packet),342 ret= gearman_add_packet_args(worker->gearman,
339 GEARMAN_MAGIC_REQUEST,343 &(worker->function_list->packet),
340 GEARMAN_COMMAND_RESET_ABILITIES, NULL);344 GEARMAN_MAGIC_REQUEST,
345 GEARMAN_COMMAND_RESET_ABILITIES,
346 NULL, NULL, 0);
341 if (ret != GEARMAN_SUCCESS)347 if (ret != GEARMAN_SUCCESS)
342 {348 {
343 worker->function_list->options&=349 worker->function_list->options&=
@@ -419,7 +425,7 @@
419425
420 if (worker->function_list == NULL)426 if (worker->function_list == NULL)
421 {427 {
422 gearman_error_set(worker->gearman, "gearman_worker_grab_job",428 gearman_set_error(worker->gearman, "gearman_worker_grab_job",
423 "no functions have been registered");429 "no functions have been registered");
424 *ret_ptr= GEARMAN_NO_REGISTERED_FUNCTIONS;430 *ret_ptr= GEARMAN_NO_REGISTERED_FUNCTIONS;
425 return NULL;431 return NULL;
@@ -521,7 +527,7 @@
521527
522 if (worker->job->assigned.command != GEARMAN_COMMAND_NOOP)528 if (worker->job->assigned.command != GEARMAN_COMMAND_NOOP)
523 {529 {
524 gearman_error_set(worker->gearman, "gearman_worker_grab_job",530 gearman_set_error(worker->gearman, "gearman_worker_grab_job",
525 "unexpected packet:%s",531 "unexpected packet:%s",
526 gearman_command_info_list[worker->job->assigned.command].name);532 gearman_command_info_list[worker->job->assigned.command].name);
527 gearman_packet_free(&(worker->job->assigned));533 gearman_packet_free(&(worker->job->assigned));
@@ -588,7 +594,7 @@
588594
589 if (worker->options & GEARMAN_WORKER_TIMEOUT_RETURN)595 if (worker->options & GEARMAN_WORKER_TIMEOUT_RETURN)
590 {596 {
591 gearman_error_set(worker->gearman, "gearman_worker_grab_job",597 gearman_set_error(worker->gearman, "gearman_worker_grab_job",
592 "timeout reached");598 "timeout reached");
593 *ret_ptr= GEARMAN_TIMEOUT;599 *ret_ptr= GEARMAN_TIMEOUT;
594 return NULL;600 return NULL;
@@ -597,7 +603,7 @@
597 }603 }
598 else604 else
599 {605 {
600 *ret_ptr= gearman_con_wait(worker->gearman);606 *ret_ptr= gearman_wait(worker->gearman);
601 if (*ret_ptr != GEARMAN_SUCCESS && (*ret_ptr != GEARMAN_TIMEOUT ||607 if (*ret_ptr != GEARMAN_SUCCESS && (*ret_ptr != GEARMAN_TIMEOUT ||
602 worker->options & GEARMAN_WORKER_TIMEOUT_RETURN))608 worker->options & GEARMAN_WORKER_TIMEOUT_RETURN))
603 {609 {
@@ -608,7 +614,7 @@
608 break;614 break;
609615
610 default:616 default:
611 gearman_error_set(worker->gearman, "gearman_worker_grab_job",617 gearman_set_error(worker->gearman, "gearman_worker_grab_job",
612 "unknown state: %u", worker->state);618 "unknown state: %u", worker->state);
613 *ret_ptr= GEARMAN_UNKNOWN_STATE;619 *ret_ptr= GEARMAN_UNKNOWN_STATE;
614 return NULL;620 return NULL;
@@ -650,14 +656,14 @@
650{656{
651 if (function_name == NULL)657 if (function_name == NULL)
652 {658 {
653 gearman_error_set(worker->gearman, "gearman_worker_add_function",659 gearman_set_error(worker->gearman, "gearman_worker_add_function",
654 "function name not given");660 "function name not given");
655 return GEARMAN_INVALID_FUNCTION_NAME;661 return GEARMAN_INVALID_FUNCTION_NAME;
656 }662 }
657663
658 if (worker_fn == NULL)664 if (worker_fn == NULL)
659 {665 {
660 gearman_error_set(worker->gearman, "gearman_worker_add_function",666 gearman_set_error(worker->gearman, "gearman_worker_add_function",
661 "function not given");667 "function not given");
662 return GEARMAN_INVALID_WORKER_FUNCTION;668 return GEARMAN_INVALID_WORKER_FUNCTION;
663 }669 }
@@ -691,7 +697,7 @@
691 if (worker->work_function == NULL)697 if (worker->work_function == NULL)
692 {698 {
693 gearman_job_free(&(worker->work_job));699 gearman_job_free(&(worker->work_job));
694 gearman_error_set(worker->gearman, "gearman_worker_work",700 gearman_set_error(worker->gearman, "gearman_worker_work",
695 "function not found");701 "function not found");
696 return GEARMAN_INVALID_FUNCTION_NAME;702 return GEARMAN_INVALID_FUNCTION_NAME;
697 }703 }
@@ -699,7 +705,7 @@
699 if (worker->work_function->worker_fn == NULL)705 if (worker->work_function->worker_fn == NULL)
700 {706 {
701 gearman_job_free(&(worker->work_job));707 gearman_job_free(&(worker->work_job));
702 gearman_error_set(worker->gearman, "gearman_worker_work",708 gearman_set_error(worker->gearman, "gearman_worker_work",
703 "no callback function supplied");709 "no callback function supplied");
704 return GEARMAN_INVALID_FUNCTION_NAME;710 return GEARMAN_INVALID_FUNCTION_NAME;
705 }711 }
@@ -708,10 +714,9 @@
708 worker->work_result_size= 0;714 worker->work_result_size= 0;
709715
710 case GEARMAN_WORKER_WORK_STATE_FUNCTION:716 case GEARMAN_WORKER_WORK_STATE_FUNCTION:
711 worker->work_result= (*(worker->work_function->worker_fn))(717 worker->work_result= worker->work_function->worker_fn(&(worker->work_job),
712 &(worker->work_job),718 (void *)worker->work_function->context,
713 (void *)(worker->work_function->context),719 &(worker->work_result_size), &ret);
714 &(worker->work_result_size), &ret);
715 if (ret == GEARMAN_WORK_FAIL)720 if (ret == GEARMAN_WORK_FAIL)
716 {721 {
717 ret= gearman_job_send_fail(&(worker->work_job));722 ret= gearman_job_send_fail(&(worker->work_job));
@@ -752,7 +757,7 @@
752 else757 else
753 {758 {
754 worker->gearman->workload_free_fn(worker->work_result,759 worker->gearman->workload_free_fn(worker->work_result,
755 (void *)(worker->gearman->workload_free_context));760 (void *)worker->gearman->workload_free_context);
756 }761 }
757 worker->work_result= NULL;762 worker->work_result= NULL;
758 }763 }
@@ -780,7 +785,7 @@
780 break;785 break;
781786
782 default:787 default:
783 gearman_error_set(worker->gearman, "gearman_worker_work",788 gearman_set_error(worker->gearman, "gearman_worker_work",
784 "unknown state: %u", worker->work_state);789 "unknown state: %u", worker->work_state);
785 return GEARMAN_UNKNOWN_STATE;790 return GEARMAN_UNKNOWN_STATE;
786 }791 }
@@ -795,11 +800,11 @@
795 const void *workload,800 const void *workload,
796 size_t workload_size)801 size_t workload_size)
797{802{
798 return gearman_con_echo(worker->gearman, workload, workload_size);803 return gearman_echo(worker->gearman, workload, workload_size);
799}804}
800805
801/*806/*
802 * Private definitions807 * Static Definitions
803 */808 */
804809
805static gearman_worker_st *_worker_allocate(gearman_worker_st *worker)810static gearman_worker_st *_worker_allocate(gearman_worker_st *worker)
@@ -836,15 +841,15 @@
836{841{
837 gearman_return_t ret;842 gearman_return_t ret;
838843
839 ret= gearman_packet_add(worker->gearman, &(worker->grab_job),844 ret= gearman_add_packet_args(worker->gearman, &(worker->grab_job),
840 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_GRAB_JOB,845 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_GRAB_JOB,
841 NULL);846 NULL, NULL, 0);
842 if (ret != GEARMAN_SUCCESS)847 if (ret != GEARMAN_SUCCESS)
843 return ret;848 return ret;
844849
845 ret= gearman_packet_add(worker->gearman, &(worker->pre_sleep),850 ret= gearman_add_packet_args(worker->gearman, &(worker->pre_sleep),
846 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_PRE_SLEEP,851 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_PRE_SLEEP,
847 NULL);852 NULL, NULL, 0);
848 if (ret != GEARMAN_SUCCESS)853 if (ret != GEARMAN_SUCCESS)
849 {854 {
850 gearman_packet_free(&(worker->grab_job));855 gearman_packet_free(&(worker->grab_job));
@@ -871,11 +876,13 @@
871 gearman_worker_function_st *function;876 gearman_worker_function_st *function;
872 gearman_return_t ret;877 gearman_return_t ret;
873 char timeout_buffer[11];878 char timeout_buffer[11];
879 const void *args[2];
880 size_t args_size[2];
874881
875 function= malloc(sizeof(gearman_worker_function_st));882 function= malloc(sizeof(gearman_worker_function_st));
876 if (function == NULL)883 if (function == NULL)
877 {884 {
878 gearman_error_set(worker->gearman, "_worker_function_add", "malloc");885 gearman_set_error(worker->gearman, "_worker_function_add", "malloc");
879 return GEARMAN_MEMORY_ALLOCATION_FAILURE;886 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
880 }887 }
881888
@@ -886,7 +893,7 @@
886 if (function->function_name == NULL)893 if (function->function_name == NULL)
887 {894 {
888 free(function);895 free(function);
889 gearman_error_set(worker->gearman, "gearman_worker_add_function", "strdup");896 gearman_set_error(worker->gearman, "gearman_worker_add_function", "strdup");
890 return GEARMAN_MEMORY_ALLOCATION_FAILURE;897 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
891 }898 }
892899
@@ -896,20 +903,22 @@
896 if (timeout > 0)903 if (timeout > 0)
897 {904 {
898 snprintf(timeout_buffer, 11, "%u", timeout);905 snprintf(timeout_buffer, 11, "%u", timeout);
899 ret= gearman_packet_add(worker->gearman, &(function->packet),906 args[0]= function_name;
900 GEARMAN_MAGIC_REQUEST,907 args_size[0]= strlen(function_name) + 1;
901 GEARMAN_COMMAND_CAN_DO_TIMEOUT,908 args[1]= timeout_buffer;
902 (uint8_t *)function_name,909 args_size[1]= strlen(timeout_buffer);
903 strlen(function_name) + 1,910 ret= gearman_add_packet_args(worker->gearman, &(function->packet),
904 (uint8_t *)timeout_buffer,911 GEARMAN_MAGIC_REQUEST,
905 strlen(timeout_buffer), NULL);912 GEARMAN_COMMAND_CAN_DO_TIMEOUT,
913 args, args_size, 2);
906 }914 }
907 else915 else
908 {916 {
909 ret= gearman_packet_add(worker->gearman, &(function->packet),917 args[0]= function_name;
910 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_CAN_DO,918 args_size[0]= strlen(function_name);
911 (uint8_t *)function_name, strlen(function_name),919 ret= gearman_add_packet_args(worker->gearman, &(function->packet),
912 NULL);920 GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_CAN_DO,
921 args, args_size, 1);
913 }922 }
914 if (ret != GEARMAN_SUCCESS)923 if (ret != GEARMAN_SUCCESS)
915 {924 {
@@ -956,7 +965,7 @@
956 job= malloc(sizeof(gearman_job_st));965 job= malloc(sizeof(gearman_job_st));
957 if (job == NULL)966 if (job == NULL)
958 {967 {
959 gearman_error_set(worker->gearman, "_job_create", "malloc");968 gearman_set_error(worker->gearman, "_job_create", "malloc");
960 return NULL;969 return NULL;
961 }970 }
962971
963972
=== modified file 'libgearman/worker.h'
--- libgearman/worker.h 2009-10-02 01:13:31 +0000
+++ libgearman/worker.h 2009-11-04 22:14:14 +0000
@@ -8,7 +8,7 @@
88
9/**9/**
10 * @file10 * @file
11 * @brief Worker declarations11 * @brief Worker Declarations
12 */12 */
1313
14#ifndef __GEARMAN_WORKER_H__14#ifndef __GEARMAN_WORKER_H__
@@ -19,7 +19,8 @@
19#endif19#endif
2020
21/**21/**
22 * @addtogroup gearman_worker Worker Interface22 * @addtogroup gearman_worker Worker Declarations
23 *
23 * This is the interface gearman workers should use.24 * This is the interface gearman workers should use.
24 *25 *
25 * @ref main_page_worker "See Main Page for full details."26 * @ref main_page_worker "See Main Page for full details."
2627
=== modified file 'tests/client_test.c'
--- tests/client_test.c 2009-09-26 09:21:13 +0000
+++ tests/client_test.c 2009-11-04 22:14:14 +0000
@@ -45,8 +45,8 @@
45test_return post(void *object);45test_return post(void *object);
46test_return flush(void);46test_return flush(void);
4747
48void *client_test_worker(gearman_job_st *job, void *cb_arg, size_t *result_size,48void *client_test_worker(gearman_job_st *job, void *context,
49 gearman_return_t *ret_ptr);49 size_t *result_size, gearman_return_t *ret_ptr);
50void *world_create(void);50void *world_create(void);
51void world_destroy(void *object);51void world_destroy(void *object);
5252
@@ -292,7 +292,8 @@
292 return TEST_SUCCESS;292 return TEST_SUCCESS;
293}293}
294294
295static void log_counter(const char *line, gearman_verbose_t verbose, void *context)295static void log_counter(const char *line, gearman_verbose_t verbose,
296 void *context)
296{297{
297 uint32_t *counter= (uint32_t *)context;298 uint32_t *counter= (uint32_t *)context;
298299
@@ -323,12 +324,12 @@
323}324}
324325
325326
326void *client_test_worker(gearman_job_st *job, void *cb_arg, size_t *result_size,327void *client_test_worker(gearman_job_st *job, void *context,
327 gearman_return_t *ret_ptr)328 size_t *result_size, gearman_return_t *ret_ptr)
328{329{
329 const uint8_t *workload;330 const uint8_t *workload;
330 uint8_t *result;331 uint8_t *result;
331 (void)cb_arg;332 (void)context;
332333
333 workload= gearman_job_workload(job);334 workload= gearman_job_workload(job);
334 *result_size= gearman_job_workload_size(job);335 *result_size= gearman_job_workload_size(job);
335336
=== modified file 'tests/memcached_test.c'
--- tests/memcached_test.c 2009-07-28 07:12:24 +0000
+++ tests/memcached_test.c 2009-11-04 22:14:14 +0000
@@ -43,8 +43,7 @@
4343
44/* Counter test for worker */44/* Counter test for worker */
45static void *counter_function(gearman_job_st *job __attribute__((unused)), 45static void *counter_function(gearman_job_st *job __attribute__((unused)),
46 void *context, 46 void *context, size_t *result_size,
47 size_t *result_size,
48 gearman_return_t *ret_ptr __attribute__((unused)))47 gearman_return_t *ret_ptr __attribute__((unused)))
49{48{
50 uint32_t *counter= (uint32_t *)context;49 uint32_t *counter= (uint32_t *)context;
5150
=== modified file 'tests/sqlite_test.c'
--- tests/sqlite_test.c 2009-10-11 07:24:42 +0000
+++ tests/sqlite_test.c 2009-11-04 22:14:14 +0000
@@ -43,8 +43,7 @@
4343
44/* Counter test for worker */44/* Counter test for worker */
45static void *counter_function(gearman_job_st *job __attribute__((unused)), 45static void *counter_function(gearman_job_st *job __attribute__((unused)),
46 void *context, 46 void *context, size_t *result_size,
47 size_t *result_size,
48 gearman_return_t *ret_ptr __attribute__((unused)))47 gearman_return_t *ret_ptr __attribute__((unused)))
49{48{
50 uint32_t *counter= (uint32_t *)context;49 uint32_t *counter= (uint32_t *)context;
5150
=== modified file 'tests/worker_test.c'
--- tests/worker_test.c 2009-09-23 21:05:40 +0000
+++ tests/worker_test.c 2009-11-04 22:14:14 +0000
@@ -107,46 +107,51 @@
107 gearman_con_st con;107 gearman_con_st con;
108 gearman_packet_st packet;108 gearman_packet_st packet;
109 uint32_t x;109 uint32_t x;
110 const void *args[1];
111 size_t args_size[1];
110112
111 if (gearman_create(&gearman) == NULL)113 if (gearman_create(&gearman) == NULL)
112 return TEST_FAILURE;114 return TEST_FAILURE;
113115
114 for (x= 0; x < 2; x++)116 for (x= 0; x < 2; x++)
115 {117 {
116 if (gearman_con_create(&gearman, &con) == NULL)118 if (gearman_add_con(&gearman, &con) == NULL)
117 return TEST_FAILURE;119 return TEST_FAILURE;
118120
119 gearman_con_set_host(&con, NULL);121 gearman_con_set_host(&con, NULL);
120 gearman_con_set_port(&con, WORKER_TEST_PORT);122 gearman_con_set_port(&con, WORKER_TEST_PORT);
121123
122 if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,124 args[0]= "testUnregisterFunction";
123 GEARMAN_COMMAND_SET_CLIENT_ID,125 args_size[0]= strlen("testUnregisterFunction");
124 (uint8_t *)"testUnregisterFunction", 13,126 if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
125 NULL) != GEARMAN_SUCCESS)127 GEARMAN_COMMAND_SET_CLIENT_ID,
126 {128 args, args_size, 1) != GEARMAN_SUCCESS)
127 return TEST_FAILURE;129 {
128 }130 return TEST_FAILURE;
129131 }
130 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)132
131 return TEST_FAILURE;133 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
132134 return TEST_FAILURE;
133 gearman_packet_free(&packet);135
134136 gearman_packet_free(&packet);
135 if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,137
136 GEARMAN_COMMAND_CAN_DO, (uint8_t *)"reverse", 7,138 args[0]= "reverse";
137 NULL) != GEARMAN_SUCCESS)139 args_size[0]= strlen("reverse");
138 {140 if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
139 return TEST_FAILURE;141 GEARMAN_COMMAND_CAN_DO,
140 }142 args, args_size, 1) != GEARMAN_SUCCESS)
141143 {
142 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)144 return TEST_FAILURE;
143 return TEST_FAILURE;145 }
144146
145 gearman_packet_free(&packet);147 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
146148 return TEST_FAILURE;
147 if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,149
148 GEARMAN_COMMAND_CANT_DO, (uint8_t *)"reverse", 7,150 gearman_packet_free(&packet);
149 NULL) != GEARMAN_SUCCESS)151
152 if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
153 GEARMAN_COMMAND_CANT_DO,
154 args, args_size, 1) != GEARMAN_SUCCESS)
150 {155 {
151 return TEST_FAILURE;156 return TEST_FAILURE;
152 }157 }
@@ -158,52 +163,57 @@
158163
159 gearman_con_free(&con);164 gearman_con_free(&con);
160165
161 if (gearman_con_create(&gearman, &con) == NULL)166 if (gearman_add_con(&gearman, &con) == NULL)
162 return TEST_FAILURE;167 return TEST_FAILURE;
163168
164 gearman_con_set_host(&con, NULL);169 gearman_con_set_host(&con, NULL);
165 gearman_con_set_port(&con, WORKER_TEST_PORT);170 gearman_con_set_port(&con, WORKER_TEST_PORT);
166171
167 if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,172 args[0]= "testUnregisterFunction";
168 GEARMAN_COMMAND_SET_CLIENT_ID,173 args_size[0]= strlen("testUnregisterFunction");
169 (uint8_t *)"testUnregisterFunction", 13,174 if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
170 NULL) != GEARMAN_SUCCESS)175 GEARMAN_COMMAND_SET_CLIENT_ID,
171 {176 args, args_size, 1) != GEARMAN_SUCCESS)
172 return TEST_FAILURE;177 {
173 }178 return TEST_FAILURE;
174179 }
175 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)180
176 return TEST_FAILURE;181 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
177182 return TEST_FAILURE;
178 gearman_packet_free(&packet);183
179184 gearman_packet_free(&packet);
180 if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,185
181 GEARMAN_COMMAND_CAN_DO, (uint8_t *)"digest", 6,186 args[0]= "digest";
182 NULL) != GEARMAN_SUCCESS)187 args_size[0]= strlen("digest");
183 {188 if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
184 return TEST_FAILURE;189 GEARMAN_COMMAND_CAN_DO,
185 }190 args, args_size, 1) != GEARMAN_SUCCESS)
186191 {
187 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)192 return TEST_FAILURE;
188 return TEST_FAILURE;193 }
189194
190 gearman_packet_free(&packet);195 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
191196 return TEST_FAILURE;
192 if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,197
193 GEARMAN_COMMAND_CAN_DO, (uint8_t *)"reverse", 7,198 gearman_packet_free(&packet);
194 NULL) != GEARMAN_SUCCESS)199
195 {200 args[0]= "reverse";
196 return TEST_FAILURE;201 args_size[0]= strlen("reverse");
197 }202 if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
198203 GEARMAN_COMMAND_CAN_DO,
199 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)204 args, args_size, 1) != GEARMAN_SUCCESS)
200 return TEST_FAILURE;205 {
201206 return TEST_FAILURE;
202 gearman_packet_free(&packet);207 }
203208
204 if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,209 if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
205 GEARMAN_COMMAND_RESET_ABILITIES,210 return TEST_FAILURE;
206 NULL) != GEARMAN_SUCCESS)211
212 gearman_packet_free(&packet);
213
214 if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
215 GEARMAN_COMMAND_RESET_ABILITIES,
216 NULL, NULL, 0) != GEARMAN_SUCCESS)
207 {217 {
208 return TEST_FAILURE;218 return TEST_FAILURE;
209 }219 }

Subscribers

People subscribed via source and target branches

to all changes: