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.
Files changed (561) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +35 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +24 -0
  8. data/README.md +389 -0
  9. data/Rakefile +75 -0
  10. data/ext/README.md +6 -0
  11. data/ext/Rakefile +20 -0
  12. data/ext/libcouchbase/.gitignore +130 -0
  13. data/ext/libcouchbase/.travis.yml +19 -0
  14. data/ext/libcouchbase/CMakeLists.txt +429 -0
  15. data/ext/libcouchbase/CONTRIBUTING.md +124 -0
  16. data/ext/libcouchbase/LICENSE +202 -0
  17. data/ext/libcouchbase/README.markdown +163 -0
  18. data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
  19. data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -0
  20. data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
  21. data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
  22. data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +20 -0
  23. data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
  24. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
  25. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +52 -0
  26. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
  27. data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
  28. data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
  29. data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -0
  30. data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
  31. data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
  32. data/ext/libcouchbase/cmake/config-cmake.h.in +60 -0
  33. data/ext/libcouchbase/cmake/configure +357 -0
  34. data/ext/libcouchbase/cmake/defs.mk.in +8 -0
  35. data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
  36. data/ext/libcouchbase/cmake/source_files.cmake +73 -0
  37. data/ext/libcouchbase/configure.pl +1 -0
  38. data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
  39. data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
  40. data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
  41. data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
  42. data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
  43. data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
  44. data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -0
  45. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
  46. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
  47. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
  48. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
  49. data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
  50. data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
  51. data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
  52. data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
  53. data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
  54. data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
  55. data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
  56. data/ext/libcouchbase/contrib/genhash/genhash.h +235 -0
  57. data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
  58. data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
  59. data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
  60. data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
  61. data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
  62. data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
  63. data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
  64. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
  65. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
  66. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
  67. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
  68. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
  69. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
  70. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
  71. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
  72. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
  73. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
  74. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
  75. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
  76. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
  77. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
  78. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
  79. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
  80. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
  81. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
  82. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
  83. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
  84. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
  85. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
  86. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
  87. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
  88. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
  89. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
  90. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
  91. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
  92. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
  93. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
  94. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
  95. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
  96. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
  97. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
  98. data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
  99. data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
  100. data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
  101. data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
  102. data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
  103. data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
  104. data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
  105. data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
  106. data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
  107. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
  108. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4892 -0
  109. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
  110. data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -0
  111. data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
  112. data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
  113. data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
  114. data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
  115. data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
  116. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +71 -0
  117. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
  118. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
  119. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
  120. data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +98 -0
  121. data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -0
  122. data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
  123. data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
  124. data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
  125. data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
  126. data/ext/libcouchbase/example/CMakeLists.txt +37 -0
  127. data/ext/libcouchbase/example/README.markdown +47 -0
  128. data/ext/libcouchbase/example/db/db.c +167 -0
  129. data/ext/libcouchbase/example/db/vb.c +227 -0
  130. data/ext/libcouchbase/example/instancepool/main.cc +102 -0
  131. data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
  132. data/ext/libcouchbase/example/instancepool/pool.h +69 -0
  133. data/ext/libcouchbase/example/libeventdirect/main.c +148 -0
  134. data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
  135. data/ext/libcouchbase/example/minimal/minimal.c +130 -0
  136. data/ext/libcouchbase/example/observe/observe.c +146 -0
  137. data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
  138. data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
  139. data/ext/libcouchbase/example/tick/tick.c +119 -0
  140. data/ext/libcouchbase/example/views/views-example.cc +83 -0
  141. data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
  142. data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
  143. data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
  144. data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
  145. data/ext/libcouchbase/include/libcouchbase/cbft.h +109 -0
  146. data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
  147. data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
  148. data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
  149. data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
  150. data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
  151. data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
  152. data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
  153. data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
  154. data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
  155. data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
  156. data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
  157. data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
  158. data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -0
  159. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
  160. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
  161. data/ext/libcouchbase/include/libcouchbase/subdoc.h +312 -0
  162. data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
  163. data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
  164. data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
  165. data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -0
  166. data/ext/libcouchbase/include/memcached/COPYING +30 -0
  167. data/ext/libcouchbase/include/memcached/README +10 -0
  168. data/ext/libcouchbase/include/memcached/protocol_binary.h +1916 -0
  169. data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
  170. data/ext/libcouchbase/packaging/README +7 -0
  171. data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
  172. data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
  173. data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
  174. data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
  175. data/ext/libcouchbase/packaging/deb/compat +1 -0
  176. data/ext/libcouchbase/packaging/deb/control +73 -0
  177. data/ext/libcouchbase/packaging/deb/copyright +10 -0
  178. data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
  179. data/ext/libcouchbase/packaging/deb/package.mk +31 -0
  180. data/ext/libcouchbase/packaging/deb/rules +46 -0
  181. data/ext/libcouchbase/packaging/deb/source/format +1 -0
  182. data/ext/libcouchbase/packaging/distinfo/README +1 -0
  183. data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
  184. data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
  185. data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
  186. data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
  187. data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
  188. data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +108 -0
  189. data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
  190. data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
  191. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +466 -0
  192. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
  193. data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
  194. data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
  195. data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
  196. data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +29 -0
  197. data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
  198. data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
  199. data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -0
  200. data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
  201. data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
  202. data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +42 -0
  203. data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
  204. data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
  205. data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
  206. data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
  207. data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
  208. data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
  209. data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
  210. data/ext/libcouchbase/src/README.md +103 -0
  211. data/ext/libcouchbase/src/aspend.h +106 -0
  212. data/ext/libcouchbase/src/auth.cc +74 -0
  213. data/ext/libcouchbase/src/auth.h +54 -0
  214. data/ext/libcouchbase/src/bootstrap.c +269 -0
  215. data/ext/libcouchbase/src/bootstrap.h +129 -0
  216. data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
  217. data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
  218. data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
  219. data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
  220. data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
  221. data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
  222. data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
  223. data/ext/libcouchbase/src/callbacks.c +378 -0
  224. data/ext/libcouchbase/src/cbft.cc +210 -0
  225. data/ext/libcouchbase/src/cntl.cc +847 -0
  226. data/ext/libcouchbase/src/config_static.h +159 -0
  227. data/ext/libcouchbase/src/connspec.cc +462 -0
  228. data/ext/libcouchbase/src/connspec.h +105 -0
  229. data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
  230. data/ext/libcouchbase/src/dump.c +98 -0
  231. data/ext/libcouchbase/src/getconfig.c +100 -0
  232. data/ext/libcouchbase/src/gethrtime.c +109 -0
  233. data/ext/libcouchbase/src/handler.c +922 -0
  234. data/ext/libcouchbase/src/hashset.c +164 -0
  235. data/ext/libcouchbase/src/hashset.h +86 -0
  236. data/ext/libcouchbase/src/hashtable.c +75 -0
  237. data/ext/libcouchbase/src/hdr_timings.c +92 -0
  238. data/ext/libcouchbase/src/hostlist.cc +301 -0
  239. data/ext/libcouchbase/src/hostlist.h +171 -0
  240. data/ext/libcouchbase/src/http/http-priv.h +307 -0
  241. data/ext/libcouchbase/src/http/http.cc +633 -0
  242. data/ext/libcouchbase/src/http/http.h +34 -0
  243. data/ext/libcouchbase/src/http/http_io.cc +307 -0
  244. data/ext/libcouchbase/src/instance.cc +722 -0
  245. data/ext/libcouchbase/src/internal.h +244 -0
  246. data/ext/libcouchbase/src/iofactory.c +575 -0
  247. data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
  248. data/ext/libcouchbase/src/jsparse/parser.h +173 -0
  249. data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
  250. data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
  251. data/ext/libcouchbase/src/lcbio/connect.c +557 -0
  252. data/ext/libcouchbase/src/lcbio/connect.h +364 -0
  253. data/ext/libcouchbase/src/lcbio/ctx.c +611 -0
  254. data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
  255. data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
  256. data/ext/libcouchbase/src/lcbio/iotable.h +84 -0
  257. data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
  258. data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
  259. data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
  260. data/ext/libcouchbase/src/lcbio/manager.c +584 -0
  261. data/ext/libcouchbase/src/lcbio/manager.h +156 -0
  262. data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
  263. data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
  264. data/ext/libcouchbase/src/lcbio/ssl.h +149 -0
  265. data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
  266. data/ext/libcouchbase/src/lcbio/timer.c +132 -0
  267. data/ext/libcouchbase/src/legacy.c +430 -0
  268. data/ext/libcouchbase/src/list.c +144 -0
  269. data/ext/libcouchbase/src/list.h +127 -0
  270. data/ext/libcouchbase/src/logging.c +244 -0
  271. data/ext/libcouchbase/src/logging.h +86 -0
  272. data/ext/libcouchbase/src/mc/compress.c +90 -0
  273. data/ext/libcouchbase/src/mc/compress.h +61 -0
  274. data/ext/libcouchbase/src/mc/forward.c +186 -0
  275. data/ext/libcouchbase/src/mc/forward.h +90 -0
  276. data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
  277. data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
  278. data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +111 -0
  279. data/ext/libcouchbase/src/mc/mcreq.c +954 -0
  280. data/ext/libcouchbase/src/mc/mcreq.h +977 -0
  281. data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
  282. data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
  283. data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
  284. data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
  285. data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
  286. data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
  287. data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
  288. data/ext/libcouchbase/src/n1ql/params.cc +215 -0
  289. data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
  290. data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
  291. data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
  292. data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
  293. data/ext/libcouchbase/src/newconfig.c +385 -0
  294. data/ext/libcouchbase/src/nodeinfo.cc +194 -0
  295. data/ext/libcouchbase/src/operations/cbflush.c +71 -0
  296. data/ext/libcouchbase/src/operations/counter.c +116 -0
  297. data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
  298. data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
  299. data/ext/libcouchbase/src/operations/durability.c +668 -0
  300. data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
  301. data/ext/libcouchbase/src/operations/get.c +409 -0
  302. data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
  303. data/ext/libcouchbase/src/operations/observe.c +340 -0
  304. data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
  305. data/ext/libcouchbase/src/operations/remove.c +83 -0
  306. data/ext/libcouchbase/src/operations/stats.c +461 -0
  307. data/ext/libcouchbase/src/operations/store.c +360 -0
  308. data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
  309. data/ext/libcouchbase/src/operations/touch.c +81 -0
  310. data/ext/libcouchbase/src/packetutils.c +60 -0
  311. data/ext/libcouchbase/src/packetutils.h +147 -0
  312. data/ext/libcouchbase/src/probes.d +211 -0
  313. data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
  314. data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
  315. data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
  316. data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
  317. data/ext/libcouchbase/src/rdb/rope.c +419 -0
  318. data/ext/libcouchbase/src/rdb/rope.h +488 -0
  319. data/ext/libcouchbase/src/retrychk.c +113 -0
  320. data/ext/libcouchbase/src/retryq.c +424 -0
  321. data/ext/libcouchbase/src/retryq.h +157 -0
  322. data/ext/libcouchbase/src/ringbuffer.c +442 -0
  323. data/ext/libcouchbase/src/ringbuffer.h +100 -0
  324. data/ext/libcouchbase/src/settings.c +95 -0
  325. data/ext/libcouchbase/src/settings.h +188 -0
  326. data/ext/libcouchbase/src/simplestring.c +211 -0
  327. data/ext/libcouchbase/src/simplestring.h +228 -0
  328. data/ext/libcouchbase/src/sllist-inl.h +197 -0
  329. data/ext/libcouchbase/src/sllist.h +76 -0
  330. data/ext/libcouchbase/src/ssl/CMakeLists.txt +23 -0
  331. data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
  332. data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
  333. data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
  334. data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
  335. data/ext/libcouchbase/src/ssobuf.h +82 -0
  336. data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
  337. data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
  338. data/ext/libcouchbase/src/timings.c +208 -0
  339. data/ext/libcouchbase/src/trace.h +105 -0
  340. data/ext/libcouchbase/src/utilities.c +171 -0
  341. data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
  342. data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
  343. data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
  344. data/ext/libcouchbase/src/vbucket/hash.h +30 -0
  345. data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
  346. data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
  347. data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
  348. data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
  349. data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
  350. data/ext/libcouchbase/src/vbucket/vbucket.c +1543 -0
  351. data/ext/libcouchbase/src/views/docreq.c +194 -0
  352. data/ext/libcouchbase/src/views/docreq.h +83 -0
  353. data/ext/libcouchbase/src/views/viewreq.c +358 -0
  354. data/ext/libcouchbase/src/views/viewreq.h +36 -0
  355. data/ext/libcouchbase/src/wait.c +161 -0
  356. data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
  357. data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
  358. data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
  359. data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
  360. data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
  361. data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
  362. data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
  363. data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
  364. data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -0
  365. data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
  366. data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
  367. data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
  368. data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
  369. data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +18 -0
  370. data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
  371. data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
  372. data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
  373. data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
  374. data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
  375. data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
  376. data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
  377. data/ext/libcouchbase/tests/check-all.cc +608 -0
  378. data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -0
  379. data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
  380. data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
  381. data/ext/libcouchbase/tests/ioserver/ioserver.cc +104 -0
  382. data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
  383. data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
  384. data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
  385. data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
  386. data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
  387. data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
  388. data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
  389. data/ext/libcouchbase/tests/iotests/mock-environment.cc +524 -0
  390. data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -0
  391. data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
  392. data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
  393. data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
  394. data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
  395. data/ext/libcouchbase/tests/iotests/t_behavior.cc +226 -0
  396. data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
  397. data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
  398. data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
  399. data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -0
  400. data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
  401. data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
  402. data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
  403. data/ext/libcouchbase/tests/iotests/t_lock.cc +275 -0
  404. data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -0
  405. data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
  406. data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
  407. data/ext/libcouchbase/tests/iotests/t_netfail.cc +654 -0
  408. data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
  409. data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
  410. data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
  411. data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
  412. data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
  413. data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
  414. data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
  415. data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
  416. data/ext/libcouchbase/tests/iotests/testutil.cc +250 -0
  417. data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
  418. data/ext/libcouchbase/tests/mc/mctest.h +119 -0
  419. data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
  420. data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
  421. data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
  422. data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
  423. data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
  424. data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
  425. data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
  426. data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
  427. data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
  428. data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
  429. data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
  430. data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
  431. data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
  432. data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
  433. data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
  434. data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
  435. data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
  436. data/ext/libcouchbase/tests/socktests/socktest.cc +347 -0
  437. data/ext/libcouchbase/tests/socktests/socktest.h +448 -0
  438. data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
  439. data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
  440. data/ext/libcouchbase/tests/socktests/t_manager.cc +179 -0
  441. data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
  442. data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
  443. data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
  444. data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
  445. data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
  446. data/ext/libcouchbase/tests/start_mock.bat +15 -0
  447. data/ext/libcouchbase/tests/start_mock.sh +42 -0
  448. data/ext/libcouchbase/tests/unit_tests.cc +43 -0
  449. data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
  450. data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
  451. data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
  452. data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
  453. data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
  454. data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
  455. data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
  456. data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
  457. data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
  458. data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
  459. data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
  460. data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
  461. data/ext/libcouchbase/tools/cbc.cc +1541 -0
  462. data/ext/libcouchbase/tools/common/histogram.cc +43 -0
  463. data/ext/libcouchbase/tools/common/histogram.h +23 -0
  464. data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
  465. data/ext/libcouchbase/tools/common/options.cc +420 -0
  466. data/ext/libcouchbase/tools/common/options.h +81 -0
  467. data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
  468. data/ext/libcouchbase/tools/docgen/loc.h +210 -0
  469. data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
  470. data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
  471. data/lib/libcouchbase.rb +36 -0
  472. data/lib/libcouchbase/bucket.rb +819 -0
  473. data/lib/libcouchbase/callbacks.rb +72 -0
  474. data/lib/libcouchbase/connection.rb +790 -0
  475. data/lib/libcouchbase/design_docs.rb +86 -0
  476. data/lib/libcouchbase/error.rb +68 -0
  477. data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
  478. data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
  479. data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
  480. data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
  481. data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
  482. data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
  483. data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
  484. data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
  485. data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
  486. data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
  487. data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
  488. data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
  489. data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
  490. data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
  491. data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
  492. data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
  493. data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
  494. data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
  495. data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
  496. data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
  497. data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
  498. data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
  499. data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
  500. data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
  501. data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
  502. data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
  503. data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
  504. data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
  505. data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
  506. data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
  507. data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
  508. data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
  509. data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
  510. data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
  511. data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
  512. data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
  513. data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
  514. data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
  515. data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
  516. data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
  517. data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
  518. data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
  519. data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
  520. data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
  521. data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
  522. data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
  523. data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
  524. data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
  525. data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
  526. data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
  527. data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
  528. data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
  529. data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
  530. data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
  531. data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
  532. data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
  533. data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
  534. data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
  535. data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
  536. data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
  537. data/lib/libcouchbase/ext/tasks.rb +87 -0
  538. data/lib/libcouchbase/n1ql.rb +73 -0
  539. data/lib/libcouchbase/query_full_text.rb +147 -0
  540. data/lib/libcouchbase/query_n1ql.rb +121 -0
  541. data/lib/libcouchbase/query_view.rb +129 -0
  542. data/lib/libcouchbase/results_fiber.rb +262 -0
  543. data/lib/libcouchbase/results_native.rb +211 -0
  544. data/lib/libcouchbase/version.rb +5 -0
  545. data/libcouchbase.gemspec +61 -0
  546. data/spec/bucket_spec.rb +270 -0
  547. data/spec/connection_spec.rb +277 -0
  548. data/spec/design_docs_spec.rb +23 -0
  549. data/spec/error_spec.rb +26 -0
  550. data/spec/fts_spec.rb +129 -0
  551. data/spec/n1ql_spec.rb +201 -0
  552. data/spec/results_libuv_spec.rb +229 -0
  553. data/spec/results_native_spec.rb +259 -0
  554. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
  555. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
  556. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
  557. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
  558. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
  559. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
  560. data/spec/view_spec.rb +195 -0
  561. metadata +775 -0
@@ -0,0 +1,108 @@
1
+ Summary: Couchbase Client & Protocol Library
2
+ Name: libcouchbase
3
+ Version: @VERSION@
4
+ Release: @RELEASE@%{?dist}
5
+ Vendor: Couchbase, Inc.
6
+ Packager: Couchbase SDK Team <support@couchbase.com>
7
+ License: Apache-2
8
+ Group: System Environment/Libraries
9
+ %if %{?fedora}0 >= 180 || %{?rhel}0 >= 60
10
+ BuildRequires: cmake >= 2.8.9
11
+ %else
12
+ BuildRequires: cmake28
13
+ %endif
14
+ BuildRequires: libevent-devel >= 1.4, libev-devel >= 3, openssl-devel
15
+ URL: https://github.com/couchbase/libcouchbase
16
+ Source: @TARREDAS@.tar.gz
17
+ BuildRoot: %{_topdir}/build/@TARREDAS@
18
+
19
+ %description
20
+ This is the client and protocol library for Couchbase project.
21
+
22
+ %package -n %{name}2-libevent
23
+ Group: System Environment/Libraries
24
+ Summary: Couchbase Client & Protocol Library (libevent backend)
25
+ Requires: %{name}2-core = %{version}-%{release}, libevent >= 1.4
26
+ %description -n %{name}2-libevent
27
+ This package provides libevent backend for libcouchbase
28
+
29
+ %package -n %{name}2-libev
30
+ Group: System Environment/Libraries
31
+ Summary: Couchbase Client & Protocol Library (libev backend)
32
+ Requires: %{name}2-core = %{version}-%{release}, libev >= 3
33
+ %description -n %{name}2-libev
34
+ This package provides libev backend for libcouchbase
35
+
36
+ %package -n %{name}2-core
37
+ Group: System Environment/Libraries
38
+ Summary: Couchbase Client & Protocol Library (core)
39
+ Provides: %{name}2
40
+ %description -n %{name}2-core
41
+ This package provides the core for libcouchbase. It contains an IO
42
+ implementation based on select(2). If preferred, you can install one
43
+ of the available backends (libcouchbase2-libevent or
44
+ libcouchbase2-libev). libcouchbase will automatically use the
45
+ installed backend. It is also possible to integrate another IO backend
46
+ or write your own.
47
+
48
+ %package -n %{name}2-bin
49
+ Group: Development/Tools
50
+ Summary: Couchbase Client Tools
51
+ Requires: %{name}2-core = %{version}-%{release}
52
+ %description -n %{name}2-bin
53
+ This is the CLI tools Couchbase project.
54
+
55
+ %package devel
56
+ Group: Development/Libraries
57
+ Summary: Couchbase Client & Protocol Library - Header files
58
+ Requires: %{name}2-core = %{version}-%{release}
59
+ %description devel
60
+ Development files for the Couchbase Client & Protocol Library
61
+
62
+ %prep
63
+ %if 0%{?rhel} > 5 || 0%{?fedora} > 7
64
+ %define __lcb_cmake %cmake
65
+ %else
66
+ %define __lcb_cmake %cmake28
67
+ %endif
68
+
69
+ %setup -q -n @TARREDAS@
70
+ %{__lcb_cmake} -DLCB_NO_TESTS=1 -DLCB_BUILD_LIBUV=OFF
71
+
72
+ %build
73
+ %{__make} %{_smp_mflags}
74
+
75
+ %install
76
+ %{__make} install DESTDIR="%{buildroot}" AM_INSTALL_PROGRAM_FLAGS=""
77
+
78
+ %clean
79
+ %{__rm} -rf %{buildroot}
80
+
81
+ %post -n %{name}2-core -p /sbin/ldconfig
82
+
83
+ %postun -n %{name}2-core -p /sbin/ldconfig
84
+
85
+ %files -n %{name}2-core
86
+ %defattr(-, root, root)
87
+ %{_libdir}/libcouchbase.so.*
88
+ %doc README.markdown LICENSE RELEASE_NOTES.markdown
89
+
90
+ %files -n %{name}2-libevent
91
+ %defattr(-, root, root)
92
+ %{_libdir}/libcouchbase_libevent.so
93
+
94
+ %files -n %{name}2-libev
95
+ %defattr(-, root, root)
96
+ %{_libdir}/libcouchbase_libev.so
97
+
98
+ %files -n %{name}2-bin
99
+ %defattr(-, root, root)
100
+ %{_bindir}/cbc*
101
+ %{_mandir}/man1/cbc*.1*
102
+ %{_mandir}/man4/cbcrc*.4*
103
+
104
+ %files devel
105
+ %defattr(-, root, root)
106
+ %{_includedir}/libcouchbase
107
+ %{_libdir}/libcouchbase.so
108
+ %{_libdir}/pkgconfig/libcouchbase.pc
@@ -0,0 +1,40 @@
1
+ .PHONY: dist-rpm
2
+
3
+ # Defined by CMake. For autotools, these will just be the normal build tree
4
+ BUILDROOT ?= $(shell pwd)
5
+ SRCROOT ?= $(shell pwd)
6
+
7
+ # Variables derived
8
+ GITPARSE := $(SRCROOT)/packaging/parse-git-describe.pl
9
+ RPM_WORKSPACE := $(BUILDROOT)/build-rpm
10
+ RPM_DIR := $(RPM_WORKSPACE)/
11
+ RPM_VER := $(shell $(GITPARSE) --rpm-ver --input $(REVDESCRIBE))
12
+ RPM_REL := $(shell $(GITPARSE) --rpm-rel --input $(REVDESCRIBE))
13
+ TAR_VERSION := $(shell $(GITPARSE) --tar --input $(REVDESCRIBE))
14
+
15
+ EXTRA_RPMDEFS :=
16
+
17
+ dist-rpm: dist
18
+ rm -rf $(RPM_WORKSPACE)
19
+ mkdir -p $(RPM_DIR)
20
+ mkdir $(RPM_DIR)/SOURCES
21
+ mkdir $(RPM_DIR)/BUILD
22
+ mkdir $(RPM_DIR)/RPMS
23
+ mkdir $(RPM_DIR)/SRPMS
24
+ cp $(BUILDROOT)/$(PACKAGE)-$(TAR_VERSION).tar.gz $(RPM_DIR)/SOURCES
25
+ sed \
26
+ 's/@VERSION@/$(RPM_VER)/g;s/@RELEASE@/$(RPM_REL)/g;s/@TARREDAS@/libcouchbase-$(TAR_VERSION)/g' \
27
+ < packaging/rpm/$(PACKAGE).spec.in > $(RPM_WORKSPACE)/$(PACKAGE).spec
28
+
29
+ (cd $(RPM_WORKSPACE) && \
30
+ rpmbuild ${RPM_FLAGS} -ba \
31
+ --define "_topdir $(RPM_DIR)" \
32
+ --define "_source_filedigest_algorithm md5" \
33
+ --define "_binary_filedigest_algorithm md5" \
34
+ $(EXTRA_RPMDEFS) \
35
+ $(PACKAGE).spec \
36
+ )
37
+
38
+ mv $(RPM_DIR)/RPMS/*/*.rpm $(BUILDROOT)
39
+ mv $(RPM_DIR)/SRPMS/*.rpm $(BUILDROOT)
40
+ rm -rf $(RPM_WORKSPACE)
@@ -0,0 +1,9 @@
1
+ IF(WIN32)
2
+ INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/contrib/win32-defs)
3
+ ADD_LIBRARY(couchbase_iocp OBJECT
4
+ iocp_iops.c
5
+ iocp_loop.c
6
+ iocp_timer.c
7
+ iocp_util.c)
8
+ ADD_DEFINITIONS(-DLIBCOUCHBASE_INTERNAL=1)
9
+ ENDIF(WIN32)
@@ -0,0 +1,466 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2013 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * New-Style v1 plugin for Windows, Using IOCP
20
+ * @author Mark Nunberg
21
+ */
22
+
23
+ #include "iocp_iops.h"
24
+ #include <stdio.h>
25
+ #include <stdlib.h>
26
+ static int
27
+ start_write(lcb_io_opt_t iobase, lcb_sockdata_t *sockbase,
28
+ struct lcb_iovec_st *iov, lcb_size_t niov, void *uarg,
29
+ lcb_ioC_write2_callback callback)
30
+ {
31
+ iocp_t *io = (iocp_t *)iobase;
32
+ iocp_write_t *w;
33
+ iocp_sockdata_t *sd = (iocp_sockdata_t *)sockbase;
34
+ int rv;
35
+ DWORD dwNbytes;
36
+
37
+ /** Figure out which w we should use */
38
+ if (sd->w_info.state == IOCP_WRITEBUF_AVAILABLE) {
39
+ w = &sd->w_info;
40
+ w->state = IOCP_WRITEBUF_INUSE;
41
+ memset(&w->ol_write.base, 0, sizeof(w->ol_write.base));
42
+ } else {
43
+ w = calloc(1, sizeof(*w));
44
+ assert(w);
45
+ if (!w) { iobase->v.v2.error = WSA_NOT_ENOUGH_MEMORY; return -1; }
46
+
47
+ w->state = IOCP_WRITEBUF_ALLOCATED;
48
+ w->ol_write.action = LCBIOCP_ACTION_WRITE;
49
+ w->ol_write.sd = sd;
50
+ }
51
+
52
+ w->cb = callback;
53
+ w->uarg = uarg;
54
+
55
+ /* nbytes is ignored here, but mandatory for WSASend() */
56
+ rv = WSASend(sd->sSocket, (WSABUF *)iov, niov, &dwNbytes,
57
+ 0 /* Flags */, (OVERLAPPED *)&w->ol_write, NULL /* IOCP Callback */);
58
+ rv = iocp_just_scheduled(io, &w->ol_write, rv);
59
+ /* TODO: if write completes immediately, maybe return a special code */
60
+ return rv;
61
+ }
62
+
63
+ static int
64
+ start_read(lcb_io_opt_t iobase, lcb_sockdata_t *sockbase,
65
+ lcb_IOV *iov, lcb_size_t niov, void *uarg,
66
+ lcb_ioC_read2_callback callback)
67
+ {
68
+ int rv;
69
+ DWORD flags = 0, dwNbytes;
70
+ iocp_t *io = (iocp_t *)iobase;
71
+ iocp_sockdata_t *sd = (iocp_sockdata_t *)sockbase;
72
+ struct lcb_buf_info *bi = &sockbase->read_buffer;
73
+
74
+ IOCP_LOG(IOCP_DEBUG, "Read Requested..");
75
+ sd->ol_read.action = LCBIOCP_ACTION_READ;
76
+ sd->rdcb = callback;
77
+ sd->rdarg = uarg;
78
+
79
+ /** Remove the leftover bits */
80
+ ZeroMemory(&sd->ol_read.base, sizeof(OVERLAPPED));
81
+
82
+ /* nbytes and flags, required as an argument, but unused in our code */
83
+ rv = WSARecv(sd->sSocket, (WSABUF *)iov, niov, &dwNbytes,
84
+ &flags, (OVERLAPPED *)&sd->ol_read, NULL);
85
+
86
+ return iocp_just_scheduled(io, &sd->ol_read, rv);
87
+ }
88
+
89
+ static int
90
+ start_connect(lcb_io_opt_t iobase, lcb_sockdata_t *sdbase,
91
+ const struct sockaddr *name, unsigned int namelen,
92
+ lcb_io_connect_cb callback)
93
+ {
94
+ /* In order to use ConnectEx(), the socket must be bound. */
95
+ union { struct sockaddr_in in4; struct sockaddr_in6 in6; } u_addr;
96
+ BOOL result;
97
+ LPFN_CONNECTEX pConnectEx;
98
+ iocp_t *io = (iocp_t *)iobase;
99
+ iocp_sockdata_t *sd = (iocp_sockdata_t *)sdbase;
100
+ iocp_connect_t *conn;
101
+
102
+ conn = calloc(1, sizeof(*conn));
103
+
104
+ assert(conn);
105
+ if (conn == NULL) { iobase->v.v2.error = WSA_NOT_ENOUGH_MEMORY; return -1; }
106
+
107
+ conn->cb = callback;
108
+ conn->ol_conn.sd = sd;
109
+ conn->ol_conn.action = LCBIOCP_ACTION_CONNECT;
110
+ IOCP_LOG(IOCP_INFO, "Connnection OL=%p", &conn->ol_conn);
111
+
112
+ memset(&u_addr, 0, sizeof(u_addr));
113
+ if (namelen == sizeof(u_addr.in4)) {
114
+ u_addr.in4.sin_family = AF_INET;
115
+ } else if (namelen == sizeof(u_addr.in6)) {
116
+ u_addr.in6.sin6_family = AF_INET6;
117
+ } else {
118
+ free(conn);
119
+ iobase->v.v2.error = WSAEINVAL;
120
+ return -1;
121
+ }
122
+
123
+ if (bind(sd->sSocket, (const struct sockaddr *)&u_addr, namelen) != 0) {
124
+ iocp_set_last_error(iobase, sd->sSocket);
125
+ free(conn);
126
+ return -1;
127
+ }
128
+
129
+ pConnectEx = iocp_initialize_connectex(sd->sSocket);
130
+ if (!pConnectEx) {
131
+ iocp_set_last_error(iobase, INVALID_SOCKET);
132
+ return -1;
133
+ }
134
+
135
+ result = pConnectEx(sd->sSocket, name, namelen,
136
+ NULL, 0, NULL, /* Optional buffer and length to send when connected. (unused)*/
137
+ (OVERLAPPED *)conn);
138
+
139
+ /** Other functions return 0 to indicate success. Here it's the opposite */
140
+ return iocp_just_scheduled(io, &conn->ol_conn, result == TRUE ? 0 : -1);
141
+ }
142
+
143
+ static lcb_sockdata_t *
144
+ create_socket(lcb_io_opt_t iobase, int domain, int type, int protocol)
145
+ {
146
+ iocp_t *io = (iocp_t *)iobase;
147
+ HANDLE hResult;
148
+ SOCKET s;
149
+ iocp_sockdata_t *sd;
150
+
151
+ sd = calloc(1, sizeof(*sd));
152
+ if (sd == NULL) {
153
+ return NULL;
154
+ }
155
+
156
+ /* We need to use WSASocket to set the WSA_FLAG_OVERLAPPED option */
157
+ s = WSASocket(domain, type, protocol,
158
+ NULL /* protocol info */, 0 /* "Group" */,
159
+ WSA_FLAG_OVERLAPPED);
160
+
161
+ if (s == INVALID_SOCKET) {
162
+ iocp_set_last_error(iobase, s);
163
+ free(sd);
164
+ return NULL;
165
+ }
166
+
167
+ /**
168
+ * Disable the send buffer. This ensures a callback is invoked.
169
+ * If this is not set, the send operation may complete immediately
170
+ * and our operations may never be queued. The KB article says we should
171
+ * ensure multiple write requests are batched into a single operation, which
172
+ * is something we already do :)
173
+ *
174
+ * See http://support.microsoft.com/kb/181611 for details.
175
+ * Disabled currently until we can get actual benchmark numbers
176
+ */
177
+ if (0) {
178
+ int optval = 0, rv;
179
+ rv = setsockopt(s, SOL_SOCKET, SO_SNDBUF, (const char*)&optval, sizeof optval);
180
+ }
181
+
182
+ hResult = CreateIoCompletionPort((HANDLE)s,
183
+ io->hCompletionPort, (ULONG_PTR)sd, 0 /* nthreads */);
184
+
185
+ if (hResult == NULL) {
186
+ iocp_set_last_error(iobase, s);
187
+ closesocket(s);
188
+ free(sd);
189
+ return NULL;
190
+ }
191
+
192
+ sd->ol_read.sd = sd;
193
+ sd->refcount = 1;
194
+ sd->sSocket = s;
195
+ sd->sd_base.socket = s; /* Informational, used in tests */
196
+
197
+ /** Initialize the write structure */
198
+ sd->w_info.ol_write.sd = sd;
199
+ sd->w_info.state = IOCP_WRITEBUF_AVAILABLE;
200
+ sd->w_info.ol_write.action = LCBIOCP_ACTION_WRITE;
201
+
202
+ lcb_list_append(&io->sockets, &sd->list);
203
+
204
+ return &sd->sd_base;
205
+ }
206
+
207
+ static unsigned int
208
+ close_socket(lcb_io_opt_t iobase, lcb_sockdata_t *sockbase)
209
+ {
210
+ iocp_sockdata_t *sd = (iocp_sockdata_t *)sockbase;
211
+
212
+ if (sd->sSocket != INVALID_SOCKET) {
213
+ closesocket(sd->sSocket);
214
+ sd->sSocket = INVALID_SOCKET;
215
+ }
216
+ iocp_socket_decref((iocp_t *)iobase, sd);
217
+ return 0;
218
+ }
219
+
220
+ static int
221
+ sock_nameinfo(lcb_io_opt_t iobase,
222
+ lcb_sockdata_t *sockbase, struct lcb_nameinfo_st *ni)
223
+ {
224
+ iocp_sockdata_t *sd = (iocp_sockdata_t *)sockbase;
225
+ getsockname(sd->sSocket, ni->local.name, ni->local.len);
226
+ getpeername(sd->sSocket, ni->remote.name, ni->remote.len);
227
+ return 0;
228
+ }
229
+
230
+ static void *
231
+ create_timer(lcb_io_opt_t iobase)
232
+ {
233
+ (void)iobase; return calloc(1, sizeof(iocp_timer_t));
234
+ }
235
+
236
+ static void
237
+ delete_timer(lcb_io_opt_t iobase, void *opaque)
238
+ {
239
+ iocp_timer_t *tmr = (iocp_timer_t *)opaque;
240
+ iocp_t *io = (iocp_t *)iobase;
241
+ if (tmr->is_active) {
242
+ tmr->is_active = 0;
243
+ iocp_tmq_del(&io->timer_queue.list, tmr);
244
+ }
245
+ }
246
+
247
+ static int
248
+ update_timer(lcb_io_opt_t iobase, void *opaque, lcb_U32 usec, void *arg,
249
+ lcb_ioE_callback cb)
250
+ {
251
+ iocp_t *io = (iocp_t *)iobase;
252
+ iocp_timer_t *tmr = (iocp_timer_t *)opaque;
253
+ lcb_U64 now;
254
+
255
+ if (tmr->is_active) {
256
+ iocp_tmq_del(&io->timer_queue.list, tmr);
257
+ }
258
+
259
+ tmr->cb = cb;
260
+ tmr->arg = arg;
261
+ tmr->is_active = 1;
262
+ now = iocp_millis();
263
+ tmr->ms = now + (usec / 1000);
264
+ iocp_tmq_add(&io->timer_queue.list, tmr);
265
+ return 0;
266
+ }
267
+
268
+ static void
269
+ destroy_timer(lcb_io_opt_t iobase, void *opaque)
270
+ {
271
+ free(opaque);
272
+ (void)iobase;
273
+ }
274
+
275
+ static int
276
+ set_nbio(SOCKET s, u_long mode)
277
+ {
278
+ int rv;
279
+ rv = ioctlsocket(s, FIONBIO, &mode);
280
+ if (rv == 0) {
281
+ return 0;
282
+ } else {
283
+ fprintf(stderr, "libcouchbase: ioctlsocket => %lu\n", WSAGetLastError());
284
+ return -1;
285
+ }
286
+ }
287
+
288
+ static int
289
+ check_closed(lcb_io_opt_t io, lcb_sockdata_t *sockbase, int flags)
290
+ {
291
+ int rv, err;
292
+ char buf;
293
+ iocp_sockdata_t *sd = (iocp_sockdata_t *)sockbase;
294
+ WSABUF iov;
295
+ DWORD dwReceived, dwFlags = MSG_PEEK;
296
+
297
+ /* Currently don't know if IOCP lets use use MSG_PEEK.
298
+ * On the one hand: "This flag is valid only for nonoverlapped sockets".
299
+ * On the other hand:
300
+ > If both lpOverlapped and lpCompletionRoutine are NULL, the socket
301
+ > in this function will be treated as a nonoverlapped socket.
302
+ *
303
+ * Source: http://msdn.microsoft.com/en-us/library/windows/desktop/ms741688(v=vs.85).aspx
304
+
305
+ * As a workaround for now, let's just disable this check if we are
306
+ * expecting unsolicited data. It is apparently legal to mix overlapped
307
+ * and non-overlapped calls.
308
+ */
309
+
310
+ if ((flags & LCB_IO_SOCKCHECK_PEND_IS_ERROR) == 0) {
311
+ return LCB_IO_SOCKCHECK_STATUS_UNKNOWN;
312
+ }
313
+
314
+ if (set_nbio(sd->sSocket, 1) != 0) {
315
+ return LCB_IO_SOCKCHECK_STATUS_UNKNOWN;
316
+ }
317
+
318
+ iov.buf = &buf;
319
+ iov.len = 1;
320
+ rv = WSARecv(sd->sSocket, &iov, 1, &dwReceived, &dwFlags, NULL, NULL);
321
+ err = WSAGetLastError();
322
+
323
+ if (set_nbio(sd->sSocket, 0) != 0) {
324
+ return LCB_IO_SOCKCHECK_STATUS_CLOSED;
325
+ }
326
+
327
+ if (rv == 0) {
328
+ return LCB_IO_SOCKCHECK_STATUS_CLOSED;
329
+ } else if (err == WSAEWOULDBLOCK) {
330
+ return LCB_IO_SOCKCHECK_STATUS_OK;
331
+ } else {
332
+ return LCB_IO_SOCKCHECK_STATUS_UNKNOWN;
333
+ }
334
+ }
335
+
336
+ static void
337
+ iops_dtor(lcb_io_opt_t iobase)
338
+ {
339
+ iocp_t *io = (iocp_t *)iobase;
340
+ lcb_list_t *cur;
341
+
342
+ /** Close all sockets first so we can get events for them */
343
+ LCB_LIST_FOR(cur, &io->sockets) {
344
+ iocp_sockdata_t *sd;
345
+ sd = LCB_LIST_ITEM(cur, iocp_sockdata_t, list);
346
+ if (sd->sSocket != INVALID_SOCKET) {
347
+ closesocket(sd->sSocket);
348
+ sd->sSocket = INVALID_SOCKET;
349
+ }
350
+ }
351
+ /** Drain the queue. This should not block */
352
+ while (1) {
353
+ DWORD nbytes;
354
+ ULONG_PTR completionKey;
355
+ LPOVERLAPPED pOl;
356
+ iocp_sockdata_t *sd;
357
+ iocp_overlapped_t *ol;
358
+
359
+ GetQueuedCompletionStatus(io->hCompletionPort,
360
+ &nbytes, &completionKey, &pOl, 0 /* Timeout */);
361
+ sd = (iocp_sockdata_t *)completionKey;
362
+ ol = (iocp_overlapped_t *)pOl;
363
+
364
+ if (!ol) {
365
+ break;
366
+ }
367
+
368
+ if (ol->action == LCBIOCP_ACTION_CONNECT) {
369
+ free(ol);
370
+ } else if (ol->action == LCBIOCP_ACTION_WRITE) {
371
+ iocp_write_done(io, IOCP_WRITEOBJ_FROM_OVERLAPPED(ol), -1);
372
+ } else if (ol->action == LCBIOCP_ACTION_READ) {
373
+ io->base.v.v2.error = WSAECONNRESET;
374
+ sd->rdcb(&sd->sd_base, -1, sd->rdarg);
375
+ }
376
+ iocp_socket_decref(io, sd);
377
+ }
378
+
379
+ /* Destroy all remaining sockets */
380
+ LCB_LIST_FOR(cur, &io->sockets) {
381
+ iocp_sockdata_t *sd = LCB_LIST_ITEM(cur, iocp_sockdata_t, list);
382
+
383
+ IOCP_LOG(IOCP_WARN, "Leak detected in socket %p (%lu). Refcount=%d", sd, sd->sSocket, sd->refcount);
384
+ if (sd->sSocket != INVALID_SOCKET) {
385
+ closesocket(sd->sSocket);
386
+ sd->sSocket = INVALID_SOCKET;
387
+ }
388
+ }
389
+
390
+ if (io->hCompletionPort && CloseHandle(io->hCompletionPort)) {
391
+ IOCP_LOG(IOCP_ERR, "Couldn't CloseHandle: %d", GetLastError());
392
+ }
393
+ free(io);
394
+ }
395
+
396
+ static void
397
+ get_procs(int version, lcb_loop_procs *loop, lcb_timer_procs *timer,
398
+ lcb_bsd_procs *bsd, lcb_ev_procs *ev, lcb_completion_procs *iocp,
399
+ lcb_iomodel_t *model)
400
+ {
401
+ *model = LCB_IOMODEL_COMPLETION;
402
+
403
+ loop->start = iocp_run;
404
+ loop->stop = iocp_stop;
405
+
406
+ iocp->connect = start_connect;
407
+ iocp->read2 = start_read;
408
+ iocp->write2 = start_write;
409
+ iocp->socket = create_socket;
410
+ iocp->close = close_socket;
411
+ iocp->nameinfo = sock_nameinfo;
412
+ iocp->is_closed = check_closed;
413
+
414
+ timer->create = create_timer;
415
+ timer->cancel = delete_timer;
416
+ timer->schedule = update_timer;
417
+ timer->destroy = destroy_timer;
418
+ (void)ev;
419
+ (void)bsd;
420
+ }
421
+
422
+ LIBCOUCHBASE_API
423
+ lcb_error_t lcb_iocp_new_iops(int version, lcb_io_opt_t *ioret, void *arg)
424
+ {
425
+ iocp_t *io;
426
+ lcb_io_opt_t tbl;
427
+
428
+ io = calloc(1, sizeof(*io));
429
+ if (!io) {
430
+ return LCB_CLIENT_ENOMEM;
431
+ }
432
+
433
+ /** These functions check if they were called more than once using atomic ops */
434
+ iocp_initialize_loop_globals();
435
+ lcb_list_init(&io->timer_queue.list);
436
+ lcb_list_init(&io->sockets);
437
+
438
+ tbl = &io->base;
439
+ *ioret = tbl;
440
+
441
+ io->breakout = TRUE;
442
+
443
+ /** Create IOCP */
444
+ io->hCompletionPort = CreateIoCompletionPort(
445
+ INVALID_HANDLE_VALUE, NULL, 0, 0);
446
+
447
+ if (!io->hCompletionPort) {
448
+ return LCB_EINTERNAL;
449
+ }
450
+
451
+ tbl->destructor = iops_dtor;
452
+ tbl->version = 2;
453
+ tbl->v.v2.get_procs = get_procs;
454
+
455
+ (void)version;
456
+ (void)arg;
457
+
458
+ return LCB_SUCCESS;
459
+ }
460
+
461
+ LIBCOUCHBASE_API
462
+ struct lcb_io_opt_st *lcb_create_iocp_io_opts(void) {
463
+ struct lcb_io_opt_st *ret;
464
+ lcb_iocp_new_iops(0, &ret, NULL);
465
+ return ret;
466
+ }