libcouchbase 1.2.8 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -4
  3. data/README.md +16 -8
  4. data/ext/libcouchbase/CMakeLists.txt +34 -32
  5. data/ext/libcouchbase/RELEASE_NOTES.markdown +277 -6
  6. data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +14 -0
  7. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +2 -0
  8. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +2 -1
  9. data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +2 -0
  10. data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +8 -1
  11. data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +3 -3
  12. data/ext/libcouchbase/cmake/config-cmake.h.in +14 -0
  13. data/ext/libcouchbase/cmake/configure +8 -26
  14. data/ext/libcouchbase/cmake/defs.mk.in +2 -2
  15. data/ext/libcouchbase/cmake/libcouchbase.stp.in +829 -0
  16. data/ext/libcouchbase/cmake/source_files.cmake +11 -2
  17. data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +18 -2
  18. data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +44 -2
  19. data/ext/libcouchbase/contrib/cbsasl/src/client.c +285 -73
  20. data/ext/libcouchbase/contrib/cbsasl/src/common.c +4 -0
  21. data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.c +500 -0
  22. data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.h +99 -0
  23. data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +1 -1
  24. data/ext/libcouchbase/contrib/cliopts/cliopts.h +14 -1
  25. data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +2 -3
  26. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +4 -0
  27. data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +7 -5
  28. data/ext/libcouchbase/contrib/snappy/snappy.cc +7 -2
  29. data/ext/libcouchbase/example/crypto/.gitignore +2 -0
  30. data/ext/libcouchbase/example/crypto/Makefile +13 -0
  31. data/ext/libcouchbase/example/crypto/common_provider.c +24 -0
  32. data/ext/libcouchbase/example/crypto/common_provider.h +31 -0
  33. data/ext/libcouchbase/example/crypto/openssl_symmetric_decrypt.c +139 -0
  34. data/ext/libcouchbase/example/crypto/openssl_symmetric_encrypt.c +147 -0
  35. data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.c +281 -0
  36. data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.h +29 -0
  37. data/ext/libcouchbase/example/tracing/.gitignore +2 -0
  38. data/ext/libcouchbase/example/tracing/Makefile +8 -0
  39. data/ext/libcouchbase/example/tracing/cJSON.c +1 -0
  40. data/ext/libcouchbase/example/tracing/cJSON.h +1 -0
  41. data/ext/libcouchbase/example/tracing/tracing.c +439 -0
  42. data/ext/libcouchbase/example/tracing/views.c +444 -0
  43. data/ext/libcouchbase/include/libcouchbase/auth.h +56 -4
  44. data/ext/libcouchbase/include/libcouchbase/cbft.h +8 -0
  45. data/ext/libcouchbase/include/libcouchbase/cntl-private.h +55 -1
  46. data/ext/libcouchbase/include/libcouchbase/cntl.h +101 -1
  47. data/ext/libcouchbase/include/libcouchbase/configuration.h.in +6 -0
  48. data/ext/libcouchbase/include/libcouchbase/couchbase.h +109 -6
  49. data/ext/libcouchbase/include/libcouchbase/crypto.h +140 -0
  50. data/ext/libcouchbase/include/libcouchbase/error.h +38 -2
  51. data/ext/libcouchbase/include/libcouchbase/kvbuf.h +6 -1
  52. data/ext/libcouchbase/include/libcouchbase/metrics.h +79 -0
  53. data/ext/libcouchbase/include/libcouchbase/n1ql.h +9 -0
  54. data/ext/libcouchbase/include/libcouchbase/tracing.h +319 -0
  55. data/ext/libcouchbase/include/libcouchbase/vbucket.h +1 -1
  56. data/ext/libcouchbase/include/libcouchbase/views.h +8 -0
  57. data/ext/libcouchbase/include/memcached/protocol_binary.h +40 -10
  58. data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +6 -14
  59. data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +3 -0
  60. data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +1 -0
  61. data/ext/libcouchbase/plugins/io/select/plugin-select.c +4 -1
  62. data/ext/libcouchbase/src/auth-priv.h +36 -4
  63. data/ext/libcouchbase/src/auth.cc +66 -27
  64. data/ext/libcouchbase/src/bootstrap.cc +1 -1
  65. data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +12 -7
  66. data/ext/libcouchbase/src/bucketconfig/bc_http.cc +26 -17
  67. data/ext/libcouchbase/src/bucketconfig/bc_http.h +1 -1
  68. data/ext/libcouchbase/src/bucketconfig/clconfig.h +4 -2
  69. data/ext/libcouchbase/src/bucketconfig/confmon.cc +6 -3
  70. data/ext/libcouchbase/src/cbft.cc +48 -0
  71. data/ext/libcouchbase/src/cntl.cc +138 -2
  72. data/ext/libcouchbase/src/config_static.h +17 -0
  73. data/ext/libcouchbase/src/connspec.cc +54 -6
  74. data/ext/libcouchbase/src/connspec.h +9 -1
  75. data/ext/libcouchbase/src/crypto.cc +386 -0
  76. data/ext/libcouchbase/src/ctx-log-inl.h +23 -6
  77. data/ext/libcouchbase/src/dump.cc +4 -0
  78. data/ext/libcouchbase/src/getconfig.cc +1 -2
  79. data/ext/libcouchbase/src/handler.cc +65 -27
  80. data/ext/libcouchbase/src/hostlist.cc +35 -7
  81. data/ext/libcouchbase/src/hostlist.h +7 -0
  82. data/ext/libcouchbase/src/http/http-priv.h +2 -0
  83. data/ext/libcouchbase/src/http/http.cc +77 -37
  84. data/ext/libcouchbase/src/http/http_io.cc +19 -2
  85. data/ext/libcouchbase/src/instance.cc +90 -17
  86. data/ext/libcouchbase/src/internal.h +5 -0
  87. data/ext/libcouchbase/src/lcbio/connect.cc +39 -4
  88. data/ext/libcouchbase/src/lcbio/connect.h +27 -0
  89. data/ext/libcouchbase/src/lcbio/ctx.c +49 -23
  90. data/ext/libcouchbase/src/lcbio/ioutils.cc +30 -3
  91. data/ext/libcouchbase/src/lcbio/ioutils.h +2 -0
  92. data/ext/libcouchbase/src/lcbio/manager.cc +44 -8
  93. data/ext/libcouchbase/src/lcbio/manager.h +2 -0
  94. data/ext/libcouchbase/src/lcbio/rw-inl.h +1 -0
  95. data/ext/libcouchbase/src/lcbio/ssl.h +3 -5
  96. data/ext/libcouchbase/src/logging.c +1 -1
  97. data/ext/libcouchbase/src/logging.h +2 -0
  98. data/ext/libcouchbase/src/mc/compress.cc +164 -0
  99. data/ext/libcouchbase/src/mc/compress.h +7 -12
  100. data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +5 -1
  101. data/ext/libcouchbase/src/mc/mcreq.c +11 -1
  102. data/ext/libcouchbase/src/mc/mcreq.h +35 -4
  103. data/ext/libcouchbase/src/mcserver/mcserver.cc +30 -7
  104. data/ext/libcouchbase/src/mcserver/mcserver.h +7 -0
  105. data/ext/libcouchbase/src/mcserver/negotiate.cc +103 -57
  106. data/ext/libcouchbase/src/mcserver/negotiate.h +2 -2
  107. data/ext/libcouchbase/src/mctx-helper.h +11 -0
  108. data/ext/libcouchbase/src/metrics.cc +132 -0
  109. data/ext/libcouchbase/src/n1ql/ixmgmt.cc +2 -1
  110. data/ext/libcouchbase/src/n1ql/n1ql.cc +66 -0
  111. data/ext/libcouchbase/src/newconfig.cc +9 -2
  112. data/ext/libcouchbase/src/operations/counter.cc +2 -1
  113. data/ext/libcouchbase/src/operations/durability-cas.cc +11 -0
  114. data/ext/libcouchbase/src/operations/durability-seqno.cc +3 -0
  115. data/ext/libcouchbase/src/operations/durability.cc +24 -2
  116. data/ext/libcouchbase/src/operations/durability_internal.h +19 -0
  117. data/ext/libcouchbase/src/operations/get.cc +4 -2
  118. data/ext/libcouchbase/src/operations/observe-seqno.cc +1 -0
  119. data/ext/libcouchbase/src/operations/observe.cc +113 -62
  120. data/ext/libcouchbase/src/operations/ping.cc +246 -67
  121. data/ext/libcouchbase/src/operations/remove.cc +2 -1
  122. data/ext/libcouchbase/src/operations/store.cc +17 -14
  123. data/ext/libcouchbase/src/operations/touch.cc +3 -0
  124. data/ext/libcouchbase/src/packetutils.h +68 -4
  125. data/ext/libcouchbase/src/probes.d +132 -161
  126. data/ext/libcouchbase/src/rdb/bigalloc.c +1 -1
  127. data/ext/libcouchbase/src/retryq.cc +6 -2
  128. data/ext/libcouchbase/src/rnd.cc +68 -0
  129. data/ext/libcouchbase/src/rnd.h +39 -0
  130. data/ext/libcouchbase/src/settings.c +27 -0
  131. data/ext/libcouchbase/src/settings.h +67 -3
  132. data/ext/libcouchbase/src/ssl/CMakeLists.txt +0 -12
  133. data/ext/libcouchbase/src/ssl/ssl_common.c +23 -4
  134. data/ext/libcouchbase/src/strcodecs/base64.c +141 -16
  135. data/ext/libcouchbase/src/strcodecs/strcodecs.h +16 -1
  136. data/ext/libcouchbase/src/trace.h +68 -61
  137. data/ext/libcouchbase/src/tracing/span.cc +289 -0
  138. data/ext/libcouchbase/src/tracing/threshold_logging_tracer.cc +171 -0
  139. data/ext/libcouchbase/src/tracing/tracer.cc +53 -0
  140. data/ext/libcouchbase/src/tracing/tracing-internal.h +213 -0
  141. data/ext/libcouchbase/src/utilities.c +5 -0
  142. data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -2
  143. data/ext/libcouchbase/src/vbucket/vbucket.c +50 -18
  144. data/ext/libcouchbase/src/views/docreq.cc +26 -1
  145. data/ext/libcouchbase/src/views/docreq.h +17 -0
  146. data/ext/libcouchbase/src/views/viewreq.cc +64 -1
  147. data/ext/libcouchbase/src/views/viewreq.h +21 -0
  148. data/ext/libcouchbase/tests/CMakeLists.txt +6 -6
  149. data/ext/libcouchbase/tests/basic/t_base64.cc +34 -6
  150. data/ext/libcouchbase/tests/basic/t_connstr.cc +14 -0
  151. data/ext/libcouchbase/tests/basic/t_creds.cc +10 -10
  152. data/ext/libcouchbase/tests/basic/t_host.cc +22 -2
  153. data/ext/libcouchbase/tests/basic/t_scram.cc +514 -0
  154. data/ext/libcouchbase/tests/check-all.cc +6 -2
  155. data/ext/libcouchbase/tests/iotests/mock-environment.cc +64 -0
  156. data/ext/libcouchbase/tests/iotests/mock-environment.h +27 -1
  157. data/ext/libcouchbase/tests/iotests/t_confmon.cc +2 -2
  158. data/ext/libcouchbase/tests/iotests/t_forward.cc +8 -0
  159. data/ext/libcouchbase/tests/iotests/t_netfail.cc +124 -0
  160. data/ext/libcouchbase/tests/iotests/t_smoke.cc +1 -1
  161. data/ext/libcouchbase/tests/iotests/t_snappy.cc +316 -0
  162. data/ext/libcouchbase/tests/socktests/socktest.cc +2 -2
  163. data/ext/libcouchbase/tests/socktests/t_basic.cc +6 -6
  164. data/ext/libcouchbase/tests/socktests/t_manager.cc +1 -1
  165. data/ext/libcouchbase/tests/socktests/t_ssl.cc +1 -1
  166. data/ext/libcouchbase/tools/CMakeLists.txt +1 -1
  167. data/ext/libcouchbase/tools/cbc-handlers.h +17 -0
  168. data/ext/libcouchbase/tools/cbc-n1qlback.cc +7 -4
  169. data/ext/libcouchbase/tools/cbc-pillowfight.cc +408 -100
  170. data/ext/libcouchbase/tools/cbc-proxy.cc +134 -3
  171. data/ext/libcouchbase/tools/cbc-subdoc.cc +1 -2
  172. data/ext/libcouchbase/tools/cbc.cc +113 -8
  173. data/ext/libcouchbase/tools/common/histogram.cc +1 -0
  174. data/ext/libcouchbase/tools/common/options.cc +28 -1
  175. data/ext/libcouchbase/tools/common/options.h +5 -0
  176. data/ext/libcouchbase/tools/docgen/docgen.h +36 -10
  177. data/ext/libcouchbase/tools/docgen/loc.h +5 -4
  178. data/ext/libcouchbase/tools/docgen/seqgen.h +28 -0
  179. data/lib/libcouchbase/ext/libcouchbase/enums.rb +10 -0
  180. data/lib/libcouchbase/n1ql.rb +6 -1
  181. data/lib/libcouchbase/version.rb +1 -1
  182. data/spec/connection_spec.rb +6 -6
  183. metadata +38 -5
  184. data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +0 -11
  185. data/ext/libcouchbase/src/mc/compress.c +0 -90
  186. data/ext/libcouchbase/tools/common/my_inttypes.h +0 -22
@@ -49,7 +49,8 @@ lcb_remove3(lcb_t instance, const void *cookie, const lcb_CMDREMOVE * cmd)
49
49
  pkt->u_rdata.reqdata.cookie = cookie;
50
50
  pkt->u_rdata.reqdata.start = gethrtime();
51
51
  memcpy(SPAN_BUFFER(&pkt->kh_span), hdr.bytes, sizeof(hdr.bytes));
52
- TRACE_REMOVE_BEGIN(&hdr, cmd);
52
+ LCBTRACE_KV_START(instance->settings, cmd, LCBTRACE_OP_REMOVE, pkt->opaque, pkt->u_rdata.reqdata.span);
53
+ TRACE_REMOVE_BEGIN(instance, &hdr, cmd);
53
54
  LCB_SCHED_ADD(instance, pl, pkt);
54
55
  return LCB_SUCCESS;
55
56
  }
@@ -73,6 +73,15 @@ handle_dur_storecb(mc_PIPELINE *, mc_PACKET *pkt,
73
73
  goto GT_BAIL;
74
74
  }
75
75
 
76
+ #ifdef LCB_TRACING
77
+ {
78
+ lcbtrace_SPAN *span = MCREQ_PKT_RDATA(pkt)->span;
79
+ if (span) {
80
+ mctx->setspan(mctx, span);
81
+ }
82
+ }
83
+ #endif
84
+
76
85
  lcbdurctx_set_durstore(mctx, 1);
77
86
  err = mctx->addcmd(mctx, (lcb_CMDBASE*)&dcmd);
78
87
  if (err != LCB_SUCCESS) {
@@ -149,19 +158,11 @@ get_esize_and_opcode(
149
158
 
150
159
 
151
160
  static int
152
- can_compress(lcb_t instance, const mc_PIPELINE *pipeline,
153
- const lcb_VALBUF *vbuf, lcb_datatype_t datatype)
161
+ can_compress(lcb_t instance, const mc_PIPELINE *pipeline, lcb_datatype_t datatype)
154
162
  {
155
163
  const lcb::Server *server = static_cast<const lcb::Server*>(pipeline);
156
164
  int compressopts = LCBT_SETTING(instance, compressopts);
157
165
 
158
- if (mcreq_compression_supported() == 0) {
159
- return 0;
160
- }
161
-
162
- if (vbuf->vtype != LCB_KV_COPY) {
163
- return 0;
164
- }
165
166
  if ((compressopts & LCB_COMPRESS_OUT) == 0) {
166
167
  return 0;
167
168
  }
@@ -243,9 +244,9 @@ do_store3(lcb_t instance, const void *cookie,
243
244
  return err;
244
245
  }
245
246
 
246
- should_compress = can_compress(instance, pipeline, vbuf, datatype);
247
+ should_compress = can_compress(instance, pipeline, datatype);
247
248
  if (should_compress) {
248
- int rv = mcreq_compress_value(pipeline, packet, &vbuf->u_buf.contig);
249
+ int rv = mcreq_compress_value(pipeline, packet, vbuf, instance->settings, &should_compress);
249
250
  if (rv != 0) {
250
251
  mcreq_release_packet(pipeline, packet);
251
252
  return LCB_CLIENT_ENOMEM;
@@ -260,7 +261,7 @@ do_store3(lcb_t instance, const void *cookie,
260
261
  const lcb_CMDSTOREDUR *dcmd = (const lcb_CMDSTOREDUR *)cmd;
261
262
  persist_u = dcmd->persist_to;
262
263
  replicate_u = dcmd->replicate_to;
263
- if (dcmd->replicate_to == -1 || dcmd->persist_to == -1) {
264
+ if (dcmd->replicate_to == (char)-1 || dcmd->persist_to == (char)-1) {
264
265
  duropts = LCB_DURABILITY_VALIDATE_CAPMAX;
265
266
  }
266
267
 
@@ -290,7 +291,8 @@ do_store3(lcb_t instance, const void *cookie,
290
291
  if (should_compress || (datatype & LCB_VALUE_F_SNAPPYCOMP)) {
291
292
  hdr->request.datatype |= PROTOCOL_BINARY_DATATYPE_COMPRESSED;
292
293
  }
293
- if (datatype & LCB_VALUE_F_JSON) {
294
+
295
+ if ((datatype & LCB_VALUE_F_JSON) && static_cast<const lcb::Server*>(pipeline)->supports_json()) {
294
296
  hdr->request.datatype |= PROTOCOL_BINARY_DATATYPE_JSON;
295
297
  }
296
298
 
@@ -301,7 +303,8 @@ do_store3(lcb_t instance, const void *cookie,
301
303
 
302
304
  memcpy(SPAN_BUFFER(&packet->kh_span), scmd.bytes, hsize);
303
305
  LCB_SCHED_ADD(instance, pipeline, packet);
304
- TRACE_STORE_BEGIN(hdr, (lcb_CMDSTORE* )cmd);
306
+ LCBTRACE_KV_START(instance->settings, cmd, LCBTRACE_OP_STORE2NAME(operation), packet->opaque, MCREQ_PKT_RDATA(packet)->span);
307
+ TRACE_STORE_BEGIN(instance, hdr, (lcb_CMDSTORE *)cmd);
305
308
  return LCB_SUCCESS;
306
309
  }
307
310
 
@@ -16,6 +16,7 @@
16
16
  */
17
17
 
18
18
  #include "internal.h"
19
+ #include "trace.h"
19
20
 
20
21
  LIBCOUCHBASE_API
21
22
  lcb_error_t
@@ -48,6 +49,8 @@ lcb_touch3(lcb_t instance, const void *cookie, const lcb_CMDTOUCH *cmd)
48
49
  pkt->u_rdata.reqdata.cookie = cookie;
49
50
  pkt->u_rdata.reqdata.start = gethrtime();
50
51
  LCB_SCHED_ADD(instance, pl, pkt);
52
+ LCBTRACE_KV_START(instance->settings, cmd, LCBTRACE_OP_TOUCH, pkt->opaque, pkt->u_rdata.reqdata.span);
53
+ TRACE_TOUCH_BEGIN(instance, hdr, cmd);
51
54
  return LCB_SUCCESS;
52
55
  }
53
56
 
@@ -28,6 +28,7 @@
28
28
  typedef struct packet_info_st packet_info;
29
29
  #else
30
30
  #include "contrib/lcb-jsoncpp/lcb-jsoncpp.h"
31
+ #include <math.h>
31
32
  namespace lcb {
32
33
  class Server;
33
34
 
@@ -124,18 +125,66 @@ public:
124
125
  return res.response.datatype;
125
126
  }
126
127
 
128
+ #define FRAMING_EXTRAS_TRACING 0x00
129
+ #if defined(_MSC_VER)
130
+ #define __lcb_round(d) ((d) > 0.0) ? ((d) + 0.5) : ((d) - 0.5)
131
+ #else
132
+ #define __lcb_round(d) round(d)
133
+ #endif
134
+
135
+ uint64_t duration() const {
136
+ if (ffextlen() == 0) {
137
+ return 0;
138
+ }
139
+
140
+ const char *end, *ptr;
141
+ ptr = ffext();
142
+ end = ptr + ffextlen();
143
+
144
+ for (; ptr < end;) {
145
+ uint8_t control = *ptr;
146
+ uint8_t id = control & 0xF0;
147
+ uint8_t len = control & 0x0F;
148
+ ptr++;
149
+ if (id == FRAMING_EXTRAS_TRACING && len == sizeof(uint16_t)) {
150
+ uint16_t encoded;
151
+ memcpy(&encoded, ptr, sizeof(uint16_t));
152
+ encoded = ntohs(encoded);
153
+ return (uint64_t)__lcb_round(pow(encoded, 1.74) / 2);
154
+ }
155
+ ptr += len;
156
+ }
157
+ return 0;
158
+ }
159
+
160
+ #undef __lcb_round
161
+
162
+ /**
163
+ * Gets a pointer starting at the packet's flexible framing ext field
164
+ */
165
+ const char *ffext() const {
166
+ return body<const char*>();
167
+ }
168
+
169
+ /**
170
+ * Gets a pointer starting at the packet's ext field.
171
+ */
172
+ const char *ext() const {
173
+ return body<const char*>() + ffextlen();
174
+ }
175
+
127
176
  /**
128
177
  * Gets a pointer starting at the packet's key field. Only use if NKEY is 0
129
178
  */
130
179
  const char *key() const {
131
- return body<const char*>() + extlen();
180
+ return body<const char*>() + extlen() + ffextlen();
132
181
  }
133
182
 
134
183
  /**
135
184
  * Gets a pointer starting at the packet's value field. Only use if NVALUE is 0
136
185
  */
137
186
  const char *value() const {
138
- return body<const char*>() + keylen() + extlen();
187
+ return body<const char*>() + keylen() + extlen() + ffextlen();
139
188
  }
140
189
 
141
190
  /**
@@ -143,7 +192,7 @@ public:
143
192
  * which is after the key (if applicable) and extras (if applicable).
144
193
  */
145
194
  uint32_t vallen() const {
146
- return bodylen() - (keylen() + extlen());
195
+ return bodylen() - (keylen() + extlen() + ffextlen());
147
196
  }
148
197
 
149
198
 
@@ -183,7 +232,11 @@ public:
183
232
  * Gets the key size, if included in the packet.
184
233
  */
185
234
  uint16_t keylen() const {
186
- return ntohs(res.response.keylen);
235
+ if (res.response.magic == PROTOCOL_BINARY_ARES) {
236
+ return (res.response.keylen >> 8) & 0xff;
237
+ } else {
238
+ return ntohs(res.response.keylen);
239
+ }
187
240
  }
188
241
 
189
242
  /**
@@ -193,6 +246,17 @@ public:
193
246
  return (res.response.extlen);
194
247
  }
195
248
 
249
+ /**
250
+ * Gets flexible framing extras length
251
+ */
252
+ uint8_t ffextlen() const {
253
+ if (res.response.magic == PROTOCOL_BINARY_ARES) {
254
+ return res.response.keylen & 0xff;
255
+ } else {
256
+ return 0;
257
+ }
258
+ }
259
+
196
260
  /**
197
261
  * Gets the raw unconverted 'opaque' 32 bit field
198
262
  */
@@ -1,6 +1,6 @@
1
1
  /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright 2012 Couchbase, Inc.
3
+ * Copyright 2012-2017 Couchbase, Inc.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
6
6
  * you may not use this file except in compliance with the License.
@@ -15,158 +15,112 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- provider libcouchbase {
19
- probe get_begin(uint32_t, /* opaque */
20
- uint16_t, /* vbucket */
21
- uint8_t, /* opcode (get, gat, getl) */
22
- const char*, /* key */
23
- size_t, /* nkey */
24
- uint32_t); /* expiration */
25
- probe get_end(uint32_t, /* opaque */
26
- uint16_t, /* vbucket */
27
- uint8_t, /* opcode (get, gat, getl) */
28
- uint16_t, /* return code (from libcouchbase) */
29
- const char*, /* key */
30
- size_t, /* nkey */
31
- const char*, /* bytes */
32
- size_t, /* nbytes */
33
- uint32_t, /* flags */
34
- uint64_t, /* cas */
35
- uint8_t); /* datatype */
18
+ provider libcouchbase
19
+ {
20
+ probe get_begin(void *, /* lcb_t */
21
+ uint32_t, /* opaque */
22
+ uint16_t, /* vbucket */
23
+ uint8_t, /* opcode (get, gat, getl) */
24
+ const char *, /* key */
25
+ size_t, /* nkey */
26
+ uint32_t); /* expiration */
27
+ probe get_end(void *, /* lcb_t */
28
+ uint32_t, /* opaque */
29
+ uint8_t, /* opcode (get, gat, getl) */
30
+ uint64_t, /* latency, ns */
31
+ uint16_t, /* return code (from libcouchbase) */
32
+ const char *, /* key */
33
+ size_t, /* nkey */
34
+ const char *, /* bytes */
35
+ size_t, /* nbytes */
36
+ uint32_t, /* flags */
37
+ uint64_t, /* cas */
38
+ uint8_t); /* datatype */
36
39
 
37
- probe unlock_begin(uint32_t, /* opaque */
38
- uint16_t, /* vbucket */
39
- uint8_t, /* opcode */
40
- const char*, /* key */
41
- size_t); /* nkey */
42
- probe unlock_end(uint32_t, /* opaque */
43
- uint16_t, /* vbucket */
44
- uint8_t, /* opcode */
45
- uint16_t, /* return code (from libcouchbase) */
46
- const char*, /* key */
47
- size_t); /* nkey */
40
+ probe unlock_begin(void *, /* lcb_t */
41
+ uint32_t, /* opaque */
42
+ uint16_t, /* vbucket */
43
+ uint8_t, /* opcode */
44
+ const char *, /* key */
45
+ size_t); /* nkey */
46
+ probe unlock_end(void *, /* lcb_t */
47
+ uint32_t, /* opaque */
48
+ uint8_t, /* opcode */
49
+ uint64_t, /* latency, ns */
50
+ uint16_t, /* return code (from libcouchbase) */
51
+ const char *, /* key */
52
+ size_t); /* nkey */
48
53
 
49
- probe store_begin(uint32_t, /* opaque */
54
+ probe store_begin(void *, /* lcb_t */
55
+ uint32_t, /* opaque */
50
56
  uint16_t, /* vbucket */
51
57
  uint8_t, /* opcode (set, add, replace, append, prepend) */
52
- const char*, /* key */
58
+ const char *, /* key */
53
59
  size_t, /* nkey */
54
- const char*, /* bytes */
60
+ const char *, /* bytes */
55
61
  size_t, /* nbytes */
56
62
  uint32_t, /* flags */
57
63
  uint64_t, /* cas */
58
64
  uint8_t, /* datatype */
59
65
  uint32_t); /* expiration */
60
- probe store_end(uint32_t, /* opaque */
61
- uint16_t, /* vbucket */
66
+ probe store_end(void *, /* lcb_t */
67
+ uint32_t, /* opaque */
62
68
  uint8_t, /* opcode (set, add, replace, append, prepend) */
69
+ uint64_t, /* latency, ns */
63
70
  uint16_t, /* return code (from libcouchbase) */
64
- const char*, /* key */
71
+ const char *, /* key */
65
72
  size_t, /* nkey */
66
73
  uint64_t); /* cas */
67
74
 
68
- probe arithmetic_begin(uint32_t, /* opaque */
69
- uint16_t, /* vbucket */
70
- uint8_t, /* opcode (increment, decrement) */
71
- const char*, /* key */
72
- size_t, /* nkey */
73
- uint64_t, /* delta */
74
- uint64_t, /* initial */
75
- uint32_t); /* expiration */
76
- probe arithmetic_end(uint32_t, /* opaque */
77
- uint16_t, /* vbucket */
78
- uint8_t, /* opcode (increment, decrement) */
79
- uint16_t, /* return code (from libcouchbase) */
80
- const char*, /* key */
81
- size_t, /* nkey */
82
- uint64_t, /* value */
83
- uint64_t); /* cas */
84
-
85
- probe touch_begin(uint32_t, /* opaque */
86
- uint16_t, /* vbucket */
87
- uint8_t, /* opcode */
88
- const char*, /* key */
89
- size_t, /* nkey */
90
- uint32_t); /* expiration */
91
- probe touch_end(uint32_t, /* opaque */
92
- uint16_t, /* vbucket */
93
- uint8_t, /* opcode */
94
- uint16_t, /* return code (from libcouchbase) */
95
- const char*, /* key */
96
- size_t, /* nkey */
97
- uint64_t); /* cas */
98
-
99
- probe remove_begin(uint32_t, /* opaque */
100
- uint16_t, /* vbucket */
101
- uint8_t, /* opcode */
102
- const char*, /* key */
103
- size_t); /* nkey */
104
- probe remove_end(uint32_t, /* opaque */
105
- uint16_t, /* vbucket */
106
- uint8_t, /* opcode */
107
- uint16_t, /* return code (from libcouchbase) */
108
- const char*, /* key */
109
- size_t, /* nkey */
110
- uint64_t); /* cas */
75
+ probe arithmetic_begin(void *, /* lcb_t */
76
+ uint32_t, /* opaque */
77
+ uint16_t, /* vbucket */
78
+ uint8_t, /* opcode (increment, decrement) */
79
+ const char *, /* key */
80
+ size_t, /* nkey */
81
+ uint64_t, /* delta */
82
+ uint64_t, /* initial */
83
+ uint32_t); /* expiration */
84
+ probe arithmetic_end(void *, /* lcb_t */
85
+ uint32_t, /* opaque */
86
+ uint8_t, /* opcode (increment, decrement) */
87
+ uint64_t, /* latency, ns */
88
+ uint16_t, /* return code (from libcouchbase) */
89
+ const char *, /* key */
90
+ size_t, /* nkey */
91
+ uint64_t, /* value */
92
+ uint64_t); /* cas */
111
93
 
112
- probe flush_begin(uint32_t, /* opaque */
113
- uint16_t, /* vbucket */
114
- uint8_t, /* opcode */
115
- const char*); /* server_endpoint */
116
- probe flush_progress(uint32_t, /* opaque */
117
- uint16_t, /* vbucket */
118
- uint8_t, /* opcode */
119
- uint16_t, /* return code (from libcouchbase) */
120
- const char*); /* server_endpoint */
121
- probe flush_end(uint32_t, /* opaque */
122
- uint16_t, /* vbucket */
123
- uint8_t, /* opcode */
124
- uint16_t); /* return code (from libcouchbase) */
125
-
126
- probe versions_begin(uint32_t, /* opaque */
127
- uint16_t, /* vbucket */
128
- uint8_t, /* opcode */
129
- const char*); /* server_endpoint */
130
- probe versions_progress(uint32_t, /* opaque */
131
- uint16_t, /* vbucket */
132
- uint8_t, /* opcode */
133
- uint16_t, /* return code (from libcouchbase) */
134
- const char*); /* server_endpoint */
135
- probe versions_end(uint32_t, /* opaque */
136
- uint16_t, /* vbucket */
137
- uint8_t, /* opcode */
138
- uint16_t); /* return code (from libcouchbase) */
139
-
140
- probe stats_begin(uint32_t, /* opaque */
94
+ probe touch_begin(void *, /* lcb_t */
95
+ uint32_t, /* opaque */
141
96
  uint16_t, /* vbucket */
142
97
  uint8_t, /* opcode */
143
- const char*, /* server_endpoint */
144
- const char*, /* arg */
145
- size_t); /* narg */
146
- probe stats_progress(uint32_t, /* opaque */
147
- uint16_t, /* vbucket */
148
- uint8_t, /* opcode */
149
- uint16_t, /* return code (from libcouchbase) */
150
- const char*, /* server_endpoint */
151
- const char*, /* key */
152
- size_t, /* nkey */
153
- const char*, /* bytes */
154
- size_t); /* nbytes */
155
- probe stats_end(uint32_t, /* opaque */
156
- uint16_t, /* vbucket */
157
- uint8_t, /* opcode */
158
- uint16_t); /* return code (from libcouchbase) */
98
+ const char *, /* key */
99
+ size_t, /* nkey */
100
+ uint32_t); /* expiration */
101
+ probe touch_end(void *, /* lcb_t */
102
+ uint32_t, /* opaque */
103
+ uint8_t, /* opcode */
104
+ uint64_t, /* latency, ns */
105
+ uint16_t, /* return code (from libcouchbase) */
106
+ const char *, /* key */
107
+ size_t, /* nkey */
108
+ uint64_t); /* cas */
159
109
 
160
- probe verbosity_begin(uint32_t, /* opaque */
161
- uint16_t, /* vbucket */
162
- uint8_t, /* opcode */
163
- const char*, /* server_endpoint */
164
- uint32_t); /* level */
165
- probe verbosity_end(uint32_t, /* opaque */
166
- uint16_t, /* vbucket */
167
- uint8_t, /* opcode */
168
- uint16_t, /* return code (from libcouchbase) */
169
- const char*); /* server_endpoint */
110
+ probe remove_begin(void *, /* lcb_t */
111
+ uint32_t, /* opaque */
112
+ uint16_t, /* vbucket */
113
+ uint8_t, /* opcode */
114
+ const char *, /* key */
115
+ size_t); /* nkey */
116
+ probe remove_end(void *, /* lcb_t */
117
+ uint32_t, /* opaque */
118
+ uint8_t, /* opcode */
119
+ uint64_t, /* latency, ns */
120
+ uint16_t, /* return code (from libcouchbase) */
121
+ const char *, /* key */
122
+ size_t, /* nkey */
123
+ uint64_t); /* cas */
170
124
 
171
125
  /*
172
126
  * OBSERVE_BEGIN probe intended to be parsed in the handler.
@@ -178,34 +132,51 @@ provider libcouchbase {
178
132
  * | vbucket | nkey | key | ...
179
133
  * +---------+---------+------------+----
180
134
  */
181
- probe observe_begin(uint32_t, /* opaque */
182
- uint16_t, /* vbucket */
183
- uint8_t, /* opcode */
184
- const char*, /* bytes */
185
- size_t); /* nbytes */
186
- probe observe_progress(uint32_t, /* opaque */
187
- uint16_t, /* vbucket */
188
- uint8_t, /* opcode */
189
- uint16_t, /* return code (from libcouchbase) */
190
- const char*, /* key */
191
- size_t, /* nkey */
192
- uint64_t, /* cas */
193
- uint8_t, /* observe status: FOUND = 0x00, PERSISTED = 0x01, NOT_FOUND = 0x80 */
194
- uint8_t, /* master (zero if from replica) */
195
- uint32_t, /* ttp, time to persist */
196
- uint32_t); /* ttr, time to replicate */
197
- probe observe_end(uint32_t, /* opaque */
198
- uint16_t, /* vbucket */
199
- uint8_t, /* opcode */
200
- uint16_t); /* return code (from libcouchbase) */
135
+ probe observe_begin(void *, /* lcb_t */
136
+ uint32_t, /* opaque */
137
+ uint8_t, /* opcode */
138
+ const char *, /* bytes */
139
+ size_t); /* nbytes */
140
+ probe observe_progress(void *, /* lcb_t */
141
+ uint32_t, /* opaque */
142
+ uint8_t, /* opcode */
143
+ uint64_t, /* latency, ns */
144
+ uint16_t, /* return code (from libcouchbase) */
145
+ const char *, /* key */
146
+ size_t, /* nkey */
147
+ uint64_t, /* cas */
148
+ uint8_t, /* observe status: FOUND = 0x00, PERSISTED = 0x01, NOT_FOUND = 0x80 */
149
+ uint8_t, /* master (zero if from replica) */
150
+ uint32_t, /* ttp, time to persist */
151
+ uint32_t); /* ttr, time to replicate */
152
+ probe observe_end(void *, /* lcb_t */
153
+ uint32_t, /* opaque */
154
+ uint8_t, /* opcode */
155
+ uint64_t, /* latency, ns */
156
+ uint16_t); /* return code (from libcouchbase) */
201
157
 
202
- probe http_begin(const char*, /* url */
203
- size_t, /* nurl */
204
- uint8_t); /* method: GET = 0, POST = 1, PUT = 2, DELETE = 3 */
205
- probe http_end(const char*, /* url */
206
- size_t, /* nurl */
207
- uint8_t, /* method: GET = 0, POST = 1, PUT = 2, DELETE = 3 */
158
+ probe http_begin(void *, /* lcb_t */
159
+ void *, /* pointer to request */
160
+ uint16_t, /* type */
161
+ uint16_t, /* method */
162
+ const char *, /* url */
163
+ const char *, /* host */
164
+ const char *); /* port */
165
+ probe http_end(void *, /* lcb */
166
+ void *, /* pointer to request */
167
+ uint16_t, /* type */
168
+ uint16_t, /* method */
169
+ const char *, /* url */
170
+ const char *, /* host */
171
+ const char *, /* port */
208
172
  uint16_t, /* return code (from libcouchbase) */
209
- uint16_t); /* HTTP status code or zero */
173
+ uint16_t, /* HTTP status code or zero */
174
+ uint64_t); /* latency, ns */
210
175
 
176
+ probe new_config(void *, /* lcb_t */
177
+ int32_t, /* revid */
178
+ const char*, /* bucket name */
179
+ const char*, /* bucket UUID */
180
+ const void* /* pointer to config */
181
+ );
211
182
  };