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,164 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2012 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "internal.h"
|
|
19
|
+
|
|
20
|
+
static const unsigned int prime_1 = 73;
|
|
21
|
+
static const unsigned int prime_2 = 5009;
|
|
22
|
+
|
|
23
|
+
hashset_t hashset_create()
|
|
24
|
+
{
|
|
25
|
+
hashset_t set = calloc(1, sizeof(struct hashset_st));
|
|
26
|
+
|
|
27
|
+
if (set == NULL) {
|
|
28
|
+
return NULL;
|
|
29
|
+
}
|
|
30
|
+
set->nbits = 3;
|
|
31
|
+
set->capacity = (lcb_size_t)(1 << set->nbits);
|
|
32
|
+
set->mask = set->capacity - 1;
|
|
33
|
+
set->items = calloc(set->capacity, sizeof(lcb_size_t));
|
|
34
|
+
if (set->items == NULL) {
|
|
35
|
+
hashset_destroy(set);
|
|
36
|
+
return NULL;
|
|
37
|
+
}
|
|
38
|
+
set->nitems = 0;
|
|
39
|
+
return set;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
lcb_size_t hashset_num_items(hashset_t set)
|
|
43
|
+
{
|
|
44
|
+
return set->nitems;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
void hashset_destroy(hashset_t set)
|
|
48
|
+
{
|
|
49
|
+
if (set) {
|
|
50
|
+
free(set->items);
|
|
51
|
+
}
|
|
52
|
+
free(set);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static int hashset_add_member(hashset_t set, void *item)
|
|
56
|
+
{
|
|
57
|
+
lcb_size_t value = (lcb_size_t)item;
|
|
58
|
+
lcb_size_t ii;
|
|
59
|
+
|
|
60
|
+
if (value == 0 || value == 1) {
|
|
61
|
+
return -1;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
ii = set->mask & (prime_1 * value);
|
|
65
|
+
|
|
66
|
+
while (set->items[ii] != 0 && set->items[ii] != 1) {
|
|
67
|
+
if (set->items[ii] == value) {
|
|
68
|
+
return 0;
|
|
69
|
+
} else {
|
|
70
|
+
/* search free slot */
|
|
71
|
+
ii = set->mask & (ii + prime_2);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
set->nitems++;
|
|
75
|
+
set->items[ii] = value;
|
|
76
|
+
return 1;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static void maybe_rehash(hashset_t set)
|
|
80
|
+
{
|
|
81
|
+
lcb_size_t *old_items;
|
|
82
|
+
lcb_size_t old_capacity, ii;
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
if ((float)set->nitems >= (lcb_size_t)((double)set->capacity * 0.85)) {
|
|
86
|
+
old_items = set->items;
|
|
87
|
+
old_capacity = set->capacity;
|
|
88
|
+
set->nbits++;
|
|
89
|
+
set->capacity = (lcb_size_t)(1 << set->nbits);
|
|
90
|
+
set->mask = set->capacity - 1;
|
|
91
|
+
set->items = calloc(set->capacity, sizeof(lcb_size_t));
|
|
92
|
+
set->nitems = 0;
|
|
93
|
+
lcb_assert(set->items);
|
|
94
|
+
for (ii = 0; ii < old_capacity; ii++) {
|
|
95
|
+
hashset_add_member(set, (void *)old_items[ii]);
|
|
96
|
+
}
|
|
97
|
+
free(old_items);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
int hashset_add(hashset_t set, void *item)
|
|
102
|
+
{
|
|
103
|
+
int rv = hashset_add_member(set, item);
|
|
104
|
+
maybe_rehash(set);
|
|
105
|
+
return rv;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
int hashset_remove(hashset_t set, void *item)
|
|
109
|
+
{
|
|
110
|
+
lcb_size_t value = (lcb_size_t)item;
|
|
111
|
+
lcb_size_t ii = set->mask & (prime_1 * value);
|
|
112
|
+
|
|
113
|
+
while (set->items[ii] != 0) {
|
|
114
|
+
if (set->items[ii] == value) {
|
|
115
|
+
set->items[ii] = 1;
|
|
116
|
+
set->nitems--;
|
|
117
|
+
return 1;
|
|
118
|
+
} else {
|
|
119
|
+
ii = set->mask & (ii + prime_2);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
int hashset_is_member(hashset_t set, void *item)
|
|
126
|
+
{
|
|
127
|
+
lcb_size_t value = (lcb_size_t)item;
|
|
128
|
+
lcb_size_t ii = set->mask & (prime_1 * value);
|
|
129
|
+
|
|
130
|
+
while (set->items[ii] != 0) {
|
|
131
|
+
if (set->items[ii] == value) {
|
|
132
|
+
return 1;
|
|
133
|
+
} else {
|
|
134
|
+
ii = set->mask & (ii + prime_2);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return 0;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
void **hashset_get_items(hashset_t set, void **itemlist)
|
|
141
|
+
{
|
|
142
|
+
lcb_size_t ii, oix;
|
|
143
|
+
|
|
144
|
+
if (!set->nitems) {
|
|
145
|
+
return NULL;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (!itemlist) {
|
|
149
|
+
itemlist = malloc(set->nitems * sizeof(void *));
|
|
150
|
+
if (!itemlist) {
|
|
151
|
+
return NULL;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
for (ii = 0, oix = 0; ii < set->capacity; ii++) {
|
|
156
|
+
|
|
157
|
+
if (set->items[ii] > 1) {
|
|
158
|
+
itemlist[oix] = (void *)set->items[ii];
|
|
159
|
+
oix++;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return itemlist;
|
|
164
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2012 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef LIBCOUCHBASE_HASHSET_H
|
|
19
|
+
#define LIBCOUCHBASE_HASHSET_H 1
|
|
20
|
+
|
|
21
|
+
#ifdef __cplusplus
|
|
22
|
+
extern "C" {
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
struct hashset_st {
|
|
26
|
+
lcb_size_t nbits;
|
|
27
|
+
lcb_size_t mask;
|
|
28
|
+
|
|
29
|
+
lcb_size_t capacity;
|
|
30
|
+
lcb_size_t *items;
|
|
31
|
+
lcb_size_t nitems;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
typedef struct hashset_st *hashset_t;
|
|
35
|
+
|
|
36
|
+
/* create hashset instance */
|
|
37
|
+
hashset_t hashset_create(void);
|
|
38
|
+
|
|
39
|
+
/* destroy hashset instance */
|
|
40
|
+
void hashset_destroy(hashset_t set);
|
|
41
|
+
|
|
42
|
+
lcb_size_t hashset_num_items(hashset_t set);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Makes a list of items inside the hashset.
|
|
46
|
+
* @param set the hashset
|
|
47
|
+
* @param itemlist an allocated array large enough to hold the number
|
|
48
|
+
* of items in the hashset (use hashset_num_items). If this is NULL
|
|
49
|
+
* then a list is allocated for you
|
|
50
|
+
*
|
|
51
|
+
* @return the item list. If the @itemlist param argument was
|
|
52
|
+
* not-null, then this is the same list; if it was NULL then this
|
|
53
|
+
* is an allocated list which should be released using @itemlist
|
|
54
|
+
* free(). It will return NULL if the hashset is empty or memory
|
|
55
|
+
* allocation for @itemlist was failed.
|
|
56
|
+
*/
|
|
57
|
+
void **hashset_get_items(hashset_t set, void **itemlist);
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
/* add item into the hashset.
|
|
61
|
+
*
|
|
62
|
+
* @note 0 and 1 is special values, meaning nil and deleted items. the
|
|
63
|
+
* function will return -1 indicating error.
|
|
64
|
+
*
|
|
65
|
+
* returns zero if the item already in the set and non-zero otherwise
|
|
66
|
+
*/
|
|
67
|
+
int hashset_add(hashset_t set, void *item);
|
|
68
|
+
|
|
69
|
+
/* remove item from the hashset
|
|
70
|
+
*
|
|
71
|
+
* returns non-zero if the item was removed and zero if the item wasn't
|
|
72
|
+
* exist
|
|
73
|
+
*/
|
|
74
|
+
int hashset_remove(hashset_t set, void *item);
|
|
75
|
+
|
|
76
|
+
/* check if existence of the item
|
|
77
|
+
*
|
|
78
|
+
* returns non-zero if the item exists and zero otherwise
|
|
79
|
+
*/
|
|
80
|
+
int hashset_is_member(hashset_t set, void *item);
|
|
81
|
+
|
|
82
|
+
#ifdef __cplusplus
|
|
83
|
+
}
|
|
84
|
+
#endif
|
|
85
|
+
|
|
86
|
+
#endif
|
|
@@ -0,0 +1,75 @@
|
|
|
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
|
+
#include "internal.h"
|
|
19
|
+
#include "contrib/genhash/genhash.h"
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Structures for common hash table operations
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
static int hasheq(const void *a, lcb_size_t n_a, const void *b, lcb_size_t n_b)
|
|
26
|
+
{
|
|
27
|
+
if (n_a != n_b) {
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return memcmp(a, b, n_a) == 0;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Structure for a no-copy hash table
|
|
35
|
+
*/
|
|
36
|
+
static struct lcb_hash_ops hashops_nocopy = {
|
|
37
|
+
genhash_string_hash, /* hashfunc */
|
|
38
|
+
hasheq, /* hasheq */
|
|
39
|
+
NULL, /* dupKey */
|
|
40
|
+
NULL, /* dupValue */
|
|
41
|
+
NULL, /* freeKey */
|
|
42
|
+
NULL, /* freeValue */
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
genhash_t *lcb_hashtable_nc_new(lcb_size_t est)
|
|
46
|
+
{
|
|
47
|
+
return genhash_init(est, hashops_nocopy);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
static int u32_hash(const void *p, lcb_size_t n)
|
|
52
|
+
{
|
|
53
|
+
(void)p;
|
|
54
|
+
return n;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static int u32_eq(const void *a, lcb_size_t n_a, const void *b, lcb_size_t n_b)
|
|
58
|
+
{
|
|
59
|
+
(void)a; (void)b;
|
|
60
|
+
return n_a == n_b;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
static struct lcb_hash_ops hashops_u32 = {
|
|
64
|
+
u32_hash,
|
|
65
|
+
u32_eq,
|
|
66
|
+
NULL,
|
|
67
|
+
NULL,
|
|
68
|
+
NULL,
|
|
69
|
+
NULL
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
genhash_t *lcb_hashtable_szt_new(lcb_size_t est)
|
|
73
|
+
{
|
|
74
|
+
return genhash_init(est, hashops_u32);
|
|
75
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2016 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/* High dynamic range timings, using HdrHistogram
|
|
19
|
+
* (http://hdrhistogram.github.io/HdrHistogram/), specifically the
|
|
20
|
+
* C implementation (https://github.com/HdrHistogram/HdrHistogram_c)
|
|
21
|
+
*
|
|
22
|
+
* hdr_timings.c is a rrop-in replacment for timings.c - you only want one of
|
|
23
|
+
* the two files.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
#include "internal.h"
|
|
27
|
+
|
|
28
|
+
#include "hdr_histogram.h"
|
|
29
|
+
|
|
30
|
+
struct lcb_histogram_st {
|
|
31
|
+
struct hdr_histogram* hdr_histogram;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
LCB_INTERNAL_API
|
|
35
|
+
lcb_HISTOGRAM *
|
|
36
|
+
lcb_histogram_create(void)
|
|
37
|
+
{
|
|
38
|
+
lcb_HISTOGRAM* histo = calloc(1, sizeof(struct lcb_histogram_st));
|
|
39
|
+
|
|
40
|
+
if (histo != NULL) {
|
|
41
|
+
hdr_init(/* minimum - 1 ns*/ 1,
|
|
42
|
+
/* maximum - 30 s*/ 30e9,
|
|
43
|
+
/* s ignificant figures */3,
|
|
44
|
+
&histo->hdr_histogram);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return histo;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
LCB_INTERNAL_API
|
|
51
|
+
void
|
|
52
|
+
lcb_histogram_destroy(lcb_HISTOGRAM *hg)
|
|
53
|
+
{
|
|
54
|
+
free(hg->hdr_histogram);
|
|
55
|
+
free(hg);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
LCB_INTERNAL_API
|
|
59
|
+
void
|
|
60
|
+
lcb_histogram_read(const lcb_HISTOGRAM *hg,
|
|
61
|
+
const void *cookie, lcb_HISTOGRAM_CALLBACK callback)
|
|
62
|
+
{
|
|
63
|
+
struct hdr_iter iter;
|
|
64
|
+
hdr_iter_recorded_init(&iter, hg->hdr_histogram);
|
|
65
|
+
|
|
66
|
+
while (hdr_iter_next(&iter)) {
|
|
67
|
+
callback(cookie, LCB_TIMEUNIT_NSEC,
|
|
68
|
+
iter.value_iterated_from, iter.value_iterated_to,
|
|
69
|
+
iter.count,
|
|
70
|
+
hdr_max(hg->hdr_histogram));
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
LCB_INTERNAL_API
|
|
76
|
+
lcb_error_t lcb_histogram_print(lcb_HISTOGRAM* hg, FILE* stream) {
|
|
77
|
+
hdr_percentiles_print(
|
|
78
|
+
hg->hdr_histogram,
|
|
79
|
+
stream,
|
|
80
|
+
5, // Granularity of printed values
|
|
81
|
+
1.0, // Multiplier for results
|
|
82
|
+
CLASSIC); // Format CLASSIC/CSV supported.
|
|
83
|
+
|
|
84
|
+
return LCB_SUCCESS;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
LCB_INTERNAL_API
|
|
88
|
+
void
|
|
89
|
+
lcb_histogram_record(lcb_HISTOGRAM *hg, lcb_U64 delta)
|
|
90
|
+
{
|
|
91
|
+
hdr_record_value(hg->hdr_histogram, delta);
|
|
92
|
+
}
|
|
@@ -0,0 +1,301 @@
|
|
|
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
|
+
#include "hostlist.h"
|
|
19
|
+
#include "simplestring.h"
|
|
20
|
+
#include <stdio.h>
|
|
21
|
+
#include <ctype.h>
|
|
22
|
+
#include <limits.h>
|
|
23
|
+
#include <algorithm>
|
|
24
|
+
#include <string>
|
|
25
|
+
|
|
26
|
+
using namespace lcb;
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
Hostlist::~Hostlist()
|
|
30
|
+
{
|
|
31
|
+
reset_strlist();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void
|
|
35
|
+
Hostlist::reset_strlist()
|
|
36
|
+
{
|
|
37
|
+
for (size_t ii = 0; ii < hoststrs.size(); ++ii) {
|
|
38
|
+
if (hoststrs[ii] != NULL) {
|
|
39
|
+
delete[] hoststrs[ii];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
hoststrs.clear();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
lcb_error_t
|
|
46
|
+
lcb_host_parse(lcb_host_t *host, const char *spec, int speclen, int deflport)
|
|
47
|
+
{
|
|
48
|
+
std::vector<char> zspec;
|
|
49
|
+
char *host_s;
|
|
50
|
+
char *port_s;
|
|
51
|
+
char *delim;
|
|
52
|
+
|
|
53
|
+
/** Parse the host properly */
|
|
54
|
+
if (speclen < 0) {
|
|
55
|
+
speclen = strlen(spec);
|
|
56
|
+
} else if (speclen == 0) {
|
|
57
|
+
return LCB_INVALID_HOST_FORMAT;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (deflport < 1) {
|
|
61
|
+
return LCB_INVALID_HOST_FORMAT;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
zspec.assign(spec, spec + speclen);
|
|
65
|
+
zspec.push_back('\0');
|
|
66
|
+
host_s = &zspec[0];
|
|
67
|
+
|
|
68
|
+
if (*host_s == ':') {
|
|
69
|
+
return LCB_INVALID_HOST_FORMAT;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if ( (delim = strstr(host_s, "://"))) {
|
|
73
|
+
host_s = delim + 3;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if ((delim = strstr(host_s, "/"))) {
|
|
77
|
+
*delim = '\0';
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
port_s = strstr(host_s, ":");
|
|
81
|
+
if (port_s != NULL) {
|
|
82
|
+
char *endp;
|
|
83
|
+
long ll;
|
|
84
|
+
|
|
85
|
+
*port_s = '\0';
|
|
86
|
+
port_s++;
|
|
87
|
+
|
|
88
|
+
if (! *port_s) {
|
|
89
|
+
return LCB_INVALID_HOST_FORMAT;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
ll = strtol(port_s, &endp, 10);
|
|
93
|
+
if (ll == LONG_MIN || ll == LONG_MAX) {
|
|
94
|
+
return LCB_INVALID_HOST_FORMAT;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (*endp) {
|
|
98
|
+
return LCB_INVALID_HOST_FORMAT;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
} else {
|
|
102
|
+
port_s = const_cast<char*>("");
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
if (strlen(host_s) > sizeof(host->host)-1 ||
|
|
107
|
+
strlen(port_s) > sizeof(host->port)-1 ||
|
|
108
|
+
*host_s == '\0') {
|
|
109
|
+
return LCB_INVALID_HOST_FORMAT;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
size_t ii, hostlen = strlen(host_s);
|
|
113
|
+
for (ii = 0; ii < hostlen; ii++) {
|
|
114
|
+
if (isalnum(host_s[ii])) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
switch (host_s[ii]) {
|
|
118
|
+
case '.':
|
|
119
|
+
case '-':
|
|
120
|
+
case '_':
|
|
121
|
+
break;
|
|
122
|
+
default:
|
|
123
|
+
return LCB_INVALID_HOST_FORMAT;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
strcpy(host->host, host_s);
|
|
128
|
+
if (*port_s) {
|
|
129
|
+
strcpy(host->port, port_s);
|
|
130
|
+
} else {
|
|
131
|
+
sprintf(host->port, "%d", deflport);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return LCB_SUCCESS;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
int lcb_host_equals(const lcb_host_t *a, const lcb_host_t *b)
|
|
138
|
+
{
|
|
139
|
+
return strcmp(a->host, b->host) == 0 && strcmp(a->port, b->port) == 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
bool
|
|
143
|
+
Hostlist::exists(const lcb_host_t& host) const
|
|
144
|
+
{
|
|
145
|
+
for (size_t ii = 0; ii < hosts.size(); ++ii) {
|
|
146
|
+
if (lcb_host_equals(&host, &hosts[ii])) {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
bool
|
|
154
|
+
Hostlist::exists(const char *s) const
|
|
155
|
+
{
|
|
156
|
+
lcb_host_t tmp;
|
|
157
|
+
if (lcb_host_parse(&tmp, s, -1, 1) != LCB_SUCCESS) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
return exists(tmp);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
void
|
|
164
|
+
Hostlist::add(const lcb_host_t& host)
|
|
165
|
+
{
|
|
166
|
+
if (exists(host)) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
hosts.push_back(host);
|
|
170
|
+
reset_strlist();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
lcb_error_t
|
|
174
|
+
Hostlist::add(const char *hostport, long len, int deflport)
|
|
175
|
+
{
|
|
176
|
+
lcb_error_t err = LCB_SUCCESS;
|
|
177
|
+
|
|
178
|
+
if (len < 0) {
|
|
179
|
+
len = strlen(hostport);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
std::string ss(hostport, len);
|
|
183
|
+
if (ss.empty()) {
|
|
184
|
+
return LCB_SUCCESS;
|
|
185
|
+
}
|
|
186
|
+
if (ss[ss.length()-1] != ';') {
|
|
187
|
+
ss += ';';
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const char *curstart = ss.c_str();
|
|
191
|
+
const char *delim;
|
|
192
|
+
while ( (delim = strstr(curstart, ";"))) {
|
|
193
|
+
lcb_host_t curhost;
|
|
194
|
+
size_t curlen;
|
|
195
|
+
|
|
196
|
+
if (delim == curstart) {
|
|
197
|
+
curstart++;
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** { 'f', 'o', 'o', ';' } */
|
|
202
|
+
curlen = delim - curstart;
|
|
203
|
+
|
|
204
|
+
err = lcb_host_parse(&curhost, curstart, curlen, deflport);
|
|
205
|
+
if (err != LCB_SUCCESS) {
|
|
206
|
+
return err;
|
|
207
|
+
}
|
|
208
|
+
add(curhost);
|
|
209
|
+
curstart = delim + 1;
|
|
210
|
+
}
|
|
211
|
+
return LCB_SUCCESS;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
lcb_host_t *
|
|
215
|
+
Hostlist::next(bool wrap)
|
|
216
|
+
{
|
|
217
|
+
lcb_host_t *ret;
|
|
218
|
+
if (empty()) {
|
|
219
|
+
return NULL;
|
|
220
|
+
}
|
|
221
|
+
if (ix == size()) {
|
|
222
|
+
if (wrap) {
|
|
223
|
+
ix = 0;
|
|
224
|
+
} else {
|
|
225
|
+
return NULL;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
ret = &hosts[ix];
|
|
230
|
+
ix++;
|
|
231
|
+
return ret;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
void
|
|
235
|
+
Hostlist::randomize()
|
|
236
|
+
{
|
|
237
|
+
std::random_shuffle(hosts.begin(), hosts.end());
|
|
238
|
+
reset_strlist();
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
void Hostlist::ensure_strlist() {
|
|
242
|
+
if (hoststrs.size()) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
for (size_t ii = 0; ii < hosts.size(); ii++) {
|
|
246
|
+
const lcb_host_t& host = hosts[ii];
|
|
247
|
+
std::string ss(host.host);
|
|
248
|
+
ss.append(":").append(host.port);
|
|
249
|
+
char *newstr = new char[ss.size() + 1];
|
|
250
|
+
newstr[ss.size()] = '\0';
|
|
251
|
+
memcpy(newstr, ss.c_str(), ss.size());
|
|
252
|
+
hoststrs.push_back(newstr);
|
|
253
|
+
}
|
|
254
|
+
hoststrs.push_back(NULL);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
Hostlist&
|
|
258
|
+
Hostlist::assign(const Hostlist& src)
|
|
259
|
+
{
|
|
260
|
+
clear();
|
|
261
|
+
reset_strlist();
|
|
262
|
+
for (size_t ii = 0; ii < src.size(); ++ii) {
|
|
263
|
+
add(src.hosts[ii]);
|
|
264
|
+
}
|
|
265
|
+
return *this;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
extern "C" {
|
|
269
|
+
Hostlist* hostlist_create(void) { return new Hostlist(); }
|
|
270
|
+
void hostlist_destroy(hostlist_t l) { delete l; }
|
|
271
|
+
void hostlist_clear(hostlist_t l) { l->clear(); }
|
|
272
|
+
void hostlist_reset_strlist(hostlist_t l) { l->reset_strlist(); }
|
|
273
|
+
lcb_error_t hostlist_add_host(hostlist_t l, const lcb_host_t *h) { l->add(*h); return LCB_SUCCESS; }
|
|
274
|
+
lcb_host_t *hostlist_shift_next(hostlist_t hl, int wrap) { return hl->next(wrap); }
|
|
275
|
+
int hostlist_finished(hostlist_t l) { return l->ix == l->hosts.size(); }
|
|
276
|
+
size_t hostlist_size(hostlist_t l) { return l->size(); }
|
|
277
|
+
void hostlist_randomize(hostlist_t l) { l->randomize(); }
|
|
278
|
+
|
|
279
|
+
lcb_error_t
|
|
280
|
+
hostlist_add_string(hostlist_t hl, const char *spec, int len, int deflport) {
|
|
281
|
+
return hl->add(spec, len, deflport);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
void
|
|
285
|
+
hostlist_assign(hostlist_t dst, const hostlist_t src) {
|
|
286
|
+
dst->assign(*src);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const lcb_host_t*
|
|
290
|
+
hostlist_get(const hostlist_t h, size_t ix) { return &h->hosts[ix]; }
|
|
291
|
+
|
|
292
|
+
const char * const *
|
|
293
|
+
hostlist_strents(const hostlist_t h) {
|
|
294
|
+
h->ensure_strlist();
|
|
295
|
+
if (h->hoststrs.size()) {
|
|
296
|
+
return &h->hoststrs[0];
|
|
297
|
+
} else {
|
|
298
|
+
return NULL;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|