libcouchbase 1.2.8 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -100,6 +100,14 @@ LIBCOUCHBASE_API
|
|
100
100
|
void
|
101
101
|
lcb_fts_cancel(lcb_t, lcb_FTSHANDLE);
|
102
102
|
|
103
|
+
#ifdef LCB_TRACING
|
104
|
+
/**
|
105
|
+
* @uncommitted
|
106
|
+
*/
|
107
|
+
LIBCOUCHBASE_API
|
108
|
+
void lcb_fts_set_parent_span(lcb_t instance, lcb_FTSHANDLE handle, lcbtrace_SPAN *span);
|
109
|
+
#endif
|
110
|
+
|
103
111
|
/**
|
104
112
|
* @}
|
105
113
|
*/
|
@@ -181,7 +181,7 @@ struct lcb_cntl_iops_info_st {
|
|
181
181
|
* Similar to @ref LCB_CNTL_CONFIG_HTTP_NODES, but affects the CCCP provider
|
182
182
|
* instead. Ports should specify the _memcached_ port
|
183
183
|
* @cntl_arg_setonly{char** (Array of strings)}
|
184
|
-
* @
|
184
|
+
* @uncommitted
|
185
185
|
*/
|
186
186
|
#define LCB_CNTL_CONFIG_CCCP_NODES 0x1E
|
187
187
|
|
@@ -351,4 +351,58 @@ typedef enum {
|
|
351
351
|
*/
|
352
352
|
#define LCB_CNTL_KVTIMINGS 0x3C
|
353
353
|
|
354
|
+
/**
|
355
|
+
* @volatile
|
356
|
+
* Activate/Get library metrics per-server
|
357
|
+
*
|
358
|
+
* If using @ref LCB_CNTL_SET, then this will activate the metrics, and should
|
359
|
+
* be called immediately after lcb_create. The `arg` parameter should be a pointer
|
360
|
+
* to an integer with the activation value (any non-zero value to activate).
|
361
|
+
*
|
362
|
+
* If using @ref LCB_CNTL_GET, the `arg` parameter should be a @ref `lcb_METRICS**`
|
363
|
+
* variable, which will contain the pointer to the metrics upon completion.
|
364
|
+
*/
|
365
|
+
#define LCB_CNTL_METRICS 0x49
|
366
|
+
|
367
|
+
/**
|
368
|
+
*
|
369
|
+
* @cntl_arg_both{int (as boolean)}
|
370
|
+
* @volatile
|
371
|
+
*/
|
372
|
+
#define LCB_CNTL_USE_COLLECTIONS 0x4a
|
373
|
+
|
374
|
+
/**
|
375
|
+
* Activate end-to-end tracing.
|
376
|
+
*
|
377
|
+
* Use `enable_tracing` in the connection string
|
378
|
+
*
|
379
|
+
* @cntl_arg_both{int* (as boolean)}
|
380
|
+
* @uncommitted
|
381
|
+
*/
|
382
|
+
#define LCB_CNTL_ENABLE_TRACING 0x4e
|
383
|
+
|
384
|
+
#define LCB_CNTL_TRACING_ORPHANED_QUEUE_FLUSH_INTERVAL 0x4f
|
385
|
+
#define LCB_CNTL_TRACING_ORPHANED_QUEUE_SIZE 0x50
|
386
|
+
#define LCB_CNTL_TRACING_THRESHOLD_QUEUE_FLUSH_INTERVAL 0x51
|
387
|
+
#define LCB_CNTL_TRACING_THRESHOLD_QUEUE_SIZE 0x52
|
388
|
+
#define LCB_CNTL_TRACING_THRESHOLD_KV 0x53
|
389
|
+
#define LCB_CNTL_TRACING_THRESHOLD_N1QL 0x54
|
390
|
+
#define LCB_CNTL_TRACING_THRESHOLD_VIEW 0x55
|
391
|
+
#define LCB_CNTL_TRACING_THRESHOLD_FTS 0x56
|
392
|
+
#define LCB_CNTL_TRACING_THRESHOLD_ANALYTICS 0x57
|
393
|
+
|
394
|
+
#define LCB_CNTL_COMPRESSION_MIN_SIZE 0x58
|
395
|
+
#define LCB_CNTL_COMPRESSION_MIN_RATIO 0x59
|
396
|
+
|
397
|
+
/**
|
398
|
+
* Do not use fast-forward map from cluster configuration.
|
399
|
+
*
|
400
|
+
* Use `vb_noremap` in the connection string
|
401
|
+
*
|
402
|
+
* @cntl_arg_both{int* (as boolean)}
|
403
|
+
* @uncommitted
|
404
|
+
*/
|
405
|
+
#define LCB_CNTL_VB_NOREMAP 0x5a
|
406
|
+
|
407
|
+
|
354
408
|
/**@}*/
|
@@ -425,6 +425,60 @@ typedef struct lcb_logprocs_st {
|
|
425
425
|
*
|
426
426
|
* @cntl_arg_get_and_set{lcb_logprocs**,lcb_logprocs*}*/
|
427
427
|
#define LCB_CNTL_LOGGER 0x18
|
428
|
+
|
429
|
+
/**
|
430
|
+
* Helper to express printf spec for sensitive data. Usage:
|
431
|
+
*
|
432
|
+
* printf("Logged as " LCB_LOG_SPEC("%s") " user", LCB_LOG_UD(instance, doc->username));
|
433
|
+
*/
|
434
|
+
#define LCB_LOG_SPEC(fmt) "%s" fmt "%s"
|
435
|
+
|
436
|
+
#define LCB_LOG_UD_OTAG "<ud>"
|
437
|
+
#define LCB_LOG_UD_CTAG "</ud>"
|
438
|
+
/**
|
439
|
+
* User data is data that is stored into Couchbase by the application user account.
|
440
|
+
*
|
441
|
+
* - Key and value pairs in JSON documents, or the key exclusively
|
442
|
+
* - Application/Admin usernames that identify the human person
|
443
|
+
* - Names and email addresses asked during product registration and alerting
|
444
|
+
* - Usernames
|
445
|
+
* - Document xattrs
|
446
|
+
* - Query statements included in the log file collected by support that leak
|
447
|
+
* the document fields (Select floor_price from stock).
|
448
|
+
*/
|
449
|
+
#define LCB_LOG_UD(instance, val) \
|
450
|
+
lcb_is_redacting_logs(instance) ? LCB_LOG_UD_OTAG : "", val, lcb_is_redacting_logs(instance) ? LCB_LOG_UD_CTAG : ""
|
451
|
+
|
452
|
+
#define LCB_LOG_MD_OTAG "<md>"
|
453
|
+
#define LCB_LOG_MD_CTAG "</md>"
|
454
|
+
/**
|
455
|
+
* Metadata is logical data needed by Couchbase to store and process user data.
|
456
|
+
*
|
457
|
+
* - Cluster name
|
458
|
+
* - Bucket names
|
459
|
+
* - DDoc/view names
|
460
|
+
* - View code
|
461
|
+
* - Index names
|
462
|
+
* - Mapreduce Design Doc Name and Definition (IP)
|
463
|
+
* - XDCR Replication Stream Names
|
464
|
+
* - And other couchbase resource specific meta data
|
465
|
+
*/
|
466
|
+
#define LCB_LOG_MD(instance, val) \
|
467
|
+
lcb_is_redacting_logs(instance) ? LCB_LOG_MD_OTAG : "", val, lcb_is_redacting_logs(instance) ? LCB_LOG_MD_CTAG : ""
|
468
|
+
|
469
|
+
#define LCB_LOG_SD_OTAG "<sd>"
|
470
|
+
#define LCB_LOG_SD_CTAG "</sd>"
|
471
|
+
/**
|
472
|
+
* System data is data from other parts of the system Couchbase interacts with over the network.
|
473
|
+
*
|
474
|
+
* - IP addresses
|
475
|
+
* - IP tables
|
476
|
+
* - Hosts names
|
477
|
+
* - Ports
|
478
|
+
* - DNS topology
|
479
|
+
*/
|
480
|
+
#define LCB_LOG_SD(instance, val) \
|
481
|
+
lcb_is_redacting_logs(instance) ? LCB_LOG_SD_OTAG : "", val, lcb_is_redacting_logs(instance) ? LCB_LOG_SD_CTAG : ""
|
428
482
|
/**@}*/
|
429
483
|
|
430
484
|
|
@@ -559,6 +613,31 @@ typedef enum {
|
|
559
613
|
* @see LCB_CNTL_SSL_MODE
|
560
614
|
*/
|
561
615
|
#define LCB_CNTL_SSL_CERT 0x23
|
616
|
+
|
617
|
+
/**
|
618
|
+
* @brief Get SSL private key path
|
619
|
+
*
|
620
|
+
* Retrieve the path to the private key (if any) being used.
|
621
|
+
* When key specified, the library will use it to authenticate on the services,
|
622
|
+
* skipping all other authentication mechanisms (SASL, HTTP Basic auth, etc)
|
623
|
+
*
|
624
|
+
* @cntl_arg_getonly{`char**`}
|
625
|
+
* @see LCB_CNTL_SSL_MODE
|
626
|
+
* @see https://developer.couchbase.com/documentation/server/5.0/security/security-certs-auth.html
|
627
|
+
*/
|
628
|
+
#define LCB_CNTL_SSL_KEY 0x4b
|
629
|
+
|
630
|
+
/**
|
631
|
+
* @brief Get SSL trust store path
|
632
|
+
*
|
633
|
+
* Trust store might be NULL, in this case the library expects it to be concatenated with certificate.
|
634
|
+
*
|
635
|
+
* @cntl_arg_getonly{`char**`}
|
636
|
+
* @see LCB_CNTL_SSL_MODE
|
637
|
+
* @see https://developer.couchbase.com/documentation/server/5.0/security/security-certs-auth.html
|
638
|
+
*/
|
639
|
+
#define LCB_CNTL_SSL_TRUSTSTORE 0x4d
|
640
|
+
|
562
641
|
/**
|
563
642
|
* Alias for @ref LCB_CNTL_SSL_CERT for backward compatibility.
|
564
643
|
* @deprecated
|
@@ -1022,11 +1101,32 @@ typedef const char *lcb_BUCKETCRED[2];
|
|
1022
1101
|
*/
|
1023
1102
|
#define LCB_CNTL_SEND_HELLO 0x47
|
1024
1103
|
|
1104
|
+
/**
|
1105
|
+
* Once redaction is enabled, anything at ERROR, WARN and INFO will wrap
|
1106
|
+
* sensitive information with special tags, for further processing with the goal
|
1107
|
+
* to remove or encrypt that information. DEBUG or TRACE level logging are
|
1108
|
+
* expected to have specific info.
|
1109
|
+
*
|
1110
|
+
* Use `log_redaction` in the connection string
|
1111
|
+
|
1112
|
+
* @cntl_arg_both{int* (as boolean)}
|
1113
|
+
*/
|
1114
|
+
#define LCB_CNTL_LOG_REDACTION 0x4c
|
1115
|
+
|
1116
|
+
typedef enum {
|
1117
|
+
LCBTRACE_THRESHOLD_KV = 0,
|
1118
|
+
LCBTRACE_THRESHOLD_N1QL,
|
1119
|
+
LCBTRACE_THRESHOLD_VIEW,
|
1120
|
+
LCBTRACE_THRESHOLD_FTS,
|
1121
|
+
LCBTRACE_THRESHOLD_ANALYTICS,
|
1122
|
+
LCBTRACE_THRESHOLD__MAX
|
1123
|
+
} lcbtrace_THRESHOLDOPTS;
|
1124
|
+
|
1025
1125
|
/**
|
1026
1126
|
* This is not a command, but rather an indicator of the last item.
|
1027
1127
|
* @internal
|
1028
1128
|
*/
|
1029
|
-
#define LCB_CNTL__MAX
|
1129
|
+
#define LCB_CNTL__MAX 0x5b
|
1030
1130
|
/**@}*/
|
1031
1131
|
|
1032
1132
|
#ifdef __cplusplus
|
@@ -20,4 +20,10 @@
|
|
20
20
|
#define LCB_VERSION_STRING "@LCB_VERSION@"
|
21
21
|
#define LCB_VERSION @LCB_VERSION_HEX@
|
22
22
|
#define LCB_VERSION_CHANGESET "@LCB_VERSION_CHANGESET@"
|
23
|
+
|
24
|
+
/*
|
25
|
+
* NOTE:
|
26
|
+
* This symbol might be removed in future releases once tracing will reach GA status.
|
27
|
+
*/
|
28
|
+
#cmakedefine LCB_TRACING
|
23
29
|
#endif
|
@@ -55,6 +55,7 @@ typedef struct lcb_http_request_st *lcb_http_request_t;
|
|
55
55
|
#include <libcouchbase/configuration.h>
|
56
56
|
#include <libcouchbase/kvbuf.h>
|
57
57
|
#include <libcouchbase/auth.h>
|
58
|
+
#include <libcouchbase/tracing.h>
|
58
59
|
#include <libcouchbase/_cxxwrap.h>
|
59
60
|
|
60
61
|
#ifdef __cplusplus
|
@@ -170,10 +171,22 @@ typedef lcb_U32 lcb_USECS;
|
|
170
171
|
* over the memcached port (For clusters 2.5 and above), or `all` to try with
|
171
172
|
* _cccp_ and revert to _http_
|
172
173
|
*
|
174
|
+
* * `truststorepath` - Specify the path (on the local filesystem) to the server's
|
175
|
+
* SSL certificate truststore. Only applicable if SSL is being used (i.e. the
|
176
|
+
* scheme is `couchbases`). The trust store is optional, and when missing,
|
177
|
+
* the library will use `certpath` as location for verification, and expect
|
178
|
+
* any extra certificates to be concatenated in there.
|
179
|
+
*
|
173
180
|
* * `certpath` - Specify the path (on the local filesystem) to the server's
|
174
181
|
* SSL certificate. Only applicable if SSL is being used (i.e. the scheme is
|
175
182
|
* `couchbases`)
|
176
183
|
*
|
184
|
+
* * `keypath` - Specify the path (on the local filesystem) to the client
|
185
|
+
* SSL private key. Only applicable if SSL client certificate authentication
|
186
|
+
* is being used (i.e. the scheme is `couchbases` and `certpath` contains
|
187
|
+
* client certificate). Read more in the server documentation:
|
188
|
+
* https://developer.couchbase.com/documentation/server/5.0/security/security-certs-auth.html
|
189
|
+
*
|
177
190
|
* ### Bucket Identification and Credentials
|
178
191
|
*
|
179
192
|
* The most common settings you will wish to modify are the bucket name
|
@@ -692,6 +705,7 @@ typedef enum {
|
|
692
705
|
LCB_CALLBACK_SDMUTATE,
|
693
706
|
LCB_CALLBACK_NOOP, /**< lcb_noop3() */
|
694
707
|
LCB_CALLBACK_PING, /**< lcb_ping3() */
|
708
|
+
LCB_CALLBACK_DIAG, /**< lcb_diag() */
|
695
709
|
LCB_CALLBACK__MAX /* Number of callbacks */
|
696
710
|
} lcb_CALLBACKTYPE;
|
697
711
|
|
@@ -1329,6 +1343,16 @@ typedef struct lcb_MULTICMD_CTX_st {
|
|
1329
1343
|
* @param ctx
|
1330
1344
|
*/
|
1331
1345
|
void (*fail)(struct lcb_MULTICMD_CTX_st *ctx);
|
1346
|
+
|
1347
|
+
#ifdef LCB_TRACING
|
1348
|
+
/**
|
1349
|
+
* Associate parent tracing span with the group operation
|
1350
|
+
*
|
1351
|
+
* @param ctx The multi context
|
1352
|
+
* @param span Parent span
|
1353
|
+
*/
|
1354
|
+
void (*setspan)(struct lcb_MULTICMD_CTX_st *ctx, lcbtrace_SPAN *span);
|
1355
|
+
#endif
|
1332
1356
|
} lcb_MULTICMD_CTX;
|
1333
1357
|
/**@}*/
|
1334
1358
|
|
@@ -2323,7 +2347,7 @@ typedef lcb_CMDBASE lcb_CMDCBFLUSH;
|
|
2323
2347
|
typedef lcb_RESPBASE lcb_RESPCBFLUSH;
|
2324
2348
|
|
2325
2349
|
/**
|
2326
|
-
* @
|
2350
|
+
* @uncommitted
|
2327
2351
|
*
|
2328
2352
|
* Flush a bucket
|
2329
2353
|
* This function will properly flush any type of bucket using the REST API
|
@@ -2449,6 +2473,7 @@ typedef struct {
|
|
2449
2473
|
LCB_CMD_BASE;
|
2450
2474
|
int services; /**< bitmap for services to ping */
|
2451
2475
|
int options; /**< extra options, e.g. for result representation */
|
2476
|
+
const char *id; /**< optional, zero-terminated string to identify the report */
|
2452
2477
|
} lcb_CMDPING;
|
2453
2478
|
|
2454
2479
|
/**
|
@@ -2464,6 +2489,18 @@ typedef enum {
|
|
2464
2489
|
LCB_PINGSVC__MAX
|
2465
2490
|
} lcb_PINGSVCTYPE;
|
2466
2491
|
|
2492
|
+
/**
|
2493
|
+
* Status of the service
|
2494
|
+
*
|
2495
|
+
* @uncommitted
|
2496
|
+
*/
|
2497
|
+
typedef enum {
|
2498
|
+
LCB_PINGSTATUS_OK = 0,
|
2499
|
+
LCB_PINGSTATUS_TIMEOUT,
|
2500
|
+
LCB_PINGSTATUS_ERROR,
|
2501
|
+
LCB_PINGSTATUS__MAX
|
2502
|
+
} lcb_PINGSTATUS;
|
2503
|
+
|
2467
2504
|
/**
|
2468
2505
|
* Entry describing the status of the service in the cluster.
|
2469
2506
|
* It is part of lcb_RESPING structure.
|
@@ -2472,9 +2509,14 @@ typedef enum {
|
|
2472
2509
|
*/
|
2473
2510
|
typedef struct {
|
2474
2511
|
lcb_PINGSVCTYPE type; /**< type of the service */
|
2475
|
-
|
2512
|
+
/* TODO: rename to "remote" */
|
2513
|
+
const char *server; /**< server host:port */
|
2476
2514
|
lcb_U64 latency; /**< latency in nanoseconds */
|
2477
|
-
lcb_error_t
|
2515
|
+
lcb_error_t rc; /**< raw return code of the operation */
|
2516
|
+
const char *local; /**< server host:port */
|
2517
|
+
const char *id; /**< service identifier (unique in scope of lcb_t connection instance) */
|
2518
|
+
const char *scope; /**< optional scope name (typically equals to the bucket name) */
|
2519
|
+
lcb_PINGSTATUS status; /**< status of the operation */
|
2478
2520
|
} lcb_PINGSVC;
|
2479
2521
|
|
2480
2522
|
/**
|
@@ -2532,6 +2574,54 @@ typedef struct {
|
|
2532
2574
|
LIBCOUCHBASE_API
|
2533
2575
|
lcb_error_t
|
2534
2576
|
lcb_ping3(lcb_t instance, const void *cookie, const lcb_CMDPING *cmd);
|
2577
|
+
|
2578
|
+
typedef struct {
|
2579
|
+
LCB_CMD_BASE;
|
2580
|
+
int options; /**< extra options, e.g. for result representation */
|
2581
|
+
const char *id; /**< optional, zero-terminated string to identify the report */
|
2582
|
+
} lcb_CMDDIAG;
|
2583
|
+
|
2584
|
+
typedef struct {
|
2585
|
+
LCB_RESP_BASE
|
2586
|
+
lcb_SIZE njson; /**< length of JSON string (when #LCB_PINGOPT_F_JSON was specified) */
|
2587
|
+
const char *json; /**< pointer to JSON string */
|
2588
|
+
} lcb_RESPDIAG;
|
2589
|
+
|
2590
|
+
/**
|
2591
|
+
* @brief Returns diagnostics report about network connections.
|
2592
|
+
*
|
2593
|
+
* @uncommitted
|
2594
|
+
*
|
2595
|
+
* @par Request
|
2596
|
+
* @code{.c}
|
2597
|
+
* lcb_CMDDIAG cmd = { 0 };
|
2598
|
+
* lcb_diag(instance, fp, &cmd);
|
2599
|
+
* lcb_wait(instance);
|
2600
|
+
* @endcode
|
2601
|
+
*
|
2602
|
+
* @par Response
|
2603
|
+
* @code{.c}
|
2604
|
+
* lcb_install_callback3(instance, LCB_CALLBACK_DIAG, diag_callback);
|
2605
|
+
* void diag_callback(lcb_t, int, const lcb_RESPBASE *rb)
|
2606
|
+
* {
|
2607
|
+
* const lcb_RESPDIAG *resp = (const lcb_RESPDIAG *)rb;
|
2608
|
+
* if (resp->rc != LCB_SUCCESS) {
|
2609
|
+
* fprintf(stderr, "failed: %s\n", lcb_strerror(NULL, resp->rc));
|
2610
|
+
* } else {
|
2611
|
+
* if (resp->njson) {
|
2612
|
+
* fprintf(stderr, "\n%.*s", (int)resp->njson, resp->json);
|
2613
|
+
* }
|
2614
|
+
* }
|
2615
|
+
* }
|
2616
|
+
* @endcode
|
2617
|
+
*
|
2618
|
+
* @param instance the library handle
|
2619
|
+
* @param cookie the cookie passed in the callback
|
2620
|
+
* @param cmd command structure.
|
2621
|
+
* @return status code for scheduling.
|
2622
|
+
*/
|
2623
|
+
LIBCOUCHBASE_API
|
2624
|
+
lcb_error_t lcb_diag(lcb_t instance, const void *cookie, const lcb_CMDDIAG *cmd);
|
2535
2625
|
/**@} (Group: PING) */
|
2536
2626
|
|
2537
2627
|
/**@ingroup lcb-public-api
|
@@ -2955,7 +3045,7 @@ void lcb_breakout(lcb_t instance);
|
|
2955
3045
|
* @brief Check if instance is blocked in the event loop
|
2956
3046
|
* @param instance the instance to run the event loop for.
|
2957
3047
|
* @return non-zero if nobody is waiting for IO interaction
|
2958
|
-
* @
|
3048
|
+
* @uncommitted
|
2959
3049
|
*/
|
2960
3050
|
LIBCOUCHBASE_API
|
2961
3051
|
int lcb_is_waiting(lcb_t instance);
|
@@ -3240,7 +3330,7 @@ void lcb_destroy_async(lcb_t instance, const void *arg);
|
|
3240
3330
|
#define LCB_DATATYPE_JSON 0x01
|
3241
3331
|
|
3242
3332
|
/** @internal */
|
3243
|
-
typedef enum { LCB_VALUE_RAW = 0x00, LCB_VALUE_F_JSON = 0x01, LCB_VALUE_F_SNAPPYCOMP } lcb_VALUEFLAGS;
|
3333
|
+
typedef enum { LCB_VALUE_RAW = 0x00, LCB_VALUE_F_JSON = 0x01, LCB_VALUE_F_SNAPPYCOMP = 0x02 } lcb_VALUEFLAGS;
|
3244
3334
|
|
3245
3335
|
|
3246
3336
|
/**
|
@@ -3477,7 +3567,6 @@ lcb_dump(lcb_t instance, FILE *fp, lcb_U32 flags);
|
|
3477
3567
|
LIBCOUCHBASE_API
|
3478
3568
|
lcb_error_t lcb_cntl(lcb_t instance, int mode, int cmd, void *arg);
|
3479
3569
|
|
3480
|
-
|
3481
3570
|
/**
|
3482
3571
|
* Alternatively one may change configuration settings by passing a string key
|
3483
3572
|
* and value. This may be used to provide a simple interface from a command
|
@@ -3532,6 +3621,7 @@ lcb_error_t lcb_cntl(lcb_t instance, int mode, int cmd, void *arg);
|
|
3532
3621
|
* |@ref LCB_CNTL_CLIENT_STRING | `"client_string"` | String |
|
3533
3622
|
* |@ref LCB_CNTL_TCP_KEEPALIVE | `"tcp_keepalive"` | Boolean |
|
3534
3623
|
* |@ref LCB_CNTL_CONFIG_POLL_INTERVAL | `"config_poll_interval"` | Timeval |
|
3624
|
+
* |@ref LCB_CNTL_IP6POLICY | `"ipv6"` | String ("disabled", "only", "allow") |
|
3535
3625
|
*
|
3536
3626
|
* @committed - Note, the actual API call is considered committed and will
|
3537
3627
|
* not disappear, however the existence of the various string settings are
|
@@ -3791,6 +3881,8 @@ const lcb_U32 lcb_version_g;
|
|
3791
3881
|
#define LCB_SUPPORTS_SSL 1
|
3792
3882
|
/**@brief Whether the library has experimental compression support */
|
3793
3883
|
#define LCB_SUPPORTS_SNAPPY 2
|
3884
|
+
/**@brief Whether the library has experimental tracing support */
|
3885
|
+
#define LCB_SUPPORTS_TRACING 3
|
3794
3886
|
|
3795
3887
|
/**
|
3796
3888
|
* @committed
|
@@ -3845,6 +3937,8 @@ typedef enum {
|
|
3845
3937
|
LCB_DUMP_PKTINFO = 0x02,
|
3846
3938
|
/** Dump memory usage/reservation information about buffers */
|
3847
3939
|
LCB_DUMP_BUFINFO = 0x04,
|
3940
|
+
/** Dump various metrics information */
|
3941
|
+
LCB_DUMP_METRICS = 0x08,
|
3848
3942
|
/** Dump everything */
|
3849
3943
|
LCB_DUMP_ALL = 0xff
|
3850
3944
|
} lcb_DUMPFLAGS;
|
@@ -3938,6 +4032,15 @@ LIBCOUCHBASE_API
|
|
3938
4032
|
const char *
|
3939
4033
|
lcb_resp_get_error_ref(int cbtype, const lcb_RESPBASE *rb);
|
3940
4034
|
|
4035
|
+
/**
|
4036
|
+
* @volatile
|
4037
|
+
* Returns whether the library redacting logs for this connection instance.
|
4038
|
+
*
|
4039
|
+
* @return non-zero if the logs are being redacted for this instance.
|
4040
|
+
*/
|
4041
|
+
LIBCOUCHBASE_API
|
4042
|
+
int lcb_is_redacting_logs(lcb_t instance);
|
4043
|
+
|
3941
4044
|
/* Post-include some other headers */
|
3942
4045
|
#ifdef __cplusplus
|
3943
4046
|
}
|
@@ -0,0 +1,140 @@
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Copyright 2018 Couchbase, Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#ifndef LCB_CRYPTO_H
|
19
|
+
#define LCB_CRYPTO_H
|
20
|
+
|
21
|
+
/**
|
22
|
+
* @file
|
23
|
+
* Field encryption
|
24
|
+
*
|
25
|
+
* @uncommitted
|
26
|
+
*/
|
27
|
+
|
28
|
+
#ifdef __cplusplus
|
29
|
+
extern "C" {
|
30
|
+
#endif
|
31
|
+
|
32
|
+
typedef enum {
|
33
|
+
/* encryption (e.g. private key for assymetric ciphers) */
|
34
|
+
LCBCRYPTO_KEY_ENCRYPT = 0,
|
35
|
+
/* decryption (e.g. private key for assymetric ciphers) */
|
36
|
+
LCBCRYPTO_KEY_DECRYPT = 1,
|
37
|
+
LCBCRYPTO_KEY__MAX
|
38
|
+
} lcbcrypto_KEYTYPE;
|
39
|
+
|
40
|
+
typedef struct lcbcrypto_SIGV {
|
41
|
+
const uint8_t *data;
|
42
|
+
size_t len;
|
43
|
+
} lcbcrypto_SIGV;
|
44
|
+
|
45
|
+
struct lcbcrypto_PROVIDER;
|
46
|
+
typedef struct lcbcrypto_PROVIDER {
|
47
|
+
uint16_t version;
|
48
|
+
int16_t _refcnt;
|
49
|
+
uint64_t flags;
|
50
|
+
void *cookie;
|
51
|
+
void (*destructor)(struct lcbcrypto_PROVIDER *provider);
|
52
|
+
union {
|
53
|
+
struct {
|
54
|
+
void (*release_bytes)(struct lcbcrypto_PROVIDER *provider, void *bytes);
|
55
|
+
lcb_error_t (*load_key)(struct lcbcrypto_PROVIDER *provider, lcbcrypto_KEYTYPE type, const char *keyid,
|
56
|
+
uint8_t **key, size_t *key_len);
|
57
|
+
lcb_error_t (*generate_iv)(struct lcbcrypto_PROVIDER *provider, uint8_t **iv, size_t *iv_len);
|
58
|
+
lcb_error_t (*sign)(struct lcbcrypto_PROVIDER *provider, const lcbcrypto_SIGV *inputs, size_t input_num,
|
59
|
+
uint8_t **sig, size_t *sig_len);
|
60
|
+
lcb_error_t (*verify_signature)(struct lcbcrypto_PROVIDER *provider, const lcbcrypto_SIGV *inputs,
|
61
|
+
size_t input_num, uint8_t *sig, size_t sig_len);
|
62
|
+
lcb_error_t (*encrypt)(struct lcbcrypto_PROVIDER *provider, const uint8_t *input, size_t input_len,
|
63
|
+
const uint8_t *key, size_t key_len, const uint8_t *iv, size_t iv_len,
|
64
|
+
uint8_t **output, size_t *output_len);
|
65
|
+
lcb_error_t (*decrypt)(struct lcbcrypto_PROVIDER *provider, const uint8_t *input, size_t input_len,
|
66
|
+
const uint8_t *key, size_t key_len, const uint8_t *iv, size_t iv_len,
|
67
|
+
uint8_t **output, size_t *output_len);
|
68
|
+
} v0;
|
69
|
+
} v;
|
70
|
+
} lcbcrypto_PROVIDER;
|
71
|
+
|
72
|
+
typedef struct lcbcrypto_FIELDSPEC {
|
73
|
+
const char *name;
|
74
|
+
const char *alg;
|
75
|
+
const char *kid;
|
76
|
+
} lcbcrypto_FIELDSPEC;
|
77
|
+
|
78
|
+
typedef struct lcbcrypto_CMDENCRYPT {
|
79
|
+
uint16_t version;
|
80
|
+
const char *prefix;
|
81
|
+
const char *doc;
|
82
|
+
size_t ndoc;
|
83
|
+
char *out;
|
84
|
+
size_t nout;
|
85
|
+
lcbcrypto_FIELDSPEC *fields;
|
86
|
+
size_t nfields;
|
87
|
+
} lcbcrypto_CMDENCRYPT;
|
88
|
+
|
89
|
+
typedef struct lcbcrypto_CMDDECRYPT {
|
90
|
+
uint16_t version;
|
91
|
+
const char *prefix;
|
92
|
+
const char *doc;
|
93
|
+
size_t ndoc;
|
94
|
+
char *out;
|
95
|
+
size_t nout;
|
96
|
+
} lcbcrypto_CMDDECRYPT;
|
97
|
+
|
98
|
+
/**
|
99
|
+
* @uncommitted
|
100
|
+
*/
|
101
|
+
LIBCOUCHBASE_API void lcbcrypto_register(lcb_t instance, const char *name, lcbcrypto_PROVIDER *provider);
|
102
|
+
|
103
|
+
/**
|
104
|
+
* @uncommitted
|
105
|
+
*/
|
106
|
+
LIBCOUCHBASE_API void lcbcrypto_unregister(lcb_t instance, const char *name);
|
107
|
+
|
108
|
+
/**
|
109
|
+
* @uncommitted
|
110
|
+
*/
|
111
|
+
LIBCOUCHBASE_API void lcbcrypto_ref(lcbcrypto_PROVIDER *provider);
|
112
|
+
|
113
|
+
/**
|
114
|
+
* @uncommitted
|
115
|
+
*/
|
116
|
+
LIBCOUCHBASE_API void lcbcrypto_unref(lcbcrypto_PROVIDER *provider);
|
117
|
+
|
118
|
+
/**
|
119
|
+
* @uncommitted
|
120
|
+
*
|
121
|
+
* encrypt and replace fields specified by JSON paths (zero-terminated) with encrypted contents
|
122
|
+
*/
|
123
|
+
LIBCOUCHBASE_API lcb_error_t lcbcrypto_encrypt_fields(lcb_t instance, lcbcrypto_CMDENCRYPT *cmd);
|
124
|
+
|
125
|
+
/**
|
126
|
+
* @uncommitted
|
127
|
+
*
|
128
|
+
* find and decrypt all fields in the JSON encoded object
|
129
|
+
*/
|
130
|
+
LIBCOUCHBASE_API lcb_error_t lcbcrypto_decrypt_fields(lcb_t instance, lcbcrypto_CMDDECRYPT *cmd);
|
131
|
+
|
132
|
+
/** @deprecated Use @ref lcbcrypto_encrypt_fields() */
|
133
|
+
LCB_DEPR_API2(lcb_error_t lcbcrypto_encrypt_document(lcb_t instance, lcbcrypto_CMDENCRYPT *cmd), "Use lcbcrypto_encrypt_fields");
|
134
|
+
/** @deprecated Use @ref lcbcrypto_decrypt_fields() */
|
135
|
+
LCB_DEPR_API2(lcb_error_t lcbcrypto_decrypt_document(lcb_t instance, lcbcrypto_CMDDECRYPT *cmd), "Use lcbcrypto_decrypt_fields");
|
136
|
+
|
137
|
+
#ifdef __cplusplus
|
138
|
+
}
|
139
|
+
#endif
|
140
|
+
#endif /* LCB_CRYPTO_H */
|