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,488 @@
|
|
|
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 LCB_ROPE_H
|
|
19
|
+
#define LCB_ROPE_H
|
|
20
|
+
#include <libcouchbase/sysdefs.h>
|
|
21
|
+
#include <libcouchbase/visibility.h>
|
|
22
|
+
#include <netbuf/netbuf-defs.h>
|
|
23
|
+
#include <stdio.h>
|
|
24
|
+
#include "list.h"
|
|
25
|
+
|
|
26
|
+
#ifdef __cplusplus
|
|
27
|
+
extern "C" {
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @defgroup rdb Network Read Buffers
|
|
32
|
+
* @brief Read buffer system.
|
|
33
|
+
*
|
|
34
|
+
* # Overview
|
|
35
|
+
*
|
|
36
|
+
* This subsystem provides an extensible means by which to deal with input
|
|
37
|
+
* network buffers.
|
|
38
|
+
*
|
|
39
|
+
* Sequential network data is represented in something called an `rdb_ROPEBUF`
|
|
40
|
+
* structure. The rope structure itself consists of one or more
|
|
41
|
+
* `rdb_ROPESEG` structures; where a segment represents a contiguous block of
|
|
42
|
+
* memory.
|
|
43
|
+
*
|
|
44
|
+
* Segments are thus the base allocation unit. They are chained together in
|
|
45
|
+
* a ROPE structure to form a sequence of data, where the first segment contains
|
|
46
|
+
* previous data and the last segment contains the newest data (and potentially
|
|
47
|
+
* free space for additional reads).
|
|
48
|
+
*
|
|
49
|
+
* The size of each segment is determined by either the allocator or the
|
|
50
|
+
* library. The allocator determines the size for "Estimated" read-aheads, where it
|
|
51
|
+
* decides on the best form of fragmentation (if any) for the TCP buffers.
|
|
52
|
+
* The library determines the size of a segment if a specific sequence of data
|
|
53
|
+
* must be represented as contiguous bytes in memory.
|
|
54
|
+
*
|
|
55
|
+
* The differentiation between these two modes is expressed in the
|
|
56
|
+
* r_reserve() function (where the allocator determines the best mode of
|
|
57
|
+
* fragmentation) and the s_alloc/s_realloc functions where the library demands
|
|
58
|
+
* a specific form of continuity.
|
|
59
|
+
*
|
|
60
|
+
* The API here is divided into two sections. One API deals with allocating
|
|
61
|
+
* the relevant buffers (allocation API) while the other API deals with
|
|
62
|
+
* extracting data from said buffers.
|
|
63
|
+
*
|
|
64
|
+
* # Extraction API
|
|
65
|
+
*
|
|
66
|
+
* The extraction API provides means for receiving buffers for network reads
|
|
67
|
+
* and for extracting data once these reads have been completed.
|
|
68
|
+
*
|
|
69
|
+
* The read operation begins by the user providing an IOV array and passing it
|
|
70
|
+
* to the rdb_rdstart() function. This function will populate the fields in
|
|
71
|
+
* each IOV structure corresponding to the segments of the relevant IOVs.
|
|
72
|
+
*
|
|
73
|
+
* You may then forward these IOV buffers to the system-level read functions
|
|
74
|
+
* (e.g. recvmsg).
|
|
75
|
+
*
|
|
76
|
+
* After data has been read into the buffers, call rdb_rdend() with the number
|
|
77
|
+
* of bytes the last read operation received.
|
|
78
|
+
*
|
|
79
|
+
* Internally the rope structure contains a position at which data begins.
|
|
80
|
+
* All functions which extract data begin from this offset.
|
|
81
|
+
*
|
|
82
|
+
* To extract the data you may call rdb_get_consolidate which will return
|
|
83
|
+
* a pointer to a contiguous region of memory of the specified number of bytes.
|
|
84
|
+
*
|
|
85
|
+
* Finally there is rdb_copyread() which will _copy_ the contents of the read
|
|
86
|
+
* buffer over to a user allocated buffer. This does _not_ consolidate the
|
|
87
|
+
* buffers internally.
|
|
88
|
+
*
|
|
89
|
+
* Once you are done processing the data, you can call rdb_consumed() which
|
|
90
|
+
* will advance the start position by the specified number of bytes, releasing
|
|
91
|
+
* any buffers which do not contain data back to the allocator.
|
|
92
|
+
*
|
|
93
|
+
* ## Extended Extraction API
|
|
94
|
+
*
|
|
95
|
+
* The more advanced rdb_refread_ex() will populate an array of IOV and
|
|
96
|
+
* rdb_SEGMENT pointers with the first such element containing the offsets of
|
|
97
|
+
* the first data byte, and the last of these elements containing the end
|
|
98
|
+
* of the specified length of data. This function is useful if the calling code
|
|
99
|
+
* does not require the data to be contiguous. The two arrays are provided
|
|
100
|
+
* so that the IOV array can easily be passed to a socket function (rather
|
|
101
|
+
* than merely reconstructing them from the segments array).
|
|
102
|
+
*
|
|
103
|
+
* Using rdb_refread_ex() you may also use the rdb_seg_ref() function to "pin"
|
|
104
|
+
* the the segments contained in the output array. When the segments are pinned
|
|
105
|
+
* they are guaranteed not to be overwritten or released from memory until
|
|
106
|
+
* the last call to rdb_seg_unref() is invoked.
|
|
107
|
+
*
|
|
108
|
+
* You may call rdb_consolidate() to ensure that a certain chunk of data
|
|
109
|
+
* will be continuous when it is available to be read. This is useful in a
|
|
110
|
+
* partial read where remaining data has not been received yet, but you know
|
|
111
|
+
* that you will need the current segment as well as a specified length
|
|
112
|
+
* of incoming data to be contiguous.
|
|
113
|
+
*
|
|
114
|
+
* # Allocator API
|
|
115
|
+
*
|
|
116
|
+
* The allocator APIs determine the granularity and fragmentation of the
|
|
117
|
+
* read buffers. They can also perform pooling and other sorts of optimizations
|
|
118
|
+
* that would depend on the application-specific use case and not determinable
|
|
119
|
+
* by the library.
|
|
120
|
+
*
|
|
121
|
+
*
|
|
122
|
+
* Buffers are initially allocated by RDB using the rdb_buf_reserve_fn callback.
|
|
123
|
+
* This callback is typically invoked from an rdb_rdstart() function to
|
|
124
|
+
* provide the underlying storage for buffers to be read into. It is here
|
|
125
|
+
* that the allocator may choose to extend the buffer beyond the requested size
|
|
126
|
+
* or provide fragmented segments instead of a large contiguous segment.
|
|
127
|
+
*
|
|
128
|
+
* If a specific length of contiguous data is required, the rdb_seg_alloc_fn
|
|
129
|
+
* callback will be invoked (typically from one of the consolidation functions)
|
|
130
|
+
* and here the allocator must return a segment of at least the specified length.
|
|
131
|
+
* If an existing segment (which contains data) must be extended, the
|
|
132
|
+
* rdb_seg_realloc_fn is called.
|
|
133
|
+
*
|
|
134
|
+
* When the segment is no longer needed (i.e. its refcount is 0 and is no
|
|
135
|
+
* longer needed by the library) the rdb_seg_free_fn is called to release its
|
|
136
|
+
* memory. The allocator may place the segment into a pool or release it through
|
|
137
|
+
* other means.
|
|
138
|
+
*
|
|
139
|
+
* Finally, there is the a_release() field which acts as a destructor for the
|
|
140
|
+
* allocator. It signals to the allocator that no _new_ data will be allocated
|
|
141
|
+
* from it.
|
|
142
|
+
*/
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @addtogroup rdb
|
|
146
|
+
* @{
|
|
147
|
+
*/
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
typedef struct rdb_ALLOCATOR *rdb_pALLOCATOR;
|
|
151
|
+
typedef struct rdb_ROPESEG *rdb_pROPESEG;
|
|
152
|
+
typedef struct rdb_ROPEBUF *rdb_pROPEBUF;
|
|
153
|
+
|
|
154
|
+
typedef struct rdb_ROPEBUF {
|
|
155
|
+
lcb_list_t segments; /* linked list of buffer segments */
|
|
156
|
+
unsigned nused; /* bytes of data in use */
|
|
157
|
+
rdb_pALLOCATOR allocator; /* pointer to allocator structure */
|
|
158
|
+
} rdb_ROPEBUF;
|
|
159
|
+
|
|
160
|
+
struct rdb_ROPESEG;
|
|
161
|
+
|
|
162
|
+
enum rdb_SEGFLAGS {
|
|
163
|
+
RDB_ROPESEG_F_USER = 0x01, /* segment has pinned data */
|
|
164
|
+
RDB_ROPESEG_F_LIB = 0x02 /* segment is in use by the library */
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
enum rdb_ALLOCID {
|
|
168
|
+
RDB_ALLOCATOR_BIGALLOC = 1,
|
|
169
|
+
RDB_ALLOCATOR_CHUNKED,
|
|
170
|
+
RDB_ALLOCATOR_LIBCALLOC,
|
|
171
|
+
|
|
172
|
+
/** use constants higher than this for your own allocator(s) */
|
|
173
|
+
RDB_ALLOCATOR_MAX
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/** Segment within a rope buffer */
|
|
177
|
+
typedef struct rdb_ROPESEG {
|
|
178
|
+
lcb_list_t llnode; /** linked list node */
|
|
179
|
+
char *root; /** Allocated buffer */
|
|
180
|
+
unsigned char shflags; /** rdb_SEGFLAGS */
|
|
181
|
+
unsigned char allocid; /** rdb_ALLOCID */
|
|
182
|
+
unsigned nalloc; /** total allocated length */
|
|
183
|
+
unsigned nused; /** number of bytes containing data */
|
|
184
|
+
unsigned start; /** offset where data begins */
|
|
185
|
+
unsigned refcnt; /** see ref/unref */
|
|
186
|
+
rdb_pALLOCATOR allocator;
|
|
187
|
+
} rdb_ROPESEG;
|
|
188
|
+
|
|
189
|
+
typedef struct {
|
|
190
|
+
rdb_ROPEBUF recvd; /** rope containing read data */
|
|
191
|
+
rdb_ROPEBUF avail; /** rope used for subsequent network reads */
|
|
192
|
+
unsigned rdsize; /** preferred read size */
|
|
193
|
+
} rdb_IOROPE;
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* @name Allocator API
|
|
198
|
+
* @{
|
|
199
|
+
*/
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Extend an existing rope structure by adding additional space at the end.
|
|
203
|
+
* @param allocator
|
|
204
|
+
* @param buf the buffer to extend
|
|
205
|
+
* @param total_capacity the number of bytes by which to extend. This should
|
|
206
|
+
* be the total new target capacity.
|
|
207
|
+
*
|
|
208
|
+
* It is assumed that this will only be called when it is safe to relocate
|
|
209
|
+
* the contents of the underlying buffer.
|
|
210
|
+
*
|
|
211
|
+
* Each of the appended rdb_ROPESEG structures should initially have the
|
|
212
|
+
* `RDB_ROPESEG_F_LIB` indicating they are in use by the library.
|
|
213
|
+
*/
|
|
214
|
+
typedef void (*rdb_buf_reserve_fn)
|
|
215
|
+
(rdb_pALLOCATOR allocator, rdb_ROPEBUF *buf, unsigned total_capacity);
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Allocate a new segment.
|
|
220
|
+
* The returned segment should have enough capacity for capacity bytes. The
|
|
221
|
+
* returned shflags should contain RDB_ROPESEG_F_LIBUSED
|
|
222
|
+
*/
|
|
223
|
+
typedef rdb_ROPESEG *(*rdb_seg_alloc_fn)
|
|
224
|
+
(rdb_pALLOCATOR allocator, unsigned capacity);
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* This will resize the segment to be able to contain up to `capacity` bytes.
|
|
228
|
+
* Any contents previously in the buffer should not be changed, though the
|
|
229
|
+
* underlying `root` pointer may change.
|
|
230
|
+
*/
|
|
231
|
+
typedef rdb_ROPESEG *(*rdb_seg_realloc_fn)
|
|
232
|
+
(rdb_pALLOCATOR allocator, rdb_ROPESEG *orig, unsigned capacity);
|
|
233
|
+
|
|
234
|
+
/** Release a previous segment allocated by rdb_seg_alloc_fn */
|
|
235
|
+
typedef void (*rdb_seg_free_fn)(rdb_pALLOCATOR allocator, rdb_ROPESEG *seg);
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
/** Allocator routines. This table is owned by the user. */
|
|
239
|
+
typedef struct rdb_ALLOCATOR {
|
|
240
|
+
rdb_buf_reserve_fn r_reserve;
|
|
241
|
+
rdb_seg_alloc_fn s_alloc;
|
|
242
|
+
rdb_seg_realloc_fn s_realloc;
|
|
243
|
+
rdb_seg_free_fn s_release;
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* This is called explicitly by an IOROPE structure when the allocator
|
|
247
|
+
* is no longer needed. Note that the allocator should likely keep track
|
|
248
|
+
* of any existing segments before freeing all its resources.
|
|
249
|
+
*/
|
|
250
|
+
void (*a_release)(rdb_pALLOCATOR);
|
|
251
|
+
void (*dump)(rdb_pALLOCATOR,FILE*);
|
|
252
|
+
} rdb_ALLOCATOR;
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* @}
|
|
256
|
+
*/
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Initialize the IOROPE structure
|
|
260
|
+
* @param rope a rope to use
|
|
261
|
+
* @param allocator the allocator to use for allocation. The IOROPE structure
|
|
262
|
+
* takes ownership of the allocator.
|
|
263
|
+
*/
|
|
264
|
+
void
|
|
265
|
+
rdb_init(rdb_IOROPE *rope, rdb_ALLOCATOR *allocator);
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Change the allocator for the rope. This can be done at any time during
|
|
269
|
+
* the application.
|
|
270
|
+
* @param rope
|
|
271
|
+
* @param allocator The new allocator to use
|
|
272
|
+
*/
|
|
273
|
+
void
|
|
274
|
+
rdb_challoc(rdb_IOROPE *rope, rdb_ALLOCATOR *allocator);
|
|
275
|
+
|
|
276
|
+
void
|
|
277
|
+
rdb_cleanup(rdb_IOROPE *ior);
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* @name Basic Read API
|
|
282
|
+
* @{
|
|
283
|
+
*/
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* @brief Prepare a series of IOV structures for reading from the network.
|
|
287
|
+
*
|
|
288
|
+
* @param ior the IOROPE structure
|
|
289
|
+
* @param[in,out] iov an array of IOV elements
|
|
290
|
+
* @param niov the number of IOV elements
|
|
291
|
+
*/
|
|
292
|
+
unsigned
|
|
293
|
+
rdb_rdstart(rdb_IOROPE *ior, nb_IOV *iov, unsigned niov);
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Indicate that some data was placed into the IOV structures populated with
|
|
298
|
+
* rdstart()
|
|
299
|
+
* @param ior the IOROPE structure
|
|
300
|
+
* @param nr the number of total bytes placed into the IOV buffers
|
|
301
|
+
*/
|
|
302
|
+
void
|
|
303
|
+
rdb_rdend(rdb_IOROPE *ior, unsigned nr);
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Indicate that some data at the beginning of the buffer is no longer needed
|
|
307
|
+
* @param ior the rope
|
|
308
|
+
* @param nr the number of bytes to discard.
|
|
309
|
+
*
|
|
310
|
+
* Note that if a segment was previously referenced, it is not invalidated
|
|
311
|
+
* but is no longer used within the IOROPE structure itself
|
|
312
|
+
*/
|
|
313
|
+
void
|
|
314
|
+
rdb_consumed(rdb_IOROPE *ior, unsigned nr);
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Ensure that a given chunk of data at the beginning of the rope structure
|
|
318
|
+
* can fit contiguously within a single char buffer
|
|
319
|
+
* @param ior the IOROPE structure
|
|
320
|
+
* @param n number of bytes which must be contiguous
|
|
321
|
+
*/
|
|
322
|
+
void
|
|
323
|
+
rdb_consolidate(rdb_IOROPE *ior, unsigned n);
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Convenience function to retrieve a pointer to the beginning of the
|
|
327
|
+
* buffer. The pointer is guaranteed to point to n contiguous bytes.
|
|
328
|
+
*/
|
|
329
|
+
char *
|
|
330
|
+
rdb_get_consolidated(rdb_IOROPE *ior, unsigned n);
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* @}
|
|
334
|
+
*/
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* @name Extended Read API
|
|
338
|
+
* @{
|
|
339
|
+
*/
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Copy n bytes of data from the beginning of the rope structure into the
|
|
343
|
+
* buffer pointed to by buf
|
|
344
|
+
*/
|
|
345
|
+
void
|
|
346
|
+
rdb_copyread(rdb_IOROPE *ior, void *buf, unsigned n);
|
|
347
|
+
|
|
348
|
+
/** Get the pointer to the beginning of the buffer in the IOROPE. */
|
|
349
|
+
#define rdb_refread(ior) \
|
|
350
|
+
((LCB_LIST_ITEM(ior->recvd.segments.next, rdb_ROPESEG, llnode))->root + \
|
|
351
|
+
(LCB_LIST_ITEM(ior->recvd.segments.next, rdb_ROPESEG, llnode))->start)
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Populate an array of ROPESEG and IOV structures with data from the IOROPE.
|
|
355
|
+
* @param ior
|
|
356
|
+
* @param[out] iov the iov array containing buffer offsets
|
|
357
|
+
* @param[out] segs an array to contain pointers to the segments for the IOVs
|
|
358
|
+
* @param[in] nelem number of elements in the array
|
|
359
|
+
* @param[in] ndata number of bytes to populate the arrays with
|
|
360
|
+
* @return the number of IOV elements actually used, or -1 if the arrays
|
|
361
|
+
* did not contain enough elements to contain the IOVs completely.
|
|
362
|
+
*/
|
|
363
|
+
int
|
|
364
|
+
rdb_refread_ex(rdb_IOROPE *ior, nb_IOV *iov, rdb_ROPESEG **segs,
|
|
365
|
+
unsigned nelem, unsigned ndata);
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Get the maximum contiguous size of the current input. This is the size of
|
|
370
|
+
* data which may be read efficiently via 'get_consolidated' without actually
|
|
371
|
+
* reallocating memory
|
|
372
|
+
*/
|
|
373
|
+
unsigned
|
|
374
|
+
rdb_get_contigsize(rdb_IOROPE *ior);
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Increase the reference count on the segment. When a reference count is set
|
|
378
|
+
* on a segment, internal functions will no longer be able to reuse any of its
|
|
379
|
+
* contents (however further data may be read _into_ the segment). The contents
|
|
380
|
+
* actually reserved are pinned to the contextual IOV structure which should
|
|
381
|
+
* be available when receiving the segment.
|
|
382
|
+
*/
|
|
383
|
+
void
|
|
384
|
+
rdb_seg_ref(rdb_ROPESEG *seg);
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* When you are done with the segment (or the borrowed IOVs thereof) call this.
|
|
388
|
+
* The segment may no longer be accessed by the caller.
|
|
389
|
+
*/
|
|
390
|
+
void
|
|
391
|
+
rdb_seg_unref(rdb_ROPESEG *seg);
|
|
392
|
+
|
|
393
|
+
/** @private */
|
|
394
|
+
#define rdb_seg_recyclable(seg) (((seg)->shflags & RDB_ROPESEG_F_USER) == 0)
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Get the first segment. Useful for associating a contiguous consolidated
|
|
398
|
+
* read without actually using refread
|
|
399
|
+
* @param ior the rope structure
|
|
400
|
+
* @return the segment of the contiguous read
|
|
401
|
+
*/
|
|
402
|
+
#define rdb_get_first_segment(ior) RDB_SEG_FIRST(&(ior)->recvd)
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* @}
|
|
406
|
+
*/
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* @name Utility Macros
|
|
410
|
+
* @{
|
|
411
|
+
*/
|
|
412
|
+
|
|
413
|
+
/** number of unused bytes remaining in the segment */
|
|
414
|
+
#define RDB_SEG_SPACE(seg) (seg)->nalloc - ((seg)->nused + (seg)->start)
|
|
415
|
+
|
|
416
|
+
/** pointer to the first used byte in the segment */
|
|
417
|
+
#define RDB_SEG_RBUF(seg) (seg)->root + (seg)->start
|
|
418
|
+
|
|
419
|
+
/** pointer to the first available unused byte in the segment */
|
|
420
|
+
#define RDB_SEG_WBUF(seg) (seg)->root + (seg)->start + (seg)->nused
|
|
421
|
+
|
|
422
|
+
/** last segment in the rope structure */
|
|
423
|
+
#define RDB_SEG_LAST(rope) \
|
|
424
|
+
(LCB_LIST_TAIL(&(rope)->segments)) \
|
|
425
|
+
? LCB_LIST_ITEM(LCB_LIST_TAIL(&(rope)->segments), rdb_ROPESEG, llnode) \
|
|
426
|
+
: NULL
|
|
427
|
+
|
|
428
|
+
/** first segment in the rope structure */
|
|
429
|
+
#define RDB_SEG_FIRST(rope) \
|
|
430
|
+
(LCB_LIST_HEAD(&(rope)->segments)) \
|
|
431
|
+
? LCB_LIST_ITEM(LCB_LIST_HEAD(&(rope)->segments), rdb_ROPESEG, llnode) \
|
|
432
|
+
: NULL
|
|
433
|
+
/**
|
|
434
|
+
* @}
|
|
435
|
+
*/
|
|
436
|
+
|
|
437
|
+
#define rdb_get_nused(ior) (ior)->recvd.nused
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Add data into the read buffer. This is primarily used for testing and does
|
|
441
|
+
* the equivalent of a network "Read".
|
|
442
|
+
* @param ior The iorope structure
|
|
443
|
+
* @param buf The buffer to copy
|
|
444
|
+
* @param nbuf Size of the buffer
|
|
445
|
+
*/
|
|
446
|
+
void
|
|
447
|
+
rdb_copywrite(rdb_IOROPE *ior, void *buf, unsigned nbuf);
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Allocator APIs
|
|
451
|
+
* Returns the big or "Default" allocator.
|
|
452
|
+
*/
|
|
453
|
+
LCB_INTERNAL_API
|
|
454
|
+
rdb_ALLOCATOR *
|
|
455
|
+
rdb_bigalloc_new(void);
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Returns a chunked allocator which will attempt to allocated readahead buffers
|
|
459
|
+
* of a specified size
|
|
460
|
+
* @param chunksize the desired chunk/segment size
|
|
461
|
+
*/
|
|
462
|
+
LCB_INTERNAL_API
|
|
463
|
+
rdb_ALLOCATOR *
|
|
464
|
+
rdb_chunkalloc_new(unsigned chunksize);
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Returns a simple allocator which merely proxies to malloc/calloc/realloc/free
|
|
468
|
+
*/
|
|
469
|
+
LCB_INTERNAL_API
|
|
470
|
+
rdb_ALLOCATOR *
|
|
471
|
+
rdb_libcalloc_new(void);
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Dump information about the iorope structure to a file
|
|
475
|
+
* @param ior The rope structure to dump
|
|
476
|
+
* @param fp The destination file.
|
|
477
|
+
*/
|
|
478
|
+
void
|
|
479
|
+
rdb_dump(const rdb_IOROPE *ior, FILE *fp);
|
|
480
|
+
|
|
481
|
+
#ifdef __cplusplus
|
|
482
|
+
}
|
|
483
|
+
#endif
|
|
484
|
+
#endif
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* @}
|
|
488
|
+
*/
|