Skip to content

Commit 4e912f1

Browse files
committed
mongoc_topology_description_server_by_id now takes an additional bson_error_t (CDRIVER-906)
1 parent 0a47eaa commit 4e912f1

File tree

1 file changed

+38
-27
lines changed

1 file changed

+38
-27
lines changed

src/MongoDB/Server.c

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ PHP_METHOD(Server, getHost)
134134
{
135135
php_phongo_server_t *intern;
136136
mongoc_server_description_t *sd;
137+
bson_error_t error;
137138
(void)return_value_ptr; (void)return_value_used;
138139

139140
intern = (php_phongo_server_t *)zend_object_store_get_object(getThis() TSRMLS_CC);
@@ -142,11 +143,11 @@ PHP_METHOD(Server, getHost)
142143
return;
143144
}
144145

145-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
146+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
146147
RETURN_STRING(sd->host.host, 1);
147148
}
148149

149-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
150+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
150151
}
151152
/* }}} */
152153
/* {{{ proto array Server::getTags()
@@ -155,6 +156,7 @@ PHP_METHOD(Server, getTags)
155156
{
156157
php_phongo_server_t *intern;
157158
mongoc_server_description_t *sd;
159+
bson_error_t error;
158160
(void)return_value_ptr; (void)return_value_used;
159161

160162

@@ -165,7 +167,7 @@ PHP_METHOD(Server, getTags)
165167
}
166168

167169

168-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
170+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
169171
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
170172
state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
171173
state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
@@ -175,7 +177,7 @@ PHP_METHOD(Server, getTags)
175177
RETURN_ZVAL(state.zchild, 0, 1);
176178
}
177179

178-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
180+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
179181
}
180182
/* }}} */
181183
/* {{{ proto array Server::getInfo()
@@ -184,6 +186,7 @@ PHP_METHOD(Server, getInfo)
184186
{
185187
php_phongo_server_t *intern;
186188
mongoc_server_description_t *sd;
189+
bson_error_t error;
187190
(void)return_value_ptr; (void)return_value_used;
188191

189192

@@ -194,7 +197,7 @@ PHP_METHOD(Server, getInfo)
194197
}
195198

196199

197-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
200+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
198201
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
199202
state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
200203
state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
@@ -204,7 +207,7 @@ PHP_METHOD(Server, getInfo)
204207
RETURN_ZVAL(state.zchild, 0, 1);
205208
}
206209

207-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
210+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
208211
}
209212
/* }}} */
210213
/* {{{ proto integer Server::getLatency()
@@ -213,6 +216,7 @@ PHP_METHOD(Server, getLatency)
213216
{
214217
php_phongo_server_t *intern;
215218
mongoc_server_description_t *sd;
219+
bson_error_t error;
216220
(void)return_value_ptr; (void)return_value_used;
217221

218222

@@ -222,11 +226,11 @@ PHP_METHOD(Server, getLatency)
222226
return;
223227
}
224228

225-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
229+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
226230
RETURN_LONG(sd->round_trip_time);
227231
}
228232

229-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
233+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
230234
}
231235
/* }}} */
232236
/* {{{ proto integer Server::getPort()
@@ -235,6 +239,7 @@ PHP_METHOD(Server, getPort)
235239
{
236240
php_phongo_server_t *intern;
237241
mongoc_server_description_t *sd;
242+
bson_error_t error;
238243
(void)return_value_ptr; (void)return_value_used;
239244

240245

@@ -244,11 +249,11 @@ PHP_METHOD(Server, getPort)
244249
return;
245250
}
246251

247-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
252+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
248253
RETURN_LONG(sd->host.port);
249254
}
250255

251-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
256+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
252257
}
253258
/* }}} */
254259
/* {{{ proto integer Server::getType()
@@ -257,6 +262,7 @@ PHP_METHOD(Server, getType)
257262
{
258263
php_phongo_server_t *intern;
259264
mongoc_server_description_t *sd;
265+
bson_error_t error;
260266
(void)return_value_ptr; (void)return_value_used;
261267

262268

@@ -266,11 +272,11 @@ PHP_METHOD(Server, getType)
266272
return;
267273
}
268274

269-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
275+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
270276
RETURN_LONG(sd->type);
271277
}
272278

273-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
279+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
274280
}
275281
/* }}} */
276282
/* {{{ proto bool Server::isPrimary()
@@ -279,6 +285,7 @@ PHP_METHOD(Server, isPrimary)
279285
{
280286
php_phongo_server_t *intern;
281287
mongoc_server_description_t *sd;
288+
bson_error_t error;
282289
(void)return_value_ptr; (void)return_value_used;
283290

284291

@@ -288,11 +295,11 @@ PHP_METHOD(Server, isPrimary)
288295
return;
289296
}
290297

291-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
298+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
292299
RETURN_BOOL(sd->type == MONGOC_SERVER_RS_PRIMARY);
293300
}
294301

295-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
302+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
296303
}
297304
/* }}} */
298305
/* {{{ proto bool Server::isSecondary()
@@ -301,6 +308,7 @@ PHP_METHOD(Server, isSecondary)
301308
{
302309
php_phongo_server_t *intern;
303310
mongoc_server_description_t *sd;
311+
bson_error_t error;
304312
(void)return_value_ptr; (void)return_value_used;
305313

306314

@@ -310,11 +318,11 @@ PHP_METHOD(Server, isSecondary)
310318
return;
311319
}
312320

313-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
321+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
314322
RETURN_BOOL(sd->type == MONGOC_SERVER_RS_SECONDARY);
315323
}
316324

317-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
325+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
318326
}
319327
/* }}} */
320328
/* {{{ proto bool Server::isArbiter()
@@ -323,6 +331,7 @@ PHP_METHOD(Server, isArbiter)
323331
{
324332
php_phongo_server_t *intern;
325333
mongoc_server_description_t *sd;
334+
bson_error_t error;
326335
(void)return_value_ptr; (void)return_value_used;
327336

328337

@@ -332,11 +341,11 @@ PHP_METHOD(Server, isArbiter)
332341
return;
333342
}
334343

335-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
344+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
336345
RETURN_BOOL(sd->type == MONGOC_SERVER_RS_ARBITER);
337346
}
338347

339-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
348+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
340349
}
341350
/* }}} */
342351
/* {{{ proto bool Server::isHidden()
@@ -345,6 +354,7 @@ PHP_METHOD(Server, isHidden)
345354
{
346355
php_phongo_server_t *intern;
347356
mongoc_server_description_t *sd;
357+
bson_error_t error;
348358
(void)return_value_ptr; (void)return_value_used;
349359

350360

@@ -354,13 +364,13 @@ PHP_METHOD(Server, isHidden)
354364
return;
355365
}
356366

357-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
367+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
358368
bson_iter_t iter;
359369

360370
RETURN_BOOL(bson_iter_init_find_case(&iter, &sd->last_is_master, "hidden") && bson_iter_as_bool(&iter));
361371
}
362372

363-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
373+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
364374
}
365375
/* }}} */
366376
/* {{{ proto bool Server::isPassive()
@@ -369,6 +379,7 @@ PHP_METHOD(Server, isPassive)
369379
{
370380
php_phongo_server_t *intern;
371381
mongoc_server_description_t *sd;
382+
bson_error_t error;
372383
(void)return_value_ptr; (void)return_value_used;
373384

374385

@@ -378,13 +389,13 @@ PHP_METHOD(Server, isPassive)
378389
return;
379390
}
380391

381-
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
392+
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
382393
bson_iter_t iter;
383394

384395
RETURN_BOOL(bson_iter_init_find_case(&iter, &sd->last_is_master, "passive") && bson_iter_as_bool(&iter));
385396
}
386397

387-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
398+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
388399
}
389400
/* }}} */
390401

@@ -475,8 +486,8 @@ static int php_phongo_server_compare_objects(zval *o1, zval *o2 TSRMLS_DC) /* {{
475486
intern1 = (php_phongo_server_t *)zend_object_store_get_object(o1 TSRMLS_CC);
476487
intern2 = (php_phongo_server_t *)zend_object_store_get_object(o2 TSRMLS_CC);
477488

478-
sd1 = mongoc_topology_description_server_by_id(&intern1->client->topology->description, intern1->server_id);
479-
sd2 = mongoc_topology_description_server_by_id(&intern2->client->topology->description, intern2->server_id);
489+
sd1 = mongoc_topology_description_server_by_id(&intern1->client->topology->description, intern1->server_id, NULL);
490+
sd2 = mongoc_topology_description_server_by_id(&intern2->client->topology->description, intern2->server_id, NULL);
480491

481492
if (!sd1 || !sd2) {
482493
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
@@ -517,14 +528,14 @@ HashTable *php_phongo_server_get_debug_info(zval *object, int *is_temp TSRMLS_DC
517528
php_phongo_server_t *intern = NULL;
518529
zval retval = zval_used_for_init;
519530
mongoc_server_description_t *sd;
520-
531+
bson_error_t error;
521532

522533
*is_temp = 1;
523534
intern = (php_phongo_server_t *)zend_object_store_get_object(object TSRMLS_CC);
524535

525536

526-
if (!(sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
527-
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
537+
if (!(sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
538+
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message);
528539
return NULL;
529540
}
530541

0 commit comments

Comments
 (0)