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,700 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2013 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef LCB_CLCONFIG_H
|
|
19
|
+
#define LCB_CLCONFIG_H
|
|
20
|
+
|
|
21
|
+
#include "hostlist.h"
|
|
22
|
+
#include <list>
|
|
23
|
+
#include <lcbio/timer-ng.h>
|
|
24
|
+
#include <lcbio/timer-cxx.h>
|
|
25
|
+
|
|
26
|
+
/** @file */
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @defgroup lcb-confmon Cluster Configuration Management
|
|
30
|
+
*
|
|
31
|
+
* @brief Monitors the retrieval and application of new cluster topology maps
|
|
32
|
+
* (vBucket Configurations)
|
|
33
|
+
*
|
|
34
|
+
* @details
|
|
35
|
+
* This module attempts to implement the 'Configuration Provider' interface
|
|
36
|
+
* described at https://docs.google.com/document/d/1bSMt0Sj1uQtm0OYolQaJDJg4sASfoCEwU6_gjm1he8s/edit
|
|
37
|
+
*
|
|
38
|
+
* The model is fairly complex though significantly more maintainable and
|
|
39
|
+
* testable than the previous model. The basic idea is as follows:
|
|
40
|
+
*
|
|
41
|
+
*
|
|
42
|
+
* <ol>
|
|
43
|
+
*
|
|
44
|
+
* <li>
|
|
45
|
+
* There is a _Configuration Monitor_ object (Confmon) which acts
|
|
46
|
+
* as the configuration supervisor. It is responsible for returning
|
|
47
|
+
* configuration objects to those entities which request it.
|
|
48
|
+
* </li>
|
|
49
|
+
*
|
|
50
|
+
* <li>
|
|
51
|
+
* There are multiple _Configuration Provider_ (Provider) objects.
|
|
52
|
+
* These providers aggregate configurations from multiple sources and
|
|
53
|
+
* implement a common interface to:
|
|
54
|
+
*
|
|
55
|
+
* <ol>
|
|
56
|
+
* <li>Return a _quick_ configuration without fetching from network or disk
|
|
57
|
+
* (see Provider::get_cached())</i>
|
|
58
|
+
|
|
59
|
+
* <li>Schedule a refresh to retrieve the latest configuration from the
|
|
60
|
+
* network (see Provider::refresh())</li>
|
|
61
|
+
*
|
|
62
|
+
* <li>Notify the monitor that it has received a new configuration. The
|
|
63
|
+
* monitor itself will determine whether or not to accept the new
|
|
64
|
+
* configuration by examining the configuration and determining if it is more
|
|
65
|
+
* recent than the one currently in used. See lcb_confmon_set_next()</li>
|
|
66
|
+
* </ol></li>
|
|
67
|
+
*
|
|
68
|
+
* <li>
|
|
69
|
+
* _Configuration Info_ objects. These objects are refcounted wrappers
|
|
70
|
+
* around vbucket configuration handles. They have a refcount and also an
|
|
71
|
+
* integer which can be used to compare with other objects for 'freshness'.
|
|
72
|
+
* See ConfigInfo
|
|
73
|
+
* </li>
|
|
74
|
+
*
|
|
75
|
+
* <li>
|
|
76
|
+
* _Configuration Listeners_. These are registered with the global supervisor
|
|
77
|
+
* and are invoked whenever a new valid configuration is detected. This is
|
|
78
|
+
* really only ever used during bootstrap or testing where we are explicitly
|
|
79
|
+
* waiting for a configuration without having any actual commands to schedule.
|
|
80
|
+
* See Listener
|
|
81
|
+
* </li>
|
|
82
|
+
* </ol>
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
*@addtogroup lcb-confmon
|
|
87
|
+
*@{
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
namespace lcb {
|
|
91
|
+
namespace clconfig {
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @brief Enumeration of the various config providers available.
|
|
95
|
+
* The type of methods available. These are enumerated in order of preference
|
|
96
|
+
*/
|
|
97
|
+
enum Method {
|
|
98
|
+
/** File-based "configcache" provider. Implemented in bc_file.c */
|
|
99
|
+
CLCONFIG_FILE,
|
|
100
|
+
/** New-style config-over-memcached provider. Implemented in bc_cccp.c */
|
|
101
|
+
CLCONFIG_CCCP,
|
|
102
|
+
/** Old-style streaming HTTP provider. Implemented in bc_http.c */
|
|
103
|
+
CLCONFIG_HTTP,
|
|
104
|
+
/** Raw memcached provided */
|
|
105
|
+
CLCONFIG_MCRAW,
|
|
106
|
+
/** Cluster administration provider. Static config with services */
|
|
107
|
+
CLCONFIG_CLADMIN,
|
|
108
|
+
|
|
109
|
+
CLCONFIG_MAX,
|
|
110
|
+
|
|
111
|
+
/** Ephemeral source, used for tests */
|
|
112
|
+
CLCONFIG_PHONY
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
/** Event types propagated to listeners */
|
|
117
|
+
enum EventType {
|
|
118
|
+
/** Called when a new configuration is being set in confmon */
|
|
119
|
+
CLCONFIG_EVENT_GOT_NEW_CONFIG,
|
|
120
|
+
|
|
121
|
+
/** Called when _any_ configuration is received via set_enxt */
|
|
122
|
+
CLCONFIG_EVENT_GOT_ANY_CONFIG,
|
|
123
|
+
|
|
124
|
+
/** Called when all providers have been tried */
|
|
125
|
+
CLCONFIG_EVENT_PROVIDERS_CYCLED,
|
|
126
|
+
|
|
127
|
+
/** The monitor has stopped */
|
|
128
|
+
CLCONFIG_EVENT_MONITOR_STOPPED
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
/** @brief Possible confmon states */
|
|
133
|
+
enum State {
|
|
134
|
+
/** The monitor is idle and not requesting a new configuration */
|
|
135
|
+
CONFMON_S_INACTIVE = 0,
|
|
136
|
+
|
|
137
|
+
/** The monitor is actively requesting a configuration */
|
|
138
|
+
CONFMON_S_ACTIVE = 1 << 0,
|
|
139
|
+
|
|
140
|
+
/** The monitor is fetching a configuration, but is in a throttle state */
|
|
141
|
+
CONFMON_S_ITERGRACE = 1 << 1
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
struct Provider;
|
|
146
|
+
struct Listener;
|
|
147
|
+
class ConfigInfo;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* This object contains the information needed for libcouchbase to deal with
|
|
151
|
+
* when retrieving new configs.
|
|
152
|
+
*/
|
|
153
|
+
struct Confmon {
|
|
154
|
+
/**
|
|
155
|
+
* @brief Create a new configuration monitor.
|
|
156
|
+
* This function creates a new `confmon` object which can be used to manage
|
|
157
|
+
* configurations and their providers.
|
|
158
|
+
*
|
|
159
|
+
* @param settings pointer to LCB settings
|
|
160
|
+
* @param iot pointer socket IO routines
|
|
161
|
+
* @param instance LCB handle
|
|
162
|
+
*
|
|
163
|
+
* Once the confmon object has been created you may enable or disable various
|
|
164
|
+
* providers (see lcb_confmon_set_provider_active()). Once no more providers
|
|
165
|
+
* remain to be activated you should call lcb_confmon_prepare() once. Then
|
|
166
|
+
* call the rest of the functions.
|
|
167
|
+
*/
|
|
168
|
+
Confmon(lcb_settings* settings, lcbio_pTABLE iot, lcb_t instance);
|
|
169
|
+
void destroy() { delete this; }
|
|
170
|
+
~Confmon();
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Get the provider following the current provider, or NULL if this is
|
|
174
|
+
* the last provider in the list.
|
|
175
|
+
* @param cur The current provider.
|
|
176
|
+
* @return The next provider, or NULL if no more providers remain.
|
|
177
|
+
*/
|
|
178
|
+
Provider *next_active(Provider *cur);
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Gets the first active provider.
|
|
182
|
+
* @return the first provider, or NULL if no providers exist.
|
|
183
|
+
*/
|
|
184
|
+
Provider *first_active();
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Prepares the configuration monitor object for operations. This will insert
|
|
188
|
+
* all the enabled providers into a list. Call this function each time a
|
|
189
|
+
* provider has been enabled.
|
|
190
|
+
*/
|
|
191
|
+
void prepare();
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Set a given provider as being 'active'. This will activate the
|
|
195
|
+
* provider as well as call #prepare() to update the list.
|
|
196
|
+
* @param type The ID of the provider to activate
|
|
197
|
+
* @param enabled true for activate, false for deactivate
|
|
198
|
+
*/
|
|
199
|
+
void set_active(Method type, bool enabled);
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @brief Request a configuration refresh
|
|
203
|
+
*
|
|
204
|
+
* Start traversing the list of current providers, requesting a new
|
|
205
|
+
* configuration for each. This function will asynchronously loop through all
|
|
206
|
+
* providers until one provides a new configuration.
|
|
207
|
+
*
|
|
208
|
+
* You may call #stop() to asynchronously break out of the loop.
|
|
209
|
+
* If the confmon is already in a refreshing state
|
|
210
|
+
* (i.e. #is_refreshing()) returns true then this function does
|
|
211
|
+
* nothing.
|
|
212
|
+
*
|
|
213
|
+
* This function is reentrant safe and may be called at any time.
|
|
214
|
+
*
|
|
215
|
+
* @see lcb_confmon_add_listener()
|
|
216
|
+
* @see #stop()
|
|
217
|
+
* @see #is_refreshing()
|
|
218
|
+
*/
|
|
219
|
+
void start();
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* @brief Cancel a pending configuration refresh.
|
|
223
|
+
*
|
|
224
|
+
* Stops the monitor. This will call Provider::pause() for each active
|
|
225
|
+
* provider. Typically called before destruction or when a new configuration
|
|
226
|
+
* has been found.
|
|
227
|
+
*
|
|
228
|
+
* This function is safe to call anywhere. If the monitor is already stopped
|
|
229
|
+
* then this function does nothing.
|
|
230
|
+
*
|
|
231
|
+
* @see #start()
|
|
232
|
+
* @see #is_refreshing()
|
|
233
|
+
*/
|
|
234
|
+
void stop();
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* @brief Check if the monitor is waiting for a new config from a provider
|
|
238
|
+
* @return true if refreshing, false if idle
|
|
239
|
+
*/
|
|
240
|
+
bool is_refreshing() const {
|
|
241
|
+
return (state & CONFMON_S_ACTIVE) != 0;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Get the current configuration
|
|
246
|
+
* @return The configuration
|
|
247
|
+
*/
|
|
248
|
+
ConfigInfo* get_config() const {
|
|
249
|
+
return config;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Get the last error which occurred on this object
|
|
254
|
+
* @return The last error
|
|
255
|
+
*/
|
|
256
|
+
lcb_error_t get_last_error() const {
|
|
257
|
+
return last_error;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* @brief Get the current monitor state
|
|
262
|
+
* @return a set of flags consisting of @ref State values.
|
|
263
|
+
*/
|
|
264
|
+
int get_state() const {
|
|
265
|
+
return state;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
void stop_real();
|
|
269
|
+
void do_next_provider();
|
|
270
|
+
int do_set_next(ConfigInfo*, bool notify_miss);
|
|
271
|
+
void invoke_listeners(EventType, ConfigInfo*);
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* @brief Indicate that a provider has failed and advance the monitor
|
|
275
|
+
*
|
|
276
|
+
* Indicate that the current provider has failed to obtain a new configuration.
|
|
277
|
+
* This is always called by a provider and should be invoked when the provider
|
|
278
|
+
* has encountered an internal error which caused it to be unable to fetch
|
|
279
|
+
* the configuration.
|
|
280
|
+
*
|
|
281
|
+
* Note that this function is safe to call from any provider at any time. If
|
|
282
|
+
* the provider is not the current provider then it is treated as an async
|
|
283
|
+
* push notification failure and ignored. This function is _not_ safe to call
|
|
284
|
+
* from consumers of providers
|
|
285
|
+
*
|
|
286
|
+
* Once this is called, the confmon instance will either roll over to the next
|
|
287
|
+
* provider or enter the inactive state depending on the configuration and
|
|
288
|
+
* whether the current provider is the last provider in the list.
|
|
289
|
+
*
|
|
290
|
+
* @param which reference to provider, which has been failed
|
|
291
|
+
* @param why error code
|
|
292
|
+
*/
|
|
293
|
+
void provider_failed(Provider *which, lcb_error_t why);
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* @brief Indicate that a provider has successfuly retrieved a configuration.
|
|
297
|
+
*
|
|
298
|
+
* Indicates that the provider has fetched a new configuration from the network
|
|
299
|
+
* and that confmon should attempt to propagate it. It has similar semantics
|
|
300
|
+
* to lcb_confmon_provider_failed() except that the second argument is a config
|
|
301
|
+
* object rather than an error code. The second argument must not be `NULL`
|
|
302
|
+
*
|
|
303
|
+
* The monitor will compare the new config against the current config.
|
|
304
|
+
* If the new config does not feature any changes from the current config then
|
|
305
|
+
* it is ignored and the confmon instance will proceed to the next provider.
|
|
306
|
+
* This is done through a direct call to provider_failed(provider, LCB_SUCCESS).
|
|
307
|
+
*
|
|
308
|
+
* This function should _not_ be called outside of an asynchronous provider's
|
|
309
|
+
* handler.
|
|
310
|
+
*
|
|
311
|
+
* @param which the provider which yielded the new configuration
|
|
312
|
+
* @param config the new configuration
|
|
313
|
+
*/
|
|
314
|
+
void provider_got_config(Provider *which, ConfigInfo* config);
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Dump information about the monitor
|
|
318
|
+
* @param fp the file to which information should be written
|
|
319
|
+
*/
|
|
320
|
+
void dump(FILE *fp);
|
|
321
|
+
|
|
322
|
+
Provider* get_provider(Method m) const {
|
|
323
|
+
return all_providers[m];
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* @brief Register a listener to be invoked on state changes and events
|
|
328
|
+
*
|
|
329
|
+
* Adds a 'listener' object to be called at each configuration update. The
|
|
330
|
+
* listener may co-exist with other listeners (though it should never be added
|
|
331
|
+
* twice). When a new configuration is received and accept, the listener's
|
|
332
|
+
* Listener::callback field will be invoked with it.
|
|
333
|
+
*
|
|
334
|
+
* The callback will continue to be invoked for each new configuration received
|
|
335
|
+
* until remove_listener is called. Note that the listener is not allocated
|
|
336
|
+
* by the confmon and its responsibility is the user's
|
|
337
|
+
*
|
|
338
|
+
* @param lsn the listener. The listener's contents are not copied into
|
|
339
|
+
* confmon and should thus remain valid until it is removed
|
|
340
|
+
*/
|
|
341
|
+
void add_listener(Listener* lsn);
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* @brief Unregister (and remove) a listener added via lcb_confmon_add_listener()
|
|
345
|
+
* @param lsn the listener
|
|
346
|
+
*/
|
|
347
|
+
void remove_listener(Listener *lsn);
|
|
348
|
+
|
|
349
|
+
/**Current provider. This provider may either fail or succeed.
|
|
350
|
+
* In either case unless the provider can provide us with a specific
|
|
351
|
+
* config which is newer than the one we have, it will roll over to the
|
|
352
|
+
* next provider. */
|
|
353
|
+
Provider *cur_provider;
|
|
354
|
+
|
|
355
|
+
/** All providers we know about. Currently this means the 'builtin' providers */
|
|
356
|
+
Provider* all_providers[CLCONFIG_MAX];
|
|
357
|
+
|
|
358
|
+
/** The current configuration pointer. This contains the most recent accepted
|
|
359
|
+
* configuration */
|
|
360
|
+
ConfigInfo * config;
|
|
361
|
+
|
|
362
|
+
typedef std::list<Listener*> ListenerList;
|
|
363
|
+
/** List of listeners for events */
|
|
364
|
+
ListenerList listeners;
|
|
365
|
+
|
|
366
|
+
lcb_settings *settings;
|
|
367
|
+
lcb_error_t last_error;
|
|
368
|
+
lcbio_pTABLE iot;
|
|
369
|
+
|
|
370
|
+
/** This is the async handle for a reentrant start */
|
|
371
|
+
lcb::io::Timer<Confmon, &Confmon::do_next_provider> as_start;
|
|
372
|
+
|
|
373
|
+
/** Async handle for a reentrant stop */
|
|
374
|
+
lcb::io::Timer<Confmon, &Confmon::stop_real> as_stop;
|
|
375
|
+
|
|
376
|
+
/* CONFMON_S_* values. Used internally */
|
|
377
|
+
int state;
|
|
378
|
+
|
|
379
|
+
/** Last time the provider was stopped. As a microsecond timestamp */
|
|
380
|
+
lcb_uint64_t last_stop_us;
|
|
381
|
+
|
|
382
|
+
typedef std::list<Provider*> ProviderList;
|
|
383
|
+
ProviderList active_providers;
|
|
384
|
+
|
|
385
|
+
lcb_t instance;
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* The base structure of a provider. This structure is intended to be
|
|
390
|
+
* 'subclassed' by implementors.
|
|
391
|
+
*/
|
|
392
|
+
struct Provider {
|
|
393
|
+
Provider(Confmon*, Method type_);
|
|
394
|
+
|
|
395
|
+
/** Destroy the resources created by this provider. */
|
|
396
|
+
virtual ~Provider();
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Get the current map known to this provider. This should not perform
|
|
400
|
+
* any blocking operations. Providers which use a push model may use
|
|
401
|
+
* this method as an asynchronous return value for a previously-received
|
|
402
|
+
* configuration.
|
|
403
|
+
*/
|
|
404
|
+
virtual ConfigInfo* get_cached() = 0;
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Request a new configuration. This will be called by the manager when
|
|
409
|
+
* the cached configuration (i.e. 'get_cached') is deemed invalid. Thus
|
|
410
|
+
* this function should unconditionally try to schedule getting the
|
|
411
|
+
* newest configuration it can. When the configuration has been received,
|
|
412
|
+
* the provider may call provider_success or provider_failed.
|
|
413
|
+
*
|
|
414
|
+
* @note
|
|
415
|
+
* The PROVIDER is responsible for terminating its own
|
|
416
|
+
* process. In other words there is no safeguard within confmon itself
|
|
417
|
+
* against a provider taking an excessively long time; therefore a provider
|
|
418
|
+
* should implement a timeout mechanism of its choice to promptly deliver
|
|
419
|
+
* a success or failure.
|
|
420
|
+
*/
|
|
421
|
+
virtual lcb_error_t refresh() = 0;
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Callback invoked to the provider to indicate that it should cease
|
|
425
|
+
* performing any "Active" configuration changes. Note that this is only
|
|
426
|
+
* a hint and a provider may perform its own hooking based on this. In any
|
|
427
|
+
* event receiving this callback is indicating that the provider will not
|
|
428
|
+
* be needed again in quite some time. How long this "time" is can range
|
|
429
|
+
* between 0 seconds and several minutes depending on how a user has
|
|
430
|
+
* configured the client.
|
|
431
|
+
*
|
|
432
|
+
* @return true if actually paused
|
|
433
|
+
*/
|
|
434
|
+
virtual bool pause() {
|
|
435
|
+
return false;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Called when a new configuration has been received.
|
|
440
|
+
*
|
|
441
|
+
* @param config the current configuration.
|
|
442
|
+
* Note that this should only update the server list and do nothing
|
|
443
|
+
* else.
|
|
444
|
+
*/
|
|
445
|
+
virtual void config_updated(lcbvb_CONFIG* config) {
|
|
446
|
+
(void)config;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Retrieve the list of nodes from this provider, if applicable
|
|
451
|
+
*
|
|
452
|
+
* @return A list of nodes, or NULL if the provider does not have a list
|
|
453
|
+
*/
|
|
454
|
+
virtual const lcb::Hostlist* get_nodes() const {
|
|
455
|
+
return NULL;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Call to change the configured nodes of this provider.
|
|
460
|
+
*
|
|
461
|
+
* @param l The list of nodes to apply
|
|
462
|
+
*/
|
|
463
|
+
virtual void configure_nodes(const lcb::Hostlist& l) {
|
|
464
|
+
(void)l;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Dump state information. This callback is optional
|
|
469
|
+
*
|
|
470
|
+
* @param f the file to write to
|
|
471
|
+
*/
|
|
472
|
+
virtual void dump(FILE *f) const {
|
|
473
|
+
(void)f;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
void enable() {
|
|
477
|
+
enabled = 1;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
virtual void enable(void *) {
|
|
481
|
+
assert("Must be implemented in subclass if used" && 0);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/** The type of provider */
|
|
485
|
+
const Method type;
|
|
486
|
+
|
|
487
|
+
/** Whether this provider has been disabled/enabled explicitly by a user */
|
|
488
|
+
bool enabled;
|
|
489
|
+
|
|
490
|
+
/** The parent manager object */
|
|
491
|
+
Confmon *parent;
|
|
492
|
+
|
|
493
|
+
lcb_settings& settings() const {
|
|
494
|
+
return *parent->settings;
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
Provider *new_cccp_provider(Confmon*);
|
|
499
|
+
Provider *new_file_provider(Confmon*);
|
|
500
|
+
Provider *new_http_provider(Confmon*);
|
|
501
|
+
Provider *new_mcraw_provider(Confmon*);
|
|
502
|
+
Provider *new_cladmin_provider(Confmon*);
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
/** @brief refcounted object encapsulating a vbucket config */
|
|
506
|
+
class ConfigInfo {
|
|
507
|
+
public:
|
|
508
|
+
/**
|
|
509
|
+
* Creates a new configuration wrapper object containing the vbucket config
|
|
510
|
+
* pointed to by 'config'. Its initial refcount will be set to 1.
|
|
511
|
+
*
|
|
512
|
+
* @param vbc a newly parsed configuration
|
|
513
|
+
* @param origin the type of provider from which the config originated.
|
|
514
|
+
* @return a new ConfigInfo object. This should be incref()'d/decref()'d
|
|
515
|
+
* as needed.
|
|
516
|
+
*/
|
|
517
|
+
static ConfigInfo* create(lcbvb_CONFIG *vbc, Method origin) {
|
|
518
|
+
return new ConfigInfo(vbc, origin);
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* @brief Compares two info structures and determine which one is newer
|
|
522
|
+
*
|
|
523
|
+
* This function returns an integer less than
|
|
524
|
+
* zero, zero or greater than zero if the first argument is considered older
|
|
525
|
+
* than, equal to, or later than the second argument.
|
|
526
|
+
*
|
|
527
|
+
* @param config anoother config
|
|
528
|
+
* @see lcbvb_get_revision
|
|
529
|
+
* @see ConfigInfo::cmpclock
|
|
530
|
+
*/
|
|
531
|
+
int compare(const ConfigInfo& config);
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* @brief Increment the refcount on a config object
|
|
535
|
+
*/
|
|
536
|
+
void incref() { refcount++; }
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* @brief Decrement the refcount on a config object.
|
|
540
|
+
* Decrement the refcount. If the internal refcount reaches 0 then the internal
|
|
541
|
+
* members (including the vbucket config handle itself) will be freed.
|
|
542
|
+
*/
|
|
543
|
+
void decref() {
|
|
544
|
+
if (!--refcount) {
|
|
545
|
+
delete this;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
operator lcbvb_CONFIG*() const {
|
|
550
|
+
return vbc;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
Method get_origin() const {
|
|
554
|
+
return origin;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/** Actual configuration */
|
|
558
|
+
lcbvb_CONFIG* vbc;
|
|
559
|
+
|
|
560
|
+
private:
|
|
561
|
+
ConfigInfo(lcbvb_CONFIG *vbc, Method origin);
|
|
562
|
+
|
|
563
|
+
~ConfigInfo();
|
|
564
|
+
|
|
565
|
+
/** Comparative clock with which to compare */
|
|
566
|
+
uint64_t cmpclock;
|
|
567
|
+
|
|
568
|
+
/** Reference counter */
|
|
569
|
+
unsigned int refcount;
|
|
570
|
+
|
|
571
|
+
/** Origin provider type which produced this config */
|
|
572
|
+
Method origin;
|
|
573
|
+
};
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* @brief Listener for events
|
|
577
|
+
* One or more listeners may be installed into the confmon which will have
|
|
578
|
+
* a callback invoked on significant vbucket events. See clconfig_event_t
|
|
579
|
+
* for a variety of events the listener can know.
|
|
580
|
+
*/
|
|
581
|
+
struct Listener {
|
|
582
|
+
virtual ~Listener() {
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
/** Linked list node */
|
|
586
|
+
lcb_list_t ll;
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Callback invoked for significant events
|
|
590
|
+
*
|
|
591
|
+
* @param event the event which took place
|
|
592
|
+
* @param config the configuration associated with the event. Note that
|
|
593
|
+
* `config` may also be NULL
|
|
594
|
+
*/
|
|
595
|
+
virtual void clconfig_lsn(EventType event, ConfigInfo *config) = 0;
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
/* Method-specific setup methods.. */
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
* @name File Provider-specific APIs
|
|
602
|
+
* @{
|
|
603
|
+
*/
|
|
604
|
+
|
|
605
|
+
/**
|
|
606
|
+
* Sets the input/output filename for the file provider. This also enables
|
|
607
|
+
* the file provider.
|
|
608
|
+
* @param p the provider
|
|
609
|
+
* @param f the filename (if NULL, a temporary filename will be created)
|
|
610
|
+
* @param ro whether the client will never modify the file
|
|
611
|
+
* @return true on success, false on failure.
|
|
612
|
+
*/
|
|
613
|
+
bool file_set_filename(Provider *p, const char *f, bool ro);
|
|
614
|
+
|
|
615
|
+
/**
|
|
616
|
+
* Retrieve the filename for the provider
|
|
617
|
+
* @param p The provider of type CLCONFIG_FILE
|
|
618
|
+
* @return the current filename being used.
|
|
619
|
+
*/
|
|
620
|
+
const char* file_get_filename(Provider *p);
|
|
621
|
+
void file_set_readonly(Provider *p, bool val);
|
|
622
|
+
/**@}*/
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* @name HTTP Provider-specific APIs
|
|
626
|
+
* @{
|
|
627
|
+
*/
|
|
628
|
+
|
|
629
|
+
/**
|
|
630
|
+
* Get the socket representing the current REST connection to the cluster
|
|
631
|
+
* (if applicable)
|
|
632
|
+
* @param p The provider of type CLCONFIG_HTTP
|
|
633
|
+
* @return
|
|
634
|
+
*/
|
|
635
|
+
const lcbio_SOCKET* http_get_conn(const Provider *p);
|
|
636
|
+
|
|
637
|
+
static inline const lcbio_SOCKET* http_get_conn(Confmon *c) {
|
|
638
|
+
return http_get_conn(c->get_provider(CLCONFIG_HTTP));
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
/**
|
|
642
|
+
* Get the hostname for the current REST connection to the cluster
|
|
643
|
+
* @param p The provider of type CLCONFIG_HTTP
|
|
644
|
+
* @return
|
|
645
|
+
*/
|
|
646
|
+
const lcb_host_t * http_get_host(const Provider *p);
|
|
647
|
+
static inline const lcb_host_t* http_get_host(Confmon *c) {
|
|
648
|
+
return http_get_host(c->get_provider(CLCONFIG_HTTP));
|
|
649
|
+
}
|
|
650
|
+
/**@}*/
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* @name CCCP Provider-specific APIs
|
|
654
|
+
* @{
|
|
655
|
+
*/
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* Note, to initialize the CCCP provider, you should use
|
|
659
|
+
* cccp->enable(instance);
|
|
660
|
+
*/
|
|
661
|
+
|
|
662
|
+
/**
|
|
663
|
+
* @brief Notify the CCCP provider about a new configuration from a
|
|
664
|
+
* `NOT_MY_VBUCKET` response
|
|
665
|
+
*
|
|
666
|
+
* This should be called by the packet handler when a configuration has been
|
|
667
|
+
* received as a payload to a response with the error of `NOT_MY_VBUCKET`.
|
|
668
|
+
*
|
|
669
|
+
* @param provider The CCCP provider
|
|
670
|
+
* @param host The hostname (without the port) on which the packet was received
|
|
671
|
+
* @param data The configuration JSON blob
|
|
672
|
+
* @return LCB_SUCCESS, or an error code if the configuration could not be
|
|
673
|
+
* set
|
|
674
|
+
*/
|
|
675
|
+
lcb_error_t
|
|
676
|
+
cccp_update(Provider *provider, const char *host, const char *data);
|
|
677
|
+
|
|
678
|
+
/**
|
|
679
|
+
* @brief Notify the CCCP provider about a configuration received from a
|
|
680
|
+
* `CMD_GET_CLUSTER_CONFIG` response.
|
|
681
|
+
*
|
|
682
|
+
* @param cookie The cookie object attached to the packet
|
|
683
|
+
* @param err The error code for the reply
|
|
684
|
+
* @param bytes The payload pointer
|
|
685
|
+
* @param nbytes Size of payload
|
|
686
|
+
* @param origin Host object from which the packet was received
|
|
687
|
+
*/
|
|
688
|
+
void cccp_update(const void *cookie, lcb_error_t err,
|
|
689
|
+
const void *bytes, size_t nbytes, const lcb_host_t *origin);
|
|
690
|
+
|
|
691
|
+
/**@}*/
|
|
692
|
+
|
|
693
|
+
/**@name Raw Memcached (MCRAW) Provider-specific APIs
|
|
694
|
+
* @{*/
|
|
695
|
+
/**@}*/
|
|
696
|
+
/**@}*/
|
|
697
|
+
|
|
698
|
+
} // clconfig
|
|
699
|
+
} // lcb
|
|
700
|
+
#endif /* LCB_CLCONFIG_H */
|