libcouchbase 1.3.0 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +2 -2
- data/ext/libcouchbase/CMakeLists.txt +51 -25
- data/ext/libcouchbase/CONTRIBUTING.md +46 -65
- data/ext/libcouchbase/RELEASE_NOTES.markdown +163 -0
- data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +9 -11
- data/ext/libcouchbase/cmake/Modules/FindProfiler.cmake +16 -0
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +6 -6
- data/ext/libcouchbase/cmake/config-cmake.h.in +2 -0
- data/ext/libcouchbase/cmake/configure +16 -0
- data/ext/libcouchbase/example/CMakeLists.txt +17 -2
- data/ext/libcouchbase/example/analytics/.gitignore +1 -0
- data/ext/libcouchbase/example/analytics/analytics.c +158 -0
- data/ext/libcouchbase/example/analytics/build-queries.rb +34 -0
- data/ext/libcouchbase/example/analytics/cJSON.c +1 -0
- data/ext/libcouchbase/example/analytics/cJSON.h +1 -0
- data/ext/libcouchbase/example/analytics/queries.h +113 -0
- data/ext/libcouchbase/example/analytics/queries/00-show-dataverse.json +5 -0
- data/ext/libcouchbase/example/analytics/queries/01-setup-dataset-breweries.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/02-setup-dataset-beers.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/03-initiate-shadow.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/04-list-datasets.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/05-count-breweries.json +5 -0
- data/ext/libcouchbase/example/analytics/queries/06-first-brewery.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/07-key-based-lookup.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/08-exact-match-lookup.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/09-exact-match-lookup-different-shape.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/10-other-query-filters.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/11-equijoin.json +9 -0
- data/ext/libcouchbase/example/analytics/queries/12-equijoin-select-star.json +10 -0
- data/ext/libcouchbase/example/analytics/queries/13-ansi-join.json +8 -0
- data/ext/libcouchbase/example/analytics/queries/14-join-select-values.json +8 -0
- data/ext/libcouchbase/example/analytics/queries/15-nested-outer-join.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/16-theta-join.json +8 -0
- data/ext/libcouchbase/example/analytics/queries/17-existential-quantification.json +9 -0
- data/ext/libcouchbase/example/analytics/queries/18-universal-quantification.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/19-simple-aggregation.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/20-simple-aggregation-unwrapped-value.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/21-simple-aggregation-explicit.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/22-grouping-and-aggregation.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/23-grouping-and-aggregation-with-hint.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/24-grouping-and-limits.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/25-named-parameters.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/26-positional-parameters.json +7 -0
- data/ext/libcouchbase/example/crypto/common_provider.c +2 -0
- data/ext/libcouchbase/example/crypto/common_provider.h +2 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_decrypt.c +5 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_encrypt.c +0 -1
- data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.c +16 -26
- data/ext/libcouchbase/example/db/db.c +10 -6
- data/ext/libcouchbase/example/fts/.gitignore +1 -0
- data/ext/libcouchbase/example/fts/build-queries.rb +33 -0
- data/ext/libcouchbase/example/fts/fts.c +142 -0
- data/ext/libcouchbase/example/fts/queries.h +61 -0
- data/ext/libcouchbase/example/fts/queries/00-simple-text-query.json +12 -0
- data/ext/libcouchbase/example/fts/queries/01-simple-text-query-on-non-default-index.json +9 -0
- data/ext/libcouchbase/example/fts/queries/02-simple-text-query-on-stored-field.json +13 -0
- data/ext/libcouchbase/example/fts/queries/03-match-query-with-facet.json +19 -0
- data/ext/libcouchbase/example/fts/queries/04-docid-query.json +11 -0
- data/ext/libcouchbase/example/fts/queries/05-unanalyzed-term-query-with-fuzziness-level-of-0.json +13 -0
- data/ext/libcouchbase/example/fts/queries/06-unanalyzed-term-query-with-fuzziness-level-of-2.json +14 -0
- data/ext/libcouchbase/example/fts/queries/07-match-phrase-query.json +13 -0
- data/ext/libcouchbase/example/fts/queries/08-phrase-query.json +16 -0
- data/ext/libcouchbase/example/fts/queries/09-query-string-query.json +9 -0
- data/ext/libcouchbase/example/fts/queries/10-conjunction-query.json +21 -0
- data/ext/libcouchbase/example/fts/queries/11-wild-card-query.json +13 -0
- data/ext/libcouchbase/example/fts/queries/12-numeric-range-query.json +11 -0
- data/ext/libcouchbase/example/fts/queries/13-regexp-query.json +13 -0
- data/ext/libcouchbase/example/minimal/.gitignore +1 -0
- data/ext/libcouchbase/example/minimal/query.c +185 -0
- data/ext/libcouchbase/example/subdoc/subdoc-xattrs.c +2 -2
- data/ext/libcouchbase/example/tracing/cJSON.c +1 -1
- data/ext/libcouchbase/example/tracing/cJSON.h +1 -1
- data/ext/libcouchbase/include/libcouchbase/cbft.h +38 -4
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +8 -97
- data/ext/libcouchbase/include/libcouchbase/cntl.h +288 -8
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +47 -10
- data/ext/libcouchbase/include/libcouchbase/crypto.h +214 -48
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +12 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +33 -2
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +1 -1
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +87 -13
- data/ext/libcouchbase/include/libcouchbase/subdoc.h +3 -7
- data/ext/libcouchbase/include/libcouchbase/tracing.h +174 -56
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +21 -1
- data/ext/libcouchbase/include/libcouchbase/views.h +49 -4
- data/ext/libcouchbase/packaging/deb/control +2 -3
- data/ext/libcouchbase/packaging/parse-git-describe.pl +1 -1
- data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +7 -5
- data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +7 -5
- data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +14 -12
- data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +3 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +14 -6
- data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +7 -5
- data/ext/libcouchbase/src/bootstrap.cc +6 -1
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +2 -7
- data/ext/libcouchbase/src/bucketconfig/bc_file.cc +1 -1
- data/ext/libcouchbase/src/bucketconfig/bc_http.cc +4 -11
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +29 -36
- data/ext/libcouchbase/src/bucketconfig/confmon.cc +4 -2
- data/ext/libcouchbase/src/cntl.cc +181 -151
- data/ext/libcouchbase/src/config_static.h +1 -1
- data/ext/libcouchbase/src/connspec.cc +5 -1
- data/ext/libcouchbase/src/connspec.h +3 -1
- data/ext/libcouchbase/src/crypto.cc +93 -80
- data/ext/libcouchbase/src/dns-srv.cc +1 -1
- data/ext/libcouchbase/src/handler.cc +0 -1
- data/ext/libcouchbase/src/http/http-priv.h +1 -0
- data/ext/libcouchbase/src/http/http.cc +1 -2
- data/ext/libcouchbase/src/instance.cc +21 -2
- data/ext/libcouchbase/src/internal.h +1 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +24 -3
- data/ext/libcouchbase/src/lcbio/ioutils.cc +1 -1
- data/ext/libcouchbase/src/lcbio/rw-inl.h +22 -1
- data/ext/libcouchbase/src/lcbio/ssl.h +2 -0
- data/ext/libcouchbase/src/mc/compress.cc +18 -11
- data/ext/libcouchbase/src/mc/mcreq.c +2 -0
- data/ext/libcouchbase/src/mc/mcreq.h +1 -1
- data/ext/libcouchbase/src/mcserver/mcserver.cc +163 -6
- data/ext/libcouchbase/src/mcserver/negotiate.cc +17 -7
- data/ext/libcouchbase/src/n1ql/n1ql.cc +12 -3
- data/ext/libcouchbase/src/newconfig.cc +4 -3
- data/ext/libcouchbase/src/nodeinfo.cc +1 -7
- data/ext/libcouchbase/src/operations/observe.cc +1 -0
- data/ext/libcouchbase/src/operations/ping.cc +5 -3
- data/ext/libcouchbase/src/retryq.cc +22 -0
- data/ext/libcouchbase/src/retryq.h +2 -1
- data/ext/libcouchbase/src/rnd.cc +5 -12
- data/ext/libcouchbase/src/settings.c +4 -7
- data/ext/libcouchbase/src/settings.h +6 -2
- data/ext/libcouchbase/src/strcodecs/base64.c +59 -0
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +2 -0
- data/ext/libcouchbase/src/trace.h +2 -2
- data/ext/libcouchbase/src/tracing/span.cc +177 -45
- data/ext/libcouchbase/src/tracing/threshold_logging_tracer.cc +70 -28
- data/ext/libcouchbase/src/tracing/tracing-internal.h +33 -48
- data/ext/libcouchbase/src/vbucket/vbucket.c +146 -30
- data/ext/libcouchbase/src/wait.cc +1 -1
- data/ext/libcouchbase/tests/CMakeLists.txt +13 -4
- data/ext/libcouchbase/tests/iotests/mock-environment.cc +1 -1
- data/ext/libcouchbase/tests/iotests/t_misc.cc +2 -2
- data/ext/libcouchbase/tests/iotests/t_views.cc +1 -1
- data/ext/libcouchbase/tests/iotests/testutil.cc +3 -2
- data/ext/libcouchbase/tests/vbucket/confdata/map_node_present_nodesext_missing_nodes.json +94 -0
- data/ext/libcouchbase/tests/vbucket/t_config.cc +15 -0
- data/ext/libcouchbase/tools/CMakeLists.txt +11 -6
- data/ext/libcouchbase/tools/cbc-handlers.h +9 -0
- data/ext/libcouchbase/tools/cbc-proxy.cc +1 -1
- data/ext/libcouchbase/tools/cbc.cc +33 -5
- data/ext/libcouchbase/tools/common/options.cc +1 -1
- data/ext/libcouchbase/tools/extract-packets.rb +110 -0
- data/lib/libcouchbase/connection.rb +13 -5
- data/lib/libcouchbase/ext/tasks.rb +1 -1
- data/lib/libcouchbase/version.rb +1 -1
- metadata +62 -7
@@ -52,7 +52,9 @@ typedef enum {
|
|
52
52
|
LCBVB_SVCTYPE_IXADMIN, /**< Index administration */
|
53
53
|
LCBVB_SVCTYPE_N1QL, /**< N1QL Query */
|
54
54
|
LCBVB_SVCTYPE_FTS, /**< Fulltext */
|
55
|
-
|
55
|
+
LCBVB_SVCTYPE_ANALYTICS, /**< Analytics Query */
|
56
|
+
/* for backward compatiblity */
|
57
|
+
#define LCBVB_SVCTYPE_CBAS LCBVB_SVCTYPE_ANALYTICS
|
56
58
|
LCBVB_SVCTYPE__MAX
|
57
59
|
} lcbvb_SVCTYPE;
|
58
60
|
|
@@ -101,6 +103,9 @@ typedef struct {
|
|
101
103
|
char *ftspath; /**< Path prefix for fulltext queries */
|
102
104
|
char *cbaspath; /**< Path prefix for analytics queries */
|
103
105
|
unsigned nvbs; /**< Total number of vbuckets the server has assigned */
|
106
|
+
char *alt_hostname; /**< selected alternative hostname for the node */
|
107
|
+
lcbvb_SERVICES alt_svc; /**< selected alternative plain services */
|
108
|
+
lcbvb_SERVICES alt_svc_ssl; /**< selected alternative SSL Services */
|
104
109
|
} lcbvb_SERVER;
|
105
110
|
|
106
111
|
/**@volatile. ABI/API compatibility not guaranteed between versions */
|
@@ -194,6 +199,13 @@ lcbvb_parse_json(const char *data);
|
|
194
199
|
* Load a JSON-based configuration string into a configuration object
|
195
200
|
* @param vbc Object to populate
|
196
201
|
* @param data NUL-terminated string to parse
|
202
|
+
* @param source hostname of the node, which emitted configuration. Pointer
|
203
|
+
* to NULL will disable heuristic when network argument is pointer to NULL
|
204
|
+
* string.
|
205
|
+
* @param network pointer to string, which specified key in alternative
|
206
|
+
* addresses dict. Use pointer NULL string to trigger heuristic, in this
|
207
|
+
* case, the function will try to match configuration source address to
|
208
|
+
* the list of addresses to determine best network.
|
197
209
|
* @return 0 on success, nonzero on failure
|
198
210
|
* @note it is recommended to use this function rather than lcbvb_parse_json()
|
199
211
|
* as this will contain the error string in the configuration in case of parse
|
@@ -203,6 +215,14 @@ LIBCOUCHBASE_API
|
|
203
215
|
int
|
204
216
|
lcbvb_load_json(lcbvb_CONFIG *vbc, const char *data);
|
205
217
|
|
218
|
+
|
219
|
+
/**
|
220
|
+
* @uncommmitted
|
221
|
+
*/
|
222
|
+
LIBCOUCHBASE_API
|
223
|
+
int
|
224
|
+
lcbvb_load_json_ex(lcbvb_CONFIG *vbc, const char *data, const char *source, char **network);
|
225
|
+
|
206
226
|
/**@brief Serialize the current config as a JSON string.
|
207
227
|
* @volatile
|
208
228
|
* Serialize the current configuration as a JSON string. The string returned is
|
@@ -37,6 +37,9 @@ extern "C" {
|
|
37
37
|
namespace lcb { namespace views { struct ViewRequest; } }
|
38
38
|
typedef lcb::views::ViewRequest* lcb_VIEWHANDLE;
|
39
39
|
#else
|
40
|
+
/**
|
41
|
+
* Pointer for request instance
|
42
|
+
*/
|
40
43
|
typedef struct lcbview_REQUEST_st *lcb_VIEWHANDLE;
|
41
44
|
#endif
|
42
45
|
|
@@ -294,17 +297,59 @@ lcb_view_query_initcmd(lcb_CMDVIEWQUERY *vq,
|
|
294
297
|
LIBCOUCHBASE_API
|
295
298
|
void
|
296
299
|
lcb_view_cancel(lcb_t instance, lcb_VIEWHANDLE handle);
|
300
|
+
/**@}*/
|
297
301
|
|
302
|
+
|
303
|
+
/**
|
304
|
+
* @ingroup lcb-public-api
|
305
|
+
* @addtogroup lcb-tracing-api
|
306
|
+
* @{
|
307
|
+
*/
|
298
308
|
#ifdef LCB_TRACING
|
309
|
+
|
299
310
|
/**
|
300
|
-
*
|
311
|
+
* Associate parent tracing span with the View request.
|
312
|
+
*
|
313
|
+
* @param instance the instance
|
314
|
+
* @param handle View request handle
|
315
|
+
* @param span parent span
|
316
|
+
*
|
317
|
+
* @par Attach parent tracing span to view request object.
|
318
|
+
* @code{.c}
|
319
|
+
* lcb_CMDVIEWQUERY vcmd = {0};
|
320
|
+
* char *doc_name = "beer";
|
321
|
+
* char *view_name = "by_location";
|
322
|
+
* char *options = "reduce=false&limit=3";
|
323
|
+
*
|
324
|
+
* vcmd.callback = view_callback;
|
325
|
+
* vcmd.ddoc = doc_name;
|
326
|
+
* vcmd.nddoc = strlen(doc_name);
|
327
|
+
* vcmd.view = view_name;
|
328
|
+
* vcmd.nview = strlen(view_name);
|
329
|
+
* vcmd.optstr = options;
|
330
|
+
* vcmd.noptstr = strlen(options);
|
331
|
+
* vcmd.cmdflags = LCB_CMDVIEWQUERY_F_INCLUDE_DOCS;
|
332
|
+
*
|
333
|
+
* lcb_VIEWHANDLE handle;
|
334
|
+
* vcmd.handle = &handle;
|
335
|
+
*
|
336
|
+
* err = lcb_view_query(instance, NULL, &vcmd);
|
337
|
+
* if (err != LCB_SUCCESS) {
|
338
|
+
* die(instance, "Couldn't schedule view operation", err);
|
339
|
+
* }
|
340
|
+
* lcb_view_set_parent_span(instance, handle, span);
|
341
|
+
* @endcode
|
342
|
+
*
|
343
|
+
* @see @ref example/tracing/views.c
|
344
|
+
* @committed
|
301
345
|
*/
|
302
346
|
LIBCOUCHBASE_API
|
303
347
|
void lcb_view_set_parent_span(lcb_t instance, lcb_VIEWHANDLE handle, lcbtrace_SPAN *span);
|
304
|
-
#endif
|
305
|
-
|
306
|
-
/**@}*/
|
307
348
|
|
349
|
+
#endif
|
350
|
+
/**
|
351
|
+
* @} (Group: Tracing)
|
352
|
+
*/
|
308
353
|
#ifdef __cplusplus
|
309
354
|
}
|
310
355
|
#endif
|
@@ -10,7 +10,7 @@ Vcs-Git: git://github.com/couchbase/libcouchbase.git
|
|
10
10
|
|
11
11
|
Package: libcouchbase2-libevent
|
12
12
|
Architecture: any
|
13
|
-
Depends:
|
13
|
+
Depends: libcouchbase2-core (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
|
14
14
|
Multi-Arch: same
|
15
15
|
Description: library for the Couchbase protocol (libevent backend)
|
16
16
|
libcouchbase is a library implementing Couchbase protocol.
|
@@ -19,7 +19,7 @@ Description: library for the Couchbase protocol (libevent backend)
|
|
19
19
|
|
20
20
|
Package: libcouchbase2-libev
|
21
21
|
Architecture: any
|
22
|
-
Depends:
|
22
|
+
Depends: libcouchbase2-core (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
|
23
23
|
Multi-Arch: same
|
24
24
|
Description: library for the Couchbase protocol (libev backend)
|
25
25
|
libcouchbase is a library implementing Couchbase protocol.
|
@@ -70,4 +70,3 @@ Description: library for the Couchbase protocol
|
|
70
70
|
libcouchbase is a library implementing Couchbase protocol.
|
71
71
|
.
|
72
72
|
This package provides the cbc tools built on libcouchbase library.
|
73
|
-
|
@@ -1,8 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
IF(LCB_INSTALL_HEADERS)
|
2
|
+
INSTALL(
|
3
|
+
FILES
|
4
|
+
libev_io_opts.h
|
5
|
+
DESTINATION
|
6
|
+
include/libcouchbase)
|
7
|
+
ENDIF(LCB_INSTALL_HEADERS)
|
6
8
|
|
7
9
|
IF(NOT (HAVE_LIBEV3 OR HAVE_LIBEV4))
|
8
10
|
RETURN()
|
@@ -1,8 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
IF(LCB_INSTALL_HEADERS)
|
2
|
+
INSTALL(
|
3
|
+
FILES
|
4
|
+
libevent_io_opts.h
|
5
|
+
DESTINATION
|
6
|
+
include/libcouchbase)
|
7
|
+
ENDIF(LCB_INSTALL_HEADERS)
|
6
8
|
|
7
9
|
|
8
10
|
IF(NOT (HAVE_LIBEVENT OR HAVE_LIBEVENT2))
|
@@ -1,16 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
IF(LCB_INSTALL_HEADERS)
|
2
|
+
INSTALL(
|
3
|
+
FILES
|
4
|
+
plugin-libuv.c
|
5
|
+
plugin-internal.h
|
6
|
+
libuv_compat.h
|
7
|
+
DESTINATION
|
8
|
+
include/libcouchbase/plugins/io/libuv)
|
8
9
|
|
9
|
-
INSTALL(
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
INSTALL(
|
11
|
+
FILES
|
12
|
+
libuv_io_opts.h
|
13
|
+
DESTINATION
|
14
|
+
include/libcouchbase)
|
15
|
+
ENDIF(LCB_INSTALL_HEADERS)
|
14
16
|
|
15
17
|
IF(NOT HAVE_LIBUV OR LCB_NO_PLUGINS OR NOT LCB_BUILD_LIBUV)
|
16
18
|
RETURN()
|
@@ -330,7 +330,6 @@ static int start_connect(lcb_io_opt_t iobase,
|
|
330
330
|
my_uvreq_t *uvr;
|
331
331
|
int ret;
|
332
332
|
int err_is_set = 0;
|
333
|
-
uv_os_fd_t fd = INVALID_SOCKET;
|
334
333
|
|
335
334
|
uvr = alloc_uvreq(sock, (generic_callback_t)callback);
|
336
335
|
if (!uvr) {
|
@@ -366,12 +365,17 @@ static int start_connect(lcb_io_opt_t iobase,
|
|
366
365
|
incref_sock(sock);
|
367
366
|
}
|
368
367
|
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
368
|
+
#if UV_VERSION_HEX >= 0x010000
|
369
|
+
{
|
370
|
+
uv_os_fd_t fd = INVALID_SOCKET;
|
371
|
+
/* Fetch socket descriptor for internal usage.
|
372
|
+
* For example to detect dead sockets. */
|
373
|
+
ret = uv_fileno((uv_handle_t *)&sock->tcp, &fd);
|
374
|
+
if (ret == 0) {
|
375
|
+
sock->base.socket = fd;
|
376
|
+
}
|
374
377
|
}
|
378
|
+
#endif
|
375
379
|
|
376
380
|
return ret;
|
377
381
|
}
|
@@ -620,6 +624,7 @@ static void set_last_error(my_iops_t *io, int error)
|
|
620
624
|
io->base.v.v1.error = uvc_last_errno(io->loop, error);
|
621
625
|
}
|
622
626
|
|
627
|
+
#if UV_VERSION_HEX >= 0x010000
|
623
628
|
static int check_closed(lcb_io_opt_t io, lcb_sockdata_t *sockbase, int flags)
|
624
629
|
{
|
625
630
|
my_sockdata_t *sd = (my_sockdata_t *)sockbase;
|
@@ -661,6 +666,7 @@ GT_RETRY:
|
|
661
666
|
}
|
662
667
|
}
|
663
668
|
}
|
669
|
+
#endif
|
664
670
|
|
665
671
|
static void wire_iops2(int version,
|
666
672
|
lcb_loop_procs *loop,
|
@@ -687,7 +693,9 @@ static void wire_iops2(int version,
|
|
687
693
|
iocp->read2 = start_read;
|
688
694
|
iocp->write2 = start_write2;
|
689
695
|
iocp->cntl = cntl_socket;
|
696
|
+
#if UV_VERSION_HEX >= 0x010000
|
690
697
|
iocp->is_closed = check_closed;
|
698
|
+
#endif
|
691
699
|
|
692
700
|
/** Stuff we don't use */
|
693
701
|
iocp->write = NULL;
|
@@ -4,8 +4,10 @@ SET_TARGET_PROPERTIES(couchbase_select
|
|
4
4
|
PROPERTIES
|
5
5
|
COMPILE_FLAGS "${CMAKE_C_FLAGS} ${LCB_CORE_CFLAGS}"
|
6
6
|
POSITION_INDEPENDENT_CODE TRUE)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
IF(LCB_INSTALL_HEADERS)
|
8
|
+
INSTALL(
|
9
|
+
FILES
|
10
|
+
select_io_opts.h
|
11
|
+
DESTINATION
|
12
|
+
include/libcouchbase/)
|
13
|
+
ENDIF(LCB_INSTALL_HEADERS)
|
@@ -53,7 +53,6 @@ void Bootstrap::config_callback(EventType event, ConfigInfo *info) {
|
|
53
53
|
|
54
54
|
tm.cancel();
|
55
55
|
|
56
|
-
lcb_log(LOGARGS(instance, DEBUG), "Instance configured");
|
57
56
|
|
58
57
|
if (info->get_origin() != CLCONFIG_FILE) {
|
59
58
|
/* Set the timestamp for the current config to control throttling,
|
@@ -88,6 +87,7 @@ void Bootstrap::config_callback(EventType event, ConfigInfo *info) {
|
|
88
87
|
state = S_BOOTSTRAPPED;
|
89
88
|
lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_COUNTER, NULL);
|
90
89
|
|
90
|
+
lcb_log(LOGARGS(instance, INFO), "Selected network configuration: \"%s\"", LCBT_SETTING(instance, network));
|
91
91
|
if (instance->type == LCB_TYPE_BUCKET) {
|
92
92
|
if (LCBVB_DISTTYPE(LCBT_VBCONFIG(instance)) == LCBVB_DIST_KETAMA &&
|
93
93
|
instance->cur_configinfo->get_origin() != CLCONFIG_MCRAW) {
|
@@ -212,6 +212,11 @@ lcb_error_t Bootstrap::bootstrap(unsigned options) {
|
|
212
212
|
}
|
213
213
|
|
214
214
|
if (options == BS_REFRESH_INITIAL) {
|
215
|
+
if (LCBT_SETTING(parent, network)) {
|
216
|
+
lcb_log(LOGARGS(parent, INFO), "Requested network configuration: \"%s\"", LCBT_SETTING(parent, network));
|
217
|
+
} else {
|
218
|
+
lcb_log(LOGARGS(parent, INFO), "Requested network configuration: heuristic");
|
219
|
+
}
|
215
220
|
state = S_INITIAL_PRE;
|
216
221
|
parent->confmon->prepare();
|
217
222
|
tm.rearm(LCBT_SETTING(parent, config_timeout));
|
@@ -186,7 +186,7 @@ CccpProvider::update(const char *host, const char *data)
|
|
186
186
|
if (!vbc) {
|
187
187
|
return LCB_CLIENT_ENOMEM;
|
188
188
|
}
|
189
|
-
rv =
|
189
|
+
rv = lcbvb_load_json_ex(vbc, data, host, &LCBT_SETTING(this->parent, network));
|
190
190
|
|
191
191
|
if (rv) {
|
192
192
|
lcb_log(LOGARGS(this, ERROR), LOGFMT "Failed to parse config", LOGID(this));
|
@@ -313,17 +313,12 @@ CccpProvider::configure_nodes(const lcb::Hostlist& nodes_)
|
|
313
313
|
void
|
314
314
|
CccpProvider::config_updated(lcbvb_CONFIG *vbc)
|
315
315
|
{
|
316
|
-
lcbvb_SVCMODE mode;
|
316
|
+
lcbvb_SVCMODE mode = LCBT_SETTING_SVCMODE(parent);
|
317
317
|
if (LCBVB_NSERVERS(vbc) < 1) {
|
318
318
|
return;
|
319
319
|
}
|
320
320
|
|
321
321
|
nodes->clear();
|
322
|
-
if (settings().sslopts & LCB_SSL_ENABLED) {
|
323
|
-
mode = LCBVB_SVCMODE_SSL;
|
324
|
-
} else {
|
325
|
-
mode = LCBVB_SVCMODE_PLAIN;
|
326
|
-
}
|
327
322
|
for (size_t ii = 0; ii < LCBVB_NSERVERS(vbc); ii++) {
|
328
323
|
const char *mcaddr = lcbvb_get_hostport(vbc,
|
329
324
|
ii, LCBVB_SVCTYPE_DATA, mode);
|
@@ -82,7 +82,7 @@ FileProvider::Status FileProvider::load_cache()
|
|
82
82
|
}
|
83
83
|
|
84
84
|
if (last_mtime == st.st_mtime) {
|
85
|
-
lcb_log(LOGARGS(this,
|
85
|
+
lcb_log(LOGARGS(this, DEBUG), LOGFMT "Modification time too old", LOGID(this));
|
86
86
|
return NO_CHANGES;
|
87
87
|
}
|
88
88
|
|
@@ -100,6 +100,7 @@ process_chunk(HttpProvider *http, const void *buf, unsigned nbuf)
|
|
100
100
|
int rv;
|
101
101
|
lcbvb_CONFIG *cfgh;
|
102
102
|
unsigned state, oldstate, diff;
|
103
|
+
lcb_host_t *host;
|
103
104
|
htp::Response& resp = http->htp->get_cur_response();
|
104
105
|
|
105
106
|
oldstate = resp.state;
|
@@ -146,7 +147,6 @@ process_chunk(HttpProvider *http, const void *buf, unsigned nbuf)
|
|
146
147
|
|
147
148
|
GT_CHECKDONE:
|
148
149
|
if (http->try_nexturi) {
|
149
|
-
lcb_host_t *host;
|
150
150
|
if (!(state & htp::Parser::S_DONE)) {
|
151
151
|
return LCB_SUCCESS;
|
152
152
|
}
|
@@ -177,7 +177,8 @@ process_chunk(HttpProvider *http, const void *buf, unsigned nbuf)
|
|
177
177
|
if (!cfgh) {
|
178
178
|
return LCB_CLIENT_ENOMEM;
|
179
179
|
}
|
180
|
-
|
180
|
+
host = lcbio_get_host(lcbio_ctx_sock(http->ioctx));
|
181
|
+
rv = lcbvb_load_json_ex(cfgh, resp.body.c_str(), host->host, &LCBT_SETTING(http->parent, network));
|
181
182
|
if (rv != 0) {
|
182
183
|
lcb_log(LOGARGS(http, ERR), LOGFMT "Failed to parse a valid config from HTTP stream", LOGID(http));
|
183
184
|
lcb_log_badconfig(LOGARGS(http, ERR), cfgh, resp.body.c_str());
|
@@ -413,17 +414,9 @@ ConfigInfo* HttpProvider::get_cached() {
|
|
413
414
|
|
414
415
|
void HttpProvider::config_updated(lcbvb_CONFIG *newconfig)
|
415
416
|
{
|
416
|
-
|
417
|
-
lcbvb_SVCMODE mode;
|
417
|
+
lcbvb_SVCMODE mode = LCBT_SETTING_SVCMODE(parent);
|
418
418
|
nodes->clear();
|
419
419
|
|
420
|
-
sopts = settings().sslopts;
|
421
|
-
if (sopts & LCB_SSL_ENABLED) {
|
422
|
-
mode = LCBVB_SVCMODE_SSL;
|
423
|
-
} else {
|
424
|
-
mode = LCBVB_SVCMODE_PLAIN;
|
425
|
-
}
|
426
|
-
|
427
420
|
for (size_t ii = 0; ii < newconfig->nsrv; ++ii) {
|
428
421
|
const char *ss;
|
429
422
|
lcb_error_t status;
|
@@ -156,15 +156,16 @@ struct Confmon {
|
|
156
156
|
* This function creates a new `confmon` object which can be used to manage
|
157
157
|
* configurations and their providers.
|
158
158
|
*
|
159
|
-
* @param settings
|
160
|
-
* @param iot
|
159
|
+
* @param settings pointer to LCB settings
|
160
|
+
* @param iot pointer socket IO routines
|
161
|
+
* @param instance LCB handle
|
161
162
|
*
|
162
163
|
* Once the confmon object has been created you may enable or disable various
|
163
164
|
* providers (see lcb_confmon_set_provider_active()). Once no more providers
|
164
165
|
* remain to be activated you should call lcb_confmon_prepare() once. Then
|
165
166
|
* call the rest of the functions.
|
166
167
|
*/
|
167
|
-
Confmon(lcb_settings
|
168
|
+
Confmon(lcb_settings* settings, lcbio_pTABLE iot, lcb_t instance);
|
168
169
|
void destroy() { delete this; }
|
169
170
|
~Confmon();
|
170
171
|
|
@@ -186,7 +187,6 @@ struct Confmon {
|
|
186
187
|
* Prepares the configuration monitor object for operations. This will insert
|
187
188
|
* all the enabled providers into a list. Call this function each time a
|
188
189
|
* provider has been enabled.
|
189
|
-
* @param mon
|
190
190
|
*/
|
191
191
|
void prepare();
|
192
192
|
|
@@ -212,7 +212,6 @@ struct Confmon {
|
|
212
212
|
*
|
213
213
|
* This function is reentrant safe and may be called at any time.
|
214
214
|
*
|
215
|
-
* @param mon
|
216
215
|
* @see lcb_confmon_add_listener()
|
217
216
|
* @see #stop()
|
218
217
|
* @see #is_refreshing()
|
@@ -229,7 +228,6 @@ struct Confmon {
|
|
229
228
|
* This function is safe to call anywhere. If the monitor is already stopped
|
230
229
|
* then this function does nothing.
|
231
230
|
*
|
232
|
-
* @param mon
|
233
231
|
* @see #start()
|
234
232
|
* @see #is_refreshing()
|
235
233
|
*/
|
@@ -237,7 +235,6 @@ struct Confmon {
|
|
237
235
|
|
238
236
|
/**
|
239
237
|
* @brief Check if the monitor is waiting for a new config from a provider
|
240
|
-
* @param mon
|
241
238
|
* @return true if refreshing, false if idle
|
242
239
|
*/
|
243
240
|
bool is_refreshing() const {
|
@@ -262,7 +259,6 @@ struct Confmon {
|
|
262
259
|
|
263
260
|
/**
|
264
261
|
* @brief Get the current monitor state
|
265
|
-
* @param mon the monitor
|
266
262
|
* @return a set of flags consisting of @ref State values.
|
267
263
|
*/
|
268
264
|
int get_state() const {
|
@@ -291,8 +287,8 @@ struct Confmon {
|
|
291
287
|
* provider or enter the inactive state depending on the configuration and
|
292
288
|
* whether the current provider is the last provider in the list.
|
293
289
|
*
|
294
|
-
* @param provider
|
295
|
-
* @param
|
290
|
+
* @param which reference to provider, which has been failed
|
291
|
+
* @param why error code
|
296
292
|
*/
|
297
293
|
void provider_failed(Provider *which, lcb_error_t why);
|
298
294
|
|
@@ -312,13 +308,13 @@ struct Confmon {
|
|
312
308
|
* This function should _not_ be called outside of an asynchronous provider's
|
313
309
|
* handler.
|
314
310
|
*
|
315
|
-
* @param
|
316
|
-
* @param
|
311
|
+
* @param which the provider which yielded the new configuration
|
312
|
+
* @param config the new configuration
|
317
313
|
*/
|
318
314
|
void provider_got_config(Provider *which, ConfigInfo* config);
|
319
315
|
|
320
|
-
/**
|
321
|
-
*
|
316
|
+
/**
|
317
|
+
* Dump information about the monitor
|
322
318
|
* @param fp the file to which information should be written
|
323
319
|
*/
|
324
320
|
void dump(FILE *fp);
|
@@ -339,16 +335,14 @@ struct Confmon {
|
|
339
335
|
* until remove_listener is called. Note that the listener is not allocated
|
340
336
|
* by the confmon and its responsibility is the user's
|
341
337
|
*
|
342
|
-
* @param
|
343
|
-
* @param listener the listener. The listener's contents are not copied into
|
338
|
+
* @param lsn the listener. The listener's contents are not copied into
|
344
339
|
* confmon and should thus remain valid until it is removed
|
345
340
|
*/
|
346
341
|
void add_listener(Listener* lsn);
|
347
342
|
|
348
343
|
/**
|
349
344
|
* @brief Unregister (and remove) a listener added via lcb_confmon_add_listener()
|
350
|
-
* @param
|
351
|
-
* @param listener the listener
|
345
|
+
* @param lsn the listener
|
352
346
|
*/
|
353
347
|
void remove_listener(Listener *lsn);
|
354
348
|
|
@@ -423,8 +417,6 @@ struct Provider {
|
|
423
417
|
* against a provider taking an excessively long time; therefore a provider
|
424
418
|
* should implement a timeout mechanism of its choice to promptly deliver
|
425
419
|
* a success or failure.
|
426
|
-
*
|
427
|
-
* @param pb
|
428
420
|
*/
|
429
421
|
virtual lcb_error_t refresh() = 0;
|
430
422
|
|
@@ -436,7 +428,7 @@ struct Provider {
|
|
436
428
|
* be needed again in quite some time. How long this "time" is can range
|
437
429
|
* between 0 seconds and several minutes depending on how a user has
|
438
430
|
* configured the client.
|
439
|
-
*
|
431
|
+
*
|
440
432
|
* @return true if actually paused
|
441
433
|
*/
|
442
434
|
virtual bool pause() {
|
@@ -446,17 +438,17 @@ struct Provider {
|
|
446
438
|
/**
|
447
439
|
* Called when a new configuration has been received.
|
448
440
|
*
|
449
|
-
* @param provider the provider instance
|
450
441
|
* @param config the current configuration.
|
451
442
|
* Note that this should only update the server list and do nothing
|
452
443
|
* else.
|
453
444
|
*/
|
454
|
-
virtual void config_updated(lcbvb_CONFIG*) {
|
445
|
+
virtual void config_updated(lcbvb_CONFIG* config) {
|
446
|
+
(void)config;
|
455
447
|
}
|
456
448
|
|
457
449
|
/**
|
458
450
|
* Retrieve the list of nodes from this provider, if applicable
|
459
|
-
*
|
451
|
+
*
|
460
452
|
* @return A list of nodes, or NULL if the provider does not have a list
|
461
453
|
*/
|
462
454
|
virtual const lcb::Hostlist* get_nodes() const {
|
@@ -465,18 +457,20 @@ struct Provider {
|
|
465
457
|
|
466
458
|
/**
|
467
459
|
* Call to change the configured nodes of this provider.
|
468
|
-
*
|
460
|
+
*
|
469
461
|
* @param l The list of nodes to apply
|
470
462
|
*/
|
471
|
-
virtual void configure_nodes(const lcb::Hostlist&) {
|
463
|
+
virtual void configure_nodes(const lcb::Hostlist& l) {
|
464
|
+
(void)l;
|
472
465
|
}
|
473
466
|
|
474
467
|
/**
|
475
468
|
* Dump state information. This callback is optional
|
476
|
-
*
|
469
|
+
*
|
477
470
|
* @param f the file to write to
|
478
471
|
*/
|
479
|
-
virtual void dump(FILE *) const {
|
472
|
+
virtual void dump(FILE *f) const {
|
473
|
+
(void)f;
|
480
474
|
}
|
481
475
|
|
482
476
|
void enable() {
|
@@ -515,7 +509,7 @@ public:
|
|
515
509
|
* Creates a new configuration wrapper object containing the vbucket config
|
516
510
|
* pointed to by 'config'. Its initial refcount will be set to 1.
|
517
511
|
*
|
518
|
-
* @param
|
512
|
+
* @param vbc a newly parsed configuration
|
519
513
|
* @param origin the type of provider from which the config originated.
|
520
514
|
* @return a new ConfigInfo object. This should be incref()'d/decref()'d
|
521
515
|
* as needed.
|
@@ -529,12 +523,12 @@ public:
|
|
529
523
|
* This function returns an integer less than
|
530
524
|
* zero, zero or greater than zero if the first argument is considered older
|
531
525
|
* than, equal to, or later than the second argument.
|
532
|
-
*
|
533
|
-
* @param
|
526
|
+
*
|
527
|
+
* @param config anoother config
|
534
528
|
* @see lcbvb_get_revision
|
535
529
|
* @see ConfigInfo::cmpclock
|
536
530
|
*/
|
537
|
-
int compare(const ConfigInfo&);
|
531
|
+
int compare(const ConfigInfo& config);
|
538
532
|
|
539
533
|
/**
|
540
534
|
* @brief Increment the refcount on a config object
|
@@ -545,7 +539,6 @@ public:
|
|
545
539
|
* @brief Decrement the refcount on a config object.
|
546
540
|
* Decrement the refcount. If the internal refcount reaches 0 then the internal
|
547
541
|
* members (including the vbucket config handle itself) will be freed.
|
548
|
-
* @param info the configuration
|
549
542
|
*/
|
550
543
|
void decref() {
|
551
544
|
if (!--refcount) {
|
@@ -621,7 +614,7 @@ bool file_set_filename(Provider *p, const char *f, bool ro);
|
|
621
614
|
|
622
615
|
/**
|
623
616
|
* Retrieve the filename for the provider
|
624
|
-
* @param p The provider of type
|
617
|
+
* @param p The provider of type CLCONFIG_FILE
|
625
618
|
* @return the current filename being used.
|
626
619
|
*/
|
627
620
|
const char* file_get_filename(Provider *p);
|
@@ -636,7 +629,7 @@ void file_set_readonly(Provider *p, bool val);
|
|
636
629
|
/**
|
637
630
|
* Get the socket representing the current REST connection to the cluster
|
638
631
|
* (if applicable)
|
639
|
-
* @param
|
632
|
+
* @param p The provider of type CLCONFIG_HTTP
|
640
633
|
* @return
|
641
634
|
*/
|
642
635
|
const lcbio_SOCKET* http_get_conn(const Provider *p);
|
@@ -647,7 +640,7 @@ static inline const lcbio_SOCKET* http_get_conn(Confmon *c) {
|
|
647
640
|
|
648
641
|
/**
|
649
642
|
* Get the hostname for the current REST connection to the cluster
|
650
|
-
* @param
|
643
|
+
* @param p The provider of type CLCONFIG_HTTP
|
651
644
|
* @return
|
652
645
|
*/
|
653
646
|
const lcb_host_t * http_get_host(const Provider *p);
|