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,47 @@
|
|
|
1
|
+
/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
|
|
2
|
+
*
|
|
3
|
+
* Libmemcached library
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2011 Data Differential, http://datadifferential.com/
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions are
|
|
9
|
+
* met:
|
|
10
|
+
*
|
|
11
|
+
* * Redistributions of source code must retain the above copyright
|
|
12
|
+
* notice, this list of conditions and the following disclaimer.
|
|
13
|
+
*
|
|
14
|
+
* * Redistributions in binary form must reproduce the above
|
|
15
|
+
* copyright notice, this list of conditions and the following disclaimer
|
|
16
|
+
* in the documentation and/or other materials provided with the
|
|
17
|
+
* distribution.
|
|
18
|
+
*
|
|
19
|
+
* * The names of its contributors may not be used to endorse or
|
|
20
|
+
* promote products derived from this software without specific prior
|
|
21
|
+
* written permission.
|
|
22
|
+
*
|
|
23
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
24
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
25
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
26
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
27
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
28
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
29
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
30
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
31
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
32
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
33
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
34
|
+
*
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
#pragma once
|
|
38
|
+
|
|
39
|
+
LIBMEMCACHED_LOCAL
|
|
40
|
+
bool memcached_binary_protocol_pedantic_check_request(const protocol_binary_request_header *request);
|
|
41
|
+
|
|
42
|
+
LIBMEMCACHED_LOCAL
|
|
43
|
+
bool memcached_binary_protocol_pedantic_check_response(const protocol_binary_request_header *request,
|
|
44
|
+
const protocol_binary_response_header *response);
|
|
45
|
+
|
|
46
|
+
LIBMEMCACHED_LOCAL
|
|
47
|
+
memcached_protocol_event_t memcached_binary_protocol_process_data(memcached_protocol_client_st *client, ssize_t *length, void **endptr);
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
#include <stdlib.h>
|
|
3
|
+
#include <string.h>
|
|
4
|
+
#include <inttypes.h>
|
|
5
|
+
|
|
6
|
+
#ifndef NDEBUG
|
|
7
|
+
#include <signal.h>
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
#include "cache.h"
|
|
11
|
+
|
|
12
|
+
#ifndef NDEBUG
|
|
13
|
+
const uint64_t redzone_pattern = 0xdeadbeefcafebabe;
|
|
14
|
+
int cache_error = 0;
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
const size_t initial_pool_size = 64;
|
|
18
|
+
|
|
19
|
+
cache_t* cache_create(const char *name, size_t bufsize, size_t align,
|
|
20
|
+
cache_constructor_t* constructor,
|
|
21
|
+
cache_destructor_t* destructor) {
|
|
22
|
+
cache_t* ret = calloc(1, sizeof(cache_t));
|
|
23
|
+
char* nm = strdup(name);
|
|
24
|
+
void** ptr = calloc(initial_pool_size, bufsize);
|
|
25
|
+
if (ret == NULL || nm == NULL || ptr == NULL ||
|
|
26
|
+
pthread_mutex_init(&ret->mutex, NULL) == -1) {
|
|
27
|
+
free(ret);
|
|
28
|
+
free(nm);
|
|
29
|
+
free(ptr);
|
|
30
|
+
return NULL;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
ret->name = nm;
|
|
34
|
+
ret->ptr = ptr;
|
|
35
|
+
ret->freetotal = initial_pool_size;
|
|
36
|
+
ret->constructor = constructor;
|
|
37
|
+
ret->destructor = destructor;
|
|
38
|
+
|
|
39
|
+
#ifndef NDEBUG
|
|
40
|
+
ret->bufsize = bufsize + 2 * sizeof(redzone_pattern);
|
|
41
|
+
#else
|
|
42
|
+
ret->bufsize = bufsize;
|
|
43
|
+
#endif
|
|
44
|
+
|
|
45
|
+
(void)align;
|
|
46
|
+
|
|
47
|
+
return ret;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
static inline void* get_object(void *ptr) {
|
|
51
|
+
#ifndef NDEBUG
|
|
52
|
+
uint64_t *pre = ptr;
|
|
53
|
+
return pre + 1;
|
|
54
|
+
#else
|
|
55
|
+
return ptr;
|
|
56
|
+
#endif
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
void cache_destroy(cache_t *cache) {
|
|
60
|
+
while (cache->freecurr > 0) {
|
|
61
|
+
void *ptr = cache->ptr[--cache->freecurr];
|
|
62
|
+
if (cache->destructor) {
|
|
63
|
+
cache->destructor(get_object(ptr), NULL);
|
|
64
|
+
}
|
|
65
|
+
free(ptr);
|
|
66
|
+
}
|
|
67
|
+
free(cache->name);
|
|
68
|
+
free(cache->ptr);
|
|
69
|
+
pthread_mutex_destroy(&cache->mutex);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void* cache_alloc(cache_t *cache) {
|
|
73
|
+
void *ret;
|
|
74
|
+
void *object;
|
|
75
|
+
pthread_mutex_lock(&cache->mutex);
|
|
76
|
+
if (cache->freecurr > 0) {
|
|
77
|
+
ret = cache->ptr[--cache->freecurr];
|
|
78
|
+
object = get_object(ret);
|
|
79
|
+
} else {
|
|
80
|
+
object = ret = malloc(cache->bufsize);
|
|
81
|
+
if (ret != NULL) {
|
|
82
|
+
object = get_object(ret);
|
|
83
|
+
|
|
84
|
+
if (cache->constructor != NULL &&
|
|
85
|
+
cache->constructor(object, NULL, 0) != 0) {
|
|
86
|
+
free(ret);
|
|
87
|
+
object = NULL;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
pthread_mutex_unlock(&cache->mutex);
|
|
92
|
+
|
|
93
|
+
#ifndef NDEBUG
|
|
94
|
+
if (object != NULL) {
|
|
95
|
+
/* add a simple form of buffer-check */
|
|
96
|
+
uint64_t *pre = ret;
|
|
97
|
+
*pre = redzone_pattern;
|
|
98
|
+
ret = pre+1;
|
|
99
|
+
memcpy(((char*)ret) + cache->bufsize - (2 * sizeof(redzone_pattern)),
|
|
100
|
+
&redzone_pattern, sizeof(redzone_pattern));
|
|
101
|
+
}
|
|
102
|
+
#endif
|
|
103
|
+
|
|
104
|
+
return object;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
void cache_free(cache_t *cache, void *ptr) {
|
|
108
|
+
pthread_mutex_lock(&cache->mutex);
|
|
109
|
+
|
|
110
|
+
#ifndef NDEBUG
|
|
111
|
+
/* validate redzone... */
|
|
112
|
+
if (memcmp(((char*)ptr) + cache->bufsize - (2 * sizeof(redzone_pattern)),
|
|
113
|
+
&redzone_pattern, sizeof(redzone_pattern)) != 0) {
|
|
114
|
+
raise(SIGABRT);
|
|
115
|
+
cache_error = 1;
|
|
116
|
+
pthread_mutex_unlock(&cache->mutex);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
uint64_t *pre = ptr;
|
|
120
|
+
--pre;
|
|
121
|
+
if (*pre != redzone_pattern) {
|
|
122
|
+
raise(SIGABRT);
|
|
123
|
+
cache_error = -1;
|
|
124
|
+
pthread_mutex_unlock(&cache->mutex);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
ptr = pre;
|
|
128
|
+
#endif
|
|
129
|
+
if (cache->freecurr < cache->freetotal) {
|
|
130
|
+
cache->ptr[cache->freecurr++] = ptr;
|
|
131
|
+
} else {
|
|
132
|
+
/* try to enlarge free connections array */
|
|
133
|
+
size_t newtotal = cache->freetotal * 2;
|
|
134
|
+
void **new_free = realloc(cache->ptr, sizeof(char *) * newtotal);
|
|
135
|
+
if (new_free) {
|
|
136
|
+
cache->freetotal = newtotal;
|
|
137
|
+
cache->ptr = new_free;
|
|
138
|
+
cache->ptr[cache->freecurr++] = ptr;
|
|
139
|
+
} else {
|
|
140
|
+
if (cache->destructor) {
|
|
141
|
+
cache->destructor(ptr, NULL);
|
|
142
|
+
}
|
|
143
|
+
free(ptr);
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
pthread_mutex_unlock(&cache->mutex);
|
|
148
|
+
}
|
|
149
|
+
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
#ifndef CACHE_H
|
|
3
|
+
#define CACHE_H
|
|
4
|
+
#include <pthread.h>
|
|
5
|
+
|
|
6
|
+
#ifdef HAVE_UMEM_H
|
|
7
|
+
#include <umem.h>
|
|
8
|
+
#define cache_t umem_cache_t
|
|
9
|
+
#define cache_alloc(a) umem_cache_alloc(a, UMEM_DEFAULT)
|
|
10
|
+
#define cache_free(a, b) umem_cache_free(a, b)
|
|
11
|
+
#define cache_create(a,b,c,d,e) umem_cache_create((char*)a, b, c, d, e, NULL, NULL, NULL, 0)
|
|
12
|
+
#define cache_destroy(a) umem_cache_destroy(a);
|
|
13
|
+
|
|
14
|
+
#else
|
|
15
|
+
|
|
16
|
+
#ifndef NDEBUG
|
|
17
|
+
/* may be used for debug purposes */
|
|
18
|
+
extern int cache_error;
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Constructor used to initialize allocated objects
|
|
23
|
+
*
|
|
24
|
+
* @param obj pointer to the object to initialized.
|
|
25
|
+
* @param notused1 This parameter is currently not used.
|
|
26
|
+
* @param notused2 This parameter is currently not used.
|
|
27
|
+
* @return you should return 0, but currently this is not checked
|
|
28
|
+
*/
|
|
29
|
+
typedef int cache_constructor_t(void* obj, void* notused1, int notused2);
|
|
30
|
+
/**
|
|
31
|
+
* Destructor used to clean up allocated objects before they are
|
|
32
|
+
* returned to the operating system.
|
|
33
|
+
*
|
|
34
|
+
* @param obj pointer to the object to initialized.
|
|
35
|
+
* @param notused1 This parameter is currently not used.
|
|
36
|
+
* @param notused2 This parameter is currently not used.
|
|
37
|
+
* @return you should return 0, but currently this is not checked
|
|
38
|
+
*/
|
|
39
|
+
typedef void cache_destructor_t(void* obj, void* notused);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Definition of the structure to keep track of the internal details of
|
|
43
|
+
* the cache allocator. Touching any of these variables results in
|
|
44
|
+
* undefined behavior.
|
|
45
|
+
*/
|
|
46
|
+
typedef struct {
|
|
47
|
+
/** Mutex to protect access to the structure */
|
|
48
|
+
pthread_mutex_t mutex;
|
|
49
|
+
/** Name of the cache objects in this cache (provided by the caller) */
|
|
50
|
+
char *name;
|
|
51
|
+
/** List of pointers to available buffers in this cache */
|
|
52
|
+
void **ptr;
|
|
53
|
+
/** The size of each element in this cache */
|
|
54
|
+
size_t bufsize;
|
|
55
|
+
/** The capacity of the list of elements */
|
|
56
|
+
size_t freetotal;
|
|
57
|
+
/** The current number of free elements */
|
|
58
|
+
size_t freecurr;
|
|
59
|
+
/** The constructor to be called each time we allocate more memory */
|
|
60
|
+
cache_constructor_t* constructor;
|
|
61
|
+
/** The destructor to be called each time before we release memory */
|
|
62
|
+
cache_destructor_t* destructor;
|
|
63
|
+
} cache_t;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Create an object cache.
|
|
67
|
+
*
|
|
68
|
+
* The object cache will let you allocate objects of the same size. It is fully
|
|
69
|
+
* MT safe, so you may allocate objects from multiple threads without having to
|
|
70
|
+
* do any syncrhonization in the application code.
|
|
71
|
+
*
|
|
72
|
+
* @param name the name of the object cache. This name may be used for debug purposes
|
|
73
|
+
* and may help you track down what kind of object you have problems with
|
|
74
|
+
* (buffer overruns, leakage etc)
|
|
75
|
+
* @param bufsize the size of each object in the cache
|
|
76
|
+
* @param align the alignment requirements of the objects in the cache.
|
|
77
|
+
* @param constructor the function to be called to initialize memory when we need
|
|
78
|
+
* to allocate more memory from the os.
|
|
79
|
+
* @param destructor the function to be called before we release the memory back
|
|
80
|
+
* to the os.
|
|
81
|
+
* @return a handle to an object cache if successful, NULL otherwise.
|
|
82
|
+
*/
|
|
83
|
+
cache_t* cache_create(const char* name, size_t bufsize, size_t align,
|
|
84
|
+
cache_constructor_t* constructor,
|
|
85
|
+
cache_destructor_t* destructor);
|
|
86
|
+
/**
|
|
87
|
+
* Destroy an object cache.
|
|
88
|
+
*
|
|
89
|
+
* Destroy and invalidate an object cache. You should return all buffers allocated
|
|
90
|
+
* with cache_alloc by using cache_free before calling this function. Not doing
|
|
91
|
+
* so results in undefined behavior (the buffers may or may not be invalidated)
|
|
92
|
+
*
|
|
93
|
+
* @param handle the handle to the object cache to destroy.
|
|
94
|
+
*/
|
|
95
|
+
void cache_destroy(cache_t* handle);
|
|
96
|
+
/**
|
|
97
|
+
* Allocate an object from the cache.
|
|
98
|
+
*
|
|
99
|
+
* @param handle the handle to the object cache to allocate from
|
|
100
|
+
* @return a pointer to an initialized object from the cache, or NULL if
|
|
101
|
+
* the allocation cannot be satisfied.
|
|
102
|
+
*/
|
|
103
|
+
void* cache_alloc(cache_t* handle);
|
|
104
|
+
/**
|
|
105
|
+
* Return an object back to the cache.
|
|
106
|
+
*
|
|
107
|
+
* The caller should return the object in an initialized state so that
|
|
108
|
+
* the object may be returned in an expected state from cache_alloc.
|
|
109
|
+
*
|
|
110
|
+
* @param handle handle to the object cache to return the object to
|
|
111
|
+
* @param ptr pointer to the object to return.
|
|
112
|
+
*/
|
|
113
|
+
void cache_free(cache_t* handle, void* ptr);
|
|
114
|
+
#endif
|
|
115
|
+
|
|
116
|
+
#endif
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Summary: Definition of the callback interface
|
|
3
|
+
*
|
|
4
|
+
* Copy: See Copyright for the status of this software.
|
|
5
|
+
*
|
|
6
|
+
* Author: Trond Norbye
|
|
7
|
+
*/
|
|
8
|
+
#ifndef LIBMEMCACHEDPROTOCOL_CALLBACK_H
|
|
9
|
+
#define LIBMEMCACHEDPROTOCOL_CALLBACK_H
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Callback to send data back from a successful GET/GETQ/GETK/GETKQ command
|
|
13
|
+
*
|
|
14
|
+
* @param cookie Just pass along the cookie supplied in the callback
|
|
15
|
+
* @param key What to insert as key in the reply
|
|
16
|
+
* @param keylen The length of the key
|
|
17
|
+
* @param body What to store in the body of the package
|
|
18
|
+
* @param bodylen The number of bytes of the body
|
|
19
|
+
* @param flags The flags stored with the item
|
|
20
|
+
* @param cas The CAS value to insert into the response (should be 0
|
|
21
|
+
* if you don't care)
|
|
22
|
+
*/
|
|
23
|
+
typedef protocol_binary_response_status
|
|
24
|
+
(*memcached_binary_protocol_get_response_handler)(const void *cookie,
|
|
25
|
+
const void *key,
|
|
26
|
+
uint16_t keylen,
|
|
27
|
+
const void *body,
|
|
28
|
+
uint32_t bodylen,
|
|
29
|
+
uint32_t flags,
|
|
30
|
+
uint64_t cas);
|
|
31
|
+
/**
|
|
32
|
+
* Callback to send data back from a STAT command
|
|
33
|
+
*
|
|
34
|
+
* @param cookie Just pass along the cookie supplied in the callback
|
|
35
|
+
* @param key What to insert as key in the reply
|
|
36
|
+
* @param keylen The length of the key
|
|
37
|
+
* @param body What to store in the body of the package
|
|
38
|
+
* @param bodylen The number of bytes of the body
|
|
39
|
+
*/
|
|
40
|
+
typedef protocol_binary_response_status
|
|
41
|
+
(*memcached_binary_protocol_stat_response_handler)(const void *cookie,
|
|
42
|
+
const void *key,
|
|
43
|
+
uint16_t keylen,
|
|
44
|
+
const void *body,
|
|
45
|
+
uint32_t bodylen);
|
|
46
|
+
/**
|
|
47
|
+
* Callback to send data back from a VERSION command
|
|
48
|
+
*
|
|
49
|
+
* @param cookie Just pass along the cookie supplied in the callback
|
|
50
|
+
* @param text The version string
|
|
51
|
+
* @param length The number of bytes in the version string
|
|
52
|
+
*/
|
|
53
|
+
typedef protocol_binary_response_status
|
|
54
|
+
(*memcached_binary_protocol_version_response_handler)(const void *cookie,
|
|
55
|
+
const void *text,
|
|
56
|
+
uint32_t length);
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* In the low level interface you need to format the response
|
|
61
|
+
* packet yourself (giving you complete freedom :-)
|
|
62
|
+
*
|
|
63
|
+
* @param cookie Just pass along the cookie supplied in the callback
|
|
64
|
+
* @param request Pointer to the request packet you are sending a reply to
|
|
65
|
+
* @param response Pointer to the response packet to send
|
|
66
|
+
*
|
|
67
|
+
*/
|
|
68
|
+
typedef protocol_binary_response_status (*memcached_binary_protocol_raw_response_handler)(const void *cookie,
|
|
69
|
+
protocol_binary_request_header *request,
|
|
70
|
+
protocol_binary_response_header *response);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* In the low lever interface you have to do most of the work by
|
|
74
|
+
* yourself, but it also gives you a lot of freedom :-)
|
|
75
|
+
* @param cookie identification for this connection, just pass it along to
|
|
76
|
+
* the response handler
|
|
77
|
+
* @param header the command received over the wire. Never try to access
|
|
78
|
+
* <u>anything</u> outside the command.
|
|
79
|
+
* @param resonse_handler call this function to send data back to the client
|
|
80
|
+
*/
|
|
81
|
+
typedef protocol_binary_response_status (*memcached_binary_protocol_command_handler)(const void *cookie,
|
|
82
|
+
protocol_binary_request_header *header,
|
|
83
|
+
memcached_binary_protocol_raw_response_handler response_handler);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The raw interface to the packets is implemented in version 0. It contains
|
|
87
|
+
* just an array with command handlers. The inxed in the array is the
|
|
88
|
+
* com code.
|
|
89
|
+
*/
|
|
90
|
+
typedef struct {
|
|
91
|
+
memcached_binary_protocol_command_handler comcode[256];
|
|
92
|
+
} memcached_binary_protocol_callback_v0_st;
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The first version of the callback struct containing all of the
|
|
97
|
+
* documented commands in the initial release of the binary protocol
|
|
98
|
+
* (aka. memcached 1.4.0).
|
|
99
|
+
*
|
|
100
|
+
* You might miss the Q commands (addq etc) but the response function
|
|
101
|
+
* knows how to deal with them so you don't need to worry about that :-)
|
|
102
|
+
*/
|
|
103
|
+
typedef struct {
|
|
104
|
+
/**
|
|
105
|
+
* Add an item to the cache
|
|
106
|
+
* @param cookie id of the client receiving the command
|
|
107
|
+
* @param key the key to add
|
|
108
|
+
* @param len the length of the key
|
|
109
|
+
* @param val the value to store for the key (may be NIL)
|
|
110
|
+
* @param vallen the length of the data
|
|
111
|
+
* @param flags the flags to store with the key
|
|
112
|
+
* @param exptime the expiry time for the key-value pair
|
|
113
|
+
* @param cas the resulting cas for the add operation (if success)
|
|
114
|
+
*/
|
|
115
|
+
protocol_binary_response_status (*add)(const void *cookie,
|
|
116
|
+
const void *key,
|
|
117
|
+
uint16_t keylen,
|
|
118
|
+
const void* val,
|
|
119
|
+
uint32_t vallen,
|
|
120
|
+
uint32_t flags,
|
|
121
|
+
uint32_t exptime,
|
|
122
|
+
uint64_t *cas);
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Append data to an <b>existing</b> key-value pair.
|
|
126
|
+
*
|
|
127
|
+
* @param cookie id of the client receiving the command
|
|
128
|
+
* @param key the key to add data to
|
|
129
|
+
* @param len the length of the key
|
|
130
|
+
* @param val the value to append to the value
|
|
131
|
+
* @param vallen the length of the data
|
|
132
|
+
* @param cas the CAS in the request
|
|
133
|
+
* @param result_cas the resulting cas for the append operation
|
|
134
|
+
*
|
|
135
|
+
*/
|
|
136
|
+
protocol_binary_response_status (*append)(const void *cookie,
|
|
137
|
+
const void *key,
|
|
138
|
+
uint16_t keylen,
|
|
139
|
+
const void* val,
|
|
140
|
+
uint32_t vallen,
|
|
141
|
+
uint64_t cas,
|
|
142
|
+
uint64_t *result_cas);
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Decrement the value for a key
|
|
146
|
+
*
|
|
147
|
+
* @param cookie id of the client receiving the command
|
|
148
|
+
* @param key the key to decrement the value for
|
|
149
|
+
* @param len the length of the key
|
|
150
|
+
* @param delta the amount to decrement
|
|
151
|
+
* @param initial initial value to store (if the key doesn't exist)
|
|
152
|
+
* @param expiration expiration time for the object (if the key doesn't exist)
|
|
153
|
+
* @param cas the CAS in the request
|
|
154
|
+
* @param result the result from the decrement
|
|
155
|
+
* @param result_cas the cas of the item
|
|
156
|
+
*
|
|
157
|
+
*/
|
|
158
|
+
protocol_binary_response_status (*decrement)(const void *cookie,
|
|
159
|
+
const void *key,
|
|
160
|
+
uint16_t keylen,
|
|
161
|
+
uint64_t delta,
|
|
162
|
+
uint64_t initial,
|
|
163
|
+
uint32_t expiration,
|
|
164
|
+
uint64_t *result,
|
|
165
|
+
uint64_t *result_cas);
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Delete an existing key
|
|
169
|
+
*
|
|
170
|
+
* @param cookie id of the client receiving the command
|
|
171
|
+
* @param key the key to delete
|
|
172
|
+
* @param len the length of the key
|
|
173
|
+
* @param cas the CAS in the request
|
|
174
|
+
*/
|
|
175
|
+
protocol_binary_response_status (*delete)(const void *cookie,
|
|
176
|
+
const void *key,
|
|
177
|
+
uint16_t keylen,
|
|
178
|
+
uint64_t cas);
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Flush the cache
|
|
183
|
+
*
|
|
184
|
+
* @param cookie id of the client receiving the command
|
|
185
|
+
* @param when when the cache should be flushed (0 == immediately)
|
|
186
|
+
*/
|
|
187
|
+
protocol_binary_response_status (*flush)(const void *cookie,
|
|
188
|
+
uint32_t when);
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Get a key-value pair
|
|
194
|
+
*
|
|
195
|
+
* @param cookie id of the client receiving the command
|
|
196
|
+
* @param key the key to get
|
|
197
|
+
* @param len the length of the key
|
|
198
|
+
* @param response_handler to send the result back to the client
|
|
199
|
+
*/
|
|
200
|
+
protocol_binary_response_status (*get)(const void *cookie,
|
|
201
|
+
const void *key,
|
|
202
|
+
uint16_t keylen,
|
|
203
|
+
memcached_binary_protocol_get_response_handler response_handler);
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Increment the value for a key
|
|
207
|
+
*
|
|
208
|
+
* @param cookie id of the client receiving the command
|
|
209
|
+
* @param key the key to increment the value on
|
|
210
|
+
* @param len the length of the key
|
|
211
|
+
* @param delta the amount to increment
|
|
212
|
+
* @param initial initial value to store (if the key doesn't exist)
|
|
213
|
+
* @param expiration expiration time for the object (if the key doesn't exist)
|
|
214
|
+
* @param cas the CAS in the request
|
|
215
|
+
* @param result the result from the decrement
|
|
216
|
+
* @param result_cas the cas of the item
|
|
217
|
+
*
|
|
218
|
+
*/
|
|
219
|
+
protocol_binary_response_status (*increment)(const void *cookie,
|
|
220
|
+
const void *key,
|
|
221
|
+
uint16_t keylen,
|
|
222
|
+
uint64_t delta,
|
|
223
|
+
uint64_t initial,
|
|
224
|
+
uint32_t expiration,
|
|
225
|
+
uint64_t *result,
|
|
226
|
+
uint64_t *result_cas);
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* The noop command was received. This is just a notification callback (the
|
|
230
|
+
* response is automatically created).
|
|
231
|
+
*
|
|
232
|
+
* @param cookie id of the client receiving the command
|
|
233
|
+
*/
|
|
234
|
+
protocol_binary_response_status (*noop)(const void *cookie);
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Prepend data to an <b>existing</b> key-value pair.
|
|
238
|
+
*
|
|
239
|
+
* @param cookie id of the client receiving the command
|
|
240
|
+
* @param key the key to prepend data to
|
|
241
|
+
* @param len the length of the key
|
|
242
|
+
* @param val the value to prepend to the value
|
|
243
|
+
* @param vallen the length of the data
|
|
244
|
+
* @param cas the CAS in the request
|
|
245
|
+
* @param result-cas the cas id of the item
|
|
246
|
+
*
|
|
247
|
+
*/
|
|
248
|
+
protocol_binary_response_status (*prepend)(const void *cookie,
|
|
249
|
+
const void *key,
|
|
250
|
+
uint16_t keylen,
|
|
251
|
+
const void* val,
|
|
252
|
+
uint32_t vallen,
|
|
253
|
+
uint64_t cas,
|
|
254
|
+
uint64_t *result_cas);
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* The quit command was received. This is just a notification callback (the
|
|
258
|
+
* response is automatically created).
|
|
259
|
+
*
|
|
260
|
+
* @param cookie id of the client receiving the command
|
|
261
|
+
*/
|
|
262
|
+
protocol_binary_response_status (*quit)(const void *cookie);
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Replace an <b>existing</b> item to the cache
|
|
267
|
+
*
|
|
268
|
+
* @param cookie id of the client receiving the command
|
|
269
|
+
* @param key the key to replace the content for
|
|
270
|
+
* @param len the length of the key
|
|
271
|
+
* @param val the value to store for the key (may be NIL)
|
|
272
|
+
* @param vallen the length of the data
|
|
273
|
+
* @param flags the flags to store with the key
|
|
274
|
+
* @param exptime the expiry time for the key-value pair
|
|
275
|
+
* @param cas the cas id in the request
|
|
276
|
+
* @param result_cas the cas id of the item
|
|
277
|
+
*/
|
|
278
|
+
protocol_binary_response_status (*replace)(const void *cookie,
|
|
279
|
+
const void *key,
|
|
280
|
+
uint16_t keylen,
|
|
281
|
+
const void* val,
|
|
282
|
+
uint32_t vallen,
|
|
283
|
+
uint32_t flags,
|
|
284
|
+
uint32_t exptime,
|
|
285
|
+
uint64_t cas,
|
|
286
|
+
uint64_t *result_cas);
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Set a key-value pair in the cache
|
|
291
|
+
*
|
|
292
|
+
* @param cookie id of the client receiving the command
|
|
293
|
+
* @param key the key to insert
|
|
294
|
+
* @param len the length of the key
|
|
295
|
+
* @param val the value to store for the key (may be NIL)
|
|
296
|
+
* @param vallen the length of the data
|
|
297
|
+
* @param flags the flags to store with the key
|
|
298
|
+
* @param exptime the expiry time for the key-value pair
|
|
299
|
+
* @param cas the cas id in the request
|
|
300
|
+
* @param result_cas the cas id of the new item
|
|
301
|
+
*/
|
|
302
|
+
protocol_binary_response_status (*set)(const void *cookie,
|
|
303
|
+
const void *key,
|
|
304
|
+
uint16_t keylen,
|
|
305
|
+
const void* val,
|
|
306
|
+
uint32_t vallen,
|
|
307
|
+
uint32_t flags,
|
|
308
|
+
uint32_t exptime,
|
|
309
|
+
uint64_t cas,
|
|
310
|
+
uint64_t *result_cas);
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Get status information
|
|
314
|
+
*
|
|
315
|
+
* @param cookie id of the client receiving the command
|
|
316
|
+
* @param key the key to get status for (or NIL to request all status).
|
|
317
|
+
* Remember to insert the terminating packet if multiple
|
|
318
|
+
* packets should be returned.
|
|
319
|
+
* @param keylen the length of the key
|
|
320
|
+
* @param response_handler to send the result back to the client, but
|
|
321
|
+
* don't send reply on success!
|
|
322
|
+
*
|
|
323
|
+
*/
|
|
324
|
+
protocol_binary_response_status (*stat)(const void *cookie,
|
|
325
|
+
const void *key,
|
|
326
|
+
uint16_t keylen,
|
|
327
|
+
memcached_binary_protocol_stat_response_handler response_handler);
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Get the version information
|
|
331
|
+
*
|
|
332
|
+
* @param cookie id of the client receiving the command
|
|
333
|
+
* @param response_handler to send the result back to the client, but
|
|
334
|
+
* don't send reply on success!
|
|
335
|
+
*
|
|
336
|
+
*/
|
|
337
|
+
protocol_binary_response_status (*version)(const void *cookie,
|
|
338
|
+
memcached_binary_protocol_version_response_handler response_handler);
|
|
339
|
+
} memcached_binary_protocol_callback_v1_st;
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* The version numbers for the different callback structures.
|
|
344
|
+
*/
|
|
345
|
+
typedef enum {
|
|
346
|
+
/** Version 0 is a lowlevel interface that tries to maximize your freedom */
|
|
347
|
+
MEMCACHED_PROTOCOL_HANDLER_V0= 0,
|
|
348
|
+
/**
|
|
349
|
+
* Version 1 abstracts more of the protocol details, and let you work at
|
|
350
|
+
* a logical level
|
|
351
|
+
*/
|
|
352
|
+
MEMCACHED_PROTOCOL_HANDLER_V1= 1,
|
|
353
|
+
} memcached_protocol_interface_version_t;
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Definition of the protocol callback structure.
|
|
357
|
+
*/
|
|
358
|
+
typedef struct {
|
|
359
|
+
/**
|
|
360
|
+
* The interface version you provide callbacks for.
|
|
361
|
+
*/
|
|
362
|
+
memcached_protocol_interface_version_t interface_version;
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Callback fired just before the command will be executed.
|
|
366
|
+
*
|
|
367
|
+
* @param cookie id of the client receiving the command
|
|
368
|
+
* @param header the command header as received on the wire. If you look
|
|
369
|
+
* at the content you <b>must</b> ensure that you don't
|
|
370
|
+
* try to access beyond the end of the message.
|
|
371
|
+
*/
|
|
372
|
+
void (*pre_execute)(const void *cookie,
|
|
373
|
+
protocol_binary_request_header *header);
|
|
374
|
+
/**
|
|
375
|
+
* Callback fired just after the command was exected (please note
|
|
376
|
+
* that the data transfer back to the client is not finished at this
|
|
377
|
+
* time).
|
|
378
|
+
*
|
|
379
|
+
* @param cookie id of the client receiving the command
|
|
380
|
+
* @param header the command header as received on the wire. If you look
|
|
381
|
+
* at the content you <b>must</b> ensure that you don't
|
|
382
|
+
* try to access beyond the end of the message.
|
|
383
|
+
*/
|
|
384
|
+
void (*post_execute)(const void *cookie,
|
|
385
|
+
protocol_binary_request_header *header);
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Callback fired if no specialized callback is registered for this
|
|
389
|
+
* specific command code.
|
|
390
|
+
*
|
|
391
|
+
* @param cookie id of the client receiving the command
|
|
392
|
+
* @param header the command header as received on the wire. You <b>must</b>
|
|
393
|
+
* ensure that you don't try to access beyond the end of the
|
|
394
|
+
* message.
|
|
395
|
+
* @param response_handler The response handler to send data back.
|
|
396
|
+
*/
|
|
397
|
+
protocol_binary_response_status (*unknown)(const void *cookie,
|
|
398
|
+
protocol_binary_request_header *header,
|
|
399
|
+
memcached_binary_protocol_raw_response_handler response_handler);
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* The different interface levels we support. A pointer is used so the
|
|
403
|
+
* size of the structure is fixed. You must ensure that the memory area
|
|
404
|
+
* passed as the pointer is valid as long as you use the protocol handler.
|
|
405
|
+
*/
|
|
406
|
+
union {
|
|
407
|
+
memcached_binary_protocol_callback_v0_st v0;
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* The first version of the callback struct containing all of the
|
|
411
|
+
* documented commands in the initial release of the binary protocol
|
|
412
|
+
* (aka. memcached 1.4.0).
|
|
413
|
+
*/
|
|
414
|
+
memcached_binary_protocol_callback_v1_st v1;
|
|
415
|
+
} interface;
|
|
416
|
+
} memcached_binary_protocol_callback_st;
|
|
417
|
+
|
|
418
|
+
#endif
|