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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -4
- data/README.md +16 -8
- data/ext/libcouchbase/CMakeLists.txt +34 -32
- data/ext/libcouchbase/RELEASE_NOTES.markdown +277 -6
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +14 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +2 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +2 -1
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +2 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +8 -1
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +3 -3
- data/ext/libcouchbase/cmake/config-cmake.h.in +14 -0
- data/ext/libcouchbase/cmake/configure +8 -26
- data/ext/libcouchbase/cmake/defs.mk.in +2 -2
- data/ext/libcouchbase/cmake/libcouchbase.stp.in +829 -0
- data/ext/libcouchbase/cmake/source_files.cmake +11 -2
- data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +18 -2
- data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +44 -2
- data/ext/libcouchbase/contrib/cbsasl/src/client.c +285 -73
- data/ext/libcouchbase/contrib/cbsasl/src/common.c +4 -0
- data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.c +500 -0
- data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.h +99 -0
- data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +1 -1
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +14 -1
- data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +2 -3
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +4 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +7 -5
- data/ext/libcouchbase/contrib/snappy/snappy.cc +7 -2
- data/ext/libcouchbase/example/crypto/.gitignore +2 -0
- data/ext/libcouchbase/example/crypto/Makefile +13 -0
- data/ext/libcouchbase/example/crypto/common_provider.c +24 -0
- data/ext/libcouchbase/example/crypto/common_provider.h +31 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_decrypt.c +139 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_encrypt.c +147 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.c +281 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.h +29 -0
- data/ext/libcouchbase/example/tracing/.gitignore +2 -0
- data/ext/libcouchbase/example/tracing/Makefile +8 -0
- data/ext/libcouchbase/example/tracing/cJSON.c +1 -0
- data/ext/libcouchbase/example/tracing/cJSON.h +1 -0
- data/ext/libcouchbase/example/tracing/tracing.c +439 -0
- data/ext/libcouchbase/example/tracing/views.c +444 -0
- data/ext/libcouchbase/include/libcouchbase/auth.h +56 -4
- data/ext/libcouchbase/include/libcouchbase/cbft.h +8 -0
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +55 -1
- data/ext/libcouchbase/include/libcouchbase/cntl.h +101 -1
- data/ext/libcouchbase/include/libcouchbase/configuration.h.in +6 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +109 -6
- data/ext/libcouchbase/include/libcouchbase/crypto.h +140 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +38 -2
- data/ext/libcouchbase/include/libcouchbase/kvbuf.h +6 -1
- data/ext/libcouchbase/include/libcouchbase/metrics.h +79 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +9 -0
- data/ext/libcouchbase/include/libcouchbase/tracing.h +319 -0
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +1 -1
- data/ext/libcouchbase/include/libcouchbase/views.h +8 -0
- data/ext/libcouchbase/include/memcached/protocol_binary.h +40 -10
- data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +6 -14
- data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +3 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +1 -0
- data/ext/libcouchbase/plugins/io/select/plugin-select.c +4 -1
- data/ext/libcouchbase/src/auth-priv.h +36 -4
- data/ext/libcouchbase/src/auth.cc +66 -27
- data/ext/libcouchbase/src/bootstrap.cc +1 -1
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +12 -7
- data/ext/libcouchbase/src/bucketconfig/bc_http.cc +26 -17
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +1 -1
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +4 -2
- data/ext/libcouchbase/src/bucketconfig/confmon.cc +6 -3
- data/ext/libcouchbase/src/cbft.cc +48 -0
- data/ext/libcouchbase/src/cntl.cc +138 -2
- data/ext/libcouchbase/src/config_static.h +17 -0
- data/ext/libcouchbase/src/connspec.cc +54 -6
- data/ext/libcouchbase/src/connspec.h +9 -1
- data/ext/libcouchbase/src/crypto.cc +386 -0
- data/ext/libcouchbase/src/ctx-log-inl.h +23 -6
- data/ext/libcouchbase/src/dump.cc +4 -0
- data/ext/libcouchbase/src/getconfig.cc +1 -2
- data/ext/libcouchbase/src/handler.cc +65 -27
- data/ext/libcouchbase/src/hostlist.cc +35 -7
- data/ext/libcouchbase/src/hostlist.h +7 -0
- data/ext/libcouchbase/src/http/http-priv.h +2 -0
- data/ext/libcouchbase/src/http/http.cc +77 -37
- data/ext/libcouchbase/src/http/http_io.cc +19 -2
- data/ext/libcouchbase/src/instance.cc +90 -17
- data/ext/libcouchbase/src/internal.h +5 -0
- data/ext/libcouchbase/src/lcbio/connect.cc +39 -4
- data/ext/libcouchbase/src/lcbio/connect.h +27 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +49 -23
- data/ext/libcouchbase/src/lcbio/ioutils.cc +30 -3
- data/ext/libcouchbase/src/lcbio/ioutils.h +2 -0
- data/ext/libcouchbase/src/lcbio/manager.cc +44 -8
- data/ext/libcouchbase/src/lcbio/manager.h +2 -0
- data/ext/libcouchbase/src/lcbio/rw-inl.h +1 -0
- data/ext/libcouchbase/src/lcbio/ssl.h +3 -5
- data/ext/libcouchbase/src/logging.c +1 -1
- data/ext/libcouchbase/src/logging.h +2 -0
- data/ext/libcouchbase/src/mc/compress.cc +164 -0
- data/ext/libcouchbase/src/mc/compress.h +7 -12
- data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +5 -1
- data/ext/libcouchbase/src/mc/mcreq.c +11 -1
- data/ext/libcouchbase/src/mc/mcreq.h +35 -4
- data/ext/libcouchbase/src/mcserver/mcserver.cc +30 -7
- data/ext/libcouchbase/src/mcserver/mcserver.h +7 -0
- data/ext/libcouchbase/src/mcserver/negotiate.cc +103 -57
- data/ext/libcouchbase/src/mcserver/negotiate.h +2 -2
- data/ext/libcouchbase/src/mctx-helper.h +11 -0
- data/ext/libcouchbase/src/metrics.cc +132 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +2 -1
- data/ext/libcouchbase/src/n1ql/n1ql.cc +66 -0
- data/ext/libcouchbase/src/newconfig.cc +9 -2
- data/ext/libcouchbase/src/operations/counter.cc +2 -1
- data/ext/libcouchbase/src/operations/durability-cas.cc +11 -0
- data/ext/libcouchbase/src/operations/durability-seqno.cc +3 -0
- data/ext/libcouchbase/src/operations/durability.cc +24 -2
- data/ext/libcouchbase/src/operations/durability_internal.h +19 -0
- data/ext/libcouchbase/src/operations/get.cc +4 -2
- data/ext/libcouchbase/src/operations/observe-seqno.cc +1 -0
- data/ext/libcouchbase/src/operations/observe.cc +113 -62
- data/ext/libcouchbase/src/operations/ping.cc +246 -67
- data/ext/libcouchbase/src/operations/remove.cc +2 -1
- data/ext/libcouchbase/src/operations/store.cc +17 -14
- data/ext/libcouchbase/src/operations/touch.cc +3 -0
- data/ext/libcouchbase/src/packetutils.h +68 -4
- data/ext/libcouchbase/src/probes.d +132 -161
- data/ext/libcouchbase/src/rdb/bigalloc.c +1 -1
- data/ext/libcouchbase/src/retryq.cc +6 -2
- data/ext/libcouchbase/src/rnd.cc +68 -0
- data/ext/libcouchbase/src/rnd.h +39 -0
- data/ext/libcouchbase/src/settings.c +27 -0
- data/ext/libcouchbase/src/settings.h +67 -3
- data/ext/libcouchbase/src/ssl/CMakeLists.txt +0 -12
- data/ext/libcouchbase/src/ssl/ssl_common.c +23 -4
- data/ext/libcouchbase/src/strcodecs/base64.c +141 -16
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +16 -1
- data/ext/libcouchbase/src/trace.h +68 -61
- data/ext/libcouchbase/src/tracing/span.cc +289 -0
- data/ext/libcouchbase/src/tracing/threshold_logging_tracer.cc +171 -0
- data/ext/libcouchbase/src/tracing/tracer.cc +53 -0
- data/ext/libcouchbase/src/tracing/tracing-internal.h +213 -0
- data/ext/libcouchbase/src/utilities.c +5 -0
- data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -2
- data/ext/libcouchbase/src/vbucket/vbucket.c +50 -18
- data/ext/libcouchbase/src/views/docreq.cc +26 -1
- data/ext/libcouchbase/src/views/docreq.h +17 -0
- data/ext/libcouchbase/src/views/viewreq.cc +64 -1
- data/ext/libcouchbase/src/views/viewreq.h +21 -0
- data/ext/libcouchbase/tests/CMakeLists.txt +6 -6
- data/ext/libcouchbase/tests/basic/t_base64.cc +34 -6
- data/ext/libcouchbase/tests/basic/t_connstr.cc +14 -0
- data/ext/libcouchbase/tests/basic/t_creds.cc +10 -10
- data/ext/libcouchbase/tests/basic/t_host.cc +22 -2
- data/ext/libcouchbase/tests/basic/t_scram.cc +514 -0
- data/ext/libcouchbase/tests/check-all.cc +6 -2
- data/ext/libcouchbase/tests/iotests/mock-environment.cc +64 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.h +27 -1
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +2 -2
- data/ext/libcouchbase/tests/iotests/t_forward.cc +8 -0
- data/ext/libcouchbase/tests/iotests/t_netfail.cc +124 -0
- data/ext/libcouchbase/tests/iotests/t_smoke.cc +1 -1
- data/ext/libcouchbase/tests/iotests/t_snappy.cc +316 -0
- data/ext/libcouchbase/tests/socktests/socktest.cc +2 -2
- data/ext/libcouchbase/tests/socktests/t_basic.cc +6 -6
- data/ext/libcouchbase/tests/socktests/t_manager.cc +1 -1
- data/ext/libcouchbase/tests/socktests/t_ssl.cc +1 -1
- data/ext/libcouchbase/tools/CMakeLists.txt +1 -1
- data/ext/libcouchbase/tools/cbc-handlers.h +17 -0
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +7 -4
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +408 -100
- data/ext/libcouchbase/tools/cbc-proxy.cc +134 -3
- data/ext/libcouchbase/tools/cbc-subdoc.cc +1 -2
- data/ext/libcouchbase/tools/cbc.cc +113 -8
- data/ext/libcouchbase/tools/common/histogram.cc +1 -0
- data/ext/libcouchbase/tools/common/options.cc +28 -1
- data/ext/libcouchbase/tools/common/options.h +5 -0
- data/ext/libcouchbase/tools/docgen/docgen.h +36 -10
- data/ext/libcouchbase/tools/docgen/loc.h +5 -4
- data/ext/libcouchbase/tools/docgen/seqgen.h +28 -0
- data/lib/libcouchbase/ext/libcouchbase/enums.rb +10 -0
- data/lib/libcouchbase/n1ql.rb +6 -1
- data/lib/libcouchbase/version.rb +1 -1
- data/spec/connection_spec.rb +6 -6
- metadata +38 -5
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +0 -11
- data/ext/libcouchbase/src/mc/compress.c +0 -90
- data/ext/libcouchbase/tools/common/my_inttypes.h +0 -22
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
#include <lcbio/ssl.h>
|
|
23
23
|
#include "ctx-log-inl.h"
|
|
24
24
|
#define LOGARGS(ht, lvlbase) ht->parent->settings, "htconfig", LCB_LOG_##lvlbase, __FILE__, __LINE__
|
|
25
|
-
|
|
26
|
-
#define
|
|
25
|
+
|
|
26
|
+
#define LOGFMT CTX_LOGFMT
|
|
27
|
+
#define LOGID(p) CTX_LOGID(p->ioctx)
|
|
27
28
|
|
|
28
29
|
using namespace lcb::clconfig;
|
|
29
30
|
|
|
@@ -243,24 +244,31 @@ lcb_error_t HttpProvider::setup_request_header(const lcb_host_t &host) {
|
|
|
243
244
|
}
|
|
244
245
|
|
|
245
246
|
request_buf.append(" HTTP/1.1\r\n");
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
247
|
+
if (!settings().keypath) {
|
|
248
|
+
// not using SSL client certificate to authenticate
|
|
249
|
+
const std::string password = (settings().conntype == LCB_TYPE_BUCKET)
|
|
250
|
+
? settings().auth->password_for(host.host, host.port, settings().bucket)
|
|
251
|
+
: settings().auth->password();
|
|
252
|
+
if (!password.empty()) {
|
|
253
|
+
const std::string username = (settings().conntype == LCB_TYPE_BUCKET)
|
|
254
|
+
? settings().auth->username_for(host.host, host.port, settings().bucket)
|
|
255
|
+
: settings().auth->username();
|
|
256
|
+
std::string cred;
|
|
257
|
+
cred.append(username).append(":").append(password);
|
|
258
|
+
char b64[256] = { 0 };
|
|
259
|
+
if (lcb_base64_encode(cred.c_str(), cred.size(), b64, sizeof(b64)) == -1) {
|
|
260
|
+
return LCB_EINTERNAL;
|
|
261
|
+
}
|
|
262
|
+
request_buf.append("Authorization: Basic ").append(b64).append("\r\n");
|
|
258
263
|
}
|
|
259
|
-
request_buf.append("Authorization: Basic ").append(b64).append("\r\n");
|
|
260
264
|
}
|
|
261
265
|
|
|
262
266
|
request_buf.append("Host: ").append(host.host).append(":").append(host.port).append("\r\n");
|
|
263
|
-
request_buf.append("User-Agent:
|
|
267
|
+
request_buf.append("User-Agent: ").append(LCB_CLIENT_ID);
|
|
268
|
+
if (settings().client_string) {
|
|
269
|
+
request_buf.append(" ").append(settings().client_string);
|
|
270
|
+
}
|
|
271
|
+
request_buf.append("\r\n");
|
|
264
272
|
request_buf.append("\r\n");
|
|
265
273
|
return LCB_SUCCESS;
|
|
266
274
|
}
|
|
@@ -294,7 +302,7 @@ on_connected(lcbio_SOCKET *sock, void *arg, lcb_error_t err, lcbio_OSERR syserr)
|
|
|
294
302
|
return;
|
|
295
303
|
}
|
|
296
304
|
host = lcbio_get_host(sock);
|
|
297
|
-
lcb_log(LOGARGS(http, DEBUG), "Successfuly connected to REST API
|
|
305
|
+
lcb_log(LOGARGS(http, DEBUG), "Successfuly connected to REST API " LCB_HOST_FMT, LCB_HOST_ARG(http->parent->settings, host));
|
|
298
306
|
|
|
299
307
|
lcbio_sslify_if_needed(sock, http->parent->settings);
|
|
300
308
|
http->reset_stream_state();
|
|
@@ -310,6 +318,7 @@ on_connected(lcbio_SOCKET *sock, void *arg, lcb_error_t err, lcbio_OSERR syserr)
|
|
|
310
318
|
procs.cb_read = read_common;
|
|
311
319
|
http->ioctx = lcbio_ctx_new(sock, http, &procs);
|
|
312
320
|
http->ioctx->subsys = "bc_http";
|
|
321
|
+
sock->service = LCBIO_SERVICE_CFG;
|
|
313
322
|
|
|
314
323
|
lcbio_ctx_put(http->ioctx, http->request_buf.c_str(), http->request_buf.size());
|
|
315
324
|
lcbio_ctx_rwant(http->ioctx, 1);
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
|
|
35
35
|
#define REQPOOLS_URI "/pools/"
|
|
36
36
|
#define HOSTHDR_FMT "Host: %s:%s\r\n"
|
|
37
|
-
#define LAST_HTTP_HEADER "X-Libcouchbase: "
|
|
37
|
+
#define LAST_HTTP_HEADER "X-Libcouchbase: " LCB_CLIENT_ID "\r\n"
|
|
38
38
|
#define CONFIG_DELIMITER "\n\n\n\n"
|
|
39
39
|
|
|
40
40
|
namespace lcb {
|
|
@@ -164,7 +164,7 @@ struct Confmon {
|
|
|
164
164
|
* remain to be activated you should call lcb_confmon_prepare() once. Then
|
|
165
165
|
* call the rest of the functions.
|
|
166
166
|
*/
|
|
167
|
-
Confmon(lcb_settings*, lcbio_pTABLE iot);
|
|
167
|
+
Confmon(lcb_settings*, lcbio_pTABLE iot, lcb_t instance);
|
|
168
168
|
void destroy() { delete this; }
|
|
169
169
|
~Confmon();
|
|
170
170
|
|
|
@@ -383,10 +383,12 @@ struct Confmon {
|
|
|
383
383
|
int state;
|
|
384
384
|
|
|
385
385
|
/** Last time the provider was stopped. As a microsecond timestamp */
|
|
386
|
-
|
|
386
|
+
lcb_uint64_t last_stop_us;
|
|
387
387
|
|
|
388
388
|
typedef std::list<Provider*> ProviderList;
|
|
389
389
|
ProviderList active_providers;
|
|
390
|
+
|
|
391
|
+
lcb_t instance;
|
|
390
392
|
};
|
|
391
393
|
|
|
392
394
|
/**
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
#include "clconfig.h"
|
|
20
20
|
#include <list>
|
|
21
21
|
#include <algorithm>
|
|
22
|
+
#include "trace.h"
|
|
22
23
|
|
|
23
24
|
#define LOGARGS(mon, lvlbase) mon->settings, "confmon", LCB_LOG_##lvlbase, __FILE__, __LINE__
|
|
24
25
|
#define LOG(mon, lvlbase, msg) lcb_log(mon->settings, "confmon", LCB_LOG_##lvlbase, __FILE__, __LINE__, msg)
|
|
@@ -55,7 +56,7 @@ provider_string(Method type) {
|
|
|
55
56
|
return "";
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
Confmon::Confmon(lcb_settings *settings_, lcbio_pTABLE iot_)
|
|
59
|
+
Confmon::Confmon(lcb_settings *settings_, lcbio_pTABLE iot_, lcb_t instance_)
|
|
59
60
|
: cur_provider(NULL),
|
|
60
61
|
config(NULL),
|
|
61
62
|
settings(settings_),
|
|
@@ -64,7 +65,8 @@ Confmon::Confmon(lcb_settings *settings_, lcbio_pTABLE iot_)
|
|
|
64
65
|
as_start(iot_, this),
|
|
65
66
|
as_stop(iot_, this),
|
|
66
67
|
state(0),
|
|
67
|
-
last_stop_us(0)
|
|
68
|
+
last_stop_us(0),
|
|
69
|
+
instance(instance_) {
|
|
68
70
|
|
|
69
71
|
lcbio_table_ref(iot);
|
|
70
72
|
lcb_settings_ref(settings);
|
|
@@ -147,7 +149,7 @@ int Confmon::do_set_next(ConfigInfo *new_config, bool notify_miss)
|
|
|
147
149
|
ca = config->vbc;
|
|
148
150
|
cb = new_config->vbc;
|
|
149
151
|
|
|
150
|
-
lcb_log(LOGARGS(this,
|
|
152
|
+
lcb_log(LOGARGS(this, TRACE), "Not applying configuration received via %s. No changes detected. A.rev=%d, B.rev=%d", provider_string(new_config->get_origin()), ca->revid, cb->revid);
|
|
151
153
|
if (notify_miss) {
|
|
152
154
|
invoke_listeners(CLCONFIG_EVENT_GOT_ANY_CONFIG, new_config);
|
|
153
155
|
}
|
|
@@ -156,6 +158,7 @@ int Confmon::do_set_next(ConfigInfo *new_config, bool notify_miss)
|
|
|
156
158
|
}
|
|
157
159
|
|
|
158
160
|
lcb_log(LOGARGS(this, INFO), "Setting new configuration. Received via %s", provider_string(new_config->get_origin()));
|
|
161
|
+
TRACE_NEW_CONFIG(instance, new_config);
|
|
159
162
|
|
|
160
163
|
if (config) {
|
|
161
164
|
/** DECREF the old one */
|
|
@@ -36,6 +36,10 @@ struct lcb_FTSREQ : lcb::jsparse::Parser::Actions {
|
|
|
36
36
|
lcb_t instance;
|
|
37
37
|
size_t nrows;
|
|
38
38
|
lcb_error_t lasterr;
|
|
39
|
+
#ifdef LCB_TRACING
|
|
40
|
+
lcbtrace_SPAN *span;
|
|
41
|
+
#endif
|
|
42
|
+
|
|
39
43
|
void invoke_row(lcb_RESPFTS *resp);
|
|
40
44
|
void invoke_last();
|
|
41
45
|
|
|
@@ -116,6 +120,9 @@ lcb_FTSREQ::lcb_FTSREQ(lcb_t instance_, const void *cookie_, const lcb_CMDFTS *c
|
|
|
116
120
|
parser(new lcb::jsparse::Parser(lcb::jsparse::Parser::MODE_FTS, this)),
|
|
117
121
|
cookie(cookie_), callback(cmd->callback), instance(instance_), nrows(0),
|
|
118
122
|
lasterr(LCB_SUCCESS)
|
|
123
|
+
#ifdef LCB_TRACING
|
|
124
|
+
, span(NULL)
|
|
125
|
+
#endif
|
|
119
126
|
{
|
|
120
127
|
lcb_CMDHTTP htcmd = { 0 };
|
|
121
128
|
htcmd.type = LCB_HTTP_TYPE_FTS;
|
|
@@ -169,6 +176,15 @@ lcb_FTSREQ::lcb_FTSREQ(lcb_t instance_, const void *cookie_, const lcb_CMDFTS *c
|
|
|
169
176
|
if (cmd->handle) {
|
|
170
177
|
*cmd->handle = reinterpret_cast<lcb_FTSREQ*>(this);
|
|
171
178
|
}
|
|
179
|
+
#ifdef LCB_TRACING
|
|
180
|
+
if (instance->settings->tracer) {
|
|
181
|
+
char id[20] = {0};
|
|
182
|
+
snprintf(id, sizeof(id), "%p", (void *)this);
|
|
183
|
+
span = lcbtrace_span_start(instance->settings->tracer, LCBTRACE_OP_DISPATCH_TO_SERVER, LCBTRACE_NOW, NULL);
|
|
184
|
+
lcbtrace_span_add_tag_str(span, LCBTRACE_TAG_OPERATION_ID, id);
|
|
185
|
+
lcbtrace_span_add_system_tags(span, instance->settings, LCBTRACE_TAG_SERVICE_SEARCH);
|
|
186
|
+
}
|
|
187
|
+
#endif
|
|
172
188
|
}
|
|
173
189
|
}
|
|
174
190
|
|
|
@@ -178,6 +194,26 @@ lcb_FTSREQ::~lcb_FTSREQ()
|
|
|
178
194
|
lcb_cancel_http_request(instance, htreq);
|
|
179
195
|
htreq = NULL;
|
|
180
196
|
}
|
|
197
|
+
#ifdef LCB_TRACING
|
|
198
|
+
if (span) {
|
|
199
|
+
if (htreq) {
|
|
200
|
+
lcbio_CTX *ctx = htreq->ioctx;
|
|
201
|
+
if (ctx) {
|
|
202
|
+
std::string remote;
|
|
203
|
+
if (htreq->ipv6) {
|
|
204
|
+
remote = "[" + std::string(htreq->host) + "]:" + std::string(htreq->port);
|
|
205
|
+
} else {
|
|
206
|
+
remote = std::string(htreq->host) + ":" + std::string(htreq->port);
|
|
207
|
+
}
|
|
208
|
+
lcbtrace_span_add_tag_str(span, LCBTRACE_TAG_PEER_ADDRESS, remote.c_str());
|
|
209
|
+
lcbtrace_span_add_tag_str(span, LCBTRACE_TAG_LOCAL_ADDRESS,
|
|
210
|
+
lcbio__inet_ntop(&ctx->sock->info->sa_local).c_str());
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
lcbtrace_span_finish(span, LCBTRACE_NOW);
|
|
214
|
+
span = NULL;
|
|
215
|
+
}
|
|
216
|
+
#endif
|
|
181
217
|
if (parser) {
|
|
182
218
|
delete parser;
|
|
183
219
|
parser = NULL;
|
|
@@ -203,3 +239,15 @@ lcb_fts_cancel(lcb_t, lcb_FTSHANDLE handle)
|
|
|
203
239
|
{
|
|
204
240
|
handle->callback = NULL;
|
|
205
241
|
}
|
|
242
|
+
|
|
243
|
+
#ifdef LCB_TRACING
|
|
244
|
+
|
|
245
|
+
LIBCOUCHBASE_API
|
|
246
|
+
void lcb_fts_set_parent_span(lcb_t, lcb_FTSHANDLE handle, lcbtrace_SPAN *span)
|
|
247
|
+
{
|
|
248
|
+
if (handle) {
|
|
249
|
+
lcbtrace_span_set_parent(handle->span, span);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
#endif
|
|
@@ -82,6 +82,15 @@ static lcb_uint32_t *get_timeout_field(lcb_t instance, int cmd)
|
|
|
82
82
|
case LCB_CNTL_RETRY_INTERVAL: return &settings->retry_interval;
|
|
83
83
|
case LCB_CNTL_RETRY_NMV_INTERVAL: return &settings->retry_nmv_interval;
|
|
84
84
|
case LCB_CNTL_CONFIG_POLL_INTERVAL: return &settings->config_poll_interval;
|
|
85
|
+
#ifdef LCB_TRACING
|
|
86
|
+
case LCB_CNTL_TRACING_ORPHANED_QUEUE_FLUSH_INTERVAL: return &settings->tracer_orphaned_queue_flush_interval;
|
|
87
|
+
case LCB_CNTL_TRACING_THRESHOLD_QUEUE_FLUSH_INTERVAL: return &settings->tracer_threshold_queue_flush_interval;
|
|
88
|
+
case LCB_CNTL_TRACING_THRESHOLD_KV: return &settings->tracer_threshold[LCBTRACE_THRESHOLD_KV];
|
|
89
|
+
case LCB_CNTL_TRACING_THRESHOLD_N1QL: return &settings->tracer_threshold[LCBTRACE_THRESHOLD_N1QL];
|
|
90
|
+
case LCB_CNTL_TRACING_THRESHOLD_VIEW: return &settings->tracer_threshold[LCBTRACE_THRESHOLD_VIEW];
|
|
91
|
+
case LCB_CNTL_TRACING_THRESHOLD_FTS: return &settings->tracer_threshold[LCBTRACE_THRESHOLD_FTS];
|
|
92
|
+
case LCB_CNTL_TRACING_THRESHOLD_ANALYTICS: return &settings->tracer_threshold[LCBTRACE_THRESHOLD_ANALYTICS];
|
|
93
|
+
#endif
|
|
85
94
|
default: return NULL;
|
|
86
95
|
}
|
|
87
96
|
}
|
|
@@ -132,9 +141,15 @@ HANDLER(get_changeset) {
|
|
|
132
141
|
HANDLER(ssl_mode_handler) {
|
|
133
142
|
RETURN_GET_ONLY(int, LCBT_SETTING(instance, sslopts))
|
|
134
143
|
}
|
|
144
|
+
HANDLER(ssl_truststorepath_handler) {
|
|
145
|
+
RETURN_GET_ONLY(char*, LCBT_SETTING(instance, truststorepath))
|
|
146
|
+
}
|
|
135
147
|
HANDLER(ssl_certpath_handler) {
|
|
136
148
|
RETURN_GET_ONLY(char*, LCBT_SETTING(instance, certpath))
|
|
137
149
|
}
|
|
150
|
+
HANDLER(ssl_keypath_handler) {
|
|
151
|
+
RETURN_GET_ONLY(char*, LCBT_SETTING(instance, keypath))
|
|
152
|
+
}
|
|
138
153
|
HANDLER(htconfig_urltype_handler) {
|
|
139
154
|
RETURN_GET_SET(int, LCBT_SETTING(instance, bc_http_urltype));
|
|
140
155
|
}
|
|
@@ -168,6 +183,9 @@ HANDLER(schedflush_handler) {
|
|
|
168
183
|
HANDLER(vbguess_handler) {
|
|
169
184
|
RETURN_GET_SET(int, LCBT_SETTING(instance, keep_guess_vbs))
|
|
170
185
|
}
|
|
186
|
+
HANDLER(vb_noremap_handler) {
|
|
187
|
+
RETURN_GET_SET(int, LCBT_SETTING(instance, vb_noremap))
|
|
188
|
+
}
|
|
171
189
|
HANDLER(fetch_mutation_tokens_handler) {
|
|
172
190
|
RETURN_GET_SET(int, LCBT_SETTING(instance, fetch_mutation_tokens))
|
|
173
191
|
}
|
|
@@ -201,6 +219,35 @@ HANDLER(select_bucket_handler) {
|
|
|
201
219
|
HANDLER(send_hello_handler) {
|
|
202
220
|
RETURN_GET_SET(int, LCBT_SETTING(instance, send_hello));
|
|
203
221
|
}
|
|
222
|
+
HANDLER(log_redaction_handler) {
|
|
223
|
+
RETURN_GET_SET(int, LCBT_SETTING(instance, log_redaction));
|
|
224
|
+
}
|
|
225
|
+
HANDLER(enable_tracing_handler) {
|
|
226
|
+
RETURN_GET_SET(int, LCBT_SETTING(instance, use_tracing));
|
|
227
|
+
}
|
|
228
|
+
HANDLER(tracing_orphaned_queue_size_handler) {
|
|
229
|
+
#ifdef LCB_TRACING
|
|
230
|
+
RETURN_GET_SET(lcb_U32, LCBT_SETTING(instance, tracer_orphaned_queue_size));
|
|
231
|
+
#else
|
|
232
|
+
(void)mode;
|
|
233
|
+
(void)instance;
|
|
234
|
+
(void)cmd;
|
|
235
|
+
(void)arg;
|
|
236
|
+
return LCB_ECTL_BADARG;
|
|
237
|
+
#endif
|
|
238
|
+
}
|
|
239
|
+
HANDLER(tracing_threshold_queue_size_handler) {
|
|
240
|
+
#ifdef LCB_TRACING
|
|
241
|
+
RETURN_GET_SET(lcb_U32, LCBT_SETTING(instance, tracer_threshold_queue_size));
|
|
242
|
+
#else
|
|
243
|
+
(void)mode;
|
|
244
|
+
(void)instance;
|
|
245
|
+
(void)cmd;
|
|
246
|
+
(void)arg;
|
|
247
|
+
return LCB_ECTL_BADARG;
|
|
248
|
+
#endif
|
|
249
|
+
}
|
|
250
|
+
|
|
204
251
|
HANDLER(config_poll_interval_handler) {
|
|
205
252
|
lcb_U32 *user = reinterpret_cast<lcb_U32*>(arg);
|
|
206
253
|
if (mode == LCB_CNTL_SET && *user > 0 && *user < LCB_CONFIG_POLL_INTERVAL_FLOOR) {
|
|
@@ -528,6 +575,9 @@ HANDLER(n1ql_cache_clear_handler) {
|
|
|
528
575
|
HANDLER(bucket_auth_handler) {
|
|
529
576
|
const lcb_BUCKETCRED *cred;
|
|
530
577
|
if (mode == LCB_CNTL_SET) {
|
|
578
|
+
if (LCBT_SETTING(instance, keypath)) {
|
|
579
|
+
return LCB_ECTL_UNSUPPMODE;
|
|
580
|
+
}
|
|
531
581
|
/* Parse the bucket string... */
|
|
532
582
|
cred = (const lcb_BUCKETCRED *)arg;
|
|
533
583
|
return lcbauth_add_pass(instance->settings->auth, (*cred)[0], (*cred)[1], LCBAUTH_F_BUCKET);
|
|
@@ -551,6 +601,45 @@ HANDLER(bucket_auth_handler) {
|
|
|
551
601
|
return LCB_SUCCESS;
|
|
552
602
|
}
|
|
553
603
|
|
|
604
|
+
HANDLER(metrics_handler) {
|
|
605
|
+
if (mode == LCB_CNTL_SET) {
|
|
606
|
+
int val = *(int *)arg;
|
|
607
|
+
if (!val) {
|
|
608
|
+
return LCB_ECTL_BADARG;
|
|
609
|
+
}
|
|
610
|
+
if (!instance->settings->metrics) {
|
|
611
|
+
instance->settings->metrics = lcb_metrics_new();
|
|
612
|
+
}
|
|
613
|
+
return LCB_SUCCESS;
|
|
614
|
+
} else if (mode == LCB_CNTL_GET) {
|
|
615
|
+
*(lcb_METRICS**)arg = instance->settings->metrics;
|
|
616
|
+
return LCB_SUCCESS;
|
|
617
|
+
} else {
|
|
618
|
+
return LCB_ECTL_UNSUPPMODE;
|
|
619
|
+
}
|
|
620
|
+
(void)cmd;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
HANDLER(collections_handler) {
|
|
624
|
+
RETURN_GET_SET(int, LCBT_SETTING(instance, use_collections));
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
HANDLER(comp_min_size_handler) {
|
|
628
|
+
if (mode == LCB_CNTL_SET && *reinterpret_cast<lcb_U32*>(arg) < LCB_DEFAULT_COMPRESS_MIN_SIZE) {
|
|
629
|
+
return LCB_ECTL_BADARG;
|
|
630
|
+
}
|
|
631
|
+
RETURN_GET_SET(lcb_U32, LCBT_SETTING(instance, compress_min_size))
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
HANDLER(comp_min_ratio_handler) {
|
|
635
|
+
if (mode == LCB_CNTL_SET) {
|
|
636
|
+
float val = *reinterpret_cast<float*>(arg);
|
|
637
|
+
if (val > 1 || val < 0) {
|
|
638
|
+
return LCB_ECTL_BADARG;
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
RETURN_GET_SET(float, LCBT_SETTING(instance, compress_min_ratio))
|
|
642
|
+
}
|
|
554
643
|
|
|
555
644
|
static ctl_handler handlers[] = {
|
|
556
645
|
timeout_common, /* LCB_CNTL_OP_TIMEOUT */
|
|
@@ -588,7 +677,7 @@ static ctl_handler handlers[] = {
|
|
|
588
677
|
init_providers, /* LCB_CNTL_CONFIG_ALL_NODES */
|
|
589
678
|
config_cache_handler, /* LCB_CNTL_CONFIGCACHE */
|
|
590
679
|
ssl_mode_handler, /* LCB_CNTL_SSL_MODE */
|
|
591
|
-
ssl_certpath_handler, /*
|
|
680
|
+
ssl_certpath_handler, /* LCB_CNTL_SSL_CERT */
|
|
592
681
|
retrymode_handler, /* LCB_CNTL_RETRYMODE */
|
|
593
682
|
htconfig_urltype_handler, /* LCB_CNTL_HTCONFIG_URLTYPE */
|
|
594
683
|
compmode_handler, /* LCB_CNTL_COMPRESSION_OPTS */
|
|
@@ -625,7 +714,25 @@ static ctl_handler handlers[] = {
|
|
|
625
714
|
tcp_keepalive_handler, /* LCB_CNTL_TCP_KEEPALIVE */
|
|
626
715
|
config_poll_interval_handler, /* LCB_CNTL_CONFIG_POLL_INTERVAL */
|
|
627
716
|
send_hello_handler, /* LCB_CNTL_SEND_HELLO */
|
|
628
|
-
buckettype_handler /* LCB_CNTL_BUCKETTYPE */
|
|
717
|
+
buckettype_handler, /* LCB_CNTL_BUCKETTYPE */
|
|
718
|
+
metrics_handler, /* LCB_CNTL_METRICS */
|
|
719
|
+
collections_handler, /* LCB_CNTL_USE_COLLECTIONS */
|
|
720
|
+
ssl_keypath_handler, /* LCB_CNTL_SSL_KEY */
|
|
721
|
+
log_redaction_handler, /* LCB_CNTL_LOG_REDACTION */
|
|
722
|
+
ssl_truststorepath_handler, /* LCB_CNTL_SSL_TRUSTSTORE */
|
|
723
|
+
enable_tracing_handler, /* LCB_CNTL_ENABLE_TRACING */
|
|
724
|
+
timeout_common, /* LCB_CNTL_TRACING_ORPHANED_QUEUE_FLUSH_INTERVAL */
|
|
725
|
+
tracing_orphaned_queue_size_handler, /* LCB_CNTL_TRACING_ORPHANED_QUEUE_SIZE */
|
|
726
|
+
timeout_common, /* LCB_CNTL_TRACING_THRESHOLD_QUEUE_FLUSH_INTERVAL */
|
|
727
|
+
tracing_threshold_queue_size_handler, /* LCB_CNTL_TRACING_THRESHOLD_QUEUE_SIZE */
|
|
728
|
+
timeout_common, /* LCB_CNTL_TRACING_THRESHOLD_KV */
|
|
729
|
+
timeout_common, /* LCB_CNTL_TRACING_THRESHOLD_N1QL */
|
|
730
|
+
timeout_common, /* LCB_CNTL_TRACING_THRESHOLD_VIEW */
|
|
731
|
+
timeout_common, /* LCB_CNTL_TRACING_THRESHOLD_FTS */
|
|
732
|
+
timeout_common, /* LCB_CNTL_TRACING_THRESHOLD_ANALYTICS */
|
|
733
|
+
comp_min_size_handler, /* LCB_CNTL_COMPRESSION_MIN_SIZE */
|
|
734
|
+
comp_min_ratio_handler, /* LCB_CNTL_COMPRESSION_MIN_RATIO */
|
|
735
|
+
vb_noremap_handler, /* LCB_CNTL_VB_NOREMAP */
|
|
629
736
|
};
|
|
630
737
|
|
|
631
738
|
/* Union used for conversion to/from string functions */
|
|
@@ -708,6 +815,7 @@ static lcb_error_t convert_compression(const char *arg, u_STRCONVERT *u) {
|
|
|
708
815
|
{ "on", LCB_COMPRESS_INOUT },
|
|
709
816
|
{ "off", LCB_COMPRESS_NONE },
|
|
710
817
|
{ "inflate_only", LCB_COMPRESS_IN },
|
|
818
|
+
{ "deflate_only", LCB_COMPRESS_OUT },
|
|
711
819
|
{ "force", LCB_COMPRESS_INOUT|LCB_COMPRESS_FORCE },
|
|
712
820
|
{ NULL }
|
|
713
821
|
};
|
|
@@ -739,6 +847,18 @@ static lcb_error_t convert_retrymode(const char *arg, u_STRCONVERT *u) {
|
|
|
739
847
|
return LCB_SUCCESS;
|
|
740
848
|
}
|
|
741
849
|
|
|
850
|
+
static lcb_error_t convert_ipv6(const char *arg, u_STRCONVERT *u)
|
|
851
|
+
{
|
|
852
|
+
static const STR_u32MAP optmap[] = {
|
|
853
|
+
{"disabled", LCB_IPV6_DISABLED},
|
|
854
|
+
{"only", LCB_IPV6_ONLY},
|
|
855
|
+
{"allow", LCB_IPV6_ALLOW},
|
|
856
|
+
{NULL}
|
|
857
|
+
};
|
|
858
|
+
DO_CONVERT_STR2NUM(arg, optmap, u->i);
|
|
859
|
+
return LCB_SUCCESS;
|
|
860
|
+
}
|
|
861
|
+
|
|
742
862
|
static cntl_OPCODESTRS stropcode_map[] = {
|
|
743
863
|
{"operation_timeout", LCB_CNTL_OP_TIMEOUT, convert_timevalue},
|
|
744
864
|
{"timeout", LCB_CNTL_OP_TIMEOUT, convert_timevalue},
|
|
@@ -782,6 +902,22 @@ static cntl_OPCODESTRS stropcode_map[] = {
|
|
|
782
902
|
{"tcp_keepalive", LCB_CNTL_TCP_KEEPALIVE, convert_intbool},
|
|
783
903
|
{"config_poll_interval", LCB_CNTL_CONFIG_POLL_INTERVAL, convert_timevalue},
|
|
784
904
|
{"send_hello", LCB_CNTL_SEND_HELLO, convert_intbool},
|
|
905
|
+
{"ipv6", LCB_CNTL_IP6POLICY, convert_ipv6},
|
|
906
|
+
{"metrics", LCB_CNTL_METRICS, convert_intbool },
|
|
907
|
+
{"log_redaction", LCB_CNTL_LOG_REDACTION, convert_intbool},
|
|
908
|
+
{"enable_tracing", LCB_CNTL_ENABLE_TRACING, convert_intbool},
|
|
909
|
+
{"tracing_orphaned_queue_flush_interval", LCB_CNTL_TRACING_ORPHANED_QUEUE_FLUSH_INTERVAL, convert_timevalue},
|
|
910
|
+
{"tracing_orphaned_queue_size", LCB_CNTL_TRACING_ORPHANED_QUEUE_SIZE, convert_u32},
|
|
911
|
+
{"tracing_threshold_queue_flush_interval", LCB_CNTL_TRACING_THRESHOLD_QUEUE_FLUSH_INTERVAL, convert_timevalue},
|
|
912
|
+
{"tracing_threshold_queue_size", LCB_CNTL_TRACING_THRESHOLD_QUEUE_SIZE, convert_u32},
|
|
913
|
+
{"tracing_threshold_kv", LCB_CNTL_TRACING_THRESHOLD_KV, convert_timevalue},
|
|
914
|
+
{"tracing_threshold_n1ql", LCB_CNTL_TRACING_THRESHOLD_N1QL, convert_timevalue},
|
|
915
|
+
{"tracing_threshold_view", LCB_CNTL_TRACING_THRESHOLD_VIEW, convert_timevalue},
|
|
916
|
+
{"tracing_threshold_fts", LCB_CNTL_TRACING_THRESHOLD_FTS, convert_timevalue},
|
|
917
|
+
{"tracing_threshold_analytics", LCB_CNTL_TRACING_THRESHOLD_ANALYTICS, convert_timevalue},
|
|
918
|
+
{"compression_min_size", LCB_CNTL_COMPRESSION_MIN_SIZE, convert_u32},
|
|
919
|
+
{"compression_min_ratio", LCB_CNTL_COMPRESSION_MIN_RATIO, convert_float},
|
|
920
|
+
{"vb_noremap", LCB_CNTL_VB_NOREMAP, convert_intbool },
|
|
785
921
|
{NULL, -1}
|
|
786
922
|
};
|
|
787
923
|
|
|
@@ -43,7 +43,20 @@
|
|
|
43
43
|
#endif
|
|
44
44
|
|
|
45
45
|
#ifdef HAVE_INTTYPES_H
|
|
46
|
+
#ifdef __cplusplus
|
|
47
|
+
#define __STDC_FORMAT_MACROS 1
|
|
48
|
+
#endif
|
|
46
49
|
#include <inttypes.h>
|
|
50
|
+
#elif defined(_MSC_VER)
|
|
51
|
+
#ifndef PRIx64
|
|
52
|
+
#define PRIx64 "I64x"
|
|
53
|
+
#endif
|
|
54
|
+
#ifndef PRId64
|
|
55
|
+
#define PRId64 "I64d"
|
|
56
|
+
#endif
|
|
57
|
+
#ifndef PRIu64
|
|
58
|
+
#define PRIu64 "I64u"
|
|
59
|
+
#endif
|
|
47
60
|
#endif
|
|
48
61
|
|
|
49
62
|
#ifdef HAVE_NETDB_H
|
|
@@ -130,10 +143,14 @@
|
|
|
130
143
|
extern "C" {
|
|
131
144
|
#endif
|
|
132
145
|
extern uint64_t lcb_byteswap64(uint64_t val);
|
|
146
|
+
extern uint16_t lcb_byteswap16(uint16_t val);
|
|
133
147
|
#ifdef __cplusplus
|
|
134
148
|
}
|
|
135
149
|
#endif
|
|
136
150
|
|
|
151
|
+
#define lcb_ntohs(a) lcb_byteswap16(a)
|
|
152
|
+
#define lcb_htons(a) lcb_byteswap16(a)
|
|
153
|
+
|
|
137
154
|
#ifdef linux
|
|
138
155
|
#undef ntohs
|
|
139
156
|
#undef ntohl
|