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,94 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* File: ms_task.h
|
|
3
|
+
* Author: Mingqiang Zhuang
|
|
4
|
+
*
|
|
5
|
+
* Created on February 10, 2009
|
|
6
|
+
*
|
|
7
|
+
* (c) Copyright 2009, Schooner Information Technology, Inc.
|
|
8
|
+
* http://www.schoonerinfotech.com/
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
#ifndef MS_TASK_H
|
|
12
|
+
#define MS_TASK_H
|
|
13
|
+
|
|
14
|
+
#include <sys/types.h>
|
|
15
|
+
#include <stdint.h>
|
|
16
|
+
#if !defined(__cplusplus)
|
|
17
|
+
# include <stdbool.h>
|
|
18
|
+
#endif
|
|
19
|
+
#include <time.h>
|
|
20
|
+
|
|
21
|
+
#ifdef __cplusplus
|
|
22
|
+
extern "C" {
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
#define UNIT_ITEMS_COUNT 1024 /* each window unit has 1024 items */
|
|
26
|
+
#define KEY_PREFIX_SIZE (sizeof(uint64_t)) /* key prefix length: 8 bytes */
|
|
27
|
+
#define INVALID_OFFSET (-1) /* invalid offset in the character table */
|
|
28
|
+
#define FIXED_EXPIRE_TIME 60 /* default expire time is 60s */
|
|
29
|
+
#define EXPIRE_TIME_ERROR 5 /* default expire time error is 5s */
|
|
30
|
+
|
|
31
|
+
/* information of a task item(object) */
|
|
32
|
+
typedef struct task_item
|
|
33
|
+
{
|
|
34
|
+
uint64_t key_prefix; /* prefix of the key, 8 bytes, binary */
|
|
35
|
+
int key_size; /* key size */
|
|
36
|
+
int key_suffix_offset; /* suffix offset in the global character table */
|
|
37
|
+
|
|
38
|
+
int value_size; /* data size */
|
|
39
|
+
int value_offset; /* data offset in the global character table */
|
|
40
|
+
|
|
41
|
+
time_t client_time; /* the current client time */
|
|
42
|
+
int exp_time; /* expire time */
|
|
43
|
+
} ms_task_item_t;
|
|
44
|
+
|
|
45
|
+
/* task item for multi-get */
|
|
46
|
+
typedef struct mlget_task_item
|
|
47
|
+
{
|
|
48
|
+
ms_task_item_t *item; /* task item */
|
|
49
|
+
bool verify; /* whether verify data or not */
|
|
50
|
+
bool finish_verify; /* whether finish data verify or not */
|
|
51
|
+
bool get_miss; /* whether get miss or not */
|
|
52
|
+
} ms_mlget_task_item_t;
|
|
53
|
+
|
|
54
|
+
/* information of multi-get task */
|
|
55
|
+
typedef struct mlget_task
|
|
56
|
+
{
|
|
57
|
+
ms_mlget_task_item_t *mlget_item; /* multi-get task array */
|
|
58
|
+
int mlget_num; /* how many tasks in mlget_task array */
|
|
59
|
+
int value_index; /* the nth value received by the connect, for multi-get */
|
|
60
|
+
} ms_mlget_task_t;
|
|
61
|
+
|
|
62
|
+
/* structure used to store the state of the running task */
|
|
63
|
+
typedef struct task
|
|
64
|
+
{
|
|
65
|
+
int cmd; /* command name */
|
|
66
|
+
bool verify; /* whether verify data or not */
|
|
67
|
+
bool finish_verify; /* whether finish data verify or not */
|
|
68
|
+
bool get_miss; /* whether get miss or not */
|
|
69
|
+
ms_task_item_t *item; /* task item */
|
|
70
|
+
|
|
71
|
+
/* counter for command distribution adjustment */
|
|
72
|
+
uint64_t get_opt; /* number of total get operations */
|
|
73
|
+
uint64_t set_opt; /* number of total set operations, no including warmup set count */
|
|
74
|
+
int cycle_undo_get; /* number of undo get in an adjustment cycle */
|
|
75
|
+
int cycle_undo_set; /* number of undo set in an adjustment cycle */
|
|
76
|
+
uint64_t verified_get; /* number of total verified get operations */
|
|
77
|
+
uint64_t overwrite_set; /* number of total overwrite set operations */
|
|
78
|
+
} ms_task_t;
|
|
79
|
+
|
|
80
|
+
struct conn;
|
|
81
|
+
|
|
82
|
+
/* the state machine call the function to execute task.*/
|
|
83
|
+
int ms_exec_task(struct conn *c);
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
/* calculate the difference value of two time points */
|
|
87
|
+
int64_t ms_time_diff(struct timeval *start_time, struct timeval *end_time);
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
#ifdef __cplusplus
|
|
91
|
+
}
|
|
92
|
+
#endif
|
|
93
|
+
|
|
94
|
+
#endif /* end of MS_TASK_H */
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* File: ms_thread.c
|
|
3
|
+
* Author: Mingqiang Zhuang
|
|
4
|
+
*
|
|
5
|
+
* Created on February 10, 2009
|
|
6
|
+
*
|
|
7
|
+
* (c) Copyright 2009, Schooner Information Technology, Inc.
|
|
8
|
+
* http://www.schoonerinfotech.com/
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
#include "config.h"
|
|
13
|
+
|
|
14
|
+
#if TIME_WITH_SYS_TIME
|
|
15
|
+
# include <sys/time.h>
|
|
16
|
+
# include <time.h>
|
|
17
|
+
#else
|
|
18
|
+
# if HAVE_SYS_TIME_H
|
|
19
|
+
# include <sys/time.h>
|
|
20
|
+
# else
|
|
21
|
+
# include <time.h>
|
|
22
|
+
# endif
|
|
23
|
+
#endif
|
|
24
|
+
#include "ms_thread.h"
|
|
25
|
+
#include "ms_setting.h"
|
|
26
|
+
#include "ms_atomic.h"
|
|
27
|
+
|
|
28
|
+
/* global variable */
|
|
29
|
+
pthread_key_t ms_thread_key;
|
|
30
|
+
|
|
31
|
+
/* array of thread context structure, each thread has a thread context structure */
|
|
32
|
+
static ms_thread_ctx_t *ms_thread_ctx;
|
|
33
|
+
|
|
34
|
+
/* functions */
|
|
35
|
+
static void ms_set_current_time(void);
|
|
36
|
+
static void ms_check_sock_timeout(void);
|
|
37
|
+
static void ms_clock_handler(const int fd, const short which, void *arg);
|
|
38
|
+
static uint32_t ms_set_thread_cpu_affinity(uint32_t cpu);
|
|
39
|
+
static int ms_setup_thread(ms_thread_ctx_t *thread_ctx);
|
|
40
|
+
static void *ms_worker_libevent(void *arg);
|
|
41
|
+
static void ms_create_worker(void *(*func)(void *), void *arg);
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* time-sensitive callers can call it by hand with this,
|
|
46
|
+
* outside the normal ever-1-second timer
|
|
47
|
+
*/
|
|
48
|
+
static void ms_set_current_time()
|
|
49
|
+
{
|
|
50
|
+
struct timeval timer;
|
|
51
|
+
ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
|
|
52
|
+
|
|
53
|
+
gettimeofday(&timer, NULL);
|
|
54
|
+
ms_thread->curr_time= (rel_time_t)timer.tv_sec;
|
|
55
|
+
} /* ms_set_current_time */
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* used to check whether UDP of command are waiting timeout
|
|
60
|
+
* by the ever-1-second timer
|
|
61
|
+
*/
|
|
62
|
+
static void ms_check_sock_timeout(void)
|
|
63
|
+
{
|
|
64
|
+
ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
|
|
65
|
+
ms_conn_t *c= NULL;
|
|
66
|
+
int time_diff= 0;
|
|
67
|
+
|
|
68
|
+
for (uint32_t i= 0; i < ms_thread->thread_ctx->nconns; i++)
|
|
69
|
+
{
|
|
70
|
+
c= &ms_thread->conn[i];
|
|
71
|
+
|
|
72
|
+
if (c->udp)
|
|
73
|
+
{
|
|
74
|
+
time_diff= (int)(ms_thread->curr_time - (rel_time_t)c->start_time.tv_sec);
|
|
75
|
+
|
|
76
|
+
/* wait time out */
|
|
77
|
+
if (time_diff > SOCK_WAIT_TIMEOUT)
|
|
78
|
+
{
|
|
79
|
+
/* calculate dropped packets count */
|
|
80
|
+
if (c->recvpkt > 0)
|
|
81
|
+
{
|
|
82
|
+
atomic_add_size(&ms_stats.pkt_drop, c->packets - c->recvpkt);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
atomic_add_size(&ms_stats.udp_timeout, 1);
|
|
86
|
+
ms_reset_conn(c, true);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
} /* ms_check_sock_timeout */
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
/* if disconnect, the ever-1-second timer will call this function to reconnect */
|
|
94
|
+
static void ms_reconn_thread_socks(void)
|
|
95
|
+
{
|
|
96
|
+
ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
|
|
97
|
+
for (uint32_t i= 0; i < ms_thread->thread_ctx->nconns; i++)
|
|
98
|
+
{
|
|
99
|
+
ms_reconn_socks(&ms_thread->conn[i]);
|
|
100
|
+
}
|
|
101
|
+
} /* ms_reconn_thread_socks */
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* the handler of the ever-1-second timer
|
|
106
|
+
*
|
|
107
|
+
* @param fd, the descriptors of the socket
|
|
108
|
+
* @param which, event flags
|
|
109
|
+
* @param arg, argument
|
|
110
|
+
*/
|
|
111
|
+
static void ms_clock_handler(const int fd, const short which, void *arg)
|
|
112
|
+
{
|
|
113
|
+
ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
|
|
114
|
+
struct timeval t=
|
|
115
|
+
{
|
|
116
|
+
.tv_sec= 1, .tv_usec= 0
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
UNUSED_ARGUMENT(fd);
|
|
120
|
+
UNUSED_ARGUMENT(which);
|
|
121
|
+
UNUSED_ARGUMENT(arg);
|
|
122
|
+
|
|
123
|
+
ms_set_current_time();
|
|
124
|
+
|
|
125
|
+
if (ms_thread->initialized)
|
|
126
|
+
{
|
|
127
|
+
/* only delete the event if it's actually there. */
|
|
128
|
+
evtimer_del(&ms_thread->clock_event);
|
|
129
|
+
ms_check_sock_timeout();
|
|
130
|
+
}
|
|
131
|
+
else
|
|
132
|
+
{
|
|
133
|
+
ms_thread->initialized= true;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
ms_reconn_thread_socks();
|
|
137
|
+
|
|
138
|
+
evtimer_set(&ms_thread->clock_event, ms_clock_handler, 0);
|
|
139
|
+
event_base_set(ms_thread->base, &ms_thread->clock_event);
|
|
140
|
+
evtimer_add(&ms_thread->clock_event, &t);
|
|
141
|
+
} /* ms_clock_handler */
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* used to bind thread to CPU if the system supports
|
|
146
|
+
*
|
|
147
|
+
* @param cpu, cpu index
|
|
148
|
+
*
|
|
149
|
+
* @return if success, return EXIT_SUCCESS, else return -1
|
|
150
|
+
*/
|
|
151
|
+
static uint32_t ms_set_thread_cpu_affinity(uint32_t cpu)
|
|
152
|
+
{
|
|
153
|
+
uint32_t ret= 0;
|
|
154
|
+
|
|
155
|
+
#ifdef HAVE_CPU_SET_T
|
|
156
|
+
cpu_set_t cpu_set;
|
|
157
|
+
CPU_ZERO(&cpu_set);
|
|
158
|
+
CPU_SET(cpu, &cpu_set);
|
|
159
|
+
|
|
160
|
+
if (sched_setaffinity(0, sizeof(cpu_set_t), &cpu_set) == -1)
|
|
161
|
+
{
|
|
162
|
+
fprintf(stderr, "WARNING: Could not set CPU Affinity, continuing...\n");
|
|
163
|
+
ret= 1;
|
|
164
|
+
}
|
|
165
|
+
#else
|
|
166
|
+
UNUSED_ARGUMENT(cpu);
|
|
167
|
+
#endif
|
|
168
|
+
|
|
169
|
+
return ret;
|
|
170
|
+
} /* ms_set_thread_cpu_affinity */
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Set up a thread's information.
|
|
175
|
+
*
|
|
176
|
+
* @param thread_ctx, pointer of the thread context structure
|
|
177
|
+
*
|
|
178
|
+
* @return if success, return EXIT_SUCCESS, else return -1
|
|
179
|
+
*/
|
|
180
|
+
static int ms_setup_thread(ms_thread_ctx_t *thread_ctx)
|
|
181
|
+
{
|
|
182
|
+
|
|
183
|
+
ms_thread_t *ms_thread= (ms_thread_t *)calloc(sizeof(*ms_thread), 1);
|
|
184
|
+
pthread_setspecific(ms_thread_key, (void *)ms_thread);
|
|
185
|
+
|
|
186
|
+
ms_thread->thread_ctx= thread_ctx;
|
|
187
|
+
ms_thread->nactive_conn= thread_ctx->nconns;
|
|
188
|
+
ms_thread->initialized= false;
|
|
189
|
+
static volatile uint32_t cnt= 0;
|
|
190
|
+
|
|
191
|
+
gettimeofday(&ms_thread->startup_time, NULL);
|
|
192
|
+
|
|
193
|
+
ms_thread->base= event_init();
|
|
194
|
+
if (ms_thread->base == NULL)
|
|
195
|
+
{
|
|
196
|
+
if (atomic_add_32_nv(&cnt, 1) == 0)
|
|
197
|
+
{
|
|
198
|
+
fprintf(stderr, "Can't allocate event base.\n");
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return -1;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
ms_thread->conn=
|
|
205
|
+
(ms_conn_t *)malloc((size_t)thread_ctx->nconns * sizeof(ms_conn_t));
|
|
206
|
+
if (ms_thread->conn == NULL)
|
|
207
|
+
{
|
|
208
|
+
if (atomic_add_32_nv(&cnt, 1) == 0)
|
|
209
|
+
{
|
|
210
|
+
fprintf(
|
|
211
|
+
stderr,
|
|
212
|
+
"Can't allocate concurrency structure for thread descriptors.");
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return -1;
|
|
216
|
+
}
|
|
217
|
+
memset(ms_thread->conn, 0, (size_t)thread_ctx->nconns * sizeof(ms_conn_t));
|
|
218
|
+
|
|
219
|
+
for (uint32_t i= 0; i < thread_ctx->nconns; i++)
|
|
220
|
+
{
|
|
221
|
+
ms_thread->conn[i].conn_idx= i;
|
|
222
|
+
if (ms_setup_conn(&ms_thread->conn[i]) != 0)
|
|
223
|
+
{
|
|
224
|
+
/* only output this error once */
|
|
225
|
+
if (atomic_add_32_nv(&cnt, 1) == 0)
|
|
226
|
+
{
|
|
227
|
+
fprintf(stderr, "Initializing connection failed.\n");
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return -1;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return EXIT_SUCCESS;
|
|
235
|
+
} /* ms_setup_thread */
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Worker thread: main event loop
|
|
240
|
+
*
|
|
241
|
+
* @param arg, the pointer of argument
|
|
242
|
+
*
|
|
243
|
+
* @return void*
|
|
244
|
+
*/
|
|
245
|
+
static void *ms_worker_libevent(void *arg)
|
|
246
|
+
{
|
|
247
|
+
ms_thread_t *ms_thread= NULL;
|
|
248
|
+
ms_thread_ctx_t *thread_ctx= (ms_thread_ctx_t *)arg;
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* If system has more than one cpu and supports set cpu
|
|
252
|
+
* affinity, try to bind each thread to a cpu core;
|
|
253
|
+
*/
|
|
254
|
+
if (ms_setting.ncpu > 1)
|
|
255
|
+
{
|
|
256
|
+
ms_set_thread_cpu_affinity(thread_ctx->thd_idx % ms_setting.ncpu);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (ms_setup_thread(thread_ctx) != 0)
|
|
260
|
+
{
|
|
261
|
+
exit(1);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* each thread with a timer */
|
|
265
|
+
ms_clock_handler(0, 0, 0);
|
|
266
|
+
|
|
267
|
+
pthread_mutex_lock(&ms_global.init_lock.lock);
|
|
268
|
+
ms_global.init_lock.count++;
|
|
269
|
+
pthread_cond_signal(&ms_global.init_lock.cond);
|
|
270
|
+
pthread_mutex_unlock(&ms_global.init_lock.lock);
|
|
271
|
+
|
|
272
|
+
ms_thread= pthread_getspecific(ms_thread_key);
|
|
273
|
+
event_base_loop(ms_thread->base, 0);
|
|
274
|
+
|
|
275
|
+
return NULL;
|
|
276
|
+
} /* ms_worker_libevent */
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Creates a worker thread.
|
|
281
|
+
*
|
|
282
|
+
* @param func, the callback function
|
|
283
|
+
* @param arg, the argument to pass to the callback function
|
|
284
|
+
*/
|
|
285
|
+
static void ms_create_worker(void *(*func)(void *), void *arg)
|
|
286
|
+
{
|
|
287
|
+
pthread_t thread;
|
|
288
|
+
pthread_attr_t attr;
|
|
289
|
+
int ret;
|
|
290
|
+
|
|
291
|
+
pthread_attr_init(&attr);
|
|
292
|
+
|
|
293
|
+
if ((ret= pthread_create(&thread, &attr, func, arg)) != 0)
|
|
294
|
+
{
|
|
295
|
+
fprintf(stderr, "Can't create thread: %s.\n", strerror(ret));
|
|
296
|
+
exit(1);
|
|
297
|
+
}
|
|
298
|
+
} /* ms_create_worker */
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
/* initialize threads */
|
|
302
|
+
void ms_thread_init()
|
|
303
|
+
{
|
|
304
|
+
ms_thread_ctx=
|
|
305
|
+
(ms_thread_ctx_t *)malloc(
|
|
306
|
+
sizeof(ms_thread_ctx_t) * (size_t)ms_setting.nthreads);
|
|
307
|
+
if (ms_thread_ctx == NULL)
|
|
308
|
+
{
|
|
309
|
+
fprintf(stderr, "Can't allocate thread descriptors.");
|
|
310
|
+
exit(1);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
for (uint32_t i= 0; i < ms_setting.nthreads; i++)
|
|
314
|
+
{
|
|
315
|
+
ms_thread_ctx[i].thd_idx= i;
|
|
316
|
+
ms_thread_ctx[i].nconns= ms_setting.nconns / ms_setting.nthreads;
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* If only one server, all the connections in all threads
|
|
320
|
+
* connects the same server. For support multi-servers, simple
|
|
321
|
+
* distribute thread to server.
|
|
322
|
+
*/
|
|
323
|
+
ms_thread_ctx[i].srv_idx= i % ms_setting.srv_cnt;
|
|
324
|
+
ms_thread_ctx[i].tps_perconn= ms_setting.expected_tps
|
|
325
|
+
/ (int)ms_setting.nconns;
|
|
326
|
+
ms_thread_ctx[i].exec_num_perconn= ms_setting.exec_num
|
|
327
|
+
/ ms_setting.nconns;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
if (pthread_key_create(&ms_thread_key, NULL))
|
|
331
|
+
{
|
|
332
|
+
fprintf(stderr, "Can't create pthread keys. Major malfunction!\n");
|
|
333
|
+
exit(1);
|
|
334
|
+
}
|
|
335
|
+
/* Create threads after we've done all the epoll setup. */
|
|
336
|
+
for (uint32_t i= 0; i < ms_setting.nthreads; i++)
|
|
337
|
+
{
|
|
338
|
+
ms_create_worker(ms_worker_libevent, (void *)&ms_thread_ctx[i]);
|
|
339
|
+
}
|
|
340
|
+
} /* ms_thread_init */
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
/* cleanup some resource of threads when all the threads exit */
|
|
344
|
+
void ms_thread_cleanup()
|
|
345
|
+
{
|
|
346
|
+
if (ms_thread_ctx != NULL)
|
|
347
|
+
{
|
|
348
|
+
free(ms_thread_ctx);
|
|
349
|
+
}
|
|
350
|
+
pthread_key_delete(ms_thread_key);
|
|
351
|
+
} /* ms_thread_cleanup */
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* File: ms_thread.h
|
|
3
|
+
* Author: Mingqiang Zhuang
|
|
4
|
+
*
|
|
5
|
+
* Created on February 10, 2009
|
|
6
|
+
*
|
|
7
|
+
* (c) Copyright 2009, Schooner Information Technology, Inc.
|
|
8
|
+
* http://www.schoonerinfotech.com/
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Asynchronous memslap has the similar implementation of
|
|
14
|
+
* multi-threads with memcached. Asynchronous memslap creates
|
|
15
|
+
* one or more self-governed threads; each thread is bound with
|
|
16
|
+
* one CPU core if the system supports setting CPU core
|
|
17
|
+
* affinity. And every thread has private variables. There is
|
|
18
|
+
* less communication or some shared resources among all the
|
|
19
|
+
* threads. It can improve the performance because there are
|
|
20
|
+
* fewer locks and competition. In addition, each thread has a
|
|
21
|
+
* libevent to manage the events of network. Each thread has one
|
|
22
|
+
* or more self-governed concurrencies; each concurrency has one
|
|
23
|
+
* or more socket connections. All the concurrencies don't
|
|
24
|
+
* communicate with each other even though they are in the same
|
|
25
|
+
* thread.
|
|
26
|
+
*/
|
|
27
|
+
#ifndef MS_THREAD_H
|
|
28
|
+
#define MS_THREAD_H
|
|
29
|
+
|
|
30
|
+
#include <sched.h>
|
|
31
|
+
#include "ms_conn.h"
|
|
32
|
+
|
|
33
|
+
#ifdef __cplusplus
|
|
34
|
+
extern "C" {
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
/** Time relative to server start. Smaller than time_t on 64-bit systems. */
|
|
38
|
+
typedef unsigned int rel_time_t;
|
|
39
|
+
|
|
40
|
+
/* Used to store the context of each thread */
|
|
41
|
+
typedef struct thread_ctx
|
|
42
|
+
{
|
|
43
|
+
uint32_t thd_idx; /* the thread index */
|
|
44
|
+
uint32_t nconns; /* how many connections included by the thread */
|
|
45
|
+
uint32_t srv_idx; /* index of the thread */
|
|
46
|
+
int tps_perconn; /* expected throughput per connection */
|
|
47
|
+
int64_t exec_num_perconn; /* execute number per connection */
|
|
48
|
+
} ms_thread_ctx_t;
|
|
49
|
+
|
|
50
|
+
/* Used to store the private variables of each thread */
|
|
51
|
+
typedef struct thread
|
|
52
|
+
{
|
|
53
|
+
ms_conn_t *conn; /* conn array to store all the conn in the thread */
|
|
54
|
+
uint32_t nactive_conn; /* how many connects are active */
|
|
55
|
+
|
|
56
|
+
ms_thread_ctx_t *thread_ctx; /* thread context from the caller */
|
|
57
|
+
struct event_base *base; /* libevent handler created by this thread */
|
|
58
|
+
|
|
59
|
+
rel_time_t curr_time; /* current time */
|
|
60
|
+
struct event clock_event; /* clock event to time each one second */
|
|
61
|
+
bool initialized; /* whether clock_event has been initialized */
|
|
62
|
+
|
|
63
|
+
struct timeval startup_time; /* start time of the thread */
|
|
64
|
+
} ms_thread_t;
|
|
65
|
+
|
|
66
|
+
/* initialize threads */
|
|
67
|
+
void ms_thread_init(void);
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
/* cleanup some resource of threads when all the threads exit */
|
|
71
|
+
void ms_thread_cleanup(void);
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
#ifdef __cplusplus
|
|
75
|
+
}
|
|
76
|
+
#endif
|
|
77
|
+
|
|
78
|
+
#endif /* end of MS_THREAD_H */
|