nutcracker 0.2.3 → 0.2.4.beta1
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/README.md +53 -5
- data/Rakefile +14 -19
- data/bin/nutcracker +6 -1
- data/ext/nutcracker/ChangeLog +9 -0
- data/ext/nutcracker/LICENSE +0 -0
- data/ext/nutcracker/Makefile +643 -0
- data/ext/nutcracker/Makefile.am +0 -0
- data/ext/nutcracker/Makefile.in +66 -149
- data/ext/nutcracker/NOTICE +0 -0
- data/ext/nutcracker/README.md +13 -11
- data/ext/nutcracker/aclocal.m4 +112 -201
- data/ext/nutcracker/autom4te.cache/output.0 +18664 -0
- data/ext/nutcracker/autom4te.cache/output.1 +18664 -0
- data/ext/nutcracker/autom4te.cache/output.2 +18664 -0
- data/ext/nutcracker/autom4te.cache/requests +494 -0
- data/ext/nutcracker/autom4te.cache/traces.0 +2415 -0
- data/ext/nutcracker/autom4te.cache/traces.1 +945 -0
- data/ext/nutcracker/autom4te.cache/traces.2 +2415 -0
- data/ext/nutcracker/conf/nutcracker.leaf.yml +0 -0
- data/ext/nutcracker/conf/nutcracker.root.yml +0 -0
- data/ext/nutcracker/conf/nutcracker.yml +0 -0
- data/ext/nutcracker/config.h +332 -0
- data/ext/nutcracker/config.h.in +15 -0
- data/ext/nutcracker/config.log +2684 -0
- data/ext/nutcracker/config.status +2317 -0
- data/ext/nutcracker/config/config.guess +23 -84
- data/ext/nutcracker/config/config.sub +23 -93
- data/ext/nutcracker/config/depcomp +35 -81
- data/ext/nutcracker/config/install-sh +109 -122
- data/ext/nutcracker/config/ltmain.sh +1053 -721
- data/ext/nutcracker/config/missing +20 -29
- data/ext/nutcracker/configure +2122 -2320
- data/ext/nutcracker/configure.ac +35 -3
- data/ext/nutcracker/contrib/Makefile +494 -0
- data/ext/nutcracker/contrib/Makefile.am +0 -0
- data/ext/nutcracker/contrib/Makefile.in +41 -107
- data/ext/nutcracker/contrib/yaml-0.1.4.tar.gz +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/Makefile +736 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/output.0 +13102 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/output.1 +13085 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/output.2 +13085 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/requests +476 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/traces.0 +2339 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/traces.1 +545 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/traces.2 +2339 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/config.h +81 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/config.h.in~ +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/config.log +688 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/config.status +2032 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/annotated.html +51 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/bc_s.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/classes.html +41 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/closed.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/doxygen.css +656 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/doxygen.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/files.html +40 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x62.html +84 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x63.html +87 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x64.html +83 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x65.html +110 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x66.html +79 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x68.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x69.html +92 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6b.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6c.html +88 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6d.html +96 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6e.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6f.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x70.html +100 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x71.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x72.html +87 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x73.html +163 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x74.html +115 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x75.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x76.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x77.html +77 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x62.html +84 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x63.html +87 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x64.html +83 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x65.html +110 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x66.html +79 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x68.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x69.html +92 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6b.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6c.html +88 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6d.html +96 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6e.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6f.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x70.html +100 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x71.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x72.html +87 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x73.html +163 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x74.html +115 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x75.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x76.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x77.html +77 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals.html +667 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_defs.html +81 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_enum.html +78 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_eval.html +373 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_func.html +196 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_type.html +126 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__basic.html +320 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__emitter.html +819 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__events.html +664 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__export.html +60 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__nodes.html +795 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__parser.html +606 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__styles.html +222 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__tokens.html +246 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__version.html +106 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/index.html +31 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/modules.html +42 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/nav_f.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/nav_h.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/open.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__alias__data__s.html +108 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__document__s.html +235 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__emitter__s.html +1300 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__event__s.html +496 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__mark__s.html +108 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__node__pair__s.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__node__s.html +420 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__parser__s.html +1229 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__simple__key__s.html +97 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__tag__directive__s.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__token__s.html +413 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__version__directive__s.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tab_a.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tab_b.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tab_h.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tab_s.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tabs.css +59 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/yaml_8h.html +525 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/include/Makefile.am +17 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/include/Makefile.in +470 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/libtool +8890 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/Makefile +484 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/api.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/api.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/dumper.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/dumper.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/emitter.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/emitter.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/libyaml.la +41 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/loader.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/loader.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/parser.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/parser.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/reader.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/reader.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/scanner.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/scanner.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/writer.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/writer.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/stamp-h1 +1 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/Makefile +675 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor-alt +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor-alt.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter-alt +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter-alt.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-dumper +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-dumper.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-emitter +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-emitter.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-loader +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-loader.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-parser +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-parser.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-scanner +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-scanner.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/yaml-0.1.pc +10 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/yaml-0.1.pc.in +10 -0
- data/ext/nutcracker/extconf.rb +0 -5
- data/ext/nutcracker/libtool +9403 -0
- data/ext/nutcracker/m4/libtool.m4 +553 -492
- data/ext/nutcracker/m4/ltoptions.m4 +7 -6
- data/ext/nutcracker/m4/ltversion.m4 +5 -5
- data/ext/nutcracker/m4/lt~obsolete.m4 +9 -3
- data/ext/nutcracker/notes/c-styleguide.txt +0 -0
- data/ext/nutcracker/notes/debug.txt +0 -0
- data/ext/nutcracker/notes/memcache.txt +0 -0
- data/ext/nutcracker/notes/recommendation.md +21 -2
- data/ext/nutcracker/notes/redis.md +9 -9
- data/ext/nutcracker/notes/socket.txt +0 -0
- data/ext/nutcracker/scripts/nutcracker.init +0 -0
- data/ext/nutcracker/scripts/nutcracker.spec +0 -0
- data/ext/nutcracker/scripts/redis-check.py +0 -0
- data/ext/nutcracker/scripts/redis-check.sh +9 -0
- data/ext/nutcracker/src/Makefile +647 -0
- data/ext/nutcracker/src/Makefile.am +1 -1
- data/ext/nutcracker/src/Makefile.in +74 -153
- data/ext/nutcracker/src/hashkit/Makefile +476 -0
- data/ext/nutcracker/src/hashkit/Makefile.am +1 -0
- data/ext/nutcracker/src/hashkit/Makefile.in +39 -64
- data/ext/nutcracker/src/hashkit/libhashkit.a +0 -0
- data/ext/nutcracker/src/hashkit/nc_crc16.c +66 -0
- data/ext/nutcracker/src/hashkit/nc_crc16.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_crc32.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_crc32.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_fnv.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_fnv.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_hashkit.h +2 -0
- data/ext/nutcracker/src/hashkit/nc_hsieh.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_hsieh.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_jenkins.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_jenkins.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_ketama.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_ketama.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_md5.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_md5.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_modula.c +18 -6
- data/ext/nutcracker/src/hashkit/nc_modula.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_murmur.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_murmur.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_one_at_a_time.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_one_at_a_time.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_random.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_random.o +0 -0
- data/ext/nutcracker/src/nc.c +0 -0
- data/ext/nutcracker/src/nc.o +0 -0
- data/ext/nutcracker/src/nc_array.c +0 -0
- data/ext/nutcracker/src/nc_array.h +0 -0
- data/ext/nutcracker/src/nc_array.o +0 -0
- data/ext/nutcracker/src/nc_client.c +0 -0
- data/ext/nutcracker/src/nc_client.h +0 -0
- data/ext/nutcracker/src/nc_client.o +0 -0
- data/ext/nutcracker/src/nc_conf.c +14 -35
- data/ext/nutcracker/src/nc_conf.h +1 -1
- data/ext/nutcracker/src/nc_conf.o +0 -0
- data/ext/nutcracker/src/nc_connection.c +0 -0
- data/ext/nutcracker/src/nc_connection.h +0 -0
- data/ext/nutcracker/src/nc_connection.o +0 -0
- data/ext/nutcracker/src/nc_core.c +29 -26
- data/ext/nutcracker/src/nc_core.h +13 -5
- data/ext/nutcracker/src/nc_core.o +0 -0
- data/ext/nutcracker/src/{nc_event.c → nc_epoll.c} +94 -30
- data/ext/nutcracker/src/nc_epoll.o +0 -0
- data/ext/nutcracker/src/nc_event.h +33 -13
- data/ext/nutcracker/src/nc_kqueue.c +296 -0
- data/ext/nutcracker/src/nc_kqueue.o +0 -0
- data/ext/nutcracker/src/nc_log.c +0 -0
- data/ext/nutcracker/src/nc_log.h +0 -0
- data/ext/nutcracker/src/nc_log.o +0 -0
- data/ext/nutcracker/src/nc_mbuf.c +0 -0
- data/ext/nutcracker/src/nc_mbuf.h +0 -0
- data/ext/nutcracker/src/nc_mbuf.o +0 -0
- data/ext/nutcracker/src/nc_message.c +0 -0
- data/ext/nutcracker/src/nc_message.h +2 -0
- data/ext/nutcracker/src/nc_message.o +0 -0
- data/ext/nutcracker/src/nc_proxy.c +8 -8
- data/ext/nutcracker/src/nc_proxy.h +0 -0
- data/ext/nutcracker/src/nc_proxy.o +0 -0
- data/ext/nutcracker/src/nc_queue.h +0 -0
- data/ext/nutcracker/src/nc_rbtree.c +0 -0
- data/ext/nutcracker/src/nc_rbtree.h +0 -0
- data/ext/nutcracker/src/nc_rbtree.o +0 -0
- data/ext/nutcracker/src/nc_request.c +3 -3
- data/ext/nutcracker/src/nc_request.o +0 -0
- data/ext/nutcracker/src/nc_response.c +4 -6
- data/ext/nutcracker/src/nc_response.o +0 -0
- data/ext/nutcracker/src/nc_server.c +14 -12
- data/ext/nutcracker/src/nc_server.h +0 -0
- data/ext/nutcracker/src/nc_server.o +0 -0
- data/ext/nutcracker/src/nc_signal.c +0 -0
- data/ext/nutcracker/src/nc_signal.h +0 -0
- data/ext/nutcracker/src/nc_signal.o +0 -0
- data/ext/nutcracker/src/nc_stats.c +16 -21
- data/ext/nutcracker/src/nc_stats.h +3 -4
- data/ext/nutcracker/src/nc_stats.o +0 -0
- data/ext/nutcracker/src/nc_string.c +0 -0
- data/ext/nutcracker/src/nc_string.h +0 -0
- data/ext/nutcracker/src/nc_string.o +0 -0
- data/ext/nutcracker/src/nc_util.c +16 -0
- data/ext/nutcracker/src/nc_util.h +1 -0
- data/ext/nutcracker/src/nc_util.o +0 -0
- data/ext/nutcracker/src/nutcracker +0 -0
- data/ext/nutcracker/src/proto/Makefile +454 -0
- data/ext/nutcracker/src/proto/Makefile.am +0 -0
- data/ext/nutcracker/src/proto/Makefile.in +32 -60
- data/ext/nutcracker/src/proto/libproto.a +0 -0
- data/ext/nutcracker/src/proto/nc_memcache.c +0 -0
- data/ext/nutcracker/src/proto/nc_memcache.o +0 -0
- data/ext/nutcracker/src/proto/nc_proto.h +0 -0
- data/ext/nutcracker/src/proto/nc_redis.c +17 -4
- data/ext/nutcracker/src/proto/nc_redis.o +0 -0
- data/ext/nutcracker/stamp-h1 +1 -0
- data/lib/nutcracker.rb +64 -2
- data/lib/nutcracker/version.rb +1 -1
- metadata +237 -9
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
data/ext/nutcracker/src/nc.c
CHANGED
|
File without changes
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
Binary file
|
|
@@ -1109,14 +1109,6 @@ conf_pre_validate(struct conf *cf)
|
|
|
1109
1109
|
return NC_OK;
|
|
1110
1110
|
}
|
|
1111
1111
|
|
|
1112
|
-
static int
|
|
1113
|
-
conf_server_pname_cmp(const void *t1, const void *t2)
|
|
1114
|
-
{
|
|
1115
|
-
const struct conf_server *s1 = t1, *s2 = t2;
|
|
1116
|
-
|
|
1117
|
-
return string_compare(&s1->pname, &s2->pname);
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
1112
|
static int
|
|
1121
1113
|
conf_server_name_cmp(const void *t1, const void *t2)
|
|
1122
1114
|
{
|
|
@@ -1156,27 +1148,10 @@ conf_validate_server(struct conf *cf, struct conf_pool *cp)
|
|
|
1156
1148
|
|
|
1157
1149
|
/*
|
|
1158
1150
|
* Disallow duplicate servers - servers with identical "host:port:weight"
|
|
1159
|
-
* or "name" combination are considered as duplicates
|
|
1151
|
+
* or "name" combination are considered as duplicates. When server name
|
|
1152
|
+
* is configured, we only check for duplicate "name" and not for duplicate
|
|
1153
|
+
* "host:port:weight"
|
|
1160
1154
|
*/
|
|
1161
|
-
array_sort(&cp->server, conf_server_pname_cmp);
|
|
1162
|
-
for (valid = true, i = 0; i < nserver - 1; i++) {
|
|
1163
|
-
struct conf_server *cs1, *cs2;
|
|
1164
|
-
|
|
1165
|
-
cs1 = array_get(&cp->server, i);
|
|
1166
|
-
cs2 = array_get(&cp->server, i + 1);
|
|
1167
|
-
|
|
1168
|
-
if (string_compare(&cs1->pname, &cs2->pname) == 0) {
|
|
1169
|
-
log_error("conf: pool '%.*s' has servers with same name '%.*s'",
|
|
1170
|
-
cp->name.len, cp->name.data, cs1->pname.len,
|
|
1171
|
-
cs1->pname.data);
|
|
1172
|
-
valid = false;
|
|
1173
|
-
break;
|
|
1174
|
-
}
|
|
1175
|
-
}
|
|
1176
|
-
if (!valid) {
|
|
1177
|
-
return NC_ERROR;
|
|
1178
|
-
}
|
|
1179
|
-
|
|
1180
1155
|
array_sort(&cp->server, conf_server_name_cmp);
|
|
1181
1156
|
for (valid = true, i = 0; i < nserver - 1; i++) {
|
|
1182
1157
|
struct conf_server *cs1, *cs2;
|
|
@@ -1497,7 +1472,7 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
|
1497
1472
|
struct conf_server *field;
|
|
1498
1473
|
uint8_t *p, *q, *start;
|
|
1499
1474
|
uint8_t *pname, *addr, *port, *weight, *name;
|
|
1500
|
-
uint32_t k, pnamelen, addrlen, portlen, weightlen, namelen;
|
|
1475
|
+
uint32_t k, delimlen, pnamelen, addrlen, portlen, weightlen, namelen;
|
|
1501
1476
|
struct string address;
|
|
1502
1477
|
char delim[] = " ::";
|
|
1503
1478
|
|
|
@@ -1514,7 +1489,7 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
|
1514
1489
|
|
|
1515
1490
|
value = array_top(&cf->arg);
|
|
1516
1491
|
|
|
1517
|
-
/* parse "hostname:port:weight [name]" from the end */
|
|
1492
|
+
/* parse "hostname:port:weight [name]" or "/path/unix_socket:weight [name]" from the end */
|
|
1518
1493
|
p = value->data + value->len - 1;
|
|
1519
1494
|
start = value->data;
|
|
1520
1495
|
addr = NULL;
|
|
@@ -1526,6 +1501,8 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
|
1526
1501
|
name = NULL;
|
|
1527
1502
|
namelen = 0;
|
|
1528
1503
|
|
|
1504
|
+
delimlen = value->data[0] == '/' ? 2 : 3;
|
|
1505
|
+
|
|
1529
1506
|
for (k = 0; k < sizeof(delim); k++) {
|
|
1530
1507
|
q = nc_strrchr(p, start, delim[k]);
|
|
1531
1508
|
if (q == NULL) {
|
|
@@ -1562,8 +1539,8 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
|
1562
1539
|
p = q - 1;
|
|
1563
1540
|
}
|
|
1564
1541
|
|
|
1565
|
-
if (k !=
|
|
1566
|
-
return "has an invalid \"hostname:port:weight [name]\" format string";
|
|
1542
|
+
if (k != delimlen) {
|
|
1543
|
+
return "has an invalid \"hostname:port:weight [name]\"or \"/path/unix_socket:weight [name]\" format string";
|
|
1567
1544
|
}
|
|
1568
1545
|
|
|
1569
1546
|
pname = value->data;
|
|
@@ -1582,9 +1559,11 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
|
1582
1559
|
return "has an invalid weight in \"hostname:port:weight [name]\" format string";
|
|
1583
1560
|
}
|
|
1584
1561
|
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1562
|
+
if (value->data[0] != '/') {
|
|
1563
|
+
field->port = nc_atoi(port, portlen);
|
|
1564
|
+
if (field->port < 0 || !nc_valid_port(field->port)) {
|
|
1565
|
+
return "has an invalid port in \"hostname:port:weight [name]\" format string";
|
|
1566
|
+
}
|
|
1588
1567
|
}
|
|
1589
1568
|
|
|
1590
1569
|
if (name == NULL) {
|
|
@@ -120,7 +120,7 @@ char *conf_set_string(struct conf *cf, struct command *cmd, void *conf);
|
|
|
120
120
|
char *conf_set_listen(struct conf *cf, struct command *cmd, void *conf);
|
|
121
121
|
char *conf_add_server(struct conf *cf, struct command *cmd, void *conf);
|
|
122
122
|
char *conf_set_num(struct conf *cf, struct command *cmd, void *conf);
|
|
123
|
-
char *
|
|
123
|
+
char *conf_set_bool(struct conf *cf, struct command *cmd, void *conf);
|
|
124
124
|
char *conf_set_hash(struct conf *cf, struct command *cmd, void *conf);
|
|
125
125
|
char *conf_set_distribution(struct conf *cf, struct command *cmd, void *conf);
|
|
126
126
|
char *conf_set_hashtag(struct conf *cf, struct command *cmd, void *conf);
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
Binary file
|
|
@@ -17,9 +17,6 @@
|
|
|
17
17
|
|
|
18
18
|
#include <stdlib.h>
|
|
19
19
|
#include <unistd.h>
|
|
20
|
-
|
|
21
|
-
#include <sys/epoll.h>
|
|
22
|
-
|
|
23
20
|
#include <nc_core.h>
|
|
24
21
|
#include <nc_event.h>
|
|
25
22
|
#include <nc_conf.h>
|
|
@@ -28,6 +25,10 @@
|
|
|
28
25
|
|
|
29
26
|
static uint32_t ctx_id; /* context generation */
|
|
30
27
|
|
|
28
|
+
/* function prototype for use in core_ctx_create() */
|
|
29
|
+
static void
|
|
30
|
+
core_core(void *arg, uint32_t evflags);
|
|
31
|
+
|
|
31
32
|
static struct context *
|
|
32
33
|
core_ctx_create(struct instance *nci)
|
|
33
34
|
{
|
|
@@ -41,12 +42,10 @@ core_ctx_create(struct instance *nci)
|
|
|
41
42
|
ctx->id = ++ctx_id;
|
|
42
43
|
ctx->cf = NULL;
|
|
43
44
|
ctx->stats = NULL;
|
|
45
|
+
ctx->evb = NULL;
|
|
44
46
|
array_null(&ctx->pool);
|
|
45
|
-
ctx->ep = -1;
|
|
46
|
-
ctx->nevent = EVENT_SIZE_HINT;
|
|
47
47
|
ctx->max_timeout = nci->stats_interval;
|
|
48
48
|
ctx->timeout = ctx->max_timeout;
|
|
49
|
-
ctx->event = NULL;
|
|
50
49
|
|
|
51
50
|
/* parse and create configuration */
|
|
52
51
|
ctx->cf = conf_create(nci->conf_filename);
|
|
@@ -74,8 +73,8 @@ core_ctx_create(struct instance *nci)
|
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
/* initialize event handling for client, proxy and server */
|
|
77
|
-
|
|
78
|
-
if (
|
|
76
|
+
ctx->evb = evbase_create(NC_EVENT_SIZE, &core_core);
|
|
77
|
+
if (ctx->evb == NULL) {
|
|
79
78
|
stats_destroy(ctx->stats);
|
|
80
79
|
server_pool_deinit(&ctx->pool);
|
|
81
80
|
conf_destroy(ctx->cf);
|
|
@@ -87,7 +86,7 @@ core_ctx_create(struct instance *nci)
|
|
|
87
86
|
status = server_pool_preconnect(ctx);
|
|
88
87
|
if (status != NC_OK) {
|
|
89
88
|
server_pool_disconnect(ctx);
|
|
90
|
-
|
|
89
|
+
evbase_destroy(ctx->evb);
|
|
91
90
|
stats_destroy(ctx->stats);
|
|
92
91
|
server_pool_deinit(&ctx->pool);
|
|
93
92
|
conf_destroy(ctx->cf);
|
|
@@ -99,7 +98,7 @@ core_ctx_create(struct instance *nci)
|
|
|
99
98
|
status = proxy_init(ctx);
|
|
100
99
|
if (status != NC_OK) {
|
|
101
100
|
server_pool_disconnect(ctx);
|
|
102
|
-
|
|
101
|
+
evbase_destroy(ctx->evb);
|
|
103
102
|
stats_destroy(ctx->stats);
|
|
104
103
|
server_pool_deinit(&ctx->pool);
|
|
105
104
|
conf_destroy(ctx->cf);
|
|
@@ -118,7 +117,7 @@ core_ctx_destroy(struct context *ctx)
|
|
|
118
117
|
log_debug(LOG_VVERB, "destroy ctx %p id %"PRIu32"", ctx, ctx->id);
|
|
119
118
|
proxy_deinit(ctx);
|
|
120
119
|
server_pool_disconnect(ctx);
|
|
121
|
-
|
|
120
|
+
evbase_destroy(ctx->evb);
|
|
122
121
|
stats_destroy(ctx->stats);
|
|
123
122
|
server_pool_deinit(&ctx->pool);
|
|
124
123
|
conf_destroy(ctx->cf);
|
|
@@ -206,9 +205,9 @@ core_close(struct context *ctx, struct conn *conn)
|
|
|
206
205
|
conn->eof, conn->done, conn->recv_bytes, conn->send_bytes,
|
|
207
206
|
conn->err ? ':' : ' ', conn->err ? strerror(conn->err) : "");
|
|
208
207
|
|
|
209
|
-
status = event_del_conn(ctx->
|
|
208
|
+
status = event_del_conn(ctx->evb, conn);
|
|
210
209
|
if (status < 0) {
|
|
211
|
-
log_warn("event del conn
|
|
210
|
+
log_warn("event del conn %c %d failed, ignored: %s",
|
|
212
211
|
type, conn->sd, strerror(errno));
|
|
213
212
|
}
|
|
214
213
|
|
|
@@ -277,23 +276,33 @@ core_timeout(struct context *ctx)
|
|
|
277
276
|
}
|
|
278
277
|
|
|
279
278
|
static void
|
|
280
|
-
core_core(
|
|
279
|
+
core_core(void *arg, uint32_t evflags)
|
|
281
280
|
{
|
|
282
281
|
rstatus_t status;
|
|
282
|
+
struct conn *conn = (struct conn *) arg;
|
|
283
|
+
struct context *ctx;
|
|
283
284
|
|
|
284
|
-
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
if ((conn->proxy) || (conn->client)) {
|
|
288
|
+
ctx = ((struct server_pool *) (conn -> owner)) -> ctx;
|
|
289
|
+
} else {
|
|
290
|
+
ctx = ((struct server_pool *) (((struct server *) (conn -> owner)) -> owner )) -> ctx;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
log_debug(LOG_VVERB, "event %04"PRIX32" on %c %d", evflags,
|
|
285
294
|
conn->client ? 'c' : (conn->proxy ? 'p' : 's'), conn->sd);
|
|
286
295
|
|
|
287
|
-
conn->events =
|
|
296
|
+
conn->events = evflags;
|
|
288
297
|
|
|
289
298
|
/* error takes precedence over read | write */
|
|
290
|
-
if (
|
|
299
|
+
if (evflags & EV_ERR) {
|
|
291
300
|
core_error(ctx, conn);
|
|
292
301
|
return;
|
|
293
302
|
}
|
|
294
303
|
|
|
295
304
|
/* read takes precedence over write */
|
|
296
|
-
if (
|
|
305
|
+
if (evflags & EV_READ) {
|
|
297
306
|
status = core_recv(ctx, conn);
|
|
298
307
|
if (status != NC_OK || conn->done || conn->err) {
|
|
299
308
|
core_close(ctx, conn);
|
|
@@ -301,7 +310,7 @@ core_core(struct context *ctx, struct conn *conn, uint32_t events)
|
|
|
301
310
|
}
|
|
302
311
|
}
|
|
303
312
|
|
|
304
|
-
if (
|
|
313
|
+
if (evflags & EV_WRITE) {
|
|
305
314
|
status = core_send(ctx, conn);
|
|
306
315
|
if (status != NC_OK || conn->done || conn->err) {
|
|
307
316
|
core_close(ctx, conn);
|
|
@@ -315,17 +324,11 @@ core_loop(struct context *ctx)
|
|
|
315
324
|
{
|
|
316
325
|
int i, nsd;
|
|
317
326
|
|
|
318
|
-
nsd = event_wait(ctx->
|
|
327
|
+
nsd = event_wait(ctx->evb, ctx->timeout);
|
|
319
328
|
if (nsd < 0) {
|
|
320
329
|
return nsd;
|
|
321
330
|
}
|
|
322
331
|
|
|
323
|
-
for (i = 0; i < nsd; i++) {
|
|
324
|
-
struct epoll_event *ev = &ctx->event[i];
|
|
325
|
-
|
|
326
|
-
core_core(ctx, ev->data.ptr, ev->events);
|
|
327
|
-
}
|
|
328
|
-
|
|
329
332
|
core_timeout(ctx);
|
|
330
333
|
|
|
331
334
|
stats_swap(ctx->stats);
|
|
@@ -40,10 +40,20 @@
|
|
|
40
40
|
# define NC_STATS 0
|
|
41
41
|
#endif
|
|
42
42
|
|
|
43
|
+
#ifdef HAVE_EPOLL
|
|
44
|
+
#define NC_HAVE_EPOLL 1
|
|
45
|
+
#elif HAVE_KQUEUE
|
|
46
|
+
#define NC_HAVE_KQUEUE 1
|
|
47
|
+
#endif
|
|
48
|
+
|
|
43
49
|
#ifdef HAVE_LITTLE_ENDIAN
|
|
44
50
|
# define NC_LITTLE_ENDIAN 1
|
|
45
51
|
#endif
|
|
46
52
|
|
|
53
|
+
#ifdef HAVE_BACKTRACE
|
|
54
|
+
#define NC_HAVE_BACKTRACE 1
|
|
55
|
+
#endif
|
|
56
|
+
|
|
47
57
|
#define NC_OK 0
|
|
48
58
|
#define NC_ERROR -1
|
|
49
59
|
#define NC_EAGAIN -2
|
|
@@ -101,14 +111,12 @@ struct context {
|
|
|
101
111
|
struct stats *stats; /* stats */
|
|
102
112
|
|
|
103
113
|
struct array pool; /* server_pool[] */
|
|
104
|
-
|
|
105
|
-
int ep; /* epoll device */
|
|
106
|
-
int nevent; /* # epoll event */
|
|
114
|
+
struct evbase *evb;
|
|
107
115
|
int max_timeout; /* epoll wait max timeout in msec */
|
|
108
|
-
int timeout;
|
|
109
|
-
struct epoll_event *event; /* epoll event */
|
|
116
|
+
int timeout;
|
|
110
117
|
};
|
|
111
118
|
|
|
119
|
+
|
|
112
120
|
struct instance {
|
|
113
121
|
struct context *ctx; /* active context */
|
|
114
122
|
int log_level; /* log level */
|
|
Binary file
|
|
@@ -16,66 +16,86 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
#include <unistd.h>
|
|
19
|
-
#include <sys/epoll.h>
|
|
20
|
-
|
|
21
19
|
#include <nc_core.h>
|
|
22
20
|
#include <nc_event.h>
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
#ifdef NC_HAVE_EPOLL
|
|
23
|
+
#include <sys/epoll.h>
|
|
24
|
+
|
|
25
|
+
struct evbase *
|
|
26
|
+
evbase_create(int nevent, void (*callback_fp)(void *, uint32_t))
|
|
26
27
|
{
|
|
28
|
+
|
|
29
|
+
struct evbase *evb;
|
|
27
30
|
int status, ep;
|
|
28
31
|
struct epoll_event *event;
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
if (nevent <= 0) {
|
|
34
|
+
log_error("nevent has to be positive %d", nevent);
|
|
35
|
+
return NULL;
|
|
36
|
+
}
|
|
33
37
|
|
|
34
|
-
ep = epoll_create(
|
|
38
|
+
ep = epoll_create(nevent);
|
|
35
39
|
if (ep < 0) {
|
|
36
|
-
log_error("epoll create of size %d failed: %s",
|
|
37
|
-
return
|
|
40
|
+
log_error("epoll create of size %d failed: %s", nevent, strerror(errno));
|
|
41
|
+
return NULL;
|
|
38
42
|
}
|
|
39
43
|
|
|
40
|
-
event = nc_calloc(
|
|
44
|
+
event = nc_calloc(nevent, sizeof(*event));
|
|
41
45
|
if (event == NULL) {
|
|
42
46
|
status = close(ep);
|
|
43
47
|
if (status < 0) {
|
|
44
48
|
log_error("close e %d failed, ignored: %s", ep, strerror(errno));
|
|
45
49
|
}
|
|
46
|
-
return
|
|
50
|
+
return NULL;
|
|
47
51
|
}
|
|
48
52
|
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
evb = nc_alloc(sizeof(*evb));
|
|
54
|
+
if (evb == NULL) {
|
|
55
|
+
nc_free(event);
|
|
56
|
+
status = close(ep);
|
|
57
|
+
if (status < 0) {
|
|
58
|
+
log_error("close e %d failed, ignored: %s", ep, strerror(errno));
|
|
59
|
+
}
|
|
60
|
+
return NULL;
|
|
51
61
|
|
|
52
|
-
|
|
53
|
-
ctx->nevent, ctx->timeout);
|
|
62
|
+
}
|
|
54
63
|
|
|
55
|
-
|
|
64
|
+
evb->nevent = nevent;
|
|
65
|
+
evb->ep = ep;
|
|
66
|
+
evb->event = event;
|
|
67
|
+
evb->callback_fp = callback_fp;
|
|
68
|
+
|
|
69
|
+
log_debug(LOG_INFO, "e %d with nevent %d", evb->ep,
|
|
70
|
+
evb->nevent);
|
|
71
|
+
|
|
72
|
+
return evb;
|
|
56
73
|
}
|
|
57
74
|
|
|
58
75
|
void
|
|
59
|
-
|
|
76
|
+
evbase_destroy(struct evbase *evb)
|
|
60
77
|
{
|
|
61
78
|
int status;
|
|
62
79
|
|
|
63
|
-
|
|
80
|
+
if (evb == NULL) return;
|
|
64
81
|
|
|
65
|
-
|
|
82
|
+
ASSERT(evb->ep >= 0);
|
|
66
83
|
|
|
67
|
-
|
|
84
|
+
nc_free(evb->event);
|
|
85
|
+
|
|
86
|
+
status = close(evb->ep);
|
|
68
87
|
if (status < 0) {
|
|
69
|
-
log_error("close e %d failed, ignored: %s",
|
|
88
|
+
log_error("close e %d failed, ignored: %s", evb->ep, strerror(errno));
|
|
70
89
|
}
|
|
71
|
-
|
|
90
|
+
nc_free(evb);
|
|
72
91
|
}
|
|
73
92
|
|
|
74
93
|
int
|
|
75
|
-
event_add_out(
|
|
94
|
+
event_add_out(struct evbase *evb, struct conn *c)
|
|
76
95
|
{
|
|
77
96
|
int status;
|
|
78
97
|
struct epoll_event event;
|
|
98
|
+
int ep = evb->ep;
|
|
79
99
|
|
|
80
100
|
ASSERT(ep > 0);
|
|
81
101
|
ASSERT(c != NULL);
|
|
@@ -101,10 +121,11 @@ event_add_out(int ep, struct conn *c)
|
|
|
101
121
|
}
|
|
102
122
|
|
|
103
123
|
int
|
|
104
|
-
event_del_out(
|
|
124
|
+
event_del_out(struct evbase *evb, struct conn *c)
|
|
105
125
|
{
|
|
106
126
|
int status;
|
|
107
127
|
struct epoll_event event;
|
|
128
|
+
int ep = evb->ep;
|
|
108
129
|
|
|
109
130
|
ASSERT(ep > 0);
|
|
110
131
|
ASSERT(c != NULL);
|
|
@@ -130,10 +151,11 @@ event_del_out(int ep, struct conn *c)
|
|
|
130
151
|
}
|
|
131
152
|
|
|
132
153
|
int
|
|
133
|
-
event_add_conn(
|
|
154
|
+
event_add_conn(struct evbase *evb, struct conn *c)
|
|
134
155
|
{
|
|
135
156
|
int status;
|
|
136
157
|
struct epoll_event event;
|
|
158
|
+
int ep = evb->ep;
|
|
137
159
|
|
|
138
160
|
ASSERT(ep > 0);
|
|
139
161
|
ASSERT(c != NULL);
|
|
@@ -155,9 +177,10 @@ event_add_conn(int ep, struct conn *c)
|
|
|
155
177
|
}
|
|
156
178
|
|
|
157
179
|
int
|
|
158
|
-
event_del_conn(
|
|
180
|
+
event_del_conn(struct evbase *evb, struct conn *c)
|
|
159
181
|
{
|
|
160
182
|
int status;
|
|
183
|
+
int ep = evb->ep;
|
|
161
184
|
|
|
162
185
|
ASSERT(ep > 0);
|
|
163
186
|
ASSERT(c != NULL);
|
|
@@ -176,9 +199,14 @@ event_del_conn(int ep, struct conn *c)
|
|
|
176
199
|
}
|
|
177
200
|
|
|
178
201
|
int
|
|
179
|
-
event_wait(
|
|
202
|
+
event_wait(struct evbase *evb, int timeout)
|
|
180
203
|
{
|
|
181
|
-
int nsd;
|
|
204
|
+
int nsd, i;
|
|
205
|
+
uint32_t evflags = 0;
|
|
206
|
+
int ep = evb->ep;
|
|
207
|
+
struct epoll_event *event = evb->event;
|
|
208
|
+
int nevent = evb->nevent;
|
|
209
|
+
void (*callback_fp)(void *, uint32_t) = evb->callback_fp;
|
|
182
210
|
|
|
183
211
|
ASSERT(ep > 0);
|
|
184
212
|
ASSERT(event != NULL);
|
|
@@ -187,6 +215,22 @@ event_wait(int ep, struct epoll_event *event, int nevent, int timeout)
|
|
|
187
215
|
for (;;) {
|
|
188
216
|
nsd = epoll_wait(ep, event, nevent, timeout);
|
|
189
217
|
if (nsd > 0) {
|
|
218
|
+
for (i = 0; i < nsd; i++) {
|
|
219
|
+
struct epoll_event *ev = &evb->event[i];
|
|
220
|
+
|
|
221
|
+
evflags = 0;
|
|
222
|
+
if (ev->events & EPOLLERR)
|
|
223
|
+
evflags |= EV_ERR;
|
|
224
|
+
|
|
225
|
+
if (ev->events & EPOLLIN)
|
|
226
|
+
evflags |= EV_READ;
|
|
227
|
+
|
|
228
|
+
if (ev->events & EPOLLOUT)
|
|
229
|
+
evflags |= EV_WRITE;
|
|
230
|
+
|
|
231
|
+
if (callback_fp != NULL)
|
|
232
|
+
(*callback_fp)((void *) ev->data.ptr, evflags);
|
|
233
|
+
}
|
|
190
234
|
return nsd;
|
|
191
235
|
}
|
|
192
236
|
|
|
@@ -209,6 +253,26 @@ event_wait(int ep, struct epoll_event *event, int nevent, int timeout)
|
|
|
209
253
|
|
|
210
254
|
return -1;
|
|
211
255
|
}
|
|
212
|
-
|
|
213
256
|
NOT_REACHED();
|
|
214
257
|
}
|
|
258
|
+
|
|
259
|
+
int
|
|
260
|
+
event_add_st(struct evbase *evb, int fd)
|
|
261
|
+
{
|
|
262
|
+
int status;
|
|
263
|
+
struct epoll_event ev;
|
|
264
|
+
|
|
265
|
+
ev.data.fd = fd;
|
|
266
|
+
ev.events = EPOLLIN;
|
|
267
|
+
|
|
268
|
+
status = epoll_ctl(evb->ep, EPOLL_CTL_ADD, fd, &ev);
|
|
269
|
+
if (status < 0) {
|
|
270
|
+
log_error("epoll ctl on e %d sd %d failed: %s", evb->ep, fd,
|
|
271
|
+
strerror(errno));
|
|
272
|
+
return status;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return status;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
#endif /* NC_HAVE_EPOLL */
|