mt-libcouchbase 1.4.0
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 +22 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +38 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +445 -0
- data/Rakefile +76 -0
- data/ext/README.md +6 -0
- data/ext/Rakefile +19 -0
- data/ext/libcouchbase/.gitignore +132 -0
- data/ext/libcouchbase/CMakeLists.txt +455 -0
- data/ext/libcouchbase/CONTRIBUTING.md +105 -0
- data/ext/libcouchbase/LICENSE +202 -0
- data/ext/libcouchbase/README.markdown +195 -0
- data/ext/libcouchbase/RELEASE_NOTES.markdown +3523 -0
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +52 -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 +18 -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 +54 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +57 -0
- data/ext/libcouchbase/cmake/Modules/FindProfiler.cmake +16 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +49 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +142 -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 +80 -0
- data/ext/libcouchbase/cmake/configure +355 -0
- data/ext/libcouchbase/cmake/defs.mk.in +6 -0
- data/ext/libcouchbase/cmake/dtrace-instr-link.pl +51 -0
- data/ext/libcouchbase/cmake/libcouchbase.stp.in +829 -0
- data/ext/libcouchbase/cmake/source_files.cmake +104 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.c +1022 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
- data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +25 -0
- data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
- data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +259 -0
- data/ext/libcouchbase/contrib/cbsasl/src/client.c +419 -0
- data/ext/libcouchbase/contrib/cbsasl/src/common.c +50 -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/scram-sha/scram_utils.c +500 -0
- data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.h +99 -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 +938 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +610 -0
- data/ext/libcouchbase/contrib/genhash/genhash.c +371 -0
- data/ext/libcouchbase/contrib/genhash/genhash.h +241 -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 +4893 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
- data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +7 -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 +75 -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 +100 -0
- data/ext/libcouchbase/contrib/snappy/snappy.cc +1312 -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/doc/Doxyfile +2495 -0
- data/ext/libcouchbase/doc/DoxygenLayout.xml +109 -0
- data/ext/libcouchbase/doc/Makefile +44 -0
- data/ext/libcouchbase/doc/apiattr.h +117 -0
- data/ext/libcouchbase/doc/cbc-n1qlback.markdown +88 -0
- data/ext/libcouchbase/doc/cbc-pillowfight.markdown +296 -0
- data/ext/libcouchbase/doc/cbc-subdoc.markdown +299 -0
- data/ext/libcouchbase/doc/cbc.markdown +763 -0
- data/ext/libcouchbase/doc/cbcrc.markdown +52 -0
- data/ext/libcouchbase/doc/common-additional-options.markdown +82 -0
- data/ext/libcouchbase/doc/common-options.markdown +71 -0
- data/ext/libcouchbase/doc/environment.h +93 -0
- data/ext/libcouchbase/doc/example/threads.c +77 -0
- data/ext/libcouchbase/doc/footer.html +22 -0
- data/ext/libcouchbase/doc/genman.sh +25 -0
- data/ext/libcouchbase/doc/header.html +52 -0
- data/ext/libcouchbase/doc/intro.h +130 -0
- data/ext/libcouchbase/doc/mainpage.h +136 -0
- data/ext/libcouchbase/doc/man/cbc-admin.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-bucket-create.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-bucket-delete.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-cat.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-connstr.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-cp.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-create.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-decr.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-flush.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-hash.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-incr.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-lock.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-mcflush.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-mcversion.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-n1ql.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-n1qlback.1 +198 -0
- data/ext/libcouchbase/doc/man/cbc-observe.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-pillowfight.1 +499 -0
- data/ext/libcouchbase/doc/man/cbc-ping.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-rm.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-role-list.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-stats.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-subdoc.1 +494 -0
- data/ext/libcouchbase/doc/man/cbc-unlock.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-user-delete.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-user-list.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-user-upsert.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-verbosity.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-version.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-view.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-watch.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc.1 +1035 -0
- data/ext/libcouchbase/doc/man/cbcrc.4 +71 -0
- data/ext/libcouchbase/doc/style.css +1162 -0
- data/ext/libcouchbase/example/CMakeLists.txt +52 -0
- data/ext/libcouchbase/example/README.markdown +47 -0
- data/ext/libcouchbase/example/analytics/.gitignore +1 -0
- data/ext/libcouchbase/example/analytics/analytics.c +158 -0
- data/ext/libcouchbase/example/analytics/build-queries.rb +34 -0
- data/ext/libcouchbase/example/analytics/cJSON.c +1 -0
- data/ext/libcouchbase/example/analytics/cJSON.h +1 -0
- data/ext/libcouchbase/example/analytics/queries/00-show-dataverse.json +5 -0
- data/ext/libcouchbase/example/analytics/queries/01-setup-dataset-breweries.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/02-setup-dataset-beers.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/03-initiate-shadow.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/04-list-datasets.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/05-count-breweries.json +5 -0
- data/ext/libcouchbase/example/analytics/queries/06-first-brewery.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/07-key-based-lookup.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/08-exact-match-lookup.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/09-exact-match-lookup-different-shape.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/10-other-query-filters.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/11-equijoin.json +9 -0
- data/ext/libcouchbase/example/analytics/queries/12-equijoin-select-star.json +10 -0
- data/ext/libcouchbase/example/analytics/queries/13-ansi-join.json +8 -0
- data/ext/libcouchbase/example/analytics/queries/14-join-select-values.json +8 -0
- data/ext/libcouchbase/example/analytics/queries/15-nested-outer-join.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/16-theta-join.json +8 -0
- data/ext/libcouchbase/example/analytics/queries/17-existential-quantification.json +9 -0
- data/ext/libcouchbase/example/analytics/queries/18-universal-quantification.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/19-simple-aggregation.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/20-simple-aggregation-unwrapped-value.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/21-simple-aggregation-explicit.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/22-grouping-and-aggregation.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/23-grouping-and-aggregation-with-hint.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/24-grouping-and-limits.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/25-named-parameters.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/26-positional-parameters.json +7 -0
- data/ext/libcouchbase/example/analytics/queries.h +113 -0
- data/ext/libcouchbase/example/crypto/.gitignore +2 -0
- data/ext/libcouchbase/example/crypto/Makefile +13 -0
- data/ext/libcouchbase/example/crypto/common_provider.c +26 -0
- data/ext/libcouchbase/example/crypto/common_provider.h +33 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_decrypt.c +144 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_encrypt.c +146 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.c +271 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.h +29 -0
- data/ext/libcouchbase/example/db/db.c +171 -0
- data/ext/libcouchbase/example/db/vb.c +227 -0
- data/ext/libcouchbase/example/fts/.gitignore +1 -0
- data/ext/libcouchbase/example/fts/build-queries.rb +33 -0
- data/ext/libcouchbase/example/fts/fts.c +142 -0
- data/ext/libcouchbase/example/fts/queries/00-simple-text-query.json +12 -0
- data/ext/libcouchbase/example/fts/queries/01-simple-text-query-on-non-default-index.json +9 -0
- data/ext/libcouchbase/example/fts/queries/02-simple-text-query-on-stored-field.json +13 -0
- data/ext/libcouchbase/example/fts/queries/03-match-query-with-facet.json +19 -0
- data/ext/libcouchbase/example/fts/queries/04-docid-query.json +11 -0
- data/ext/libcouchbase/example/fts/queries/05-unanalyzed-term-query-with-fuzziness-level-of-0.json +13 -0
- data/ext/libcouchbase/example/fts/queries/06-unanalyzed-term-query-with-fuzziness-level-of-2.json +14 -0
- data/ext/libcouchbase/example/fts/queries/07-match-phrase-query.json +13 -0
- data/ext/libcouchbase/example/fts/queries/08-phrase-query.json +16 -0
- data/ext/libcouchbase/example/fts/queries/09-query-string-query.json +9 -0
- data/ext/libcouchbase/example/fts/queries/10-conjunction-query.json +21 -0
- data/ext/libcouchbase/example/fts/queries/11-wild-card-query.json +13 -0
- data/ext/libcouchbase/example/fts/queries/12-numeric-range-query.json +11 -0
- data/ext/libcouchbase/example/fts/queries/13-regexp-query.json +13 -0
- data/ext/libcouchbase/example/fts/queries.h +61 -0
- data/ext/libcouchbase/example/instancepool/main.cc +112 -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 +222 -0
- data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
- data/ext/libcouchbase/example/minimal/.gitignore +1 -0
- data/ext/libcouchbase/example/minimal/minimal.c +132 -0
- data/ext/libcouchbase/example/minimal/query.c +185 -0
- data/ext/libcouchbase/example/observe/durability.c +102 -0
- data/ext/libcouchbase/example/observe/observe.c +159 -0
- data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +143 -0
- data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +201 -0
- data/ext/libcouchbase/example/subdoc/subdoc-xattrs.c +286 -0
- data/ext/libcouchbase/example/tick/tick.c +119 -0
- data/ext/libcouchbase/example/tracing/.gitignore +2 -0
- data/ext/libcouchbase/example/tracing/Makefile +8 -0
- data/ext/libcouchbase/example/tracing/cJSON.c +1 -0
- data/ext/libcouchbase/example/tracing/cJSON.h +1 -0
- data/ext/libcouchbase/example/tracing/tracing.c +439 -0
- data/ext/libcouchbase/example/tracing/views.c +444 -0
- data/ext/libcouchbase/example/users/README +48 -0
- data/ext/libcouchbase/example/users/users.c +147 -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/auth.h +297 -0
- data/ext/libcouchbase/include/libcouchbase/cbft.h +151 -0
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +319 -0
- data/ext/libcouchbase/include/libcouchbase/cntl.h +1418 -0
- data/ext/libcouchbase/include/libcouchbase/configuration.h.in +29 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +4089 -0
- data/ext/libcouchbase/include/libcouchbase/crypto.h +306 -0
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +312 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +680 -0
- data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
- data/ext/libcouchbase/include/libcouchbase/iops.h +1053 -0
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
- data/ext/libcouchbase/include/libcouchbase/kvbuf.h +137 -0
- data/ext/libcouchbase/include/libcouchbase/metrics.h +79 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +539 -0
- data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +370 -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 +347 -0
- data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
- data/ext/libcouchbase/include/libcouchbase/tracing.h +437 -0
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +680 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +357 -0
- data/ext/libcouchbase/include/libcouchbase/visibility.h +66 -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 +885 -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 +72 -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 +101 -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 +467 -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 +31 -0
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +66 -0
- data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
- data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +31 -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 +44 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +218 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +155 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +709 -0
- data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +13 -0
- data/ext/libcouchbase/plugins/io/select/plugin-select.c +451 -0
- data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
- data/ext/libcouchbase/src/README.md +101 -0
- data/ext/libcouchbase/src/aspend.h +105 -0
- data/ext/libcouchbase/src/auth-priv.h +85 -0
- data/ext/libcouchbase/src/auth.cc +146 -0
- data/ext/libcouchbase/src/bootstrap.cc +263 -0
- data/ext/libcouchbase/src/bootstrap.h +149 -0
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +450 -0
- data/ext/libcouchbase/src/bucketconfig/bc_file.cc +281 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.cc +527 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +107 -0
- data/ext/libcouchbase/src/bucketconfig/bc_static.cc +150 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +700 -0
- data/ext/libcouchbase/src/bucketconfig/confmon.cc +403 -0
- data/ext/libcouchbase/src/callbacks.c +380 -0
- data/ext/libcouchbase/src/cbft.cc +253 -0
- data/ext/libcouchbase/src/cntl.cc +1057 -0
- data/ext/libcouchbase/src/config_static.h +176 -0
- data/ext/libcouchbase/src/connspec.cc +555 -0
- data/ext/libcouchbase/src/connspec.h +155 -0
- data/ext/libcouchbase/src/crypto.cc +399 -0
- data/ext/libcouchbase/src/ctx-log-inl.h +44 -0
- data/ext/libcouchbase/src/dns-srv.cc +146 -0
- data/ext/libcouchbase/src/dump.cc +103 -0
- data/ext/libcouchbase/src/errmap.cc +173 -0
- data/ext/libcouchbase/src/errmap.h +271 -0
- data/ext/libcouchbase/src/getconfig.cc +72 -0
- data/ext/libcouchbase/src/gethrtime.c +109 -0
- data/ext/libcouchbase/src/handler.cc +1101 -0
- data/ext/libcouchbase/src/hashtable.c +75 -0
- data/ext/libcouchbase/src/hdr_timings.c +92 -0
- data/ext/libcouchbase/src/hostlist.cc +293 -0
- data/ext/libcouchbase/src/hostlist.h +160 -0
- data/ext/libcouchbase/src/http/http-priv.h +326 -0
- data/ext/libcouchbase/src/http/http.cc +672 -0
- data/ext/libcouchbase/src/http/http.h +1 -0
- data/ext/libcouchbase/src/http/http_io.cc +316 -0
- data/ext/libcouchbase/src/instance.cc +917 -0
- data/ext/libcouchbase/src/internal.h +285 -0
- data/ext/libcouchbase/src/iofactory.c +575 -0
- data/ext/libcouchbase/src/jsparse/parser.cc +445 -0
- data/ext/libcouchbase/src/jsparse/parser.h +159 -0
- data/ext/libcouchbase/src/lcbht/lcbht.cc +177 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +210 -0
- data/ext/libcouchbase/src/lcbio/connect.cc +603 -0
- data/ext/libcouchbase/src/lcbio/connect.h +400 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +658 -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 +169 -0
- data/ext/libcouchbase/src/lcbio/ioutils.cc +356 -0
- data/ext/libcouchbase/src/lcbio/ioutils.h +144 -0
- data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
- data/ext/libcouchbase/src/lcbio/manager.cc +579 -0
- data/ext/libcouchbase/src/lcbio/manager.h +195 -0
- data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
- data/ext/libcouchbase/src/lcbio/rw-inl.h +137 -0
- data/ext/libcouchbase/src/lcbio/ssl.h +159 -0
- data/ext/libcouchbase/src/lcbio/timer-cxx.h +87 -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 +431 -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 +88 -0
- data/ext/libcouchbase/src/mc/compress.cc +171 -0
- data/ext/libcouchbase/src/mc/compress.h +56 -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 +115 -0
- data/ext/libcouchbase/src/mc/mcreq.c +983 -0
- data/ext/libcouchbase/src/mc/mcreq.h +1015 -0
- data/ext/libcouchbase/src/mcserver/mcserver.cc +1055 -0
- data/ext/libcouchbase/src/mcserver/mcserver.h +221 -0
- data/ext/libcouchbase/src/mcserver/negotiate.cc +757 -0
- data/ext/libcouchbase/src/mcserver/negotiate.h +128 -0
- data/ext/libcouchbase/src/mctx-helper.h +62 -0
- data/ext/libcouchbase/src/metrics.cc +132 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +857 -0
- data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
- data/ext/libcouchbase/src/n1ql/n1ql.cc +830 -0
- data/ext/libcouchbase/src/n1ql/params.cc +260 -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.cc +365 -0
- data/ext/libcouchbase/src/nodeinfo.cc +184 -0
- data/ext/libcouchbase/src/operations/cbflush.cc +63 -0
- data/ext/libcouchbase/src/operations/counter.cc +117 -0
- data/ext/libcouchbase/src/operations/durability-cas.cc +251 -0
- data/ext/libcouchbase/src/operations/durability-seqno.cc +170 -0
- data/ext/libcouchbase/src/operations/durability.cc +668 -0
- data/ext/libcouchbase/src/operations/durability_internal.h +306 -0
- data/ext/libcouchbase/src/operations/get.cc +409 -0
- data/ext/libcouchbase/src/operations/observe-seqno.cc +94 -0
- data/ext/libcouchbase/src/operations/observe.cc +367 -0
- data/ext/libcouchbase/src/operations/ping.cc +496 -0
- data/ext/libcouchbase/src/operations/pktfwd.cc +86 -0
- data/ext/libcouchbase/src/operations/remove.cc +84 -0
- data/ext/libcouchbase/src/operations/stats.cc +459 -0
- data/ext/libcouchbase/src/operations/store.cc +358 -0
- data/ext/libcouchbase/src/operations/subdoc.cc +614 -0
- data/ext/libcouchbase/src/operations/touch.cc +84 -0
- data/ext/libcouchbase/src/packetutils.h +388 -0
- data/ext/libcouchbase/src/probes.d +182 -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.cc +113 -0
- data/ext/libcouchbase/src/retryq.cc +458 -0
- data/ext/libcouchbase/src/retryq.h +170 -0
- data/ext/libcouchbase/src/ringbuffer.c +442 -0
- data/ext/libcouchbase/src/ringbuffer.h +100 -0
- data/ext/libcouchbase/src/rnd.cc +61 -0
- data/ext/libcouchbase/src/rnd.h +39 -0
- data/ext/libcouchbase/src/settings.c +125 -0
- data/ext/libcouchbase/src/settings.h +273 -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 +11 -0
- data/ext/libcouchbase/src/ssl/ssl_c.c +442 -0
- data/ext/libcouchbase/src/ssl/ssl_common.c +478 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +421 -0
- data/ext/libcouchbase/src/ssl/ssl_iot_common.h +182 -0
- data/ext/libcouchbase/src/strcodecs/base64.c +307 -0
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +302 -0
- data/ext/libcouchbase/src/timings.c +207 -0
- data/ext/libcouchbase/src/trace.h +117 -0
- data/ext/libcouchbase/src/tracing/span.cc +421 -0
- data/ext/libcouchbase/src/tracing/threshold_logging_tracer.cc +213 -0
- data/ext/libcouchbase/src/tracing/tracer.cc +53 -0
- data/ext/libcouchbase/src/tracing/tracing-internal.h +198 -0
- data/ext/libcouchbase/src/utilities.c +176 -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 +1735 -0
- data/ext/libcouchbase/src/views/docreq.cc +213 -0
- data/ext/libcouchbase/src/views/docreq.h +94 -0
- data/ext/libcouchbase/src/views/viewreq.cc +381 -0
- data/ext/libcouchbase/src/views/viewreq.h +87 -0
- data/ext/libcouchbase/src/wait.cc +156 -0
- data/ext/libcouchbase/tests/CMakeLists.txt +149 -0
- data/ext/libcouchbase/tests/basic/t_base64.cc +109 -0
- data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
- data/ext/libcouchbase/tests/basic/t_connstr.cc +456 -0
- data/ext/libcouchbase/tests/basic/t_creds.cc +96 -0
- data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
- data/ext/libcouchbase/tests/basic/t_host.cc +210 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +82 -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 +17 -0
- data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
- data/ext/libcouchbase/tests/basic/t_packet.cc +215 -0
- data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
- data/ext/libcouchbase/tests/basic/t_scram.cc +514 -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_urlencode.cc +132 -0
- data/ext/libcouchbase/tests/check-all.cc +612 -0
- data/ext/libcouchbase/tests/htparse/t_basic.cc +173 -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 +117 -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 +632 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.h +480 -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 +220 -0
- data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +223 -0
- data/ext/libcouchbase/tests/iotests/t_durability.cc +1108 -0
- data/ext/libcouchbase/tests/iotests/t_eerrs.cc +121 -0
- data/ext/libcouchbase/tests/iotests/t_errmap.cc +181 -0
- data/ext/libcouchbase/tests/iotests/t_forward.cc +118 -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 +274 -0
- data/ext/libcouchbase/tests/iotests/t_misc.cc +777 -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 +778 -0
- data/ext/libcouchbase/tests/iotests/t_obseqno.cc +156 -0
- data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
- data/ext/libcouchbase/tests/iotests/t_sched.cc +87 -0
- data/ext/libcouchbase/tests/iotests/t_serverops.cc +231 -0
- data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
- data/ext/libcouchbase/tests/iotests/t_snappy.cc +316 -0
- data/ext/libcouchbase/tests/iotests/t_subdoc.cc +857 -0
- data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
- data/ext/libcouchbase/tests/iotests/t_views.cc +417 -0
- data/ext/libcouchbase/tests/iotests/testutil.cc +251 -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 +344 -0
- data/ext/libcouchbase/tests/socktests/socktest.h +447 -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 +159 -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/ketama_expected.json +2562 -0
- data/ext/libcouchbase/tests/vbucket/confdata/map_node_present_nodesext_missing_nodes.json +94 -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/memd_ketama_config.json +31 -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 +386 -0
- data/ext/libcouchbase/tools/CMakeLists.txt +80 -0
- data/ext/libcouchbase/tools/cbc-handlers.h +636 -0
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +496 -0
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +1230 -0
- data/ext/libcouchbase/tools/cbc-proxy.cc +534 -0
- data/ext/libcouchbase/tools/cbc-subdoc.cc +825 -0
- data/ext/libcouchbase/tools/cbc.cc +1928 -0
- data/ext/libcouchbase/tools/common/histogram.cc +44 -0
- data/ext/libcouchbase/tools/common/histogram.h +23 -0
- data/ext/libcouchbase/tools/common/options.cc +451 -0
- data/ext/libcouchbase/tools/common/options.h +90 -0
- data/ext/libcouchbase/tools/docgen/docgen.h +495 -0
- data/ext/libcouchbase/tools/docgen/loc.h +211 -0
- data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
- data/ext/libcouchbase/tools/docgen/seqgen.h +122 -0
- data/ext/libcouchbase/tools/extract-packets.rb +110 -0
- data/ext/libcouchbase/tools/linenoise/linenoise.c +1199 -0
- data/ext/libcouchbase/tools/linenoise/linenoise.h +73 -0
- data/lib/mt-libcouchbase/bucket.rb +825 -0
- data/lib/mt-libcouchbase/callbacks.rb +69 -0
- data/lib/mt-libcouchbase/connection.rb +896 -0
- data/lib/mt-libcouchbase/design_docs.rb +92 -0
- data/lib/mt-libcouchbase/error.rb +68 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdbase.rb +23 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdcounter.rb +36 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdendure.rb +26 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdfts.rb +24 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdget.rb +30 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdgetreplica.rb +49 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdhttp.rb +58 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdn1ql.rb +40 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdobseqno.rb +33 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdobserve.rb +30 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdstore.rb +40 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdstoredur.rb +45 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdsubdoc.rb +61 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdverbosity.rb +29 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdviewquery.rb +61 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/contigbuf.rb +14 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st.rb +15 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st0.rb +23 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st1.rb +26 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st2.rb +32 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st3.rb +26 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/crst_u.rb +20 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/durability_opts_st_v.rb +11 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/durability_opts_t.rb +14 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/durabilityopt_sv0.rb +63 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/enums.rb +1007 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/fragbuf.rb +18 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/ftshandle.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/histogram.rb +34 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/http_request_t.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/keybuf.rb +20 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/multicmd_ctx.rb +30 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/mutation_token.rb +17 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/n1qlhandle.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/n1qlparams.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respbase.rb +29 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respcounter.rb +32 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respendure.rb +49 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respfts.rb +40 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respget.rb +44 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/resphttp.rb +48 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respmcversion.rb +38 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respn1ql.rb +41 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respobseqno.rb +52 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respobserve.rb +41 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respserverbase.rb +32 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstats.rb +38 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstore.rb +32 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstoredur.rb +38 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respsubdoc.rb +35 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respviewquery.rb +67 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/sdentry.rb +22 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/sdspec.rb +31 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/t.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/valbuf.rb +22 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/valbuf_u_buf.rb +14 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/viewhandle.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase.rb +1175 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase_libuv.rb +22 -0
- data/lib/mt-libcouchbase/ext/tasks.rb +39 -0
- data/lib/mt-libcouchbase/n1ql.rb +80 -0
- data/lib/mt-libcouchbase/query_full_text.rb +147 -0
- data/lib/mt-libcouchbase/query_n1ql.rb +123 -0
- data/lib/mt-libcouchbase/query_view.rb +135 -0
- data/lib/mt-libcouchbase/results_fiber.rb +281 -0
- data/lib/mt-libcouchbase/results_native.rb +220 -0
- data/lib/mt-libcouchbase/subdoc_request.rb +139 -0
- data/lib/mt-libcouchbase/version.rb +5 -0
- data/lib/mt-libcouchbase.rb +40 -0
- data/mt-libcouchbase.gemspec +68 -0
- data/spec/bucket_spec.rb +290 -0
- data/spec/connection_spec.rb +257 -0
- data/spec/design_docs_spec.rb +31 -0
- data/spec/error_spec.rb +26 -0
- data/spec/fts_spec.rb +135 -0
- data/spec/n1ql_spec.rb +260 -0
- data/spec/results_libuv_spec.rb +244 -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/subdoc_spec.rb +192 -0
- data/spec/view_spec.rb +201 -0
- data/windows_build.md +36 -0
- metadata +873 -0
|
@@ -0,0 +1,306 @@
|
|
|
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_DURABILITY_INTERNAL_H
|
|
19
|
+
#define LCB_DURABILITY_INTERNAL_H
|
|
20
|
+
|
|
21
|
+
#ifdef __cplusplus
|
|
22
|
+
#include "mctx-helper.h"
|
|
23
|
+
|
|
24
|
+
extern "C" {
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @name internal durability functions
|
|
29
|
+
* These functions are used internally beyond the durability module.
|
|
30
|
+
* @{
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Called from the OBSERVE codebase to update an item's status for CAS-based
|
|
35
|
+
* observe
|
|
36
|
+
*/
|
|
37
|
+
void lcbdur_cas_update(lcb_t, void *dset, lcb_error_t, const lcb_RESPOBSERVE *);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Called from the OBSERVE codebase to update an item's status for seqno-based
|
|
41
|
+
* observe
|
|
42
|
+
*/
|
|
43
|
+
void lcbdur_update_seqno(lcb_t, void *dset, const lcb_RESPOBSEQNO*);
|
|
44
|
+
|
|
45
|
+
/** Indicate that this durability command context is for an original storage op */
|
|
46
|
+
void lcbdurctx_set_durstore(lcb_MULTICMD_CTX *ctx, int enabled);
|
|
47
|
+
|
|
48
|
+
void lcbdur_destroy(void *dset);
|
|
49
|
+
|
|
50
|
+
/** Called from durability-cas to request an OBSERVE with a special callback */
|
|
51
|
+
lcb_MULTICMD_CTX *lcb_observe_ctx_dur_new(lcb_t instance);
|
|
52
|
+
|
|
53
|
+
/**@}
|
|
54
|
+
*
|
|
55
|
+
* The rest of this file is internal to the various durability operations and
|
|
56
|
+
* is not accessed by the rest of the codebase
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
#ifdef __cplusplus
|
|
60
|
+
}
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
#ifdef LCBDUR_PRIV_SYMS
|
|
64
|
+
namespace lcb {
|
|
65
|
+
namespace durability {
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Here is the internal API for the durability functions.
|
|
69
|
+
*
|
|
70
|
+
* Durability works on polling multiple observe responses and waiting until a
|
|
71
|
+
* key (or set of keys) have either been persisted, or the wait period has
|
|
72
|
+
* expired.
|
|
73
|
+
*
|
|
74
|
+
* The operation maintains an internal counter which counts how many keys
|
|
75
|
+
* do not have a conclusive observe response yet (i.e. how many do not have
|
|
76
|
+
* their criteria satisfied yet). The operation is considered complete when
|
|
77
|
+
* the counter reaches 0.
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Information about a particular server's state -- whether it has been
|
|
82
|
+
* persisted to or replicated to. This is tied to a given mc_SERVER
|
|
83
|
+
* instance.
|
|
84
|
+
*/
|
|
85
|
+
struct ServerInfo {
|
|
86
|
+
const lcb::Server *server; /**< Server pointer (for comparison only) */
|
|
87
|
+
lcb_U16 persisted; /**< Exists on server */
|
|
88
|
+
lcb_U16 exists; /**< Persisted to server */
|
|
89
|
+
|
|
90
|
+
ServerInfo() : server(NULL), persisted(0), exists(0) {
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
void clear() {
|
|
94
|
+
server = NULL;
|
|
95
|
+
persisted = 0;
|
|
96
|
+
exists = 0;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
struct Durset;
|
|
101
|
+
|
|
102
|
+
// For use in conjunction with MCREQ_F_PRIVCALLBACK
|
|
103
|
+
struct CallbackCookie {
|
|
104
|
+
lcb_RESPCALLBACK callback;
|
|
105
|
+
|
|
106
|
+
CallbackCookie() : callback(NULL) {}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**Information a single entry in a durability set. Each entry contains a single
|
|
110
|
+
* key */
|
|
111
|
+
struct Item : public CallbackCookie {
|
|
112
|
+
Item():
|
|
113
|
+
reqcas(0),
|
|
114
|
+
reqseqno(0),
|
|
115
|
+
uuid(0),
|
|
116
|
+
result(),
|
|
117
|
+
parent(NULL),
|
|
118
|
+
vbid(0),
|
|
119
|
+
done(0)
|
|
120
|
+
{
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Returns true if the entry is complete, false otherwise. This only assumes
|
|
125
|
+
* successful entries.
|
|
126
|
+
*/
|
|
127
|
+
bool is_all_done() const;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Determine if this item has been satisfied on a specific server. This
|
|
131
|
+
* function is used to determine if a probe should be sent to the server.
|
|
132
|
+
*
|
|
133
|
+
* If there are no items "tied" to the server (because they have all been
|
|
134
|
+
* completed) then we employ a bandwidth saving optimization by not sending
|
|
135
|
+
* additional probes to it.
|
|
136
|
+
*
|
|
137
|
+
* @param info Server to check against
|
|
138
|
+
* @param is_master If this server is the master for the item's vbucket
|
|
139
|
+
*
|
|
140
|
+
* @return true if the item is both persisted and replicated on the server,
|
|
141
|
+
* OR if the item has been replicated, but replication is not
|
|
142
|
+
* required for the item.
|
|
143
|
+
*/
|
|
144
|
+
bool is_server_done(const ServerInfo& info, bool is_master) const;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Updates the state of the given entry and synchronizes it with the
|
|
148
|
+
* current server list.
|
|
149
|
+
*
|
|
150
|
+
* Specifically this function will return a list of
|
|
151
|
+
* servers which still need to be contacted, and will increment internal
|
|
152
|
+
* counters on behalf of those (still active) servers which the item has
|
|
153
|
+
* already been replicated to (and persisted to, if requested).
|
|
154
|
+
*
|
|
155
|
+
* This will invalidate any cached information of the cluster configuration
|
|
156
|
+
* in respect to this item has changed -- this includes things like servers
|
|
157
|
+
* moving indices or being recreated entirely.
|
|
158
|
+
*
|
|
159
|
+
* This function should be called during poll().
|
|
160
|
+
* @param[out] ixarray An array of server indices which should be queried
|
|
161
|
+
* @return the number of effective entries in the array.
|
|
162
|
+
*/
|
|
163
|
+
size_t prepare(uint16_t ixarray[4]);
|
|
164
|
+
|
|
165
|
+
enum UpdateFlags {
|
|
166
|
+
NO_CHANGES = 0x00,
|
|
167
|
+
UPDATE_PERSISTED = 0x01,
|
|
168
|
+
UPDATE_REPLICATED = 0x02
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Update an item's status.
|
|
173
|
+
* @param flags OR'd set of UPDATE_PERSISTED and UPDATE_REPLICATED
|
|
174
|
+
* @param ix The server index
|
|
175
|
+
*/
|
|
176
|
+
void update(int flags, int srvix);
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Set the logical state of the entry to done, and invoke the callback.
|
|
180
|
+
* It is safe to call this multiple times
|
|
181
|
+
*/
|
|
182
|
+
void finish();
|
|
183
|
+
|
|
184
|
+
void finish(lcb_error_t err) {
|
|
185
|
+
result.rc = err;
|
|
186
|
+
finish();
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
lcb_RESPENDURE& res() { return result; }
|
|
190
|
+
const lcb_RESPENDURE& res() const { return result; }
|
|
191
|
+
ServerInfo* get_server_info(int index);
|
|
192
|
+
|
|
193
|
+
lcb_U64 reqcas; /**< Last known CAS for the user */
|
|
194
|
+
lcb_U64 reqseqno; /**< Last known seqno for the user */
|
|
195
|
+
lcb_U64 uuid;
|
|
196
|
+
lcb_RESPENDURE result; /**< Result to be passed to user */
|
|
197
|
+
Durset *parent;
|
|
198
|
+
lcb_U16 vbid; /**< vBucket ID (computed via hashkey) */
|
|
199
|
+
lcb_U8 done; /**< Whether we have a conclusive result for this entry */
|
|
200
|
+
|
|
201
|
+
/** Array of servers which have satisfied constraints */
|
|
202
|
+
ServerInfo sinfo[4];
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* A collection encompassing one or more entries which are to be checked for
|
|
207
|
+
* persistence
|
|
208
|
+
*/
|
|
209
|
+
struct Durset : public MultiCmdContext {
|
|
210
|
+
/**
|
|
211
|
+
* Call this when the polling method (poll_impl()) has completed. This will
|
|
212
|
+
* trigger a new poll after the interval.
|
|
213
|
+
*/
|
|
214
|
+
void on_poll_done();
|
|
215
|
+
|
|
216
|
+
void incref() { refcnt++; }
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Decrement the refcount for the 'dset'. When it hits zero then the dset is
|
|
220
|
+
* freed
|
|
221
|
+
*/
|
|
222
|
+
void decref() { if (!--refcnt) { delete this; } }
|
|
223
|
+
|
|
224
|
+
enum State {
|
|
225
|
+
STATE_OBSPOLL,
|
|
226
|
+
STATE_INIT,
|
|
227
|
+
STATE_TIMEOUT,
|
|
228
|
+
STATE_IGNORE
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Schedules us to be notified with the given state within a particular amount
|
|
233
|
+
* of time. This is used both for the timeout and for the interval
|
|
234
|
+
*/
|
|
235
|
+
void switch_state(State state);
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Called from mctx_schedule(). This allows implementations to do any
|
|
239
|
+
* additional bookeeping, having guaranteed that all items are now
|
|
240
|
+
* added.
|
|
241
|
+
*/
|
|
242
|
+
virtual lcb_error_t prepare_schedule() {
|
|
243
|
+
return LCB_SUCCESS;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Called from mctx_add. Called to register any item-specific data (i.e.
|
|
248
|
+
* to associate item data with internal structures)
|
|
249
|
+
* @param itm the newly added item
|
|
250
|
+
* @param the original command, for more context
|
|
251
|
+
*/
|
|
252
|
+
virtual lcb_error_t after_add(Item&, const lcb_CMDENDURE*) {
|
|
253
|
+
return LCB_SUCCESS;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Called to actually check for persistence/replication. This must be
|
|
258
|
+
* implemented.
|
|
259
|
+
*/
|
|
260
|
+
virtual lcb_error_t poll_impl() = 0;
|
|
261
|
+
|
|
262
|
+
virtual ~Durset();
|
|
263
|
+
Durset(lcb_t instance, const lcb_durability_opts_t* options);
|
|
264
|
+
|
|
265
|
+
// Implementation for MULTICMD_CTX
|
|
266
|
+
lcb_error_t MCTX_done(const void *cookie);
|
|
267
|
+
lcb_error_t MCTX_addcmd(const lcb_CMDBASE *cmd);
|
|
268
|
+
void MCTX_fail();
|
|
269
|
+
#ifdef LCB_TRACING
|
|
270
|
+
void MCTX_setspan(lcbtrace_SPAN *span);
|
|
271
|
+
#endif
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* This function calls poll_impl(). The implementation should then call
|
|
275
|
+
* on_poll_done() once the polling is finished
|
|
276
|
+
*/
|
|
277
|
+
inline void poll();
|
|
278
|
+
|
|
279
|
+
/** Called after timeouts and intervals. */
|
|
280
|
+
inline void tick();
|
|
281
|
+
|
|
282
|
+
static Durset* createCasDurset(lcb_t, const lcb_durability_opts_t*);
|
|
283
|
+
static Durset* createSeqnoDurset(lcb_t, const lcb_durability_opts_t*);
|
|
284
|
+
|
|
285
|
+
lcb_DURABILITYOPTSv0 opts; /**< Sanitized user options */
|
|
286
|
+
std::vector<Item> entries;
|
|
287
|
+
unsigned nremaining; /**< Number of entries remaining to poll for */
|
|
288
|
+
int waiting; /**< Set if currently awaiting an observe callback */
|
|
289
|
+
unsigned refcnt; /**< Reference count */
|
|
290
|
+
State next_state; /**< Internal state */
|
|
291
|
+
lcb_error_t lasterr;
|
|
292
|
+
bool is_durstore; /** Whether the callback should be DURSTORE */
|
|
293
|
+
std::string kvbufs; /**< Backing storage for key buffers */
|
|
294
|
+
const void *cookie; /**< User cookie */
|
|
295
|
+
hrtime_t ns_timeout; /**< Timestamp of next timeout */
|
|
296
|
+
void *timer;
|
|
297
|
+
lcb_t instance;
|
|
298
|
+
#ifdef LCB_TRACING
|
|
299
|
+
lcbtrace_SPAN *span;
|
|
300
|
+
#endif
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
} // namespace durability
|
|
304
|
+
} // namespace lcb
|
|
305
|
+
#endif // __cplusplus
|
|
306
|
+
#endif // LCB_DURABILITY_INTERNAL_H
|
|
@@ -0,0 +1,409 @@
|
|
|
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 "trace.h"
|
|
20
|
+
|
|
21
|
+
LIBCOUCHBASE_API
|
|
22
|
+
lcb_error_t
|
|
23
|
+
lcb_get3(lcb_t instance, const void *cookie, const lcb_CMDGET *cmd)
|
|
24
|
+
{
|
|
25
|
+
mc_PIPELINE *pl;
|
|
26
|
+
mc_PACKET *pkt;
|
|
27
|
+
mc_REQDATA *rdata;
|
|
28
|
+
mc_CMDQUEUE *q = &instance->cmdq;
|
|
29
|
+
lcb_error_t err;
|
|
30
|
+
lcb_uint8_t extlen = 0;
|
|
31
|
+
lcb_uint8_t opcode = PROTOCOL_BINARY_CMD_GET;
|
|
32
|
+
protocol_binary_request_gat gcmd;
|
|
33
|
+
protocol_binary_request_header *hdr = &gcmd.message.header;
|
|
34
|
+
|
|
35
|
+
if (LCB_KEYBUF_IS_EMPTY(&cmd->key)) {
|
|
36
|
+
return LCB_EMPTY_KEY;
|
|
37
|
+
}
|
|
38
|
+
if (cmd->cas) {
|
|
39
|
+
return LCB_OPTIONS_CONFLICT;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (cmd->lock) {
|
|
43
|
+
extlen = 4;
|
|
44
|
+
opcode = PROTOCOL_BINARY_CMD_GET_LOCKED;
|
|
45
|
+
} else if (cmd->exptime || (cmd->cmdflags & LCB_CMDGET_F_CLEAREXP)) {
|
|
46
|
+
extlen = 4;
|
|
47
|
+
opcode = PROTOCOL_BINARY_CMD_GAT;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
err = mcreq_basic_packet(q, (const lcb_CMDBASE *)cmd, hdr, extlen, &pkt, &pl,
|
|
51
|
+
MCREQ_BASICPACKET_F_FALLBACKOK);
|
|
52
|
+
if (err != LCB_SUCCESS) {
|
|
53
|
+
return err;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
rdata = &pkt->u_rdata.reqdata;
|
|
57
|
+
rdata->cookie = cookie;
|
|
58
|
+
rdata->start = gethrtime();
|
|
59
|
+
|
|
60
|
+
hdr->request.magic = PROTOCOL_BINARY_REQ;
|
|
61
|
+
hdr->request.opcode = opcode;
|
|
62
|
+
hdr->request.datatype = PROTOCOL_BINARY_RAW_BYTES;
|
|
63
|
+
hdr->request.bodylen = htonl(extlen + ntohs(hdr->request.keylen));
|
|
64
|
+
hdr->request.opaque = pkt->opaque;
|
|
65
|
+
hdr->request.cas = 0;
|
|
66
|
+
|
|
67
|
+
if (extlen) {
|
|
68
|
+
gcmd.message.body.expiration = htonl(cmd->exptime);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (cmd->cmdflags & LCB_CMD_F_INTERNAL_CALLBACK) {
|
|
72
|
+
pkt->flags |= MCREQ_F_PRIVCALLBACK;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
memcpy(SPAN_BUFFER(&pkt->kh_span), gcmd.bytes, MCREQ_PKT_BASESIZE + extlen);
|
|
76
|
+
LCB_SCHED_ADD(instance, pl, pkt);
|
|
77
|
+
LCBTRACE_KV_START(instance->settings, cmd, LCBTRACE_OP_GET, pkt->opaque, rdata->span);
|
|
78
|
+
TRACE_GET_BEGIN(instance, hdr, cmd);
|
|
79
|
+
|
|
80
|
+
return LCB_SUCCESS;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
LIBCOUCHBASE_API
|
|
84
|
+
lcb_error_t lcb_get(lcb_t instance,
|
|
85
|
+
const void *command_cookie,
|
|
86
|
+
lcb_size_t num,
|
|
87
|
+
const lcb_get_cmd_t *const *items)
|
|
88
|
+
{
|
|
89
|
+
unsigned ii;
|
|
90
|
+
lcb_sched_enter(instance);
|
|
91
|
+
|
|
92
|
+
for (ii = 0; ii < num; ii++) {
|
|
93
|
+
const lcb_get_cmd_t *src = items[ii];
|
|
94
|
+
lcb_CMDGET dst;
|
|
95
|
+
lcb_error_t err;
|
|
96
|
+
|
|
97
|
+
memset(&dst, 0, sizeof(dst));
|
|
98
|
+
dst.key.contig.bytes = src->v.v0.key;
|
|
99
|
+
dst.key.contig.nbytes = src->v.v0.nkey;
|
|
100
|
+
dst._hashkey.contig.bytes = src->v.v0.hashkey;
|
|
101
|
+
dst._hashkey.contig.nbytes = src->v.v0.nhashkey;
|
|
102
|
+
dst.lock = src->v.v0.lock;
|
|
103
|
+
dst.exptime = src->v.v0.exptime;
|
|
104
|
+
|
|
105
|
+
err = lcb_get3(instance, command_cookie, &dst);
|
|
106
|
+
if (err != LCB_SUCCESS) {
|
|
107
|
+
lcb_sched_fail(instance);
|
|
108
|
+
return err;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
lcb_sched_leave(instance);
|
|
112
|
+
SYNCMODE_INTERCEPT(instance)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
LIBCOUCHBASE_API
|
|
116
|
+
lcb_error_t
|
|
117
|
+
lcb_unlock3(lcb_t instance, const void *cookie, const lcb_CMDUNLOCK *cmd)
|
|
118
|
+
{
|
|
119
|
+
mc_CMDQUEUE *cq = &instance->cmdq;
|
|
120
|
+
mc_PIPELINE *pl;
|
|
121
|
+
mc_PACKET *pkt;
|
|
122
|
+
mc_REQDATA *rd;
|
|
123
|
+
lcb_error_t err;
|
|
124
|
+
protocol_binary_request_header hdr;
|
|
125
|
+
|
|
126
|
+
if (LCB_KEYBUF_IS_EMPTY(&cmd->key)) {
|
|
127
|
+
return LCB_EMPTY_KEY;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
err = mcreq_basic_packet(cq, cmd, &hdr, 0, &pkt, &pl,
|
|
131
|
+
MCREQ_BASICPACKET_F_FALLBACKOK);
|
|
132
|
+
if (err != LCB_SUCCESS) {
|
|
133
|
+
return err;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
rd = &pkt->u_rdata.reqdata;
|
|
137
|
+
rd->cookie = cookie;
|
|
138
|
+
rd->start = gethrtime();
|
|
139
|
+
|
|
140
|
+
hdr.request.magic = PROTOCOL_BINARY_REQ;
|
|
141
|
+
hdr.request.opcode = PROTOCOL_BINARY_CMD_UNLOCK_KEY;
|
|
142
|
+
hdr.request.datatype = PROTOCOL_BINARY_RAW_BYTES;
|
|
143
|
+
hdr.request.bodylen = htonl((lcb_uint32_t)ntohs(hdr.request.keylen));
|
|
144
|
+
hdr.request.opaque = pkt->opaque;
|
|
145
|
+
hdr.request.cas = lcb_htonll(cmd->cas);
|
|
146
|
+
|
|
147
|
+
memcpy(SPAN_BUFFER(&pkt->kh_span), hdr.bytes, sizeof(hdr.bytes));
|
|
148
|
+
LCB_SCHED_ADD(instance, pl, pkt);
|
|
149
|
+
LCBTRACE_KV_START(instance->settings, cmd, LCBTRACE_OP_UNLOCK, pkt->opaque, rd->span);
|
|
150
|
+
TRACE_UNLOCK_BEGIN(instance, &hdr, cmd);
|
|
151
|
+
return LCB_SUCCESS;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
LIBCOUCHBASE_API
|
|
155
|
+
lcb_error_t
|
|
156
|
+
lcb_unlock(lcb_t instance, const void *cookie, lcb_size_t num,
|
|
157
|
+
const lcb_unlock_cmd_t * const * items)
|
|
158
|
+
{
|
|
159
|
+
unsigned ii;
|
|
160
|
+
lcb_error_t err = LCB_SUCCESS;
|
|
161
|
+
|
|
162
|
+
lcb_sched_enter(instance);
|
|
163
|
+
for (ii = 0; ii < num; ii++) {
|
|
164
|
+
const lcb_unlock_cmd_t *src = items[ii];
|
|
165
|
+
lcb_CMDUNLOCK dst;
|
|
166
|
+
memset(&dst, 0, sizeof(dst));
|
|
167
|
+
dst.key.contig.bytes = src->v.v0.key;
|
|
168
|
+
dst.key.contig.nbytes = src->v.v0.nkey;
|
|
169
|
+
dst._hashkey.contig.bytes = src->v.v0.hashkey;
|
|
170
|
+
dst._hashkey.contig.nbytes = src->v.v0.nhashkey;
|
|
171
|
+
dst.cas = src->v.v0.cas;
|
|
172
|
+
err = lcb_unlock3(instance, cookie, &dst);
|
|
173
|
+
if (err != LCB_SUCCESS) {
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (err != LCB_SUCCESS) {
|
|
178
|
+
lcb_sched_fail(instance);
|
|
179
|
+
return err;
|
|
180
|
+
} else {
|
|
181
|
+
lcb_sched_leave(instance);
|
|
182
|
+
SYNCMODE_INTERCEPT(instance)
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
struct RGetCookie : mc_REQDATAEX {
|
|
187
|
+
RGetCookie(const void *cookie, lcb_t instance, lcb_replica_t, int vb);
|
|
188
|
+
void decref() {
|
|
189
|
+
if (!--remaining) {
|
|
190
|
+
delete this;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
unsigned r_cur;
|
|
195
|
+
unsigned r_max;
|
|
196
|
+
int remaining;
|
|
197
|
+
int vbucket;
|
|
198
|
+
lcb_replica_t strategy;
|
|
199
|
+
lcb_t instance;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
static void rget_dtor(mc_PACKET *pkt) {
|
|
203
|
+
static_cast<RGetCookie*>(pkt->u_rdata.exdata)->decref();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
static void
|
|
207
|
+
rget_callback(mc_PIPELINE *, mc_PACKET *pkt, lcb_error_t err, const void *arg)
|
|
208
|
+
{
|
|
209
|
+
RGetCookie *rck = static_cast<RGetCookie*>(pkt->u_rdata.exdata);
|
|
210
|
+
lcb_RESPGET *resp = reinterpret_cast<lcb_RESPGET*>(const_cast<void*>(arg));
|
|
211
|
+
lcb_RESPCALLBACK callback;
|
|
212
|
+
lcb_t instance = rck->instance;
|
|
213
|
+
|
|
214
|
+
callback = lcb_find_callback(instance, LCB_CALLBACK_GETREPLICA);
|
|
215
|
+
|
|
216
|
+
/** Figure out what the strategy is.. */
|
|
217
|
+
if (rck->strategy == LCB_REPLICA_SELECT || rck->strategy == LCB_REPLICA_ALL) {
|
|
218
|
+
/** Simplest */
|
|
219
|
+
if (rck->strategy == LCB_REPLICA_SELECT || rck->remaining == 1) {
|
|
220
|
+
resp->rflags |= LCB_RESP_F_FINAL;
|
|
221
|
+
}
|
|
222
|
+
callback(instance, LCB_CALLBACK_GETREPLICA, (const lcb_RESPBASE *)resp);
|
|
223
|
+
} else {
|
|
224
|
+
mc_CMDQUEUE *cq = &instance->cmdq;
|
|
225
|
+
mc_PIPELINE *nextpl = NULL;
|
|
226
|
+
|
|
227
|
+
/** FIRST */
|
|
228
|
+
do {
|
|
229
|
+
int nextix;
|
|
230
|
+
rck->r_cur++;
|
|
231
|
+
nextix = lcbvb_vbreplica(cq->config, rck->vbucket, rck->r_cur);
|
|
232
|
+
if (nextix > -1 && nextix < (int)cq->npipelines) {
|
|
233
|
+
/* have a valid next index? */
|
|
234
|
+
nextpl = cq->pipelines[nextix];
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
} while (rck->r_cur < rck->r_max);
|
|
238
|
+
|
|
239
|
+
if (err == LCB_SUCCESS || rck->r_cur == rck->r_max || nextpl == NULL) {
|
|
240
|
+
resp->rflags |= LCB_RESP_F_FINAL;
|
|
241
|
+
callback(instance, LCB_CALLBACK_GETREPLICA, (lcb_RESPBASE *)resp);
|
|
242
|
+
/* refcount=1 . Free this now */
|
|
243
|
+
rck->remaining = 1;
|
|
244
|
+
} else if (err != LCB_SUCCESS) {
|
|
245
|
+
mc_PACKET *newpkt = mcreq_renew_packet(pkt);
|
|
246
|
+
newpkt->flags &= ~MCREQ_STATE_FLAGS;
|
|
247
|
+
mcreq_sched_add(nextpl, newpkt);
|
|
248
|
+
/* Use this, rather than lcb_sched_leave(), because this is being
|
|
249
|
+
* invoked internally by the library. */
|
|
250
|
+
mcreq_sched_leave(cq, 1);
|
|
251
|
+
/* wait */
|
|
252
|
+
rck->remaining = 2;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
rck->decref();
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
static mc_REQDATAPROCS rget_procs = {
|
|
259
|
+
rget_callback,
|
|
260
|
+
rget_dtor
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
RGetCookie::RGetCookie(const void *cookie_, lcb_t instance_,
|
|
264
|
+
lcb_replica_t strategy_, int vbucket_)
|
|
265
|
+
: mc_REQDATAEX(cookie_, rget_procs, gethrtime()),
|
|
266
|
+
r_cur(0), r_max(LCBT_NREPLICAS(instance_)), remaining(0),
|
|
267
|
+
vbucket(vbucket_), strategy(strategy_), instance(instance_) {
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
LIBCOUCHBASE_API
|
|
271
|
+
lcb_error_t
|
|
272
|
+
lcb_rget3(lcb_t instance, const void *cookie, const lcb_CMDGETREPLICA *cmd)
|
|
273
|
+
{
|
|
274
|
+
/**
|
|
275
|
+
* Because we need to direct these commands to specific servers, we can't
|
|
276
|
+
* just use the 'basic_packet()' function.
|
|
277
|
+
*/
|
|
278
|
+
mc_CMDQUEUE *cq = &instance->cmdq;
|
|
279
|
+
int vbid, ixtmp;
|
|
280
|
+
protocol_binary_request_header req;
|
|
281
|
+
unsigned r0, r1 = 0;
|
|
282
|
+
|
|
283
|
+
if (LCB_KEYBUF_IS_EMPTY(&cmd->key)) {
|
|
284
|
+
return LCB_EMPTY_KEY;
|
|
285
|
+
}
|
|
286
|
+
if (!cq->config) {
|
|
287
|
+
return LCB_CLIENT_ETMPFAIL;
|
|
288
|
+
}
|
|
289
|
+
if (!LCBT_NREPLICAS(instance)) {
|
|
290
|
+
return LCB_NO_MATCHING_SERVER;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
mcreq_map_key(cq, &cmd->key, &cmd->_hashkey, MCREQ_PKT_BASESIZE,
|
|
294
|
+
&vbid, &ixtmp);
|
|
295
|
+
|
|
296
|
+
/* The following blocks will also validate that the entire index range is
|
|
297
|
+
* valid. This is in order to ensure that we don't allocate the cookie
|
|
298
|
+
* if there aren't enough replicas online to satisfy the requirements */
|
|
299
|
+
|
|
300
|
+
if (cmd->strategy == LCB_REPLICA_SELECT) {
|
|
301
|
+
r0 = r1 = cmd->index;
|
|
302
|
+
if ((ixtmp = lcbvb_vbreplica(cq->config, vbid, r0)) < 0) {
|
|
303
|
+
return LCB_NO_MATCHING_SERVER;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
} else if (cmd->strategy == LCB_REPLICA_ALL) {
|
|
307
|
+
unsigned ii;
|
|
308
|
+
r0 = 0;
|
|
309
|
+
r1 = LCBT_NREPLICAS(instance);
|
|
310
|
+
/* Make sure they're all online */
|
|
311
|
+
for (ii = 0; ii < LCBT_NREPLICAS(instance); ii++) {
|
|
312
|
+
if ((ixtmp = lcbvb_vbreplica(cq->config, vbid, ii)) < 0) {
|
|
313
|
+
return LCB_NO_MATCHING_SERVER;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
} else {
|
|
317
|
+
for (r0 = 0; r0 < LCBT_NREPLICAS(instance); r0++) {
|
|
318
|
+
if ((ixtmp = lcbvb_vbreplica(cq->config, vbid, r0)) > -1) {
|
|
319
|
+
r1 = r0;
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
if (r0 == LCBT_NREPLICAS(instance)) {
|
|
324
|
+
return LCB_NO_MATCHING_SERVER;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
if (r1 < r0 || r1 >= cq->npipelines) {
|
|
329
|
+
return LCB_NO_MATCHING_SERVER;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/* Initialize the cookie */
|
|
333
|
+
RGetCookie *rck = new RGetCookie(cookie, instance, cmd->strategy, vbid);
|
|
334
|
+
|
|
335
|
+
/* Initialize the packet */
|
|
336
|
+
req.request.magic = PROTOCOL_BINARY_REQ;
|
|
337
|
+
req.request.opcode = PROTOCOL_BINARY_CMD_GET_REPLICA;
|
|
338
|
+
req.request.datatype = PROTOCOL_BINARY_RAW_BYTES;
|
|
339
|
+
req.request.vbucket = htons((lcb_uint16_t)vbid);
|
|
340
|
+
req.request.cas = 0;
|
|
341
|
+
req.request.extlen = 0;
|
|
342
|
+
req.request.keylen = htons((lcb_uint16_t)cmd->key.contig.nbytes);
|
|
343
|
+
req.request.bodylen = htonl((lcb_uint32_t)cmd->key.contig.nbytes);
|
|
344
|
+
|
|
345
|
+
rck->r_cur = r0;
|
|
346
|
+
do {
|
|
347
|
+
int curix;
|
|
348
|
+
mc_PIPELINE *pl;
|
|
349
|
+
mc_PACKET *pkt;
|
|
350
|
+
|
|
351
|
+
curix = lcbvb_vbreplica(cq->config, vbid, r0);
|
|
352
|
+
/* XXX: this is always expected to be in range. For the FIRST mode
|
|
353
|
+
* it will seek to the first valid index (checked above), and for the
|
|
354
|
+
* ALL mode, it will fail if not all replicas are already online
|
|
355
|
+
* (also checked above) */
|
|
356
|
+
pl = cq->pipelines[curix];
|
|
357
|
+
pkt = mcreq_allocate_packet(pl);
|
|
358
|
+
if (!pkt) {
|
|
359
|
+
return LCB_CLIENT_ENOMEM;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
pkt->u_rdata.exdata = rck;
|
|
363
|
+
pkt->flags |= MCREQ_F_REQEXT;
|
|
364
|
+
|
|
365
|
+
mcreq_reserve_key(pl, pkt, sizeof(req.bytes), &cmd->key);
|
|
366
|
+
|
|
367
|
+
req.request.opaque = pkt->opaque;
|
|
368
|
+
rck->remaining++;
|
|
369
|
+
mcreq_write_hdr(pkt, &req);
|
|
370
|
+
mcreq_sched_add(pl, pkt);
|
|
371
|
+
} while (++r0 < r1);
|
|
372
|
+
|
|
373
|
+
MAYBE_SCHEDLEAVE(instance);
|
|
374
|
+
return LCB_SUCCESS;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
LIBCOUCHBASE_API
|
|
378
|
+
lcb_error_t
|
|
379
|
+
lcb_get_replica(lcb_t instance, const void *cookie, lcb_size_t num,
|
|
380
|
+
const lcb_get_replica_cmd_t * const * items)
|
|
381
|
+
{
|
|
382
|
+
unsigned ii;
|
|
383
|
+
lcb_error_t err = LCB_SUCCESS;
|
|
384
|
+
|
|
385
|
+
lcb_sched_enter(instance);
|
|
386
|
+
for (ii = 0; ii < num; ii++) {
|
|
387
|
+
const lcb_get_replica_cmd_t *src = items[ii];
|
|
388
|
+
lcb_CMDGETREPLICA dst;
|
|
389
|
+
memset(&dst, 0, sizeof(dst));
|
|
390
|
+
dst.key.contig.bytes = src->v.v1.key;
|
|
391
|
+
dst.key.contig.nbytes = src->v.v1.nkey;
|
|
392
|
+
dst._hashkey.contig.bytes = src->v.v1.hashkey;
|
|
393
|
+
dst._hashkey.contig.nbytes = src->v.v1.nhashkey;
|
|
394
|
+
dst.strategy = src->v.v1.strategy;
|
|
395
|
+
dst.index = src->v.v1.index;
|
|
396
|
+
err = lcb_rget3(instance, cookie, &dst);
|
|
397
|
+
if (err != LCB_SUCCESS) {
|
|
398
|
+
break;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
if (err == LCB_SUCCESS) {
|
|
403
|
+
lcb_sched_leave(instance);
|
|
404
|
+
SYNCMODE_INTERCEPT(instance)
|
|
405
|
+
} else {
|
|
406
|
+
lcb_sched_fail(instance);
|
|
407
|
+
return err;
|
|
408
|
+
}
|
|
409
|
+
}
|