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,173 @@
|
|
|
1
|
+
#include "internal.h"
|
|
2
|
+
#include "errmap.h"
|
|
3
|
+
#include "contrib/lcb-jsoncpp/lcb-jsoncpp.h"
|
|
4
|
+
|
|
5
|
+
using namespace lcb::errmap;
|
|
6
|
+
|
|
7
|
+
ErrorMap::ErrorMap() : revision(0), version(0) {
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
static ErrorAttribute getAttribute(const std::string& s) {
|
|
11
|
+
#define X(c, s_) if (s == s_) { return c; }
|
|
12
|
+
LCB_XERRMAP_ATTRIBUTES(X)
|
|
13
|
+
#undef X
|
|
14
|
+
return INVALID_ATTRIBUTE;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
RetrySpec *Error::getRetrySpec() const {
|
|
18
|
+
return retry.specptr;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
RetrySpec* RetrySpec::parse(const Json::Value& retryJson, std::string& emsg) {
|
|
22
|
+
|
|
23
|
+
RetrySpec *spec = new RetrySpec();
|
|
24
|
+
spec->refcount = 1;
|
|
25
|
+
|
|
26
|
+
#define FAIL_RETRY(s) \
|
|
27
|
+
emsg = s; \
|
|
28
|
+
delete spec; \
|
|
29
|
+
return NULL;
|
|
30
|
+
|
|
31
|
+
if (!retryJson.isObject()) {
|
|
32
|
+
FAIL_RETRY("Missing retry specification");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const Json::Value& strategyJson = retryJson["strategy"];
|
|
36
|
+
if (!strategyJson.isString()) {
|
|
37
|
+
FAIL_RETRY("Missing `strategy`");
|
|
38
|
+
}
|
|
39
|
+
const char* strategy = strategyJson.asCString();
|
|
40
|
+
if (!strcasecmp(strategy, "constant")) {
|
|
41
|
+
spec->strategy = CONSTANT;
|
|
42
|
+
} else if (!strcasecmp(strategy, "linear")) {
|
|
43
|
+
spec->strategy = LINEAR;
|
|
44
|
+
} else if (!strcasecmp(strategy, "exponential")) {
|
|
45
|
+
spec->strategy = EXPONENTIAL;
|
|
46
|
+
} else {
|
|
47
|
+
FAIL_RETRY("Unknown strategy");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#define GET_TIMEFLD(srcname, dstname, required) { \
|
|
51
|
+
Json::Value dstname##Json = retryJson[srcname]; \
|
|
52
|
+
if (dstname##Json.isNumeric()) { \
|
|
53
|
+
spec->dstname = (dstname##Json).asUInt() * 1000; \
|
|
54
|
+
} else if (required) { \
|
|
55
|
+
FAIL_RETRY("Missing " # srcname); \
|
|
56
|
+
} else { \
|
|
57
|
+
spec->dstname = 0; \
|
|
58
|
+
} \
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
GET_TIMEFLD("interval", interval, true);
|
|
62
|
+
GET_TIMEFLD("after", after, true);
|
|
63
|
+
GET_TIMEFLD("ceil", ceil, false);
|
|
64
|
+
GET_TIMEFLD("max-duration", max_duration, false);
|
|
65
|
+
|
|
66
|
+
return spec;
|
|
67
|
+
|
|
68
|
+
#undef FAIL_RETRY
|
|
69
|
+
#undef GET_TIMEFLD
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const uint32_t ErrorMap::MAX_VERSION = 1;
|
|
74
|
+
|
|
75
|
+
ErrorMap::ParseStatus
|
|
76
|
+
ErrorMap::parse(const char *s, size_t n, std::string& errmsg) {
|
|
77
|
+
Json::Value root_nonconst;
|
|
78
|
+
Json::Reader reader;
|
|
79
|
+
if (!reader.parse(s, s + n, root_nonconst)) {
|
|
80
|
+
errmsg = "Invalid JSON";
|
|
81
|
+
return PARSE_ERROR;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const Json::Value& root = root_nonconst;
|
|
85
|
+
const Json::Value& verJson = root["version"];
|
|
86
|
+
if (!verJson.isNumeric()) {
|
|
87
|
+
errmsg = "'version' is not a number";
|
|
88
|
+
return PARSE_ERROR;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (verJson.asUInt() > MAX_VERSION) {
|
|
92
|
+
errmsg = "'version' is unreasonably high";
|
|
93
|
+
return UNKNOWN_VERSION;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const Json::Value& revJson = root["revision"];
|
|
97
|
+
if (!revJson.isNumeric()) {
|
|
98
|
+
errmsg = "'revision' is not a number";
|
|
99
|
+
return PARSE_ERROR;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (revJson.asUInt() <= revision) {
|
|
103
|
+
return NOT_UPDATED;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const Json::Value& errsJson = root["errors"];
|
|
107
|
+
if (!errsJson.isObject()) {
|
|
108
|
+
errmsg = "'errors' is not an object";
|
|
109
|
+
return PARSE_ERROR;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
Json::Value::const_iterator ii = errsJson.begin();
|
|
113
|
+
for (; ii != errsJson.end(); ++ii) {
|
|
114
|
+
// Key is the version in hex
|
|
115
|
+
unsigned ec = 0;
|
|
116
|
+
if (sscanf(ii.key().asCString(), "%x", &ec) != 1) {
|
|
117
|
+
errmsg = "key " + ii.key().asString() + " is not a hex number";
|
|
118
|
+
return PARSE_ERROR;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const Json::Value& errorJson = *ii;
|
|
122
|
+
|
|
123
|
+
// Descend into the error attributes
|
|
124
|
+
Error error;
|
|
125
|
+
error.code = static_cast<uint16_t>(ec);
|
|
126
|
+
|
|
127
|
+
error.shortname = errorJson["name"].asString();
|
|
128
|
+
error.description = errorJson["desc"].asString();
|
|
129
|
+
|
|
130
|
+
const Json::Value& attrs = errorJson["attrs"];
|
|
131
|
+
if (!attrs.isArray()) {
|
|
132
|
+
errmsg = "'attrs' is not an array";
|
|
133
|
+
return PARSE_ERROR;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
Json::Value::const_iterator jj = attrs.begin();
|
|
137
|
+
for (; jj != attrs.end(); ++jj) {
|
|
138
|
+
ErrorAttribute attr = getAttribute(jj->asString());
|
|
139
|
+
if (attr == INVALID_ATTRIBUTE) {
|
|
140
|
+
errmsg = "unknown attribute received";
|
|
141
|
+
return UNKNOWN_VERSION;
|
|
142
|
+
}
|
|
143
|
+
error.attributes.insert(attr);
|
|
144
|
+
}
|
|
145
|
+
if (error.hasAttribute(AUTO_RETRY)) {
|
|
146
|
+
const Json::Value& retryJson = errorJson["retry"];
|
|
147
|
+
if (!retryJson.isObject()) {
|
|
148
|
+
errmsg = "Need `retry` specification for `auto-retry` attribute";
|
|
149
|
+
return PARSE_ERROR;
|
|
150
|
+
}
|
|
151
|
+
if ((error.retry.specptr = RetrySpec::parse(retryJson, errmsg)) == NULL) {
|
|
152
|
+
return PARSE_ERROR;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
errors.insert(MapType::value_type(ec, error));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return UPDATED;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const Error& ErrorMap::getError(uint16_t code) const {
|
|
162
|
+
static const Error invalid;
|
|
163
|
+
MapType::const_iterator it = errors.find(code);
|
|
164
|
+
|
|
165
|
+
if (it != errors.end()) {
|
|
166
|
+
return it->second;
|
|
167
|
+
} else {
|
|
168
|
+
return invalid;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
ErrorMap *lcb_errmap_new() { return new ErrorMap(); }
|
|
173
|
+
void lcb_errmap_free(ErrorMap* m) { delete m; }
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
#ifndef LCB_ERRMAP_H
|
|
2
|
+
#define LCB_ERRMAP_H
|
|
3
|
+
|
|
4
|
+
#ifdef __cplusplus
|
|
5
|
+
#include <map>
|
|
6
|
+
#include <set>
|
|
7
|
+
#include <string>
|
|
8
|
+
#include <cmath>
|
|
9
|
+
|
|
10
|
+
namespace Json { class Value; }
|
|
11
|
+
|
|
12
|
+
namespace lcb {
|
|
13
|
+
namespace errmap {
|
|
14
|
+
|
|
15
|
+
enum ErrorAttribute {
|
|
16
|
+
#define LCB_XERRMAP_ATTRIBUTES(X) \
|
|
17
|
+
/** \
|
|
18
|
+
* This error is transient. Note that this does not mean the \
|
|
19
|
+
* error is retriable. \
|
|
20
|
+
*/ \
|
|
21
|
+
X(TEMPORARY, "temp") \
|
|
22
|
+
/** \
|
|
23
|
+
* The error is related to the subdocument subsystem. \
|
|
24
|
+
*/ \
|
|
25
|
+
X(SUBDOC, "subdoc") \
|
|
26
|
+
/** \
|
|
27
|
+
* The operation may be retried immediately. \
|
|
28
|
+
*/ \
|
|
29
|
+
X(RETRY_NOW, "retry-now") \
|
|
30
|
+
/** \
|
|
31
|
+
* The operation may be retried after some time. \
|
|
32
|
+
*/ \
|
|
33
|
+
X(RETRY_LATER, "retry-later") \
|
|
34
|
+
/** \
|
|
35
|
+
* This attribute means that a user's input was invalid because it \
|
|
36
|
+
* violates the semantics of the operation, or exceeds some \
|
|
37
|
+
* predefined limit. \
|
|
38
|
+
*/ \
|
|
39
|
+
X(INVALID_INPUT, "invalid-input") \
|
|
40
|
+
/** \
|
|
41
|
+
* The operation is not supported, possibly because the of server \
|
|
42
|
+
* version, bucket type, or current user. \
|
|
43
|
+
*/ \
|
|
44
|
+
X(NOT_ENABLED, "support") \
|
|
45
|
+
/** \
|
|
46
|
+
* The operation failed because the client failed to authenticate \
|
|
47
|
+
* or is not authorized to perform this operation. Note that this \
|
|
48
|
+
* error in itself does not mean the connection is invalid, unless \
|
|
49
|
+
* conn-state-invalidated is also present. \
|
|
50
|
+
*/ \
|
|
51
|
+
X(AUTH, "auth") \
|
|
52
|
+
/** \
|
|
53
|
+
* The current connection is no longer valid. The client must \
|
|
54
|
+
* reconnect to the server. Note that the presence of other \
|
|
55
|
+
* attributes may indicate an alternate remedy to fixing the \
|
|
56
|
+
* connection without a disconnect, but without special remedial \
|
|
57
|
+
* action a disconnect is needed. \
|
|
58
|
+
*/ \
|
|
59
|
+
X(CONN_STATE_INVALIDATED, "conn-state-invalidated") \
|
|
60
|
+
/** \
|
|
61
|
+
* This attribute means that the error is related to a constraint \
|
|
62
|
+
* failure regarding the item itself, i.e. the item does not exist, \
|
|
63
|
+
* already exists, or its current value makes the current operation \
|
|
64
|
+
* impossible. Retrying the operation when the item's value or \
|
|
65
|
+
* status has changed may succeed. \
|
|
66
|
+
*/ \
|
|
67
|
+
X(CONSTRAINT_FAILURE, "item-only") \
|
|
68
|
+
/** \
|
|
69
|
+
* This is an internal error in the server. \
|
|
70
|
+
*/ \
|
|
71
|
+
X(INTERNAL, "internal") \
|
|
72
|
+
/** \
|
|
73
|
+
* The error is related to the DCP subsystem. \
|
|
74
|
+
*/ \
|
|
75
|
+
X(DCP, "dcp") \
|
|
76
|
+
/** \
|
|
77
|
+
* The client's cluster map may be outdated and requires updating. \
|
|
78
|
+
* The client should obtain a newer configuration. \
|
|
79
|
+
*/ \
|
|
80
|
+
X(FETCH_CONFIG, "fetch-config") \
|
|
81
|
+
/** \
|
|
82
|
+
* This error code must be handled specially. If it is not handled, \
|
|
83
|
+
* the connection must be dropped. \
|
|
84
|
+
*/ \
|
|
85
|
+
X(SPECIAL_HANDLING, "special-handling") \
|
|
86
|
+
/** \
|
|
87
|
+
* Use retry specifications from the server \
|
|
88
|
+
*/ \
|
|
89
|
+
X(AUTO_RETRY, "auto-retry") \
|
|
90
|
+
/** \
|
|
91
|
+
* The operation was successful for those situations \
|
|
92
|
+
* where the error code is indicating successful (i.e. subdoc \
|
|
93
|
+
* operations carried out on a deleted document) \
|
|
94
|
+
*/ \
|
|
95
|
+
X(SUCCESS, "success") \
|
|
96
|
+
/** \
|
|
97
|
+
* This attribute specifies that the requested item is currently \
|
|
98
|
+
* locked. \
|
|
99
|
+
*/ \
|
|
100
|
+
X(ITEM_LOCKED, "item-locked") \
|
|
101
|
+
/** \
|
|
102
|
+
* This attribute means that the error is related to operating on \
|
|
103
|
+
* a soft-deleted document. \
|
|
104
|
+
*/ \
|
|
105
|
+
X(ITEM_DELETED, "item-deleted") \
|
|
106
|
+
|
|
107
|
+
#define X(c, s) c,
|
|
108
|
+
LCB_XERRMAP_ATTRIBUTES(X)
|
|
109
|
+
#undef X
|
|
110
|
+
|
|
111
|
+
INVALID_ATTRIBUTE
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
class RetrySpec {
|
|
115
|
+
public:
|
|
116
|
+
enum Strategy { CONSTANT, LINEAR, EXPONENTIAL };
|
|
117
|
+
// Grace time
|
|
118
|
+
uint32_t after;
|
|
119
|
+
|
|
120
|
+
// Maximum duration for retry.
|
|
121
|
+
uint32_t max_duration;
|
|
122
|
+
|
|
123
|
+
uint32_t get_next_interval(size_t num_attempts) const {
|
|
124
|
+
uint32_t cur_interval = 0; // 50ms is a safe bet.
|
|
125
|
+
if (strategy == CONSTANT) {
|
|
126
|
+
return interval;
|
|
127
|
+
} else if (strategy == LINEAR) {
|
|
128
|
+
cur_interval = num_attempts * interval;
|
|
129
|
+
} else if (strategy == EXPONENTIAL) {
|
|
130
|
+
// Convert to ms for pow(), convert result back to us.
|
|
131
|
+
cur_interval = std::pow((double)(interval / 1000), (int)num_attempts) * 1000;
|
|
132
|
+
}
|
|
133
|
+
if (ceil != 0) {
|
|
134
|
+
// Note, I *could* use std::min here, but this file gets
|
|
135
|
+
// included by other files, and Windows is giving a hard time
|
|
136
|
+
// because it defines std::min as a macro. NOMINMAX is a possible
|
|
137
|
+
// definition, but I'd rather not touch all including files
|
|
138
|
+
// to contain that macro, and I don't want to add additional
|
|
139
|
+
// preprocessor defs at this time.
|
|
140
|
+
cur_interval = ceil > cur_interval ? cur_interval : ceil;
|
|
141
|
+
}
|
|
142
|
+
return cur_interval;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
void ref() {
|
|
146
|
+
refcount++;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
void unref() {
|
|
150
|
+
if (!--refcount) {
|
|
151
|
+
delete this;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
static inline RetrySpec* parse(const Json::Value& specJson,
|
|
156
|
+
std::string& errmsg);
|
|
157
|
+
|
|
158
|
+
private:
|
|
159
|
+
Strategy strategy;
|
|
160
|
+
|
|
161
|
+
// Base interval
|
|
162
|
+
uint32_t interval;
|
|
163
|
+
|
|
164
|
+
// Max interval
|
|
165
|
+
uint32_t ceil;
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
size_t refcount;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
class SpecWrapper {
|
|
172
|
+
private:
|
|
173
|
+
friend class RetrySpec;
|
|
174
|
+
friend struct Error;
|
|
175
|
+
friend class ErrorMap;
|
|
176
|
+
|
|
177
|
+
RetrySpec *specptr;
|
|
178
|
+
SpecWrapper() : specptr(NULL) {}
|
|
179
|
+
SpecWrapper(const SpecWrapper& other) {
|
|
180
|
+
specptr = other.specptr;
|
|
181
|
+
if (specptr != NULL) {
|
|
182
|
+
specptr->ref();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
~SpecWrapper() {
|
|
186
|
+
if (specptr) {
|
|
187
|
+
specptr->unref();
|
|
188
|
+
}
|
|
189
|
+
specptr = NULL;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
struct Error {
|
|
194
|
+
uint16_t code;
|
|
195
|
+
std::string shortname;
|
|
196
|
+
std::string description;
|
|
197
|
+
std::set<ErrorAttribute> attributes;
|
|
198
|
+
SpecWrapper retry;
|
|
199
|
+
|
|
200
|
+
Error() : code(-1) {
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
bool isValid() const {
|
|
204
|
+
return code != uint16_t(-1);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
bool hasAttribute(ErrorAttribute attr) const {
|
|
208
|
+
return attributes.find(attr) != attributes.end();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
RetrySpec *getRetrySpec() const;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
class ErrorMap {
|
|
215
|
+
public:
|
|
216
|
+
enum ParseStatus {
|
|
217
|
+
/** Couldn't parse JSON!*/
|
|
218
|
+
PARSE_ERROR,
|
|
219
|
+
|
|
220
|
+
/** Version is too high */
|
|
221
|
+
UNKNOWN_VERSION,
|
|
222
|
+
|
|
223
|
+
/** Current version/revision is higher or equal */
|
|
224
|
+
NOT_UPDATED,
|
|
225
|
+
|
|
226
|
+
/** Updated */
|
|
227
|
+
UPDATED
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
ErrorMap();
|
|
231
|
+
ParseStatus parse(const char *s, size_t n, std::string& errmsg);
|
|
232
|
+
ParseStatus parse(const char *s, size_t n) {
|
|
233
|
+
std::string tmp;
|
|
234
|
+
return parse(s, n, tmp);
|
|
235
|
+
}
|
|
236
|
+
size_t getVersion() const { return version; }
|
|
237
|
+
size_t getRevision() const { return revision; };
|
|
238
|
+
const Error& getError(uint16_t code) const;
|
|
239
|
+
bool isLoaded() const {
|
|
240
|
+
return !errors.empty();
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
private:
|
|
244
|
+
static const uint32_t MAX_VERSION;
|
|
245
|
+
ErrorMap(const ErrorMap&);
|
|
246
|
+
typedef std::map<uint16_t, Error> MapType;
|
|
247
|
+
MapType errors;
|
|
248
|
+
uint32_t revision;
|
|
249
|
+
uint32_t version;
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
} // namespace
|
|
253
|
+
} // namespace
|
|
254
|
+
|
|
255
|
+
typedef lcb::errmap::ErrorMap* lcb_pERRMAP;
|
|
256
|
+
#else
|
|
257
|
+
typedef struct lcb_ERRMAP* lcb_pERRMAP;
|
|
258
|
+
#endif /* __cplusplus */
|
|
259
|
+
|
|
260
|
+
#ifdef __cplusplus
|
|
261
|
+
extern "C" {
|
|
262
|
+
#endif
|
|
263
|
+
|
|
264
|
+
lcb_pERRMAP lcb_errmap_new(void);
|
|
265
|
+
void lcb_errmap_free(lcb_pERRMAP);
|
|
266
|
+
|
|
267
|
+
#ifdef __cplusplus
|
|
268
|
+
}
|
|
269
|
+
#endif
|
|
270
|
+
|
|
271
|
+
#endif /* LCB_ERRMAP_H */
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
#include "internal.h"
|
|
19
|
+
#include "packetutils.h"
|
|
20
|
+
#include <bucketconfig/clconfig.h>
|
|
21
|
+
|
|
22
|
+
static void
|
|
23
|
+
ext_callback_proxy(mc_PIPELINE *pl, mc_PACKET *req, lcb_error_t rc,
|
|
24
|
+
const void *resdata)
|
|
25
|
+
{
|
|
26
|
+
lcb::Server *server = static_cast<lcb::Server*>(pl);
|
|
27
|
+
mc_REQDATAEX *rd = req->u_rdata.exdata;
|
|
28
|
+
const lcb::MemcachedResponse *res =
|
|
29
|
+
reinterpret_cast<const lcb::MemcachedResponse*>(resdata);
|
|
30
|
+
|
|
31
|
+
lcb::clconfig::cccp_update(rd->cookie, rc, res->value(), res->vallen(),
|
|
32
|
+
&server->get_host());
|
|
33
|
+
free(rd);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static mc_REQDATAPROCS procs = { ext_callback_proxy };
|
|
37
|
+
|
|
38
|
+
lcb_error_t
|
|
39
|
+
lcb_st::request_config(const void *cookie_, lcb::Server *server)
|
|
40
|
+
{
|
|
41
|
+
lcb_error_t err;
|
|
42
|
+
mc_PACKET *packet;
|
|
43
|
+
mc_REQDATAEX *rd;
|
|
44
|
+
|
|
45
|
+
packet = mcreq_allocate_packet(server);
|
|
46
|
+
if (!packet) {
|
|
47
|
+
return LCB_CLIENT_ENOMEM;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
err = mcreq_reserve_header(server, packet, 24);
|
|
51
|
+
if (err != LCB_SUCCESS) {
|
|
52
|
+
mcreq_release_packet(server, packet);
|
|
53
|
+
return err;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
rd = reinterpret_cast<mc_REQDATAEX*>(calloc(1, sizeof(*rd)));
|
|
57
|
+
rd->procs = &procs;
|
|
58
|
+
rd->cookie = cookie_;
|
|
59
|
+
rd->start = gethrtime();
|
|
60
|
+
packet->u_rdata.exdata = rd;
|
|
61
|
+
packet->flags |= MCREQ_F_REQEXT;
|
|
62
|
+
|
|
63
|
+
lcb::MemcachedRequest hdr(
|
|
64
|
+
PROTOCOL_BINARY_CMD_GET_CLUSTER_CONFIG, packet->opaque);
|
|
65
|
+
hdr.opaque(packet->opaque);
|
|
66
|
+
memcpy(SPAN_BUFFER(&packet->kh_span), hdr.data(), hdr.size());
|
|
67
|
+
|
|
68
|
+
mcreq_sched_enter(&cmdq);
|
|
69
|
+
mcreq_sched_add(server, packet);
|
|
70
|
+
mcreq_sched_leave(&cmdq, 1);
|
|
71
|
+
return LCB_SUCCESS;
|
|
72
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2011-2012 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "config.h"
|
|
19
|
+
#include "settings.h"
|
|
20
|
+
#include <libcouchbase/couchbase.h>
|
|
21
|
+
|
|
22
|
+
#ifndef HAVE_GETHRTIME
|
|
23
|
+
|
|
24
|
+
#include <stdlib.h>
|
|
25
|
+
#include <time.h>
|
|
26
|
+
#if defined(__MACH__) && defined(__APPLE__)
|
|
27
|
+
#include <mach/mach_time.h>
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#ifdef __linux__
|
|
31
|
+
#undef HAVE_CLOCK_GETTIME
|
|
32
|
+
#define HAVE_CLOCK_GETTIME 1
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
#define CLOCK_START_OFFSET (LCB_S2NS(3600 * 24))
|
|
36
|
+
|
|
37
|
+
hrtime_t gethrtime(void)
|
|
38
|
+
{
|
|
39
|
+
#ifdef __APPLE__
|
|
40
|
+
|
|
41
|
+
/* Most things expect a pretty large timestamp - even though a smaller one
|
|
42
|
+
* may be perfectly valid. Initialize the default with an offset of one day,
|
|
43
|
+
* in nanoseconds
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/* Use the various mach stuff:
|
|
47
|
+
* https://developer.apple.com/library/mac/qa/qa1398/_index.html */
|
|
48
|
+
|
|
49
|
+
static uint64_t start = 0;
|
|
50
|
+
uint64_t now ;
|
|
51
|
+
static mach_timebase_info_data_t tmbi;
|
|
52
|
+
|
|
53
|
+
if (start == 0) {
|
|
54
|
+
start = mach_absolute_time();
|
|
55
|
+
mach_timebase_info(&tmbi);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
now = mach_absolute_time();
|
|
59
|
+
return ((now - start) * tmbi.numer / tmbi.denom) + CLOCK_START_OFFSET;
|
|
60
|
+
|
|
61
|
+
#elif defined(HAVE_CLOCK_GETTIME)
|
|
62
|
+
struct timespec tm;
|
|
63
|
+
lcb_assert(clock_gettime(CLOCK_MONOTONIC, &tm) != -1);
|
|
64
|
+
return (((hrtime_t)tm.tv_sec) * 1000000000) + (hrtime_t)tm.tv_nsec;
|
|
65
|
+
#elif defined(HAVE_GETTIMEOFDAY)
|
|
66
|
+
|
|
67
|
+
hrtime_t ret;
|
|
68
|
+
struct timeval tv;
|
|
69
|
+
if (gettimeofday(&tv, NULL) == -1) {
|
|
70
|
+
return -1;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
ret = (hrtime_t)tv.tv_sec * 1000000000;
|
|
74
|
+
ret += (hrtime_t)tv.tv_usec * 1000;
|
|
75
|
+
return ret;
|
|
76
|
+
#elif defined(HAVE_QUERYPERFORMANCECOUNTER)
|
|
77
|
+
double ret;
|
|
78
|
+
// To fix the potential race condition for the local static variable,
|
|
79
|
+
// gethrtime should be called in a global static variable first.
|
|
80
|
+
// It will guarantee the local static variable will be initialized
|
|
81
|
+
// before any thread calls the function.
|
|
82
|
+
static LARGE_INTEGER pf = { 0 };
|
|
83
|
+
static double freq;
|
|
84
|
+
LARGE_INTEGER currtime;
|
|
85
|
+
|
|
86
|
+
if (pf.QuadPart == 0) {
|
|
87
|
+
lcb_assert(QueryPerformanceFrequency(&pf));
|
|
88
|
+
lcb_assert(pf.QuadPart != 0);
|
|
89
|
+
freq = 1.0e9 / (double)pf.QuadPart;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
QueryPerformanceCounter(&currtime);
|
|
93
|
+
|
|
94
|
+
ret = (double)currtime.QuadPart * freq ;
|
|
95
|
+
return (hrtime_t)ret + CLOCK_START_OFFSET;
|
|
96
|
+
#else
|
|
97
|
+
#error "I don't know how to build a highres clock..."
|
|
98
|
+
#endif
|
|
99
|
+
}
|
|
100
|
+
#endif /* HAVE_GETHRTIME */
|
|
101
|
+
|
|
102
|
+
/* Symbol usable so other subsystems can get the same idea of time the library
|
|
103
|
+
* has. This will also allow us to stop shipping the 'gethrtime' file around.
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
LCB_INTERNAL_API
|
|
107
|
+
lcb_U64 lcb_nstime(void) {
|
|
108
|
+
return gethrtime();
|
|
109
|
+
}
|