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,495 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2016 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "contrib/lcb-jsoncpp/lcb-jsoncpp.h"
|
|
19
|
+
#include "placeholders.h"
|
|
20
|
+
#include <algorithm>
|
|
21
|
+
#include <stdexcept>
|
|
22
|
+
|
|
23
|
+
namespace Pillowfight {
|
|
24
|
+
|
|
25
|
+
#define JSON_VALUE_SIZE 16
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Per-thread mutable state to generate the document. The populateIov()
|
|
29
|
+
* method is called to populate IOVs suitable for passing to the storage
|
|
30
|
+
* functions.
|
|
31
|
+
*/
|
|
32
|
+
class GeneratorState {
|
|
33
|
+
public:
|
|
34
|
+
/**
|
|
35
|
+
* Populate an IOV array
|
|
36
|
+
* @param seq The sequence number (used as a 'selector')
|
|
37
|
+
* @param[out] iov IOV containing pointers to buffers
|
|
38
|
+
*
|
|
39
|
+
* The buffers pointed to in the IOV array remain valid so long as
|
|
40
|
+
* the populateIov() function is not called again on this state
|
|
41
|
+
*/
|
|
42
|
+
virtual void populateIov(uint32_t seq, std::vector<lcb_IOV>& iov) = 0;
|
|
43
|
+
virtual ~GeneratorState() {}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
class SubdocGeneratorState {
|
|
47
|
+
public:
|
|
48
|
+
/**
|
|
49
|
+
* Populates subdocument command specifications
|
|
50
|
+
* @param seq the sequence number of the current command
|
|
51
|
+
* @param[in,out] specs container to hold the actual spec array.
|
|
52
|
+
* The spec array must have already been properly pre-sized.
|
|
53
|
+
*/
|
|
54
|
+
virtual void populateLookup(uint32_t seq, std::vector<lcb_SDSPEC>& specs) = 0;
|
|
55
|
+
virtual void populateMutate(uint32_t seq, std::vector<lcb_SDSPEC>& specs) = 0;
|
|
56
|
+
virtual ~SubdocGeneratorState() {}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
class DocGeneratorBase {
|
|
60
|
+
public:
|
|
61
|
+
/**
|
|
62
|
+
* Create the per-thread state for generating documents
|
|
63
|
+
* @param total_gens Number of total generator threads
|
|
64
|
+
* @param cur_gen The index of the current generator thread
|
|
65
|
+
* @return An opaque state object. This should be deleted by the caller
|
|
66
|
+
*/
|
|
67
|
+
virtual GeneratorState *createState(int total_gens, int cur_gen) const = 0;
|
|
68
|
+
virtual SubdocGeneratorState *createSubdocState(int, int) const { return NULL; }
|
|
69
|
+
virtual ~DocGeneratorBase() {}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
static const char alphabet[] = "0123456789 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
73
|
+
|
|
74
|
+
static void random_fill(std::string& str, int level) {
|
|
75
|
+
if (level > 1) {
|
|
76
|
+
for (size_t ii = 0; ii < str.size(); ii++) {
|
|
77
|
+
str[ii] = rand() % (0x7e - 0x20) + 0x20; // printable
|
|
78
|
+
switch (str[ii]) {
|
|
79
|
+
case 0x5c: // backslash
|
|
80
|
+
case 0x22: // double quote
|
|
81
|
+
str[ii]++;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
} else if (level > 0) {
|
|
86
|
+
for (size_t ii = 0; ii < str.size(); ii++) {
|
|
87
|
+
str[ii] = alphabet[rand() % (sizeof(alphabet) - 1)];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Generator class for raw objects. This contains a fixed buffer and will
|
|
94
|
+
* simply vary in how 'long' the buffer is
|
|
95
|
+
*/
|
|
96
|
+
class RawDocGenerator : public DocGeneratorBase {
|
|
97
|
+
public:
|
|
98
|
+
/**
|
|
99
|
+
* Generate graded sizes based on a min,max specification. This allows us
|
|
100
|
+
* to be more efficient by cutting corners on how 'random' the sizes
|
|
101
|
+
* actually are. Rather than generating a 'random' size each time we need
|
|
102
|
+
* a document, we split the range into a set of potential sizes (which are
|
|
103
|
+
* also evenly distributed) and cycle between them.
|
|
104
|
+
*
|
|
105
|
+
* @param minsz Smallest desired size
|
|
106
|
+
* @param maxsz Largest desired size
|
|
107
|
+
* @param granularity How many grades to produce
|
|
108
|
+
* @return A vector of sizes which fall between the range
|
|
109
|
+
*/
|
|
110
|
+
static std::vector<size_t>
|
|
111
|
+
gen_graded_sizes(uint32_t minsz, uint32_t maxsz, int grades=10) {
|
|
112
|
+
std::vector<size_t> ret;
|
|
113
|
+
|
|
114
|
+
size_t diff = maxsz - minsz;
|
|
115
|
+
size_t factor = diff / grades;
|
|
116
|
+
if (factor == 0 || minsz == maxsz) {
|
|
117
|
+
ret.push_back(maxsz);
|
|
118
|
+
} else {
|
|
119
|
+
for (int ii = 0; ii < grades+1; ii++) {
|
|
120
|
+
size_t size = minsz + (factor * ii);
|
|
121
|
+
ret.push_back(size);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return ret;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
RawDocGenerator(uint32_t minsz, uint32_t maxsz, int rnd)
|
|
128
|
+
: m_sizes(gen_graded_sizes(minsz, maxsz)) {
|
|
129
|
+
// Populate the buffer to its capacity
|
|
130
|
+
m_buf.insert(0, maxsz, '#');
|
|
131
|
+
if (rnd) {
|
|
132
|
+
random_fill(m_buf, rnd);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class MyState : public GeneratorState {
|
|
138
|
+
public:
|
|
139
|
+
MyState(const RawDocGenerator *parent) : m_parent(parent) {
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const RawDocGenerator *m_parent;
|
|
143
|
+
void populateIov(uint32_t seq, std::vector<lcb_IOV>& iov_out) {
|
|
144
|
+
m_parent->populateIov(seq, iov_out);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
GeneratorState * createState(int, int) const {
|
|
149
|
+
return new MyState(this);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private:
|
|
153
|
+
void populateIov(uint32_t seq, std::vector<lcb_IOV>& iov_out) const {
|
|
154
|
+
iov_out.resize(1);
|
|
155
|
+
size_t cursz = m_sizes[seq % m_sizes.size()];
|
|
156
|
+
iov_out[0].iov_base = const_cast<char*>(m_buf.c_str());
|
|
157
|
+
iov_out[0].iov_len = cursz;
|
|
158
|
+
}
|
|
159
|
+
std::string m_buf;
|
|
160
|
+
std::vector<size_t> m_sizes;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* This 'generator' ignores sizes and generates documents as they are received
|
|
165
|
+
* from premade buffers
|
|
166
|
+
*/
|
|
167
|
+
class PresetDocGenerator : public DocGeneratorBase {
|
|
168
|
+
public:
|
|
169
|
+
/**
|
|
170
|
+
* @param inputs List of fixed inputs to use
|
|
171
|
+
*/
|
|
172
|
+
PresetDocGenerator(const std::vector<std::string>& inputs) : m_bufs(inputs) {
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
class MyState : public GeneratorState {
|
|
176
|
+
public:
|
|
177
|
+
MyState(const PresetDocGenerator *parent) : m_parent(parent) {
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
void populateIov(uint32_t seq, std::vector<lcb_IOV>& iov_out) {
|
|
181
|
+
m_parent->populateIov(seq, iov_out);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
private:
|
|
185
|
+
const PresetDocGenerator *m_parent;
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
GeneratorState *createState(int, int) const {
|
|
189
|
+
return new MyState(this);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
protected:
|
|
193
|
+
PresetDocGenerator() {}
|
|
194
|
+
|
|
195
|
+
void populateIov(uint32_t seq, std::vector<lcb_IOV>& iov_out) const {
|
|
196
|
+
iov_out.resize(1);
|
|
197
|
+
const std::string& s = m_bufs[seq % m_bufs.size()];
|
|
198
|
+
iov_out[0].iov_base = const_cast<char *>(s.c_str());
|
|
199
|
+
iov_out[0].iov_len = s.size();
|
|
200
|
+
}
|
|
201
|
+
std::vector<std::string> m_bufs;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// This is the same as the normal document generator, except we generate
|
|
205
|
+
// the JSON first
|
|
206
|
+
class JsonDocGenerator : public PresetDocGenerator {
|
|
207
|
+
private:
|
|
208
|
+
struct Doc {
|
|
209
|
+
std::string m_doc;
|
|
210
|
+
class Field {
|
|
211
|
+
public:
|
|
212
|
+
Field(const std::string& n, std::string& v) : m_name(n), m_value(v) {}
|
|
213
|
+
const std::string& name() const { return m_name; }
|
|
214
|
+
const std::string& value() const { return m_value; }
|
|
215
|
+
private:
|
|
216
|
+
std::string m_name;
|
|
217
|
+
std::string m_value;
|
|
218
|
+
};
|
|
219
|
+
std::vector<Field> m_fields;
|
|
220
|
+
};
|
|
221
|
+
std::vector<Doc> m_docs;
|
|
222
|
+
|
|
223
|
+
public:
|
|
224
|
+
/**
|
|
225
|
+
* @param minsz Minimum JSON document size
|
|
226
|
+
* @param maxsz Maximum JSON document size
|
|
227
|
+
*/
|
|
228
|
+
JsonDocGenerator(uint32_t minsz, uint32_t maxsz, int rnd)
|
|
229
|
+
{
|
|
230
|
+
genDocuments(minsz, maxsz, m_docs, rnd);
|
|
231
|
+
for (size_t ii = 0; ii < m_docs.size(); ++ii) {
|
|
232
|
+
m_bufs.push_back(m_docs[ii].m_doc);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
static void genDocuments(uint32_t minsz, uint32_t maxsz, std::vector<std::string>& out, int rnd)
|
|
237
|
+
{
|
|
238
|
+
std::vector<Doc> docs;
|
|
239
|
+
genDocuments(minsz, maxsz, docs, rnd);
|
|
240
|
+
for (size_t ii = 0; ii < docs.size(); ++ii) {
|
|
241
|
+
out.push_back(docs[ii].m_doc);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
private:
|
|
246
|
+
/**
|
|
247
|
+
* Helper method to decrease the original size by a given amount.
|
|
248
|
+
*
|
|
249
|
+
* This also ensures the number never reaches below 0.
|
|
250
|
+
*
|
|
251
|
+
* @param[out] orig Pointer to original size
|
|
252
|
+
* @param toDecr number by which to decrement
|
|
253
|
+
*/
|
|
254
|
+
static void decrSize(int *orig, size_t toDecr)
|
|
255
|
+
{
|
|
256
|
+
*orig = std::max(0, *orig - static_cast<int>(toDecr));
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
static void
|
|
260
|
+
genDocuments(uint32_t minsz, uint32_t maxsz, std::vector<Doc>& out, int rnd)
|
|
261
|
+
{
|
|
262
|
+
std::vector<size_t> sizes = RawDocGenerator::gen_graded_sizes(minsz, maxsz);
|
|
263
|
+
for (std::vector<size_t>::iterator ii = sizes.begin();
|
|
264
|
+
ii != sizes.end(); ++ii) {
|
|
265
|
+
out.push_back(generate(*ii, rnd));
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Generates a "JSON" document of a given size. In order to remain
|
|
271
|
+
* more or less in-tune with common document sizes, field names will be
|
|
272
|
+
* "Field_$incr" and values will be evenly distributed as fixed 16 byte
|
|
273
|
+
* strings. (See JSON_VALUE_SIZE)
|
|
274
|
+
*/
|
|
275
|
+
static Doc generate(int docsize, int rnd)
|
|
276
|
+
{
|
|
277
|
+
int counter = 0;
|
|
278
|
+
char keybuf[128] = { 0 };
|
|
279
|
+
Json::Value root(Json::objectValue);
|
|
280
|
+
Json::FastWriter writer;
|
|
281
|
+
Doc ret;
|
|
282
|
+
|
|
283
|
+
while (docsize > 0) {
|
|
284
|
+
decrSize(&docsize, sprintf(keybuf, "Field_%d", ++counter) + 3);
|
|
285
|
+
size_t valsize = std::min(JSON_VALUE_SIZE, docsize);
|
|
286
|
+
if (!valsize) {
|
|
287
|
+
valsize = 1;
|
|
288
|
+
}
|
|
289
|
+
std::string value(valsize, '*');
|
|
290
|
+
if (rnd) {
|
|
291
|
+
random_fill(value, rnd);
|
|
292
|
+
}
|
|
293
|
+
decrSize(&docsize, valsize + 3);
|
|
294
|
+
root[keybuf] = value;
|
|
295
|
+
value = '"' + value;
|
|
296
|
+
value += '"';
|
|
297
|
+
ret.m_fields.push_back(Doc::Field(keybuf, value));
|
|
298
|
+
}
|
|
299
|
+
ret.m_doc = writer.write(root);
|
|
300
|
+
return ret;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
class SDGenstate: public SubdocGeneratorState {
|
|
304
|
+
public:
|
|
305
|
+
SDGenstate(const std::vector<Doc>& docs) : m_pathix(0), m_docs(docs) {
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
void populateLookup(uint32_t seq, std::vector<lcb_SDSPEC>& specs) {
|
|
309
|
+
populate(seq, specs, false);
|
|
310
|
+
}
|
|
311
|
+
void populateMutate(uint32_t seq, std::vector<lcb_SDSPEC>& specs) {
|
|
312
|
+
populate(seq, specs, true);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
private:
|
|
316
|
+
void populate(uint32_t seq, std::vector<lcb_SDSPEC>& specs, bool mutate) {
|
|
317
|
+
const Doc& d = doc(seq);
|
|
318
|
+
specs.resize(std::min(d.m_fields.size(), specs.size()));
|
|
319
|
+
for (size_t ii = 0; ii < d.m_fields.size() && ii < specs.size(); ++ii) {
|
|
320
|
+
const Doc::Field& f = d.m_fields[m_pathix++ % d.m_fields.size()];
|
|
321
|
+
lcb_SDSPEC& cur_spec = specs[ii];
|
|
322
|
+
LCB_SDSPEC_SET_PATH(&cur_spec, f.name().c_str(), f.name().size());
|
|
323
|
+
if (mutate) {
|
|
324
|
+
LCB_SDSPEC_SET_VALUE(&cur_spec, f.value().c_str(), f.value().size());
|
|
325
|
+
specs[ii].sdcmd = LCB_SDCMD_DICT_UPSERT;
|
|
326
|
+
} else {
|
|
327
|
+
specs[ii].sdcmd = LCB_SDCMD_GET;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
const Doc& doc(uint32_t seq) const { return m_docs[seq % m_docs.size()]; }
|
|
333
|
+
size_t m_pathix;
|
|
334
|
+
const std::vector<Doc>& m_docs;
|
|
335
|
+
};
|
|
336
|
+
public:
|
|
337
|
+
virtual SubdocGeneratorState *createSubdocState(int, int) const {
|
|
338
|
+
return new SDGenstate(m_docs);
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
struct TemplateSpec {
|
|
343
|
+
std::string term;
|
|
344
|
+
unsigned minval;
|
|
345
|
+
unsigned maxval;
|
|
346
|
+
bool sequential;
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Generate documents based on placeholder values. Each document (JSON or not)
|
|
351
|
+
* may have one or more special replacement texts which can be substituted
|
|
352
|
+
* with a random number
|
|
353
|
+
*/
|
|
354
|
+
class PlaceholderDocGenerator : public DocGeneratorBase {
|
|
355
|
+
public:
|
|
356
|
+
/**
|
|
357
|
+
* @param specs Placeholder specifications
|
|
358
|
+
* @param inputs Documents to use for replacements
|
|
359
|
+
*/
|
|
360
|
+
PlaceholderDocGenerator(
|
|
361
|
+
const std::vector<std::string>& inputs,
|
|
362
|
+
const std::vector<TemplateSpec>& specs) {
|
|
363
|
+
|
|
364
|
+
initMatches(specs, inputs);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
protected:
|
|
368
|
+
PlaceholderDocGenerator() {}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Really belongs in constructor, but is decoupled for subclasses
|
|
372
|
+
*/
|
|
373
|
+
void initMatches(
|
|
374
|
+
const std::vector<TemplateSpec>& specs,
|
|
375
|
+
const std::vector<std::string>& inputs) {
|
|
376
|
+
|
|
377
|
+
using namespace Placeholders;
|
|
378
|
+
|
|
379
|
+
for (std::vector<TemplateSpec>::const_iterator ii = specs.begin();
|
|
380
|
+
ii != specs.end(); ++ii) {
|
|
381
|
+
Placeholders::Spec cur(ii->term, ii->minval, ii->maxval, ii->sequential);
|
|
382
|
+
pl_specs.push_back(cur);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
for (std::vector<std::string>::const_iterator ii = inputs.begin();
|
|
386
|
+
ii != inputs.end(); ++ii) {
|
|
387
|
+
matches.push_back(new DocumentMatches(*ii, pl_specs));
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
public:
|
|
392
|
+
GeneratorState *createState(int total, int cur) const {
|
|
393
|
+
return new MyState(this, total, cur);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
private:
|
|
397
|
+
class MyState : public GeneratorState {
|
|
398
|
+
public:
|
|
399
|
+
MyState(const PlaceholderDocGenerator *parent, int total, int cur)
|
|
400
|
+
: m_parent(parent) {
|
|
401
|
+
using namespace Placeholders;
|
|
402
|
+
for (size_t ii = 0; ii < parent->matches.size(); ii++) {
|
|
403
|
+
m_substs.push_back(
|
|
404
|
+
Substitutions(parent->matches[ii], total, cur));
|
|
405
|
+
}
|
|
406
|
+
m_bufs.resize(m_substs.size());
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
void populateIov(uint32_t seq, std::vector<lcb_IOV>& iov_out) {
|
|
410
|
+
using namespace Placeholders;
|
|
411
|
+
size_t ix = seq % m_substs.size();
|
|
412
|
+
Substitutions& subst = m_substs[ix];
|
|
413
|
+
Substitutions::Backbuffer& buf = m_bufs[ix];
|
|
414
|
+
subst.makeIovs(iov_out, buf);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
std::vector<Placeholders::Substitutions::Backbuffer> m_bufs;
|
|
418
|
+
std::vector<Placeholders::Substitutions> m_substs;
|
|
419
|
+
const PlaceholderDocGenerator *m_parent;
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
// Match object for each doc
|
|
423
|
+
std::vector<Placeholders::DocumentMatches*> matches;
|
|
424
|
+
std::vector<Placeholders::Spec> pl_specs;
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Generate documents based on JSON fields. This adds on top of the normal
|
|
429
|
+
* document generator in that JSON paths are used and explicit placeholders
|
|
430
|
+
* are not required
|
|
431
|
+
*/
|
|
432
|
+
class PlaceholderJsonGenerator : public PlaceholderDocGenerator {
|
|
433
|
+
public:
|
|
434
|
+
/**
|
|
435
|
+
* @param specs List of specs. The term in the spec refers to the field
|
|
436
|
+
* which is to be replaced, not the placeholder text
|
|
437
|
+
* @param documents The documents to operate on
|
|
438
|
+
*/
|
|
439
|
+
PlaceholderJsonGenerator(
|
|
440
|
+
const std::vector<std::string>& documents,
|
|
441
|
+
const std::vector<TemplateSpec>& specs) {
|
|
442
|
+
|
|
443
|
+
initJsonPlaceholders(specs, documents);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* Generate the documents, and then generate specs for them
|
|
448
|
+
* @param specs The specs to use
|
|
449
|
+
* @param minsz Minimum document size
|
|
450
|
+
* @param maxsz Maximum document size
|
|
451
|
+
*/
|
|
452
|
+
PlaceholderJsonGenerator(uint32_t minsz, uint32_t maxsz,
|
|
453
|
+
const std::vector<TemplateSpec>& specs, int rnd) {
|
|
454
|
+
|
|
455
|
+
std::vector<std::string> jsondocs;
|
|
456
|
+
JsonDocGenerator::genDocuments(minsz, maxsz, jsondocs, rnd);
|
|
457
|
+
initJsonPlaceholders(specs, jsondocs);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
private:
|
|
461
|
+
void initJsonPlaceholders(
|
|
462
|
+
const std::vector<TemplateSpec>& specs,
|
|
463
|
+
const std::vector<std::string>& documents) {
|
|
464
|
+
|
|
465
|
+
int serial = 0;
|
|
466
|
+
Json::Reader reader;
|
|
467
|
+
Json::FastWriter writer;
|
|
468
|
+
std::vector<TemplateSpec> new_specs;
|
|
469
|
+
std::vector<std::string> new_docs;
|
|
470
|
+
|
|
471
|
+
for (size_t ii = 0; ii < documents.size(); ii++) {
|
|
472
|
+
Json::Value root;
|
|
473
|
+
if (!reader.parse(documents[ii], root)) {
|
|
474
|
+
throw std::runtime_error("Couldn't parse one or more documents!");
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
for (size_t jj = 0; jj < specs.size(); ++jj) {
|
|
478
|
+
char buf[64];
|
|
479
|
+
const TemplateSpec& spec = specs[jj];
|
|
480
|
+
sprintf(buf, "$__pillowfight_%d", serial++);
|
|
481
|
+
root[spec.term] = buf;
|
|
482
|
+
TemplateSpec new_spec = spec;
|
|
483
|
+
|
|
484
|
+
std::string replace_term(buf);
|
|
485
|
+
replace_term = '"' + replace_term + '"';
|
|
486
|
+
new_spec.term = replace_term;
|
|
487
|
+
new_specs.push_back(new_spec);
|
|
488
|
+
}
|
|
489
|
+
new_docs.push_back(writer.write(root));
|
|
490
|
+
}
|
|
491
|
+
initMatches(new_specs, new_docs);
|
|
492
|
+
}
|
|
493
|
+
};
|
|
494
|
+
|
|
495
|
+
} // namespace
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2016 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
|
+
#ifndef CBC_PILLOWFIGHT_LOC_H
|
|
18
|
+
#define CBC_PILLOWFIGHT_LOC_H
|
|
19
|
+
|
|
20
|
+
namespace Pillowfight {
|
|
21
|
+
|
|
22
|
+
// This class copy/pasted from Subdoc (which I also wrote)
|
|
23
|
+
class Loc {
|
|
24
|
+
public:
|
|
25
|
+
const char *at;
|
|
26
|
+
size_t length;
|
|
27
|
+
|
|
28
|
+
Loc() : at(NULL), length(0) {
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Loc(const lcb_IOV& iov) :
|
|
32
|
+
at(reinterpret_cast<const char*>(iov.iov_base)), length(iov.iov_len) {
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
Loc(const char *s, size_t n) {
|
|
36
|
+
assign(s, n);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
lcb_IOV to_iov() const {
|
|
40
|
+
lcb_IOV ret;
|
|
41
|
+
ret.iov_base = const_cast<char*>(at);
|
|
42
|
+
ret.iov_len = length;
|
|
43
|
+
return ret;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
enum OverlapMode {
|
|
47
|
+
NO_OVERLAP = 0,
|
|
48
|
+
OVERLAP = 1
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
void assign(const char *s, size_t n) { at = s; length = n; }
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Modifies the object so that it ends where `until` begins.
|
|
55
|
+
*
|
|
56
|
+
* The object will have a starting position of the base buffer, and will
|
|
57
|
+
* span until the `until` buffer.
|
|
58
|
+
*
|
|
59
|
+
* Example:
|
|
60
|
+
* @code
|
|
61
|
+
* BASE = ABCDEFGHIJ
|
|
62
|
+
* UNTIL = FGH
|
|
63
|
+
* THIS = ABCDE
|
|
64
|
+
* @endcode
|
|
65
|
+
*
|
|
66
|
+
* @param base The common buffer
|
|
67
|
+
* @param until position at where this buffer should end
|
|
68
|
+
* @param overlap Whether the end should overlap with the first byte of `until`
|
|
69
|
+
*/
|
|
70
|
+
void end_at_begin(const Loc& base, const Loc& until, OverlapMode overlap) {
|
|
71
|
+
at = base.at;
|
|
72
|
+
length = until.at - base.at;
|
|
73
|
+
if (overlap == OVERLAP) {
|
|
74
|
+
length++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Modifies the object so that it begins where `until` ends.
|
|
80
|
+
*
|
|
81
|
+
* The buffer will have an end position matching the end of the base buffer,
|
|
82
|
+
* and will end where `from` ends.
|
|
83
|
+
*
|
|
84
|
+
* Example:
|
|
85
|
+
* @code
|
|
86
|
+
* BASE = ABCDEFGHIJ
|
|
87
|
+
* FROM = CDE
|
|
88
|
+
* THIS = FGHIJ
|
|
89
|
+
* @endcode
|
|
90
|
+
*
|
|
91
|
+
* @param base The common buffer
|
|
92
|
+
* @param from A buffer whose end should be used as the beginning of the
|
|
93
|
+
* current buffer
|
|
94
|
+
* @param overlap Whether the current buffer should overlap `until`'s last
|
|
95
|
+
* byte
|
|
96
|
+
*/
|
|
97
|
+
void begin_at_end(const Loc& base, const Loc& from, OverlapMode overlap) {
|
|
98
|
+
at = from.at + from.length;
|
|
99
|
+
length = base.length - (at - base.at);
|
|
100
|
+
if (overlap == OVERLAP) {
|
|
101
|
+
at--;
|
|
102
|
+
length++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Modifies the object so that it begins where `from` begins.
|
|
108
|
+
*
|
|
109
|
+
* The buffer will have an end position matching the end of the base buffer
|
|
110
|
+
* and will begin where `from` begins
|
|
111
|
+
*
|
|
112
|
+
* Example:
|
|
113
|
+
* @code
|
|
114
|
+
* BASE = ABCDEFGHIJ
|
|
115
|
+
* FROM = DEF
|
|
116
|
+
* THIS = DEFGHIJ
|
|
117
|
+
* @endcode
|
|
118
|
+
*
|
|
119
|
+
* @param base Common buffer
|
|
120
|
+
* @param from The begin position
|
|
121
|
+
*/
|
|
122
|
+
void begin_at_begin(const Loc& base, const Loc& from) {
|
|
123
|
+
at = from.at;
|
|
124
|
+
length = base.length - (from.at - base.at);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Modifies the object so that it ends where `until` ends.
|
|
129
|
+
*
|
|
130
|
+
* The buffer will have a start position of `base` and an end position of
|
|
131
|
+
* `until.
|
|
132
|
+
*
|
|
133
|
+
* Example
|
|
134
|
+
* @code
|
|
135
|
+
* BASE = ABCDEFGHIJ
|
|
136
|
+
* UNTIL = EFG
|
|
137
|
+
* THIS = ABCDEFG
|
|
138
|
+
* @endcode
|
|
139
|
+
*
|
|
140
|
+
* @param base
|
|
141
|
+
* @param until
|
|
142
|
+
* @param overlap
|
|
143
|
+
*/
|
|
144
|
+
void end_at_end(const Loc& base, const Loc& until, OverlapMode overlap) {
|
|
145
|
+
at = base.at;
|
|
146
|
+
length = (until.at + until.length) - base.at;
|
|
147
|
+
if (overlap == NO_OVERLAP) {
|
|
148
|
+
length--;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
bool empty() const { return length == 0; }
|
|
153
|
+
|
|
154
|
+
std::string to_string() const {
|
|
155
|
+
if (!empty()) {
|
|
156
|
+
return std::string(at, length);
|
|
157
|
+
} else {
|
|
158
|
+
return std::string();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Move buffer start ahead n bytes
|
|
163
|
+
void ltrim(size_t n) {
|
|
164
|
+
at += n;
|
|
165
|
+
length -= n;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Move buffer end back n bytes
|
|
169
|
+
void rtrim(size_t n) {
|
|
170
|
+
length -= n;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Added for pillowfight
|
|
174
|
+
//
|
|
175
|
+
// Set buffer to end where 'loc' begins, while not touching the beginning
|
|
176
|
+
// of the buffer
|
|
177
|
+
void rtrim_to(const Loc& loc) {
|
|
178
|
+
assert(loc.at > at);
|
|
179
|
+
size_t diff = loc.at - at;
|
|
180
|
+
length = diff;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Added for pillowfight
|
|
184
|
+
bool contains(const Loc& sub) const {
|
|
185
|
+
return sub.at >= at && // Begins at or after our beginning
|
|
186
|
+
sub.at < at + length && // begins before or at the end
|
|
187
|
+
sub.at + sub.length <= at + length;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
static void
|
|
191
|
+
dumpIovs(const std::vector<lcb_IOV>& vecs) {
|
|
192
|
+
for (size_t ii = 0; ii < vecs.size(); ii++) {
|
|
193
|
+
const lcb_IOV& iov = vecs[ii];
|
|
194
|
+
printf("IOV[%lu]. Buf=%p. Len=%lu. Content=%.*s\n", (unsigned long int)ii,
|
|
195
|
+
(void *)iov.iov_base, (unsigned long int)iov.iov_len,
|
|
196
|
+
(int)iov.iov_len, (const char*)iov.iov_base);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
static void
|
|
200
|
+
dumpIovs(const std::vector<Loc>& vecs) {
|
|
201
|
+
for (size_t ii = 0; ii < vecs.size(); ii++) {
|
|
202
|
+
const Loc& loc = vecs[ii];
|
|
203
|
+
std::string s = loc.to_string();
|
|
204
|
+
printf("Loc[%lu]. Buf=%p. Len=%lu. Content=%s\n",
|
|
205
|
+
(unsigned long int)ii, (void *)loc.at,
|
|
206
|
+
(unsigned long int)loc.length, s.c_str());
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
#endif
|