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,179 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2014 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
|
+
#ifndef LCBIO_TIMER_H
|
|
19
|
+
#define LCBIO_TIMER_H
|
|
20
|
+
|
|
21
|
+
#ifdef __cplusplus
|
|
22
|
+
extern "C" {
|
|
23
|
+
#endif /** __cplusplus */
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @file
|
|
27
|
+
* @brief Timer Routines
|
|
28
|
+
*
|
|
29
|
+
* This file contains the timer routines. This provides a simpler interface
|
|
30
|
+
* than the one provided via the `lcb_timer_*` functions.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @ingroup lcbio
|
|
35
|
+
* @defgroup lcbio-timers Timer Routines
|
|
36
|
+
*
|
|
37
|
+
* @details
|
|
38
|
+
*
|
|
39
|
+
* The timer routines here allow for an asynchronous event to be scheduled
|
|
40
|
+
* within a given amount of time, or "immediately". The basic idea is that
|
|
41
|
+
* these allow "Safe" invocation of routines without worrying about reentrancy
|
|
42
|
+
* issues.
|
|
43
|
+
*
|
|
44
|
+
* There is natually a performance hit in using these functions (since this needs
|
|
45
|
+
* to operate with the event loop) so this shouldn't be used for normal steady
|
|
46
|
+
* state operations (such as memcached operations).
|
|
47
|
+
*
|
|
48
|
+
* A timer may be created via lcbio_timer_new(). The timer's initial state
|
|
49
|
+
* is _unarmed_, meaning it will not be invoked until one of the scheduling
|
|
50
|
+
* routines are invoked.
|
|
51
|
+
*
|
|
52
|
+
* When a timer is armed, its callback (passed lcbio_timer_new()) will be
|
|
53
|
+
* invoked with the argument provided to lcbio_timer_new() as well.
|
|
54
|
+
*
|
|
55
|
+
* To schedule a timer, use the lcbio_timer_rearm() to unconditionally schedule
|
|
56
|
+
* an event within a certain timeframe, or lcbio_async_signal() to invoke the
|
|
57
|
+
* timer as soon as possible, once the event loop regains control.
|
|
58
|
+
*
|
|
59
|
+
* To cancel an armed timer (that is, to ensure the event is _not_ called), use
|
|
60
|
+
* the lcbio_timer_disarm() function or the lcbio_async_cancel() function (which
|
|
61
|
+
* itself is just an alias).
|
|
62
|
+
*
|
|
63
|
+
* Timers are not persistent, meaning that once they are fired they will enter
|
|
64
|
+
* an inactive state.
|
|
65
|
+
*
|
|
66
|
+
* @addtogroup lcbio-timers
|
|
67
|
+
* @{
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
/** @private */
|
|
71
|
+
typedef enum {
|
|
72
|
+
LCBIO_TIMER_S_ENTERED = 0x01,
|
|
73
|
+
LCBIO_TIMER_S_DESTROYED = 0x02,
|
|
74
|
+
LCBIO_TIMER_S_ARMED = 0x04
|
|
75
|
+
} lcbio_TIMERSTATE;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @brief Timer callback
|
|
79
|
+
* @see lcb_timer_new()
|
|
80
|
+
*/
|
|
81
|
+
typedef void (*lcbio_TIMER_cb)(void *);
|
|
82
|
+
|
|
83
|
+
typedef struct lcbio_TIMER {
|
|
84
|
+
void *event;
|
|
85
|
+
void *data;
|
|
86
|
+
lcbio_TIMER_cb callback;
|
|
87
|
+
uint32_t usec_;
|
|
88
|
+
lcbio_TIMERSTATE state;
|
|
89
|
+
lcbio_pTABLE io;
|
|
90
|
+
} lcbio_TIMER, lcbio_ASYNC;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @brief Creates a new timer object.
|
|
94
|
+
*
|
|
95
|
+
* The newly created timer will be in an _unarmed_ state, but may
|
|
96
|
+
* may be activated with lcbio_timer_rearm()
|
|
97
|
+
*
|
|
98
|
+
* @param iot
|
|
99
|
+
* @param data
|
|
100
|
+
* @param callback
|
|
101
|
+
* @return A new timer object. Destroy with lcbio_timer_destroy()
|
|
102
|
+
*/
|
|
103
|
+
lcbio_TIMER *
|
|
104
|
+
lcbio_timer_new(lcbio_pTABLE iot, void *data, lcbio_TIMER_cb callback);
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @brief Release the memory allocated by the timers
|
|
108
|
+
* @param tm the timer to free
|
|
109
|
+
*/
|
|
110
|
+
void
|
|
111
|
+
lcbio_timer_destroy(lcbio_TIMER *tm);
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* @brief Schedule the timer invocation
|
|
115
|
+
* @param timer The timer
|
|
116
|
+
* @param usec The number of microseconds (from now) in which the callback
|
|
117
|
+
* should be invoked
|
|
118
|
+
*/
|
|
119
|
+
void
|
|
120
|
+
lcbio_timer_rearm(lcbio_TIMER *timer, uint32_t usec);
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @brief Cancel a pending invocation
|
|
124
|
+
* @param timer The timer
|
|
125
|
+
* If no pending invocation is present, this does nothing
|
|
126
|
+
*/
|
|
127
|
+
void
|
|
128
|
+
lcbio_timer_disarm(lcbio_TIMER *timer);
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* @brief Schedule an asynchronous call
|
|
132
|
+
* @param timer The timer to schedule
|
|
133
|
+
*
|
|
134
|
+
* This function is equivalent to calling
|
|
135
|
+
* @code{.c}
|
|
136
|
+
* lcbio_timer_rearm(timer, 0);
|
|
137
|
+
* @endcode
|
|
138
|
+
*/
|
|
139
|
+
void
|
|
140
|
+
lcbio_async_signal(lcbio_TIMER *timer);
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* @brief alias for lcbio_timer_disarm()
|
|
144
|
+
* @param timer
|
|
145
|
+
*/
|
|
146
|
+
void
|
|
147
|
+
lcbio_async_cancel(lcbio_TIMER *timer);
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @brief Check if timer is armed
|
|
151
|
+
* @param timer the timer to inspect
|
|
152
|
+
* @return nonzero if armed, zero if unarmed.
|
|
153
|
+
*/
|
|
154
|
+
#define lcbio_timer_armed(timer) ((timer)->state & LCBIO_TIMER_S_ARMED)
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Get the callback that is to be invoked for the timer
|
|
158
|
+
* @param timer the timer to query
|
|
159
|
+
* @return the current callback
|
|
160
|
+
* @see lcbio_timer_set_target()
|
|
161
|
+
*/
|
|
162
|
+
#define lcbio_timer_get_target(timer) (timer)->callback
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Change the target callback for the timer
|
|
166
|
+
* @param timer the timer to modify
|
|
167
|
+
* @param tgt the target callback to set.
|
|
168
|
+
*/
|
|
169
|
+
#define lcbio_timer_set_target(timer, tgt) (timer)->callback = tgt
|
|
170
|
+
|
|
171
|
+
void
|
|
172
|
+
lcbio_timer_dump(lcbio_TIMER *timer, FILE *fp);
|
|
173
|
+
|
|
174
|
+
/**@}*/
|
|
175
|
+
|
|
176
|
+
#ifdef __cplusplus
|
|
177
|
+
}
|
|
178
|
+
#endif /** __cplusplus */
|
|
179
|
+
#endif /* LCBIO_TIMER_H */
|
|
@@ -0,0 +1,132 @@
|
|
|
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
|
+
#include "connect.h"
|
|
19
|
+
#include "iotable.h"
|
|
20
|
+
#include "timer-ng.h"
|
|
21
|
+
|
|
22
|
+
#define TMR_IS_DESTROYED(timer) ((timer)->state & LCBIO_TIMER_S_DESTROYED)
|
|
23
|
+
#define TMR_IS_ARMED(timer) ((timer)->state & LCBIO_TIMER_S_ARMED)
|
|
24
|
+
|
|
25
|
+
static void
|
|
26
|
+
destroy_timer(lcbio_TIMER *timer)
|
|
27
|
+
{
|
|
28
|
+
if (timer->event) {
|
|
29
|
+
timer->io->timer.destroy(timer->io->p, timer->event);
|
|
30
|
+
}
|
|
31
|
+
lcbio_table_unref(timer->io);
|
|
32
|
+
free(timer);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static void
|
|
36
|
+
timer_callback(lcb_socket_t sock, short which, void *arg)
|
|
37
|
+
{
|
|
38
|
+
lcbio_TIMER *timer = arg;
|
|
39
|
+
|
|
40
|
+
lcb_assert(TMR_IS_ARMED(timer));
|
|
41
|
+
lcb_assert(!TMR_IS_DESTROYED(timer));
|
|
42
|
+
timer->state |= LCBIO_TIMER_S_ENTERED;
|
|
43
|
+
|
|
44
|
+
lcbio_timer_disarm(timer);
|
|
45
|
+
timer->callback(timer->data);
|
|
46
|
+
|
|
47
|
+
if (TMR_IS_DESTROYED(timer)) {
|
|
48
|
+
destroy_timer(timer);
|
|
49
|
+
} else {
|
|
50
|
+
timer->state &= ~LCBIO_TIMER_S_ENTERED;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
(void)sock;
|
|
54
|
+
(void)which;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
lcbio_TIMER *
|
|
59
|
+
lcbio_timer_new(lcbio_TABLE *io, void *data, lcbio_TIMER_cb callback)
|
|
60
|
+
{
|
|
61
|
+
lcbio_TIMER *ret = calloc(1, sizeof(*ret));
|
|
62
|
+
|
|
63
|
+
if (!ret) {
|
|
64
|
+
return NULL;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
ret->callback = callback;
|
|
68
|
+
ret->data = data;
|
|
69
|
+
ret->io = io;
|
|
70
|
+
ret->event = io->timer.create(IOT_ARG(io));
|
|
71
|
+
lcbio_table_ref(io);
|
|
72
|
+
return ret;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
void
|
|
76
|
+
lcbio_timer_destroy(lcbio_TIMER *timer)
|
|
77
|
+
{
|
|
78
|
+
lcbio_timer_disarm(timer);
|
|
79
|
+
if (timer->state & LCBIO_TIMER_S_ENTERED) {
|
|
80
|
+
timer->state |= LCBIO_TIMER_S_DESTROYED;
|
|
81
|
+
} else {
|
|
82
|
+
destroy_timer(timer);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
void
|
|
87
|
+
lcbio_timer_disarm(lcbio_TIMER *timer)
|
|
88
|
+
{
|
|
89
|
+
if (!TMR_IS_ARMED(timer)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
timer->state &= ~LCBIO_TIMER_S_ARMED;
|
|
94
|
+
timer->io->timer.cancel(timer->io->p, timer->event);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void
|
|
98
|
+
lcbio_timer_rearm(lcbio_TIMER * timer, uint32_t usec)
|
|
99
|
+
{
|
|
100
|
+
if (TMR_IS_ARMED(timer)) {
|
|
101
|
+
lcbio_timer_disarm(timer);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
timer->usec_ = usec;
|
|
105
|
+
timer->io->timer.schedule(timer->io->p,
|
|
106
|
+
timer->event, usec, timer, timer_callback);
|
|
107
|
+
timer->state |= LCBIO_TIMER_S_ARMED;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
void
|
|
111
|
+
lcbio_async_signal(lcbio_TIMER *timer)
|
|
112
|
+
{
|
|
113
|
+
lcbio_timer_rearm(timer, 0);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
void
|
|
117
|
+
lcbio_async_cancel(lcbio_TIMER *timer)
|
|
118
|
+
{
|
|
119
|
+
lcbio_timer_disarm(timer);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
void
|
|
123
|
+
lcbio_timer_dump(lcbio_TIMER *timer, FILE *fp)
|
|
124
|
+
{
|
|
125
|
+
fprintf(fp, "~~ DUMP TIMER BEGIN ~~\n");
|
|
126
|
+
fprintf(fp, "TIMER=%p\n", (void*)timer);
|
|
127
|
+
fprintf(fp, "INNER PTR=%p\n", timer->event);
|
|
128
|
+
fprintf(fp, "USERDATA=%p\n", timer->data);
|
|
129
|
+
fprintf(fp, "ACTIVE: %s\n", (timer->state & LCBIO_TIMER_S_ARMED) ? "YES":"NO");
|
|
130
|
+
fprintf(fp, "INTERVAL: %lu\n", (unsigned long)timer->usec_);
|
|
131
|
+
fprintf(fp, "~~ DUMP TIMER END ~~\n");
|
|
132
|
+
}
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2010-2014 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
|
+
#include "internal.h"
|
|
19
|
+
#include <lcbio/iotable.h>
|
|
20
|
+
|
|
21
|
+
#if defined(__clang__) || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
|
|
22
|
+
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
typedef enum {
|
|
26
|
+
LCB_TIMER_STANDALONE = 1 << 0,
|
|
27
|
+
LCB_TIMER_PERIODIC = 1 << 1,
|
|
28
|
+
LCB_TIMER_EX = 1 << 2
|
|
29
|
+
} lcb_timer_options;
|
|
30
|
+
|
|
31
|
+
typedef enum {
|
|
32
|
+
LCB_TIMER_S_ENTERED = 0x01,
|
|
33
|
+
LCB_TIMER_S_DESTROYED = 0x02,
|
|
34
|
+
LCB_TIMER_S_ARMED = 0x04
|
|
35
|
+
} lcb_timer_state;
|
|
36
|
+
|
|
37
|
+
struct lcb_timer_st {
|
|
38
|
+
lcb_uint32_t usec_;
|
|
39
|
+
lcb_timer_state state;
|
|
40
|
+
lcb_timer_options options;
|
|
41
|
+
void *event;
|
|
42
|
+
const void *cookie;
|
|
43
|
+
lcb_timer_callback callback;
|
|
44
|
+
lcb_t instance;
|
|
45
|
+
struct lcbio_TABLE *io;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
static void timer_rearm(lcb_timer_t timer, lcb_uint32_t usec);
|
|
49
|
+
static void timer_disarm(lcb_timer_t timer);
|
|
50
|
+
#define lcb_timer_armed(timer) ((timer)->state & LCB_TIMER_S_ARMED)
|
|
51
|
+
#define lcb_async_signal(async) lcb_timer_rearm(async, 0)
|
|
52
|
+
#define lcb_async_cancel(async) lcb_timer_disarm(async)
|
|
53
|
+
#define TMR_IS_PERIODIC(timer) ((timer)->options & LCB_TIMER_PERIODIC)
|
|
54
|
+
#define TMR_IS_DESTROYED(timer) ((timer)->state & LCB_TIMER_S_DESTROYED)
|
|
55
|
+
#define TMR_IS_STANDALONE(timer) ((timer)->options & LCB_TIMER_STANDALONE)
|
|
56
|
+
#define TMR_IS_ARMED(timer) ((timer)->state & LCB_TIMER_S_ARMED)
|
|
57
|
+
|
|
58
|
+
static void destroy_timer(lcb_timer_t timer) {
|
|
59
|
+
if (timer->event) {
|
|
60
|
+
timer->io->timer.destroy(timer->io->p, timer->event);
|
|
61
|
+
}
|
|
62
|
+
lcbio_table_unref(timer->io);
|
|
63
|
+
memset(timer, 0xff, sizeof(*timer));
|
|
64
|
+
free(timer);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
static void timer_callback(lcb_socket_t sock, short which, void *arg) {
|
|
68
|
+
lcb_timer_t timer = arg;
|
|
69
|
+
lcb_t instance = timer->instance;
|
|
70
|
+
|
|
71
|
+
lcb_assert(TMR_IS_ARMED(timer));
|
|
72
|
+
lcb_assert(!TMR_IS_DESTROYED(timer));
|
|
73
|
+
|
|
74
|
+
timer->state |= LCB_TIMER_S_ENTERED;
|
|
75
|
+
timer_disarm(timer);
|
|
76
|
+
timer->callback(timer, instance, timer->cookie);
|
|
77
|
+
|
|
78
|
+
if (TMR_IS_DESTROYED(timer) == 0 && TMR_IS_PERIODIC(timer) != 0) {
|
|
79
|
+
timer_rearm(timer, timer->usec_);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (! TMR_IS_STANDALONE(timer)) {
|
|
83
|
+
lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_TIMER, timer);
|
|
84
|
+
lcb_maybe_breakout(instance);
|
|
85
|
+
}
|
|
86
|
+
if (TMR_IS_DESTROYED(timer)) {
|
|
87
|
+
destroy_timer(timer);
|
|
88
|
+
} else {
|
|
89
|
+
timer->state &= ~LCB_TIMER_S_ENTERED;
|
|
90
|
+
}
|
|
91
|
+
(void)sock;(void)which;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
LIBCOUCHBASE_API
|
|
95
|
+
lcb_timer_t lcb_timer_create(lcb_t instance, const void *command_cookie, lcb_uint32_t usec, int periodic, lcb_timer_callback callback, lcb_error_t *error) {
|
|
96
|
+
lcb_timer_options options = 0;
|
|
97
|
+
lcb_timer_t tmr = calloc(1, sizeof(struct lcb_timer_st));
|
|
98
|
+
tmr->io = instance->iotable;
|
|
99
|
+
|
|
100
|
+
if (periodic) {
|
|
101
|
+
options |= LCB_TIMER_PERIODIC;
|
|
102
|
+
}
|
|
103
|
+
if (!tmr) {
|
|
104
|
+
*error = LCB_CLIENT_ENOMEM;
|
|
105
|
+
return NULL;
|
|
106
|
+
}
|
|
107
|
+
if (!callback) {
|
|
108
|
+
*error = LCB_EINVAL;
|
|
109
|
+
return NULL;
|
|
110
|
+
}
|
|
111
|
+
if (! (options & LCB_TIMER_STANDALONE)) {
|
|
112
|
+
lcb_assert(instance);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
lcbio_table_ref(tmr->io);
|
|
116
|
+
tmr->instance = instance;
|
|
117
|
+
tmr->callback = callback;
|
|
118
|
+
tmr->cookie = command_cookie;
|
|
119
|
+
tmr->options = options;
|
|
120
|
+
tmr->event = tmr->io->timer.create(tmr->io->p);
|
|
121
|
+
|
|
122
|
+
if (tmr->event == NULL) {
|
|
123
|
+
free(tmr);
|
|
124
|
+
*error = LCB_CLIENT_ENOMEM;
|
|
125
|
+
return NULL;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if ( (options & LCB_TIMER_STANDALONE) == 0) {
|
|
129
|
+
lcb_aspend_add(&instance->pendops, LCB_PENDTYPE_TIMER, tmr);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
timer_rearm(tmr, usec);
|
|
133
|
+
|
|
134
|
+
*error = LCB_SUCCESS;
|
|
135
|
+
return tmr;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
LIBCOUCHBASE_API
|
|
139
|
+
lcb_error_t lcb_timer_destroy(lcb_t instance, lcb_timer_t timer) {
|
|
140
|
+
int standalone = timer->options & LCB_TIMER_STANDALONE;
|
|
141
|
+
if (!standalone) {
|
|
142
|
+
lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_TIMER, timer);
|
|
143
|
+
}
|
|
144
|
+
timer_disarm(timer);
|
|
145
|
+
if (timer->state & LCB_TIMER_S_ENTERED) {
|
|
146
|
+
timer->state |= LCB_TIMER_S_DESTROYED;
|
|
147
|
+
lcb_assert(TMR_IS_DESTROYED(timer));
|
|
148
|
+
} else {
|
|
149
|
+
destroy_timer(timer);
|
|
150
|
+
}
|
|
151
|
+
return LCB_SUCCESS;
|
|
152
|
+
}
|
|
153
|
+
static void timer_disarm(lcb_timer_t timer) {
|
|
154
|
+
if (!TMR_IS_ARMED(timer)) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
timer->state &= ~LCB_TIMER_S_ARMED;
|
|
158
|
+
timer->io->timer.cancel(timer->io->p, timer->event);
|
|
159
|
+
}
|
|
160
|
+
static void timer_rearm(lcb_timer_t timer, lcb_uint32_t usec) {
|
|
161
|
+
if (TMR_IS_ARMED(timer)) {
|
|
162
|
+
timer_disarm(timer);
|
|
163
|
+
}
|
|
164
|
+
timer->usec_ = usec;
|
|
165
|
+
timer->io->timer.schedule(timer->io->p, timer->event, usec, timer, timer_callback);
|
|
166
|
+
timer->state |= LCB_TIMER_S_ARMED;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
LCB_INTERNAL_API void lcb__timer_destroy_nowarn(lcb_t instance, lcb_timer_t timer) {
|
|
170
|
+
lcb_timer_destroy(instance, timer);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
struct user_cookie {
|
|
174
|
+
void *cookie;
|
|
175
|
+
struct lcb_callback_st callbacks;
|
|
176
|
+
lcb_error_t retcode;
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
static void restore_user_env(lcb_t instance);
|
|
180
|
+
static void restore_wrapping_env(lcb_t instance, struct user_cookie *user, lcb_error_t error);
|
|
181
|
+
static void bootstrap_callback(lcb_t instance, lcb_error_t err) {
|
|
182
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
183
|
+
c->retcode = err;
|
|
184
|
+
}
|
|
185
|
+
static void stat_callback(lcb_t instance, const void *command_cookie, lcb_error_t error, const lcb_server_stat_resp_t *resp) {
|
|
186
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
187
|
+
restore_user_env(instance);
|
|
188
|
+
c->callbacks.stat(instance, command_cookie, error, resp);
|
|
189
|
+
restore_wrapping_env(instance, c, error);
|
|
190
|
+
}
|
|
191
|
+
static void version_callback(lcb_t instance, const void *command_cookie, lcb_error_t error, const lcb_server_version_resp_t *resp) {
|
|
192
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
193
|
+
restore_user_env(instance);
|
|
194
|
+
c->callbacks.version(instance, command_cookie, error, resp);
|
|
195
|
+
restore_wrapping_env(instance, c, error);
|
|
196
|
+
}
|
|
197
|
+
static void verbosity_callback(lcb_t instance, const void *command_cookie, lcb_error_t error, const lcb_verbosity_resp_t *resp) {
|
|
198
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
199
|
+
restore_user_env(instance);
|
|
200
|
+
c->callbacks.verbosity(instance, command_cookie, error, resp);
|
|
201
|
+
restore_wrapping_env(instance, c, error);
|
|
202
|
+
}
|
|
203
|
+
static void get_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_get_resp_t *resp) {
|
|
204
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
205
|
+
restore_user_env(instance);
|
|
206
|
+
c->callbacks.get(instance, cookie, error, resp);
|
|
207
|
+
restore_wrapping_env(instance, c, error);
|
|
208
|
+
}
|
|
209
|
+
static void store_callback(lcb_t instance, const void *cookie, lcb_storage_t operation, lcb_error_t error, const lcb_store_resp_t *resp) {
|
|
210
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
211
|
+
restore_user_env(instance);
|
|
212
|
+
c->callbacks.store(instance, cookie, operation, error, resp);
|
|
213
|
+
restore_wrapping_env(instance, c, error);
|
|
214
|
+
}
|
|
215
|
+
static void arithmetic_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_arithmetic_resp_t *resp) {
|
|
216
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
217
|
+
restore_user_env(instance);
|
|
218
|
+
c->callbacks.arithmetic(instance, cookie, error, resp);
|
|
219
|
+
restore_wrapping_env(instance, c, error);
|
|
220
|
+
}
|
|
221
|
+
static void remove_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_remove_resp_t *resp) {
|
|
222
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
223
|
+
restore_user_env(instance);
|
|
224
|
+
c->callbacks.remove(instance, cookie, error, resp);
|
|
225
|
+
restore_wrapping_env(instance, c, error);
|
|
226
|
+
}
|
|
227
|
+
static void touch_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_touch_resp_t *resp) {
|
|
228
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
229
|
+
restore_user_env(instance);
|
|
230
|
+
c->callbacks.touch(instance, cookie, error, resp);
|
|
231
|
+
restore_wrapping_env(instance, c, error);
|
|
232
|
+
}
|
|
233
|
+
static void http_complete_callback(lcb_http_request_t request, lcb_t instance, const void *cookie, lcb_error_t error, const lcb_http_resp_t *resp) {
|
|
234
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
235
|
+
restore_user_env(instance);
|
|
236
|
+
c->callbacks.http_complete(request, instance, cookie, error, resp);
|
|
237
|
+
restore_wrapping_env(instance, c, error);
|
|
238
|
+
}
|
|
239
|
+
static void http_data_callback(lcb_http_request_t request, lcb_t instance, const void *cookie, lcb_error_t error, const lcb_http_resp_t *resp) {
|
|
240
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
241
|
+
restore_user_env(instance);
|
|
242
|
+
c->callbacks.http_data(request, instance, cookie, error, resp);
|
|
243
|
+
restore_wrapping_env(instance, c, error);
|
|
244
|
+
}
|
|
245
|
+
static void flush_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_flush_resp_t *resp) {
|
|
246
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
247
|
+
restore_user_env(instance);
|
|
248
|
+
c->callbacks.flush(instance, cookie, error, resp);
|
|
249
|
+
restore_wrapping_env(instance, c, error);
|
|
250
|
+
}
|
|
251
|
+
static void observe_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_observe_resp_t *resp) {
|
|
252
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
253
|
+
restore_user_env(instance);
|
|
254
|
+
c->callbacks.observe(instance, cookie, error, resp);
|
|
255
|
+
restore_wrapping_env(instance, c, error);
|
|
256
|
+
}
|
|
257
|
+
static void durability_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_durability_resp_t *resp) {
|
|
258
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
259
|
+
restore_user_env(instance);
|
|
260
|
+
c->callbacks.durability(instance, cookie, error, resp);
|
|
261
|
+
restore_wrapping_env(instance, c, error);
|
|
262
|
+
}
|
|
263
|
+
static void unlock_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_unlock_resp_t *resp) {
|
|
264
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
265
|
+
restore_user_env(instance);
|
|
266
|
+
c->callbacks.unlock(instance, cookie, error, resp);
|
|
267
|
+
restore_wrapping_env(instance, c, error);
|
|
268
|
+
}
|
|
269
|
+
static void restore_user_env(lcb_t instance) {
|
|
270
|
+
struct user_cookie *cookie = (void *)instance->cookie;
|
|
271
|
+
/* Restore the users environment */
|
|
272
|
+
instance->cookie = cookie->cookie;
|
|
273
|
+
instance->callbacks = cookie->callbacks;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
static void
|
|
277
|
+
restore_wrapping_env(lcb_t instance, struct user_cookie *user, lcb_error_t error) {
|
|
278
|
+
user->callbacks = instance->callbacks;
|
|
279
|
+
/* Install new callbacks */
|
|
280
|
+
instance->callbacks.get = get_callback;
|
|
281
|
+
instance->callbacks.store = store_callback;
|
|
282
|
+
instance->callbacks.arithmetic = arithmetic_callback;
|
|
283
|
+
instance->callbacks.remove = remove_callback;
|
|
284
|
+
instance->callbacks.stat = stat_callback;
|
|
285
|
+
instance->callbacks.version = version_callback;
|
|
286
|
+
instance->callbacks.verbosity = verbosity_callback;
|
|
287
|
+
instance->callbacks.touch = touch_callback;
|
|
288
|
+
instance->callbacks.flush = flush_callback;
|
|
289
|
+
instance->callbacks.bootstrap = bootstrap_callback;
|
|
290
|
+
instance->callbacks.http_complete = http_complete_callback;
|
|
291
|
+
instance->callbacks.http_data = http_data_callback;
|
|
292
|
+
instance->callbacks.observe = observe_callback;
|
|
293
|
+
instance->callbacks.unlock = unlock_callback;
|
|
294
|
+
instance->callbacks.durability = durability_callback;
|
|
295
|
+
|
|
296
|
+
user->cookie = (void *)instance->cookie;
|
|
297
|
+
user->retcode = error;
|
|
298
|
+
instance->cookie = user;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
lcb_error_t
|
|
302
|
+
lcb__synchandler_return(lcb_t instance)
|
|
303
|
+
{
|
|
304
|
+
struct user_cookie cookie;
|
|
305
|
+
restore_wrapping_env(instance, &cookie, LCB_SUCCESS);
|
|
306
|
+
lcb_wait(instance);
|
|
307
|
+
restore_user_env(instance);
|
|
308
|
+
return cookie.retcode;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
LIBCOUCHBASE_API
|
|
312
|
+
void
|
|
313
|
+
lcb_behavior_set_syncmode(lcb_t instance, lcb_syncmode_t mode)
|
|
314
|
+
{
|
|
315
|
+
LCBT_SETTING(instance, syncmode) = mode;
|
|
316
|
+
}
|
|
317
|
+
LIBCOUCHBASE_API
|
|
318
|
+
lcb_syncmode_t
|
|
319
|
+
lcb_behavior_get_syncmode(lcb_t instance)
|
|
320
|
+
{
|
|
321
|
+
return LCBT_SETTING(instance, syncmode);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
LIBCOUCHBASE_API
|
|
325
|
+
lcb_error_t lcb_get_last_error(lcb_t instance){return instance->last_error;}
|
|
326
|
+
|
|
327
|
+
LIBCOUCHBASE_API
|
|
328
|
+
lcb_error_t lcb__create_compat_230(lcb_cluster_t type, const void *specific, lcb_t *instance, struct lcb_io_opt_st *io)
|
|
329
|
+
{
|
|
330
|
+
struct lcb_create_st cst = { 0 };
|
|
331
|
+
const struct lcb_cached_config_st *cfg = specific;
|
|
332
|
+
const struct lcb_create_st *crp = &cfg->createopt;
|
|
333
|
+
lcb_error_t err;
|
|
334
|
+
lcb_size_t to_copy = 0;
|
|
335
|
+
|
|
336
|
+
if (type != LCB_CACHED_CONFIG) {
|
|
337
|
+
return LCB_NOT_SUPPORTED;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
if (crp->version == 0) {
|
|
341
|
+
to_copy = sizeof(cst.v.v0);
|
|
342
|
+
} else if (crp->version == 1) {
|
|
343
|
+
to_copy = sizeof(cst.v.v1);
|
|
344
|
+
} else if (crp->version >= 2) {
|
|
345
|
+
to_copy = sizeof(cst.v.v2);
|
|
346
|
+
} else {
|
|
347
|
+
/* using version 3? */
|
|
348
|
+
return LCB_NOT_SUPPORTED;
|
|
349
|
+
}
|
|
350
|
+
memcpy(&cst, crp, to_copy);
|
|
351
|
+
|
|
352
|
+
if (io) {
|
|
353
|
+
cst.v.v0.io = io;
|
|
354
|
+
}
|
|
355
|
+
err = lcb_create(instance, &cst);
|
|
356
|
+
if (err != LCB_SUCCESS) {
|
|
357
|
+
return err;
|
|
358
|
+
}
|
|
359
|
+
err = lcb_cntl(*instance, LCB_CNTL_SET, LCB_CNTL_CONFIGCACHE,
|
|
360
|
+
(void *)cfg->cachefile);
|
|
361
|
+
if (err != LCB_SUCCESS) {
|
|
362
|
+
lcb_destroy(*instance);
|
|
363
|
+
}
|
|
364
|
+
return err;
|
|
365
|
+
}
|
|
366
|
+
struct compat_220 {
|
|
367
|
+
struct {
|
|
368
|
+
int version;
|
|
369
|
+
struct lcb_create_st1 v1;
|
|
370
|
+
} createopt;
|
|
371
|
+
const char *cachefile;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
struct compat_230 {
|
|
375
|
+
struct {
|
|
376
|
+
int version;
|
|
377
|
+
struct lcb_create_st2 v2;
|
|
378
|
+
} createopt;
|
|
379
|
+
const char *cachefile;
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
#undef lcb_create_compat
|
|
383
|
+
/**
|
|
384
|
+
* This is _only_ called for versions <= 2.3.0.
|
|
385
|
+
* >= 2.3.0 uses the _230() symbol.
|
|
386
|
+
*
|
|
387
|
+
* The big difference between this and the _230 function is the struct layout,
|
|
388
|
+
* where the newer one contains the filename _before_ the creation options.
|
|
389
|
+
*
|
|
390
|
+
* Woe to he who relies on the compat_st as a 'subclass' of create_st..
|
|
391
|
+
*/
|
|
392
|
+
|
|
393
|
+
LIBCOUCHBASE_API
|
|
394
|
+
lcb_error_t lcb_create_compat(lcb_cluster_t type, const void *specific, lcb_t *instance, struct lcb_io_opt_st *io);
|
|
395
|
+
LIBCOUCHBASE_API
|
|
396
|
+
lcb_error_t lcb_create_compat(lcb_cluster_t type, const void *specific, lcb_t *instance, struct lcb_io_opt_st *io)
|
|
397
|
+
{
|
|
398
|
+
struct lcb_cached_config_st dst;
|
|
399
|
+
const struct compat_220* src220 = specific;
|
|
400
|
+
|
|
401
|
+
if (type == LCB_MEMCACHED_CLUSTER) {
|
|
402
|
+
return lcb__create_compat_230(type, specific, instance, io);
|
|
403
|
+
} else if (type != LCB_CACHED_CONFIG) {
|
|
404
|
+
return LCB_NOT_SUPPORTED;
|
|
405
|
+
}
|
|
406
|
+
#define copy_compat(v) \
|
|
407
|
+
memcpy(&dst.createopt, &v->createopt, sizeof(v->createopt)); \
|
|
408
|
+
dst.cachefile = v->cachefile;
|
|
409
|
+
|
|
410
|
+
if (src220->createopt.version >= 2 || src220->cachefile == NULL) {
|
|
411
|
+
const struct compat_230* src230 = specific;
|
|
412
|
+
copy_compat(src230);
|
|
413
|
+
} else {
|
|
414
|
+
copy_compat(src220);
|
|
415
|
+
}
|
|
416
|
+
return lcb__create_compat_230(type, &dst, instance, io);
|
|
417
|
+
}
|
|
418
|
+
LIBCOUCHBASE_API void lcb_flush_buffers(lcb_t instance, const void *cookie) {
|
|
419
|
+
(void)instance;(void)cookie;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
LIBCOUCHBASE_API
|
|
423
|
+
lcb_error_t lcb_verify_struct_size(lcb_U32 id, lcb_U32 version, lcb_SIZE size)
|
|
424
|
+
{
|
|
425
|
+
#define X(sname, sabbrev, idval, vernum) \
|
|
426
|
+
if (idval == id && size == sizeof(sname) && version <= vernum) { return LCB_SUCCESS; }
|
|
427
|
+
LCB_XSSIZES(X);
|
|
428
|
+
#undef X
|
|
429
|
+
return LCB_EINVAL;
|
|
430
|
+
}
|