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,110 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
|
|
3
|
+
static void calc_largest_consumption(memcached_analysis_st *result,
|
|
4
|
+
const uint32_t server_num,
|
|
5
|
+
const uint64_t nbytes)
|
|
6
|
+
{
|
|
7
|
+
if (result->most_used_bytes < nbytes)
|
|
8
|
+
{
|
|
9
|
+
result->most_used_bytes= nbytes;
|
|
10
|
+
result->most_consumed_server= server_num;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static void calc_oldest_node(memcached_analysis_st *result,
|
|
15
|
+
const uint32_t server_num,
|
|
16
|
+
const uint32_t uptime)
|
|
17
|
+
{
|
|
18
|
+
if (result->longest_uptime < uptime)
|
|
19
|
+
{
|
|
20
|
+
result->longest_uptime= uptime;
|
|
21
|
+
result->oldest_server= server_num;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
static void calc_least_free_node(memcached_analysis_st *result,
|
|
26
|
+
const uint32_t server_num,
|
|
27
|
+
const uint64_t max_allowed_bytes,
|
|
28
|
+
const uint64_t used_bytes)
|
|
29
|
+
{
|
|
30
|
+
uint64_t remaining_bytes= max_allowed_bytes - used_bytes;
|
|
31
|
+
|
|
32
|
+
if (result->least_remaining_bytes == 0 ||
|
|
33
|
+
remaining_bytes < result->least_remaining_bytes)
|
|
34
|
+
{
|
|
35
|
+
result->least_remaining_bytes= remaining_bytes;
|
|
36
|
+
result->least_free_server= server_num;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
static void calc_average_item_size(memcached_analysis_st *result,
|
|
41
|
+
const uint64_t total_items,
|
|
42
|
+
const uint64_t total_bytes)
|
|
43
|
+
{
|
|
44
|
+
if (total_items > 0 && total_bytes > 0)
|
|
45
|
+
result->average_item_size= (uint32_t) (total_bytes / total_items);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static void calc_hit_ratio(memcached_analysis_st *result,
|
|
49
|
+
const uint64_t total_get_hits,
|
|
50
|
+
const uint64_t total_get_cmds)
|
|
51
|
+
{
|
|
52
|
+
if (total_get_hits == 0 || total_get_cmds == 0)
|
|
53
|
+
{
|
|
54
|
+
result->pool_hit_ratio= 0;
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
double temp= double(total_get_hits) / total_get_cmds;
|
|
59
|
+
result->pool_hit_ratio= temp * 100;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
memcached_analysis_st *memcached_analyze(memcached_st *memc,
|
|
63
|
+
memcached_stat_st *memc_stat,
|
|
64
|
+
memcached_return_t *error)
|
|
65
|
+
{
|
|
66
|
+
uint64_t total_items= 0, total_bytes= 0;
|
|
67
|
+
uint64_t total_get_cmds= 0, total_get_hits= 0;
|
|
68
|
+
uint32_t server_count, x;
|
|
69
|
+
memcached_analysis_st *result;
|
|
70
|
+
|
|
71
|
+
if (not memc or not memc_stat)
|
|
72
|
+
return NULL;
|
|
73
|
+
|
|
74
|
+
*error= MEMCACHED_SUCCESS;
|
|
75
|
+
server_count= memcached_server_count(memc);
|
|
76
|
+
result= (memcached_analysis_st*)calloc(memcached_server_count(memc),
|
|
77
|
+
sizeof(memcached_analysis_st));
|
|
78
|
+
|
|
79
|
+
if (not result)
|
|
80
|
+
{
|
|
81
|
+
*error= MEMCACHED_MEMORY_ALLOCATION_FAILURE;
|
|
82
|
+
return NULL;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
result->root= memc;
|
|
86
|
+
|
|
87
|
+
for (x= 0; x < server_count; x++)
|
|
88
|
+
{
|
|
89
|
+
calc_largest_consumption(result, x, memc_stat[x].bytes);
|
|
90
|
+
calc_oldest_node(result, x, memc_stat[x].uptime);
|
|
91
|
+
calc_least_free_node(result, x,
|
|
92
|
+
memc_stat[x].limit_maxbytes,
|
|
93
|
+
memc_stat[x].bytes);
|
|
94
|
+
|
|
95
|
+
total_get_hits+= memc_stat[x].get_hits;
|
|
96
|
+
total_get_cmds+= memc_stat[x].cmd_get;
|
|
97
|
+
total_items+= memc_stat[x].curr_items;
|
|
98
|
+
total_bytes+= memc_stat[x].bytes;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
calc_average_item_size(result, total_items, total_bytes);
|
|
102
|
+
calc_hit_ratio(result, total_get_hits, total_get_cmds);
|
|
103
|
+
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
void memcached_analyze_free(memcached_analysis_st *ptr)
|
|
108
|
+
{
|
|
109
|
+
free(ptr);
|
|
110
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
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_analysis_st {
|
|
41
|
+
memcached_st *root;
|
|
42
|
+
uint32_t average_item_size;
|
|
43
|
+
uint32_t longest_uptime;
|
|
44
|
+
uint32_t least_free_server;
|
|
45
|
+
uint32_t most_consumed_server;
|
|
46
|
+
uint32_t oldest_server;
|
|
47
|
+
double pool_hit_ratio;
|
|
48
|
+
uint64_t most_used_bytes;
|
|
49
|
+
uint64_t least_remaining_bytes;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
#ifdef __cplusplus
|
|
53
|
+
extern "C" {
|
|
54
|
+
#endif
|
|
55
|
+
|
|
56
|
+
LIBMEMCACHED_API
|
|
57
|
+
memcached_analysis_st *memcached_analyze(memcached_st *memc,
|
|
58
|
+
memcached_stat_st *memc_stat,
|
|
59
|
+
memcached_return_t *error);
|
|
60
|
+
|
|
61
|
+
LIBMEMCACHED_API
|
|
62
|
+
void memcached_analyze_free(memcached_analysis_st *);
|
|
63
|
+
|
|
64
|
+
#ifdef __cplusplus
|
|
65
|
+
}
|
|
66
|
+
#endif
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
|
|
2
|
+
*
|
|
3
|
+
* LibMemcached
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2011 Data Differential, http://datadifferential.com/
|
|
6
|
+
* 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
|
+
#include <libmemcached/common.h>
|
|
39
|
+
#include <assert.h>
|
|
40
|
+
#include <iso646.h>
|
|
41
|
+
|
|
42
|
+
struct memcached_array_st
|
|
43
|
+
{
|
|
44
|
+
struct memcached_st *root;
|
|
45
|
+
size_t size;
|
|
46
|
+
char c_str[];
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
memcached_array_st *memcached_array_clone(struct memcached_st *memc, const memcached_array_st *original)
|
|
51
|
+
{
|
|
52
|
+
if (not original)
|
|
53
|
+
return NULL;
|
|
54
|
+
|
|
55
|
+
return memcached_strcpy(memc, original->c_str, original->size);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
memcached_array_st *memcached_strcpy(struct memcached_st *memc, const char *str, size_t str_length)
|
|
59
|
+
{
|
|
60
|
+
assert(memc);
|
|
61
|
+
assert(str);
|
|
62
|
+
assert(str_length);
|
|
63
|
+
|
|
64
|
+
memcached_array_st *array= (struct memcached_array_st *)libmemcached_malloc(memc, sizeof(struct memcached_array_st) +str_length +1);
|
|
65
|
+
|
|
66
|
+
if (not array)
|
|
67
|
+
return NULL;
|
|
68
|
+
|
|
69
|
+
array->root= memc;
|
|
70
|
+
array->size= str_length; // We don't count the NULL ending
|
|
71
|
+
memcpy(array->c_str, str, str_length);
|
|
72
|
+
array->c_str[str_length]= 0;
|
|
73
|
+
|
|
74
|
+
return array;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
bool memcached_array_is_null(memcached_array_st *array)
|
|
78
|
+
{
|
|
79
|
+
assert(array);
|
|
80
|
+
assert(array->root);
|
|
81
|
+
|
|
82
|
+
if (not array)
|
|
83
|
+
return false;
|
|
84
|
+
|
|
85
|
+
if (array->size and array->c_str)
|
|
86
|
+
return false;
|
|
87
|
+
|
|
88
|
+
assert(not array->size and not array->c_str);
|
|
89
|
+
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
memcached_string_t memcached_array_to_string(memcached_array_st *array)
|
|
94
|
+
{
|
|
95
|
+
assert(array);
|
|
96
|
+
assert(array->c_str);
|
|
97
|
+
assert(array->size);
|
|
98
|
+
memcached_string_t tmp;
|
|
99
|
+
tmp.c_str= array->c_str;
|
|
100
|
+
tmp.size= array->size;
|
|
101
|
+
|
|
102
|
+
return tmp;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
void memcached_array_free(memcached_array_st *array)
|
|
106
|
+
{
|
|
107
|
+
if (not array)
|
|
108
|
+
return;
|
|
109
|
+
|
|
110
|
+
WATCHPOINT_ASSERT(array->root);
|
|
111
|
+
libmemcached_free(array->root, array);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
size_t memcached_array_size(memcached_array_st *array)
|
|
115
|
+
{
|
|
116
|
+
if (not array)
|
|
117
|
+
return 0;
|
|
118
|
+
|
|
119
|
+
return array->size;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const char *memcached_array_string(memcached_array_st *array)
|
|
123
|
+
{
|
|
124
|
+
if (not array)
|
|
125
|
+
return NULL;
|
|
126
|
+
|
|
127
|
+
return array->c_str;
|
|
128
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
|
|
2
|
+
*
|
|
3
|
+
* LibMemcached
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2011 Data Differential, http://datadifferential.com/
|
|
6
|
+
* 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
|
+
#ifdef __cplusplus
|
|
41
|
+
extern "C" {
|
|
42
|
+
#endif
|
|
43
|
+
|
|
44
|
+
LIBMEMCACHED_LOCAL
|
|
45
|
+
memcached_array_st *memcached_array_clone(memcached_st *memc, const memcached_array_st *original);
|
|
46
|
+
|
|
47
|
+
LIBMEMCACHED_LOCAL
|
|
48
|
+
memcached_array_st *memcached_strcpy(memcached_st *memc, const char *str, size_t str_length);
|
|
49
|
+
|
|
50
|
+
LIBMEMCACHED_LOCAL
|
|
51
|
+
void memcached_array_free(memcached_array_st *array);
|
|
52
|
+
|
|
53
|
+
LIBMEMCACHED_LOCAL
|
|
54
|
+
size_t memcached_array_size(memcached_array_st *array);
|
|
55
|
+
|
|
56
|
+
LIBMEMCACHED_LOCAL
|
|
57
|
+
const char *memcached_array_string(memcached_array_st *array);
|
|
58
|
+
|
|
59
|
+
LIBMEMCACHED_LOCAL
|
|
60
|
+
memcached_string_t memcached_array_to_string(memcached_array_st *array);
|
|
61
|
+
|
|
62
|
+
LIBMEMCACHED_LOCAL
|
|
63
|
+
bool memcached_array_is_null(memcached_array_st *array);
|
|
64
|
+
|
|
65
|
+
#ifdef __cplusplus
|
|
66
|
+
} // extern "C"
|
|
67
|
+
#endif
|
|
68
|
+
|
|
69
|
+
#ifdef __cplusplus
|
|
70
|
+
#define memcached_print_array(X) static_cast<int>(memcached_array_size(X)), memcached_array_string(X)
|
|
71
|
+
#define memcached_param_array(X) memcached_array_string(X), memcached_array_size(X)
|
|
72
|
+
#else
|
|
73
|
+
#define memcached_print_array(X) (int)memcached_array_size((X)), memcached_array_string((X))
|
|
74
|
+
#define memcached_param_array(X) memcached_array_string(X), memcached_array_size(X)
|
|
75
|
+
#endif
|
|
@@ -0,0 +1,383 @@
|
|
|
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
|
+
#include <libmemcached/common.h>
|
|
39
|
+
|
|
40
|
+
static memcached_return_t text_incr_decr(memcached_st *ptr,
|
|
41
|
+
const char *verb,
|
|
42
|
+
const char *group_key, size_t group_key_length,
|
|
43
|
+
const char *key, size_t key_length,
|
|
44
|
+
uint64_t offset,
|
|
45
|
+
uint64_t *value)
|
|
46
|
+
{
|
|
47
|
+
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
|
|
48
|
+
uint32_t server_key;
|
|
49
|
+
memcached_server_write_instance_st instance;
|
|
50
|
+
bool no_reply= ptr->flags.no_reply;
|
|
51
|
+
|
|
52
|
+
if (ptr->flags.verify_key && (memcached_key_test((const char **)&key, &key_length, 1) == MEMCACHED_BAD_KEY_PROVIDED))
|
|
53
|
+
return memcached_set_error(*ptr, MEMCACHED_BAD_KEY_PROVIDED, MEMCACHED_AT);
|
|
54
|
+
|
|
55
|
+
server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length);
|
|
56
|
+
instance= memcached_server_instance_fetch(ptr, server_key);
|
|
57
|
+
|
|
58
|
+
int send_length;
|
|
59
|
+
send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
|
|
60
|
+
"%s %.*s%.*s %" PRIu64 "%s\r\n", verb,
|
|
61
|
+
memcached_print_array(ptr->prefix_key),
|
|
62
|
+
(int)key_length, key,
|
|
63
|
+
offset, no_reply ? " noreply" : "");
|
|
64
|
+
if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE || send_length < 0)
|
|
65
|
+
{
|
|
66
|
+
return memcached_set_error(*ptr, MEMCACHED_MEMORY_ALLOCATION_FAILURE, MEMCACHED_AT,
|
|
67
|
+
memcached_literal_param("snprintf(MEMCACHED_DEFAULT_COMMAND_SIZE)"));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
memcached_return_t rc= memcached_do(instance, buffer, (size_t)send_length, true);
|
|
71
|
+
if (no_reply or memcached_failed(rc))
|
|
72
|
+
return rc;
|
|
73
|
+
|
|
74
|
+
rc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
So why recheck responce? Because the protocol is brain dead :)
|
|
78
|
+
The number returned might end up equaling one of the string
|
|
79
|
+
values. Less chance of a mistake with strncmp() so we will
|
|
80
|
+
use it. We still called memcached_response() though since it
|
|
81
|
+
worked its magic for non-blocking IO.
|
|
82
|
+
*/
|
|
83
|
+
if (not strncmp(buffer, memcached_literal_param("ERROR\r\n")))
|
|
84
|
+
{
|
|
85
|
+
*value= 0;
|
|
86
|
+
rc= MEMCACHED_PROTOCOL_ERROR;
|
|
87
|
+
}
|
|
88
|
+
else if (not strncmp(buffer, memcached_literal_param("CLIENT_ERROR\r\n")))
|
|
89
|
+
{
|
|
90
|
+
*value= 0;
|
|
91
|
+
rc= MEMCACHED_PROTOCOL_ERROR;
|
|
92
|
+
}
|
|
93
|
+
else if (not strncmp(buffer, memcached_literal_param("NOT_FOUND\r\n")))
|
|
94
|
+
{
|
|
95
|
+
*value= 0;
|
|
96
|
+
rc= MEMCACHED_NOTFOUND;
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
{
|
|
100
|
+
*value= strtoull(buffer, (char **)NULL, 10);
|
|
101
|
+
rc= MEMCACHED_SUCCESS;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return memcached_set_error(*instance, rc, MEMCACHED_AT);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
static memcached_return_t binary_incr_decr(memcached_st *ptr, uint8_t cmd,
|
|
108
|
+
const char *group_key, size_t group_key_length,
|
|
109
|
+
const char *key, size_t key_length,
|
|
110
|
+
uint64_t offset, uint64_t initial,
|
|
111
|
+
uint32_t expiration,
|
|
112
|
+
uint64_t *value)
|
|
113
|
+
{
|
|
114
|
+
uint32_t server_key;
|
|
115
|
+
memcached_server_write_instance_st instance;
|
|
116
|
+
bool no_reply= ptr->flags.no_reply;
|
|
117
|
+
|
|
118
|
+
if (memcached_server_count(ptr) == 0)
|
|
119
|
+
return memcached_set_error(*ptr, MEMCACHED_NO_SERVERS, MEMCACHED_AT);
|
|
120
|
+
|
|
121
|
+
server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length);
|
|
122
|
+
instance= memcached_server_instance_fetch(ptr, server_key);
|
|
123
|
+
|
|
124
|
+
if (no_reply)
|
|
125
|
+
{
|
|
126
|
+
if(cmd == PROTOCOL_BINARY_CMD_DECREMENT)
|
|
127
|
+
cmd= PROTOCOL_BINARY_CMD_DECREMENTQ;
|
|
128
|
+
|
|
129
|
+
if(cmd == PROTOCOL_BINARY_CMD_INCREMENT)
|
|
130
|
+
cmd= PROTOCOL_BINARY_CMD_INCREMENTQ;
|
|
131
|
+
}
|
|
132
|
+
protocol_binary_request_incr request= {}; // = {.bytes= {0}};
|
|
133
|
+
|
|
134
|
+
request.message.header.request.magic= PROTOCOL_BINARY_REQ;
|
|
135
|
+
request.message.header.request.opcode= cmd;
|
|
136
|
+
request.message.header.request.keylen= htons((uint16_t)(key_length + memcached_array_size(ptr->prefix_key)));
|
|
137
|
+
request.message.header.request.extlen= 20;
|
|
138
|
+
request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES;
|
|
139
|
+
request.message.header.request.bodylen= htonl((uint32_t)(key_length + memcached_array_size(ptr->prefix_key) +request.message.header.request.extlen));
|
|
140
|
+
request.message.body.delta= memcached_htonll(offset);
|
|
141
|
+
request.message.body.initial= memcached_htonll(initial);
|
|
142
|
+
request.message.body.expiration= htonl((uint32_t) expiration);
|
|
143
|
+
|
|
144
|
+
struct libmemcached_io_vector_st vector[]=
|
|
145
|
+
{
|
|
146
|
+
{ sizeof(request.bytes), request.bytes },
|
|
147
|
+
{ memcached_array_size(ptr->prefix_key), memcached_array_string(ptr->prefix_key) },
|
|
148
|
+
{ key_length, key }
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
memcached_return_t rc;
|
|
152
|
+
if ((rc= memcached_vdo(instance, vector, 3, true)) != MEMCACHED_SUCCESS)
|
|
153
|
+
{
|
|
154
|
+
memcached_io_reset(instance);
|
|
155
|
+
return (rc == MEMCACHED_SUCCESS) ? MEMCACHED_WRITE_FAILURE : rc;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (no_reply)
|
|
159
|
+
return MEMCACHED_SUCCESS;
|
|
160
|
+
|
|
161
|
+
return memcached_response(instance, (char*)value, sizeof(*value), NULL);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
memcached_return_t memcached_increment(memcached_st *ptr,
|
|
165
|
+
const char *key, size_t key_length,
|
|
166
|
+
uint32_t offset,
|
|
167
|
+
uint64_t *value)
|
|
168
|
+
{
|
|
169
|
+
uint64_t local_value;
|
|
170
|
+
if (! value)
|
|
171
|
+
value= &local_value;
|
|
172
|
+
|
|
173
|
+
return memcached_increment_by_key(ptr, key, key_length, key, key_length, offset, value);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
memcached_return_t memcached_decrement(memcached_st *ptr,
|
|
177
|
+
const char *key, size_t key_length,
|
|
178
|
+
uint32_t offset,
|
|
179
|
+
uint64_t *value)
|
|
180
|
+
{
|
|
181
|
+
uint64_t local_value;
|
|
182
|
+
if (! value)
|
|
183
|
+
value= &local_value;
|
|
184
|
+
|
|
185
|
+
return memcached_decrement_by_key(ptr, key, key_length, key, key_length, offset, value);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
memcached_return_t memcached_increment_by_key(memcached_st *ptr,
|
|
189
|
+
const char *group_key, size_t group_key_length,
|
|
190
|
+
const char *key, size_t key_length,
|
|
191
|
+
uint64_t offset,
|
|
192
|
+
uint64_t *value)
|
|
193
|
+
{
|
|
194
|
+
memcached_return_t rc;
|
|
195
|
+
uint64_t local_value;
|
|
196
|
+
if (not value)
|
|
197
|
+
value= &local_value;
|
|
198
|
+
|
|
199
|
+
if (memcached_failed(rc= initialize_query(ptr)))
|
|
200
|
+
{
|
|
201
|
+
return rc;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (memcached_failed(rc= memcached_validate_key_length(key_length, ptr->flags.binary_protocol)))
|
|
205
|
+
{
|
|
206
|
+
return rc;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
LIBMEMCACHED_MEMCACHED_INCREMENT_START();
|
|
210
|
+
if (ptr->flags.binary_protocol)
|
|
211
|
+
{
|
|
212
|
+
rc= binary_incr_decr(ptr, PROTOCOL_BINARY_CMD_INCREMENT,
|
|
213
|
+
group_key, group_key_length, key, key_length,
|
|
214
|
+
(uint64_t)offset, 0, MEMCACHED_EXPIRATION_NOT_ADD,
|
|
215
|
+
value);
|
|
216
|
+
}
|
|
217
|
+
else
|
|
218
|
+
{
|
|
219
|
+
rc= text_incr_decr(ptr, "incr", group_key, group_key_length, key, key_length, offset, value);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
LIBMEMCACHED_MEMCACHED_INCREMENT_END();
|
|
223
|
+
|
|
224
|
+
return rc;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
memcached_return_t memcached_decrement_by_key(memcached_st *ptr,
|
|
228
|
+
const char *group_key, size_t group_key_length,
|
|
229
|
+
const char *key, size_t key_length,
|
|
230
|
+
uint64_t offset,
|
|
231
|
+
uint64_t *value)
|
|
232
|
+
{
|
|
233
|
+
uint64_t local_value;
|
|
234
|
+
if (not value)
|
|
235
|
+
value= &local_value;
|
|
236
|
+
|
|
237
|
+
memcached_return_t rc;
|
|
238
|
+
if (memcached_failed(rc= initialize_query(ptr)))
|
|
239
|
+
{
|
|
240
|
+
return rc;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (memcached_failed(rc= memcached_validate_key_length(key_length, ptr->flags.binary_protocol)))
|
|
244
|
+
{
|
|
245
|
+
return rc;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
LIBMEMCACHED_MEMCACHED_DECREMENT_START();
|
|
250
|
+
if (ptr->flags.binary_protocol)
|
|
251
|
+
{
|
|
252
|
+
rc= binary_incr_decr(ptr, PROTOCOL_BINARY_CMD_DECREMENT,
|
|
253
|
+
group_key, group_key_length, key, key_length,
|
|
254
|
+
(uint64_t)offset, 0, MEMCACHED_EXPIRATION_NOT_ADD,
|
|
255
|
+
value);
|
|
256
|
+
}
|
|
257
|
+
else
|
|
258
|
+
{
|
|
259
|
+
rc= text_incr_decr(ptr, "decr", group_key, group_key_length, key, key_length, offset, value);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
LIBMEMCACHED_MEMCACHED_DECREMENT_END();
|
|
263
|
+
|
|
264
|
+
return rc;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
memcached_return_t memcached_increment_with_initial(memcached_st *ptr,
|
|
268
|
+
const char *key,
|
|
269
|
+
size_t key_length,
|
|
270
|
+
uint64_t offset,
|
|
271
|
+
uint64_t initial,
|
|
272
|
+
time_t expiration,
|
|
273
|
+
uint64_t *value)
|
|
274
|
+
{
|
|
275
|
+
uint64_t local_value;
|
|
276
|
+
if (! value)
|
|
277
|
+
value= &local_value;
|
|
278
|
+
|
|
279
|
+
return memcached_increment_with_initial_by_key(ptr, key, key_length,
|
|
280
|
+
key, key_length,
|
|
281
|
+
offset, initial, expiration, value);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
memcached_return_t memcached_increment_with_initial_by_key(memcached_st *ptr,
|
|
285
|
+
const char *group_key,
|
|
286
|
+
size_t group_key_length,
|
|
287
|
+
const char *key,
|
|
288
|
+
size_t key_length,
|
|
289
|
+
uint64_t offset,
|
|
290
|
+
uint64_t initial,
|
|
291
|
+
time_t expiration,
|
|
292
|
+
uint64_t *value)
|
|
293
|
+
{
|
|
294
|
+
uint64_t local_value;
|
|
295
|
+
if (not value)
|
|
296
|
+
value= &local_value;
|
|
297
|
+
|
|
298
|
+
memcached_return_t rc;
|
|
299
|
+
if (memcached_failed(rc= initialize_query(ptr)))
|
|
300
|
+
{
|
|
301
|
+
return rc;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (memcached_failed(rc= memcached_validate_key_length(key_length, ptr->flags.binary_protocol)))
|
|
305
|
+
{
|
|
306
|
+
return rc;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_START();
|
|
310
|
+
if (ptr->flags.binary_protocol)
|
|
311
|
+
rc= binary_incr_decr(ptr, PROTOCOL_BINARY_CMD_INCREMENT,
|
|
312
|
+
group_key, group_key_length, key, key_length,
|
|
313
|
+
offset, initial, (uint32_t)expiration,
|
|
314
|
+
value);
|
|
315
|
+
else
|
|
316
|
+
rc= MEMCACHED_PROTOCOL_ERROR;
|
|
317
|
+
|
|
318
|
+
LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_END();
|
|
319
|
+
|
|
320
|
+
return rc;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
memcached_return_t memcached_decrement_with_initial(memcached_st *ptr,
|
|
324
|
+
const char *key,
|
|
325
|
+
size_t key_length,
|
|
326
|
+
uint64_t offset,
|
|
327
|
+
uint64_t initial,
|
|
328
|
+
time_t expiration,
|
|
329
|
+
uint64_t *value)
|
|
330
|
+
{
|
|
331
|
+
uint64_t local_value;
|
|
332
|
+
if (! value)
|
|
333
|
+
value= &local_value;
|
|
334
|
+
|
|
335
|
+
return memcached_decrement_with_initial_by_key(ptr, key, key_length,
|
|
336
|
+
key, key_length,
|
|
337
|
+
offset, initial, expiration, value);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
memcached_return_t memcached_decrement_with_initial_by_key(memcached_st *ptr,
|
|
341
|
+
const char *group_key,
|
|
342
|
+
size_t group_key_length,
|
|
343
|
+
const char *key,
|
|
344
|
+
size_t key_length,
|
|
345
|
+
uint64_t offset,
|
|
346
|
+
uint64_t initial,
|
|
347
|
+
time_t expiration,
|
|
348
|
+
uint64_t *value)
|
|
349
|
+
{
|
|
350
|
+
uint64_t local_value;
|
|
351
|
+
if (not value)
|
|
352
|
+
value= &local_value;
|
|
353
|
+
|
|
354
|
+
memcached_return_t rc;
|
|
355
|
+
if (memcached_failed(rc= memcached_validate_key_length(key_length, ptr->flags.binary_protocol)))
|
|
356
|
+
{
|
|
357
|
+
return rc;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if (memcached_failed(rc= initialize_query(ptr)))
|
|
361
|
+
{
|
|
362
|
+
return rc;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_START();
|
|
367
|
+
if (ptr->flags.binary_protocol)
|
|
368
|
+
{
|
|
369
|
+
rc= binary_incr_decr(ptr, PROTOCOL_BINARY_CMD_DECREMENT,
|
|
370
|
+
group_key, group_key_length, key, key_length,
|
|
371
|
+
offset, initial, (uint32_t)expiration,
|
|
372
|
+
value);
|
|
373
|
+
}
|
|
374
|
+
else
|
|
375
|
+
{
|
|
376
|
+
rc= MEMCACHED_PROTOCOL_ERROR;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_END();
|
|
380
|
+
|
|
381
|
+
return rc;
|
|
382
|
+
}
|
|
383
|
+
|