libcouchbase 1.0.4 → 1.1.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 +11 -8
- data/ext/libcouchbase/CMakeLists.txt +1 -1
- data/ext/libcouchbase/README.markdown +38 -6
- data/ext/libcouchbase/RELEASE_NOTES.markdown +151 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +2 -2
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +3 -3
- data/ext/libcouchbase/cmake/source_files.cmake +1 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.c +686 -288
- data/ext/libcouchbase/contrib/cJSON/cJSON.h +0 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.c +17 -17
- data/ext/libcouchbase/contrib/cliopts/cliopts.c +76 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +66 -15
- data/ext/libcouchbase/contrib/genhash/genhash.c +1 -2
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4 -3
- data/ext/libcouchbase/example/instancepool/main.cc +12 -2
- data/ext/libcouchbase/example/libeventdirect/main.c +99 -25
- data/ext/libcouchbase/example/minimal/minimal.c +7 -5
- data/ext/libcouchbase/example/observe/durability.c +102 -0
- data/ext/libcouchbase/example/observe/observe.c +19 -6
- data/ext/libcouchbase/example/subdoc/subdoc-xattrs.c +1 -2
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +6 -8
- data/ext/libcouchbase/include/libcouchbase/cntl.h +84 -64
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +295 -78
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +2 -2
- data/ext/libcouchbase/include/libcouchbase/error.h +1 -1
- data/ext/libcouchbase/include/libcouchbase/iops.h +9 -9
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +2 -2
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +69 -7
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +17 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +3 -3
- data/ext/libcouchbase/include/memcached/protocol_binary.h +62 -1
- data/ext/libcouchbase/packaging/deb/control +1 -1
- data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +37 -36
- data/ext/libcouchbase/src/bootstrap.cc +22 -8
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +1 -1
- data/ext/libcouchbase/src/bucketconfig/bc_http.cc +0 -1
- data/ext/libcouchbase/src/bucketconfig/confmon.cc +13 -8
- data/ext/libcouchbase/src/callbacks.c +2 -0
- data/ext/libcouchbase/src/cntl.cc +28 -17
- data/ext/libcouchbase/src/dns-srv.cc +1 -2
- data/ext/libcouchbase/src/dump.cc +4 -0
- data/ext/libcouchbase/src/errmap.h +89 -16
- data/ext/libcouchbase/src/handler.cc +28 -11
- data/ext/libcouchbase/src/http/http-priv.h +4 -1
- data/ext/libcouchbase/src/http/http.cc +3 -0
- data/ext/libcouchbase/src/instance.cc +1 -1
- data/ext/libcouchbase/src/internal.h +1 -0
- data/ext/libcouchbase/src/lcbio/connect.cc +2 -3
- data/ext/libcouchbase/src/lcbio/manager.cc +2 -2
- data/ext/libcouchbase/src/lcbio/ssl.h +10 -0
- data/ext/libcouchbase/src/mc/mcreq.c +8 -0
- data/ext/libcouchbase/src/mcserver/mcserver.cc +14 -1
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +0 -3
- data/ext/libcouchbase/src/n1ql/n1ql.cc +22 -29
- data/ext/libcouchbase/src/n1ql/params.cc +46 -1
- data/ext/libcouchbase/src/newconfig.cc +4 -4
- data/ext/libcouchbase/src/operations/durability-seqno.cc +4 -0
- data/ext/libcouchbase/src/operations/durability.cc +3 -0
- data/ext/libcouchbase/src/operations/ping.cc +315 -0
- data/ext/libcouchbase/src/operations/stats.cc +10 -0
- data/ext/libcouchbase/src/operations/subdoc.cc +13 -1
- data/ext/libcouchbase/src/retrychk.cc +1 -0
- data/ext/libcouchbase/src/settings.c +2 -0
- data/ext/libcouchbase/src/settings.h +13 -7
- data/ext/libcouchbase/src/ssl/ssl_c.c +28 -2
- data/ext/libcouchbase/src/ssl/ssl_common.c +3 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +15 -1
- data/ext/libcouchbase/src/ssl/ssl_iot_common.h +3 -1
- data/ext/libcouchbase/src/timings.c +0 -1
- data/ext/libcouchbase/src/vbucket/vbucket.c +49 -1
- data/ext/libcouchbase/tests/iotests/mock-environment.cc +58 -40
- data/ext/libcouchbase/tests/iotests/mock-environment.h +23 -4
- data/ext/libcouchbase/tests/iotests/mock-unit-test.h +8 -8
- data/ext/libcouchbase/tests/iotests/t_behavior.cc +5 -5
- data/ext/libcouchbase/tests/iotests/t_durability.cc +50 -0
- data/ext/libcouchbase/tests/iotests/t_eerrs.cc +4 -2
- data/ext/libcouchbase/tests/iotests/t_errmap.cc +6 -3
- data/ext/libcouchbase/tests/iotests/t_lock.cc +5 -6
- data/ext/libcouchbase/tests/iotests/t_misc.cc +44 -0
- data/ext/libcouchbase/tests/iotests/t_serverops.cc +1 -0
- data/ext/libcouchbase/tests/iotests/t_subdoc.cc +28 -0
- data/ext/libcouchbase/tests/iotests/t_views.cc +22 -10
- data/ext/libcouchbase/tools/CMakeLists.txt +21 -1
- data/ext/libcouchbase/tools/cbc-handlers.h +23 -3
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +1 -1
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +126 -26
- data/ext/libcouchbase/tools/cbc-proxy.cc +403 -0
- data/ext/libcouchbase/tools/cbc-subdoc.cc +826 -0
- data/ext/libcouchbase/tools/cbc.cc +149 -37
- data/ext/libcouchbase/tools/common/options.h +5 -2
- data/ext/libcouchbase/tools/linenoise/linenoise.c +15 -15
- data/lib/libcouchbase.rb +4 -0
- data/lib/libcouchbase/bucket.rb +51 -0
- data/lib/libcouchbase/connection.rb +100 -13
- data/lib/libcouchbase/ext/libcouchbase.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +13 -1
- data/lib/libcouchbase/ext/libcouchbase/enums.rb +2 -1
- data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +5 -0
- data/lib/libcouchbase/subdoc_request.rb +129 -0
- data/lib/libcouchbase/version.rb +1 -1
- data/spec/bucket_spec.rb +15 -1
- data/spec/connection_spec.rb +1 -1
- data/spec/subdoc_spec.rb +192 -0
- metadata +13 -4
- data/ext/libcouchbase/.travis.yml +0 -19
@@ -54,9 +54,8 @@ op_callback(lcb_t instance, int cbtype, const lcb_RESPBASE *rb)
|
|
54
54
|
fprintf(stderr, "FLAGS: 0x%x\n", rg->itmflags);
|
55
55
|
}
|
56
56
|
} else {
|
57
|
-
die(instance, lcb_strcbtype(
|
57
|
+
die(instance, lcb_strcbtype(cbtype), rb->rc);
|
58
58
|
}
|
59
|
-
(void)instance;
|
60
59
|
}
|
61
60
|
|
62
61
|
int main(int argc, char *argv[])
|
@@ -70,14 +69,17 @@ int main(int argc, char *argv[])
|
|
70
69
|
create_options.version = 3;
|
71
70
|
|
72
71
|
if (argc < 2) {
|
73
|
-
fprintf(stderr, "Usage: %s couchbase://host/bucket [ password ]\n", argv[0]);
|
72
|
+
fprintf(stderr, "Usage: %s couchbase://host/bucket [ password [ username ] ]\n", argv[0]);
|
74
73
|
exit(EXIT_FAILURE);
|
75
74
|
}
|
76
75
|
|
77
76
|
create_options.v.v3.connstr = argv[1];
|
78
|
-
if (argc
|
77
|
+
if (argc > 2) {
|
79
78
|
create_options.v.v3.passwd = argv[2];
|
80
79
|
}
|
80
|
+
if (argc > 3) {
|
81
|
+
create_options.v.v3.username = argv[3];
|
82
|
+
}
|
81
83
|
|
82
84
|
err = lcb_create(&instance, &create_options);
|
83
85
|
if (err != LCB_SUCCESS) {
|
@@ -114,7 +116,7 @@ int main(int argc, char *argv[])
|
|
114
116
|
lcb_wait(instance);
|
115
117
|
|
116
118
|
/* Now fetch the item back */
|
117
|
-
LCB_CMD_SET_KEY(&gcmd, "
|
119
|
+
LCB_CMD_SET_KEY(&gcmd, "key", strlen("key"));
|
118
120
|
err = lcb_get3(instance, NULL, &gcmd);
|
119
121
|
if (err != LCB_SUCCESS) {
|
120
122
|
die(instance, "Couldn't schedule retrieval operation", err);
|
@@ -0,0 +1,102 @@
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Copyright 2017 Couchbase, Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
/*
|
19
|
+
* BUILD:
|
20
|
+
* cc -o durability durability.c -lcouchbase
|
21
|
+
*
|
22
|
+
* RUN:
|
23
|
+
* ./durability [ CONNSTRING [ PASSWORD [ USERNAME ] ] ]
|
24
|
+
*
|
25
|
+
* # use default durability check method
|
26
|
+
* ./durability couchbase://localhost
|
27
|
+
*
|
28
|
+
* # force durability check method based on sequence numbers
|
29
|
+
* ./durability couchbase://localhost?fetch_mutation_tokens=true&dur_mutation_tokens=true
|
30
|
+
*/
|
31
|
+
#include <stdlib.h>
|
32
|
+
#include <stdio.h>
|
33
|
+
#include <string.h>
|
34
|
+
#include <assert.h>
|
35
|
+
#include <libcouchbase/couchbase.h>
|
36
|
+
#include <libcouchbase/api3.h>
|
37
|
+
|
38
|
+
#define fail(msg) \
|
39
|
+
fprintf(stderr, "%s\n", msg); \
|
40
|
+
exit(EXIT_FAILURE)
|
41
|
+
|
42
|
+
#define fail2(msg, err) \
|
43
|
+
fprintf(stderr, "%s\n", msg); \
|
44
|
+
fprintf(stderr, "Error was 0x%x (%s)\n", err, lcb_strerror(NULL, err)); \
|
45
|
+
exit(EXIT_FAILURE)
|
46
|
+
|
47
|
+
static void store_callback(lcb_t instance, int cbtype, const lcb_RESPBASE *rb)
|
48
|
+
{
|
49
|
+
const lcb_RESPSTOREDUR *resp = (const lcb_RESPSTOREDUR *)rb;
|
50
|
+
fprintf(stderr, "Got status of operation: 0x%02x, %s\n", resp->rc, lcb_strerror(NULL, resp->rc));
|
51
|
+
fprintf(stderr, "Stored: %s\n", resp->store_ok ? "true" : "false");
|
52
|
+
fprintf(stderr, "Number of roundtrips: %d\n", resp->dur_resp->nresponses);
|
53
|
+
fprintf(stderr, "In memory on master: %s\n", resp->dur_resp->exists_master ? "true" : "false");
|
54
|
+
fprintf(stderr, "Persisted on master: %s\n", resp->dur_resp->persisted_master ? "true" : "false");
|
55
|
+
fprintf(stderr, "Nodes have value replicated: %d\n", resp->dur_resp->nreplicated);
|
56
|
+
fprintf(stderr, "Nodes have value persisted (including master): %d\n", resp->dur_resp->npersisted);
|
57
|
+
}
|
58
|
+
|
59
|
+
int main(int argc, char *argv[])
|
60
|
+
{
|
61
|
+
lcb_t instance;
|
62
|
+
lcb_error_t err;
|
63
|
+
lcb_CMDSTOREDUR cmd = {0};
|
64
|
+
struct lcb_create_st create_options = {0};
|
65
|
+
const char *key = "foo";
|
66
|
+
const char *value = "{\"val\":42}";
|
67
|
+
|
68
|
+
create_options.version = 3;
|
69
|
+
if (argc > 1) {
|
70
|
+
create_options.v.v3.connstr = argv[1];
|
71
|
+
}
|
72
|
+
if (argc > 2) {
|
73
|
+
create_options.v.v3.passwd = argv[2];
|
74
|
+
}
|
75
|
+
if (argc > 3) {
|
76
|
+
create_options.v.v3.username = argv[3];
|
77
|
+
}
|
78
|
+
|
79
|
+
if ((err = lcb_create(&instance, &create_options)) != LCB_SUCCESS) {
|
80
|
+
fail2("cannot create connection instance", err);
|
81
|
+
}
|
82
|
+
if ((err = lcb_connect(instance)) != LCB_SUCCESS) {
|
83
|
+
fail2("Couldn't schedule connection", err);
|
84
|
+
}
|
85
|
+
lcb_wait(instance);
|
86
|
+
if ((err = lcb_get_bootstrap_status(instance)) != LCB_SUCCESS) {
|
87
|
+
fail2("Couldn't get initial cluster configuration", err);
|
88
|
+
}
|
89
|
+
lcb_install_callback3(instance, LCB_CALLBACK_STOREDUR, store_callback);
|
90
|
+
|
91
|
+
LCB_CMD_SET_KEY(&cmd, key, strlen(key));
|
92
|
+
LCB_CMD_SET_VALUE(&cmd, value, strlen(value));
|
93
|
+
/* replicate and persist on all nodes */
|
94
|
+
cmd.replicate_to = -1;
|
95
|
+
cmd.persist_to = -1;
|
96
|
+
lcb_storedur3(instance, NULL, &cmd);
|
97
|
+
|
98
|
+
lcb_wait(instance);
|
99
|
+
|
100
|
+
lcb_destroy(instance);
|
101
|
+
return EXIT_SUCCESS;
|
102
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright 2013 Couchbase, Inc.
|
3
|
+
* Copyright 2013-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.
|
@@ -28,11 +28,12 @@
|
|
28
28
|
|
29
29
|
#define fail(msg) \
|
30
30
|
fprintf(stderr, "%s\n", msg); \
|
31
|
-
exit(EXIT_FAILURE)
|
31
|
+
exit(EXIT_FAILURE)
|
32
32
|
|
33
33
|
#define fail2(msg, err) \
|
34
34
|
fprintf(stderr, "%s\n", msg); \
|
35
|
-
fprintf(stderr, "Error was 0x%x (%s)\n", err, lcb_strerror(NULL, err))
|
35
|
+
fprintf(stderr, "Error was 0x%x (%s)\n", err, lcb_strerror(NULL, err)); \
|
36
|
+
exit(EXIT_FAILURE)
|
36
37
|
|
37
38
|
typedef struct {
|
38
39
|
int master;
|
@@ -81,12 +82,24 @@ int main(int argc, char *argv[])
|
|
81
82
|
lcb_MULTICMD_CTX *mctx = NULL;
|
82
83
|
observe_info obs_info;
|
83
84
|
unsigned nservers, ii;
|
85
|
+
struct lcb_create_st create_options = { 0 };
|
84
86
|
|
85
|
-
if (argc
|
86
|
-
fail("
|
87
|
+
if (argc < 2) {
|
88
|
+
fail("Requires key as argument\n"
|
89
|
+
"Usage: observe KEY [CONNSTRING [ PASSWORD [ USERNAME ] ] ]\n");
|
90
|
+
}
|
91
|
+
create_options.version = 3;
|
92
|
+
if (argc > 2) {
|
93
|
+
create_options.v.v3.connstr = argv[2];
|
94
|
+
}
|
95
|
+
if (argc > 3) {
|
96
|
+
create_options.v.v3.passwd = argv[3];
|
97
|
+
}
|
98
|
+
if (argc > 4) {
|
99
|
+
create_options.v.v3.username = argv[4];
|
87
100
|
}
|
88
101
|
|
89
|
-
if ((err = lcb_create(&instance,
|
102
|
+
if ((err = lcb_create(&instance, &create_options)) != LCB_SUCCESS) {
|
90
103
|
fail2("cannot create connection instance", err);
|
91
104
|
}
|
92
105
|
if ((err = lcb_connect(instance)) != LCB_SUCCESS) {
|
@@ -124,8 +124,7 @@ static void n1qlrow_callback(lcb_t instance, int type, const lcb_RESPN1QL *resp)
|
|
124
124
|
lcb_sched_leave(instance);
|
125
125
|
}
|
126
126
|
|
127
|
-
|
128
|
-
#define DEFAULT_CONNSTR "couchbase://192.168.1.194/travel-sample"
|
127
|
+
#define DEFAULT_CONNSTR "couchbase://localhost/travel-sample"
|
129
128
|
|
130
129
|
static lcb_t connect_as(char *username, char *password)
|
131
130
|
{
|
@@ -204,9 +204,6 @@ struct lcb_cntl_iops_info_st {
|
|
204
204
|
#define LCB_CNTL_CONFIG_ALL_NODES 0x20
|
205
205
|
|
206
206
|
/**
|
207
|
-
* @internal
|
208
|
-
*
|
209
|
-
* @volatile
|
210
207
|
* Reinitialize the instance using a connection string. Only options and
|
211
208
|
* the hostlists are used from this string. The bucket in the string (if specified)
|
212
209
|
* and any SSL options (i.e. `couchbases://` or `ssl=no_verify`) are ignored.
|
@@ -214,6 +211,7 @@ struct lcb_cntl_iops_info_st {
|
|
214
211
|
*
|
215
212
|
* This is the newer variant of @ref LCB_CNTL_CONFIG_ALL_NODES
|
216
213
|
* @cntl_arg_setonly{const char *}
|
214
|
+
* @internal
|
217
215
|
*/
|
218
216
|
#define LCB_CNTL_REINIT_CONNSTR 0x2B
|
219
217
|
|
@@ -290,7 +288,6 @@ struct lcb_cntl_rdballocfactory {
|
|
290
288
|
lcb_RDBALLOCFACTORY factory;
|
291
289
|
};
|
292
290
|
/**
|
293
|
-
* @volatile
|
294
291
|
* Set the allocator factory used by libcouchbase. The allocator factory is
|
295
292
|
* a function invoked with no arguments which yields a new rdb_ALLOCATOR
|
296
293
|
* object. Currently the use and API of this object is considered internal
|
@@ -299,6 +296,7 @@ struct lcb_cntl_rdballocfactory {
|
|
299
296
|
* Mode|Arg
|
300
297
|
* ----|---
|
301
298
|
* Set, Get | `lcb_cntl_rdballocfactory*`
|
299
|
+
* @volatile
|
302
300
|
*/
|
303
301
|
#define LCB_CNTL_RDBALLOCFACTORY 0x27
|
304
302
|
|
@@ -319,37 +317,37 @@ typedef enum {
|
|
319
317
|
|
320
318
|
|
321
319
|
/**
|
322
|
-
* @volatile
|
323
320
|
* @brief Persist heuristic vbucket information across updates.
|
324
321
|
*
|
325
322
|
* As of version 2.4.8 this option no longer has any effect, and vBucket
|
326
323
|
* heuristics are always retained for a maximum of 20 seconds.
|
327
324
|
* @cntl_arg_both{int*}
|
325
|
+
* @volatile
|
328
326
|
*/
|
329
327
|
#define LCB_CNTL_VBGUESS_PERSIST 0x32
|
330
328
|
|
331
329
|
/**
|
332
|
-
* @volatile
|
333
330
|
* This is a collection of various options which sacrifice data safety for
|
334
331
|
* speed.
|
332
|
+
* @volatile
|
335
333
|
*/
|
336
334
|
#define LCB_CNTL_UNSAFE_OPTIMIZE 0x33
|
337
335
|
|
338
336
|
/**
|
339
|
-
* @volatile
|
340
337
|
* Disable or enable Nagle's algorithm. The default is to disable it, as it
|
341
338
|
* will typically reduce latency. In general it is recommended not to touch
|
342
339
|
* this setting. It is here mainly for debugging.
|
343
340
|
*
|
344
341
|
* Conventionally, the option to disable Nagle's algorithm is called "TCP_NODELAY",
|
345
342
|
* thus if this value is one, Nagle is off, and vice versa.
|
343
|
+
* @volatile
|
346
344
|
*/
|
347
345
|
#define LCB_CNTL_TCP_NODELAY 0x39
|
348
346
|
|
349
347
|
/**
|
350
|
-
* @volatile
|
351
348
|
* Get the lcb_HISTOGRAM object for key-value timings
|
352
349
|
* @cntl_arg_getonly{lcb_HISTOGRAM**}
|
350
|
+
* @volatile
|
353
351
|
*/
|
354
352
|
#define LCB_CNTL_KVTIMINGS 0x3C
|
355
353
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright
|
3
|
+
* Copyright 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.
|
@@ -73,14 +73,25 @@ extern "C" {
|
|
73
73
|
* pointer types depending on whether the `mode` is retrieval or storage.
|
74
74
|
*
|
75
75
|
*
|
76
|
-
* @section lcb-
|
76
|
+
* @section lcb-time-info Timeout and Time Value Settings
|
77
|
+
*
|
78
|
+
* There are various settings on the library that control behavior with
|
79
|
+
* respect to wall clock time.
|
77
80
|
*
|
78
81
|
* Timeout settings control how long the library will wait for a certain event
|
79
82
|
* before proceeding to the next course of action (which may either be to try
|
80
83
|
* a different operation or fail the current one, depending on the specific
|
81
84
|
* timeout).
|
82
85
|
*
|
83
|
-
*
|
86
|
+
* Other settings may configure how often the library proactively polls for
|
87
|
+
* a configuration update, retries various interally retried operations and
|
88
|
+
* so forth.
|
89
|
+
*
|
90
|
+
* Time values are specified in _microseconds_ stored within an `lcb_U32`.
|
91
|
+
*
|
92
|
+
* When specified as an argument to lcb_cntl_string() or through the connection
|
93
|
+
* string, it will be parsed from a string float value where the integer-part
|
94
|
+
* is in seconds and the fractional-part is in fractions of a second.
|
84
95
|
*
|
85
96
|
* Note that timeouts in libcouchbase are implemented via an event loop
|
86
97
|
* scheduler. As such their accuracy and promptness is limited by how
|
@@ -133,7 +144,7 @@ extern "C" {
|
|
133
144
|
*
|
134
145
|
* @cntl_arg_both{lcbU32*}
|
135
146
|
* @committed
|
136
|
-
* @see lcb-
|
147
|
+
* @see lcb-time-info
|
137
148
|
*/
|
138
149
|
#define LCB_CNTL_OP_TIMEOUT 0x00
|
139
150
|
|
@@ -165,13 +176,27 @@ extern "C" {
|
|
165
176
|
*/
|
166
177
|
#define LCB_CNTL_BUCKETNAME 0x30
|
167
178
|
|
179
|
+
/**
|
180
|
+
* @brief Get the bucket type.
|
181
|
+
* This returns the bucket type - which is either of the following:
|
182
|
+
*
|
183
|
+
* * LCB_BTYPE_UNSPEC
|
184
|
+
* * LCB_BTYPE_COUCHBASE
|
185
|
+
* * LCB_BTYPE_EPHEMERAL
|
186
|
+
* * LCB_BTYPE_MEMCACHED
|
187
|
+
*
|
188
|
+
* @see https://developer.couchbase.com/documentation/server/current/architecture/core-data-access-buckets.html
|
189
|
+
*
|
190
|
+
* @cntl_arg_getonly{lcb_BTYPE*}
|
191
|
+
*/
|
192
|
+
#define LCB_CNTL_BUCKETTYPE 0x48
|
193
|
+
|
168
194
|
/**
|
169
195
|
* @brief Get the handle type.
|
170
196
|
* This returns the handle type - which is either LCB_TYPE_CLUSTER or
|
171
197
|
* LCB_TYPE_BUCKET
|
172
198
|
*
|
173
199
|
* @cntl_arg_getonly{lcb_type_t*}
|
174
|
-
* @uncommitted
|
175
200
|
*/
|
176
201
|
#define LCB_CNTL_HANDLETYPE 0x04
|
177
202
|
|
@@ -179,7 +204,6 @@ extern "C" {
|
|
179
204
|
* Obtains the current cluster configuration from the client.
|
180
205
|
*
|
181
206
|
* @cntl_arg_getonly{lcbvb_CONFIG**}
|
182
|
-
* @uncommitted
|
183
207
|
*/
|
184
208
|
#define LCB_CNTL_VBCONFIG 0x05
|
185
209
|
|
@@ -222,13 +246,12 @@ typedef struct lcb_cntl_vbinfo_st {
|
|
222
246
|
* update is requested again.
|
223
247
|
*
|
224
248
|
* @cntl_arg_both{lcb_SIZE*}
|
225
|
-
* @uncommitted
|
226
249
|
*/
|
227
250
|
#define LCB_CNTL_CONFERRTHRESH 0x0c
|
228
251
|
|
229
252
|
/**
|
230
253
|
* @brief Default timeout for lcb_durability_poll()
|
231
|
-
* @ingroup lcb-
|
254
|
+
* @ingroup lcb-time-info
|
232
255
|
*
|
233
256
|
* This is the time the client will
|
234
257
|
* spend sending repeated probes to a given key's vBucket masters and replicas
|
@@ -248,7 +271,12 @@ typedef struct lcb_cntl_vbinfo_st {
|
|
248
271
|
* @committed*/
|
249
272
|
#define LCB_CNTL_DURABILITY_INTERVAL 0x0e
|
250
273
|
|
251
|
-
|
274
|
+
/**
|
275
|
+
* @brief Timeout for otherwise unspecified HTTP requests
|
276
|
+
*
|
277
|
+
* Examples of these kinds of HTTP requests might be cluster management,
|
278
|
+
* user management, etc.
|
279
|
+
*
|
252
280
|
* @cntl_arg_both{lcb_U32*}
|
253
281
|
* @committed*/
|
254
282
|
#define LCB_CNTL_HTTP_TIMEOUT 0x0f
|
@@ -323,7 +351,6 @@ typedef struct lcb_cntl_vbinfo_st {
|
|
323
351
|
* libcouchbase API, after which it may have been freed.
|
324
352
|
*
|
325
353
|
* @cntl_arg_get_and_set{char**, char*}
|
326
|
-
* @uncommitted
|
327
354
|
*/
|
328
355
|
#define LCB_CNTL_FORCE_SASL_MECH 0x16
|
329
356
|
|
@@ -360,7 +387,6 @@ struct lcb_logprocs_st;
|
|
360
387
|
/**
|
361
388
|
* @brief Logger callback
|
362
389
|
*
|
363
|
-
* @uncommitted
|
364
390
|
*
|
365
391
|
* This callback is invoked for each logging message emitted
|
366
392
|
* @param procs the logging structure provided
|
@@ -378,7 +404,7 @@ typedef void (*lcb_logging_callback)(struct lcb_logprocs_st *procs,
|
|
378
404
|
|
379
405
|
/**
|
380
406
|
* @brief Logging context
|
381
|
-
* @
|
407
|
+
* @volatile
|
382
408
|
*
|
383
409
|
* This structure defines the logging handlers. Currently there is only
|
384
410
|
* a single field defined which is the default callback for the loggers.
|
@@ -415,13 +441,14 @@ typedef struct lcb_logprocs_st {
|
|
415
441
|
*
|
416
442
|
* @cntl_arg_both{lcb_U32*}
|
417
443
|
* @see LCB_CNTL_CONFERRTHRESH
|
418
|
-
* @uncommitted
|
419
444
|
*/
|
420
445
|
#define LCB_CNTL_CONFDELAY_THRESH 0x19
|
421
446
|
|
422
|
-
|
447
|
+
/**
|
448
|
+
* @brief Get the transport used to fetch cluster configuration.
|
423
449
|
* @cntl_arg_getonly{lcb_config_transport_t*}
|
424
|
-
* @uncommitted
|
450
|
+
* @uncommitted
|
451
|
+
*/
|
425
452
|
#define LCB_CNTL_CONFIG_TRANSPORT 0x1A
|
426
453
|
|
427
454
|
/**
|
@@ -468,19 +495,22 @@ typedef struct lcb_logprocs_st {
|
|
468
495
|
*/
|
469
496
|
#define LCB_CNTL_HTCONFIG_IDLE_TIMEOUT 0x1C
|
470
497
|
|
471
|
-
|
498
|
+
/**
|
499
|
+
* @brief Get the current SCM changeset for the library binary
|
472
500
|
* @cntl_arg_getonly{char**}
|
473
|
-
|
501
|
+
*/
|
474
502
|
#define LCB_CNTL_CHANGESET 0x1F
|
475
503
|
|
476
504
|
/**
|
477
|
-
* @brief
|
505
|
+
* @brief File used for the configuration cache.
|
478
506
|
*
|
479
507
|
* The configuration
|
480
508
|
* cache allows to bootstrap from a cluster without using the initial
|
481
509
|
* bootstrap connection, considerably reducing latency. If the file passed
|
482
510
|
* does not exist, the normal bootstrap process is performed and the file
|
483
|
-
* is written to with the current information.
|
511
|
+
* is written to with the current information. File will be updated as
|
512
|
+
* the configuration in the cluster changes. Multiple instances may race
|
513
|
+
* to update the file, and that is the intended behavior.
|
484
514
|
*
|
485
515
|
* @note The leading directories for the file must exist, otherwise the file
|
486
516
|
* will never be created.
|
@@ -529,12 +559,14 @@ typedef enum {
|
|
529
559
|
* @see LCB_CNTL_SSL_MODE
|
530
560
|
*/
|
531
561
|
#define LCB_CNTL_SSL_CERT 0x23
|
532
|
-
|
562
|
+
/**
|
563
|
+
* Alias for @ref LCB_CNTL_SSL_CERT for backward compatibility.
|
564
|
+
* @deprecated
|
565
|
+
*/
|
533
566
|
#define LCB_CNTL_SSL_CACERT LCB_CNTL_SSL_CERT
|
534
567
|
|
535
568
|
/**
|
536
|
-
* @brief
|
537
|
-
* Select retry mode to manipulate
|
569
|
+
* @brief Select retry mode to manipulate
|
538
570
|
*/
|
539
571
|
typedef enum {
|
540
572
|
LCB_RETRY_ON_TOPOCHANGE = 0, /**< Select retry for topology */
|
@@ -577,8 +609,10 @@ typedef enum {
|
|
577
609
|
*/
|
578
610
|
#define LCB_RETRYOPT_CREATE(mode, policy) (((mode) << 16) | policy)
|
579
611
|
|
580
|
-
|
581
|
-
#define
|
612
|
+
/** Get mode from retry setting value */
|
613
|
+
#define LCB_RETRYOPT_GETMODE(u) ((u) >> 16)
|
614
|
+
/** Get policy from retry setting value */
|
615
|
+
#define LCB_RETRYOPT_GETPOLICY(u) ((u)&0xffff)
|
582
616
|
|
583
617
|
/**
|
584
618
|
* @volatile
|
@@ -637,12 +671,9 @@ typedef enum {
|
|
637
671
|
} lcb_HTCONFIG_URLTYPE;
|
638
672
|
|
639
673
|
/**
|
640
|
-
* @volatile - Primarily here to support tests and buggy HTTP servers/proxies
|
641
|
-
* which do not like to maintain a connection upon receipt of a 404.
|
642
|
-
*
|
643
674
|
* @brief Set the URL selection mode.
|
644
675
|
*
|
645
|
-
* The URL type can be a mask of the lcb_HTCONFIG_URLTYPE constants which
|
676
|
+
* The URL type can be a mask of the #lcb_HTCONFIG_URLTYPE constants which
|
646
677
|
* indicate which URLs the HTTP provider should use.
|
647
678
|
*
|
648
679
|
* The default is to use the `25PLUS` URI first, and fallback on the compat uri
|
@@ -654,11 +685,13 @@ typedef enum {
|
|
654
685
|
* This setting is only used when CCCP is disabled. This will typically be for
|
655
686
|
* older clusters or for memcached buckets.
|
656
687
|
* @cntl_arg_both{`int*` (value is one of @ref lcb_HTCONFIG_URLTYPE)}
|
688
|
+
|
689
|
+
* @volatile Primarily here to support tests and buggy HTTP servers/proxies
|
690
|
+
* which do not like to maintain a connection upon receipt of a 404.
|
657
691
|
*/
|
658
692
|
#define LCB_CNTL_HTCONFIG_URLTYPE 0x25
|
659
693
|
|
660
694
|
/**
|
661
|
-
* @volatile
|
662
695
|
* Determines whether to run the event loop internally within lcb_destroy()
|
663
696
|
* until no more I/O resources remain for the library. This is usually only
|
664
697
|
* necessary if you are creating a lot of instances and/or are using memory
|
@@ -666,12 +699,11 @@ typedef enum {
|
|
666
699
|
*
|
667
700
|
* @cntl_arg_both{`int*` (as a boolean)}
|
668
701
|
* @see lcb_destroy_async() and lcb_set_destroy_callback()
|
702
|
+
* @volatile
|
669
703
|
*/
|
670
704
|
#define LCB_CNTL_SYNCDESTROY 0x28
|
671
705
|
|
672
706
|
/**
|
673
|
-
* @committed
|
674
|
-
*
|
675
707
|
* Sets the logging level for the console logger. If a logger is already
|
676
708
|
* initialized (either from the environment, or via lcb_cntl_logger() then
|
677
709
|
* this operation does nothing.
|
@@ -681,8 +713,8 @@ typedef enum {
|
|
681
713
|
* it from the environment.
|
682
714
|
*
|
683
715
|
* The argument passed to lcb_cntl() is an integer of 0 until
|
684
|
-
* `
|
685
|
-
* an enum type.
|
716
|
+
* `LCB_LOG_MAX`, though the actual type is of `lcb_U32` rather than
|
717
|
+
* an enum type #lcb_log_severity_t.
|
686
718
|
*
|
687
719
|
* @cntl_arg_setonly{const lcb_U32 *}
|
688
720
|
* @see LCB_CNTL_LOGGER
|
@@ -690,7 +722,6 @@ typedef enum {
|
|
690
722
|
#define LCB_CNTL_CONLOGGER_LEVEL 0x29
|
691
723
|
|
692
724
|
/**
|
693
|
-
* @uncommitted
|
694
725
|
*
|
695
726
|
* Sets the output file (as a `FILE*`) for the console logger. Note that
|
696
727
|
* any existing file pointer will be cleared (but not `fclose()`d.
|
@@ -710,8 +741,6 @@ typedef enum {
|
|
710
741
|
#define LCB_CNTL_CONLOGGER_FP 0x3B
|
711
742
|
|
712
743
|
/**
|
713
|
-
* @committed
|
714
|
-
*
|
715
744
|
* Sets the behavior for reporting network errors. By default network errors
|
716
745
|
* are returned as `LCB_NETWORK_ERROR` return codes for compatibility reasons.
|
717
746
|
* More detailed error codes may be available by enabling this option which will
|
@@ -726,7 +755,6 @@ typedef enum {
|
|
726
755
|
#define LCB_CNTL_DETAILED_ERRCODES 0x2A
|
727
756
|
|
728
757
|
/**
|
729
|
-
* @uncommitted
|
730
758
|
*
|
731
759
|
* Sets the interval at which the retry queue will attempt to resend a failed
|
732
760
|
* operation. When an operation fails and the retry policy (see
|
@@ -744,7 +772,6 @@ typedef enum {
|
|
744
772
|
#define LCB_CNTL_RETRY_INTERVAL 0x2C
|
745
773
|
|
746
774
|
/**
|
747
|
-
* @uncommitted
|
748
775
|
*
|
749
776
|
* When an operation has been retried more than once and it has still not
|
750
777
|
* succeeded, the library will attempt to back off for the operation by
|
@@ -756,7 +783,6 @@ typedef enum {
|
|
756
783
|
#define LCB_CNTL_RETRY_BACKOFF 0x2D
|
757
784
|
|
758
785
|
/**
|
759
|
-
* @volatile
|
760
786
|
* Whether commands are retried immediately upon receipt of not-my-vbucket
|
761
787
|
* replies.
|
762
788
|
*
|
@@ -766,22 +792,22 @@ typedef enum {
|
|
766
792
|
* and @ref LCB_CNTL_RETRY_BACKOFF settings. Disabling this setting will
|
767
793
|
* restore the older behavior. This may be used in case there are problems
|
768
794
|
* with the default heuristic/retry algorithm.
|
795
|
+
*
|
796
|
+
* @volatile
|
769
797
|
*/
|
770
798
|
#define LCB_CNTL_RETRY_NMV_IMM 0x37
|
771
799
|
|
772
800
|
/**
|
773
|
-
* @volatile
|
774
|
-
*
|
775
801
|
* Set the maximum pool size for pooled http (view request) sockets. This should
|
776
802
|
* be set to 1 (the default) unless you plan to execute concurrent view requests.
|
777
803
|
* You may set this to 0 to disable pooling
|
778
804
|
*
|
779
805
|
* @cntl_arg_both{lcb_SIZE}
|
806
|
+
* @volatile
|
780
807
|
*/
|
781
808
|
#define LCB_CNTL_HTTP_POOLSIZE 0x2E
|
782
809
|
|
783
810
|
/**
|
784
|
-
* @uncomitted
|
785
811
|
* Determine whether or not a new configuration should be received when an error
|
786
812
|
* is received over the HTTP API (i.e. via lcb_make_http_request().
|
787
813
|
*
|
@@ -789,24 +815,24 @@ typedef enum {
|
|
789
815
|
* expectedly issuing a lot of requests which may result in an error.
|
790
816
|
*
|
791
817
|
* @cntl_arg_both{int (as boolean)}
|
818
|
+
* @uncommitted
|
792
819
|
*/
|
793
820
|
#define LCB_CNTL_HTTP_REFRESH_CONFIG_ON_ERROR 0x2F
|
794
821
|
|
795
822
|
/**
|
796
|
-
* @volatile
|
797
823
|
* Set the behavior of the lcb_sched_leave() API call. By default the
|
798
824
|
* lcb_sched_leave() will also set up the necessary requirements for flushing
|
799
825
|
* to the network. If this option is off then an explicit call to
|
800
826
|
* lcb_sched_flush() must be performed instead.
|
801
827
|
*
|
802
828
|
* @cntl_arg_both{int (as boolean)}
|
829
|
+
* @volatile
|
803
830
|
*/
|
804
831
|
#define LCB_CNTL_SCHED_IMPLICIT_FLUSH 0x31
|
805
832
|
|
806
833
|
/**
|
807
|
-
* @volatile
|
808
834
|
*
|
809
|
-
*
|
835
|
+
* Request the server to return an additional 16 bytes of data for each
|
810
836
|
* mutation operation. This extra information may help with more reliable
|
811
837
|
* durability polling, but will also increase the size of the response packet.
|
812
838
|
*
|
@@ -819,8 +845,6 @@ typedef enum {
|
|
819
845
|
#define LCB_CNTL_FETCH_MUTATION_TOKENS 0x34
|
820
846
|
|
821
847
|
/**
|
822
|
-
* @volatile
|
823
|
-
*
|
824
848
|
* This setting determines whether the lcb_durability_poll() function will
|
825
849
|
* transparently attempt to use mutation token functionality (rather than checking
|
826
850
|
* the CAS). This option is most useful for older code which does
|
@@ -836,24 +860,23 @@ typedef enum {
|
|
836
860
|
* function.
|
837
861
|
*
|
838
862
|
* @cntl_arg_both{int (as boolean)}
|
863
|
+
* @volatile
|
839
864
|
*/
|
840
865
|
#define LCB_CNTL_DURABILITY_MUTATION_TOKENS 0x35
|
841
866
|
|
842
867
|
/**
|
843
|
-
* @volatile
|
844
|
-
*
|
845
868
|
* This read-only property determines if the mutation token mechanism is supported
|
846
869
|
* on the cluster itself. This will only be accurate once a single operation
|
847
870
|
* has been performed on the cluster - or in other words, once a connection
|
848
871
|
* to a data node has been established for the purposes of normal operations.
|
849
872
|
*
|
850
873
|
* @cntl_arg_getonly{int (as boolean)}
|
874
|
+
* @uncommitted
|
851
875
|
*/
|
852
876
|
#define LCB_CNTL_MUTATION_TOKENS_SUPPORTED 0x38
|
853
877
|
|
854
878
|
|
855
879
|
/**
|
856
|
-
* @uncommitted
|
857
880
|
* This setting determines if calls to lcb_wait() and lcb_wait3() will reset
|
858
881
|
* the timeout of pending operations to the time that lcb_wait() was called,
|
859
882
|
* rather than having the operation maintain the time of the call which
|
@@ -862,21 +885,21 @@ typedef enum {
|
|
862
885
|
* avoid prematurely having operations time out.
|
863
886
|
*
|
864
887
|
* @cntl_arg_both{int (as boolean)}
|
888
|
+
* @uncommitted
|
865
889
|
*
|
866
890
|
* Use `"readj_wait_tmo"` for the string version
|
867
891
|
*/
|
868
892
|
#define LCB_CNTL_RESET_TIMEOUT_ON_WAIT 0x3A
|
869
893
|
|
870
894
|
/**
|
871
|
-
* @volatile
|
872
895
|
* Clears the internal prepared statement cache for N1QL
|
873
896
|
*
|
874
897
|
* This does not take any arguments, and is valid only on @ref LCB_CNTL_SET
|
898
|
+
* @uncommitted
|
875
899
|
*/
|
876
900
|
#define LCB_CNTL_N1QL_CLEARACHE 0x3E
|
877
901
|
|
878
902
|
/**
|
879
|
-
* @committed
|
880
903
|
* Sets additional text for negotiation. This allows wrappers or applications
|
881
904
|
* to add additional identifying information which can then be seen in the
|
882
905
|
* server logs.
|
@@ -902,12 +925,11 @@ typedef const char *lcb_BUCKETCRED[2];
|
|
902
925
|
/**
|
903
926
|
* Set the amount of time the client should wait before retrying a
|
904
927
|
* not-my-vbucket response packet. The default is 100ms. The value should
|
905
|
-
* be specified in microseconds
|
906
|
-
*
|
907
|
-
* @committed
|
908
|
-
* @cntl_arg_both{lcb_U32*}
|
928
|
+
* be specified in microseconds.
|
909
929
|
*
|
910
930
|
* Use `"retry_nmv_interval"` with lcb_cntl_string()
|
931
|
+
*
|
932
|
+
* @cntl_arg_both{lcb_U32*}
|
911
933
|
*/
|
912
934
|
#define LCB_CNTL_RETRY_NMV_INTERVAL 0x41
|
913
935
|
|
@@ -919,7 +941,6 @@ typedef const char *lcb_BUCKETCRED[2];
|
|
919
941
|
* @note This setting only works for event-style I/O plugins. This means it
|
920
942
|
* has no effect on completion style plugins such as libuv or Windows IOCP
|
921
943
|
*
|
922
|
-
* @committed
|
923
944
|
* @cntl_arg_both{lcb_U32*}
|
924
945
|
*/
|
925
946
|
#define LCB_CNTL_READ_CHUNKSIZE 0x42
|
@@ -930,7 +951,6 @@ typedef const char *lcb_BUCKETCRED[2];
|
|
930
951
|
*
|
931
952
|
* Use `enable_errmap` in the connection string
|
932
953
|
*
|
933
|
-
* @volatile
|
934
954
|
* @cntl_arg_both{int* (as boolean)}
|
935
955
|
*/
|
936
956
|
#define LCB_CNTL_ENABLE_ERRMAP 0x43
|
@@ -945,7 +965,6 @@ typedef const char *lcb_BUCKETCRED[2];
|
|
945
965
|
*
|
946
966
|
* Use `select_bucket` in the connection string
|
947
967
|
*
|
948
|
-
* @volatile
|
949
968
|
* @cntl_arg_both{int* (as boolean)}
|
950
969
|
*/
|
951
970
|
#define LCB_CNTL_SELECT_BUCKET 0x44
|
@@ -956,7 +975,6 @@ typedef const char *lcb_BUCKETCRED[2];
|
|
956
975
|
*
|
957
976
|
* The keepalive interval will be set to the operating system default.
|
958
977
|
*
|
959
|
-
* @committed
|
960
978
|
* @cntl_arg_both{int* (as boolean)}
|
961
979
|
*/
|
962
980
|
#define LCB_CNTL_TCP_KEEPALIVE 0x45
|
@@ -970,7 +988,6 @@ typedef const char *lcb_BUCKETCRED[2];
|
|
970
988
|
* This option facilitates 'fast failover' - in that the client can preemptively
|
971
989
|
* check for any cluster topology updates before encountering an error.
|
972
990
|
*
|
973
|
-
* @volatile
|
974
991
|
* @cntl_arg_both{lcb_U32*}
|
975
992
|
*
|
976
993
|
* The value for this option is a time value. See the top of this header
|
@@ -998,15 +1015,18 @@ typedef const char *lcb_BUCKETCRED[2];
|
|
998
1015
|
* servers don't understand anyway). To disable the sending of hello, set this
|
999
1016
|
* value to false.
|
1000
1017
|
*
|
1001
|
-
* @uncommitted
|
1002
1018
|
* @cntl_arg_both{int* (as boolean)}
|
1019
|
+
* @committed
|
1003
1020
|
*
|
1004
1021
|
* You can also use `send_hello=false` in the connection string.
|
1005
1022
|
*/
|
1006
1023
|
#define LCB_CNTL_SEND_HELLO 0x47
|
1007
1024
|
|
1008
|
-
/**
|
1009
|
-
|
1025
|
+
/**
|
1026
|
+
* This is not a command, but rather an indicator of the last item.
|
1027
|
+
* @internal
|
1028
|
+
*/
|
1029
|
+
#define LCB_CNTL__MAX 0x49
|
1010
1030
|
/**@}*/
|
1011
1031
|
|
1012
1032
|
#ifdef __cplusplus
|