libcouchbase 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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);
|