libcouchbase 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/README.md +1 -1
  4. data/ext/libcouchbase/CMakeLists.txt +8 -6
  5. data/ext/libcouchbase/README.markdown +2 -2
  6. data/ext/libcouchbase/RELEASE_NOTES.markdown +0 -86
  7. data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +0 -11
  8. data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +0 -2
  9. data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +1 -2
  10. data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +3 -3
  11. data/ext/libcouchbase/cmake/config-cmake.h.in +0 -2
  12. data/ext/libcouchbase/cmake/defs.mk.in +2 -0
  13. data/ext/libcouchbase/cmake/source_files.cmake +5 -21
  14. data/ext/libcouchbase/include/libcouchbase/auth.h +0 -10
  15. data/ext/libcouchbase/include/libcouchbase/cntl.h +1 -27
  16. data/ext/libcouchbase/include/libcouchbase/error.h +1 -15
  17. data/ext/libcouchbase/include/libcouchbase/n1ql.h +1 -13
  18. data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +1 -1
  19. data/ext/libcouchbase/include/libcouchbase/subdoc.h +0 -9
  20. data/ext/libcouchbase/include/libcouchbase/views.h +1 -7
  21. data/ext/libcouchbase/include/libcouchbase/visibility.h +0 -1
  22. data/ext/libcouchbase/include/memcached/protocol_binary.h +1131 -29
  23. data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
  24. data/ext/libcouchbase/packaging/parse-git-describe.pl +1 -1
  25. data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +2 -3
  26. data/ext/libcouchbase/src/README.md +2 -0
  27. data/ext/libcouchbase/src/auth-priv.h +0 -1
  28. data/ext/libcouchbase/src/auth.cc +4 -10
  29. data/ext/libcouchbase/src/bootstrap.c +269 -0
  30. data/ext/libcouchbase/src/bootstrap.h +39 -50
  31. data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +117 -84
  32. data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
  33. data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
  34. data/ext/libcouchbase/src/bucketconfig/bc_http.h +25 -50
  35. data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
  36. data/ext/libcouchbase/src/bucketconfig/clconfig.h +386 -407
  37. data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
  38. data/ext/libcouchbase/src/cbft.cc +27 -22
  39. data/ext/libcouchbase/src/cntl.cc +19 -30
  40. data/ext/libcouchbase/src/connspec.cc +1 -48
  41. data/ext/libcouchbase/src/connspec.h +0 -27
  42. data/ext/libcouchbase/src/dump.cc +2 -2
  43. data/ext/libcouchbase/src/getconfig.cc +33 -7
  44. data/ext/libcouchbase/src/handler.cc +2 -0
  45. data/ext/libcouchbase/src/hostlist.cc +36 -0
  46. data/ext/libcouchbase/src/hostlist.h +62 -41
  47. data/ext/libcouchbase/src/http/http-priv.h +112 -125
  48. data/ext/libcouchbase/src/http/http.cc +30 -15
  49. data/ext/libcouchbase/src/http/http.h +34 -1
  50. data/ext/libcouchbase/src/http/http_io.cc +26 -22
  51. data/ext/libcouchbase/src/instance.cc +23 -94
  52. data/ext/libcouchbase/src/internal.h +26 -52
  53. data/ext/libcouchbase/src/jsparse/parser.cc +202 -146
  54. data/ext/libcouchbase/src/jsparse/parser.h +98 -91
  55. data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
  56. data/ext/libcouchbase/src/lcbht/lcbht.h +163 -174
  57. data/ext/libcouchbase/src/lcbio/connect.c +557 -0
  58. data/ext/libcouchbase/src/lcbio/connect.h +2 -9
  59. data/ext/libcouchbase/src/lcbio/ctx.c +1 -1
  60. data/ext/libcouchbase/src/lcbio/iotable.h +16 -61
  61. data/ext/libcouchbase/src/lcbio/ioutils.h +1 -1
  62. data/ext/libcouchbase/src/lcbio/manager.c +2 -2
  63. data/ext/libcouchbase/src/mc/mcreq.h +2 -9
  64. data/ext/libcouchbase/src/mcserver/mcserver.cc +34 -143
  65. data/ext/libcouchbase/src/mcserver/mcserver.h +12 -7
  66. data/ext/libcouchbase/src/mcserver/negotiate.cc +38 -132
  67. data/ext/libcouchbase/src/n1ql/ixmgmt.cc +2 -1
  68. data/ext/libcouchbase/src/n1ql/n1ql.cc +32 -56
  69. data/ext/libcouchbase/src/newconfig.cc +6 -6
  70. data/ext/libcouchbase/src/nodeinfo.cc +2 -2
  71. data/ext/libcouchbase/src/operations/{cbflush.cc → cbflush.c} +15 -7
  72. data/ext/libcouchbase/src/operations/{counter.cc → counter.c} +0 -0
  73. data/ext/libcouchbase/src/operations/durability.cc +26 -6
  74. data/ext/libcouchbase/src/operations/durability_internal.h +3 -6
  75. data/ext/libcouchbase/src/operations/{get.cc → get.c} +26 -24
  76. data/ext/libcouchbase/src/operations/{observe.cc → observe.c} +93 -68
  77. data/ext/libcouchbase/src/operations/{pktfwd.cc → pktfwd.c} +0 -0
  78. data/ext/libcouchbase/src/operations/{remove.cc → remove.c} +0 -0
  79. data/ext/libcouchbase/src/operations/stats.cc +8 -3
  80. data/ext/libcouchbase/src/operations/{store.cc → store.c} +32 -27
  81. data/ext/libcouchbase/src/operations/subdoc.cc +18 -38
  82. data/ext/libcouchbase/src/operations/{touch.cc → touch.c} +0 -0
  83. data/ext/libcouchbase/src/packetutils.c +37 -0
  84. data/ext/libcouchbase/src/packetutils.h +2 -2
  85. data/ext/libcouchbase/src/probes.d +1 -1
  86. data/ext/libcouchbase/src/{retrychk.cc → retrychk.c} +3 -2
  87. data/ext/libcouchbase/src/retryq.cc +4 -4
  88. data/ext/libcouchbase/src/settings.c +0 -3
  89. data/ext/libcouchbase/src/settings.h +0 -5
  90. data/ext/libcouchbase/src/simplestring.c +211 -0
  91. data/ext/libcouchbase/src/simplestring.h +228 -0
  92. data/ext/libcouchbase/src/ssl/ssl_c.c +0 -1
  93. data/ext/libcouchbase/src/ssl/ssl_common.c +0 -2
  94. data/ext/libcouchbase/src/ssl/ssl_e.c +1 -0
  95. data/ext/libcouchbase/src/ssobuf.h +82 -0
  96. data/ext/libcouchbase/src/trace.h +4 -4
  97. data/ext/libcouchbase/src/vbucket/vbucket.c +1 -0
  98. data/ext/libcouchbase/src/views/{docreq.cc → docreq.c} +54 -48
  99. data/ext/libcouchbase/src/views/docreq.h +30 -24
  100. data/ext/libcouchbase/src/views/viewreq.c +358 -0
  101. data/ext/libcouchbase/src/views/viewreq.h +13 -43
  102. data/ext/libcouchbase/tests/basic/t_connstr.cc +50 -89
  103. data/ext/libcouchbase/tests/basic/t_host.cc +75 -67
  104. data/ext/libcouchbase/tests/basic/t_jsparse.cc +78 -27
  105. data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
  106. data/ext/libcouchbase/tests/htparse/t_basic.cc +78 -58
  107. data/ext/libcouchbase/tests/iotests/mock-environment.h +1 -2
  108. data/ext/libcouchbase/tests/iotests/t_confmon.cc +114 -96
  109. data/ext/libcouchbase/tests/mc/t_alloc.cc +9 -9
  110. data/ext/libcouchbase/tools/cbc-pillowfight.cc +1 -1
  111. data/lib/libcouchbase/ext/tasks.rb +6 -2
  112. data/lib/libcouchbase/query_view.rb +1 -1
  113. data/lib/libcouchbase/results_fiber.rb +6 -6
  114. data/lib/libcouchbase/version.rb +1 -1
  115. metadata +26 -26
  116. data/ext/libcouchbase/src/bootstrap.cc +0 -216
  117. data/ext/libcouchbase/src/bucketconfig/bc_file.cc +0 -281
  118. data/ext/libcouchbase/src/bucketconfig/bc_http.cc +0 -528
  119. data/ext/libcouchbase/src/bucketconfig/bc_mcraw.cc +0 -115
  120. data/ext/libcouchbase/src/bucketconfig/confmon.cc +0 -378
  121. data/ext/libcouchbase/src/dns-srv.cc +0 -142
  122. data/ext/libcouchbase/src/errmap.cc +0 -107
  123. data/ext/libcouchbase/src/errmap.h +0 -113
  124. data/ext/libcouchbase/src/lcbht/lcbht.cc +0 -177
  125. data/ext/libcouchbase/src/lcbio/connect.cc +0 -562
  126. data/ext/libcouchbase/src/lcbio/timer-cxx.h +0 -87
  127. data/ext/libcouchbase/src/mctx-helper.h +0 -51
  128. data/ext/libcouchbase/src/views/viewreq.cc +0 -318
  129. data/ext/libcouchbase/tests/iotests/t_errmap.cc +0 -97
@@ -71,8 +71,7 @@ class MockCommand
71
71
  X(GET_MCPORTS) \
72
72
  X(SET_CCCP) \
73
73
  X(REGEN_VBCOORDS) \
74
- X(RESET_QUERYSTATE) \
75
- X(OPFAIL)
74
+ X(RESET_QUERYSTATE)
76
75
 
77
76
  public:
78
77
  enum Code {
@@ -7,115 +7,130 @@
7
7
  #include <lcbio/iotable.h>
8
8
  #include <set>
9
9
 
10
- using namespace lcb::clconfig;
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 : 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(Listener *lsn, EventType event,
37
- ConfigInfo *info)
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(ConfmonTest, testBasic)
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
- Confmon *mon = new Confmon(instance->settings, instance->iotable);
50
- Provider *http = mon->get_provider(CLCONFIG_HTTP);
51
- http->enable();
52
- http->configure_nodes(*instance->ht_nodes);
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->prepare();
49
+ lcb_confmon_prepare(mon);
55
50
 
56
- EXPECT_EQ(NULL, mon->get_config());
57
- mon->start();
58
- mon->start(); // Twice!
59
- mon->stop();
60
- mon->stop();
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
- Provider *provider = mon->get_provider(CLCONFIG_HTTP);
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
- mon->add_listener(&listener);
69
- mon->start();
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
- delete mon;
72
+
73
+ lcb_confmon_destroy(mon);
73
74
  }
74
75
 
75
76
 
76
- struct listener2 : Listener {
77
+ struct listener2 {
78
+ clconfig_listener base;
77
79
  int call_count;
78
80
  lcbio_pTABLE io;
79
- Method last_source;
80
- std::set<EventType> expected_events;
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 = CLCONFIG_PHONY;
86
+ last_source = LCB_CLCONFIG_PHONY;
85
87
  expected_events.clear();
86
88
  }
87
89
 
88
- listener2() : Listener() {
90
+ listener2() {
91
+ memset(&base, 0, sizeof(base));
89
92
  io = NULL;
90
93
  reset();
91
94
  }
95
+ };
92
96
 
93
- void clconfig_lsn(EventType event, ConfigInfo *info) {
94
- if (event == CLCONFIG_EVENT_MONITOR_STOPPED) {
95
- IOT_START(io);
96
- return;
97
- }
97
+ static struct listener2* getListener2(const void *p)
98
+ {
99
+ return reinterpret_cast<struct listener2*>(const_cast<void*>(p));
100
+ }
98
101
 
99
- if (!expected_events.empty()) {
100
- if (expected_events.end() ==
101
- expected_events.find(event)) {
102
- return;
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
- call_count++;
107
- last_source = info->get_origin();
108
- IOT_STOP(io);
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
- static void runConfmonTest(lcbio_pTABLE io, Confmon *mon)
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(ConfmonTest, testCycle)
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
- Confmon *mon = new Confmon(instance->settings, instance->iotable);
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
- mon->add_listener(&lsn);
154
+
155
+ lcb_confmon_add_listener(mon, &lsn.base);
139
156
 
140
157
  mock->makeConnectParams(cropts, NULL);
141
- Provider *cccp = mon->get_provider(CLCONFIG_CCCP);
142
- Provider *http = mon->get_provider(CLCONFIG_HTTP);
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
- lcb::Hostlist hl;
145
- hl.add(cropts.v.v2.mchosts, 11210);
146
- cccp->enable(instance);
147
- cccp->configure_nodes(hl);
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->enable();
150
- http->configure_nodes(*instance->ht_nodes);
166
+ lcb_clconfig_http_enable(http);
167
+ lcb_clconfig_http_set_nodes(http, instance->ht_nodes);
168
+ hostlist_destroy(hl);
151
169
 
152
- mon->prepare();
153
- mon->start();
170
+ lcb_confmon_prepare(mon);
171
+ lcb_confmon_start(mon);
154
172
  lsn.expected_events.insert(CLCONFIG_EVENT_GOT_NEW_CONFIG);
155
- runConfmonTest(lsn.io, mon);
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(CLCONFIG_CCCP, lsn.last_source);
177
+ ASSERT_EQ(LCB_CLCONFIG_CCCP, lsn.last_source);
160
178
 
161
- mon->start();
179
+ lcb_confmon_start(mon);
162
180
  lsn.reset();
163
181
  lsn.expected_events.insert(CLCONFIG_EVENT_GOT_ANY_CONFIG);
164
- runConfmonTest(lsn.io, mon);
182
+ runConfmon(lsn.io, mon);
165
183
  ASSERT_EQ(1, lsn.call_count);
166
- ASSERT_EQ(CLCONFIG_CCCP, lsn.last_source);
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->start();
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
- runConfmonTest(lsn.io, mon);
175
- ASSERT_EQ(CLCONFIG_HTTP, lsn.last_source);
192
+ runConfmon(lsn.io, mon);
193
+ ASSERT_EQ(LCB_CLCONFIG_HTTP, lsn.last_source);
176
194
  ASSERT_EQ(1, lsn.call_count);
177
- delete mon;
195
+ lcb_confmon_destroy(mon);
178
196
  }
179
197
 
180
- TEST_F(ConfmonTest, testBootstrapMethods)
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
- lcb::Bootstrap* bs = instance->bs_state;
190
- hrtime_t last = bs->get_last_refresh(), cur = 0;
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->reset_last_refresh();
194
- instance->confmon->stop();
211
+ bs->last_refresh = 0;
212
+ lcb_confmon_stop(instance->confmon);
195
213
 
196
214
  // Refreshing now should work
197
- instance->bootstrap(lcb::BS_REFRESH_THROTTLE);
198
- ASSERT_TRUE(instance->confmon->is_refreshing());
215
+ lcb_bootstrap_common(instance, LCB_BS_REFRESH_THROTTLE);
216
+ ASSERT_NE(0, lcb_confmon_is_refreshing(instance->confmon));
199
217
 
200
- cur = bs->get_last_refresh();
218
+ cur = bs->last_refresh;
201
219
  ASSERT_GT(cur, 0);
202
- ASSERT_EQ(0, bs->get_errcounter());
220
+ ASSERT_EQ(0, bs->errcounter);
203
221
  last = cur;
204
222
 
205
223
  // Stop it, so the state is reset
206
- instance->confmon->stop();
207
- ASSERT_FALSE(instance->confmon->is_refreshing());
224
+ lcb_confmon_stop(instance->confmon);
225
+ ASSERT_EQ(0, lcb_confmon_is_refreshing(instance->confmon));
208
226
 
209
- instance->bootstrap(lcb::BS_REFRESH_THROTTLE|lcb::BS_REFRESH_INCRERR);
210
- ASSERT_EQ(last, bs->get_last_refresh());
211
- ASSERT_EQ(1, bs->get_errcounter());
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->bootstrap(lcb::BS_REFRESH_THROTTLE);
215
- ASSERT_EQ(1, bs->get_errcounter());
232
+ lcb_bootstrap_common(instance, LCB_BS_REFRESH_THROTTLE);
233
+ ASSERT_EQ(1, bs->errcounter);
216
234
 
217
235
  // No refresh yet
218
- ASSERT_FALSE(instance->confmon->is_refreshing());
236
+ ASSERT_EQ(0, lcb_confmon_is_refreshing(instance->confmon));
219
237
 
220
- instance->bootstrap(lcb::BS_REFRESH_ALWAYS);
221
- ASSERT_TRUE(instance->confmon->is_refreshing());
222
- instance->confmon->stop();
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 : mc_REQDATAEX {
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
- ExtraCookie *ec = static_cast<ExtraCookie*>(pkt->u_rdata.exdata);
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
- const static mc_REQDATAPROCS procs = { NULL, pkt_dtor };
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
- (config.opsPerCycle * 1e9) / (config.getRateLimit() * config.getNumThreads());
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 not @query_completed do
41
- if @results.length > 0
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 not @query_completed do
80
- if index < @results.length
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 not @query_completed do
136
- if index < @results.length && index < num
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