couchbase-memcached 1.2.8
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.
- data.tar.gz.sig +2 -0
- data/BENCHMARKS +134 -0
- data/CHANGELOG +127 -0
- data/LICENSE +184 -0
- data/Manifest +535 -0
- data/README +118 -0
- data/Rakefile +83 -0
- data/TODO +4 -0
- data/couchbase-memcached.gemspec +33 -0
- data/ext/extconf-make.rb +25 -0
- data/ext/extconf.rb +91 -0
- data/ext/libmemcached-0.50/AUTHORS +11 -0
- data/ext/libmemcached-0.50/COPYING +33 -0
- data/ext/libmemcached-0.50/ChangeLog +392 -0
- data/ext/libmemcached-0.50/Makefile.am +114 -0
- data/ext/libmemcached-0.50/Makefile.in +4232 -0
- data/ext/libmemcached-0.50/NEWS +1 -0
- data/ext/libmemcached-0.50/README +43 -0
- data/ext/libmemcached-0.50/README.FIRST +31 -0
- data/ext/libmemcached-0.50/README.win32 +25 -0
- data/ext/libmemcached-0.50/THANKS +14 -0
- data/ext/libmemcached-0.50/TODO +11 -0
- data/ext/libmemcached-0.50/aclocal.m4 +1077 -0
- data/ext/libmemcached-0.50/clients/client_options.h +45 -0
- data/ext/libmemcached-0.50/clients/execute.cc +131 -0
- data/ext/libmemcached-0.50/clients/execute.h +30 -0
- data/ext/libmemcached-0.50/clients/generator.cc +96 -0
- data/ext/libmemcached-0.50/clients/generator.h +36 -0
- data/ext/libmemcached-0.50/clients/include.am +116 -0
- data/ext/libmemcached-0.50/clients/memaslap.c +908 -0
- data/ext/libmemcached-0.50/clients/memcapable.cc +2094 -0
- data/ext/libmemcached-0.50/clients/memcat.cc +242 -0
- data/ext/libmemcached-0.50/clients/memcp.cc +317 -0
- data/ext/libmemcached-0.50/clients/memdump.cc +183 -0
- data/ext/libmemcached-0.50/clients/memerror.cc +102 -0
- data/ext/libmemcached-0.50/clients/memflush.cc +154 -0
- data/ext/libmemcached-0.50/clients/memparse.cc +68 -0
- data/ext/libmemcached-0.50/clients/memrm.cc +177 -0
- data/ext/libmemcached-0.50/clients/memslap.cc +495 -0
- data/ext/libmemcached-0.50/clients/memstat.cc +349 -0
- data/ext/libmemcached-0.50/clients/ms_atomic.h +69 -0
- data/ext/libmemcached-0.50/clients/ms_conn.c +3413 -0
- data/ext/libmemcached-0.50/clients/ms_conn.h +241 -0
- data/ext/libmemcached-0.50/clients/ms_memslap.h +132 -0
- data/ext/libmemcached-0.50/clients/ms_setting.c +1068 -0
- data/ext/libmemcached-0.50/clients/ms_setting.h +181 -0
- data/ext/libmemcached-0.50/clients/ms_sigsegv.c +126 -0
- data/ext/libmemcached-0.50/clients/ms_sigsegv.h +34 -0
- data/ext/libmemcached-0.50/clients/ms_stats.c +307 -0
- data/ext/libmemcached-0.50/clients/ms_stats.h +69 -0
- data/ext/libmemcached-0.50/clients/ms_task.c +1114 -0
- data/ext/libmemcached-0.50/clients/ms_task.h +94 -0
- data/ext/libmemcached-0.50/clients/ms_thread.c +351 -0
- data/ext/libmemcached-0.50/clients/ms_thread.h +78 -0
- data/ext/libmemcached-0.50/clients/utilities.cc +231 -0
- data/ext/libmemcached-0.50/clients/utilities.h +64 -0
- data/ext/libmemcached-0.50/config.h.in +647 -0
- data/ext/libmemcached-0.50/config/autorun.sh +126 -0
- data/ext/libmemcached-0.50/config/compile +143 -0
- data/ext/libmemcached-0.50/config/config.guess +1517 -0
- data/ext/libmemcached-0.50/config/config.rpath +666 -0
- data/ext/libmemcached-0.50/config/config.sub +1760 -0
- data/ext/libmemcached-0.50/config/depcomp +630 -0
- data/ext/libmemcached-0.50/config/install-sh +520 -0
- data/ext/libmemcached-0.50/config/ltmain.sh +9642 -0
- data/ext/libmemcached-0.50/config/missing +376 -0
- data/ext/libmemcached-0.50/config/pandora-plugin +752 -0
- data/ext/libmemcached-0.50/config/uncrustify.cfg +1112 -0
- data/ext/libmemcached-0.50/configure +27103 -0
- data/ext/libmemcached-0.50/configure.ac +186 -0
- data/ext/libmemcached-0.50/docs/conf.py.in +354 -0
- data/ext/libmemcached-0.50/docs/include.am +240 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_clone.3 +88 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_crc32.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_create.3 +88 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_32.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_64.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_32.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_64.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_free.3 +88 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_functions.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_hsieh.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_is_allocated.3 +88 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_jenkins.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_md5.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_murmur.3 +105 -0
- data/ext/libmemcached-0.50/docs/man/hashkit_value.3 +66 -0
- data/ext/libmemcached-0.50/docs/man/libhashkit.3 +57 -0
- data/ext/libmemcached-0.50/docs/man/libmemcached.3 +208 -0
- data/ext/libmemcached-0.50/docs/man/libmemcached_check_configuration.3 +293 -0
- data/ext/libmemcached-0.50/docs/man/libmemcached_configuration.3 +293 -0
- data/ext/libmemcached-0.50/docs/man/libmemcached_examples.3 +144 -0
- data/ext/libmemcached-0.50/docs/man/libmemcachedutil.3 +68 -0
- data/ext/libmemcached-0.50/docs/man/memaslap.1 +1222 -0
- data/ext/libmemcached-0.50/docs/man/memcached.3 +293 -0
- data/ext/libmemcached-0.50/docs/man/memcached_add.3 +132 -0
- data/ext/libmemcached-0.50/docs/man/memcached_add_by_key.3 +132 -0
- data/ext/libmemcached-0.50/docs/man/memcached_analyze.3 +77 -0
- data/ext/libmemcached-0.50/docs/man/memcached_append.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_append_by_key.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_behavior_get.3 +333 -0
- data/ext/libmemcached-0.50/docs/man/memcached_behavior_set.3 +333 -0
- data/ext/libmemcached-0.50/docs/man/memcached_callback_get.3 +159 -0
- data/ext/libmemcached-0.50/docs/man/memcached_callback_set.3 +159 -0
- data/ext/libmemcached-0.50/docs/man/memcached_cas.3 +91 -0
- data/ext/libmemcached-0.50/docs/man/memcached_cas_by_key.3 +91 -0
- data/ext/libmemcached-0.50/docs/man/memcached_clone.3 +99 -0
- data/ext/libmemcached-0.50/docs/man/memcached_create.3 +99 -0
- data/ext/libmemcached-0.50/docs/man/memcached_decrement.3 +124 -0
- data/ext/libmemcached-0.50/docs/man/memcached_decrement_with_initial.3 +124 -0
- data/ext/libmemcached-0.50/docs/man/memcached_delete.3 +83 -0
- data/ext/libmemcached-0.50/docs/man/memcached_delete_by_key.3 +83 -0
- data/ext/libmemcached-0.50/docs/man/memcached_destroy_sasl_auth_data.3 +95 -0
- data/ext/libmemcached-0.50/docs/man/memcached_dump.3 +77 -0
- data/ext/libmemcached-0.50/docs/man/memcached_fetch.3 +174 -0
- data/ext/libmemcached-0.50/docs/man/memcached_fetch_execute.3 +174 -0
- data/ext/libmemcached-0.50/docs/man/memcached_fetch_result.3 +174 -0
- data/ext/libmemcached-0.50/docs/man/memcached_flush_buffers.3 +72 -0
- data/ext/libmemcached-0.50/docs/man/memcached_free.3 +99 -0
- data/ext/libmemcached-0.50/docs/man/memcached_generate_hash.3 +85 -0
- data/ext/libmemcached-0.50/docs/man/memcached_generate_hash_value.3 +85 -0
- data/ext/libmemcached-0.50/docs/man/memcached_get.3 +174 -0
- data/ext/libmemcached-0.50/docs/man/memcached_get_by_key.3 +174 -0
- data/ext/libmemcached-0.50/docs/man/memcached_get_memory_allocators.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_get_sasl_callbacks.3 +95 -0
- data/ext/libmemcached-0.50/docs/man/memcached_get_user_data.3 +79 -0
- data/ext/libmemcached-0.50/docs/man/memcached_increment.3 +124 -0
- data/ext/libmemcached-0.50/docs/man/memcached_increment_with_initial.3 +124 -0
- data/ext/libmemcached-0.50/docs/man/memcached_lib_version.3 +76 -0
- data/ext/libmemcached-0.50/docs/man/memcached_mget.3 +174 -0
- data/ext/libmemcached-0.50/docs/man/memcached_mget_by_key.3 +174 -0
- data/ext/libmemcached-0.50/docs/man/memcached_mget_execute.3 +174 -0
- data/ext/libmemcached-0.50/docs/man/memcached_mget_execute_by_key.3 +174 -0
- data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_get.3 +139 -0
- data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_set.3 +139 -0
- data/ext/libmemcached-0.50/docs/man/memcached_pool_create.3 +139 -0
- data/ext/libmemcached-0.50/docs/man/memcached_pool_destroy.3 +139 -0
- data/ext/libmemcached-0.50/docs/man/memcached_pool_pop.3 +139 -0
- data/ext/libmemcached-0.50/docs/man/memcached_pool_push.3 +139 -0
- data/ext/libmemcached-0.50/docs/man/memcached_pool_st.3 +139 -0
- data/ext/libmemcached-0.50/docs/man/memcached_prepend.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_prepend_by_key.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_quit.3 +74 -0
- data/ext/libmemcached-0.50/docs/man/memcached_replace.3 +132 -0
- data/ext/libmemcached-0.50/docs/man/memcached_replace_by_key.3 +132 -0
- data/ext/libmemcached-0.50/docs/man/memcached_sasl_set_auth_data.3 +95 -0
- data/ext/libmemcached-0.50/docs/man/memcached_server_add.3 +141 -0
- data/ext/libmemcached-0.50/docs/man/memcached_server_count.3 +141 -0
- data/ext/libmemcached-0.50/docs/man/memcached_server_cursor.3 +141 -0
- data/ext/libmemcached-0.50/docs/man/memcached_server_list.3 +141 -0
- data/ext/libmemcached-0.50/docs/man/memcached_server_list_append.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_server_list_count.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_server_list_free.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_server_push.3 +141 -0
- data/ext/libmemcached-0.50/docs/man/memcached_servers_parse.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_set.3 +132 -0
- data/ext/libmemcached-0.50/docs/man/memcached_set_by_key.3 +132 -0
- data/ext/libmemcached-0.50/docs/man/memcached_set_memory_allocators.3 +111 -0
- data/ext/libmemcached-0.50/docs/man/memcached_set_sasl_callbacks.3 +95 -0
- data/ext/libmemcached-0.50/docs/man/memcached_set_user_data.3 +79 -0
- data/ext/libmemcached-0.50/docs/man/memcached_stat.3 +116 -0
- data/ext/libmemcached-0.50/docs/man/memcached_stat_execute.3 +116 -0
- data/ext/libmemcached-0.50/docs/man/memcached_stat_get_keys.3 +116 -0
- data/ext/libmemcached-0.50/docs/man/memcached_stat_get_value.3 +116 -0
- data/ext/libmemcached-0.50/docs/man/memcached_stat_servername.3 +116 -0
- data/ext/libmemcached-0.50/docs/man/memcached_strerror.3 +69 -0
- data/ext/libmemcached-0.50/docs/man/memcached_verbosity.3 +66 -0
- data/ext/libmemcached-0.50/docs/man/memcached_version.3 +76 -0
- data/ext/libmemcached-0.50/docs/man/memcapable.1 +92 -0
- data/ext/libmemcached-0.50/docs/man/memcat.1 +71 -0
- data/ext/libmemcached-0.50/docs/man/memcp.1 +77 -0
- data/ext/libmemcached-0.50/docs/man/memdump.1 +66 -0
- data/ext/libmemcached-0.50/docs/man/memerror.1 +65 -0
- data/ext/libmemcached-0.50/docs/man/memflush.1 +73 -0
- data/ext/libmemcached-0.50/docs/man/memrm.1 +72 -0
- data/ext/libmemcached-0.50/docs/man/memslap.1 +59 -0
- data/ext/libmemcached-0.50/docs/man/memstat.1 +70 -0
- data/ext/libmemcached-0.50/example/include.am +24 -0
- data/ext/libmemcached-0.50/example/interface_v0.c +594 -0
- data/ext/libmemcached-0.50/example/interface_v1.c +411 -0
- data/ext/libmemcached-0.50/example/memcached_light.c +474 -0
- data/ext/libmemcached-0.50/example/memcached_light.h +7 -0
- data/ext/libmemcached-0.50/example/storage.c +172 -0
- data/ext/libmemcached-0.50/example/storage.h +27 -0
- data/ext/libmemcached-0.50/example/storage_innodb.c +535 -0
- data/ext/libmemcached-0.50/libhashkit/algorithm.cc +69 -0
- data/ext/libmemcached-0.50/libhashkit/algorithm.h +96 -0
- data/ext/libmemcached-0.50/libhashkit/behavior.cc +9 -0
- data/ext/libmemcached-0.50/libhashkit/behavior.h +26 -0
- data/ext/libmemcached-0.50/libhashkit/common.h +33 -0
- data/ext/libmemcached-0.50/libhashkit/configure.h.in +19 -0
- data/ext/libmemcached-0.50/libhashkit/crc32.cc +86 -0
- data/ext/libmemcached-0.50/libhashkit/digest.cc +62 -0
- data/ext/libmemcached-0.50/libhashkit/digest.h +30 -0
- data/ext/libmemcached-0.50/libhashkit/fnv.cc +75 -0
- data/ext/libmemcached-0.50/libhashkit/function.cc +156 -0
- data/ext/libmemcached-0.50/libhashkit/function.h +44 -0
- data/ext/libmemcached-0.50/libhashkit/hashkit.cc +100 -0
- data/ext/libmemcached-0.50/libhashkit/hashkit.h +95 -0
- data/ext/libmemcached-0.50/libhashkit/hashkit.hpp +97 -0
- data/ext/libmemcached-0.50/libhashkit/hsieh.cc +70 -0
- data/ext/libmemcached-0.50/libhashkit/include.am +69 -0
- data/ext/libmemcached-0.50/libhashkit/jenkins.cc +214 -0
- data/ext/libmemcached-0.50/libhashkit/ketama.cc +164 -0
- data/ext/libmemcached-0.50/libhashkit/md5.cc +367 -0
- data/ext/libmemcached-0.50/libhashkit/murmur.cc +77 -0
- data/ext/libmemcached-0.50/libhashkit/one_at_a_time.cc +34 -0
- data/ext/libmemcached-0.50/libhashkit/str_algorithm.cc +58 -0
- data/ext/libmemcached-0.50/libhashkit/str_algorithm.h +48 -0
- data/ext/libmemcached-0.50/libhashkit/strerror.cc +25 -0
- data/ext/libmemcached-0.50/libhashkit/strerror.h +23 -0
- data/ext/libmemcached-0.50/libhashkit/types.h +90 -0
- data/ext/libmemcached-0.50/libhashkit/visibility.h +48 -0
- data/ext/libmemcached-0.50/libmemcached/allocators.cc +119 -0
- data/ext/libmemcached-0.50/libmemcached/allocators.h +87 -0
- data/ext/libmemcached-0.50/libmemcached/analyze.cc +110 -0
- data/ext/libmemcached-0.50/libmemcached/analyze.h +66 -0
- data/ext/libmemcached-0.50/libmemcached/array.c +128 -0
- data/ext/libmemcached-0.50/libmemcached/array.h +75 -0
- data/ext/libmemcached-0.50/libmemcached/auto.cc +383 -0
- data/ext/libmemcached-0.50/libmemcached/auto.h +111 -0
- data/ext/libmemcached-0.50/libmemcached/basic_string.h +55 -0
- data/ext/libmemcached-0.50/libmemcached/behavior.cc +590 -0
- data/ext/libmemcached-0.50/libmemcached/behavior.h +86 -0
- data/ext/libmemcached-0.50/libmemcached/byteorder.cc +90 -0
- data/ext/libmemcached-0.50/libmemcached/byteorder.h +52 -0
- data/ext/libmemcached-0.50/libmemcached/callback.cc +160 -0
- data/ext/libmemcached-0.50/libmemcached/callback.h +61 -0
- data/ext/libmemcached-0.50/libmemcached/common.h +182 -0
- data/ext/libmemcached-0.50/libmemcached/configure.h.in +52 -0
- data/ext/libmemcached-0.50/libmemcached/connect.cc +626 -0
- data/ext/libmemcached-0.50/libmemcached/constants.h +167 -0
- data/ext/libmemcached-0.50/libmemcached/delete.cc +266 -0
- data/ext/libmemcached-0.50/libmemcached/delete.h +57 -0
- data/ext/libmemcached-0.50/libmemcached/do.cc +100 -0
- data/ext/libmemcached-0.50/libmemcached/do.hpp +49 -0
- data/ext/libmemcached-0.50/libmemcached/dump.cc +107 -0
- data/ext/libmemcached-0.50/libmemcached/dump.h +51 -0
- data/ext/libmemcached-0.50/libmemcached/error.cc +419 -0
- data/ext/libmemcached-0.50/libmemcached/error.h +61 -0
- data/ext/libmemcached-0.50/libmemcached/error.hpp +87 -0
- data/ext/libmemcached-0.50/libmemcached/exception.hpp +63 -0
- data/ext/libmemcached-0.50/libmemcached/fetch.cc +267 -0
- data/ext/libmemcached-0.50/libmemcached/fetch.h +53 -0
- data/ext/libmemcached-0.50/libmemcached/flush.cc +149 -0
- data/ext/libmemcached-0.50/libmemcached/flush.h +49 -0
- data/ext/libmemcached-0.50/libmemcached/flush_buffers.cc +66 -0
- data/ext/libmemcached-0.50/libmemcached/flush_buffers.h +49 -0
- data/ext/libmemcached-0.50/libmemcached/get.cc +842 -0
- data/ext/libmemcached-0.50/libmemcached/get.h +135 -0
- data/ext/libmemcached-0.50/libmemcached/hash.cc +178 -0
- data/ext/libmemcached-0.50/libmemcached/hash.h +68 -0
- data/ext/libmemcached-0.50/libmemcached/hosts.cc +516 -0
- data/ext/libmemcached-0.50/libmemcached/include.am +183 -0
- data/ext/libmemcached-0.50/libmemcached/initialize_query.cc +70 -0
- data/ext/libmemcached-0.50/libmemcached/initialize_query.h +51 -0
- data/ext/libmemcached-0.50/libmemcached/internal.h +46 -0
- data/ext/libmemcached-0.50/libmemcached/io.cc +920 -0
- data/ext/libmemcached-0.50/libmemcached/io.h +119 -0
- data/ext/libmemcached-0.50/libmemcached/is.h +48 -0
- data/ext/libmemcached-0.50/libmemcached/key.cc +23 -0
- data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.d +30 -0
- data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.h +118 -0
- data/ext/libmemcached-0.50/libmemcached/memcached.cc +437 -0
- data/ext/libmemcached-0.50/libmemcached/memcached.h +214 -0
- data/ext/libmemcached-0.50/libmemcached/memcached.hpp +799 -0
- data/ext/libmemcached-0.50/libmemcached/memcached/README.txt +7 -0
- data/ext/libmemcached-0.50/libmemcached/memcached/protocol_binary.h +726 -0
- data/ext/libmemcached-0.50/libmemcached/memcached/vbucket.h +26 -0
- data/ext/libmemcached-0.50/libmemcached/memcached_util.h +44 -0
- data/ext/libmemcached-0.50/libmemcached/memory.h +79 -0
- data/ext/libmemcached-0.50/libmemcached/options.cc +178 -0
- data/ext/libmemcached-0.50/libmemcached/options.h +49 -0
- data/ext/libmemcached-0.50/libmemcached/options.hpp +56 -0
- data/ext/libmemcached-0.50/libmemcached/options/context.h +151 -0
- data/ext/libmemcached-0.50/libmemcached/options/include.am +19 -0
- data/ext/libmemcached-0.50/libmemcached/options/parser.am +0 -0
- data/ext/libmemcached-0.50/libmemcached/options/parser.cc +2324 -0
- data/ext/libmemcached-0.50/libmemcached/options/parser.h +122 -0
- data/ext/libmemcached-0.50/libmemcached/options/scanner.cc +3203 -0
- data/ext/libmemcached-0.50/libmemcached/options/scanner.h +479 -0
- data/ext/libmemcached-0.50/libmemcached/options/server.h +60 -0
- data/ext/libmemcached-0.50/libmemcached/options/symbol.h +57 -0
- data/ext/libmemcached-0.50/libmemcached/parse.cc +110 -0
- data/ext/libmemcached-0.50/libmemcached/parse.h +23 -0
- data/ext/libmemcached-0.50/libmemcached/platform.h +56 -0
- data/ext/libmemcached-0.50/libmemcached/prefix_key.cc +65 -0
- data/ext/libmemcached-0.50/libmemcached/prefix_key.h +49 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.c +963 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.h +40 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.c +1121 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.h +47 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/cache.c +149 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/cache.h +116 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/callback.h +418 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/common.h +163 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/include.am +26 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/pedantic.c +202 -0
- data/ext/libmemcached-0.50/libmemcached/protocol/protocol_handler.c +365 -0
- data/ext/libmemcached-0.50/libmemcached/protocol_handler.h +215 -0
- data/ext/libmemcached-0.50/libmemcached/purge.cc +90 -0
- data/ext/libmemcached-0.50/libmemcached/quit.cc +139 -0
- data/ext/libmemcached-0.50/libmemcached/quit.h +55 -0
- data/ext/libmemcached-0.50/libmemcached/response.cc +619 -0
- data/ext/libmemcached-0.50/libmemcached/response.h +57 -0
- data/ext/libmemcached-0.50/libmemcached/result.cc +173 -0
- data/ext/libmemcached-0.50/libmemcached/result.h +100 -0
- data/ext/libmemcached-0.50/libmemcached/return.h +98 -0
- data/ext/libmemcached-0.50/libmemcached/sasl.c +408 -0
- data/ext/libmemcached-0.50/libmemcached/sasl.h +86 -0
- data/ext/libmemcached-0.50/libmemcached/server.cc +351 -0
- data/ext/libmemcached-0.50/libmemcached/server.h +169 -0
- data/ext/libmemcached-0.50/libmemcached/server_list.cc +88 -0
- data/ext/libmemcached-0.50/libmemcached/server_list.h +77 -0
- data/ext/libmemcached-0.50/libmemcached/stats.cc +623 -0
- data/ext/libmemcached-0.50/libmemcached/stats.h +96 -0
- data/ext/libmemcached-0.50/libmemcached/storage.cc +567 -0
- data/ext/libmemcached-0.50/libmemcached/storage.h +133 -0
- data/ext/libmemcached-0.50/libmemcached/strerror.cc +189 -0
- data/ext/libmemcached-0.50/libmemcached/strerror.h +50 -0
- data/ext/libmemcached-0.50/libmemcached/string.cc +253 -0
- data/ext/libmemcached-0.50/libmemcached/string.h +121 -0
- data/ext/libmemcached-0.50/libmemcached/touch.cc +106 -0
- data/ext/libmemcached-0.50/libmemcached/touch.h +59 -0
- data/ext/libmemcached-0.50/libmemcached/types.h +117 -0
- data/ext/libmemcached-0.50/libmemcached/util.h +40 -0
- data/ext/libmemcached-0.50/libmemcached/util/flush.cc +61 -0
- data/ext/libmemcached-0.50/libmemcached/util/flush.h +50 -0
- data/ext/libmemcached-0.50/libmemcached/util/include.am +34 -0
- data/ext/libmemcached-0.50/libmemcached/util/ping.cc +62 -0
- data/ext/libmemcached-0.50/libmemcached/util/ping.h +49 -0
- data/ext/libmemcached-0.50/libmemcached/util/pool.cc +392 -0
- data/ext/libmemcached-0.50/libmemcached/util/pool.h +78 -0
- data/ext/libmemcached-0.50/libmemcached/util/version.cc +87 -0
- data/ext/libmemcached-0.50/libmemcached/util/version.h +53 -0
- data/ext/libmemcached-0.50/libmemcached/verbosity.cc +97 -0
- data/ext/libmemcached-0.50/libmemcached/verbosity.h +50 -0
- data/ext/libmemcached-0.50/libmemcached/version.cc +214 -0
- data/ext/libmemcached-0.50/libmemcached/version.h +52 -0
- data/ext/libmemcached-0.50/libmemcached/virtual_bucket.c +118 -0
- data/ext/libmemcached-0.50/libmemcached/virtual_bucket.h +59 -0
- data/ext/libmemcached-0.50/libmemcached/visibility.h +51 -0
- data/ext/libmemcached-0.50/libmemcached/watchpoint.h +110 -0
- data/ext/libmemcached-0.50/libtest/callbacks.h +21 -0
- data/ext/libmemcached-0.50/libtest/collection.h +19 -0
- data/ext/libmemcached-0.50/libtest/common.h +50 -0
- data/ext/libmemcached-0.50/libtest/core.h +11 -0
- data/ext/libmemcached-0.50/libtest/error.h +18 -0
- data/ext/libmemcached-0.50/libtest/failed.h +52 -0
- data/ext/libmemcached-0.50/libtest/framework.cc +57 -0
- data/ext/libmemcached-0.50/libtest/framework.h +137 -0
- data/ext/libmemcached-0.50/libtest/get.h +22 -0
- data/ext/libmemcached-0.50/libtest/include.am +52 -0
- data/ext/libmemcached-0.50/libtest/runner.h +19 -0
- data/ext/libmemcached-0.50/libtest/server.c +355 -0
- data/ext/libmemcached-0.50/libtest/server.h +43 -0
- data/ext/libmemcached-0.50/libtest/stats.h +30 -0
- data/ext/libmemcached-0.50/libtest/strerror.h +14 -0
- data/ext/libmemcached-0.50/libtest/test.cc +319 -0
- data/ext/libmemcached-0.50/libtest/test.h +162 -0
- data/ext/libmemcached-0.50/libtest/test.hpp +46 -0
- data/ext/libmemcached-0.50/libtest/visibility.h +69 -0
- data/ext/libmemcached-0.50/m4/ac_cxx_header_stdcxx_98.m4 +83 -0
- data/ext/libmemcached-0.50/m4/acx_pthread.m4 +271 -0
- data/ext/libmemcached-0.50/m4/byteorder.m4 +19 -0
- data/ext/libmemcached-0.50/m4/deprecated.m4 +17 -0
- data/ext/libmemcached-0.50/m4/eagain.m4 +28 -0
- data/ext/libmemcached-0.50/m4/enable_utillib.m4 +16 -0
- data/ext/libmemcached-0.50/m4/gettext.m4 +379 -0
- data/ext/libmemcached-0.50/m4/hsieh.m4 +18 -0
- data/ext/libmemcached-0.50/m4/iconv.m4 +214 -0
- data/ext/libmemcached-0.50/m4/lib-ld.m4 +110 -0
- data/ext/libmemcached-0.50/m4/lib-link.m4 +767 -0
- data/ext/libmemcached-0.50/m4/lib-prefix.m4 +221 -0
- data/ext/libmemcached-0.50/m4/libtool.m4 +7851 -0
- data/ext/libmemcached-0.50/m4/ltoptions.m4 +369 -0
- data/ext/libmemcached-0.50/m4/ltsugar.m4 +123 -0
- data/ext/libmemcached-0.50/m4/ltversion.m4 +23 -0
- data/ext/libmemcached-0.50/m4/lt~obsolete.m4 +98 -0
- data/ext/libmemcached-0.50/m4/memaslap.m4 +9 -0
- data/ext/libmemcached-0.50/m4/memcached.m4 +31 -0
- data/ext/libmemcached-0.50/m4/murmur.m4 +18 -0
- data/ext/libmemcached-0.50/m4/pandora_64bit.m4 +60 -0
- data/ext/libmemcached-0.50/m4/pandora_bison.m4 +33 -0
- data/ext/libmemcached-0.50/m4/pandora_canonical.m4 +418 -0
- data/ext/libmemcached-0.50/m4/pandora_check_compiler_version.m4 +37 -0
- data/ext/libmemcached-0.50/m4/pandora_check_cxx_standard.m4 +23 -0
- data/ext/libmemcached-0.50/m4/pandora_cinttypes.m4 +39 -0
- data/ext/libmemcached-0.50/m4/pandora_clock_gettime.m4 +15 -0
- data/ext/libmemcached-0.50/m4/pandora_compile_stdcxx_0x.m4 +103 -0
- data/ext/libmemcached-0.50/m4/pandora_cstdint.m4 +38 -0
- data/ext/libmemcached-0.50/m4/pandora_cxx_demangle.m4 +27 -0
- data/ext/libmemcached-0.50/m4/pandora_enable_dtrace.m4 +60 -0
- data/ext/libmemcached-0.50/m4/pandora_ensure_gcc_version.m4 +62 -0
- data/ext/libmemcached-0.50/m4/pandora_extensions.m4 +16 -0
- data/ext/libmemcached-0.50/m4/pandora_fdatasync.m4 +25 -0
- data/ext/libmemcached-0.50/m4/pandora_flex.m4 +33 -0
- data/ext/libmemcached-0.50/m4/pandora_have_better_malloc.m4 +66 -0
- data/ext/libmemcached-0.50/m4/pandora_have_boost.m4 +93 -0
- data/ext/libmemcached-0.50/m4/pandora_have_gcc_atomics.m4 +37 -0
- data/ext/libmemcached-0.50/m4/pandora_have_innodb.m4 +41 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libaio.m4 +56 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libavahi.m4 +41 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libbdb.m4 +40 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libboost_date_time.m4 +46 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libboost_filesystem.m4 +47 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libboost_iostreams.m4 +49 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libboost_options.m4 +47 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libboost_regex.m4 +54 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libboost_test.m4 +45 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libboost_thread.m4 +54 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libcassandra.m4 +44 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libcurl.m4 +62 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libdl.m4 +51 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libdrizzle.m4 +61 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libevent.m4 +66 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libgearman.m4 +41 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libgtest.m4 +47 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libhaildb.m4 +43 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libhashkit.m4 +42 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libinnodb.m4 +64 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libldap.m4 +73 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libmemcached.m4 +106 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libmysqlclient.m4 +146 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libndbclient.m4 +80 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libpcre.m4 +73 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libpq.m4 +46 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libpqxx.m4 +44 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libsqlite3.m4 +42 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libtokyocabinet.m4 +54 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libuuid.m4 +55 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libvbucket.m4 +40 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libxml2.m4 +52 -0
- data/ext/libmemcached-0.50/m4/pandora_have_libz.m4 +51 -0
- data/ext/libmemcached-0.50/m4/pandora_have_protobuf.m4 +82 -0
- data/ext/libmemcached-0.50/m4/pandora_have_sasl.m4 +133 -0
- data/ext/libmemcached-0.50/m4/pandora_have_thrift.m4 +45 -0
- data/ext/libmemcached-0.50/m4/pandora_header_assert.m4 +23 -0
- data/ext/libmemcached-0.50/m4/pandora_header_stdcxx_98.m4 +83 -0
- data/ext/libmemcached-0.50/m4/pandora_intltool.m4 +225 -0
- data/ext/libmemcached-0.50/m4/pandora_libtool.m4 +25 -0
- data/ext/libmemcached-0.50/m4/pandora_optimize.m4 +75 -0
- data/ext/libmemcached-0.50/m4/pandora_platform.m4 +117 -0
- data/ext/libmemcached-0.50/m4/pandora_plugins.m4 +62 -0
- data/ext/libmemcached-0.50/m4/pandora_print_callstack.m4 +61 -0
- data/ext/libmemcached-0.50/m4/pandora_pthread.m4 +258 -0
- data/ext/libmemcached-0.50/m4/pandora_python3_devel.m4 +236 -0
- data/ext/libmemcached-0.50/m4/pandora_run_cpplint.m4 +8 -0
- data/ext/libmemcached-0.50/m4/pandora_sasl.m4 +133 -0
- data/ext/libmemcached-0.50/m4/pandora_shared_ptr.m4 +59 -0
- data/ext/libmemcached-0.50/m4/pandora_stack_direction.m4 +39 -0
- data/ext/libmemcached-0.50/m4/pandora_stl_hash.m4 +94 -0
- data/ext/libmemcached-0.50/m4/pandora_swig.m4 +39 -0
- data/ext/libmemcached-0.50/m4/pandora_use_pipe.m4 +36 -0
- data/ext/libmemcached-0.50/m4/pandora_vc_build.m4 +168 -0
- data/ext/libmemcached-0.50/m4/pandora_version.m4 +11 -0
- data/ext/libmemcached-0.50/m4/pandora_visibility.m4 +75 -0
- data/ext/libmemcached-0.50/m4/pandora_warnings.m4 +447 -0
- data/ext/libmemcached-0.50/m4/pandora_with_gettext.m4 +44 -0
- data/ext/libmemcached-0.50/m4/pandora_with_lua.m4 +55 -0
- data/ext/libmemcached-0.50/m4/pandora_with_memcached.m4 +41 -0
- data/ext/libmemcached-0.50/m4/pandora_with_perl.m4 +81 -0
- data/ext/libmemcached-0.50/m4/pandora_with_php.m4 +56 -0
- data/ext/libmemcached-0.50/m4/pandora_with_python.m4 +37 -0
- data/ext/libmemcached-0.50/m4/pandora_with_python3.m4 +44 -0
- data/ext/libmemcached-0.50/m4/pandora_with_r.m4 +33 -0
- data/ext/libmemcached-0.50/m4/pandora_with_ruby.m4 +79 -0
- data/ext/libmemcached-0.50/m4/pandora_with_valgrind.m4 +17 -0
- data/ext/libmemcached-0.50/m4/pkg.m4 +157 -0
- data/ext/libmemcached-0.50/m4/po.m4 +449 -0
- data/ext/libmemcached-0.50/m4/progtest.m4 +92 -0
- data/ext/libmemcached-0.50/m4/protocol_binary.m4 +36 -0
- data/ext/libmemcached-0.50/m4/setsockopt.m4 +73 -0
- data/ext/libmemcached-0.50/m4/socket_send_flags.m4 +66 -0
- data/ext/libmemcached-0.50/poll/include.am +8 -0
- data/ext/libmemcached-0.50/poll/poll.c +77 -0
- data/ext/libmemcached-0.50/poll/poll.h +45 -0
- data/ext/libmemcached-0.50/support/include.am +11 -0
- data/ext/libmemcached-0.50/support/libmemcached-fc.spec.in +105 -0
- data/ext/libmemcached-0.50/support/libmemcached.pc.in +10 -0
- data/ext/libmemcached-0.50/support/libmemcached.spec.in +281 -0
- data/ext/libmemcached-0.50/support/set_benchmark.sh +5 -0
- data/ext/libmemcached-0.50/tests/atomsmasher.cc +295 -0
- data/ext/libmemcached-0.50/tests/basic.cc +134 -0
- data/ext/libmemcached-0.50/tests/basic.h +66 -0
- data/ext/libmemcached-0.50/tests/cpp_example.cc +195 -0
- data/ext/libmemcached-0.50/tests/deprecated.cc +72 -0
- data/ext/libmemcached-0.50/tests/deprecated.h +49 -0
- data/ext/libmemcached-0.50/tests/error_conditions.cc +63 -0
- data/ext/libmemcached-0.50/tests/error_conditions.h +48 -0
- data/ext/libmemcached-0.50/tests/hash_plus.cc +225 -0
- data/ext/libmemcached-0.50/tests/hash_results.h +127 -0
- data/ext/libmemcached-0.50/tests/hashkit_functions.cc +619 -0
- data/ext/libmemcached-0.50/tests/include.am +342 -0
- data/ext/libmemcached-0.50/tests/ketama_test_cases.h +121 -0
- data/ext/libmemcached-0.50/tests/ketama_test_cases_spy.h +118 -0
- data/ext/libmemcached-0.50/tests/libmemcached_world.h +205 -0
- data/ext/libmemcached-0.50/tests/mem_functions.cc +6648 -0
- data/ext/libmemcached-0.50/tests/mem_udp.cc +510 -0
- data/ext/libmemcached-0.50/tests/output_plus.res +5 -0
- data/ext/libmemcached-0.50/tests/parser.cc +599 -0
- data/ext/libmemcached-0.50/tests/parser.h +109 -0
- data/ext/libmemcached-0.50/tests/plus.cpp +240 -0
- data/ext/libmemcached-0.50/tests/pool.cc +78 -0
- data/ext/libmemcached-0.50/tests/pool.h +49 -0
- data/ext/libmemcached-0.50/tests/print.cc +58 -0
- data/ext/libmemcached-0.50/tests/print.h +51 -0
- data/ext/libmemcached-0.50/tests/replication.cc +333 -0
- data/ext/libmemcached-0.50/tests/replication.h +64 -0
- data/ext/libmemcached-0.50/tests/start.cc +29 -0
- data/ext/libmemcached-0.50/tests/string.cc +174 -0
- data/ext/libmemcached-0.50/tests/string.h +67 -0
- data/ext/libmemcached-0.50/tests/virtual_buckets.cc +143 -0
- data/ext/libmemcached-0.50/tests/virtual_buckets.h +51 -0
- data/ext/libmemcached-0.50/win32/include.am +11 -0
- data/ext/libmemcached-0.50/win32/wrappers.h +55 -0
- data/ext/rlibmemcached.i +263 -0
- data/ext/rlibmemcached_wrap.c +16732 -0
- data/lib/memcached.rb +32 -0
- data/lib/memcached/auth.rb +16 -0
- data/lib/memcached/behaviors.rb +77 -0
- data/lib/memcached/exceptions.rb +84 -0
- data/lib/memcached/experimental.rb +48 -0
- data/lib/memcached/memcached.rb +660 -0
- data/lib/memcached/rails.rb +133 -0
- data/test/profile/benchmark.rb +245 -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 +19 -0
- data/test/unit/binding_test.rb +8 -0
- data/test/unit/memcached_experimental_test.rb +274 -0
- data/test/unit/memcached_test.rb +1293 -0
- data/test/unit/rails_test.rb +122 -0
- metadata +650 -0
- metadata.gz.sig +0 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
|
|
2
|
+
*
|
|
3
|
+
* Libmemcached library
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2011 Data Differential, http://datadifferential.com/
|
|
6
|
+
* Copyright (C) 2006-2009 Brian Aker All rights reserved.
|
|
7
|
+
*
|
|
8
|
+
* Redistribution and use in source and binary forms, with or without
|
|
9
|
+
* modification, are permitted provided that the following conditions are
|
|
10
|
+
* met:
|
|
11
|
+
*
|
|
12
|
+
* * Redistributions of source code must retain the above copyright
|
|
13
|
+
* notice, this list of conditions and the following disclaimer.
|
|
14
|
+
*
|
|
15
|
+
* * Redistributions in binary form must reproduce the above
|
|
16
|
+
* copyright notice, this list of conditions and the following disclaimer
|
|
17
|
+
* in the documentation and/or other materials provided with the
|
|
18
|
+
* distribution.
|
|
19
|
+
*
|
|
20
|
+
* * The names of its contributors may not be used to endorse or
|
|
21
|
+
* promote products derived from this software without specific prior
|
|
22
|
+
* written permission.
|
|
23
|
+
*
|
|
24
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
25
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
26
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
27
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
28
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
29
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
30
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
31
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
32
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
33
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
34
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
#pragma once
|
|
39
|
+
|
|
40
|
+
struct memcached_stat_st {
|
|
41
|
+
unsigned long connection_structures;
|
|
42
|
+
unsigned long curr_connections;
|
|
43
|
+
unsigned long curr_items;
|
|
44
|
+
unsigned long pid;
|
|
45
|
+
unsigned long pointer_size;
|
|
46
|
+
unsigned long rusage_system_microseconds;
|
|
47
|
+
unsigned long rusage_system_seconds;
|
|
48
|
+
unsigned long rusage_user_microseconds;
|
|
49
|
+
unsigned long rusage_user_seconds;
|
|
50
|
+
unsigned long threads;
|
|
51
|
+
unsigned long time;
|
|
52
|
+
unsigned long total_connections;
|
|
53
|
+
unsigned long total_items;
|
|
54
|
+
unsigned long uptime;
|
|
55
|
+
unsigned long long bytes;
|
|
56
|
+
unsigned long long bytes_read;
|
|
57
|
+
unsigned long long bytes_written;
|
|
58
|
+
unsigned long long cmd_get;
|
|
59
|
+
unsigned long long cmd_set;
|
|
60
|
+
unsigned long long evictions;
|
|
61
|
+
unsigned long long get_hits;
|
|
62
|
+
unsigned long long get_misses;
|
|
63
|
+
unsigned long long limit_maxbytes;
|
|
64
|
+
char version[MEMCACHED_VERSION_STRING_LENGTH];
|
|
65
|
+
void *__future; // @todo create a new structure to place here for future usage
|
|
66
|
+
memcached_st *root;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
#ifdef __cplusplus
|
|
70
|
+
extern "C" {
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
LIBMEMCACHED_API
|
|
74
|
+
void memcached_stat_free(const memcached_st *, memcached_stat_st *);
|
|
75
|
+
|
|
76
|
+
LIBMEMCACHED_API
|
|
77
|
+
memcached_stat_st *memcached_stat(memcached_st *ptr, char *args, memcached_return_t *error);
|
|
78
|
+
|
|
79
|
+
LIBMEMCACHED_API
|
|
80
|
+
memcached_return_t memcached_stat_servername(memcached_stat_st *memc_stat, char *args,
|
|
81
|
+
const char *hostname, in_port_t port);
|
|
82
|
+
|
|
83
|
+
LIBMEMCACHED_API
|
|
84
|
+
char *memcached_stat_get_value(const memcached_st *ptr, memcached_stat_st *memc_stat,
|
|
85
|
+
const char *key, memcached_return_t *error);
|
|
86
|
+
|
|
87
|
+
LIBMEMCACHED_API
|
|
88
|
+
char ** memcached_stat_get_keys(memcached_st *ptr, memcached_stat_st *memc_stat,
|
|
89
|
+
memcached_return_t *error);
|
|
90
|
+
|
|
91
|
+
LIBMEMCACHED_API
|
|
92
|
+
memcached_return_t memcached_stat_execute(memcached_st *memc, const char *args, memcached_stat_fn func, void *context);
|
|
93
|
+
|
|
94
|
+
#ifdef __cplusplus
|
|
95
|
+
} // extern "C"
|
|
96
|
+
#endif
|
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
/* LibMemcached
|
|
2
|
+
* Copyright (C) 2006-2009 Brian Aker
|
|
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
|
+
* Summary: Storage related functions, aka set, replace,..
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
#include <libmemcached/common.h>
|
|
13
|
+
|
|
14
|
+
enum memcached_storage_action_t {
|
|
15
|
+
SET_OP,
|
|
16
|
+
REPLACE_OP,
|
|
17
|
+
ADD_OP,
|
|
18
|
+
PREPEND_OP,
|
|
19
|
+
APPEND_OP,
|
|
20
|
+
CAS_OP
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/* Inline this */
|
|
24
|
+
static inline const char *storage_op_string(memcached_storage_action_t verb)
|
|
25
|
+
{
|
|
26
|
+
switch (verb)
|
|
27
|
+
{
|
|
28
|
+
case SET_OP:
|
|
29
|
+
return "set ";
|
|
30
|
+
case REPLACE_OP:
|
|
31
|
+
return "replace ";
|
|
32
|
+
case ADD_OP:
|
|
33
|
+
return "add ";
|
|
34
|
+
case PREPEND_OP:
|
|
35
|
+
return "prepend ";
|
|
36
|
+
case APPEND_OP:
|
|
37
|
+
return "append ";
|
|
38
|
+
case CAS_OP:
|
|
39
|
+
return "cas ";
|
|
40
|
+
default:
|
|
41
|
+
return "tosserror"; /* This is impossible, fixes issue for compiler warning in VisualStudio */
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* NOTREACHED */
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static memcached_return_t memcached_send_binary(memcached_st *ptr,
|
|
48
|
+
memcached_server_write_instance_st server,
|
|
49
|
+
uint32_t server_key,
|
|
50
|
+
const char *key,
|
|
51
|
+
size_t key_length,
|
|
52
|
+
const char *value,
|
|
53
|
+
size_t value_length,
|
|
54
|
+
time_t expiration,
|
|
55
|
+
uint32_t flags,
|
|
56
|
+
uint64_t cas,
|
|
57
|
+
memcached_storage_action_t verb);
|
|
58
|
+
|
|
59
|
+
static inline memcached_return_t memcached_send(memcached_st *ptr,
|
|
60
|
+
const char *group_key, size_t group_key_length,
|
|
61
|
+
const char *key, size_t key_length,
|
|
62
|
+
const char *value, size_t value_length,
|
|
63
|
+
time_t expiration,
|
|
64
|
+
uint32_t flags,
|
|
65
|
+
uint64_t cas,
|
|
66
|
+
memcached_storage_action_t verb)
|
|
67
|
+
{
|
|
68
|
+
bool to_write;
|
|
69
|
+
size_t write_length;
|
|
70
|
+
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
|
|
71
|
+
|
|
72
|
+
WATCHPOINT_ASSERT(!(value == NULL && value_length > 0));
|
|
73
|
+
|
|
74
|
+
memcached_return_t rc;
|
|
75
|
+
if (memcached_failed(rc= initialize_query(ptr)))
|
|
76
|
+
{
|
|
77
|
+
return rc;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (memcached_failed(rc= memcached_validate_key_length(key_length, ptr->flags.binary_protocol)))
|
|
81
|
+
return rc;
|
|
82
|
+
|
|
83
|
+
if (ptr->flags.verify_key && (memcached_key_test((const char **)&key, &key_length, 1) == MEMCACHED_BAD_KEY_PROVIDED))
|
|
84
|
+
return MEMCACHED_BAD_KEY_PROVIDED;
|
|
85
|
+
|
|
86
|
+
uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length);
|
|
87
|
+
memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, server_key);
|
|
88
|
+
|
|
89
|
+
WATCHPOINT_SET(instance->io_wait_count.read= 0);
|
|
90
|
+
WATCHPOINT_SET(instance->io_wait_count.write= 0);
|
|
91
|
+
|
|
92
|
+
if (ptr->flags.binary_protocol)
|
|
93
|
+
{
|
|
94
|
+
rc= memcached_send_binary(ptr, instance, server_key,
|
|
95
|
+
key, key_length,
|
|
96
|
+
value, value_length, expiration,
|
|
97
|
+
flags, cas, verb);
|
|
98
|
+
WATCHPOINT_IF_LABELED_NUMBER(instance->io_wait_count.read > 2, "read IO_WAIT", instance->io_wait_count.read);
|
|
99
|
+
WATCHPOINT_IF_LABELED_NUMBER(instance->io_wait_count.write > 2, "write_IO_WAIT", instance->io_wait_count.write);
|
|
100
|
+
}
|
|
101
|
+
else
|
|
102
|
+
{
|
|
103
|
+
|
|
104
|
+
if (cas)
|
|
105
|
+
{
|
|
106
|
+
int check_length;
|
|
107
|
+
check_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
|
|
108
|
+
"%s %.*s%.*s %u %llu %lu %llu%s\r\n",
|
|
109
|
+
storage_op_string(verb),
|
|
110
|
+
memcached_print_array(ptr->prefix_key),
|
|
111
|
+
(int)key_length, key, flags,
|
|
112
|
+
(unsigned long long)expiration, (unsigned long)value_length,
|
|
113
|
+
(unsigned long long)cas,
|
|
114
|
+
(ptr->flags.no_reply) ? " noreply" : "");
|
|
115
|
+
if (check_length >= MEMCACHED_DEFAULT_COMMAND_SIZE || check_length < 0)
|
|
116
|
+
{
|
|
117
|
+
rc= MEMCACHED_WRITE_FAILURE;
|
|
118
|
+
memcached_io_reset(instance);
|
|
119
|
+
|
|
120
|
+
return rc;
|
|
121
|
+
}
|
|
122
|
+
write_length= check_length;
|
|
123
|
+
}
|
|
124
|
+
else
|
|
125
|
+
{
|
|
126
|
+
char *buffer_ptr= buffer;
|
|
127
|
+
const char *command= storage_op_string(verb);
|
|
128
|
+
|
|
129
|
+
/* Copy in the command, no space needed, we handle that in the command function*/
|
|
130
|
+
memcpy(buffer_ptr, command, strlen(command));
|
|
131
|
+
|
|
132
|
+
/* Copy in the key prefix, switch to the buffer_ptr */
|
|
133
|
+
buffer_ptr= (char *)memcpy((char *)(buffer_ptr + strlen(command)), (char *)memcached_array_string(ptr->prefix_key), memcached_array_size(ptr->prefix_key));
|
|
134
|
+
|
|
135
|
+
/* Copy in the key, adjust point if a key prefix was used. */
|
|
136
|
+
buffer_ptr= (char *)memcpy(buffer_ptr + memcached_array_size(ptr->prefix_key),
|
|
137
|
+
key, key_length);
|
|
138
|
+
buffer_ptr+= key_length;
|
|
139
|
+
buffer_ptr[0]= ' ';
|
|
140
|
+
buffer_ptr++;
|
|
141
|
+
|
|
142
|
+
write_length= (size_t)(buffer_ptr - buffer);
|
|
143
|
+
int check_length= snprintf(buffer_ptr, MEMCACHED_DEFAULT_COMMAND_SIZE -(size_t)(buffer_ptr - buffer),
|
|
144
|
+
"%u %llu %lu%s\r\n",
|
|
145
|
+
flags,
|
|
146
|
+
(unsigned long long)expiration, (unsigned long)value_length,
|
|
147
|
+
ptr->flags.no_reply ? " noreply" : "");
|
|
148
|
+
if ((size_t)check_length >= MEMCACHED_DEFAULT_COMMAND_SIZE -size_t(buffer_ptr - buffer) || check_length < 0)
|
|
149
|
+
{
|
|
150
|
+
rc= MEMCACHED_WRITE_FAILURE;
|
|
151
|
+
memcached_io_reset(instance);
|
|
152
|
+
|
|
153
|
+
return rc;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
write_length+= (size_t)check_length;
|
|
157
|
+
WATCHPOINT_ASSERT(write_length < MEMCACHED_DEFAULT_COMMAND_SIZE);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (ptr->flags.use_udp && ptr->flags.buffer_requests)
|
|
161
|
+
{
|
|
162
|
+
size_t cmd_size= write_length + value_length +2;
|
|
163
|
+
if (cmd_size > MAX_UDP_DATAGRAM_LENGTH - UDP_DATAGRAM_HEADER_LENGTH)
|
|
164
|
+
return memcached_set_error(*ptr, MEMCACHED_WRITE_FAILURE, MEMCACHED_AT);
|
|
165
|
+
|
|
166
|
+
if (cmd_size + instance->write_buffer_offset > MAX_UDP_DATAGRAM_LENGTH)
|
|
167
|
+
memcached_io_write(instance, NULL, 0, true);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (write_length >= MEMCACHED_DEFAULT_COMMAND_SIZE)
|
|
171
|
+
{
|
|
172
|
+
rc= memcached_set_error(*ptr, MEMCACHED_WRITE_FAILURE, MEMCACHED_AT);
|
|
173
|
+
}
|
|
174
|
+
else
|
|
175
|
+
{
|
|
176
|
+
struct libmemcached_io_vector_st vector[]=
|
|
177
|
+
{
|
|
178
|
+
{ write_length, buffer },
|
|
179
|
+
{ value_length, value },
|
|
180
|
+
{ 2, "\r\n" }
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
if (ptr->flags.buffer_requests && verb == SET_OP)
|
|
184
|
+
{
|
|
185
|
+
to_write= false;
|
|
186
|
+
}
|
|
187
|
+
else
|
|
188
|
+
{
|
|
189
|
+
to_write= true;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* Send command header */
|
|
193
|
+
rc= memcached_vdo(instance, vector, 3, to_write);
|
|
194
|
+
if (rc == MEMCACHED_SUCCESS)
|
|
195
|
+
{
|
|
196
|
+
|
|
197
|
+
if (ptr->flags.no_reply)
|
|
198
|
+
{
|
|
199
|
+
rc= (to_write == false) ? MEMCACHED_BUFFERED : MEMCACHED_SUCCESS;
|
|
200
|
+
}
|
|
201
|
+
else if (to_write == false)
|
|
202
|
+
{
|
|
203
|
+
rc= MEMCACHED_BUFFERED;
|
|
204
|
+
}
|
|
205
|
+
else
|
|
206
|
+
{
|
|
207
|
+
rc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
|
|
208
|
+
|
|
209
|
+
if (rc == MEMCACHED_STORED)
|
|
210
|
+
rc= MEMCACHED_SUCCESS;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (rc == MEMCACHED_WRITE_FAILURE)
|
|
216
|
+
memcached_io_reset(instance);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
WATCHPOINT_IF_LABELED_NUMBER(instance->io_wait_count.read > 2, "read IO_WAIT", instance->io_wait_count.read);
|
|
220
|
+
WATCHPOINT_IF_LABELED_NUMBER(instance->io_wait_count.write > 2, "write_IO_WAIT", instance->io_wait_count.write);
|
|
221
|
+
|
|
222
|
+
return rc;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
memcached_return_t memcached_set(memcached_st *ptr, const char *key, size_t key_length,
|
|
227
|
+
const char *value, size_t value_length,
|
|
228
|
+
time_t expiration,
|
|
229
|
+
uint32_t flags)
|
|
230
|
+
{
|
|
231
|
+
memcached_return_t rc;
|
|
232
|
+
LIBMEMCACHED_MEMCACHED_SET_START();
|
|
233
|
+
rc= memcached_send(ptr, key, key_length,
|
|
234
|
+
key, key_length, value, value_length,
|
|
235
|
+
expiration, flags, 0, SET_OP);
|
|
236
|
+
LIBMEMCACHED_MEMCACHED_SET_END();
|
|
237
|
+
return rc;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
memcached_return_t memcached_add(memcached_st *ptr,
|
|
241
|
+
const char *key, size_t key_length,
|
|
242
|
+
const char *value, size_t value_length,
|
|
243
|
+
time_t expiration,
|
|
244
|
+
uint32_t flags)
|
|
245
|
+
{
|
|
246
|
+
memcached_return_t rc;
|
|
247
|
+
LIBMEMCACHED_MEMCACHED_ADD_START();
|
|
248
|
+
rc= memcached_send(ptr, key, key_length,
|
|
249
|
+
key, key_length, value, value_length,
|
|
250
|
+
expiration, flags, 0, ADD_OP);
|
|
251
|
+
LIBMEMCACHED_MEMCACHED_ADD_END();
|
|
252
|
+
return rc;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
memcached_return_t memcached_replace(memcached_st *ptr,
|
|
256
|
+
const char *key, size_t key_length,
|
|
257
|
+
const char *value, size_t value_length,
|
|
258
|
+
time_t expiration,
|
|
259
|
+
uint32_t flags)
|
|
260
|
+
{
|
|
261
|
+
memcached_return_t rc;
|
|
262
|
+
LIBMEMCACHED_MEMCACHED_REPLACE_START();
|
|
263
|
+
rc= memcached_send(ptr, key, key_length,
|
|
264
|
+
key, key_length, value, value_length,
|
|
265
|
+
expiration, flags, 0, REPLACE_OP);
|
|
266
|
+
LIBMEMCACHED_MEMCACHED_REPLACE_END();
|
|
267
|
+
return rc;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
memcached_return_t memcached_prepend(memcached_st *ptr,
|
|
271
|
+
const char *key, size_t key_length,
|
|
272
|
+
const char *value, size_t value_length,
|
|
273
|
+
time_t expiration,
|
|
274
|
+
uint32_t flags)
|
|
275
|
+
{
|
|
276
|
+
memcached_return_t rc;
|
|
277
|
+
rc= memcached_send(ptr, key, key_length,
|
|
278
|
+
key, key_length, value, value_length,
|
|
279
|
+
expiration, flags, 0, PREPEND_OP);
|
|
280
|
+
return rc;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
memcached_return_t memcached_append(memcached_st *ptr,
|
|
284
|
+
const char *key, size_t key_length,
|
|
285
|
+
const char *value, size_t value_length,
|
|
286
|
+
time_t expiration,
|
|
287
|
+
uint32_t flags)
|
|
288
|
+
{
|
|
289
|
+
memcached_return_t rc;
|
|
290
|
+
rc= memcached_send(ptr, key, key_length,
|
|
291
|
+
key, key_length, value, value_length,
|
|
292
|
+
expiration, flags, 0, APPEND_OP);
|
|
293
|
+
return rc;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
memcached_return_t memcached_cas(memcached_st *ptr,
|
|
297
|
+
const char *key, size_t key_length,
|
|
298
|
+
const char *value, size_t value_length,
|
|
299
|
+
time_t expiration,
|
|
300
|
+
uint32_t flags,
|
|
301
|
+
uint64_t cas)
|
|
302
|
+
{
|
|
303
|
+
memcached_return_t rc;
|
|
304
|
+
rc= memcached_send(ptr, key, key_length,
|
|
305
|
+
key, key_length, value, value_length,
|
|
306
|
+
expiration, flags, cas, CAS_OP);
|
|
307
|
+
return rc;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
memcached_return_t memcached_set_by_key(memcached_st *ptr,
|
|
311
|
+
const char *group_key,
|
|
312
|
+
size_t group_key_length,
|
|
313
|
+
const char *key, size_t key_length,
|
|
314
|
+
const char *value, size_t value_length,
|
|
315
|
+
time_t expiration,
|
|
316
|
+
uint32_t flags)
|
|
317
|
+
{
|
|
318
|
+
memcached_return_t rc;
|
|
319
|
+
LIBMEMCACHED_MEMCACHED_SET_START();
|
|
320
|
+
rc= memcached_send(ptr, group_key, group_key_length,
|
|
321
|
+
key, key_length, value, value_length,
|
|
322
|
+
expiration, flags, 0, SET_OP);
|
|
323
|
+
LIBMEMCACHED_MEMCACHED_SET_END();
|
|
324
|
+
return rc;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
memcached_return_t memcached_add_by_key(memcached_st *ptr,
|
|
328
|
+
const char *group_key, size_t group_key_length,
|
|
329
|
+
const char *key, size_t key_length,
|
|
330
|
+
const char *value, size_t value_length,
|
|
331
|
+
time_t expiration,
|
|
332
|
+
uint32_t flags)
|
|
333
|
+
{
|
|
334
|
+
memcached_return_t rc;
|
|
335
|
+
LIBMEMCACHED_MEMCACHED_ADD_START();
|
|
336
|
+
rc= memcached_send(ptr, group_key, group_key_length,
|
|
337
|
+
key, key_length, value, value_length,
|
|
338
|
+
expiration, flags, 0, ADD_OP);
|
|
339
|
+
LIBMEMCACHED_MEMCACHED_ADD_END();
|
|
340
|
+
return rc;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
memcached_return_t memcached_replace_by_key(memcached_st *ptr,
|
|
344
|
+
const char *group_key, size_t group_key_length,
|
|
345
|
+
const char *key, size_t key_length,
|
|
346
|
+
const char *value, size_t value_length,
|
|
347
|
+
time_t expiration,
|
|
348
|
+
uint32_t flags)
|
|
349
|
+
{
|
|
350
|
+
memcached_return_t rc;
|
|
351
|
+
LIBMEMCACHED_MEMCACHED_REPLACE_START();
|
|
352
|
+
rc= memcached_send(ptr, group_key, group_key_length,
|
|
353
|
+
key, key_length, value, value_length,
|
|
354
|
+
expiration, flags, 0, REPLACE_OP);
|
|
355
|
+
LIBMEMCACHED_MEMCACHED_REPLACE_END();
|
|
356
|
+
return rc;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
memcached_return_t memcached_prepend_by_key(memcached_st *ptr,
|
|
360
|
+
const char *group_key, size_t group_key_length,
|
|
361
|
+
const char *key, size_t key_length,
|
|
362
|
+
const char *value, size_t value_length,
|
|
363
|
+
time_t expiration,
|
|
364
|
+
uint32_t flags)
|
|
365
|
+
{
|
|
366
|
+
memcached_return_t rc;
|
|
367
|
+
rc= memcached_send(ptr, group_key, group_key_length,
|
|
368
|
+
key, key_length, value, value_length,
|
|
369
|
+
expiration, flags, 0, PREPEND_OP);
|
|
370
|
+
return rc;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
memcached_return_t memcached_append_by_key(memcached_st *ptr,
|
|
374
|
+
const char *group_key, size_t group_key_length,
|
|
375
|
+
const char *key, size_t key_length,
|
|
376
|
+
const char *value, size_t value_length,
|
|
377
|
+
time_t expiration,
|
|
378
|
+
uint32_t flags)
|
|
379
|
+
{
|
|
380
|
+
memcached_return_t rc;
|
|
381
|
+
rc= memcached_send(ptr, group_key, group_key_length,
|
|
382
|
+
key, key_length, value, value_length,
|
|
383
|
+
expiration, flags, 0, APPEND_OP);
|
|
384
|
+
return rc;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
memcached_return_t memcached_cas_by_key(memcached_st *ptr,
|
|
388
|
+
const char *group_key, size_t group_key_length,
|
|
389
|
+
const char *key, size_t key_length,
|
|
390
|
+
const char *value, size_t value_length,
|
|
391
|
+
time_t expiration,
|
|
392
|
+
uint32_t flags,
|
|
393
|
+
uint64_t cas)
|
|
394
|
+
{
|
|
395
|
+
memcached_return_t rc;
|
|
396
|
+
rc= memcached_send(ptr, group_key, group_key_length,
|
|
397
|
+
key, key_length, value, value_length,
|
|
398
|
+
expiration, flags, cas, CAS_OP);
|
|
399
|
+
return rc;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
static inline uint8_t get_com_code(memcached_storage_action_t verb, bool noreply)
|
|
403
|
+
{
|
|
404
|
+
/* 0 isn't a value we want, but GCC 4.2 seems to think ret can otherwise
|
|
405
|
+
* be used uninitialized in this function. FAIL */
|
|
406
|
+
uint8_t ret= 0;
|
|
407
|
+
|
|
408
|
+
if (noreply)
|
|
409
|
+
switch (verb)
|
|
410
|
+
{
|
|
411
|
+
case SET_OP:
|
|
412
|
+
ret=PROTOCOL_BINARY_CMD_SETQ;
|
|
413
|
+
break;
|
|
414
|
+
case ADD_OP:
|
|
415
|
+
ret=PROTOCOL_BINARY_CMD_ADDQ;
|
|
416
|
+
break;
|
|
417
|
+
case CAS_OP: /* FALLTHROUGH */
|
|
418
|
+
case REPLACE_OP:
|
|
419
|
+
ret=PROTOCOL_BINARY_CMD_REPLACEQ;
|
|
420
|
+
break;
|
|
421
|
+
case APPEND_OP:
|
|
422
|
+
ret=PROTOCOL_BINARY_CMD_APPENDQ;
|
|
423
|
+
break;
|
|
424
|
+
case PREPEND_OP:
|
|
425
|
+
ret=PROTOCOL_BINARY_CMD_PREPENDQ;
|
|
426
|
+
break;
|
|
427
|
+
default:
|
|
428
|
+
WATCHPOINT_ASSERT(verb);
|
|
429
|
+
break;
|
|
430
|
+
}
|
|
431
|
+
else
|
|
432
|
+
switch (verb)
|
|
433
|
+
{
|
|
434
|
+
case SET_OP:
|
|
435
|
+
ret=PROTOCOL_BINARY_CMD_SET;
|
|
436
|
+
break;
|
|
437
|
+
case ADD_OP:
|
|
438
|
+
ret=PROTOCOL_BINARY_CMD_ADD;
|
|
439
|
+
break;
|
|
440
|
+
case CAS_OP: /* FALLTHROUGH */
|
|
441
|
+
case REPLACE_OP:
|
|
442
|
+
ret=PROTOCOL_BINARY_CMD_REPLACE;
|
|
443
|
+
break;
|
|
444
|
+
case APPEND_OP:
|
|
445
|
+
ret=PROTOCOL_BINARY_CMD_APPEND;
|
|
446
|
+
break;
|
|
447
|
+
case PREPEND_OP:
|
|
448
|
+
ret=PROTOCOL_BINARY_CMD_PREPEND;
|
|
449
|
+
break;
|
|
450
|
+
default:
|
|
451
|
+
WATCHPOINT_ASSERT(verb);
|
|
452
|
+
break;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
return ret;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
static memcached_return_t memcached_send_binary(memcached_st *ptr,
|
|
461
|
+
memcached_server_write_instance_st server,
|
|
462
|
+
uint32_t server_key,
|
|
463
|
+
const char *key,
|
|
464
|
+
size_t key_length,
|
|
465
|
+
const char *value,
|
|
466
|
+
size_t value_length,
|
|
467
|
+
time_t expiration,
|
|
468
|
+
uint32_t flags,
|
|
469
|
+
uint64_t cas,
|
|
470
|
+
memcached_storage_action_t verb)
|
|
471
|
+
{
|
|
472
|
+
bool flush;
|
|
473
|
+
protocol_binary_request_set request= {};
|
|
474
|
+
size_t send_length= sizeof(request.bytes);
|
|
475
|
+
|
|
476
|
+
bool noreply= server->root->flags.no_reply;
|
|
477
|
+
|
|
478
|
+
request.message.header.request.magic= PROTOCOL_BINARY_REQ;
|
|
479
|
+
request.message.header.request.opcode= get_com_code(verb, noreply);
|
|
480
|
+
request.message.header.request.keylen= htons((uint16_t)(key_length + memcached_array_size(ptr->prefix_key)));
|
|
481
|
+
request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES;
|
|
482
|
+
if (verb == APPEND_OP || verb == PREPEND_OP)
|
|
483
|
+
send_length -= 8; /* append & prepend does not contain extras! */
|
|
484
|
+
else
|
|
485
|
+
{
|
|
486
|
+
request.message.header.request.extlen= 8;
|
|
487
|
+
request.message.body.flags= htonl(flags);
|
|
488
|
+
request.message.body.expiration= htonl((uint32_t)expiration);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
request.message.header.request.bodylen= htonl((uint32_t) (key_length + memcached_array_size(ptr->prefix_key) + value_length +
|
|
492
|
+
request.message.header.request.extlen));
|
|
493
|
+
|
|
494
|
+
if (cas)
|
|
495
|
+
request.message.header.request.cas= memcached_htonll(cas);
|
|
496
|
+
|
|
497
|
+
flush= (bool) ((server->root->flags.buffer_requests && verb == SET_OP) ? 0 : 1);
|
|
498
|
+
|
|
499
|
+
if (server->root->flags.use_udp && ! flush)
|
|
500
|
+
{
|
|
501
|
+
size_t cmd_size= send_length + key_length + value_length;
|
|
502
|
+
|
|
503
|
+
if (cmd_size > MAX_UDP_DATAGRAM_LENGTH - UDP_DATAGRAM_HEADER_LENGTH)
|
|
504
|
+
{
|
|
505
|
+
return MEMCACHED_WRITE_FAILURE;
|
|
506
|
+
}
|
|
507
|
+
if (cmd_size + server->write_buffer_offset > MAX_UDP_DATAGRAM_LENGTH)
|
|
508
|
+
{
|
|
509
|
+
memcached_io_write(server, NULL, 0, true);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
struct libmemcached_io_vector_st vector[]=
|
|
514
|
+
{
|
|
515
|
+
{ send_length, request.bytes },
|
|
516
|
+
{ memcached_array_size(ptr->prefix_key), memcached_array_string(ptr->prefix_key) },
|
|
517
|
+
{ key_length, key },
|
|
518
|
+
{ value_length, value }
|
|
519
|
+
};
|
|
520
|
+
|
|
521
|
+
/* write the header */
|
|
522
|
+
memcached_return_t rc;
|
|
523
|
+
if ((rc= memcached_vdo(server, vector, 4, flush)) != MEMCACHED_SUCCESS)
|
|
524
|
+
{
|
|
525
|
+
memcached_io_reset(server);
|
|
526
|
+
return (rc == MEMCACHED_SUCCESS) ? MEMCACHED_WRITE_FAILURE : rc;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
if (verb == SET_OP && ptr->number_of_replicas > 0)
|
|
530
|
+
{
|
|
531
|
+
request.message.header.request.opcode= PROTOCOL_BINARY_CMD_SETQ;
|
|
532
|
+
WATCHPOINT_STRING("replicating");
|
|
533
|
+
|
|
534
|
+
for (uint32_t x= 0; x < ptr->number_of_replicas; x++)
|
|
535
|
+
{
|
|
536
|
+
memcached_server_write_instance_st instance;
|
|
537
|
+
|
|
538
|
+
++server_key;
|
|
539
|
+
if (server_key == memcached_server_count(ptr))
|
|
540
|
+
server_key= 0;
|
|
541
|
+
|
|
542
|
+
instance= memcached_server_instance_fetch(ptr, server_key);
|
|
543
|
+
|
|
544
|
+
if (memcached_vdo(instance, vector, 4, false) != MEMCACHED_SUCCESS)
|
|
545
|
+
{
|
|
546
|
+
memcached_io_reset(instance);
|
|
547
|
+
}
|
|
548
|
+
else
|
|
549
|
+
{
|
|
550
|
+
memcached_server_response_decrement(instance);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
if (flush == false)
|
|
556
|
+
{
|
|
557
|
+
return MEMCACHED_BUFFERED;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
if (noreply)
|
|
561
|
+
{
|
|
562
|
+
return MEMCACHED_SUCCESS;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
return memcached_response(server, NULL, 0, NULL);
|
|
566
|
+
}
|
|
567
|
+
|