libcouchbase 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/README.md +1 -1
- data/ext/libcouchbase/CMakeLists.txt +8 -6
- data/ext/libcouchbase/README.markdown +2 -2
- data/ext/libcouchbase/RELEASE_NOTES.markdown +0 -86
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +0 -11
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +0 -2
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +1 -2
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +3 -3
- data/ext/libcouchbase/cmake/config-cmake.h.in +0 -2
- data/ext/libcouchbase/cmake/defs.mk.in +2 -0
- data/ext/libcouchbase/cmake/source_files.cmake +5 -21
- data/ext/libcouchbase/include/libcouchbase/auth.h +0 -10
- data/ext/libcouchbase/include/libcouchbase/cntl.h +1 -27
- data/ext/libcouchbase/include/libcouchbase/error.h +1 -15
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +1 -13
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +1 -1
- data/ext/libcouchbase/include/libcouchbase/subdoc.h +0 -9
- data/ext/libcouchbase/include/libcouchbase/views.h +1 -7
- data/ext/libcouchbase/include/libcouchbase/visibility.h +0 -1
- data/ext/libcouchbase/include/memcached/protocol_binary.h +1131 -29
- data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
- data/ext/libcouchbase/packaging/parse-git-describe.pl +1 -1
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +2 -3
- data/ext/libcouchbase/src/README.md +2 -0
- data/ext/libcouchbase/src/auth-priv.h +0 -1
- data/ext/libcouchbase/src/auth.cc +4 -10
- data/ext/libcouchbase/src/bootstrap.c +269 -0
- data/ext/libcouchbase/src/bootstrap.h +39 -50
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +117 -84
- data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +25 -50
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +386 -407
- data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
- data/ext/libcouchbase/src/cbft.cc +27 -22
- data/ext/libcouchbase/src/cntl.cc +19 -30
- data/ext/libcouchbase/src/connspec.cc +1 -48
- data/ext/libcouchbase/src/connspec.h +0 -27
- data/ext/libcouchbase/src/dump.cc +2 -2
- data/ext/libcouchbase/src/getconfig.cc +33 -7
- data/ext/libcouchbase/src/handler.cc +2 -0
- data/ext/libcouchbase/src/hostlist.cc +36 -0
- data/ext/libcouchbase/src/hostlist.h +62 -41
- data/ext/libcouchbase/src/http/http-priv.h +112 -125
- data/ext/libcouchbase/src/http/http.cc +30 -15
- data/ext/libcouchbase/src/http/http.h +34 -1
- data/ext/libcouchbase/src/http/http_io.cc +26 -22
- data/ext/libcouchbase/src/instance.cc +23 -94
- data/ext/libcouchbase/src/internal.h +26 -52
- data/ext/libcouchbase/src/jsparse/parser.cc +202 -146
- data/ext/libcouchbase/src/jsparse/parser.h +98 -91
- data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +163 -174
- data/ext/libcouchbase/src/lcbio/connect.c +557 -0
- data/ext/libcouchbase/src/lcbio/connect.h +2 -9
- data/ext/libcouchbase/src/lcbio/ctx.c +1 -1
- data/ext/libcouchbase/src/lcbio/iotable.h +16 -61
- data/ext/libcouchbase/src/lcbio/ioutils.h +1 -1
- data/ext/libcouchbase/src/lcbio/manager.c +2 -2
- data/ext/libcouchbase/src/mc/mcreq.h +2 -9
- data/ext/libcouchbase/src/mcserver/mcserver.cc +34 -143
- data/ext/libcouchbase/src/mcserver/mcserver.h +12 -7
- data/ext/libcouchbase/src/mcserver/negotiate.cc +38 -132
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +2 -1
- data/ext/libcouchbase/src/n1ql/n1ql.cc +32 -56
- data/ext/libcouchbase/src/newconfig.cc +6 -6
- data/ext/libcouchbase/src/nodeinfo.cc +2 -2
- data/ext/libcouchbase/src/operations/{cbflush.cc → cbflush.c} +15 -7
- data/ext/libcouchbase/src/operations/{counter.cc → counter.c} +0 -0
- data/ext/libcouchbase/src/operations/durability.cc +26 -6
- data/ext/libcouchbase/src/operations/durability_internal.h +3 -6
- data/ext/libcouchbase/src/operations/{get.cc → get.c} +26 -24
- data/ext/libcouchbase/src/operations/{observe.cc → observe.c} +93 -68
- data/ext/libcouchbase/src/operations/{pktfwd.cc → pktfwd.c} +0 -0
- data/ext/libcouchbase/src/operations/{remove.cc → remove.c} +0 -0
- data/ext/libcouchbase/src/operations/stats.cc +8 -3
- data/ext/libcouchbase/src/operations/{store.cc → store.c} +32 -27
- data/ext/libcouchbase/src/operations/subdoc.cc +18 -38
- data/ext/libcouchbase/src/operations/{touch.cc → touch.c} +0 -0
- data/ext/libcouchbase/src/packetutils.c +37 -0
- data/ext/libcouchbase/src/packetutils.h +2 -2
- data/ext/libcouchbase/src/probes.d +1 -1
- data/ext/libcouchbase/src/{retrychk.cc → retrychk.c} +3 -2
- data/ext/libcouchbase/src/retryq.cc +4 -4
- data/ext/libcouchbase/src/settings.c +0 -3
- data/ext/libcouchbase/src/settings.h +0 -5
- data/ext/libcouchbase/src/simplestring.c +211 -0
- data/ext/libcouchbase/src/simplestring.h +228 -0
- data/ext/libcouchbase/src/ssl/ssl_c.c +0 -1
- data/ext/libcouchbase/src/ssl/ssl_common.c +0 -2
- data/ext/libcouchbase/src/ssl/ssl_e.c +1 -0
- data/ext/libcouchbase/src/ssobuf.h +82 -0
- data/ext/libcouchbase/src/trace.h +4 -4
- data/ext/libcouchbase/src/vbucket/vbucket.c +1 -0
- data/ext/libcouchbase/src/views/{docreq.cc → docreq.c} +54 -48
- data/ext/libcouchbase/src/views/docreq.h +30 -24
- data/ext/libcouchbase/src/views/viewreq.c +358 -0
- data/ext/libcouchbase/src/views/viewreq.h +13 -43
- data/ext/libcouchbase/tests/basic/t_connstr.cc +50 -89
- data/ext/libcouchbase/tests/basic/t_host.cc +75 -67
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +78 -27
- data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
- data/ext/libcouchbase/tests/htparse/t_basic.cc +78 -58
- data/ext/libcouchbase/tests/iotests/mock-environment.h +1 -2
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +114 -96
- data/ext/libcouchbase/tests/mc/t_alloc.cc +9 -9
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +1 -1
- data/lib/libcouchbase/ext/tasks.rb +6 -2
- data/lib/libcouchbase/query_view.rb +1 -1
- data/lib/libcouchbase/results_fiber.rb +6 -6
- data/lib/libcouchbase/version.rb +1 -1
- metadata +26 -26
- data/ext/libcouchbase/src/bootstrap.cc +0 -216
- data/ext/libcouchbase/src/bucketconfig/bc_file.cc +0 -281
- data/ext/libcouchbase/src/bucketconfig/bc_http.cc +0 -528
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.cc +0 -115
- data/ext/libcouchbase/src/bucketconfig/confmon.cc +0 -378
- data/ext/libcouchbase/src/dns-srv.cc +0 -142
- data/ext/libcouchbase/src/errmap.cc +0 -107
- data/ext/libcouchbase/src/errmap.h +0 -113
- data/ext/libcouchbase/src/lcbht/lcbht.cc +0 -177
- data/ext/libcouchbase/src/lcbio/connect.cc +0 -562
- data/ext/libcouchbase/src/lcbio/timer-cxx.h +0 -87
- data/ext/libcouchbase/src/mctx-helper.h +0 -51
- data/ext/libcouchbase/src/views/viewreq.cc +0 -318
- data/ext/libcouchbase/tests/iotests/t_errmap.cc +0 -97
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
#define LOGID(req) static_cast<const void*>(req)
|
|
28
28
|
#define LOGARGS(req, lvl) req->instance->settings, "n1ql", LCB_LOG_##lvl, __FILE__, __LINE__
|
|
29
29
|
|
|
30
|
-
struct lcb_FTSREQ
|
|
30
|
+
struct lcb_FTSREQ {
|
|
31
31
|
const lcb_RESPHTTP *cur_htresp;
|
|
32
32
|
lcb_http_request_t htreq;
|
|
33
|
-
|
|
33
|
+
lcbjsp_PARSER *parser;
|
|
34
34
|
const void *cookie;
|
|
35
35
|
lcb_FTSCALLBACK callback;
|
|
36
36
|
lcb_t instance;
|
|
@@ -41,21 +41,26 @@ struct lcb_FTSREQ : lcb::jsparse::Parser::Actions {
|
|
|
41
41
|
|
|
42
42
|
lcb_FTSREQ(lcb_t, const void *, const lcb_CMDFTS *);
|
|
43
43
|
~lcb_FTSREQ();
|
|
44
|
-
void JSPARSE_on_row(const lcb::jsparse::Row& datum) {
|
|
45
|
-
lcb_RESPFTS resp = { 0 };
|
|
46
|
-
resp.row = static_cast<const char*>(datum.row.iov_base);
|
|
47
|
-
resp.nrow = datum.row.iov_len;
|
|
48
|
-
nrows++;
|
|
49
|
-
invoke_row(&resp);
|
|
50
|
-
}
|
|
51
|
-
void JSPARSE_on_error(const std::string&) {
|
|
52
|
-
lasterr = LCB_PROTOCOL_ERROR;
|
|
53
|
-
}
|
|
54
|
-
void JSPARSE_on_complete(const std::string&) {
|
|
55
|
-
// Nothing
|
|
56
|
-
}
|
|
57
44
|
};
|
|
58
45
|
|
|
46
|
+
static void
|
|
47
|
+
row_callback(lcbjsp_PARSER *parser, const lcbjsp_ROW *datum)
|
|
48
|
+
{
|
|
49
|
+
lcb_FTSREQ *req = static_cast<lcb_FTSREQ*>(parser->data);
|
|
50
|
+
lcb_RESPFTS resp = { 0 };
|
|
51
|
+
|
|
52
|
+
if (datum->type == LCBJSP_TYPE_ROW) {
|
|
53
|
+
resp.row = static_cast<const char*>(datum->row.iov_base);
|
|
54
|
+
resp.nrow = datum->row.iov_len;
|
|
55
|
+
req->nrows++;
|
|
56
|
+
req->invoke_row(&resp);
|
|
57
|
+
} else if (datum->type == LCBJSP_TYPE_ERROR) {
|
|
58
|
+
req->lasterr = resp.rc = LCB_PROTOCOL_ERROR;
|
|
59
|
+
} else if (datum->type == LCBJSP_TYPE_COMPLETE) {
|
|
60
|
+
/* Nothing */
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
59
64
|
static void
|
|
60
65
|
chunk_callback(lcb_t, int, const lcb_RESPBASE *rb)
|
|
61
66
|
{
|
|
@@ -78,7 +83,7 @@ chunk_callback(lcb_t, int, const lcb_RESPBASE *rb)
|
|
|
78
83
|
* should remain alive (so we can cancel it later on) */
|
|
79
84
|
delete req;
|
|
80
85
|
} else {
|
|
81
|
-
req->parser
|
|
86
|
+
lcbjsp_feed(req->parser, static_cast<const char*>(rh->body), rh->nbody);
|
|
82
87
|
}
|
|
83
88
|
}
|
|
84
89
|
|
|
@@ -102,7 +107,7 @@ lcb_FTSREQ::invoke_last()
|
|
|
102
107
|
|
|
103
108
|
if (parser) {
|
|
104
109
|
lcb_IOV meta;
|
|
105
|
-
parser
|
|
110
|
+
lcbjsp_get_postmortem(parser, &meta);
|
|
106
111
|
resp.row = static_cast<const char*>(meta.iov_base);
|
|
107
112
|
resp.nrow = meta.iov_len;
|
|
108
113
|
}
|
|
@@ -111,9 +116,7 @@ lcb_FTSREQ::invoke_last()
|
|
|
111
116
|
}
|
|
112
117
|
|
|
113
118
|
lcb_FTSREQ::lcb_FTSREQ(lcb_t instance_, const void *cookie_, const lcb_CMDFTS *cmd)
|
|
114
|
-
:
|
|
115
|
-
cur_htresp(NULL), htreq(NULL),
|
|
116
|
-
parser(new lcb::jsparse::Parser(lcb::jsparse::Parser::MODE_FTS, this)),
|
|
119
|
+
: cur_htresp(NULL), htreq(NULL), parser(lcbjsp_create(LCBJSP_MODE_FTS)),
|
|
117
120
|
cookie(cookie_), callback(cmd->callback), instance(instance_), nrows(0),
|
|
118
121
|
lasterr(LCB_SUCCESS)
|
|
119
122
|
{
|
|
@@ -162,10 +165,12 @@ lcb_FTSREQ::lcb_FTSREQ(lcb_t instance_, const void *cookie_, const lcb_CMDFTS *c
|
|
|
162
165
|
std::string qbody(Json::FastWriter().write(root));
|
|
163
166
|
htcmd.body = qbody.c_str();
|
|
164
167
|
htcmd.nbody = qbody.size();
|
|
168
|
+
parser->data = this;
|
|
169
|
+
parser->callback = row_callback;
|
|
165
170
|
|
|
166
171
|
lasterr = lcb_http3(instance, this, &htcmd);
|
|
167
172
|
if (lasterr == LCB_SUCCESS) {
|
|
168
|
-
htreq
|
|
173
|
+
lcb_htreq_setcb(htreq, chunk_callback);
|
|
169
174
|
if (cmd->handle) {
|
|
170
175
|
*cmd->handle = reinterpret_cast<lcb_FTSREQ*>(this);
|
|
171
176
|
}
|
|
@@ -179,7 +184,7 @@ lcb_FTSREQ::~lcb_FTSREQ()
|
|
|
179
184
|
htreq = NULL;
|
|
180
185
|
}
|
|
181
186
|
if (parser) {
|
|
182
|
-
|
|
187
|
+
lcbjsp_free(parser);
|
|
183
188
|
parser = NULL;
|
|
184
189
|
}
|
|
185
190
|
}
|
|
@@ -183,12 +183,6 @@ HANDLER(kv_hg_handler) {
|
|
|
183
183
|
HANDLER(read_chunk_size_handler) {
|
|
184
184
|
RETURN_GET_SET(lcb_U32, LCBT_SETTING(instance, read_chunk_size));
|
|
185
185
|
}
|
|
186
|
-
HANDLER(enable_errmap_handler) {
|
|
187
|
-
RETURN_GET_SET(int, LCBT_SETTING(instance, use_errmap));
|
|
188
|
-
}
|
|
189
|
-
HANDLER(select_bucket_handler) {
|
|
190
|
-
RETURN_GET_SET(int, LCBT_SETTING(instance, select_bucket));
|
|
191
|
-
}
|
|
192
186
|
|
|
193
187
|
HANDLER(get_kvb) {
|
|
194
188
|
lcb_cntl_vbinfo_st *vbi = reinterpret_cast<lcb_cntl_vbinfo_st*>(arg);
|
|
@@ -204,7 +198,7 @@ HANDLER(get_kvb) {
|
|
|
204
198
|
|
|
205
199
|
|
|
206
200
|
HANDLER(conninfo) {
|
|
207
|
-
|
|
201
|
+
lcbio_SOCKET *sock;
|
|
208
202
|
lcb_cntl_server_st *si = reinterpret_cast<lcb_cntl_server_st*>(arg);
|
|
209
203
|
const lcb_host_t *host;
|
|
210
204
|
|
|
@@ -218,7 +212,7 @@ HANDLER(conninfo) {
|
|
|
218
212
|
if (ix < 0 || ix > (int)LCBT_NSERVERS(instance)) {
|
|
219
213
|
return LCB_ECTL_BADARG;
|
|
220
214
|
}
|
|
221
|
-
server = instance
|
|
215
|
+
server = LCBT_GET_SERVER(instance, ix);
|
|
222
216
|
if (!server) {
|
|
223
217
|
return LCB_NETWORK_ERROR;
|
|
224
218
|
}
|
|
@@ -230,7 +224,7 @@ HANDLER(conninfo) {
|
|
|
230
224
|
}
|
|
231
225
|
}
|
|
232
226
|
} else if (cmd == LCB_CNTL_CONFIGNODE_INFO) {
|
|
233
|
-
sock =
|
|
227
|
+
sock = lcb_confmon_get_rest_connection(instance->confmon);
|
|
234
228
|
} else {
|
|
235
229
|
return LCB_ECTL_BADARG;
|
|
236
230
|
}
|
|
@@ -252,8 +246,7 @@ HANDLER(conninfo) {
|
|
|
252
246
|
|
|
253
247
|
HANDLER(config_cache_loaded_handler) {
|
|
254
248
|
if (mode != LCB_CNTL_GET) { return LCB_ECTL_UNSUPPMODE; }
|
|
255
|
-
*(int *)arg = instance->cur_configinfo &&
|
|
256
|
-
instance->cur_configinfo->get_origin() == lcb::clconfig::CLCONFIG_FILE;
|
|
249
|
+
*(int *)arg = instance->cur_configinfo && instance->cur_configinfo->origin == LCB_CLCONFIG_FILE;
|
|
257
250
|
(void)cmd; return LCB_SUCCESS;
|
|
258
251
|
}
|
|
259
252
|
|
|
@@ -289,9 +282,9 @@ HANDLER(config_transport) {
|
|
|
289
282
|
if (mode == LCB_CNTL_SET) { return LCB_ECTL_UNSUPPMODE; }
|
|
290
283
|
if (!instance->cur_configinfo) { return LCB_CLIENT_ETMPFAIL; }
|
|
291
284
|
|
|
292
|
-
switch (instance->cur_configinfo->
|
|
293
|
-
case
|
|
294
|
-
case
|
|
285
|
+
switch (instance->cur_configinfo->origin) {
|
|
286
|
+
case LCB_CLCONFIG_HTTP: *val = LCB_CONFIG_TRANSPORT_HTTP; break;
|
|
287
|
+
case LCB_CLCONFIG_CCCP: *val = LCB_CONFIG_TRANSPORT_CCCP; break;
|
|
295
288
|
default: return LCB_CLIENT_ETMPFAIL;
|
|
296
289
|
}
|
|
297
290
|
(void)cmd; return LCB_SUCCESS;
|
|
@@ -299,7 +292,7 @@ HANDLER(config_transport) {
|
|
|
299
292
|
|
|
300
293
|
HANDLER(config_nodes) {
|
|
301
294
|
const char *node_strs = reinterpret_cast<const char*>(arg);
|
|
302
|
-
|
|
295
|
+
clconfig_provider *target;
|
|
303
296
|
lcb::Hostlist hostlist;
|
|
304
297
|
lcb_error_t err;
|
|
305
298
|
|
|
@@ -316,13 +309,13 @@ HANDLER(config_nodes) {
|
|
|
316
309
|
}
|
|
317
310
|
|
|
318
311
|
if (cmd == LCB_CNTL_CONFIG_HTTP_NODES) {
|
|
319
|
-
target = instance->confmon
|
|
312
|
+
target = lcb_confmon_get_provider(instance->confmon, LCB_CLCONFIG_HTTP);
|
|
313
|
+
lcb_clconfig_http_set_nodes(target, &hostlist);
|
|
320
314
|
} else {
|
|
321
|
-
target = instance->confmon
|
|
315
|
+
target = lcb_confmon_get_provider(instance->confmon, LCB_CLCONFIG_CCCP);
|
|
316
|
+
lcb_clconfig_cccp_set_nodes(target, &hostlist);
|
|
322
317
|
}
|
|
323
318
|
|
|
324
|
-
target->configure_nodes(hostlist);
|
|
325
|
-
|
|
326
319
|
return LCB_SUCCESS;
|
|
327
320
|
}
|
|
328
321
|
|
|
@@ -334,22 +327,22 @@ HANDLER(init_providers) {
|
|
|
334
327
|
}
|
|
335
328
|
|
|
336
329
|
HANDLER(config_cache_handler) {
|
|
337
|
-
|
|
338
|
-
Provider *provider;
|
|
330
|
+
clconfig_provider *provider;
|
|
339
331
|
|
|
340
|
-
provider = instance->confmon
|
|
332
|
+
provider = lcb_confmon_get_provider(instance->confmon, LCB_CLCONFIG_FILE);
|
|
341
333
|
if (mode == LCB_CNTL_SET) {
|
|
342
|
-
|
|
334
|
+
int rv;
|
|
335
|
+
rv = lcb_clconfig_file_set_filename(provider,
|
|
343
336
|
reinterpret_cast<const char*>(arg),
|
|
344
337
|
cmd == LCB_CNTL_CONFIGCACHE_RO);
|
|
345
338
|
|
|
346
|
-
if (rv) {
|
|
339
|
+
if (rv == 0) {
|
|
347
340
|
instance->settings->bc_http_stream_time = LCB_MS2US(10000);
|
|
348
341
|
return LCB_SUCCESS;
|
|
349
342
|
}
|
|
350
343
|
return LCB_ERROR;
|
|
351
344
|
} else {
|
|
352
|
-
*(const char **)arg =
|
|
345
|
+
*(const char **)arg = lcb_clconfig_file_get_filename(provider);
|
|
353
346
|
return LCB_SUCCESS;
|
|
354
347
|
}
|
|
355
348
|
}
|
|
@@ -592,9 +585,7 @@ static ctl_handler handlers[] = {
|
|
|
592
585
|
client_string_handler, /* LCB_CNTL_CLIENT_STRING */
|
|
593
586
|
bucket_auth_handler, /* LCB_CNTL_BUCKET_CRED */
|
|
594
587
|
timeout_common, /* LCB_CNTL_RETRY_NMV_DELAY */
|
|
595
|
-
read_chunk_size_handler
|
|
596
|
-
enable_errmap_handler, /* LCB_CNTL_ENABLE_ERRMAP */
|
|
597
|
-
select_bucket_handler /* LCB_CNTL_SELECT_BUCKET */
|
|
588
|
+
read_chunk_size_handler /*LCB_CNTL_READ_CHUNKSIZE */
|
|
598
589
|
};
|
|
599
590
|
|
|
600
591
|
/* Union used for conversion to/from string functions */
|
|
@@ -746,8 +737,6 @@ static cntl_OPCODESTRS stropcode_map[] = {
|
|
|
746
737
|
{"retry_nmv_delay", LCB_CNTL_RETRY_NMV_INTERVAL, convert_timeout},
|
|
747
738
|
{"bucket_cred", LCB_CNTL_BUCKET_CRED, NULL},
|
|
748
739
|
{"read_chunk_size", LCB_CNTL_READ_CHUNKSIZE, convert_u32},
|
|
749
|
-
{"enable_errmap", LCB_CNTL_ENABLE_ERRMAP, convert_intbool},
|
|
750
|
-
{"select_bucket", LCB_CNTL_SELECT_BUCKET, convert_intbool},
|
|
751
740
|
{NULL, -1}
|
|
752
741
|
};
|
|
753
742
|
|
|
@@ -31,8 +31,6 @@
|
|
|
31
31
|
#define F_HASUSER (1<<2)
|
|
32
32
|
#define F_SSLSCHEME (1<<3)
|
|
33
33
|
#define F_FILEONLY (1<<4)
|
|
34
|
-
#define F_DNSSRV (1<<5)
|
|
35
|
-
#define F_DNSSRV_EXPLICIT ( (1<<6) |F_DNSSRV)
|
|
36
34
|
|
|
37
35
|
using namespace lcb;
|
|
38
36
|
|
|
@@ -106,14 +104,6 @@ Connspec::parse_hosts(const char *hostbegin,
|
|
|
106
104
|
port = scratch.substr(colonpos + 1);
|
|
107
105
|
}
|
|
108
106
|
|
|
109
|
-
if (m_flags & F_DNSSRV_EXPLICIT) {
|
|
110
|
-
if (!m_hosts.empty()) {
|
|
111
|
-
SET_ERROR("Only a single host is allowed with DNS SRV");
|
|
112
|
-
} else if (!port.empty()) {
|
|
113
|
-
SET_ERROR("Port cannot be specified with DNS SRV");
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
107
|
m_hosts.resize(m_hosts.size() + 1);
|
|
118
108
|
Spechost *dh = &m_hosts.back();
|
|
119
109
|
dh->hostname = scratch.substr(0, hostlen);
|
|
@@ -244,24 +234,6 @@ Connspec::parse_options(
|
|
|
244
234
|
if (sscanf(value, "%d", &m_loglevel) != 1) {
|
|
245
235
|
SET_ERROR("console_log_level must be a numeric value");
|
|
246
236
|
}
|
|
247
|
-
} else if (!strcmp(key, "dnssrv")) {
|
|
248
|
-
if ((m_flags & F_DNSSRV_EXPLICIT) == F_DNSSRV_EXPLICIT) {
|
|
249
|
-
SET_ERROR("Cannot use dnssrv scheme with dnssrv option");
|
|
250
|
-
}
|
|
251
|
-
int btmp = 0;
|
|
252
|
-
if (!strcmp(value, "on") || !strcmp(value, "true")) {
|
|
253
|
-
btmp = 1;
|
|
254
|
-
} else if (!strcmp(value, "off") || !strcmp(value, "false")) {
|
|
255
|
-
btmp = 0;
|
|
256
|
-
} else if (sscanf(value, "%d", &btmp) != 1) {
|
|
257
|
-
printf("Coldn't parse value!\n");
|
|
258
|
-
SET_ERROR("dnssrv must have numeric (boolean) value");
|
|
259
|
-
}
|
|
260
|
-
if (btmp) {
|
|
261
|
-
m_flags |= F_DNSSRV;
|
|
262
|
-
} else {
|
|
263
|
-
m_flags &= ~F_DNSSRV_EXPLICIT;
|
|
264
|
-
}
|
|
265
237
|
} else {
|
|
266
238
|
m_ctlopts.push_back(std::make_pair(key, value));
|
|
267
239
|
}
|
|
@@ -316,17 +288,10 @@ Connspec::parse(const char *connstr_, const char **errmsg)
|
|
|
316
288
|
m_implicit_port = 0;
|
|
317
289
|
} else if (SCHEME_MATCHES(LCB_SPECSCHEME_MCCOMPAT)) {
|
|
318
290
|
m_implicit_port = LCB_CONFIG_MCCOMPAT_PORT;
|
|
319
|
-
} else if (SCHEME_MATCHES(LCB_SPECSCHEME_SRV)) {
|
|
320
|
-
m_implicit_port = LCB_CONFIG_MCD_PORT;
|
|
321
|
-
m_flags |= F_DNSSRV_EXPLICIT;
|
|
322
|
-
} else if (SCHEME_MATCHES(LCB_SPECSCHEME_SRV_SSL)) {
|
|
323
|
-
m_implicit_port = LCB_CONFIG_MCD_SSL_PORT;
|
|
324
|
-
m_sslopts |= LCB_SSL_ENABLED;
|
|
325
|
-
m_flags |= F_SSLSCHEME | F_DNSSRV_EXPLICIT;
|
|
326
291
|
} else {
|
|
327
292
|
/* If we don't have a scheme at all: */
|
|
328
293
|
if (strstr(connstr_, "://")) {
|
|
329
|
-
SET_ERROR("String must begin with 'couchbase://, 'couchbases://', or 'http://'");
|
|
294
|
+
SET_ERROR("String must begin with ''couchbase://, 'couchbases://', or 'http://'");
|
|
330
295
|
} else {
|
|
331
296
|
found_scheme = "";
|
|
332
297
|
m_implicit_port = LCB_CONFIG_HTTP_PORT;
|
|
@@ -380,8 +345,6 @@ Connspec::parse(const char *connstr_, const char **errmsg)
|
|
|
380
345
|
if (m_hosts.empty()) {
|
|
381
346
|
m_hosts.resize(m_hosts.size()+1);
|
|
382
347
|
m_hosts.back().hostname = "localhost";
|
|
383
|
-
} else if (m_hosts.size() == 1 && m_hosts[0].isTypeless()) {
|
|
384
|
-
m_flags |= F_DNSSRV;
|
|
385
348
|
}
|
|
386
349
|
|
|
387
350
|
if (options_ != NULL) {
|
|
@@ -497,13 +460,3 @@ Connspec::load(const lcb_create_st& cropts)
|
|
|
497
460
|
GT_DONE:
|
|
498
461
|
return err;
|
|
499
462
|
}
|
|
500
|
-
|
|
501
|
-
bool
|
|
502
|
-
Connspec::can_dnssrv() const {
|
|
503
|
-
return m_flags & F_DNSSRV;
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
bool
|
|
507
|
-
Connspec::is_explicit_dnssrv() const {
|
|
508
|
-
return (m_flags & F_DNSSRV_EXPLICIT) == F_DNSSRV_EXPLICIT;
|
|
509
|
-
}
|
|
@@ -20,11 +20,9 @@
|
|
|
20
20
|
|
|
21
21
|
#include <libcouchbase/couchbase.h>
|
|
22
22
|
#include "config.h"
|
|
23
|
-
|
|
24
23
|
#include <string>
|
|
25
24
|
#include <vector>
|
|
26
25
|
#include <set>
|
|
27
|
-
#include "hostlist.h"
|
|
28
26
|
|
|
29
27
|
#ifdef _MSC_VER
|
|
30
28
|
/*
|
|
@@ -75,18 +73,6 @@ public:
|
|
|
75
73
|
bool is_bs_http() const { return has_bsmode(LCB_CONFIG_TRANSPORT_HTTP); }
|
|
76
74
|
bool is_bs_cccp() const { return has_bsmode(LCB_CONFIG_TRANSPORT_CCCP); }
|
|
77
75
|
bool is_bs_file() const { return m_flags & LCB_CONNSPEC_F_FILEONLY; }
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Whether a DNS SRV lookup can be performed on this connection string.
|
|
81
|
-
* @return true if a DNS SRV lookup is possible, or false if there is
|
|
82
|
-
* a parameter or format of the connection string preventing a lookup
|
|
83
|
-
*/
|
|
84
|
-
bool can_dnssrv() const;
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Whether the explicit `couchbase{s}+dnssrv` internal scheme is used
|
|
88
|
-
*/
|
|
89
|
-
bool is_explicit_dnssrv() const;
|
|
90
76
|
uint16_t default_port() const { return m_implicit_port; }
|
|
91
77
|
const std::vector<Spechost>& hosts() const { return m_hosts; }
|
|
92
78
|
const std::string& bucket() const { return m_bucket; }
|
|
@@ -97,8 +83,6 @@ public:
|
|
|
97
83
|
const Options& options() const { return m_ctlopts; }
|
|
98
84
|
unsigned loglevel() const { return m_loglevel; }
|
|
99
85
|
const std::string& connstr() const { return m_connstr; }
|
|
100
|
-
void clear_hosts() { m_hosts.clear(); }
|
|
101
|
-
void add_host(const Spechost& host) { m_hosts.push_back(host); }
|
|
102
86
|
private:
|
|
103
87
|
Options m_ctlopts;
|
|
104
88
|
std::string m_bucket;
|
|
@@ -126,18 +110,7 @@ private:
|
|
|
126
110
|
#define LCB_SPECSCHEME_HTTP "http://"
|
|
127
111
|
#define LCB_SPECSCHEME_HTTP_SSL "https-internal://"
|
|
128
112
|
#define LCB_SPECSCHEME_MCCOMPAT "memcached://"
|
|
129
|
-
#define LCB_SPECSCHEME_SRV "couchbase+dnssrv://"
|
|
130
|
-
#define LCB_SPECSCHEME_SRV_SSL "couchbases+dnssrv://"
|
|
131
|
-
|
|
132
|
-
// Standalone functionality:
|
|
133
|
-
lcb_error_t
|
|
134
|
-
dnssrv_query(const char *name, Hostlist& hostlist);
|
|
135
|
-
|
|
136
|
-
Hostlist *
|
|
137
|
-
dnssrv_getbslist(const char *addr, bool is_ssl, lcb_error_t& errout);
|
|
138
|
-
|
|
139
113
|
} // namespace
|
|
140
|
-
|
|
141
114
|
#endif
|
|
142
115
|
|
|
143
116
|
#ifdef _MSC_VER
|
|
@@ -34,7 +34,7 @@ lcb_dump(lcb_t instance, FILE *fp, lcb_U32 flags)
|
|
|
34
34
|
fprintf(fp, "Settings=%p\n", (void*)instance->settings);
|
|
35
35
|
|
|
36
36
|
if (instance->cur_configinfo) {
|
|
37
|
-
|
|
37
|
+
clconfig_info *cfg = instance->cur_configinfo;
|
|
38
38
|
fprintf(fp, "Current VBC=%p\n", (void*)cfg->vbc);
|
|
39
39
|
fprintf(fp, "Config RevID=%d\n", cfg->vbc->revid);
|
|
40
40
|
if (flags & LCB_DUMP_VBCONFIG) {
|
|
@@ -90,6 +90,6 @@ lcb_dump(lcb_t instance, FILE *fp, lcb_U32 flags)
|
|
|
90
90
|
fprintf(fp, "=== END PIPELINE DUMP ===\n");
|
|
91
91
|
|
|
92
92
|
fprintf(fp, "=== BEGIN CONFMON DUMP ===\n");
|
|
93
|
-
instance->confmon
|
|
93
|
+
lcb_confmon_dump(instance->confmon, fp);
|
|
94
94
|
fprintf(fp, "=== END CONFMON DUMP ===\n");
|
|
95
95
|
}
|
|
@@ -18,6 +18,31 @@
|
|
|
18
18
|
#include "internal.h"
|
|
19
19
|
#include "packetutils.h"
|
|
20
20
|
#include <bucketconfig/clconfig.h>
|
|
21
|
+
LCB_INTERNAL_API
|
|
22
|
+
lcb::Server *
|
|
23
|
+
lcb_find_server_by_host(lcb_t instance, const lcb_host_t *host)
|
|
24
|
+
{
|
|
25
|
+
mc_CMDQUEUE *cq = &instance->cmdq;
|
|
26
|
+
unsigned ii;
|
|
27
|
+
for (ii = 0; ii < cq->npipelines; ii++) {
|
|
28
|
+
lcb::Server *server = static_cast<lcb::Server*>(cq->pipelines[ii]);
|
|
29
|
+
if (lcb_host_equals(&server->get_host(), host)) {
|
|
30
|
+
return server;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return NULL;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
LCB_INTERNAL_API
|
|
37
|
+
lcb::Server *
|
|
38
|
+
lcb_find_server_by_index(lcb_t instance, int ix)
|
|
39
|
+
{
|
|
40
|
+
mc_CMDQUEUE *cq = &instance->cmdq;
|
|
41
|
+
if (ix < 0 || ix >= static_cast<int>(cq->npipelines)) {
|
|
42
|
+
return NULL;
|
|
43
|
+
}
|
|
44
|
+
return static_cast<lcb::Server*>(cq->pipelines[ix]);
|
|
45
|
+
}
|
|
21
46
|
|
|
22
47
|
static void
|
|
23
48
|
ext_callback_proxy(mc_PIPELINE *pl, mc_PACKET *req, lcb_error_t rc,
|
|
@@ -28,18 +53,19 @@ ext_callback_proxy(mc_PIPELINE *pl, mc_PACKET *req, lcb_error_t rc,
|
|
|
28
53
|
const lcb::MemcachedResponse *res =
|
|
29
54
|
reinterpret_cast<const lcb::MemcachedResponse*>(resdata);
|
|
30
55
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
&server->get_host());
|
|
56
|
+
lcb_cccp_update2(rd->cookie, rc, res->body<const char*>(), res->bodylen(),
|
|
57
|
+
&server->get_host());
|
|
34
58
|
free(rd);
|
|
35
59
|
}
|
|
36
60
|
|
|
37
61
|
static mc_REQDATAPROCS procs = { ext_callback_proxy };
|
|
38
62
|
|
|
63
|
+
LCB_INTERNAL_API
|
|
39
64
|
lcb_error_t
|
|
40
|
-
|
|
65
|
+
lcb_getconfig(lcb_t instance, const void *cookie, lcb::Server *server)
|
|
41
66
|
{
|
|
42
67
|
lcb_error_t err;
|
|
68
|
+
mc_CMDQUEUE *cq = &instance->cmdq;
|
|
43
69
|
mc_PACKET *packet;
|
|
44
70
|
mc_REQDATAEX *rd;
|
|
45
71
|
|
|
@@ -56,7 +82,7 @@ lcb_st::request_config(const void *cookie_, lcb::Server *server)
|
|
|
56
82
|
|
|
57
83
|
rd = reinterpret_cast<mc_REQDATAEX*>(calloc(1, sizeof(*rd)));
|
|
58
84
|
rd->procs = &procs;
|
|
59
|
-
rd->cookie =
|
|
85
|
+
rd->cookie = cookie;
|
|
60
86
|
rd->start = gethrtime();
|
|
61
87
|
packet->u_rdata.exdata = rd;
|
|
62
88
|
packet->flags |= MCREQ_F_REQEXT;
|
|
@@ -66,8 +92,8 @@ lcb_st::request_config(const void *cookie_, lcb::Server *server)
|
|
|
66
92
|
hdr.opaque(packet->opaque);
|
|
67
93
|
memcpy(SPAN_BUFFER(&packet->kh_span), hdr.data(), hdr.size());
|
|
68
94
|
|
|
69
|
-
mcreq_sched_enter(
|
|
95
|
+
mcreq_sched_enter(cq);
|
|
70
96
|
mcreq_sched_add(server, packet);
|
|
71
|
-
mcreq_sched_leave(
|
|
97
|
+
mcreq_sched_leave(cq, 1);
|
|
72
98
|
return LCB_SUCCESS;
|
|
73
99
|
}
|