libcouchbase 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +35 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +389 -0
- data/Rakefile +75 -0
- data/ext/README.md +6 -0
- data/ext/Rakefile +20 -0
- data/ext/libcouchbase/.gitignore +130 -0
- data/ext/libcouchbase/.travis.yml +19 -0
- data/ext/libcouchbase/CMakeLists.txt +429 -0
- data/ext/libcouchbase/CONTRIBUTING.md +124 -0
- data/ext/libcouchbase/LICENSE +202 -0
- data/ext/libcouchbase/README.markdown +163 -0
- data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -0
- data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
- data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
- data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +20 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +52 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -0
- data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
- data/ext/libcouchbase/cmake/config-cmake.h.in +60 -0
- data/ext/libcouchbase/cmake/configure +357 -0
- data/ext/libcouchbase/cmake/defs.mk.in +8 -0
- data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
- data/ext/libcouchbase/cmake/source_files.cmake +73 -0
- data/ext/libcouchbase/configure.pl +1 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
- data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
- data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
- data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
- data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
- data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
- data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
- data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
- data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
- data/ext/libcouchbase/contrib/genhash/genhash.h +235 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
- data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
- data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
- data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4892 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
- data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -0
- data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
- data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
- data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +71 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +98 -0
- data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -0
- data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
- data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
- data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
- data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
- data/ext/libcouchbase/example/CMakeLists.txt +37 -0
- data/ext/libcouchbase/example/README.markdown +47 -0
- data/ext/libcouchbase/example/db/db.c +167 -0
- data/ext/libcouchbase/example/db/vb.c +227 -0
- data/ext/libcouchbase/example/instancepool/main.cc +102 -0
- data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
- data/ext/libcouchbase/example/instancepool/pool.h +69 -0
- data/ext/libcouchbase/example/libeventdirect/main.c +148 -0
- data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
- data/ext/libcouchbase/example/minimal/minimal.c +130 -0
- data/ext/libcouchbase/example/observe/observe.c +146 -0
- data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
- data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
- data/ext/libcouchbase/example/tick/tick.c +119 -0
- data/ext/libcouchbase/example/views/views-example.cc +83 -0
- data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
- data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
- data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
- data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
- data/ext/libcouchbase/include/libcouchbase/cbft.h +109 -0
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
- data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
- data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
- data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
- data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
- data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
- data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
- data/ext/libcouchbase/include/libcouchbase/subdoc.h +312 -0
- data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
- data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -0
- data/ext/libcouchbase/include/memcached/COPYING +30 -0
- data/ext/libcouchbase/include/memcached/README +10 -0
- data/ext/libcouchbase/include/memcached/protocol_binary.h +1916 -0
- data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
- data/ext/libcouchbase/packaging/README +7 -0
- data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
- data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
- data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
- data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
- data/ext/libcouchbase/packaging/deb/compat +1 -0
- data/ext/libcouchbase/packaging/deb/control +73 -0
- data/ext/libcouchbase/packaging/deb/copyright +10 -0
- data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
- data/ext/libcouchbase/packaging/deb/package.mk +31 -0
- data/ext/libcouchbase/packaging/deb/rules +46 -0
- data/ext/libcouchbase/packaging/deb/source/format +1 -0
- data/ext/libcouchbase/packaging/distinfo/README +1 -0
- data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
- data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
- data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
- data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
- data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
- data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +108 -0
- data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
- data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +466 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
- data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +29 -0
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
- data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
- data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -0
- data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
- data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
- data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +42 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
- data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
- data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
- data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
- data/ext/libcouchbase/src/README.md +103 -0
- data/ext/libcouchbase/src/aspend.h +106 -0
- data/ext/libcouchbase/src/auth.cc +74 -0
- data/ext/libcouchbase/src/auth.h +54 -0
- data/ext/libcouchbase/src/bootstrap.c +269 -0
- data/ext/libcouchbase/src/bootstrap.h +129 -0
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
- data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
- data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
- data/ext/libcouchbase/src/callbacks.c +378 -0
- data/ext/libcouchbase/src/cbft.cc +210 -0
- data/ext/libcouchbase/src/cntl.cc +847 -0
- data/ext/libcouchbase/src/config_static.h +159 -0
- data/ext/libcouchbase/src/connspec.cc +462 -0
- data/ext/libcouchbase/src/connspec.h +105 -0
- data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
- data/ext/libcouchbase/src/dump.c +98 -0
- data/ext/libcouchbase/src/getconfig.c +100 -0
- data/ext/libcouchbase/src/gethrtime.c +109 -0
- data/ext/libcouchbase/src/handler.c +922 -0
- data/ext/libcouchbase/src/hashset.c +164 -0
- data/ext/libcouchbase/src/hashset.h +86 -0
- data/ext/libcouchbase/src/hashtable.c +75 -0
- data/ext/libcouchbase/src/hdr_timings.c +92 -0
- data/ext/libcouchbase/src/hostlist.cc +301 -0
- data/ext/libcouchbase/src/hostlist.h +171 -0
- data/ext/libcouchbase/src/http/http-priv.h +307 -0
- data/ext/libcouchbase/src/http/http.cc +633 -0
- data/ext/libcouchbase/src/http/http.h +34 -0
- data/ext/libcouchbase/src/http/http_io.cc +307 -0
- data/ext/libcouchbase/src/instance.cc +722 -0
- data/ext/libcouchbase/src/internal.h +244 -0
- data/ext/libcouchbase/src/iofactory.c +575 -0
- data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
- data/ext/libcouchbase/src/jsparse/parser.h +173 -0
- data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
- data/ext/libcouchbase/src/lcbio/connect.c +557 -0
- data/ext/libcouchbase/src/lcbio/connect.h +364 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +611 -0
- data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
- data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
- data/ext/libcouchbase/src/lcbio/iotable.h +84 -0
- data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
- data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
- data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
- data/ext/libcouchbase/src/lcbio/manager.c +584 -0
- data/ext/libcouchbase/src/lcbio/manager.h +156 -0
- data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
- data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
- data/ext/libcouchbase/src/lcbio/ssl.h +149 -0
- data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
- data/ext/libcouchbase/src/lcbio/timer.c +132 -0
- data/ext/libcouchbase/src/legacy.c +430 -0
- data/ext/libcouchbase/src/list.c +144 -0
- data/ext/libcouchbase/src/list.h +127 -0
- data/ext/libcouchbase/src/logging.c +244 -0
- data/ext/libcouchbase/src/logging.h +86 -0
- data/ext/libcouchbase/src/mc/compress.c +90 -0
- data/ext/libcouchbase/src/mc/compress.h +61 -0
- data/ext/libcouchbase/src/mc/forward.c +186 -0
- data/ext/libcouchbase/src/mc/forward.h +90 -0
- data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
- data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
- data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +111 -0
- data/ext/libcouchbase/src/mc/mcreq.c +954 -0
- data/ext/libcouchbase/src/mc/mcreq.h +977 -0
- data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
- data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
- data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
- data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
- data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
- data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
- data/ext/libcouchbase/src/n1ql/params.cc +215 -0
- data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
- data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
- data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
- data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
- data/ext/libcouchbase/src/newconfig.c +385 -0
- data/ext/libcouchbase/src/nodeinfo.cc +194 -0
- data/ext/libcouchbase/src/operations/cbflush.c +71 -0
- data/ext/libcouchbase/src/operations/counter.c +116 -0
- data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
- data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
- data/ext/libcouchbase/src/operations/durability.c +668 -0
- data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
- data/ext/libcouchbase/src/operations/get.c +409 -0
- data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
- data/ext/libcouchbase/src/operations/observe.c +340 -0
- data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
- data/ext/libcouchbase/src/operations/remove.c +83 -0
- data/ext/libcouchbase/src/operations/stats.c +461 -0
- data/ext/libcouchbase/src/operations/store.c +360 -0
- data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
- data/ext/libcouchbase/src/operations/touch.c +81 -0
- data/ext/libcouchbase/src/packetutils.c +60 -0
- data/ext/libcouchbase/src/packetutils.h +147 -0
- data/ext/libcouchbase/src/probes.d +211 -0
- data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
- data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
- data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
- data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
- data/ext/libcouchbase/src/rdb/rope.c +419 -0
- data/ext/libcouchbase/src/rdb/rope.h +488 -0
- data/ext/libcouchbase/src/retrychk.c +113 -0
- data/ext/libcouchbase/src/retryq.c +424 -0
- data/ext/libcouchbase/src/retryq.h +157 -0
- data/ext/libcouchbase/src/ringbuffer.c +442 -0
- data/ext/libcouchbase/src/ringbuffer.h +100 -0
- data/ext/libcouchbase/src/settings.c +95 -0
- data/ext/libcouchbase/src/settings.h +188 -0
- data/ext/libcouchbase/src/simplestring.c +211 -0
- data/ext/libcouchbase/src/simplestring.h +228 -0
- data/ext/libcouchbase/src/sllist-inl.h +197 -0
- data/ext/libcouchbase/src/sllist.h +76 -0
- data/ext/libcouchbase/src/ssl/CMakeLists.txt +23 -0
- data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
- data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
- data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
- data/ext/libcouchbase/src/ssobuf.h +82 -0
- data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
- data/ext/libcouchbase/src/timings.c +208 -0
- data/ext/libcouchbase/src/trace.h +105 -0
- data/ext/libcouchbase/src/utilities.c +171 -0
- data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
- data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
- data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
- data/ext/libcouchbase/src/vbucket/hash.h +30 -0
- data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
- data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
- data/ext/libcouchbase/src/vbucket/vbucket.c +1543 -0
- data/ext/libcouchbase/src/views/docreq.c +194 -0
- data/ext/libcouchbase/src/views/docreq.h +83 -0
- data/ext/libcouchbase/src/views/viewreq.c +358 -0
- data/ext/libcouchbase/src/views/viewreq.h +36 -0
- data/ext/libcouchbase/src/wait.c +161 -0
- data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
- data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
- data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
- data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
- data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
- data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
- data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
- data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
- data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
- data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
- data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
- data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +18 -0
- data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
- data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
- data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
- data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
- data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
- data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
- data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
- data/ext/libcouchbase/tests/check-all.cc +608 -0
- data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -0
- data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
- data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.cc +104 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
- data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
- data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
- data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
- data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
- data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
- data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.cc +524 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
- data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
- data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
- data/ext/libcouchbase/tests/iotests/t_behavior.cc +226 -0
- data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
- data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
- data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -0
- data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
- data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
- data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
- data/ext/libcouchbase/tests/iotests/t_lock.cc +275 -0
- data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -0
- data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
- data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
- data/ext/libcouchbase/tests/iotests/t_netfail.cc +654 -0
- data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
- data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
- data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
- data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
- data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
- data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
- data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
- data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
- data/ext/libcouchbase/tests/iotests/testutil.cc +250 -0
- data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
- data/ext/libcouchbase/tests/mc/mctest.h +119 -0
- data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
- data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
- data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
- data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
- data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
- data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
- data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
- data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
- data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
- data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
- data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
- data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
- data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
- data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
- data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
- data/ext/libcouchbase/tests/socktests/socktest.cc +347 -0
- data/ext/libcouchbase/tests/socktests/socktest.h +448 -0
- data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
- data/ext/libcouchbase/tests/socktests/t_manager.cc +179 -0
- data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
- data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
- data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
- data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
- data/ext/libcouchbase/tests/start_mock.bat +15 -0
- data/ext/libcouchbase/tests/start_mock.sh +42 -0
- data/ext/libcouchbase/tests/unit_tests.cc +43 -0
- data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
- data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
- data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
- data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
- data/ext/libcouchbase/tools/cbc.cc +1541 -0
- data/ext/libcouchbase/tools/common/histogram.cc +43 -0
- data/ext/libcouchbase/tools/common/histogram.h +23 -0
- data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
- data/ext/libcouchbase/tools/common/options.cc +420 -0
- data/ext/libcouchbase/tools/common/options.h +81 -0
- data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
- data/ext/libcouchbase/tools/docgen/loc.h +210 -0
- data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
- data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
- data/lib/libcouchbase.rb +36 -0
- data/lib/libcouchbase/bucket.rb +819 -0
- data/lib/libcouchbase/callbacks.rb +72 -0
- data/lib/libcouchbase/connection.rb +790 -0
- data/lib/libcouchbase/design_docs.rb +86 -0
- data/lib/libcouchbase/error.rb +68 -0
- data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
- data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
- data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
- data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
- data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
- data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
- data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
- data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
- data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
- data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
- data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
- data/lib/libcouchbase/ext/tasks.rb +87 -0
- data/lib/libcouchbase/n1ql.rb +73 -0
- data/lib/libcouchbase/query_full_text.rb +147 -0
- data/lib/libcouchbase/query_n1ql.rb +121 -0
- data/lib/libcouchbase/query_view.rb +129 -0
- data/lib/libcouchbase/results_fiber.rb +262 -0
- data/lib/libcouchbase/results_native.rb +211 -0
- data/lib/libcouchbase/version.rb +5 -0
- data/libcouchbase.gemspec +61 -0
- data/spec/bucket_spec.rb +270 -0
- data/spec/connection_spec.rb +277 -0
- data/spec/design_docs_spec.rb +23 -0
- data/spec/error_spec.rb +26 -0
- data/spec/fts_spec.rb +129 -0
- data/spec/n1ql_spec.rb +201 -0
- data/spec/results_libuv_spec.rb +229 -0
- data/spec/results_native_spec.rb +259 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
- data/spec/view_spec.rb +195 -0
- metadata +775 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2013 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* New-Style v1 plugin for Windows, Using IOCP
|
|
20
|
+
* @author Mark Nunberg
|
|
21
|
+
* @author Sergey Avseyev
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#include "iocp_iops.h"
|
|
25
|
+
|
|
26
|
+
static int iocp_timer_cmp_asc(lcb_list_t *a, lcb_list_t *b)
|
|
27
|
+
{
|
|
28
|
+
iocp_timer_t *aa, *bb;
|
|
29
|
+
|
|
30
|
+
aa = LCB_LIST_ITEM(a, iocp_timer_t, list);
|
|
31
|
+
bb = LCB_LIST_ITEM(b, iocp_timer_t, list);
|
|
32
|
+
if (aa->ms > bb->ms) {
|
|
33
|
+
return 1;
|
|
34
|
+
} else if (aa->ms < bb->ms) {
|
|
35
|
+
return -1;
|
|
36
|
+
} else {
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
lcb_uint64_t iocp_tmq_next_timeout(lcb_list_t *list, lcb_uint64_t now)
|
|
42
|
+
{
|
|
43
|
+
if (LCB_LIST_IS_EMPTY(list)) {
|
|
44
|
+
return INFINITE;
|
|
45
|
+
|
|
46
|
+
} else {
|
|
47
|
+
iocp_timer_t *tt;
|
|
48
|
+
tt = LCB_LIST_ITEM(list->next, iocp_timer_t, list);
|
|
49
|
+
return tt->ms > now ? tt->ms - now : 0;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
iocp_timer_t *iocp_tmq_pop(lcb_list_t *list, lcb_uint64_t now)
|
|
54
|
+
{
|
|
55
|
+
iocp_timer_t *tt;
|
|
56
|
+
|
|
57
|
+
if (LCB_LIST_IS_EMPTY(list)) {
|
|
58
|
+
return NULL;
|
|
59
|
+
}
|
|
60
|
+
tt = LCB_LIST_ITEM(list->next, iocp_timer_t, list);
|
|
61
|
+
if (tt->ms > now) {
|
|
62
|
+
return NULL;
|
|
63
|
+
}
|
|
64
|
+
lcb_list_delete(&tt->list);
|
|
65
|
+
return tt;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void iocp_tmq_add(lcb_list_t *list, iocp_timer_t *timer)
|
|
69
|
+
{
|
|
70
|
+
IOCP_LOG(IOCP_TRACE, "Adding timer %p with ms %lu", timer, timer->ms);
|
|
71
|
+
lcb_list_add_sorted(list, &timer->list, iocp_timer_cmp_asc);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
void iocp_tmq_del(lcb_list_t *list, iocp_timer_t *timer)
|
|
75
|
+
{
|
|
76
|
+
lcb_list_delete(&timer->list);
|
|
77
|
+
IOCP_LOG(IOCP_TRACE, "Removing %p. Empty?=%d", timer, LCB_LIST_IS_EMPTY(list));
|
|
78
|
+
(void)list;
|
|
79
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2013 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* New-Style v2 plugin for Windows, Using IOCP.
|
|
20
|
+
* This file contains various utility functions used by the plugin
|
|
21
|
+
* @author Mark Nunberg
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#include "iocp_iops.h"
|
|
25
|
+
#include <sys/types.h>
|
|
26
|
+
#include <sys/timeb.h>
|
|
27
|
+
#include <time.h>
|
|
28
|
+
#include "config.h"
|
|
29
|
+
#include <libcouchbase/plugins/io/wsaerr-inl.c>
|
|
30
|
+
|
|
31
|
+
#if defined(__MINGW32__) && !defined(_ftime_s)
|
|
32
|
+
#define _ftime_s _ftime /** Mingw doens't have the _s variant */
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
int iocp_w32err_2errno(DWORD error)
|
|
36
|
+
{
|
|
37
|
+
return wsaerr_map_impl(error);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
DWORD iocp_set_last_error(lcb_io_opt_t io, SOCKET sock)
|
|
41
|
+
{
|
|
42
|
+
int werr = GetLastError();
|
|
43
|
+
io->v.v2.error = iocp_w32err_2errno(werr);
|
|
44
|
+
return werr;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
lcb_uint32_t iocp_micros(void)
|
|
48
|
+
{
|
|
49
|
+
return (lcb_uint32_t)(gethrtime() / 1000);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
LPFN_CONNECTEX iocp_initialize_connectex(SOCKET sock)
|
|
53
|
+
{
|
|
54
|
+
LPFN_CONNECTEX ret = NULL;
|
|
55
|
+
DWORD dwBytes;
|
|
56
|
+
GUID ce_guid = WSAID_CONNECTEX;
|
|
57
|
+
|
|
58
|
+
WSAIoctl(sock,
|
|
59
|
+
SIO_GET_EXTENSION_FUNCTION_POINTER,
|
|
60
|
+
&ce_guid,
|
|
61
|
+
sizeof(ce_guid),
|
|
62
|
+
&ret,
|
|
63
|
+
sizeof(&ret),
|
|
64
|
+
&dwBytes,
|
|
65
|
+
NULL,
|
|
66
|
+
NULL);
|
|
67
|
+
|
|
68
|
+
return ret;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
int iocp_just_scheduled(iocp_t *io, iocp_overlapped_t *ol, int status)
|
|
72
|
+
{
|
|
73
|
+
DWORD err = GetLastError();
|
|
74
|
+
IOCP_LOG(IOCP_TRACE, "Pending count: %d", io->n_iopending);
|
|
75
|
+
if ((status != 0 && err == WSA_IO_PENDING) || status == 0) {
|
|
76
|
+
io->n_iopending++;
|
|
77
|
+
ol->sd->refcount++;
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Otherwise, there's something wrong
|
|
83
|
+
*/
|
|
84
|
+
IOCP_LOG(IOCP_ERR, "Got non-harmless error for %p: %d", ol, (int)err);
|
|
85
|
+
io->base.v.v2.error = iocp_w32err_2errno(err);
|
|
86
|
+
return -1;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
void iocp_socket_decref(iocp_t *io, iocp_sockdata_t *sd)
|
|
90
|
+
{
|
|
91
|
+
if (--sd->refcount) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (sd->sSocket != INVALID_SOCKET) {
|
|
96
|
+
closesocket(sd->sSocket);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
lcb_list_delete(&sd->list);
|
|
100
|
+
|
|
101
|
+
(void)io;
|
|
102
|
+
free(sd);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
void iocp_on_dequeued(iocp_t *io, iocp_sockdata_t *sd, int action)
|
|
106
|
+
{
|
|
107
|
+
IOCP_LOG(IOCP_TRACE, "Dequeing. A=%d, Pending=%d", action, io->n_iopending);
|
|
108
|
+
iocp_socket_decref(io, sd);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**This following function was copied from libuv.
|
|
112
|
+
* See http://github.com/joyent/libuv for more details */
|
|
113
|
+
int iocp_overlapped_status(OVERLAPPED *lpOverlapped)
|
|
114
|
+
{
|
|
115
|
+
NTSTATUS status = (NTSTATUS)lpOverlapped->Internal;
|
|
116
|
+
switch (status) {
|
|
117
|
+
case 0:
|
|
118
|
+
return ERROR_SUCCESS;
|
|
119
|
+
|
|
120
|
+
case STATUS_PENDING:
|
|
121
|
+
return ERROR_IO_PENDING;
|
|
122
|
+
|
|
123
|
+
case STATUS_INVALID_HANDLE:
|
|
124
|
+
case STATUS_OBJECT_TYPE_MISMATCH:
|
|
125
|
+
return WSAENOTSOCK;
|
|
126
|
+
|
|
127
|
+
case STATUS_INSUFFICIENT_RESOURCES:
|
|
128
|
+
case STATUS_PAGEFILE_QUOTA:
|
|
129
|
+
case STATUS_COMMITMENT_LIMIT:
|
|
130
|
+
case STATUS_WORKING_SET_QUOTA:
|
|
131
|
+
case STATUS_NO_MEMORY:
|
|
132
|
+
case STATUS_CONFLICTING_ADDRESSES:
|
|
133
|
+
case STATUS_QUOTA_EXCEEDED:
|
|
134
|
+
case STATUS_TOO_MANY_PAGING_FILES:
|
|
135
|
+
case STATUS_REMOTE_RESOURCES:
|
|
136
|
+
case STATUS_TOO_MANY_ADDRESSES:
|
|
137
|
+
return WSAENOBUFS;
|
|
138
|
+
|
|
139
|
+
case STATUS_SHARING_VIOLATION:
|
|
140
|
+
case STATUS_ADDRESS_ALREADY_EXISTS:
|
|
141
|
+
return WSAEADDRINUSE;
|
|
142
|
+
|
|
143
|
+
case STATUS_LINK_TIMEOUT:
|
|
144
|
+
case STATUS_IO_TIMEOUT:
|
|
145
|
+
case STATUS_TIMEOUT:
|
|
146
|
+
return WSAETIMEDOUT;
|
|
147
|
+
|
|
148
|
+
case STATUS_GRACEFUL_DISCONNECT:
|
|
149
|
+
return WSAEDISCON;
|
|
150
|
+
|
|
151
|
+
case STATUS_REMOTE_DISCONNECT:
|
|
152
|
+
case STATUS_CONNECTION_RESET:
|
|
153
|
+
case STATUS_LINK_FAILED:
|
|
154
|
+
case STATUS_CONNECTION_DISCONNECTED:
|
|
155
|
+
case STATUS_PORT_UNREACHABLE:
|
|
156
|
+
case STATUS_HOPLIMIT_EXCEEDED:
|
|
157
|
+
return WSAECONNRESET;
|
|
158
|
+
|
|
159
|
+
case STATUS_LOCAL_DISCONNECT:
|
|
160
|
+
case STATUS_TRANSACTION_ABORTED:
|
|
161
|
+
case STATUS_CONNECTION_ABORTED:
|
|
162
|
+
return WSAECONNABORTED;
|
|
163
|
+
|
|
164
|
+
case STATUS_BAD_NETWORK_PATH:
|
|
165
|
+
case STATUS_NETWORK_UNREACHABLE:
|
|
166
|
+
case STATUS_PROTOCOL_UNREACHABLE:
|
|
167
|
+
return WSAENETUNREACH;
|
|
168
|
+
|
|
169
|
+
case STATUS_HOST_UNREACHABLE:
|
|
170
|
+
return WSAEHOSTUNREACH;
|
|
171
|
+
|
|
172
|
+
case STATUS_CANCELLED:
|
|
173
|
+
case STATUS_REQUEST_ABORTED:
|
|
174
|
+
return WSAEINTR;
|
|
175
|
+
|
|
176
|
+
case STATUS_BUFFER_OVERFLOW:
|
|
177
|
+
case STATUS_INVALID_BUFFER_SIZE:
|
|
178
|
+
return WSAEMSGSIZE;
|
|
179
|
+
|
|
180
|
+
case STATUS_BUFFER_TOO_SMALL:
|
|
181
|
+
case STATUS_ACCESS_VIOLATION:
|
|
182
|
+
return WSAEFAULT;
|
|
183
|
+
|
|
184
|
+
case STATUS_DEVICE_NOT_READY:
|
|
185
|
+
case STATUS_REQUEST_NOT_ACCEPTED:
|
|
186
|
+
return WSAEWOULDBLOCK;
|
|
187
|
+
|
|
188
|
+
case STATUS_INVALID_NETWORK_RESPONSE:
|
|
189
|
+
case STATUS_NETWORK_BUSY:
|
|
190
|
+
case STATUS_NO_SUCH_DEVICE:
|
|
191
|
+
case STATUS_NO_SUCH_FILE:
|
|
192
|
+
case STATUS_OBJECT_PATH_NOT_FOUND:
|
|
193
|
+
case STATUS_OBJECT_NAME_NOT_FOUND:
|
|
194
|
+
case STATUS_UNEXPECTED_NETWORK_ERROR:
|
|
195
|
+
return WSAENETDOWN;
|
|
196
|
+
|
|
197
|
+
case STATUS_INVALID_CONNECTION:
|
|
198
|
+
return WSAENOTCONN;
|
|
199
|
+
|
|
200
|
+
case STATUS_REMOTE_NOT_LISTENING:
|
|
201
|
+
case STATUS_CONNECTION_REFUSED:
|
|
202
|
+
return WSAECONNREFUSED;
|
|
203
|
+
|
|
204
|
+
case STATUS_PIPE_DISCONNECTED:
|
|
205
|
+
return WSAESHUTDOWN;
|
|
206
|
+
|
|
207
|
+
case STATUS_INVALID_ADDRESS:
|
|
208
|
+
case STATUS_INVALID_ADDRESS_COMPONENT:
|
|
209
|
+
return WSAEADDRNOTAVAIL;
|
|
210
|
+
|
|
211
|
+
case STATUS_NOT_SUPPORTED:
|
|
212
|
+
case STATUS_NOT_IMPLEMENTED:
|
|
213
|
+
return WSAEOPNOTSUPP;
|
|
214
|
+
|
|
215
|
+
case STATUS_ACCESS_DENIED:
|
|
216
|
+
return WSAEACCES;
|
|
217
|
+
|
|
218
|
+
default:
|
|
219
|
+
if ((status & (FACILITY_NTWIN32 << 16)) == (FACILITY_NTWIN32 << 16) &&
|
|
220
|
+
(status & (ERROR_SEVERITY_ERROR | ERROR_SEVERITY_WARNING))) {
|
|
221
|
+
/* It's a windows error that has been previously mapped to an */
|
|
222
|
+
/* ntstatus code. */
|
|
223
|
+
return (DWORD)(status & 0xffff);
|
|
224
|
+
} else {
|
|
225
|
+
/* The default fallback for unmappable ntstatus codes. */
|
|
226
|
+
return WSAEINVAL;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
INSTALL(
|
|
2
|
+
FILES
|
|
3
|
+
libev_io_opts.h
|
|
4
|
+
DESTINATION
|
|
5
|
+
include/libcouchbase)
|
|
6
|
+
|
|
7
|
+
IF(NOT (HAVE_LIBEV3 OR HAVE_LIBEV4))
|
|
8
|
+
RETURN()
|
|
9
|
+
ENDIF()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
ADD_LIBRARY(couchbase_libev SHARED plugin-libev.c)
|
|
13
|
+
SET_TARGET_PROPERTIES(couchbase_libev
|
|
14
|
+
PROPERTIES
|
|
15
|
+
PREFIX "lib"
|
|
16
|
+
IMPORT_PREFIX "lib"
|
|
17
|
+
COMPILE_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CORE_CFLAGS} -std=gnu99")
|
|
18
|
+
TARGET_LINK_LIBRARIES(couchbase_libev ${LIBEV_LIBRARIES})
|
|
19
|
+
INCLUDE_DIRECTORIES(AFTER ${LIBEV_INCLUDE_DIR})
|
|
20
|
+
|
|
21
|
+
IF(HAVE_LIBEV4)
|
|
22
|
+
ADD_DEFINITIONS(-DHAVE_LIBEV4)
|
|
23
|
+
ELSE()
|
|
24
|
+
ADD_DEFINITIONS(-DHAVE_LIBEV3)
|
|
25
|
+
ENDIF()
|
|
26
|
+
|
|
27
|
+
INSTALL(TARGETS
|
|
28
|
+
couchbase_libev
|
|
29
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2011-2012 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @file
|
|
20
|
+
* libev integration with libcouchbase
|
|
21
|
+
* @author Sergey Avseyev
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @ingroup lcb-io-plugin-api
|
|
26
|
+
* @defgroup lcb-libev libev
|
|
27
|
+
* @brief libev integration
|
|
28
|
+
*
|
|
29
|
+
* @details
|
|
30
|
+
* libcouchbase_create_libev_io_opts() allows you to create an instance
|
|
31
|
+
* of the ioopts that will utilize libev. You may either supply an event
|
|
32
|
+
* loop (if you'd like to add your own events into the loop), or it will
|
|
33
|
+
* create it's own.
|
|
34
|
+
*
|
|
35
|
+
* @addtogroup lcb-libev
|
|
36
|
+
* @{
|
|
37
|
+
*/
|
|
38
|
+
#ifndef LIBCOUCHBASE_LIBEV_IO_OPTS_H
|
|
39
|
+
#define LIBCOUCHBASE_LIBEV_IO_OPTS_H 1
|
|
40
|
+
|
|
41
|
+
#include <libcouchbase/couchbase.h>
|
|
42
|
+
|
|
43
|
+
#ifdef __cplusplus
|
|
44
|
+
extern "C" {
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Create an instance of an event handler that utilize libev for
|
|
49
|
+
* event notification.
|
|
50
|
+
*
|
|
51
|
+
* @param version the API version to use
|
|
52
|
+
* @param loop the event loop (struct ev_loop *) to hook use (please
|
|
53
|
+
* note that you shouldn't reference the event loop from
|
|
54
|
+
* multiple threads)
|
|
55
|
+
* @param io a pointer to a newly created and initialized event handler
|
|
56
|
+
* @return status of the operation
|
|
57
|
+
*/
|
|
58
|
+
LIBCOUCHBASE_API
|
|
59
|
+
lcb_error_t lcb_create_libev_io_opts(int version, lcb_io_opt_t *io, void *loop);
|
|
60
|
+
#ifdef __cplusplus
|
|
61
|
+
}
|
|
62
|
+
#endif
|
|
63
|
+
|
|
64
|
+
/**@}*/
|
|
65
|
+
#endif
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2012 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* This file contains IO operations that use libev
|
|
20
|
+
*
|
|
21
|
+
* @author Sergey Avseyev
|
|
22
|
+
*/
|
|
23
|
+
#define LCB_IOPS_V12_NO_DEPRECATE
|
|
24
|
+
#include "config.h"
|
|
25
|
+
#ifdef HAVE_LIBEV_EV_H
|
|
26
|
+
#include <libev/ev.h>
|
|
27
|
+
#else
|
|
28
|
+
#include <ev.h>
|
|
29
|
+
#endif
|
|
30
|
+
#include "libev_io_opts.h"
|
|
31
|
+
#include <errno.h>
|
|
32
|
+
#include <sys/types.h>
|
|
33
|
+
#include <sys/socket.h>
|
|
34
|
+
#include <libcouchbase/plugins/io/bsdio-inl.c>
|
|
35
|
+
|
|
36
|
+
struct libev_cookie {
|
|
37
|
+
struct ev_loop *loop;
|
|
38
|
+
int allocated;
|
|
39
|
+
int suspended;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
struct libev_event {
|
|
44
|
+
union {
|
|
45
|
+
struct ev_io io;
|
|
46
|
+
struct ev_timer timer;
|
|
47
|
+
} ev;
|
|
48
|
+
void *data;
|
|
49
|
+
void (*handler)(lcb_socket_t sock, short which, void *cb_data);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
static void handler_thunk(struct ev_loop *loop, ev_io *io, int events)
|
|
53
|
+
{
|
|
54
|
+
struct libev_event *evt = (struct libev_event *)io;
|
|
55
|
+
int which = 0;
|
|
56
|
+
|
|
57
|
+
if (events & EV_READ) {
|
|
58
|
+
which |= LCB_READ_EVENT;
|
|
59
|
+
}
|
|
60
|
+
if (events & EV_WRITE) {
|
|
61
|
+
which |= LCB_WRITE_EVENT;
|
|
62
|
+
}
|
|
63
|
+
evt->handler(io->fd, which, evt->data);
|
|
64
|
+
|
|
65
|
+
(void)loop;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
static void timer_thunk(struct ev_loop *loop, ev_timer *timer, int events)
|
|
70
|
+
{
|
|
71
|
+
struct libev_event *evt = (struct libev_event *)timer;
|
|
72
|
+
evt->handler(0, 0, evt->data);
|
|
73
|
+
(void)events;
|
|
74
|
+
(void)loop;
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
static void *lcb_io_create_event(struct lcb_io_opt_st *iops)
|
|
79
|
+
{
|
|
80
|
+
struct libev_event *event = calloc(1, sizeof(*event));
|
|
81
|
+
(void)iops;
|
|
82
|
+
return event;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
static int lcb_io_update_event(struct lcb_io_opt_st *iops,
|
|
86
|
+
lcb_socket_t sock,
|
|
87
|
+
void *event,
|
|
88
|
+
short flags,
|
|
89
|
+
void *cb_data,
|
|
90
|
+
void (*handler)(lcb_socket_t sock,
|
|
91
|
+
short which,
|
|
92
|
+
void *cb_data))
|
|
93
|
+
{
|
|
94
|
+
struct libev_cookie *io_cookie = iops->v.v2.cookie;
|
|
95
|
+
struct libev_event *evt = event;
|
|
96
|
+
int events = EV_NONE;
|
|
97
|
+
|
|
98
|
+
if (flags & LCB_READ_EVENT) {
|
|
99
|
+
events |= EV_READ;
|
|
100
|
+
}
|
|
101
|
+
if (flags & LCB_WRITE_EVENT) {
|
|
102
|
+
events |= EV_WRITE;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (events == evt->ev.io.events && handler == evt->handler) {
|
|
106
|
+
/* no change! */
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
ev_io_stop(io_cookie->loop, &evt->ev.io);
|
|
111
|
+
evt->data = cb_data;
|
|
112
|
+
evt->handler = handler;
|
|
113
|
+
ev_init(&evt->ev.io, handler_thunk);
|
|
114
|
+
ev_io_set(&evt->ev.io, sock, events);
|
|
115
|
+
ev_io_stop(io_cookie->loop, &evt->ev.io);
|
|
116
|
+
ev_io_start(io_cookie->loop, &evt->ev.io);
|
|
117
|
+
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
120
|
+
static void lcb_io_delete_event(struct lcb_io_opt_st *iops,
|
|
121
|
+
lcb_socket_t sock,
|
|
122
|
+
void *event)
|
|
123
|
+
{
|
|
124
|
+
struct libev_cookie *io_cookie = iops->v.v2.cookie;
|
|
125
|
+
struct libev_event *evt = event;
|
|
126
|
+
ev_io_stop(io_cookie->loop, &evt->ev.io);
|
|
127
|
+
ev_io_init(&evt->ev.io, NULL, 0, 0);
|
|
128
|
+
(void)sock;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
static void lcb_io_destroy_event(struct lcb_io_opt_st *iops,
|
|
132
|
+
void *event)
|
|
133
|
+
{
|
|
134
|
+
lcb_io_delete_event(iops, -1, event);
|
|
135
|
+
free(event);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
static int lcb_io_update_timer(struct lcb_io_opt_st *iops,
|
|
139
|
+
void *timer,
|
|
140
|
+
lcb_uint32_t usec,
|
|
141
|
+
void *cb_data,
|
|
142
|
+
void (*handler)(lcb_socket_t sock,
|
|
143
|
+
short which,
|
|
144
|
+
void *cb_data))
|
|
145
|
+
{
|
|
146
|
+
struct libev_cookie *io_cookie = iops->v.v2.cookie;
|
|
147
|
+
struct libev_event *evt = timer;
|
|
148
|
+
ev_tstamp start;
|
|
149
|
+
evt->data = cb_data;
|
|
150
|
+
evt->handler = handler;
|
|
151
|
+
start = usec / (ev_tstamp)1000000;
|
|
152
|
+
ev_timer_stop(io_cookie->loop, &evt->ev.timer);
|
|
153
|
+
ev_timer_init(&evt->ev.timer, timer_thunk, start, 0);
|
|
154
|
+
ev_timer_start(io_cookie->loop, &evt->ev.timer);
|
|
155
|
+
return 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
static void lcb_io_delete_timer(struct lcb_io_opt_st *iops,
|
|
159
|
+
void *event)
|
|
160
|
+
{
|
|
161
|
+
struct libev_cookie *io_cookie = iops->v.v2.cookie;
|
|
162
|
+
struct libev_event *evt = event;
|
|
163
|
+
ev_timer_stop(io_cookie->loop, &evt->ev.timer);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
static void lcb_io_destroy_timer(struct lcb_io_opt_st *iops,
|
|
167
|
+
void *event)
|
|
168
|
+
{
|
|
169
|
+
lcb_io_delete_timer(iops, event);
|
|
170
|
+
free(event);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
static void lcb_io_stop_event_loop(struct lcb_io_opt_st *iops)
|
|
174
|
+
{
|
|
175
|
+
struct libev_cookie *io_cookie = iops->v.v2.cookie;
|
|
176
|
+
#ifdef HAVE_LIBEV4
|
|
177
|
+
ev_break(io_cookie->loop, EVBREAK_ONE);
|
|
178
|
+
#else
|
|
179
|
+
ev_unloop(io_cookie->loop, EVUNLOOP_ONE);
|
|
180
|
+
#endif
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
static void run_common(struct lcb_io_opt_st *iops, int is_tick)
|
|
184
|
+
{
|
|
185
|
+
struct libev_cookie *io_cookie = iops->v.v2.cookie;
|
|
186
|
+
int flags;
|
|
187
|
+
|
|
188
|
+
io_cookie->suspended = 0;
|
|
189
|
+
#ifdef HAVE_LIBEV4
|
|
190
|
+
flags = is_tick ? EVRUN_NOWAIT : 0;
|
|
191
|
+
ev_run(io_cookie->loop, flags);
|
|
192
|
+
#else
|
|
193
|
+
flags = is_tick ? EVLOOP_NOBLOCK : 0;
|
|
194
|
+
ev_loop(io_cookie->loop, flags);
|
|
195
|
+
#endif
|
|
196
|
+
io_cookie->suspended = 1;
|
|
197
|
+
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
static void lcb_io_run_event_loop(struct lcb_io_opt_st *iops)
|
|
201
|
+
{
|
|
202
|
+
run_common(iops, 0);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
static void lcb_io_tick_event_loop(struct lcb_io_opt_st *iops)
|
|
206
|
+
{
|
|
207
|
+
run_common(iops, 1);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
static void lcb_destroy_io_opts(struct lcb_io_opt_st *iops)
|
|
211
|
+
{
|
|
212
|
+
struct libev_cookie *io_cookie = iops->v.v2.cookie;
|
|
213
|
+
if (io_cookie->allocated) {
|
|
214
|
+
ev_loop_destroy(io_cookie->loop);
|
|
215
|
+
}
|
|
216
|
+
free(io_cookie);
|
|
217
|
+
free(iops);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
static void
|
|
221
|
+
procs2_ev_callback(int version, lcb_loop_procs *loop_procs,
|
|
222
|
+
lcb_timer_procs *timer_procs, lcb_bsd_procs *bsd_procs,
|
|
223
|
+
lcb_ev_procs *ev_procs, lcb_completion_procs *completion_procs,
|
|
224
|
+
lcb_iomodel_t *iomodel)
|
|
225
|
+
{
|
|
226
|
+
ev_procs->cancel = lcb_io_delete_event;
|
|
227
|
+
ev_procs->create = lcb_io_create_event;
|
|
228
|
+
ev_procs->watch = lcb_io_update_event;
|
|
229
|
+
ev_procs->destroy = lcb_io_destroy_event;
|
|
230
|
+
|
|
231
|
+
timer_procs->create = lcb_io_create_event;
|
|
232
|
+
timer_procs->cancel = lcb_io_delete_timer;
|
|
233
|
+
timer_procs->schedule = lcb_io_update_timer;
|
|
234
|
+
timer_procs->destroy = lcb_io_destroy_timer;
|
|
235
|
+
|
|
236
|
+
loop_procs->start = lcb_io_run_event_loop;
|
|
237
|
+
loop_procs->stop = lcb_io_stop_event_loop;
|
|
238
|
+
loop_procs->tick = lcb_io_tick_event_loop;
|
|
239
|
+
|
|
240
|
+
*iomodel = LCB_IOMODEL_EVENT;
|
|
241
|
+
wire_lcb_bsd_impl2(bsd_procs, version);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
LIBCOUCHBASE_API
|
|
245
|
+
lcb_error_t lcb_create_libev_io_opts(int version, lcb_io_opt_t *io, void *arg)
|
|
246
|
+
{
|
|
247
|
+
struct ev_loop *loop = arg;
|
|
248
|
+
struct lcb_io_opt_st *ret;
|
|
249
|
+
struct libev_cookie *cookie;
|
|
250
|
+
if (version != 0) {
|
|
251
|
+
return LCB_PLUGIN_VERSION_MISMATCH;
|
|
252
|
+
}
|
|
253
|
+
ret = calloc(1, sizeof(*ret));
|
|
254
|
+
cookie = calloc(1, sizeof(*cookie));
|
|
255
|
+
if (ret == NULL || cookie == NULL) {
|
|
256
|
+
free(ret);
|
|
257
|
+
free(cookie);
|
|
258
|
+
return LCB_CLIENT_ENOMEM;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/* setup io iops! */
|
|
262
|
+
ret->version = 3;
|
|
263
|
+
ret->dlhandle = NULL;
|
|
264
|
+
ret->destructor = lcb_destroy_io_opts;
|
|
265
|
+
ret->v.v3.get_procs = procs2_ev_callback;
|
|
266
|
+
|
|
267
|
+
/* consider that struct isn't allocated by the library,
|
|
268
|
+
* `need_cleanup' flag might be set in lcb_create() */
|
|
269
|
+
ret->v.v3.need_cleanup = 0;
|
|
270
|
+
|
|
271
|
+
if (loop == NULL) {
|
|
272
|
+
if ((cookie->loop = ev_loop_new(EVFLAG_AUTO | EVFLAG_NOENV)) == NULL) {
|
|
273
|
+
free(ret);
|
|
274
|
+
free(cookie);
|
|
275
|
+
return LCB_CLIENT_ENOMEM;
|
|
276
|
+
}
|
|
277
|
+
cookie->allocated = 1;
|
|
278
|
+
} else {
|
|
279
|
+
cookie->loop = loop;
|
|
280
|
+
cookie->allocated = 0;
|
|
281
|
+
}
|
|
282
|
+
cookie->suspended = 1;
|
|
283
|
+
ret->v.v3.cookie = cookie;
|
|
284
|
+
|
|
285
|
+
wire_lcb_bsd_impl(ret);
|
|
286
|
+
|
|
287
|
+
*io = ret;
|
|
288
|
+
return LCB_SUCCESS;
|
|
289
|
+
}
|