vinted-memcached 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/BENCHMARKS +142 -0
- data/CHANGELOG +176 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +45 -0
- data/LICENSE +184 -0
- data/Manifest +209 -0
- data/README.rdoc +124 -0
- data/Rakefile +134 -0
- data/TODO +1 -0
- data/ext/extconf-make.rb +25 -0
- data/ext/extconf.rb +78 -0
- data/ext/libmemcached-0.32/AUTHORS +7 -0
- data/ext/libmemcached-0.32/COPYING +32 -0
- data/ext/libmemcached-0.32/ChangeLog +303 -0
- data/ext/libmemcached-0.32/INSTALL +302 -0
- data/ext/libmemcached-0.32/Makefile.am +36 -0
- data/ext/libmemcached-0.32/Makefile.in +911 -0
- data/ext/libmemcached-0.32/NEWS +1 -0
- data/ext/libmemcached-0.32/README +33 -0
- data/ext/libmemcached-0.32/THANKS +14 -0
- data/ext/libmemcached-0.32/TODO +11 -0
- data/ext/libmemcached-0.32/aclocal.m4 +2108 -0
- data/ext/libmemcached-0.32/clients/Makefile.am +80 -0
- data/ext/libmemcached-0.32/clients/Makefile.in +773 -0
- data/ext/libmemcached-0.32/clients/client_options.h +32 -0
- data/ext/libmemcached-0.32/clients/execute.c +64 -0
- data/ext/libmemcached-0.32/clients/execute.h +5 -0
- data/ext/libmemcached-0.32/clients/generator.c +74 -0
- data/ext/libmemcached-0.32/clients/generator.h +20 -0
- data/ext/libmemcached-0.32/clients/memcat.c +178 -0
- data/ext/libmemcached-0.32/clients/memcp.c +251 -0
- data/ext/libmemcached-0.32/clients/memdump.c +170 -0
- data/ext/libmemcached-0.32/clients/memerror.c +80 -0
- data/ext/libmemcached-0.32/clients/memflush.c +143 -0
- data/ext/libmemcached-0.32/clients/memrm.c +160 -0
- data/ext/libmemcached-0.32/clients/memslap.c +441 -0
- data/ext/libmemcached-0.32/clients/memstat.c +326 -0
- data/ext/libmemcached-0.32/clients/utilities.c +207 -0
- data/ext/libmemcached-0.32/clients/utilities.h +41 -0
- data/ext/libmemcached-0.32/config/compile +143 -0
- data/ext/libmemcached-0.32/config/config.guess +1561 -0
- data/ext/libmemcached-0.32/config/config.rpath +666 -0
- data/ext/libmemcached-0.32/config/config.sub +1686 -0
- data/ext/libmemcached-0.32/config/depcomp +630 -0
- data/ext/libmemcached-0.32/config/install-sh +520 -0
- data/ext/libmemcached-0.32/config/ltmain.sh +9636 -0
- data/ext/libmemcached-0.32/config/missing +376 -0
- data/ext/libmemcached-0.32/config.h.in +254 -0
- data/ext/libmemcached-0.32/configure +23843 -0
- data/ext/libmemcached-0.32/configure.ac +120 -0
- data/ext/libmemcached-0.32/libmemcached/Makefile.am +111 -0
- data/ext/libmemcached-0.32/libmemcached/Makefile.in +1069 -0
- data/ext/libmemcached-0.32/libmemcached/byteorder.c +31 -0
- data/ext/libmemcached-0.32/libmemcached/common.h +189 -0
- data/ext/libmemcached-0.32/libmemcached/crc.c +86 -0
- data/ext/libmemcached-0.32/libmemcached/hsieh_hash.c +68 -0
- data/ext/libmemcached-0.32/libmemcached/jenkins_hash.c +213 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached.ver +1 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.d +30 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.h +82 -0
- data/ext/libmemcached-0.32/libmemcached/md5.c +354 -0
- data/ext/libmemcached-0.32/libmemcached/memcached/README.txt +7 -0
- data/ext/libmemcached-0.32/libmemcached/memcached/protocol_binary.h +385 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.c +153 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.h +305 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.hpp +799 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_allocators.c +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_analyze.c +100 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_auto.c +207 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_behavior.c +290 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_callback.c +175 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_configure.h.in +23 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_connect.c +371 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_constants.h +146 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_delete.c +0 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_do.c +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_dump.c +79 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_exist.c +114 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_exist.h +20 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_fetch.c +102 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_flush.c +89 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_flush_buffers.c +23 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_get.c +494 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_get.h +87 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_hash.c +252 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_hosts.c +510 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_internal.h +31 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_io.c +594 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_io.h +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_key.c +28 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_parse.c +74 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_pool.h +38 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_purge.c +76 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_quit.c +75 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_response.c +529 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_result.c +57 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_result.h +59 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_sasl.c +225 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_sasl.h +44 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_server.c +159 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_server.h +93 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_stats.c +437 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_storage.c +514 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_storage.h +107 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_strerror.c +92 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_string.c +138 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_string.h +53 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_touch.c +60 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_touch.h +31 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_types.h +44 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_util.h +15 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_verbosity.c +36 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_version.c +112 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_watchpoint.h +38 -0
- data/ext/libmemcached-0.32/libmemcached/murmur_hash.c +76 -0
- data/ext/libmemcached-0.32/libmemcached/visibility.h +51 -0
- data/ext/libmemcached-0.32/libmemcachedutil/Makefile.am +11 -0
- data/ext/libmemcached-0.32/libmemcachedutil/Makefile.in +604 -0
- data/ext/libmemcached-0.32/libmemcachedutil/libmemcachedutil.ver +1 -0
- data/ext/libmemcached-0.32/libmemcachedutil/memcached_pool.c +170 -0
- data/ext/libmemcached-0.32/m4/ac_cxx_compile_stdcxx_0x.m4 +103 -0
- data/ext/libmemcached-0.32/m4/ac_cxx_header_stdcxx_98.m4 +67 -0
- data/ext/libmemcached-0.32/m4/acx_pthread.m4 +276 -0
- data/ext/libmemcached-0.32/m4/byteorder.m4 +40 -0
- data/ext/libmemcached-0.32/m4/deprecated.m4 +17 -0
- data/ext/libmemcached-0.32/m4/enable_utillib.m4 +16 -0
- data/ext/libmemcached-0.32/m4/extensions.m4 +94 -0
- data/ext/libmemcached-0.32/m4/hsieh.m4 +18 -0
- data/ext/libmemcached-0.32/m4/lib-prefix.m4 +221 -0
- data/ext/libmemcached-0.32/m4/libtool.m4 +7831 -0
- data/ext/libmemcached-0.32/m4/ltoptions.m4 +369 -0
- data/ext/libmemcached-0.32/m4/ltsugar.m4 +123 -0
- data/ext/libmemcached-0.32/m4/ltversion.m4 +23 -0
- data/ext/libmemcached-0.32/m4/lt~obsolete.m4 +98 -0
- data/ext/libmemcached-0.32/m4/memcached.m4 +30 -0
- data/ext/libmemcached-0.32/m4/pandora_64bit.m4 +55 -0
- data/ext/libmemcached-0.32/m4/pandora_canonical.m4 +151 -0
- data/ext/libmemcached-0.32/m4/pandora_check_compiler_version.m4 +37 -0
- data/ext/libmemcached-0.32/m4/pandora_check_cxx_standard.m4 +16 -0
- data/ext/libmemcached-0.32/m4/pandora_enable_dtrace.m4 +41 -0
- data/ext/libmemcached-0.32/m4/pandora_ensure_gcc_version.m4 +36 -0
- data/ext/libmemcached-0.32/m4/pandora_have_better_malloc.m4 +54 -0
- data/ext/libmemcached-0.32/m4/pandora_have_sasl.m4 +133 -0
- data/ext/libmemcached-0.32/m4/pandora_header_assert.m4 +23 -0
- data/ext/libmemcached-0.32/m4/pandora_libtool.m4 +15 -0
- data/ext/libmemcached-0.32/m4/pandora_optimize.m4 +79 -0
- data/ext/libmemcached-0.32/m4/pandora_shared_ptr.m4 +56 -0
- data/ext/libmemcached-0.32/m4/pandora_vc_build.m4 +32 -0
- data/ext/libmemcached-0.32/m4/pandora_warnings.m4 +262 -0
- data/ext/libmemcached-0.32/m4/pod2man.m4 +7 -0
- data/ext/libmemcached-0.32/m4/protocol_binary.m4 +23 -0
- data/ext/libmemcached-0.32/m4/setsockopt.m4 +57 -0
- data/ext/libmemcached-0.32/m4/visibility.m4 +52 -0
- data/ext/libmemcached-0.32/support/Makefile.am +4 -0
- data/ext/libmemcached-0.32/support/Makefile.in +487 -0
- data/ext/libmemcached-0.32/support/libmemcached-fc.spec.in +105 -0
- data/ext/libmemcached-0.32/support/libmemcached.pc.in +10 -0
- data/ext/libmemcached-0.32/support/libmemcached.spec +105 -0
- data/ext/libmemcached-0.32/support/libmemcached.spec.in +105 -0
- data/ext/libmemcached-0.32/support/set_benchmark.sh +5 -0
- data/ext/libmemcached-0.32/tests/Makefile.am +113 -0
- data/ext/libmemcached-0.32/tests/Makefile.in +762 -0
- data/ext/libmemcached-0.32/tests/atomsmasher.c +245 -0
- data/ext/libmemcached-0.32/tests/function.c +4904 -0
- data/ext/libmemcached-0.32/tests/ketama_test_cases.h +108 -0
- data/ext/libmemcached-0.32/tests/output.cmp +7 -0
- data/ext/libmemcached-0.32/tests/output.res +7 -0
- data/ext/libmemcached-0.32/tests/output2.res +46 -0
- data/ext/libmemcached-0.32/tests/plus.cpp +293 -0
- data/ext/libmemcached-0.32/tests/r/memcat.res +19 -0
- data/ext/libmemcached-0.32/tests/r/memcp.res +27 -0
- data/ext/libmemcached-0.32/tests/r/memrm.res +19 -0
- data/ext/libmemcached-0.32/tests/r/memslap.res +33 -0
- data/ext/libmemcached-0.32/tests/r/memstat.res +33 -0
- data/ext/libmemcached-0.32/tests/server.c +118 -0
- data/ext/libmemcached-0.32/tests/server.h +25 -0
- data/ext/libmemcached-0.32/tests/start.c +16 -0
- data/ext/libmemcached-0.32/tests/t/memcat.test +4 -0
- data/ext/libmemcached-0.32/tests/t/memcp.test +3 -0
- data/ext/libmemcached-0.32/tests/t/memrm.test +3 -0
- data/ext/libmemcached-0.32/tests/t/memslap.test +5 -0
- data/ext/libmemcached-0.32/tests/t/memstat.test +3 -0
- data/ext/libmemcached-0.32/tests/test.c +137 -0
- data/ext/libmemcached-0.32/tests/test.h +46 -0
- data/ext/libmemcached-0.32/tests/udp.c +76 -0
- data/ext/rlibmemcached.i +258 -0
- data/ext/rlibmemcached_wrap.c +13917 -0
- data/lib/memcached/auth.rb +16 -0
- data/lib/memcached/behaviors.rb +78 -0
- data/lib/memcached/exceptions.rb +84 -0
- data/lib/memcached/experimental.rb +48 -0
- data/lib/memcached/marshal_codec.rb +10 -0
- data/lib/memcached/memcached.rb +732 -0
- data/lib/memcached/rails.rb +250 -0
- data/lib/memcached.rb +33 -0
- data/memcached.gemspec +0 -0
- data/test/profile/benchmark.rb +280 -0
- data/test/profile/c_profiler.rb +14 -0
- data/test/profile/exercise.rb +185 -0
- data/test/profile/rb_profiler.rb +21 -0
- data/test/profile/valgrind.rb +10 -0
- data/test/setup.rb +30 -0
- data/test/teardown.rb +0 -0
- data/test/test_helper.rb +18 -0
- data/test/unit/binding_test.rb +8 -0
- data/test/unit/memcached_experimental_test.rb +272 -0
- data/test/unit/memcached_test.rb +1487 -0
- data/test/unit/rails_test.rb +330 -0
- metadata +336 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/*
|
|
2
|
+
I debated about putting this in the client library since it does an
|
|
3
|
+
action I don't really believe belongs in the library.
|
|
4
|
+
|
|
5
|
+
Frankly its too damn useful not to be here though.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "common.h"
|
|
9
|
+
|
|
10
|
+
memcached_server_st *memcached_servers_parse(const char *server_strings)
|
|
11
|
+
{
|
|
12
|
+
char *string;
|
|
13
|
+
uint32_t port;
|
|
14
|
+
uint32_t weight;
|
|
15
|
+
const char *begin_ptr;
|
|
16
|
+
const char *end_ptr;
|
|
17
|
+
memcached_server_st *servers= NULL;
|
|
18
|
+
memcached_return rc;
|
|
19
|
+
|
|
20
|
+
WATCHPOINT_ASSERT(server_strings);
|
|
21
|
+
|
|
22
|
+
end_ptr= server_strings + strlen(server_strings);
|
|
23
|
+
|
|
24
|
+
for (begin_ptr= server_strings, string= index(server_strings, ',');
|
|
25
|
+
begin_ptr != end_ptr;
|
|
26
|
+
string= index(begin_ptr, ','))
|
|
27
|
+
{
|
|
28
|
+
char buffer[HUGE_STRING_LEN];
|
|
29
|
+
char *ptr, *ptr2;
|
|
30
|
+
port= 0;
|
|
31
|
+
weight= 0;
|
|
32
|
+
|
|
33
|
+
if (string)
|
|
34
|
+
{
|
|
35
|
+
memcpy(buffer, begin_ptr, (size_t) (string - begin_ptr));
|
|
36
|
+
buffer[(unsigned int)(string - begin_ptr)]= 0;
|
|
37
|
+
begin_ptr= string+1;
|
|
38
|
+
}
|
|
39
|
+
else
|
|
40
|
+
{
|
|
41
|
+
size_t length= strlen(begin_ptr);
|
|
42
|
+
memcpy(buffer, begin_ptr, length);
|
|
43
|
+
buffer[length]= 0;
|
|
44
|
+
begin_ptr= end_ptr;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
ptr= index(buffer, ':');
|
|
48
|
+
|
|
49
|
+
if (ptr)
|
|
50
|
+
{
|
|
51
|
+
ptr[0]= 0;
|
|
52
|
+
|
|
53
|
+
ptr++;
|
|
54
|
+
|
|
55
|
+
port= (uint32_t) strtoul(ptr, (char **)NULL, 10);
|
|
56
|
+
|
|
57
|
+
ptr2= index(ptr, ' ');
|
|
58
|
+
if (! ptr2)
|
|
59
|
+
ptr2= index(ptr, ':');
|
|
60
|
+
if (ptr2)
|
|
61
|
+
{
|
|
62
|
+
ptr2++;
|
|
63
|
+
weight = (uint32_t) strtoul(ptr2, (char **)NULL, 10);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
servers= memcached_server_list_append_with_weight(servers, buffer, port, weight, &rc);
|
|
68
|
+
|
|
69
|
+
if (isspace(*begin_ptr))
|
|
70
|
+
begin_ptr++;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return servers;
|
|
74
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Summary: Connection pool implementation for libmemcached.
|
|
3
|
+
*
|
|
4
|
+
* Copy: See Copyright for the status of this software.
|
|
5
|
+
*
|
|
6
|
+
* Author: Trond Norbye
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef MEMCACHED_POOL_H
|
|
10
|
+
#define MEMCACHED_POOL_H
|
|
11
|
+
|
|
12
|
+
#include <libmemcached/memcached.h>
|
|
13
|
+
|
|
14
|
+
#ifdef __cplusplus
|
|
15
|
+
extern "C" {
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
struct memcached_pool_st;
|
|
19
|
+
typedef struct memcached_pool_st memcached_pool_st;
|
|
20
|
+
|
|
21
|
+
LIBMEMCACHED_API
|
|
22
|
+
memcached_pool_st *memcached_pool_create(memcached_st* mmc, uint32_t initial,
|
|
23
|
+
uint32_t max);
|
|
24
|
+
LIBMEMCACHED_API
|
|
25
|
+
memcached_st* memcached_pool_destroy(memcached_pool_st* pool);
|
|
26
|
+
LIBMEMCACHED_API
|
|
27
|
+
memcached_st* memcached_pool_pop(memcached_pool_st* pool,
|
|
28
|
+
bool block,
|
|
29
|
+
memcached_return* rc);
|
|
30
|
+
LIBMEMCACHED_API
|
|
31
|
+
memcached_return memcached_pool_push(memcached_pool_st* pool,
|
|
32
|
+
memcached_st* mmc);
|
|
33
|
+
|
|
34
|
+
#ifdef __cplusplus
|
|
35
|
+
}
|
|
36
|
+
#endif
|
|
37
|
+
|
|
38
|
+
#endif /* MEMCACHED_POOL_H */
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
#include "memcached_io.h"
|
|
3
|
+
#include "memcached_constants.h"
|
|
4
|
+
|
|
5
|
+
memcached_return memcached_purge(memcached_server_st *ptr)
|
|
6
|
+
{
|
|
7
|
+
uint32_t x;
|
|
8
|
+
memcached_return ret= MEMCACHED_SUCCESS;
|
|
9
|
+
|
|
10
|
+
if (ptr->root->purging || /* already purging */
|
|
11
|
+
(memcached_server_response_count(ptr) < ptr->root->io_msg_watermark &&
|
|
12
|
+
ptr->io_bytes_sent < ptr->root->io_bytes_watermark) ||
|
|
13
|
+
(ptr->io_bytes_sent > ptr->root->io_bytes_watermark &&
|
|
14
|
+
memcached_server_response_count(ptr) < 2))
|
|
15
|
+
{
|
|
16
|
+
return MEMCACHED_SUCCESS;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* memcached_io_write and memcached_response may call memcached_purge
|
|
20
|
+
so we need to be able stop any recursion.. */
|
|
21
|
+
ptr->root->purging= 1;
|
|
22
|
+
|
|
23
|
+
WATCHPOINT_ASSERT(ptr->fd != -1);
|
|
24
|
+
/* Force a flush of the buffer to ensure that we don't have the n-1 pending
|
|
25
|
+
requests buffered up.. */
|
|
26
|
+
if (memcached_io_write(ptr, NULL, 0, 1) == -1)
|
|
27
|
+
{
|
|
28
|
+
ptr->root->purging= 0;
|
|
29
|
+
return MEMCACHED_WRITE_FAILURE;
|
|
30
|
+
}
|
|
31
|
+
WATCHPOINT_ASSERT(ptr->fd != -1);
|
|
32
|
+
|
|
33
|
+
uint32_t no_msg= memcached_server_response_count(ptr) - 1;
|
|
34
|
+
if (no_msg > 0)
|
|
35
|
+
{
|
|
36
|
+
memcached_result_st result;
|
|
37
|
+
memcached_result_st *result_ptr;
|
|
38
|
+
char buffer[SMALL_STRING_LEN];
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* We need to increase the timeout, because we might be waiting for
|
|
42
|
+
* data to be sent from the server (the commands was in the output buffer
|
|
43
|
+
* and just flushed
|
|
44
|
+
*/
|
|
45
|
+
int32_t timeo= ptr->root->poll_timeout;
|
|
46
|
+
ptr->root->poll_timeout= 2000;
|
|
47
|
+
|
|
48
|
+
result_ptr= memcached_result_create(ptr->root, &result);
|
|
49
|
+
WATCHPOINT_ASSERT(result_ptr);
|
|
50
|
+
|
|
51
|
+
for (x= 0; x < no_msg; x++)
|
|
52
|
+
{
|
|
53
|
+
memcached_result_reset(result_ptr);
|
|
54
|
+
memcached_return rc= memcached_read_one_response(ptr, buffer,
|
|
55
|
+
sizeof (buffer),
|
|
56
|
+
result_ptr);
|
|
57
|
+
/*
|
|
58
|
+
* Purge doesn't care for what kind of command results that is received.
|
|
59
|
+
* The only kind of errors I care about if is I'm out of sync with the
|
|
60
|
+
* protocol or have problems reading data from the network..
|
|
61
|
+
*/
|
|
62
|
+
if (rc== MEMCACHED_PROTOCOL_ERROR || rc == MEMCACHED_UNKNOWN_READ_FAILURE)
|
|
63
|
+
{
|
|
64
|
+
WATCHPOINT_ERROR(rc);
|
|
65
|
+
ret = rc;
|
|
66
|
+
memcached_io_reset(ptr);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
memcached_result_free(result_ptr);
|
|
71
|
+
ptr->root->poll_timeout= timeo;
|
|
72
|
+
}
|
|
73
|
+
ptr->root->purging= 0;
|
|
74
|
+
|
|
75
|
+
return ret;
|
|
76
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
This closes all connections (forces flush of input as well).
|
|
5
|
+
|
|
6
|
+
Maybe add a host specific, or key specific version?
|
|
7
|
+
|
|
8
|
+
The reason we send "quit" is that in case we have buffered IO, this
|
|
9
|
+
will force data to be completed.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
void memcached_quit_server(memcached_server_st *ptr, uint8_t io_death)
|
|
13
|
+
{
|
|
14
|
+
if (ptr->fd != -1)
|
|
15
|
+
{
|
|
16
|
+
if (io_death == 0 && ptr->type != MEMCACHED_CONNECTION_UDP)
|
|
17
|
+
{
|
|
18
|
+
memcached_return rc;
|
|
19
|
+
char buffer[MEMCACHED_MAX_BUFFER];
|
|
20
|
+
|
|
21
|
+
if (ptr->root->flags & MEM_BINARY_PROTOCOL)
|
|
22
|
+
{
|
|
23
|
+
protocol_binary_request_quit request = {.bytes= {0}};
|
|
24
|
+
request.message.header.request.magic = PROTOCOL_BINARY_REQ;
|
|
25
|
+
request.message.header.request.opcode = PROTOCOL_BINARY_CMD_QUIT;
|
|
26
|
+
request.message.header.request.datatype = PROTOCOL_BINARY_RAW_BYTES;
|
|
27
|
+
rc= memcached_do(ptr, request.bytes, sizeof(request.bytes), 1);
|
|
28
|
+
}
|
|
29
|
+
else
|
|
30
|
+
rc= memcached_do(ptr, "quit\r\n", 6, 1);
|
|
31
|
+
|
|
32
|
+
WATCHPOINT_ASSERT(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_FETCH_NOTFINISHED);
|
|
33
|
+
|
|
34
|
+
/* read until socket is closed, or there is an error
|
|
35
|
+
* closing the socket before all data is read
|
|
36
|
+
* results in server throwing away all data which is
|
|
37
|
+
* not read
|
|
38
|
+
*/
|
|
39
|
+
ssize_t nread;
|
|
40
|
+
while (memcached_io_read(ptr, buffer, sizeof(buffer)/sizeof(*buffer),
|
|
41
|
+
&nread) == MEMCACHED_SUCCESS);
|
|
42
|
+
}
|
|
43
|
+
memcached_io_close(ptr);
|
|
44
|
+
|
|
45
|
+
ptr->fd= -1;
|
|
46
|
+
ptr->write_buffer_offset= (size_t) ((ptr->type == MEMCACHED_CONNECTION_UDP) ? UDP_DATAGRAM_HEADER_LENGTH : 0);
|
|
47
|
+
ptr->read_buffer_length= 0;
|
|
48
|
+
ptr->read_ptr= ptr->read_buffer;
|
|
49
|
+
memcached_server_response_reset(ptr);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (io_death)
|
|
53
|
+
{
|
|
54
|
+
ptr->server_failure_counter++;
|
|
55
|
+
}
|
|
56
|
+
else
|
|
57
|
+
{
|
|
58
|
+
ptr->server_failure_counter = 0;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
void memcached_quit(memcached_st *ptr)
|
|
63
|
+
{
|
|
64
|
+
unsigned int x;
|
|
65
|
+
|
|
66
|
+
if (ptr->hosts == NULL ||
|
|
67
|
+
ptr->number_of_hosts == 0)
|
|
68
|
+
return;
|
|
69
|
+
|
|
70
|
+
if (ptr->hosts && ptr->number_of_hosts)
|
|
71
|
+
{
|
|
72
|
+
for (x= 0; x < ptr->number_of_hosts; x++)
|
|
73
|
+
memcached_quit_server(&ptr->hosts[x], 0);
|
|
74
|
+
}
|
|
75
|
+
}
|