libcouchbase 0.0.1
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 +18 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +35 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +389 -0
- data/Rakefile +75 -0
- data/ext/README.md +6 -0
- data/ext/Rakefile +20 -0
- data/ext/libcouchbase/.gitignore +130 -0
- data/ext/libcouchbase/.travis.yml +19 -0
- data/ext/libcouchbase/CMakeLists.txt +429 -0
- data/ext/libcouchbase/CONTRIBUTING.md +124 -0
- data/ext/libcouchbase/LICENSE +202 -0
- data/ext/libcouchbase/README.markdown +163 -0
- data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -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 +20 -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 +52 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -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 +60 -0
- data/ext/libcouchbase/cmake/configure +357 -0
- data/ext/libcouchbase/cmake/defs.mk.in +8 -0
- data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
- data/ext/libcouchbase/cmake/source_files.cmake +73 -0
- data/ext/libcouchbase/configure.pl +1 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
- data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
- data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
- data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
- data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
- data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -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/util.h +31 -0
- data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
- data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
- data/ext/libcouchbase/contrib/genhash/genhash.h +235 -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 +4892 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
- data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -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 +71 -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 +98 -0
- data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -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/example/CMakeLists.txt +37 -0
- data/ext/libcouchbase/example/README.markdown +47 -0
- data/ext/libcouchbase/example/db/db.c +167 -0
- data/ext/libcouchbase/example/db/vb.c +227 -0
- data/ext/libcouchbase/example/instancepool/main.cc +102 -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 +148 -0
- data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
- data/ext/libcouchbase/example/minimal/minimal.c +130 -0
- data/ext/libcouchbase/example/observe/observe.c +146 -0
- data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
- data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
- data/ext/libcouchbase/example/tick/tick.c +119 -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/cbft.h +109 -0
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
- data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
- data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
- data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
- data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
- data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
- data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -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 +312 -0
- data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
- data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -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 +1916 -0
- data/ext/libcouchbase/include/memcached/vbucket.h +42 -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 +73 -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 +108 -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 +466 -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 +29 -0
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
- data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
- data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -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 +42 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
- data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
- data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
- data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
- data/ext/libcouchbase/src/README.md +103 -0
- data/ext/libcouchbase/src/aspend.h +106 -0
- data/ext/libcouchbase/src/auth.cc +74 -0
- data/ext/libcouchbase/src/auth.h +54 -0
- data/ext/libcouchbase/src/bootstrap.c +269 -0
- data/ext/libcouchbase/src/bootstrap.h +129 -0
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
- data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
- data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
- data/ext/libcouchbase/src/callbacks.c +378 -0
- data/ext/libcouchbase/src/cbft.cc +210 -0
- data/ext/libcouchbase/src/cntl.cc +847 -0
- data/ext/libcouchbase/src/config_static.h +159 -0
- data/ext/libcouchbase/src/connspec.cc +462 -0
- data/ext/libcouchbase/src/connspec.h +105 -0
- data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
- data/ext/libcouchbase/src/dump.c +98 -0
- data/ext/libcouchbase/src/getconfig.c +100 -0
- data/ext/libcouchbase/src/gethrtime.c +109 -0
- data/ext/libcouchbase/src/handler.c +922 -0
- data/ext/libcouchbase/src/hashset.c +164 -0
- data/ext/libcouchbase/src/hashset.h +86 -0
- data/ext/libcouchbase/src/hashtable.c +75 -0
- data/ext/libcouchbase/src/hdr_timings.c +92 -0
- data/ext/libcouchbase/src/hostlist.cc +301 -0
- data/ext/libcouchbase/src/hostlist.h +171 -0
- data/ext/libcouchbase/src/http/http-priv.h +307 -0
- data/ext/libcouchbase/src/http/http.cc +633 -0
- data/ext/libcouchbase/src/http/http.h +34 -0
- data/ext/libcouchbase/src/http/http_io.cc +307 -0
- data/ext/libcouchbase/src/instance.cc +722 -0
- data/ext/libcouchbase/src/internal.h +244 -0
- data/ext/libcouchbase/src/iofactory.c +575 -0
- data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
- data/ext/libcouchbase/src/jsparse/parser.h +173 -0
- data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
- data/ext/libcouchbase/src/lcbio/connect.c +557 -0
- data/ext/libcouchbase/src/lcbio/connect.h +364 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +611 -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 +84 -0
- data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
- data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
- data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
- data/ext/libcouchbase/src/lcbio/manager.c +584 -0
- data/ext/libcouchbase/src/lcbio/manager.h +156 -0
- data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
- data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
- data/ext/libcouchbase/src/lcbio/ssl.h +149 -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 +430 -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 +86 -0
- data/ext/libcouchbase/src/mc/compress.c +90 -0
- data/ext/libcouchbase/src/mc/compress.h +61 -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 +111 -0
- data/ext/libcouchbase/src/mc/mcreq.c +954 -0
- data/ext/libcouchbase/src/mc/mcreq.h +977 -0
- data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
- data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
- data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
- data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
- data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
- data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
- data/ext/libcouchbase/src/n1ql/params.cc +215 -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.c +385 -0
- data/ext/libcouchbase/src/nodeinfo.cc +194 -0
- data/ext/libcouchbase/src/operations/cbflush.c +71 -0
- data/ext/libcouchbase/src/operations/counter.c +116 -0
- data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
- data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
- data/ext/libcouchbase/src/operations/durability.c +668 -0
- data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
- data/ext/libcouchbase/src/operations/get.c +409 -0
- data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
- data/ext/libcouchbase/src/operations/observe.c +340 -0
- data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
- data/ext/libcouchbase/src/operations/remove.c +83 -0
- data/ext/libcouchbase/src/operations/stats.c +461 -0
- data/ext/libcouchbase/src/operations/store.c +360 -0
- data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
- data/ext/libcouchbase/src/operations/touch.c +81 -0
- data/ext/libcouchbase/src/packetutils.c +60 -0
- data/ext/libcouchbase/src/packetutils.h +147 -0
- data/ext/libcouchbase/src/probes.d +211 -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.c +113 -0
- data/ext/libcouchbase/src/retryq.c +424 -0
- data/ext/libcouchbase/src/retryq.h +157 -0
- data/ext/libcouchbase/src/ringbuffer.c +442 -0
- data/ext/libcouchbase/src/ringbuffer.h +100 -0
- data/ext/libcouchbase/src/settings.c +95 -0
- data/ext/libcouchbase/src/settings.h +188 -0
- data/ext/libcouchbase/src/simplestring.c +211 -0
- data/ext/libcouchbase/src/simplestring.h +228 -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 +23 -0
- data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
- data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
- data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
- data/ext/libcouchbase/src/ssobuf.h +82 -0
- data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
- data/ext/libcouchbase/src/timings.c +208 -0
- data/ext/libcouchbase/src/trace.h +105 -0
- data/ext/libcouchbase/src/utilities.c +171 -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 +1543 -0
- data/ext/libcouchbase/src/views/docreq.c +194 -0
- data/ext/libcouchbase/src/views/docreq.h +83 -0
- data/ext/libcouchbase/src/views/viewreq.c +358 -0
- data/ext/libcouchbase/src/views/viewreq.h +36 -0
- data/ext/libcouchbase/src/wait.c +161 -0
- data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
- data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
- data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
- data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
- data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
- data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
- data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
- data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -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 +18 -0
- data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
- data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
- data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -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_string.cc +112 -0
- data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
- data/ext/libcouchbase/tests/check-all.cc +608 -0
- data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -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 +104 -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 +524 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -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 +226 -0
- data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
- data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
- data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -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 +275 -0
- data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -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 +654 -0
- data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
- data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
- data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
- data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
- data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
- data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
- data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
- data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
- data/ext/libcouchbase/tests/iotests/testutil.cc +250 -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 +347 -0
- data/ext/libcouchbase/tests/socktests/socktest.h +448 -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 +179 -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/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/terse_25.json +291 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
- data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
- data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
- data/ext/libcouchbase/tools/cbc.cc +1541 -0
- data/ext/libcouchbase/tools/common/histogram.cc +43 -0
- data/ext/libcouchbase/tools/common/histogram.h +23 -0
- data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
- data/ext/libcouchbase/tools/common/options.cc +420 -0
- data/ext/libcouchbase/tools/common/options.h +81 -0
- data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
- data/ext/libcouchbase/tools/docgen/loc.h +210 -0
- data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
- data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
- data/lib/libcouchbase.rb +36 -0
- data/lib/libcouchbase/bucket.rb +819 -0
- data/lib/libcouchbase/callbacks.rb +72 -0
- data/lib/libcouchbase/connection.rb +790 -0
- data/lib/libcouchbase/design_docs.rb +86 -0
- data/lib/libcouchbase/error.rb +68 -0
- data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
- data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
- data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
- data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
- data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
- data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
- data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
- data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
- data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
- data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
- data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
- data/lib/libcouchbase/ext/tasks.rb +87 -0
- data/lib/libcouchbase/n1ql.rb +73 -0
- data/lib/libcouchbase/query_full_text.rb +147 -0
- data/lib/libcouchbase/query_n1ql.rb +121 -0
- data/lib/libcouchbase/query_view.rb +129 -0
- data/lib/libcouchbase/results_fiber.rb +262 -0
- data/lib/libcouchbase/results_native.rb +211 -0
- data/lib/libcouchbase/version.rb +5 -0
- data/libcouchbase.gemspec +61 -0
- data/spec/bucket_spec.rb +270 -0
- data/spec/connection_spec.rb +277 -0
- data/spec/design_docs_spec.rb +23 -0
- data/spec/error_spec.rb +26 -0
- data/spec/fts_spec.rb +129 -0
- data/spec/n1ql_spec.rb +201 -0
- data/spec/results_libuv_spec.rb +229 -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/view_spec.rb +195 -0
- metadata +775 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2013 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef LIBCOUCHBASE_SELECT_IO_OPTS_H
|
|
19
|
+
#define LIBCOUCHBASE_SELECT_IO_OPTS_H 1
|
|
20
|
+
|
|
21
|
+
#include <libcouchbase/couchbase.h>
|
|
22
|
+
|
|
23
|
+
#ifdef __cplusplus
|
|
24
|
+
extern "C" {
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Create an instance of an event handler that utilize libev for
|
|
29
|
+
* event notification.
|
|
30
|
+
*
|
|
31
|
+
* @return status of the operation
|
|
32
|
+
*/
|
|
33
|
+
LIBCOUCHBASE_API
|
|
34
|
+
lcb_error_t lcb_create_select_io_opts(int version, lcb_io_opt_t *io, void *loop);
|
|
35
|
+
#ifdef __cplusplus
|
|
36
|
+
}
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
#endif
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Internal source code structure
|
|
2
|
+
|
|
3
|
+
This directory contains the source code for libcouchbase. Here is a brief
|
|
4
|
+
listing of the various subcomponents and what they do:
|
|
5
|
+
|
|
6
|
+
* `internal.h` contains the top level internal declarations.
|
|
7
|
+
|
|
8
|
+
* `config_static.h` contains statically inferred (via macros) platform information.
|
|
9
|
+
|
|
10
|
+
* `instance.c` contains functions related to creating and destroying the actual
|
|
11
|
+
`lcb_t` handle. It also contains some convenience functions.
|
|
12
|
+
|
|
13
|
+
* `bootstrap.{c,h}` contains the top-level logic for _retrieving_ the cluster
|
|
14
|
+
configuration
|
|
15
|
+
|
|
16
|
+
* `newconfig.c` contains the logic for _applying_ a new configuration
|
|
17
|
+
|
|
18
|
+
* `bucketconfig/*` is a directory which contains the low level transport logic used
|
|
19
|
+
to retrieve a new configuration
|
|
20
|
+
|
|
21
|
+
* `callbacks.c` contains the functions used to implement the library's `set_callback`
|
|
22
|
+
accessor functions.
|
|
23
|
+
|
|
24
|
+
* `operations/*` is a directory which contains the top level entry points for memcached
|
|
25
|
+
requests
|
|
26
|
+
|
|
27
|
+
* `handler.c` contains the response handlers for memcached.
|
|
28
|
+
|
|
29
|
+
* `getconfig.c` contains the implementation for requesting a config from an existing
|
|
30
|
+
server.
|
|
31
|
+
|
|
32
|
+
* `connspec.{c,h}` contains the connection string parsing logic
|
|
33
|
+
|
|
34
|
+
* `cntl.c` contains the handlers for the `lcb_cntl()` family of functions
|
|
35
|
+
|
|
36
|
+
* `dump.c` contains the handlers for the `lcb_dump()` function
|
|
37
|
+
|
|
38
|
+
* `gethrtime.c` contains platform-dependent implementations of a nanosecond timer
|
|
39
|
+
|
|
40
|
+
* `hashset.{c,h}` contains the implementation for a set (unique collection of pointers)
|
|
41
|
+
|
|
42
|
+
* `list.{c,h}` contains the implementation for a double-linked list
|
|
43
|
+
|
|
44
|
+
* `sllist.h, sllist-inl.h` contain the implementation for a single-linked list
|
|
45
|
+
|
|
46
|
+
* `simplestring.{c,h}` contains the implementation for a dynamically sized string
|
|
47
|
+
|
|
48
|
+
* `logging.{c,h}` contains the implementation for the library's logging mechanism
|
|
49
|
+
|
|
50
|
+
* `hostlist.{c,h}` defines a list of hosts, with features for de-duping and converting
|
|
51
|
+
to other structures
|
|
52
|
+
|
|
53
|
+
* `nodeinfo.c` contains the implementation for the `lcb_get_node()` function.
|
|
54
|
+
|
|
55
|
+
* `packetutils.{c,h}` contains utilities and macros for handling partial memcached
|
|
56
|
+
response packets
|
|
57
|
+
|
|
58
|
+
* `wait.c` contains the implementation of `lcb_wait()`
|
|
59
|
+
|
|
60
|
+
* `timings.c` contains the implementation of `lcb_get_timings()`
|
|
61
|
+
|
|
62
|
+
* `trace.h` contains macros for DTrace functionality
|
|
63
|
+
|
|
64
|
+
* `utilities.c` contains cross-platform utilities (such as temporary directory,
|
|
65
|
+
getting environment variables)
|
|
66
|
+
|
|
67
|
+
* `iofactory.c` contains the plugin intialization/loading functionality for I/O
|
|
68
|
+
plugins
|
|
69
|
+
|
|
70
|
+
* `retrychk.c` contains logic which determines if a rety is necessary under certain
|
|
71
|
+
conditions
|
|
72
|
+
|
|
73
|
+
* `retryq.{c,h}` contains an internal retried operations, and are placed there if they
|
|
74
|
+
are eligible for retries.
|
|
75
|
+
|
|
76
|
+
* `aspend.h` contains definitions for pending operations which are meant to block
|
|
77
|
+
calls to `lcb_wait()` (implementation in instance.c)
|
|
78
|
+
|
|
79
|
+
* `lcbio/*` is a directory which contains the cross platform/cross model IO
|
|
80
|
+
implementation. Most I/O is done in this subdirectory
|
|
81
|
+
|
|
82
|
+
* `http/*` contains the API implementation for user-level HTTP requests
|
|
83
|
+
|
|
84
|
+
* `lcbht/*` contains an HTTP response parsing API/implementation
|
|
85
|
+
|
|
86
|
+
* `mc/*` contains the memcached/Couchbase structure and packet/buffer allocation
|
|
87
|
+
and scheduling logic.
|
|
88
|
+
|
|
89
|
+
* `mcserver/*` contains the operation/failure/IO logic for memcached connections
|
|
90
|
+
|
|
91
|
+
* `vbucket/*` contains the raw vBucket config parsing and hashing/mapping implementation
|
|
92
|
+
(formerly known as "libvbucket")
|
|
93
|
+
|
|
94
|
+
* `rdb/*` contains an extensible pooled read buffer implementation
|
|
95
|
+
|
|
96
|
+
* `netbuf/*` contains an extensible high performance output buffer implementation
|
|
97
|
+
|
|
98
|
+
* `rigbuffer.{c,h}` contains a circular buffer implementation.
|
|
99
|
+
|
|
100
|
+
* `ssl/*` contains the OpenSSL interfacing routines
|
|
101
|
+
|
|
102
|
+
* `strcodecs/*` contains utility functions to encode/decode strings to/from
|
|
103
|
+
various formats.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2014 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef LCB_ASPEND_H
|
|
19
|
+
#define LCB_ASPEND_H
|
|
20
|
+
|
|
21
|
+
#include "config.h"
|
|
22
|
+
#include "hashset.h"
|
|
23
|
+
#ifdef __cplusplus
|
|
24
|
+
extern "C" {
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @page Asynchronous Pending Queue
|
|
29
|
+
*
|
|
30
|
+
* This defines the API for asynchronous requests which should block calls to
|
|
31
|
+
* lcb_wait() or similar. This is a replacement for the explicit hashsets used
|
|
32
|
+
* in lcb_t.
|
|
33
|
+
*
|
|
34
|
+
* Items are added to the pending queue via lcb_aspend_add(). They may be
|
|
35
|
+
* removed either explicitly via lcb_aspend_del() or implicitly when the
|
|
36
|
+
* instance is destroyed.
|
|
37
|
+
*
|
|
38
|
+
* An exception to this rule is the special LCB_PENDTYPE_COUNTER which does
|
|
39
|
+
* not associate a specific pointer with it.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/** Pending item type */
|
|
43
|
+
typedef enum {
|
|
44
|
+
LCB_PENDTYPE_TIMER = 0, /**< item is of type lcb_timer_t */
|
|
45
|
+
LCB_PENDTYPE_HTTP, /**< item is of type lcb_http_request_t */
|
|
46
|
+
LCB_PENDTYPE_DURABILITY, /**< item is of type lcb_durability_set_t */
|
|
47
|
+
LCB_PENDTYPE_COUNTER, /**< just increment/decrement the counter */
|
|
48
|
+
LCB_PENDTYPE_MAX
|
|
49
|
+
} lcb_ASPENDTYPE;
|
|
50
|
+
|
|
51
|
+
/** Items for pending operations */
|
|
52
|
+
typedef struct {
|
|
53
|
+
hashset_t items[LCB_PENDTYPE_MAX];
|
|
54
|
+
unsigned count;
|
|
55
|
+
} lcb_ASPEND;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Initialize the pending queues
|
|
59
|
+
* @param ops
|
|
60
|
+
*/
|
|
61
|
+
void lcb_aspend_init(lcb_ASPEND *ops);
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Clean up any resources used by the pending queues
|
|
65
|
+
* @param ops
|
|
66
|
+
*/
|
|
67
|
+
void lcb_aspend_cleanup(lcb_ASPEND *ops);
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Add an opaque pointer of a given type to a pending queue
|
|
71
|
+
* @param ops
|
|
72
|
+
* @param type The type of pointer to add
|
|
73
|
+
* @param item The item to add
|
|
74
|
+
*/
|
|
75
|
+
void lcb_aspend_add(lcb_ASPEND *ops, lcb_ASPENDTYPE type, const void *item);
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Remove an item from the queue and decrement the pending count
|
|
79
|
+
* @param ops
|
|
80
|
+
* @param type The type of item to remove
|
|
81
|
+
* @param item The item to remove
|
|
82
|
+
*
|
|
83
|
+
* @attention If the item is not found inside the queue then the count is
|
|
84
|
+
* _not_ decremented. An exception to this rule is the LCB_PENDTYPE_COUNTER
|
|
85
|
+
* type which does not have a pointer associated with it. In this case the
|
|
86
|
+
* counter is always decremented.
|
|
87
|
+
*/
|
|
88
|
+
void lcb_aspend_del(lcb_ASPEND *ops, lcb_ASPENDTYPE type, const void *item);
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Get a queue for a given type
|
|
92
|
+
* @param ops
|
|
93
|
+
* @param type
|
|
94
|
+
*/
|
|
95
|
+
#define lcb_aspend_get(ops, type) (ops)->items[type]
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Determine whether there are pending items in any of the queues
|
|
99
|
+
* @param ops
|
|
100
|
+
*/
|
|
101
|
+
#define lcb_aspend_pending(ops) ((ops)->count > 0)
|
|
102
|
+
|
|
103
|
+
#ifdef __cplusplus
|
|
104
|
+
}
|
|
105
|
+
#endif
|
|
106
|
+
#endif
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#include <libcouchbase/couchbase.h>
|
|
2
|
+
#include "auth.h"
|
|
3
|
+
|
|
4
|
+
using namespace lcb;
|
|
5
|
+
|
|
6
|
+
lcb_AUTHENTICATOR *
|
|
7
|
+
lcbauth_new()
|
|
8
|
+
{
|
|
9
|
+
return new Authenticator();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
void
|
|
13
|
+
lcbauth_free(lcb_AUTHENTICATOR *auth)
|
|
14
|
+
{
|
|
15
|
+
delete auth;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const char *
|
|
19
|
+
lcbauth_get_bpass(const lcb_AUTHENTICATOR *auth, const char *u)
|
|
20
|
+
{
|
|
21
|
+
Authenticator::Map::const_iterator ii = auth->m_buckets.find(u);
|
|
22
|
+
if (ii == auth->m_buckets.end()) {
|
|
23
|
+
return NULL;
|
|
24
|
+
}
|
|
25
|
+
return ii->second.c_str();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
void
|
|
29
|
+
lcbauth_set(lcb_AUTHENTICATOR *auth, const char *u, const char *p,
|
|
30
|
+
int is_global)
|
|
31
|
+
{
|
|
32
|
+
if (is_global) {
|
|
33
|
+
auth->m_username = u;
|
|
34
|
+
auth->m_password = p;
|
|
35
|
+
} else {
|
|
36
|
+
auth->m_buckets[u] = p;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
void
|
|
41
|
+
lcb_authenticator_clear(lcb_AUTHENTICATOR *auth)
|
|
42
|
+
{
|
|
43
|
+
auth->m_buckets.clear();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
void
|
|
47
|
+
lcbauth_get_upass(const lcb_AUTHENTICATOR *auth, const char **u, const char **p)
|
|
48
|
+
{
|
|
49
|
+
if (!auth->m_username.empty()) {
|
|
50
|
+
*u = auth->m_username.c_str();
|
|
51
|
+
} else {
|
|
52
|
+
*u = NULL;
|
|
53
|
+
}
|
|
54
|
+
if (!auth->m_password.empty()) {
|
|
55
|
+
*p = auth->m_password.c_str();
|
|
56
|
+
} else {
|
|
57
|
+
*p = NULL;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
lcb_error_t
|
|
62
|
+
Authenticator::init(const std::string& username_, const std::string& bucket,
|
|
63
|
+
const std::string& passwd, lcb_type_t conntype)
|
|
64
|
+
{
|
|
65
|
+
m_username = (!username_.empty()) ? username_ : bucket;
|
|
66
|
+
m_password = passwd;
|
|
67
|
+
|
|
68
|
+
if (conntype == LCB_TYPE_BUCKET && m_username != bucket) {
|
|
69
|
+
return LCB_INVALID_USERNAME;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
m_buckets[bucket] = m_password;
|
|
73
|
+
return LCB_SUCCESS;
|
|
74
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#ifndef LCB_AUTH_H
|
|
2
|
+
#define LCB_AUTH_H
|
|
3
|
+
|
|
4
|
+
#ifdef __cplusplus
|
|
5
|
+
#include <map>
|
|
6
|
+
#include <string>
|
|
7
|
+
namespace lcb { class Authenticator; }
|
|
8
|
+
typedef lcb::Authenticator lcb_AUTHENTICATOR;
|
|
9
|
+
extern "C" {
|
|
10
|
+
#else /* C only! */
|
|
11
|
+
typedef struct lcb_AUTHENTICATOR_Cdummy lcb_AUTHENTICATOR;
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
lcb_AUTHENTICATOR *
|
|
15
|
+
lcbauth_new(void);
|
|
16
|
+
|
|
17
|
+
void
|
|
18
|
+
lcbauth_free(lcb_AUTHENTICATOR *);
|
|
19
|
+
|
|
20
|
+
const char *
|
|
21
|
+
lcbauth_get_bpass(const lcb_AUTHENTICATOR *auth, const char *name);
|
|
22
|
+
|
|
23
|
+
void
|
|
24
|
+
lcbauth_set(lcb_AUTHENTICATOR *auth,
|
|
25
|
+
const char *user, const char *pass, int is_global);
|
|
26
|
+
|
|
27
|
+
void
|
|
28
|
+
lcb_authenticator_clear(lcb_AUTHENTICATOR *auth);
|
|
29
|
+
|
|
30
|
+
void
|
|
31
|
+
lcbauth_get_upass(const lcb_AUTHENTICATOR *auth,
|
|
32
|
+
const char **u, const char **p);
|
|
33
|
+
|
|
34
|
+
#ifdef __cplusplus
|
|
35
|
+
}
|
|
36
|
+
namespace lcb {
|
|
37
|
+
class Authenticator {
|
|
38
|
+
public:
|
|
39
|
+
typedef std::map<std::string,std::string> Map;
|
|
40
|
+
const std::string& username() const { return m_username; }
|
|
41
|
+
const std::string& password() const { return m_password; }
|
|
42
|
+
const Map& buckets() const { return m_buckets; }
|
|
43
|
+
|
|
44
|
+
// todo: refactor these out
|
|
45
|
+
Map m_buckets;
|
|
46
|
+
std::string m_username;
|
|
47
|
+
std::string m_password;
|
|
48
|
+
|
|
49
|
+
lcb_error_t init(const std::string& username_, const std::string& bucket,
|
|
50
|
+
const std::string& password, lcb_type_t conntype);
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
#endif
|
|
54
|
+
#endif /* LCB_AUTH_H */
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2014 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#define LCB_BOOTSTRAP_DEFINE_STRUCT 1
|
|
19
|
+
#include "internal.h"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
#define LOGARGS(instance, lvl) instance->settings, "bootstrap", LCB_LOG_##lvl, __FILE__, __LINE__
|
|
23
|
+
|
|
24
|
+
static void async_step_callback(clconfig_listener*,clconfig_event_t,clconfig_info*);
|
|
25
|
+
static void initial_bootstrap_error(lcb_t, lcb_error_t,const char*);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* This function is where the configuration actually takes place. We ensure
|
|
29
|
+
* in other functions that this is only ever called directly from an event
|
|
30
|
+
* loop stack frame (or one of the small mini functions here) so that we
|
|
31
|
+
* don't accidentally end up destroying resources underneath us.
|
|
32
|
+
*/
|
|
33
|
+
static void
|
|
34
|
+
config_callback(clconfig_listener *listener, clconfig_event_t event,
|
|
35
|
+
clconfig_info *info)
|
|
36
|
+
{
|
|
37
|
+
struct lcb_BOOTSTRAP *bs = (struct lcb_BOOTSTRAP *)listener;
|
|
38
|
+
lcb_t instance = bs->parent;
|
|
39
|
+
|
|
40
|
+
if (event != CLCONFIG_EVENT_GOT_NEW_CONFIG) {
|
|
41
|
+
if (event == CLCONFIG_EVENT_PROVIDERS_CYCLED) {
|
|
42
|
+
if (!LCBT_VBCONFIG(instance)) {
|
|
43
|
+
initial_bootstrap_error(
|
|
44
|
+
instance, LCB_ERROR, "No more bootstrap providers remain");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
instance->last_error = LCB_SUCCESS;
|
|
51
|
+
/** Ensure we're not called directly twice again */
|
|
52
|
+
listener->callback = async_step_callback;
|
|
53
|
+
lcbio_timer_disarm(bs->tm);
|
|
54
|
+
|
|
55
|
+
lcb_log(LOGARGS(instance, DEBUG), "Instance configured!");
|
|
56
|
+
|
|
57
|
+
if (info->origin != LCB_CLCONFIG_FILE) {
|
|
58
|
+
/* Set the timestamp for the current config to control throttling,
|
|
59
|
+
* but only if it's not an initial file-based config. See CCBC-482 */
|
|
60
|
+
bs->last_refresh = gethrtime();
|
|
61
|
+
bs->errcounter = 0;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (info->origin == LCB_CLCONFIG_CCCP) {
|
|
65
|
+
/* Disable HTTP provider if we've received something via CCCP */
|
|
66
|
+
|
|
67
|
+
if (instance->cur_configinfo == NULL ||
|
|
68
|
+
instance->cur_configinfo->origin != LCB_CLCONFIG_HTTP) {
|
|
69
|
+
/* Never disable HTTP if it's still being used */
|
|
70
|
+
lcb_confmon_set_provider_active(
|
|
71
|
+
instance->confmon, LCB_CLCONFIG_HTTP, 0);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (instance->type != LCB_TYPE_CLUSTER) {
|
|
76
|
+
lcb_update_vbconfig(instance, info);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (!bs->bootstrapped) {
|
|
80
|
+
bs->bootstrapped = 1;
|
|
81
|
+
lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_COUNTER, NULL);
|
|
82
|
+
|
|
83
|
+
if (instance->type == LCB_TYPE_BUCKET &&
|
|
84
|
+
LCBVB_DISTTYPE(LCBT_VBCONFIG(instance)) == LCBVB_DIST_KETAMA &&
|
|
85
|
+
instance->cur_configinfo->origin != LCB_CLCONFIG_MCRAW) {
|
|
86
|
+
|
|
87
|
+
lcb_log(LOGARGS(instance, INFO), "Reverting to HTTP Config for memcached buckets");
|
|
88
|
+
instance->settings->bc_http_stream_time = -1;
|
|
89
|
+
lcb_confmon_set_provider_active(
|
|
90
|
+
instance->confmon, LCB_CLCONFIG_HTTP, 1);
|
|
91
|
+
lcb_confmon_set_provider_active(
|
|
92
|
+
instance->confmon, LCB_CLCONFIG_CCCP, 0);
|
|
93
|
+
}
|
|
94
|
+
instance->callbacks.bootstrap(instance, LCB_SUCCESS);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
lcb_maybe_breakout(instance);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
static void
|
|
102
|
+
initial_bootstrap_error(lcb_t instance, lcb_error_t err, const char *errinfo)
|
|
103
|
+
{
|
|
104
|
+
struct lcb_BOOTSTRAP *bs = instance->bootstrap;
|
|
105
|
+
|
|
106
|
+
instance->last_error = lcb_confmon_last_error(instance->confmon);
|
|
107
|
+
if (instance->last_error == LCB_SUCCESS) {
|
|
108
|
+
instance->last_error = err;
|
|
109
|
+
}
|
|
110
|
+
instance->callbacks.error(instance, instance->last_error, errinfo);
|
|
111
|
+
lcb_log(LOGARGS(instance, ERR), "Failed to bootstrap client=%p. Code=0x%x, Message=%s", (void *)instance, err, errinfo);
|
|
112
|
+
lcbio_timer_disarm(bs->tm);
|
|
113
|
+
|
|
114
|
+
instance->callbacks.bootstrap(instance, instance->last_error);
|
|
115
|
+
|
|
116
|
+
lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_COUNTER, NULL);
|
|
117
|
+
lcb_maybe_breakout(instance);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* This it the initial bootstrap timeout handler. This timeout pins down the
|
|
122
|
+
* instance. It is only scheduled during the initial bootstrap and is only
|
|
123
|
+
* triggered if the initial bootstrap fails to configure in time.
|
|
124
|
+
*/
|
|
125
|
+
static void initial_timeout(void *arg)
|
|
126
|
+
{
|
|
127
|
+
struct lcb_BOOTSTRAP *bs = arg;
|
|
128
|
+
initial_bootstrap_error(bs->parent, LCB_ETIMEDOUT, "Failed to bootstrap in time");
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Proxy async call to config_callback
|
|
133
|
+
*/
|
|
134
|
+
static void async_refresh(void *arg)
|
|
135
|
+
{
|
|
136
|
+
/** Get the best configuration and run stuff.. */
|
|
137
|
+
struct lcb_BOOTSTRAP *bs = arg;
|
|
138
|
+
clconfig_info *info;
|
|
139
|
+
|
|
140
|
+
info = lcb_confmon_get_config(bs->parent->confmon);
|
|
141
|
+
config_callback(&bs->listener, CLCONFIG_EVENT_GOT_NEW_CONFIG, info);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* set_next listener callback which schedules an async call to our config
|
|
146
|
+
* callback.
|
|
147
|
+
*/
|
|
148
|
+
static void
|
|
149
|
+
async_step_callback(clconfig_listener *listener, clconfig_event_t event,
|
|
150
|
+
clconfig_info *info)
|
|
151
|
+
{
|
|
152
|
+
struct lcb_BOOTSTRAP *bs = (struct lcb_BOOTSTRAP *)listener;
|
|
153
|
+
|
|
154
|
+
if (event != CLCONFIG_EVENT_GOT_NEW_CONFIG) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (lcbio_timer_armed(bs->tm) && lcbio_timer_get_target(bs->tm) == async_refresh) {
|
|
159
|
+
lcb_log(LOGARGS(bs->parent, DEBUG), "Timer already present..");
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
lcb_log(LOGARGS(bs->parent, INFO), "Got async step callback..");
|
|
164
|
+
lcbio_timer_set_target(bs->tm, async_refresh);
|
|
165
|
+
lcbio_async_signal(bs->tm);
|
|
166
|
+
(void)info;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
lcb_error_t
|
|
170
|
+
lcb_bootstrap_common(lcb_t instance, int options)
|
|
171
|
+
{
|
|
172
|
+
struct lcb_BOOTSTRAP *bs = instance->bootstrap;
|
|
173
|
+
hrtime_t now = gethrtime();
|
|
174
|
+
|
|
175
|
+
if (!bs) {
|
|
176
|
+
bs = calloc(1, sizeof(*instance->bootstrap));
|
|
177
|
+
if (!bs) {
|
|
178
|
+
return LCB_CLIENT_ENOMEM;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
bs->tm = lcbio_timer_new(instance->iotable, bs, initial_timeout);
|
|
182
|
+
instance->bootstrap = bs;
|
|
183
|
+
bs->parent = instance;
|
|
184
|
+
lcb_confmon_add_listener(instance->confmon, &bs->listener);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (lcb_confmon_is_refreshing(instance->confmon)) {
|
|
188
|
+
return LCB_SUCCESS;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (options & LCB_BS_REFRESH_THROTTLE) {
|
|
192
|
+
/* Refresh throttle requested. This is not true if options == ALWAYS */
|
|
193
|
+
hrtime_t next_ts;
|
|
194
|
+
unsigned errthresh = LCBT_SETTING(instance, weird_things_threshold);
|
|
195
|
+
|
|
196
|
+
if (options & LCB_BS_REFRESH_INCRERR) {
|
|
197
|
+
bs->errcounter++;
|
|
198
|
+
}
|
|
199
|
+
next_ts = bs->last_refresh;
|
|
200
|
+
next_ts += LCB_US2NS(LCBT_SETTING(instance, weird_things_delay));
|
|
201
|
+
if (now < next_ts && bs->errcounter < errthresh) {
|
|
202
|
+
lcb_log(LOGARGS(instance, INFO),
|
|
203
|
+
"Not requesting a config refresh because of throttling parameters. Next refresh possible in %ums or %u errors. "
|
|
204
|
+
"See LCB_CNTL_CONFDELAY_THRESH and LCB_CNTL_CONFERRTHRESH to modify the throttling settings",
|
|
205
|
+
LCB_NS2US(next_ts-now)/1000, (unsigned)errthresh-bs->errcounter);
|
|
206
|
+
return LCB_SUCCESS;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (options == LCB_BS_REFRESH_INITIAL) {
|
|
211
|
+
lcb_confmon_prepare(instance->confmon);
|
|
212
|
+
|
|
213
|
+
bs->listener.callback = config_callback;
|
|
214
|
+
lcbio_timer_set_target(bs->tm, initial_timeout);
|
|
215
|
+
lcbio_timer_rearm(bs->tm, LCBT_SETTING(instance, config_timeout));
|
|
216
|
+
lcb_aspend_add(&instance->pendops, LCB_PENDTYPE_COUNTER, NULL);
|
|
217
|
+
} else {
|
|
218
|
+
/** No initial timer */
|
|
219
|
+
bs->listener.callback = async_step_callback;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* Reset the counters */
|
|
223
|
+
bs->errcounter = 0;
|
|
224
|
+
if (options != LCB_BS_REFRESH_INITIAL) {
|
|
225
|
+
bs->last_refresh = now;
|
|
226
|
+
}
|
|
227
|
+
return lcb_confmon_start(instance->confmon);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
void lcb_bootstrap_destroy(lcb_t instance)
|
|
231
|
+
{
|
|
232
|
+
struct lcb_BOOTSTRAP *bs = instance->bootstrap;
|
|
233
|
+
if (!bs) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (bs->tm) {
|
|
237
|
+
lcbio_timer_destroy(bs->tm);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
lcb_confmon_remove_listener(instance->confmon, &bs->listener);
|
|
241
|
+
free(bs);
|
|
242
|
+
instance->bootstrap = NULL;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
LIBCOUCHBASE_API
|
|
246
|
+
lcb_error_t
|
|
247
|
+
lcb_get_bootstrap_status(lcb_t instance)
|
|
248
|
+
{
|
|
249
|
+
if (instance->cur_configinfo) {
|
|
250
|
+
return LCB_SUCCESS;
|
|
251
|
+
}
|
|
252
|
+
if (instance->last_error != LCB_SUCCESS) {
|
|
253
|
+
return instance->last_error;
|
|
254
|
+
}
|
|
255
|
+
if (instance->type == LCB_TYPE_CLUSTER) {
|
|
256
|
+
lcbio_SOCKET *restconn = lcb_confmon_get_rest_connection(instance->confmon);
|
|
257
|
+
if (restconn) {
|
|
258
|
+
return LCB_SUCCESS;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return LCB_ERROR;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
LIBCOUCHBASE_API
|
|
265
|
+
void
|
|
266
|
+
lcb_refresh_config(lcb_t instance)
|
|
267
|
+
{
|
|
268
|
+
lcb_bootstrap_common(instance, LCB_BS_REFRESH_ALWAYS);
|
|
269
|
+
}
|