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,129 @@
|
|
|
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_BOOTSTRAP_H
|
|
19
|
+
#define LCB_BOOTSTRAP_H
|
|
20
|
+
#ifdef __cplusplus
|
|
21
|
+
extern "C" {
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
/**@file
|
|
25
|
+
* Core bootstrap/cluster configuration routines */
|
|
26
|
+
|
|
27
|
+
/**@defgroup lcb_bootstrap Bootstrap Routines
|
|
28
|
+
* @addtogroup lcb_bootstrap
|
|
29
|
+
* @{
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
#if defined(__LCB_DOXYGEN__) || defined(LCB_BOOTSTRAP_DEFINE_STRUCT)
|
|
33
|
+
#include "bucketconfig/clconfig.h"
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Structure containing the bootstrap state for the instance.
|
|
37
|
+
*/
|
|
38
|
+
struct lcb_BOOTSTRAP {
|
|
39
|
+
/**Listener object used to react when a new configuration is received. This
|
|
40
|
+
* is used for both requested configurations (i.e. an explicit call to
|
|
41
|
+
* lcb_bootstrap_common()) as well as unsolicited updates such as
|
|
42
|
+
* HTTP streaming configurations or Not-My-Vbucket "Carrier" updates.
|
|
43
|
+
*/
|
|
44
|
+
clconfig_listener listener;
|
|
45
|
+
|
|
46
|
+
lcb_t parent;
|
|
47
|
+
|
|
48
|
+
/**Timer used for initial bootstrap as an interval timer, and for subsequent
|
|
49
|
+
* updates as an asynchronous event (to allow safe updates and avoid
|
|
50
|
+
* reentrancy issues)
|
|
51
|
+
*/
|
|
52
|
+
lcbio_pTIMER tm;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Timestamp indicating the most recent configuration activity. This
|
|
56
|
+
* timestamp is used to control throttling, such that the @ref
|
|
57
|
+
* LCB_CNTL_CONFDELAY_THRESH setting is applied as an offset to this
|
|
58
|
+
* timestamp (accounting for ns-to-us conversion). This flag is set whenever
|
|
59
|
+
*
|
|
60
|
+
* * A new configuration is received (solicited or unsolicited)
|
|
61
|
+
* * A request for a new configuration is made, and the request has not
|
|
62
|
+
* been throttled
|
|
63
|
+
*/
|
|
64
|
+
hrtime_t last_refresh;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Counter incremented each time a request is based to lcb_bootstrap_common()
|
|
68
|
+
* with the @ref LCB_BS_REFRESH_INCRERR flag, and where the request itself
|
|
69
|
+
* had been throttled. This increments the internal error counter and when
|
|
70
|
+
* the counter reaches a threshold higher than @ref LCB_CNTL_CONFERRTHRESH
|
|
71
|
+
* a new configuration is requested.
|
|
72
|
+
* This counter is cleared whenever a new configuration arrives.
|
|
73
|
+
*/
|
|
74
|
+
unsigned errcounter;
|
|
75
|
+
|
|
76
|
+
/** Flag indicating whether the _initial_ configuration has been received */
|
|
77
|
+
int bootstrapped;
|
|
78
|
+
};
|
|
79
|
+
#endif
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* These flags control the bootstrap refreshing mode that will take place
|
|
83
|
+
* when lcb_bootstrap_common() is invoked. These options may be OR'd with
|
|
84
|
+
* each other (with the exception of ::LCB_BS_REFRESH_ALWAYS).
|
|
85
|
+
*/
|
|
86
|
+
typedef enum {
|
|
87
|
+
/** Always fetch a new configuration. No throttling checks are performed */
|
|
88
|
+
LCB_BS_REFRESH_ALWAYS = 0x00,
|
|
89
|
+
/** Special mode used to fetch the first configuration */
|
|
90
|
+
LCB_BS_REFRESH_INITIAL = 0x02,
|
|
91
|
+
|
|
92
|
+
/** Make the request for a new configuration subject to throttling
|
|
93
|
+
* limitations. Currently this will be subject to the interval specified
|
|
94
|
+
* in the @ref LCB_CNTL_CONFDELAY_THRESH setting and the @ref
|
|
95
|
+
* LCB_CNTL_CONFERRTHRESH setting. If the refresh has been throttled
|
|
96
|
+
* the lcb_confmon_is_refreshing() function will return false */
|
|
97
|
+
LCB_BS_REFRESH_THROTTLE = 0x04,
|
|
98
|
+
|
|
99
|
+
/** To be used in conjunction with ::LCB_BS_REFRESH_THROTTLE, this will
|
|
100
|
+
* increment the error counter in case the current refresh is throttled,
|
|
101
|
+
* such that when the error counter reaches the threshold, the throttle
|
|
102
|
+
* limitations will expire and a new refresh will take place */
|
|
103
|
+
LCB_BS_REFRESH_INCRERR = 0x08
|
|
104
|
+
} lcb_BSFLAGS;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @brief Request that the handle update its configuration.
|
|
108
|
+
*
|
|
109
|
+
* This function acts as a gateway to the more abstract confmon interface.
|
|
110
|
+
*
|
|
111
|
+
* @param instance The instance
|
|
112
|
+
* @param options A set of options specified as flags, indicating under what
|
|
113
|
+
* conditions a new configuration should be refetched.
|
|
114
|
+
*
|
|
115
|
+
* @return
|
|
116
|
+
*/
|
|
117
|
+
LCB_INTERNAL_API
|
|
118
|
+
lcb_error_t
|
|
119
|
+
lcb_bootstrap_common(lcb_t instance, int options);
|
|
120
|
+
|
|
121
|
+
void
|
|
122
|
+
lcb_bootstrap_destroy(lcb_t instance);
|
|
123
|
+
|
|
124
|
+
/**@}*/
|
|
125
|
+
|
|
126
|
+
#ifdef __cplusplus
|
|
127
|
+
}
|
|
128
|
+
#endif
|
|
129
|
+
#endif /* LCB_BOOTSTRAP_H */
|
|
@@ -0,0 +1,495 @@
|
|
|
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
|
+
/**
|
|
19
|
+
* This file contains the CCCP (Cluster Carrier Configuration Protocol)
|
|
20
|
+
* implementation of the confmon provider. It utilizes a memcached connection
|
|
21
|
+
* to retrieve configuration information.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#include "internal.h"
|
|
25
|
+
#include "clconfig.h"
|
|
26
|
+
#include "packetutils.h"
|
|
27
|
+
#include "simplestring.h"
|
|
28
|
+
#include <mcserver/negotiate.h>
|
|
29
|
+
#include <lcbio/lcbio.h>
|
|
30
|
+
#include <lcbio/timer-ng.h>
|
|
31
|
+
#include <lcbio/ssl.h>
|
|
32
|
+
#include "ctx-log-inl.h"
|
|
33
|
+
#define LOGARGS(cccp, lvl) cccp->base.parent->settings, "cccp", LCB_LOG_##lvl, __FILE__, __LINE__
|
|
34
|
+
#define LOGFMT "<%s:%s> "
|
|
35
|
+
#define LOGID(cccp) get_ctx_host(cccp->ioctx), get_ctx_port(cccp->ioctx)
|
|
36
|
+
|
|
37
|
+
struct cccp_cookie_st;
|
|
38
|
+
|
|
39
|
+
typedef struct {
|
|
40
|
+
clconfig_provider base;
|
|
41
|
+
hostlist_t nodes;
|
|
42
|
+
clconfig_info *config;
|
|
43
|
+
int server_active;
|
|
44
|
+
int disabled;
|
|
45
|
+
lcbio_pTIMER timer;
|
|
46
|
+
lcb_t instance;
|
|
47
|
+
lcbio_CONNREQ creq;
|
|
48
|
+
lcbio_CTX *ioctx;
|
|
49
|
+
struct cccp_cookie_st *cmdcookie;
|
|
50
|
+
} cccp_provider;
|
|
51
|
+
|
|
52
|
+
typedef struct cccp_cookie_st {
|
|
53
|
+
/** Parent object */
|
|
54
|
+
cccp_provider *parent;
|
|
55
|
+
|
|
56
|
+
/** Whether to ignore errors on this cookie object */
|
|
57
|
+
int ignore_errors;
|
|
58
|
+
} cccp_cookie;
|
|
59
|
+
|
|
60
|
+
static void io_error_handler(lcbio_CTX *, lcb_error_t);
|
|
61
|
+
static void io_read_handler(lcbio_CTX *, unsigned nr);
|
|
62
|
+
static void request_config(cccp_provider *);
|
|
63
|
+
static void on_connected(lcbio_SOCKET *, void*, lcb_error_t, lcbio_OSERR);
|
|
64
|
+
|
|
65
|
+
static void
|
|
66
|
+
pooled_close_cb(lcbio_SOCKET *sock, int reusable, void *arg)
|
|
67
|
+
{
|
|
68
|
+
int *ru_ex = arg;
|
|
69
|
+
lcbio_ref(sock);
|
|
70
|
+
if (reusable && *ru_ex) {
|
|
71
|
+
lcbio_mgr_put(sock);
|
|
72
|
+
} else {
|
|
73
|
+
lcbio_mgr_discard(sock);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
static void release_socket(cccp_provider *cccp, int can_reuse)
|
|
78
|
+
{
|
|
79
|
+
if (cccp->cmdcookie) {
|
|
80
|
+
cccp->cmdcookie->ignore_errors = 1;
|
|
81
|
+
cccp->cmdcookie = NULL;
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
lcbio_connreq_cancel(&cccp->creq);
|
|
86
|
+
|
|
87
|
+
if (cccp->ioctx) {
|
|
88
|
+
lcbio_ctx_close(cccp->ioctx, pooled_close_cb, &can_reuse);
|
|
89
|
+
cccp->ioctx = NULL;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
static lcb_error_t
|
|
94
|
+
schedule_next_request(cccp_provider *cccp, lcb_error_t err, int can_rollover)
|
|
95
|
+
{
|
|
96
|
+
mc_SERVER *server;
|
|
97
|
+
lcb_host_t *next_host = hostlist_shift_next(cccp->nodes, can_rollover);
|
|
98
|
+
if (!next_host) {
|
|
99
|
+
lcbio_timer_disarm(cccp->timer);
|
|
100
|
+
lcb_confmon_provider_failed(&cccp->base, err);
|
|
101
|
+
cccp->server_active = 0;
|
|
102
|
+
return err;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
server = lcb_find_server_by_host(cccp->instance, next_host);
|
|
106
|
+
if (server) {
|
|
107
|
+
cccp_cookie *cookie = calloc(1, sizeof(*cookie));
|
|
108
|
+
cccp->cmdcookie = cookie;
|
|
109
|
+
cookie->parent = cccp;
|
|
110
|
+
lcb_log(LOGARGS(cccp, INFO), "Re-Issuing CCCP Command on server struct %p (%s:%s)", (void*)server, next_host->host, next_host->port);
|
|
111
|
+
lcbio_timer_rearm(
|
|
112
|
+
cccp->timer, PROVIDER_SETTING(&cccp->base, config_node_timeout));
|
|
113
|
+
return lcb_getconfig(cccp->instance, cookie, server);
|
|
114
|
+
|
|
115
|
+
} else {
|
|
116
|
+
lcbio_pMGRREQ preq;
|
|
117
|
+
|
|
118
|
+
lcb_log(LOGARGS(cccp, INFO), "Requesting connection to node %s:%s for CCCP configuration", next_host->host, next_host->port);
|
|
119
|
+
preq = lcbio_mgr_get(
|
|
120
|
+
cccp->instance->memd_sockpool, next_host,
|
|
121
|
+
PROVIDER_SETTING(&cccp->base, config_node_timeout),
|
|
122
|
+
on_connected, cccp);
|
|
123
|
+
LCBIO_CONNREQ_MKPOOLED(&cccp->creq, preq);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
cccp->server_active = 1;
|
|
127
|
+
return LCB_SUCCESS;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
static lcb_error_t mcio_error(cccp_provider *cccp, lcb_error_t err)
|
|
131
|
+
{
|
|
132
|
+
if (err != LCB_NOT_SUPPORTED && err != LCB_UNKNOWN_COMMAND) {
|
|
133
|
+
lcb_log(LOGARGS(cccp, ERR), LOGFMT "Got I/O Error=0x%x", LOGID(cccp), err);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
release_socket(cccp, err == LCB_NOT_SUPPORTED);
|
|
137
|
+
return schedule_next_request(cccp, err, 0);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
static void socket_timeout(void *arg)
|
|
141
|
+
{
|
|
142
|
+
cccp_provider *cccp = arg;
|
|
143
|
+
mcio_error(cccp, LCB_ETIMEDOUT);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
void lcb_clconfig_cccp_enable(clconfig_provider *pb, lcb_t instance)
|
|
147
|
+
{
|
|
148
|
+
cccp_provider *cccp = (cccp_provider *)pb;
|
|
149
|
+
lcb_assert(pb->type == LCB_CLCONFIG_CCCP);
|
|
150
|
+
cccp->instance = instance;
|
|
151
|
+
pb->enabled = 1;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
static hostlist_t get_nodes(const clconfig_provider *pb)
|
|
155
|
+
{
|
|
156
|
+
return ((cccp_provider *)pb)->nodes;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** Update the configuration from a server. */
|
|
160
|
+
lcb_error_t lcb_cccp_update(clconfig_provider *provider,
|
|
161
|
+
const char *host,
|
|
162
|
+
lcb_string *data)
|
|
163
|
+
{
|
|
164
|
+
/** TODO: replace this with lcbvb_ names */
|
|
165
|
+
|
|
166
|
+
lcbvb_CONFIG* vbc;
|
|
167
|
+
int rv;
|
|
168
|
+
clconfig_info *new_config;
|
|
169
|
+
cccp_provider *cccp = (cccp_provider *)provider;
|
|
170
|
+
vbc = lcbvb_create();
|
|
171
|
+
|
|
172
|
+
if (!vbc) {
|
|
173
|
+
return LCB_CLIENT_ENOMEM;
|
|
174
|
+
}
|
|
175
|
+
rv = lcbvb_load_json(vbc, data->base);
|
|
176
|
+
|
|
177
|
+
if (rv) {
|
|
178
|
+
lcb_log(LOGARGS(cccp, ERROR), LOGFMT "Failed to parse config", LOGID(cccp));
|
|
179
|
+
lcb_log_badconfig(LOGARGS(cccp, ERROR), vbc, data->base);
|
|
180
|
+
lcbvb_destroy(vbc);
|
|
181
|
+
return LCB_PROTOCOL_ERROR;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
lcbvb_replace_host(vbc, host);
|
|
185
|
+
new_config = lcb_clconfig_create(vbc, LCB_CLCONFIG_CCCP);
|
|
186
|
+
|
|
187
|
+
if (!new_config) {
|
|
188
|
+
lcbvb_destroy(vbc);
|
|
189
|
+
return LCB_CLIENT_ENOMEM;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (cccp->config) {
|
|
193
|
+
lcb_clconfig_decref(cccp->config);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/** TODO: Figure out the comparison vector */
|
|
197
|
+
new_config->cmpclock = gethrtime();
|
|
198
|
+
cccp->config = new_config;
|
|
199
|
+
lcb_confmon_provider_success(provider, new_config);
|
|
200
|
+
return LCB_SUCCESS;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
void lcb_cccp_update2(const void *cookie, lcb_error_t err,
|
|
204
|
+
const void *bytes, lcb_size_t nbytes,
|
|
205
|
+
const lcb_host_t *origin)
|
|
206
|
+
{
|
|
207
|
+
cccp_cookie *ck = (cccp_cookie *)cookie;
|
|
208
|
+
cccp_provider *cccp = ck->parent;
|
|
209
|
+
|
|
210
|
+
if (ck == cccp->cmdcookie) {
|
|
211
|
+
lcbio_timer_disarm(cccp->timer);
|
|
212
|
+
cccp->cmdcookie = NULL;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (err == LCB_SUCCESS) {
|
|
216
|
+
lcb_string ss;
|
|
217
|
+
|
|
218
|
+
lcb_string_init(&ss);
|
|
219
|
+
lcb_string_append(&ss, bytes, nbytes);
|
|
220
|
+
err = lcb_cccp_update(&cccp->base, origin->host, &ss);
|
|
221
|
+
lcb_string_release(&ss);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (err != LCB_SUCCESS && ck->ignore_errors == 0) {
|
|
225
|
+
mcio_error(cccp, err);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
free(ck);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
static void
|
|
232
|
+
on_connected(lcbio_SOCKET *sock, void *data, lcb_error_t err, lcbio_OSERR syserr)
|
|
233
|
+
{
|
|
234
|
+
lcbio_CTXPROCS ioprocs;
|
|
235
|
+
cccp_provider *cccp = data;
|
|
236
|
+
lcb_settings *settings = cccp->base.parent->settings;
|
|
237
|
+
|
|
238
|
+
LCBIO_CONNREQ_CLEAR(&cccp->creq);
|
|
239
|
+
if (err != LCB_SUCCESS) {
|
|
240
|
+
if (sock) {
|
|
241
|
+
lcbio_mgr_discard(sock);
|
|
242
|
+
}
|
|
243
|
+
mcio_error(cccp, err);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (lcbio_protoctx_get(sock, LCBIO_PROTOCTX_SESSINFO) == NULL) {
|
|
248
|
+
mc_pSESSREQ sreq;
|
|
249
|
+
sreq = mc_sessreq_start(
|
|
250
|
+
sock, settings, settings->config_node_timeout, on_connected,
|
|
251
|
+
cccp);
|
|
252
|
+
LCBIO_CONNREQ_MKGENERIC(&cccp->creq, sreq, mc_sessreq_cancel);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
ioprocs.cb_err = io_error_handler;
|
|
257
|
+
ioprocs.cb_read = io_read_handler;
|
|
258
|
+
cccp->ioctx = lcbio_ctx_new(sock, data, &ioprocs);
|
|
259
|
+
cccp->ioctx->subsys = "bc_cccp";
|
|
260
|
+
request_config(cccp);
|
|
261
|
+
|
|
262
|
+
(void)syserr;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
static lcb_error_t cccp_get(clconfig_provider *pb)
|
|
266
|
+
{
|
|
267
|
+
cccp_provider *cccp = (cccp_provider *)pb;
|
|
268
|
+
if (cccp->creq.u.p_generic || cccp->server_active || cccp->cmdcookie) {
|
|
269
|
+
return LCB_BUSY;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return schedule_next_request(cccp, LCB_SUCCESS, 1);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
static clconfig_info *cccp_get_cached(clconfig_provider *pb)
|
|
276
|
+
{
|
|
277
|
+
cccp_provider *cccp = (cccp_provider *)pb;
|
|
278
|
+
return cccp->config;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
static lcb_error_t cccp_pause(clconfig_provider *pb)
|
|
282
|
+
{
|
|
283
|
+
cccp_provider *cccp = (cccp_provider *)pb;
|
|
284
|
+
if (!cccp->server_active) {
|
|
285
|
+
return LCB_SUCCESS;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
cccp->server_active = 0;
|
|
289
|
+
release_socket(cccp, 0);
|
|
290
|
+
lcbio_timer_disarm(cccp->timer);
|
|
291
|
+
return LCB_SUCCESS;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
static void cccp_cleanup(clconfig_provider *pb)
|
|
295
|
+
{
|
|
296
|
+
cccp_provider *cccp = (cccp_provider *)pb;
|
|
297
|
+
|
|
298
|
+
release_socket(cccp, 0);
|
|
299
|
+
if (cccp->config) {
|
|
300
|
+
lcb_clconfig_decref(cccp->config);
|
|
301
|
+
}
|
|
302
|
+
if (cccp->nodes) {
|
|
303
|
+
hostlist_destroy(cccp->nodes);
|
|
304
|
+
}
|
|
305
|
+
if (cccp->timer) {
|
|
306
|
+
lcbio_timer_destroy(cccp->timer);
|
|
307
|
+
}
|
|
308
|
+
if (cccp->cmdcookie) {
|
|
309
|
+
cccp->cmdcookie->ignore_errors = 1;
|
|
310
|
+
}
|
|
311
|
+
free(cccp);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
static void
|
|
315
|
+
configure_nodes(clconfig_provider *pb, const hostlist_t nodes)
|
|
316
|
+
{
|
|
317
|
+
cccp_provider *cccp = (cccp_provider *)pb;
|
|
318
|
+
hostlist_assign(cccp->nodes, nodes);
|
|
319
|
+
if (PROVIDER_SETTING(pb, randomize_bootstrap_nodes)) {
|
|
320
|
+
hostlist_randomize(cccp->nodes);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
static void
|
|
325
|
+
config_updated(clconfig_provider *provider, lcbvb_CONFIG* vbc)
|
|
326
|
+
{
|
|
327
|
+
unsigned ii;
|
|
328
|
+
lcbvb_SVCMODE mode;
|
|
329
|
+
cccp_provider *cccp = (cccp_provider *)provider;
|
|
330
|
+
if (LCBVB_NSERVERS(vbc) < 1) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
hostlist_clear(cccp->nodes);
|
|
335
|
+
if (PROVIDER_SETTING(provider, sslopts) & LCB_SSL_ENABLED) {
|
|
336
|
+
mode = LCBVB_SVCMODE_SSL;
|
|
337
|
+
} else {
|
|
338
|
+
mode = LCBVB_SVCMODE_PLAIN;
|
|
339
|
+
}
|
|
340
|
+
for (ii = 0; ii < LCBVB_NSERVERS(vbc); ii++) {
|
|
341
|
+
const char *mcaddr = lcbvb_get_hostport(vbc,
|
|
342
|
+
ii, LCBVB_SVCTYPE_DATA, mode);
|
|
343
|
+
if (!mcaddr) {
|
|
344
|
+
lcb_log(LOGARGS(cccp, DEBUG), "Node %d has no data service", ii);
|
|
345
|
+
continue;
|
|
346
|
+
}
|
|
347
|
+
hostlist_add_stringz(cccp->nodes, mcaddr, LCB_CONFIG_MCD_PORT);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
if (PROVIDER_SETTING(provider, randomize_bootstrap_nodes)) {
|
|
351
|
+
hostlist_randomize(cccp->nodes);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
static void
|
|
356
|
+
io_error_handler(lcbio_CTX *ctx, lcb_error_t err)
|
|
357
|
+
{
|
|
358
|
+
cccp_provider *cccp = lcbio_ctx_data(ctx);
|
|
359
|
+
mcio_error(cccp, err);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
static void
|
|
363
|
+
io_read_handler(lcbio_CTX *ioctx, unsigned nr)
|
|
364
|
+
{
|
|
365
|
+
packet_info pi;
|
|
366
|
+
cccp_provider *cccp = lcbio_ctx_data(ioctx);
|
|
367
|
+
lcb_string jsonstr;
|
|
368
|
+
lcb_error_t err;
|
|
369
|
+
int rv;
|
|
370
|
+
unsigned required;
|
|
371
|
+
lcb_host_t curhost;
|
|
372
|
+
|
|
373
|
+
(void)nr;
|
|
374
|
+
|
|
375
|
+
#define return_error(e) \
|
|
376
|
+
lcb_pktinfo_ectx_done(&pi, ioctx); \
|
|
377
|
+
mcio_error(cccp, e); \
|
|
378
|
+
return
|
|
379
|
+
|
|
380
|
+
memset(&pi, 0, sizeof(pi));
|
|
381
|
+
rv = lcb_pktinfo_ectx_get(&pi, ioctx, &required);
|
|
382
|
+
if (!rv) {
|
|
383
|
+
lcbio_ctx_rwant(ioctx, required);
|
|
384
|
+
lcbio_ctx_schedule(ioctx);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
if (PACKET_STATUS(&pi) != PROTOCOL_BINARY_RESPONSE_SUCCESS) {
|
|
389
|
+
lcb_log(LOGARGS(cccp, WARN), LOGFMT "CCCP Packet responded with 0x%x; nkey=%d, nbytes=%lu, cmd=0x%x, seq=0x%x", LOGID(cccp),
|
|
390
|
+
PACKET_STATUS(&pi), PACKET_NKEY(&pi), (unsigned long)PACKET_NBODY(&pi),
|
|
391
|
+
PACKET_OPCODE(&pi), PACKET_OPAQUE(&pi));
|
|
392
|
+
|
|
393
|
+
switch (PACKET_STATUS(&pi)) {
|
|
394
|
+
case PROTOCOL_BINARY_RESPONSE_NOT_SUPPORTED:
|
|
395
|
+
case PROTOCOL_BINARY_RESPONSE_UNKNOWN_COMMAND:
|
|
396
|
+
return_error(LCB_NOT_SUPPORTED);
|
|
397
|
+
default:
|
|
398
|
+
return_error(LCB_PROTOCOL_ERROR);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
if (!PACKET_NBODY(&pi)) {
|
|
405
|
+
return_error(LCB_PROTOCOL_ERROR);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
if (lcb_string_init(&jsonstr)) {
|
|
409
|
+
return_error(LCB_CLIENT_ENOMEM);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (lcb_string_append(&jsonstr, PACKET_BODY(&pi), PACKET_NBODY(&pi))) {
|
|
413
|
+
return_error(LCB_CLIENT_ENOMEM);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
curhost = *lcbio_get_host(lcbio_ctx_sock(ioctx));
|
|
417
|
+
lcb_pktinfo_ectx_done(&pi, ioctx);
|
|
418
|
+
release_socket(cccp, 1);
|
|
419
|
+
|
|
420
|
+
err = lcb_cccp_update(&cccp->base, curhost.host, &jsonstr);
|
|
421
|
+
lcb_string_release(&jsonstr);
|
|
422
|
+
if (err == LCB_SUCCESS) {
|
|
423
|
+
lcbio_timer_disarm(cccp->timer);
|
|
424
|
+
cccp->server_active = 0;
|
|
425
|
+
} else {
|
|
426
|
+
schedule_next_request(cccp, LCB_PROTOCOL_ERROR, 0);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
#undef return_error
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
static void request_config(cccp_provider *cccp)
|
|
433
|
+
{
|
|
434
|
+
protocol_binary_request_set_cluster_config req;
|
|
435
|
+
memset(&req, 0, sizeof(req));
|
|
436
|
+
req.message.header.request.magic = PROTOCOL_BINARY_REQ;
|
|
437
|
+
req.message.header.request.opcode = PROTOCOL_BINARY_CMD_GET_CLUSTER_CONFIG;
|
|
438
|
+
req.message.header.request.opaque = 0xF00D;
|
|
439
|
+
lcbio_ctx_put(cccp->ioctx, req.bytes, sizeof(req.bytes));
|
|
440
|
+
lcbio_ctx_rwant(cccp->ioctx, 24);
|
|
441
|
+
lcbio_ctx_schedule(cccp->ioctx);
|
|
442
|
+
lcbio_timer_rearm(cccp->timer, PROVIDER_SETTING(&cccp->base, config_node_timeout));
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
static void do_dump(clconfig_provider *pb, FILE *fp)
|
|
446
|
+
{
|
|
447
|
+
cccp_provider *cccp = (cccp_provider *)pb;
|
|
448
|
+
unsigned ii;
|
|
449
|
+
|
|
450
|
+
if (!cccp->base.enabled) {
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
fprintf(fp, "## BEGIN CCCP PROVIDER DUMP ##\n");
|
|
455
|
+
fprintf(fp, "TIMER ACTIVE: %s\n", lcbio_timer_armed(cccp->timer) ? "YES" : "NO");
|
|
456
|
+
fprintf(fp, "PIPELINE RESPONSE COOKIE: %p\n", (void*)cccp->cmdcookie);
|
|
457
|
+
if (cccp->ioctx) {
|
|
458
|
+
fprintf(fp, "CCCP Owns connection:\n");
|
|
459
|
+
lcbio_ctx_dump(cccp->ioctx, fp);
|
|
460
|
+
} else if (cccp->creq.u.p_generic) {
|
|
461
|
+
fprintf(fp, "CCCP Is connecting\n");
|
|
462
|
+
} else {
|
|
463
|
+
fprintf(fp, "CCCP does not have a dedicated connection\n");
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
for (ii = 0; ii < hostlist_size(cccp->nodes); ii++) {
|
|
467
|
+
const lcb_host_t *curhost = hostlist_get(cccp->nodes, ii);
|
|
468
|
+
fprintf(fp, "CCCP NODE: %s:%s\n", curhost->host, curhost->port);
|
|
469
|
+
}
|
|
470
|
+
fprintf(fp, "## END CCCP PROVIDER DUMP ##\n");
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
clconfig_provider * lcb_clconfig_create_cccp(lcb_confmon *mon)
|
|
474
|
+
{
|
|
475
|
+
cccp_provider *cccp = calloc(1, sizeof(*cccp));
|
|
476
|
+
cccp->nodes = hostlist_create();
|
|
477
|
+
cccp->base.type = LCB_CLCONFIG_CCCP;
|
|
478
|
+
cccp->base.refresh = cccp_get;
|
|
479
|
+
cccp->base.get_cached = cccp_get_cached;
|
|
480
|
+
cccp->base.pause = cccp_pause;
|
|
481
|
+
cccp->base.shutdown = cccp_cleanup;
|
|
482
|
+
cccp->base.config_updated = config_updated;
|
|
483
|
+
cccp->base.configure_nodes = configure_nodes;
|
|
484
|
+
cccp->base.get_nodes = get_nodes;
|
|
485
|
+
cccp->base.dump = do_dump;
|
|
486
|
+
cccp->base.parent = mon;
|
|
487
|
+
cccp->base.enabled = 0;
|
|
488
|
+
cccp->timer = lcbio_timer_new(mon->iot, cccp, socket_timeout);
|
|
489
|
+
|
|
490
|
+
if (!cccp->nodes) {
|
|
491
|
+
free(cccp);
|
|
492
|
+
return NULL;
|
|
493
|
+
}
|
|
494
|
+
return &cccp->base;
|
|
495
|
+
}
|