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,295 @@
|
|
|
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
|
+
/**
|
|
19
|
+
* New-Style v2 plugin for Windows, Using IOCP
|
|
20
|
+
*
|
|
21
|
+
* This file contains the core routines which actually make up the
|
|
22
|
+
* various "loops" of the event loop.
|
|
23
|
+
*
|
|
24
|
+
* @author Mark Nunberg
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
#include "iocp_iops.h"
|
|
28
|
+
#include <stdio.h>
|
|
29
|
+
|
|
30
|
+
static sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx = NULL;
|
|
31
|
+
static int Have_GQCS_Ex = 1;
|
|
32
|
+
|
|
33
|
+
void iocp_initialize_loop_globals(void)
|
|
34
|
+
{
|
|
35
|
+
HMODULE hKernel32;
|
|
36
|
+
static IOCP_SYNCTYPE initialized = 0;
|
|
37
|
+
|
|
38
|
+
if (!IOCP_INITONCE(initialized)) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
hKernel32 = GetModuleHandleA("kernel32.dll");
|
|
43
|
+
if (!hKernel32) {
|
|
44
|
+
fprintf(stderr, "Couldn't load Kernel32.dll: [%u]\n", GetLastError());
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
pGetQueuedCompletionStatusEx = (sGetQueuedCompletionStatusEx)GetProcAddress(hKernel32, "GetQueuedCompletionStatusEx");
|
|
49
|
+
if (pGetQueuedCompletionStatusEx == NULL) {
|
|
50
|
+
Have_GQCS_Ex = 0;
|
|
51
|
+
fprintf(stderr, "Couldn't load GetQueuedCompletionStatusEx. Using fallback [%u]\n",
|
|
52
|
+
GetLastError());
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Make these macros prominent.
|
|
58
|
+
* It's important that they get called after each of our own calls to
|
|
59
|
+
* lcb.
|
|
60
|
+
*/
|
|
61
|
+
#define LOOP_CAN_CONTINUE(io) ((io)->breakout == FALSE)
|
|
62
|
+
#define DO_IF_BREAKOUT(io, e) if (!LOOP_CAN_CONTINUE(io)) { e; }
|
|
63
|
+
#define HAS_QUEUED_IO(io) (io)->n_iopending
|
|
64
|
+
|
|
65
|
+
void iocp_write_done(iocp_t *io, iocp_write_t *w, int status)
|
|
66
|
+
{
|
|
67
|
+
lcb_ioC_write2_callback callback = w->cb;
|
|
68
|
+
void *uarg = w->uarg;
|
|
69
|
+
iocp_sockdata_t *sd = w->ol_write.sd;
|
|
70
|
+
|
|
71
|
+
if (w->state == IOCP_WRITEBUF_ALLOCATED) {
|
|
72
|
+
free(w);
|
|
73
|
+
} else {
|
|
74
|
+
w->state = IOCP_WRITEBUF_AVAILABLE;
|
|
75
|
+
}
|
|
76
|
+
callback(&sd->sd_base, status, uarg);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Handles a single OVERLAPPED entry, and invokes
|
|
81
|
+
* the appropriate event
|
|
82
|
+
*/
|
|
83
|
+
static void
|
|
84
|
+
handle_single_overlapped(iocp_t *io, OVERLAPPED *lpOverlapped,
|
|
85
|
+
ULONG_PTR lpCompletionKey, DWORD dwNumberOfBytesTransferred)
|
|
86
|
+
{
|
|
87
|
+
union { iocp_write_t *w; iocp_connect_t *conn; } u_ol;
|
|
88
|
+
void *pointer_to_free = NULL;
|
|
89
|
+
int opstatus = 0;
|
|
90
|
+
int ws_status;
|
|
91
|
+
int action;
|
|
92
|
+
iocp_overlapped_t *ol = (iocp_overlapped_t *)lpOverlapped;
|
|
93
|
+
iocp_sockdata_t *sd = (iocp_sockdata_t *)lpCompletionKey;
|
|
94
|
+
|
|
95
|
+
IOCP_LOG(IOCP_TRACE, "OL=%p, NB=%lu", ol, dwNumberOfBytesTransferred);
|
|
96
|
+
|
|
97
|
+
ws_status = iocp_overlapped_status(lpOverlapped);
|
|
98
|
+
|
|
99
|
+
if (ws_status) {
|
|
100
|
+
IOCP_LOG(IOCP_WARN, "Got negative status for %p: %d", ol, ws_status);
|
|
101
|
+
io->base.v.v2.error = iocp_w32err_2errno(ws_status);
|
|
102
|
+
opstatus = -1;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
action = ol->action;
|
|
106
|
+
|
|
107
|
+
switch (action) {
|
|
108
|
+
case LCBIOCP_ACTION_READ:
|
|
109
|
+
/** Nothing special in the OVERLAPPED. */
|
|
110
|
+
if (sd->rdcb) {
|
|
111
|
+
sd->rdcb(&sd->sd_base, dwNumberOfBytesTransferred, sd->rdarg);
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
|
|
115
|
+
case LCBIOCP_ACTION_WRITE:
|
|
116
|
+
u_ol.w = IOCP_WRITEOBJ_FROM_OVERLAPPED(lpOverlapped);
|
|
117
|
+
iocp_write_done(io, u_ol.w, opstatus);
|
|
118
|
+
break;
|
|
119
|
+
|
|
120
|
+
case LCBIOCP_ACTION_CONNECT:
|
|
121
|
+
u_ol.conn = (iocp_connect_t *)ol;
|
|
122
|
+
|
|
123
|
+
if (opstatus == 0) {
|
|
124
|
+
/* This "Syncs" the connected state on the socket.. */
|
|
125
|
+
int rv = setsockopt(ol->sd->sSocket,
|
|
126
|
+
SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, NULL, 0);
|
|
127
|
+
|
|
128
|
+
if (rv == SOCKET_ERROR) {
|
|
129
|
+
iocp_set_last_error(&io->base, ol->sd->sSocket);
|
|
130
|
+
opstatus = -1;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
u_ol.conn->cb(&sd->sd_base, opstatus);
|
|
134
|
+
pointer_to_free = u_ol.conn;
|
|
135
|
+
break;
|
|
136
|
+
|
|
137
|
+
default:
|
|
138
|
+
fprintf(stderr, "COUCHBASE-IOCP: Unrecognized OVERLAPPED action %d\n", (int)action);
|
|
139
|
+
assert(0);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
iocp_on_dequeued(io, sd, action);
|
|
144
|
+
free(pointer_to_free);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
static int dequeue_io_impl_ex(iocp_t *io, DWORD msTimeout)
|
|
148
|
+
{
|
|
149
|
+
OVERLAPPED_ENTRY entries[64];
|
|
150
|
+
BOOL status;
|
|
151
|
+
ULONG ulRemoved;
|
|
152
|
+
const unsigned max_entries = sizeof(entries) / sizeof(entries[0]);
|
|
153
|
+
unsigned int ii;
|
|
154
|
+
|
|
155
|
+
status = pGetQueuedCompletionStatusEx(io->hCompletionPort,
|
|
156
|
+
entries, max_entries, &ulRemoved, msTimeout, FALSE);
|
|
157
|
+
|
|
158
|
+
if (status == FALSE || ulRemoved == 0) {
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
for (ii = 0; ii < ulRemoved; ii++) {
|
|
163
|
+
OVERLAPPED_ENTRY *ent = entries + ii;
|
|
164
|
+
|
|
165
|
+
io->n_iopending--;
|
|
166
|
+
handle_single_overlapped(io, ent->lpOverlapped, ent->lpCompletionKey,
|
|
167
|
+
ent->dwNumberOfBytesTransferred);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return LOOP_CAN_CONTINUE(io);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
static int dequeue_io_impl_compat(iocp_t *io, DWORD msTimeout)
|
|
174
|
+
{
|
|
175
|
+
BOOL result;
|
|
176
|
+
DWORD dwNbytes;
|
|
177
|
+
ULONG_PTR ulPtr;
|
|
178
|
+
OVERLAPPED *lpOverlapped;
|
|
179
|
+
|
|
180
|
+
result = GetQueuedCompletionStatus(io->hCompletionPort,
|
|
181
|
+
&dwNbytes, &ulPtr, &lpOverlapped, msTimeout);
|
|
182
|
+
|
|
183
|
+
if (lpOverlapped == NULL) {
|
|
184
|
+
IOCP_LOG(IOCP_TRACE, "No events left");
|
|
185
|
+
/** Nothing to do here */
|
|
186
|
+
return 0;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
io->n_iopending--;
|
|
190
|
+
handle_single_overlapped(io, lpOverlapped, ulPtr, dwNbytes);
|
|
191
|
+
return LOOP_CAN_CONTINUE(io);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
static void deque_expired_timers(iocp_t *io, lcb_U64 now)
|
|
195
|
+
{
|
|
196
|
+
while (LOOP_CAN_CONTINUE(io)) {
|
|
197
|
+
iocp_timer_t *timer = iocp_tmq_pop(&io->timer_queue.list, now);
|
|
198
|
+
|
|
199
|
+
if (!timer) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
timer->is_active = 0;
|
|
204
|
+
timer->cb(-1, 0, timer->arg);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** Maximum amount of time the I/O can hog the loop */
|
|
209
|
+
#define IOCP_IOLOOP_MAXTIME 1000
|
|
210
|
+
|
|
211
|
+
static int should_yield(lcb_U32 start)
|
|
212
|
+
{
|
|
213
|
+
lcb_U32 now = iocp_micros();
|
|
214
|
+
return now - start > IOCP_IOLOOP_MAXTIME;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* I'd like to make several behavioral guidelines here:
|
|
219
|
+
*
|
|
220
|
+
* 1) LCB shall call breakout if it wishes to terminate the loop.
|
|
221
|
+
* 2) We shall not handle the case where the user accidentally calls lcb_wait()
|
|
222
|
+
* while not having anything pending. That's just too bad.
|
|
223
|
+
*/
|
|
224
|
+
void iocp_run(lcb_io_opt_t iobase)
|
|
225
|
+
{
|
|
226
|
+
iocp_t *io = (iocp_t *)iobase;
|
|
227
|
+
lcb_U64 now = 0;
|
|
228
|
+
DWORD tmo;
|
|
229
|
+
int remaining;
|
|
230
|
+
|
|
231
|
+
if (!io->breakout) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
io->breakout = FALSE;
|
|
236
|
+
IOCP_LOG(IOCP_INFO, "do-loop BEGIN");
|
|
237
|
+
|
|
238
|
+
do {
|
|
239
|
+
/** To ensure we don't starve pending timers, use an iteration */
|
|
240
|
+
lcb_U32 usStartTime;
|
|
241
|
+
|
|
242
|
+
if (!now) {
|
|
243
|
+
now = iocp_millis();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
do {
|
|
247
|
+
tmo = (DWORD)iocp_tmq_next_timeout(&io->timer_queue.list, now);
|
|
248
|
+
IOCP_LOG(IOCP_TRACE, "Timeout=%lu msec", tmo);
|
|
249
|
+
|
|
250
|
+
if (tmo) {
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
deque_expired_timers(io, now);
|
|
255
|
+
} while (tmo == 0 && LOOP_CAN_CONTINUE(io));
|
|
256
|
+
|
|
257
|
+
if (!LOOP_CAN_CONTINUE(io)) {
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** TODO: Use reference counting */
|
|
262
|
+
if (tmo == INFINITE) {
|
|
263
|
+
if (HAS_QUEUED_IO(io)) {
|
|
264
|
+
assert(0 && "Found I/O without any timers");
|
|
265
|
+
}
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
usStartTime = iocp_micros();
|
|
270
|
+
do {
|
|
271
|
+
remaining = Have_GQCS_Ex ?
|
|
272
|
+
dequeue_io_impl_ex(io, tmo) : dequeue_io_impl_compat(io, tmo);
|
|
273
|
+
tmo = 0;
|
|
274
|
+
} while (LOOP_CAN_CONTINUE(io) &&
|
|
275
|
+
remaining && should_yield(usStartTime) == 0);
|
|
276
|
+
|
|
277
|
+
IOCP_LOG(IOCP_TRACE, "Stopped IO loop");
|
|
278
|
+
|
|
279
|
+
if (LOOP_CAN_CONTINUE(io)) {
|
|
280
|
+
now = iocp_millis();
|
|
281
|
+
deque_expired_timers(io, now);
|
|
282
|
+
tmo = (DWORD)iocp_tmq_next_timeout(&io->timer_queue.list, now);
|
|
283
|
+
}
|
|
284
|
+
} while (LOOP_CAN_CONTINUE(io) && (HAS_QUEUED_IO(io) || tmo != INFINITE));
|
|
285
|
+
|
|
286
|
+
IOCP_LOG(IOCP_INFO, "do-loop END");
|
|
287
|
+
io->breakout = TRUE;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
void iocp_stop(lcb_io_opt_t iobase)
|
|
291
|
+
{
|
|
292
|
+
iocp_t *io = (iocp_t *)iobase;
|
|
293
|
+
IOCP_LOG(IOCP_INFO, "Breakout requested");
|
|
294
|
+
io->breakout = TRUE;
|
|
295
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
/**
|
|
19
|
+
* New-Style v1 plugin for Windows, Using IOCP
|
|
20
|
+
* @author Mark Nunberg
|
|
21
|
+
* @author Sergey Avseyev
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#include "iocp_iops.h"
|
|
25
|
+
|
|
26
|
+
static int iocp_timer_cmp_asc(lcb_list_t *a, lcb_list_t *b)
|
|
27
|
+
{
|
|
28
|
+
iocp_timer_t *aa, *bb;
|
|
29
|
+
|
|
30
|
+
aa = LCB_LIST_ITEM(a, iocp_timer_t, list);
|
|
31
|
+
bb = LCB_LIST_ITEM(b, iocp_timer_t, list);
|
|
32
|
+
if (aa->ms > bb->ms) {
|
|
33
|
+
return 1;
|
|
34
|
+
} else if (aa->ms < bb->ms) {
|
|
35
|
+
return -1;
|
|
36
|
+
} else {
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
lcb_uint64_t iocp_tmq_next_timeout(lcb_list_t *list, lcb_uint64_t now)
|
|
42
|
+
{
|
|
43
|
+
if (LCB_LIST_IS_EMPTY(list)) {
|
|
44
|
+
return INFINITE;
|
|
45
|
+
|
|
46
|
+
} else {
|
|
47
|
+
iocp_timer_t *tt;
|
|
48
|
+
tt = LCB_LIST_ITEM(list->next, iocp_timer_t, list);
|
|
49
|
+
return tt->ms > now ? tt->ms - now : 0;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
iocp_timer_t *iocp_tmq_pop(lcb_list_t *list, lcb_uint64_t now)
|
|
54
|
+
{
|
|
55
|
+
iocp_timer_t *tt;
|
|
56
|
+
|
|
57
|
+
if (LCB_LIST_IS_EMPTY(list)) {
|
|
58
|
+
return NULL;
|
|
59
|
+
}
|
|
60
|
+
tt = LCB_LIST_ITEM(list->next, iocp_timer_t, list);
|
|
61
|
+
if (tt->ms > now) {
|
|
62
|
+
return NULL;
|
|
63
|
+
}
|
|
64
|
+
lcb_list_delete(&tt->list);
|
|
65
|
+
return tt;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void iocp_tmq_add(lcb_list_t *list, iocp_timer_t *timer)
|
|
69
|
+
{
|
|
70
|
+
IOCP_LOG(IOCP_TRACE, "Adding timer %p with ms %lu", timer, timer->ms);
|
|
71
|
+
lcb_list_add_sorted(list, &timer->list, iocp_timer_cmp_asc);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
void iocp_tmq_del(lcb_list_t *list, iocp_timer_t *timer)
|
|
75
|
+
{
|
|
76
|
+
lcb_list_delete(&timer->list);
|
|
77
|
+
IOCP_LOG(IOCP_TRACE, "Removing %p. Empty?=%d", timer, LCB_LIST_IS_EMPTY(list));
|
|
78
|
+
(void)list;
|
|
79
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
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
|
+
/**
|
|
19
|
+
* New-Style v2 plugin for Windows, Using IOCP.
|
|
20
|
+
* This file contains various utility functions used by the plugin
|
|
21
|
+
* @author Mark Nunberg
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#include "iocp_iops.h"
|
|
25
|
+
#include <sys/types.h>
|
|
26
|
+
#include <sys/timeb.h>
|
|
27
|
+
#include <time.h>
|
|
28
|
+
#include "config.h"
|
|
29
|
+
#include <libcouchbase/plugins/io/wsaerr-inl.c>
|
|
30
|
+
|
|
31
|
+
#if defined(__MINGW32__) && !defined(_ftime_s)
|
|
32
|
+
#define _ftime_s _ftime /** Mingw doens't have the _s variant */
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
int iocp_w32err_2errno(DWORD error)
|
|
36
|
+
{
|
|
37
|
+
return wsaerr_map_impl(error);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
DWORD iocp_set_last_error(lcb_io_opt_t io, SOCKET sock)
|
|
41
|
+
{
|
|
42
|
+
int werr = GetLastError();
|
|
43
|
+
io->v.v2.error = iocp_w32err_2errno(werr);
|
|
44
|
+
return werr;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
lcb_uint32_t iocp_micros(void)
|
|
48
|
+
{
|
|
49
|
+
return (lcb_uint32_t)(gethrtime() / 1000);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
LPFN_CONNECTEX iocp_initialize_connectex(SOCKET sock)
|
|
53
|
+
{
|
|
54
|
+
LPFN_CONNECTEX ret = NULL;
|
|
55
|
+
DWORD dwBytes;
|
|
56
|
+
GUID ce_guid = WSAID_CONNECTEX;
|
|
57
|
+
|
|
58
|
+
WSAIoctl(sock,
|
|
59
|
+
SIO_GET_EXTENSION_FUNCTION_POINTER,
|
|
60
|
+
&ce_guid,
|
|
61
|
+
sizeof(ce_guid),
|
|
62
|
+
&ret,
|
|
63
|
+
sizeof(&ret),
|
|
64
|
+
&dwBytes,
|
|
65
|
+
NULL,
|
|
66
|
+
NULL);
|
|
67
|
+
|
|
68
|
+
return ret;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
int iocp_just_scheduled(iocp_t *io, iocp_overlapped_t *ol, int status)
|
|
72
|
+
{
|
|
73
|
+
DWORD err = GetLastError();
|
|
74
|
+
IOCP_LOG(IOCP_TRACE, "Pending count: %d", io->n_iopending);
|
|
75
|
+
if ((status != 0 && err == WSA_IO_PENDING) || status == 0) {
|
|
76
|
+
io->n_iopending++;
|
|
77
|
+
ol->sd->refcount++;
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Otherwise, there's something wrong
|
|
83
|
+
*/
|
|
84
|
+
IOCP_LOG(IOCP_ERR, "Got non-harmless error for %p: %d", ol, (int)err);
|
|
85
|
+
io->base.v.v2.error = iocp_w32err_2errno(err);
|
|
86
|
+
return -1;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
void iocp_socket_decref(iocp_t *io, iocp_sockdata_t *sd)
|
|
90
|
+
{
|
|
91
|
+
if (--sd->refcount) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (sd->sSocket != INVALID_SOCKET) {
|
|
96
|
+
closesocket(sd->sSocket);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
lcb_list_delete(&sd->list);
|
|
100
|
+
|
|
101
|
+
(void)io;
|
|
102
|
+
free(sd);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
void iocp_on_dequeued(iocp_t *io, iocp_sockdata_t *sd, int action)
|
|
106
|
+
{
|
|
107
|
+
IOCP_LOG(IOCP_TRACE, "Dequeing. A=%d, Pending=%d", action, io->n_iopending);
|
|
108
|
+
iocp_socket_decref(io, sd);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**This following function was copied from libuv.
|
|
112
|
+
* See http://github.com/joyent/libuv for more details */
|
|
113
|
+
int iocp_overlapped_status(OVERLAPPED *lpOverlapped)
|
|
114
|
+
{
|
|
115
|
+
NTSTATUS status = (NTSTATUS)lpOverlapped->Internal;
|
|
116
|
+
switch (status) {
|
|
117
|
+
case 0:
|
|
118
|
+
return ERROR_SUCCESS;
|
|
119
|
+
|
|
120
|
+
case STATUS_PENDING:
|
|
121
|
+
return ERROR_IO_PENDING;
|
|
122
|
+
|
|
123
|
+
case STATUS_INVALID_HANDLE:
|
|
124
|
+
case STATUS_OBJECT_TYPE_MISMATCH:
|
|
125
|
+
return WSAENOTSOCK;
|
|
126
|
+
|
|
127
|
+
case STATUS_INSUFFICIENT_RESOURCES:
|
|
128
|
+
case STATUS_PAGEFILE_QUOTA:
|
|
129
|
+
case STATUS_COMMITMENT_LIMIT:
|
|
130
|
+
case STATUS_WORKING_SET_QUOTA:
|
|
131
|
+
case STATUS_NO_MEMORY:
|
|
132
|
+
case STATUS_CONFLICTING_ADDRESSES:
|
|
133
|
+
case STATUS_QUOTA_EXCEEDED:
|
|
134
|
+
case STATUS_TOO_MANY_PAGING_FILES:
|
|
135
|
+
case STATUS_REMOTE_RESOURCES:
|
|
136
|
+
case STATUS_TOO_MANY_ADDRESSES:
|
|
137
|
+
return WSAENOBUFS;
|
|
138
|
+
|
|
139
|
+
case STATUS_SHARING_VIOLATION:
|
|
140
|
+
case STATUS_ADDRESS_ALREADY_EXISTS:
|
|
141
|
+
return WSAEADDRINUSE;
|
|
142
|
+
|
|
143
|
+
case STATUS_LINK_TIMEOUT:
|
|
144
|
+
case STATUS_IO_TIMEOUT:
|
|
145
|
+
case STATUS_TIMEOUT:
|
|
146
|
+
return WSAETIMEDOUT;
|
|
147
|
+
|
|
148
|
+
case STATUS_GRACEFUL_DISCONNECT:
|
|
149
|
+
return WSAEDISCON;
|
|
150
|
+
|
|
151
|
+
case STATUS_REMOTE_DISCONNECT:
|
|
152
|
+
case STATUS_CONNECTION_RESET:
|
|
153
|
+
case STATUS_LINK_FAILED:
|
|
154
|
+
case STATUS_CONNECTION_DISCONNECTED:
|
|
155
|
+
case STATUS_PORT_UNREACHABLE:
|
|
156
|
+
case STATUS_HOPLIMIT_EXCEEDED:
|
|
157
|
+
return WSAECONNRESET;
|
|
158
|
+
|
|
159
|
+
case STATUS_LOCAL_DISCONNECT:
|
|
160
|
+
case STATUS_TRANSACTION_ABORTED:
|
|
161
|
+
case STATUS_CONNECTION_ABORTED:
|
|
162
|
+
return WSAECONNABORTED;
|
|
163
|
+
|
|
164
|
+
case STATUS_BAD_NETWORK_PATH:
|
|
165
|
+
case STATUS_NETWORK_UNREACHABLE:
|
|
166
|
+
case STATUS_PROTOCOL_UNREACHABLE:
|
|
167
|
+
return WSAENETUNREACH;
|
|
168
|
+
|
|
169
|
+
case STATUS_HOST_UNREACHABLE:
|
|
170
|
+
return WSAEHOSTUNREACH;
|
|
171
|
+
|
|
172
|
+
case STATUS_CANCELLED:
|
|
173
|
+
case STATUS_REQUEST_ABORTED:
|
|
174
|
+
return WSAEINTR;
|
|
175
|
+
|
|
176
|
+
case STATUS_BUFFER_OVERFLOW:
|
|
177
|
+
case STATUS_INVALID_BUFFER_SIZE:
|
|
178
|
+
return WSAEMSGSIZE;
|
|
179
|
+
|
|
180
|
+
case STATUS_BUFFER_TOO_SMALL:
|
|
181
|
+
case STATUS_ACCESS_VIOLATION:
|
|
182
|
+
return WSAEFAULT;
|
|
183
|
+
|
|
184
|
+
case STATUS_DEVICE_NOT_READY:
|
|
185
|
+
case STATUS_REQUEST_NOT_ACCEPTED:
|
|
186
|
+
return WSAEWOULDBLOCK;
|
|
187
|
+
|
|
188
|
+
case STATUS_INVALID_NETWORK_RESPONSE:
|
|
189
|
+
case STATUS_NETWORK_BUSY:
|
|
190
|
+
case STATUS_NO_SUCH_DEVICE:
|
|
191
|
+
case STATUS_NO_SUCH_FILE:
|
|
192
|
+
case STATUS_OBJECT_PATH_NOT_FOUND:
|
|
193
|
+
case STATUS_OBJECT_NAME_NOT_FOUND:
|
|
194
|
+
case STATUS_UNEXPECTED_NETWORK_ERROR:
|
|
195
|
+
return WSAENETDOWN;
|
|
196
|
+
|
|
197
|
+
case STATUS_INVALID_CONNECTION:
|
|
198
|
+
return WSAENOTCONN;
|
|
199
|
+
|
|
200
|
+
case STATUS_REMOTE_NOT_LISTENING:
|
|
201
|
+
case STATUS_CONNECTION_REFUSED:
|
|
202
|
+
return WSAECONNREFUSED;
|
|
203
|
+
|
|
204
|
+
case STATUS_PIPE_DISCONNECTED:
|
|
205
|
+
return WSAESHUTDOWN;
|
|
206
|
+
|
|
207
|
+
case STATUS_INVALID_ADDRESS:
|
|
208
|
+
case STATUS_INVALID_ADDRESS_COMPONENT:
|
|
209
|
+
return WSAEADDRNOTAVAIL;
|
|
210
|
+
|
|
211
|
+
case STATUS_NOT_SUPPORTED:
|
|
212
|
+
case STATUS_NOT_IMPLEMENTED:
|
|
213
|
+
return WSAEOPNOTSUPP;
|
|
214
|
+
|
|
215
|
+
case STATUS_ACCESS_DENIED:
|
|
216
|
+
return WSAEACCES;
|
|
217
|
+
|
|
218
|
+
default:
|
|
219
|
+
if ((status & (FACILITY_NTWIN32 << 16)) == (FACILITY_NTWIN32 << 16) &&
|
|
220
|
+
(status & (ERROR_SEVERITY_ERROR | ERROR_SEVERITY_WARNING))) {
|
|
221
|
+
/* It's a windows error that has been previously mapped to an */
|
|
222
|
+
/* ntstatus code. */
|
|
223
|
+
return (DWORD)(status & 0xffff);
|
|
224
|
+
} else {
|
|
225
|
+
/* The default fallback for unmappable ntstatus codes. */
|
|
226
|
+
return WSAEINVAL;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
IF(LCB_INSTALL_HEADERS)
|
|
2
|
+
INSTALL(
|
|
3
|
+
FILES
|
|
4
|
+
libev_io_opts.h
|
|
5
|
+
DESTINATION
|
|
6
|
+
include/libcouchbase)
|
|
7
|
+
ENDIF(LCB_INSTALL_HEADERS)
|
|
8
|
+
|
|
9
|
+
IF(NOT (HAVE_LIBEV3 OR HAVE_LIBEV4))
|
|
10
|
+
RETURN()
|
|
11
|
+
ENDIF()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
ADD_LIBRARY(couchbase_libev SHARED plugin-libev.c)
|
|
15
|
+
SET_TARGET_PROPERTIES(couchbase_libev
|
|
16
|
+
PROPERTIES
|
|
17
|
+
PREFIX "lib"
|
|
18
|
+
IMPORT_PREFIX "lib"
|
|
19
|
+
COMPILE_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CORE_CFLAGS} -std=gnu99")
|
|
20
|
+
TARGET_LINK_LIBRARIES(couchbase_libev ${LIBEV_LIBRARIES})
|
|
21
|
+
INCLUDE_DIRECTORIES(AFTER ${LIBEV_INCLUDE_DIR})
|
|
22
|
+
|
|
23
|
+
IF(HAVE_LIBEV4)
|
|
24
|
+
ADD_DEFINITIONS(-DHAVE_LIBEV4)
|
|
25
|
+
ELSE()
|
|
26
|
+
ADD_DEFINITIONS(-DHAVE_LIBEV3)
|
|
27
|
+
ENDIF()
|
|
28
|
+
|
|
29
|
+
INSTALL(TARGETS
|
|
30
|
+
couchbase_libev
|
|
31
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
/**
|
|
19
|
+
* @file
|
|
20
|
+
* libev integration with libcouchbase
|
|
21
|
+
* @author Sergey Avseyev
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @ingroup lcb-io-plugin-api
|
|
26
|
+
* @defgroup lcb-libev libev
|
|
27
|
+
* @brief libev integration
|
|
28
|
+
*
|
|
29
|
+
* @details
|
|
30
|
+
* libcouchbase_create_libev_io_opts() allows you to create an instance
|
|
31
|
+
* of the ioopts that will utilize libev. You may either supply an event
|
|
32
|
+
* loop (if you'd like to add your own events into the loop), or it will
|
|
33
|
+
* create it's own.
|
|
34
|
+
*
|
|
35
|
+
* @addtogroup lcb-libev
|
|
36
|
+
* @{
|
|
37
|
+
*/
|
|
38
|
+
#ifndef LIBCOUCHBASE_LIBEV_IO_OPTS_H
|
|
39
|
+
#define LIBCOUCHBASE_LIBEV_IO_OPTS_H 1
|
|
40
|
+
|
|
41
|
+
#include <libcouchbase/couchbase.h>
|
|
42
|
+
|
|
43
|
+
#ifdef __cplusplus
|
|
44
|
+
extern "C" {
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Create an instance of an event handler that utilize libev for
|
|
49
|
+
* event notification.
|
|
50
|
+
*
|
|
51
|
+
* @param version Set this to 0. This may be used in the future to allow
|
|
52
|
+
* variation on the third argument (`void*` currently).
|
|
53
|
+
* @param[out] io a pointer to a newly created and initialized event handler
|
|
54
|
+
* @param loop the event loop (struct ev_loop *) to hook use (please
|
|
55
|
+
* note that you shouldn't reference the event loop from
|
|
56
|
+
* multiple threads)
|
|
57
|
+
* @return status of the operation
|
|
58
|
+
*/
|
|
59
|
+
LIBCOUCHBASE_API
|
|
60
|
+
lcb_error_t lcb_create_libev_io_opts(int version, lcb_io_opt_t *io, void *loop);
|
|
61
|
+
#ifdef __cplusplus
|
|
62
|
+
}
|
|
63
|
+
#endif
|
|
64
|
+
|
|
65
|
+
/**@}*/
|
|
66
|
+
#endif
|