vinted-memcached 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
}
|