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
|
@@ -7,115 +7,130 @@
|
|
|
7
7
|
#include <lcbio/iotable.h>
|
|
8
8
|
#include <set>
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class ConfmonTest : public ::testing::Test
|
|
10
|
+
class Confmon : public ::testing::Test
|
|
13
11
|
{
|
|
14
12
|
void SetUp() {
|
|
15
13
|
MockEnvironment::Reset();
|
|
16
14
|
}
|
|
17
15
|
};
|
|
18
16
|
|
|
19
|
-
struct evstop_listener
|
|
17
|
+
struct evstop_listener {
|
|
18
|
+
clconfig_listener base;
|
|
20
19
|
lcbio_pTABLE io;
|
|
21
20
|
int called;
|
|
22
|
-
|
|
23
|
-
void clconfig_lsn(EventType event, ConfigInfo*) {
|
|
24
|
-
if (event != CLCONFIG_EVENT_GOT_NEW_CONFIG) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
called = 1;
|
|
28
|
-
IOT_STOP(io);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
evstop_listener() : Listener(), io(NULL), called(0) {
|
|
32
|
-
}
|
|
33
21
|
};
|
|
34
22
|
|
|
35
23
|
extern "C" {
|
|
36
|
-
static void listen_callback1(
|
|
37
|
-
|
|
24
|
+
static void listen_callback1(clconfig_listener *lsn, clconfig_event_t event,
|
|
25
|
+
clconfig_info *info)
|
|
38
26
|
{
|
|
27
|
+
if (event != CLCONFIG_EVENT_GOT_NEW_CONFIG) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
evstop_listener *me = reinterpret_cast<evstop_listener*>(lsn);
|
|
32
|
+
me->called = 1;
|
|
33
|
+
IOT_STOP(me->io);
|
|
39
34
|
}
|
|
40
35
|
}
|
|
41
36
|
|
|
42
|
-
TEST_F(
|
|
37
|
+
TEST_F(Confmon, testBasic)
|
|
43
38
|
{
|
|
44
39
|
HandleWrap hw;
|
|
45
40
|
lcb_t instance;
|
|
46
41
|
MockEnvironment::getInstance()->createConnection(hw, instance);
|
|
47
42
|
|
|
48
43
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
http
|
|
52
|
-
http
|
|
44
|
+
lcb_confmon *mon = lcb_confmon_create(instance->settings, instance->iotable);
|
|
45
|
+
clconfig_provider *http = lcb_confmon_get_provider(mon, LCB_CLCONFIG_HTTP);
|
|
46
|
+
lcb_clconfig_http_enable(http);
|
|
47
|
+
lcb_clconfig_http_set_nodes(http, instance->ht_nodes);
|
|
53
48
|
|
|
54
|
-
mon
|
|
49
|
+
lcb_confmon_prepare(mon);
|
|
55
50
|
|
|
56
|
-
EXPECT_EQ(NULL, mon
|
|
57
|
-
mon
|
|
58
|
-
mon
|
|
59
|
-
mon
|
|
60
|
-
mon
|
|
51
|
+
EXPECT_EQ(NULL, lcb_confmon_get_config(mon));
|
|
52
|
+
EXPECT_EQ(LCB_SUCCESS, lcb_confmon_start(mon));
|
|
53
|
+
EXPECT_EQ(LCB_SUCCESS, lcb_confmon_start(mon));
|
|
54
|
+
EXPECT_EQ(LCB_SUCCESS, lcb_confmon_stop(mon));
|
|
55
|
+
EXPECT_EQ(LCB_SUCCESS, lcb_confmon_stop(mon));
|
|
61
56
|
|
|
62
57
|
// Try to find a provider..
|
|
63
|
-
|
|
58
|
+
clconfig_provider *provider = lcb_confmon_get_provider(mon, LCB_CLCONFIG_HTTP);
|
|
64
59
|
ASSERT_NE(0, provider->enabled);
|
|
65
60
|
|
|
66
|
-
evstop_listener listener;
|
|
61
|
+
struct evstop_listener listener;
|
|
62
|
+
memset(&listener, 0, sizeof(listener));
|
|
63
|
+
|
|
64
|
+
listener.base.callback = listen_callback1;
|
|
65
|
+
listener.base.parent = mon;
|
|
67
66
|
listener.io = instance->iotable;
|
|
68
|
-
|
|
69
|
-
mon
|
|
67
|
+
|
|
68
|
+
lcb_confmon_add_listener(mon, &listener.base);
|
|
69
|
+
lcb_confmon_start(mon);
|
|
70
70
|
IOT_START(instance->iotable);
|
|
71
71
|
ASSERT_NE(0, listener.called);
|
|
72
|
-
|
|
72
|
+
|
|
73
|
+
lcb_confmon_destroy(mon);
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
|
|
76
|
-
struct listener2
|
|
77
|
+
struct listener2 {
|
|
78
|
+
clconfig_listener base;
|
|
77
79
|
int call_count;
|
|
78
80
|
lcbio_pTABLE io;
|
|
79
|
-
|
|
80
|
-
std::set<
|
|
81
|
+
clconfig_method_t last_source;
|
|
82
|
+
std::set<clconfig_event_t> expected_events;
|
|
81
83
|
|
|
82
84
|
void reset() {
|
|
83
85
|
call_count = 0;
|
|
84
|
-
last_source =
|
|
86
|
+
last_source = LCB_CLCONFIG_PHONY;
|
|
85
87
|
expected_events.clear();
|
|
86
88
|
}
|
|
87
89
|
|
|
88
|
-
listener2()
|
|
90
|
+
listener2() {
|
|
91
|
+
memset(&base, 0, sizeof(base));
|
|
89
92
|
io = NULL;
|
|
90
93
|
reset();
|
|
91
94
|
}
|
|
95
|
+
};
|
|
92
96
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
97
|
+
static struct listener2* getListener2(const void *p)
|
|
98
|
+
{
|
|
99
|
+
return reinterpret_cast<struct listener2*>(const_cast<void*>(p));
|
|
100
|
+
}
|
|
98
101
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
extern "C" {
|
|
103
|
+
static void listen_callback2(clconfig_listener *prov,
|
|
104
|
+
clconfig_event_t event,
|
|
105
|
+
clconfig_info *info)
|
|
106
|
+
{
|
|
107
|
+
// Increase the number of times we've received a callback..
|
|
108
|
+
struct listener2* lsn = getListener2(prov);
|
|
105
109
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
if (event == CLCONFIG_EVENT_MONITOR_STOPPED) {
|
|
111
|
+
IOT_START(lsn->io);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
109
114
|
|
|
115
|
+
if (!lsn->expected_events.empty()) {
|
|
116
|
+
if (lsn->expected_events.end() ==
|
|
117
|
+
lsn->expected_events.find(event)) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
110
120
|
}
|
|
111
|
-
};
|
|
112
121
|
|
|
113
|
-
|
|
122
|
+
lsn->call_count++;
|
|
123
|
+
lsn->last_source = info->origin;
|
|
124
|
+
IOT_STOP(lsn->io);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
static void runConfmon(lcbio_pTABLE io, lcb_confmon *mon)
|
|
114
129
|
{
|
|
115
130
|
IOT_START(io);
|
|
116
131
|
}
|
|
117
132
|
|
|
118
|
-
TEST_F(
|
|
133
|
+
TEST_F(Confmon, testCycle)
|
|
119
134
|
{
|
|
120
135
|
HandleWrap hw;
|
|
121
136
|
lcb_t instance;
|
|
@@ -130,54 +145,57 @@ TEST_F(ConfmonTest, testCycle)
|
|
|
130
145
|
instance->settings->bc_http_stream_time = 100000;
|
|
131
146
|
instance->memd_sockpool->tmoidle = 100000;
|
|
132
147
|
|
|
133
|
-
|
|
148
|
+
lcb_confmon *mon = lcb_confmon_create(instance->settings, instance->iotable);
|
|
134
149
|
|
|
135
150
|
struct listener2 lsn;
|
|
151
|
+
lsn.base.callback = listen_callback2;
|
|
136
152
|
lsn.io = instance->iotable;
|
|
137
153
|
lsn.reset();
|
|
138
|
-
|
|
154
|
+
|
|
155
|
+
lcb_confmon_add_listener(mon, &lsn.base);
|
|
139
156
|
|
|
140
157
|
mock->makeConnectParams(cropts, NULL);
|
|
141
|
-
|
|
142
|
-
|
|
158
|
+
clconfig_provider *cccp = lcb_confmon_get_provider(mon, LCB_CLCONFIG_CCCP);
|
|
159
|
+
clconfig_provider *http = lcb_confmon_get_provider(mon, LCB_CLCONFIG_HTTP);
|
|
143
160
|
|
|
144
|
-
|
|
145
|
-
hl
|
|
146
|
-
cccp
|
|
147
|
-
cccp
|
|
161
|
+
hostlist_t hl = hostlist_create();
|
|
162
|
+
hostlist_add_stringz(hl, cropts.v.v2.mchosts, 11210);
|
|
163
|
+
lcb_clconfig_cccp_enable(cccp, instance);
|
|
164
|
+
lcb_clconfig_cccp_set_nodes(cccp, hl);
|
|
148
165
|
|
|
149
|
-
http
|
|
150
|
-
http
|
|
166
|
+
lcb_clconfig_http_enable(http);
|
|
167
|
+
lcb_clconfig_http_set_nodes(http, instance->ht_nodes);
|
|
168
|
+
hostlist_destroy(hl);
|
|
151
169
|
|
|
152
|
-
mon
|
|
153
|
-
mon
|
|
170
|
+
lcb_confmon_prepare(mon);
|
|
171
|
+
lcb_confmon_start(mon);
|
|
154
172
|
lsn.expected_events.insert(CLCONFIG_EVENT_GOT_NEW_CONFIG);
|
|
155
|
-
|
|
173
|
+
runConfmon(lsn.io, mon);
|
|
156
174
|
|
|
157
175
|
// Ensure CCCP is functioning properly and we're called only once.
|
|
158
176
|
ASSERT_EQ(1, lsn.call_count);
|
|
159
|
-
ASSERT_EQ(
|
|
177
|
+
ASSERT_EQ(LCB_CLCONFIG_CCCP, lsn.last_source);
|
|
160
178
|
|
|
161
|
-
mon
|
|
179
|
+
lcb_confmon_start(mon);
|
|
162
180
|
lsn.reset();
|
|
163
181
|
lsn.expected_events.insert(CLCONFIG_EVENT_GOT_ANY_CONFIG);
|
|
164
|
-
|
|
182
|
+
runConfmon(lsn.io, mon);
|
|
165
183
|
ASSERT_EQ(1, lsn.call_count);
|
|
166
|
-
ASSERT_EQ(
|
|
184
|
+
ASSERT_EQ(LCB_CLCONFIG_CCCP, lsn.last_source);
|
|
167
185
|
|
|
168
186
|
mock->setCCCP(false);
|
|
169
187
|
mock->failoverNode(5);
|
|
170
188
|
lsn.reset();
|
|
171
|
-
mon
|
|
189
|
+
lcb_confmon_start(mon);
|
|
172
190
|
lsn.expected_events.insert(CLCONFIG_EVENT_GOT_ANY_CONFIG);
|
|
173
191
|
lsn.expected_events.insert(CLCONFIG_EVENT_GOT_NEW_CONFIG);
|
|
174
|
-
|
|
175
|
-
ASSERT_EQ(
|
|
192
|
+
runConfmon(lsn.io, mon);
|
|
193
|
+
ASSERT_EQ(LCB_CLCONFIG_HTTP, lsn.last_source);
|
|
176
194
|
ASSERT_EQ(1, lsn.call_count);
|
|
177
|
-
|
|
195
|
+
lcb_confmon_destroy(mon);
|
|
178
196
|
}
|
|
179
197
|
|
|
180
|
-
TEST_F(
|
|
198
|
+
TEST_F(Confmon, testBootstrapMethods)
|
|
181
199
|
{
|
|
182
200
|
lcb_t instance;
|
|
183
201
|
HandleWrap hw;
|
|
@@ -186,38 +204,38 @@ TEST_F(ConfmonTest, testBootstrapMethods)
|
|
|
186
204
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
187
205
|
|
|
188
206
|
// Try the various bootstrap times
|
|
189
|
-
|
|
190
|
-
hrtime_t last = bs->
|
|
207
|
+
struct lcb_BOOTSTRAP *bs = instance->bootstrap;
|
|
208
|
+
hrtime_t last = bs->last_refresh, cur = 0;
|
|
191
209
|
|
|
192
210
|
// Reset it for the time being
|
|
193
|
-
bs->
|
|
194
|
-
instance->confmon
|
|
211
|
+
bs->last_refresh = 0;
|
|
212
|
+
lcb_confmon_stop(instance->confmon);
|
|
195
213
|
|
|
196
214
|
// Refreshing now should work
|
|
197
|
-
instance
|
|
198
|
-
|
|
215
|
+
lcb_bootstrap_common(instance, LCB_BS_REFRESH_THROTTLE);
|
|
216
|
+
ASSERT_NE(0, lcb_confmon_is_refreshing(instance->confmon));
|
|
199
217
|
|
|
200
|
-
cur = bs->
|
|
218
|
+
cur = bs->last_refresh;
|
|
201
219
|
ASSERT_GT(cur, 0);
|
|
202
|
-
ASSERT_EQ(0, bs->
|
|
220
|
+
ASSERT_EQ(0, bs->errcounter);
|
|
203
221
|
last = cur;
|
|
204
222
|
|
|
205
223
|
// Stop it, so the state is reset
|
|
206
|
-
instance->confmon
|
|
207
|
-
|
|
224
|
+
lcb_confmon_stop(instance->confmon);
|
|
225
|
+
ASSERT_EQ(0, lcb_confmon_is_refreshing(instance->confmon));
|
|
208
226
|
|
|
209
|
-
instance
|
|
210
|
-
ASSERT_EQ(last, bs->
|
|
211
|
-
ASSERT_EQ(1, bs->
|
|
227
|
+
lcb_bootstrap_common(instance, LCB_BS_REFRESH_THROTTLE|LCB_BS_REFRESH_INCRERR);
|
|
228
|
+
ASSERT_EQ(last, bs->last_refresh);
|
|
229
|
+
ASSERT_EQ(1, bs->errcounter);
|
|
212
230
|
|
|
213
231
|
// Ensure that a throttled-without-incr doesn't actually incr
|
|
214
|
-
instance
|
|
215
|
-
ASSERT_EQ(1, bs->
|
|
232
|
+
lcb_bootstrap_common(instance, LCB_BS_REFRESH_THROTTLE);
|
|
233
|
+
ASSERT_EQ(1, bs->errcounter);
|
|
216
234
|
|
|
217
235
|
// No refresh yet
|
|
218
|
-
|
|
236
|
+
ASSERT_EQ(0, lcb_confmon_is_refreshing(instance->confmon));
|
|
219
237
|
|
|
220
|
-
instance
|
|
221
|
-
|
|
222
|
-
instance->confmon
|
|
238
|
+
lcb_bootstrap_common(instance, LCB_BS_REFRESH_ALWAYS);
|
|
239
|
+
ASSERT_NE(0, lcb_confmon_is_refreshing(instance->confmon));
|
|
240
|
+
lcb_confmon_stop(instance->confmon);
|
|
223
241
|
}
|
|
@@ -223,16 +223,15 @@ TEST_F(McAlloc, testValueAlloc)
|
|
|
223
223
|
mcreq_release_packet(pipeline, packet);
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
-
struct ExtraCookie
|
|
226
|
+
struct ExtraCookie {
|
|
227
|
+
mc_REQDATAEX base;
|
|
227
228
|
int remaining;
|
|
228
|
-
ExtraCookie(const mc_REQDATAPROCS& procs_)
|
|
229
|
-
: mc_REQDATAEX(NULL, procs_, 0), remaining(0) {
|
|
230
|
-
}
|
|
231
229
|
};
|
|
232
230
|
|
|
233
231
|
extern "C" {
|
|
234
232
|
static void pkt_dtor(mc_PACKET *pkt) {
|
|
235
|
-
|
|
233
|
+
mc_REQDATAEX *rd = pkt->u_rdata.exdata;
|
|
234
|
+
ExtraCookie *ec = (ExtraCookie *)rd;
|
|
236
235
|
ec->remaining--;
|
|
237
236
|
}
|
|
238
237
|
}
|
|
@@ -241,17 +240,18 @@ TEST_F(McAlloc, testRdataExDtor)
|
|
|
241
240
|
{
|
|
242
241
|
CQWrap q;
|
|
243
242
|
lcb_CMDBASE basecmd;
|
|
244
|
-
|
|
243
|
+
ExtraCookie ec;
|
|
245
244
|
protocol_binary_request_header hdr;
|
|
246
245
|
|
|
247
246
|
memset(&hdr, 0, sizeof hdr);
|
|
248
247
|
memset(&basecmd, 0, sizeof basecmd);
|
|
248
|
+
memset(&ec, 0, sizeof ec);
|
|
249
249
|
|
|
250
|
+
mc_REQDATAPROCS procs = { NULL, pkt_dtor };
|
|
251
|
+
ec.base.procs = &procs;
|
|
250
252
|
basecmd.key.contig.bytes = "foo";
|
|
251
253
|
basecmd.key.contig.nbytes = 3;
|
|
252
254
|
|
|
253
|
-
ExtraCookie ec(procs);
|
|
254
|
-
|
|
255
255
|
mcreq_sched_enter(&q);
|
|
256
256
|
for (unsigned ii = 0; ii < 5; ii++) {
|
|
257
257
|
lcb_error_t err;
|
|
@@ -260,7 +260,7 @@ TEST_F(McAlloc, testRdataExDtor)
|
|
|
260
260
|
err = mcreq_basic_packet(&q, &basecmd, &hdr, 0, &pkt, &pl, 0);
|
|
261
261
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
262
262
|
pkt->flags |= MCREQ_F_REQEXT;
|
|
263
|
-
pkt->u_rdata.exdata = &ec;
|
|
263
|
+
pkt->u_rdata.exdata = &ec.base;
|
|
264
264
|
mcreq_sched_add(pl, pkt);
|
|
265
265
|
ec.remaining++;
|
|
266
266
|
}
|
|
@@ -630,7 +630,7 @@ private:
|
|
|
630
630
|
|
|
631
631
|
const lcb_U64 elapsed_ns = now - previous_time;
|
|
632
632
|
const lcb_U64 wanted_duration_ns =
|
|
633
|
-
|
|
633
|
+
config.opsPerCycle * 1e9 / config.getRateLimit();
|
|
634
634
|
// On first invocation no previous_time, so skip attempting to sleep.
|
|
635
635
|
if (elapsed_ns > 0 && elapsed_ns < wanted_duration_ns) {
|
|
636
636
|
// Dampen the sleep time by averaging with the previous
|
|
@@ -74,14 +74,18 @@ else
|
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
file 'ext/libcouchbase/build/makefile' => 'ext/libcouchbase/build' do
|
|
77
|
+
result = nil
|
|
77
78
|
Dir.chdir("ext/libcouchbase") do |path|
|
|
78
|
-
system './cmake/configure', '-with-libuv', ::File.expand_path('../../', ::Libuv::Ext.path_to_internal_libuv)
|
|
79
|
+
result = system './cmake/configure', '-with-libuv', ::File.expand_path('../../', ::Libuv::Ext.path_to_internal_libuv)
|
|
79
80
|
end
|
|
81
|
+
raise 'could not find cmake on path' unless result
|
|
80
82
|
end
|
|
81
83
|
|
|
82
84
|
file "ext/libcouchbase/build/lib/libcouchbase_libuv.#{FFI::Platform::LIBSUFFIX}" => 'ext/libcouchbase/build/makefile' do
|
|
85
|
+
result = nil
|
|
83
86
|
Dir.chdir('ext/libcouchbase/build') do |path|
|
|
84
|
-
system 'make'
|
|
87
|
+
result = system 'make'
|
|
85
88
|
end
|
|
89
|
+
raise 'make failed' unless result
|
|
86
90
|
end
|
|
87
91
|
end
|
|
@@ -95,7 +95,7 @@ module Libcouchbase
|
|
|
95
95
|
# check for included document here
|
|
96
96
|
if @include_docs && row[:docresp]
|
|
97
97
|
doc = row[:docresp]
|
|
98
|
-
raw_string = doc[:value].read_string(doc[:nvalue])
|
|
98
|
+
raw_string = doc[:value].null? ? '' : doc[:value].read_string(doc[:nvalue])
|
|
99
99
|
resp.value, meta[:format] = @connection.parse_document(raw_string, flags: doc[:itmflags])
|
|
100
100
|
meta[:flags] = doc[:itmflags]
|
|
101
101
|
end
|
|
@@ -37,8 +37,8 @@ module Libcouchbase
|
|
|
37
37
|
@fiber = Fiber.current
|
|
38
38
|
|
|
39
39
|
begin
|
|
40
|
-
while
|
|
41
|
-
if
|
|
40
|
+
while !@query_completed || (cont = @results.length > 0) do
|
|
41
|
+
if cont
|
|
42
42
|
@resume_results = false
|
|
43
43
|
yield @results.shift
|
|
44
44
|
else
|
|
@@ -76,8 +76,8 @@ module Libcouchbase
|
|
|
76
76
|
@fiber = Fiber.current
|
|
77
77
|
|
|
78
78
|
begin
|
|
79
|
-
while
|
|
80
|
-
if
|
|
79
|
+
while !@query_completed || (cont = index < @results.length) do
|
|
80
|
+
if cont
|
|
81
81
|
@resume_results = false
|
|
82
82
|
yield @results[index]
|
|
83
83
|
index += 1
|
|
@@ -132,8 +132,8 @@ module Libcouchbase
|
|
|
132
132
|
|
|
133
133
|
result = []
|
|
134
134
|
begin
|
|
135
|
-
while
|
|
136
|
-
if
|
|
135
|
+
while !@query_completed || (cont = index < @results.length && index < num) do
|
|
136
|
+
if cont
|
|
137
137
|
result << @results[index]
|
|
138
138
|
index += 1
|
|
139
139
|
else
|