Skip to content

Commit ae801ee

Browse files
committed
PHPC-600: Use mongoc_client_get_server_descriptions() to get Manager's Servers
1 parent 018f614 commit ae801ee

File tree

2 files changed

+43
-82
lines changed

2 files changed

+43
-82
lines changed

src/MongoDB/Manager.c

Lines changed: 42 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include <mongoc.h>
3030
#include <mongoc-client-private.h>
3131
#include <mongoc-host-list-private.h>
32-
#include <mongoc-server-description-private.h>
3332

3433
/* PHP Core stuff */
3534
#include <php.h>
@@ -201,8 +200,8 @@ PHP_METHOD(Manager, getReadPreference)
201200
PHP_METHOD(Manager, getServers)
202201
{
203202
php_phongo_manager_t *intern;
204-
mongoc_set_t *set;
205-
size_t i;
203+
mongoc_server_description_t **sds;
204+
size_t i, n = 0;
206205
SUPPRESS_UNUSED_WARNING(return_value_ptr) SUPPRESS_UNUSED_WARNING(return_value_used)
207206

208207

@@ -212,31 +211,25 @@ PHP_METHOD(Manager, getServers)
212211
return;
213212
}
214213

215-
array_init(return_value);
216-
set = intern->client->topology->description.servers;
217-
for(i=0; i<set->items_len; i++) {
214+
sds = mongoc_client_get_server_descriptions(intern->client, &n);
215+
array_init_size(return_value, n);
216+
217+
for (i = 0; i < n; i++) {
218218
#if PHP_VERSION_ID >= 70000
219219
zval obj;
220-
#else
221-
zval *obj = NULL;
222-
#endif
223-
224-
mongoc_server_description_t *sd = (mongoc_server_description_t *) set->items[i].item;
225220

226-
if (sd->type == MONGOC_SERVER_UNKNOWN) {
227-
continue;
228-
}
229-
230-
#if PHP_VERSION_ID >= 70000
231-
phongo_server_init(&obj, intern->client, ((mongoc_server_description_t *)set->items[i].item)->id TSRMLS_CC);
221+
phongo_server_init(&obj, intern->client, mongoc_server_description_id(sds[i]) TSRMLS_CC);
232222
add_next_index_zval(return_value, &obj);
233223
#else
234-
MAKE_STD_ZVAL(obj);
224+
zval *obj = NULL;
235225

236-
phongo_server_init(obj, intern->client, sd->id TSRMLS_CC);
226+
MAKE_STD_ZVAL(obj);
227+
phongo_server_init(obj, intern->client, mongoc_server_description_id(sds[i]) TSRMLS_CC);
237228
add_next_index_zval(return_value, obj);
238229
#endif
239230
}
231+
232+
mongoc_server_descriptions_destroy_all(sds, n);
240233
}
241234
/* }}} */
242235
/* {{{ proto MongoDB\Driver\WriteConcern Manager::getWriteConcern()
@@ -416,62 +409,57 @@ phongo_create_object_retval php_phongo_manager_create_object(zend_class_entry *c
416409
#endif
417410
} /* }}} */
418411

419-
bool phongo_add_server_debug(void *item, void *ctx) /* {{{ */
420-
{
421-
mongoc_server_description_t *server = item;
422-
zval *retval = ctx;
423-
#if PHP_VERSION_ID >= 70000
424-
zval entry;
425-
426-
php_phongo_server_to_zval(&entry, server);
427-
add_next_index_zval(retval, &entry);
428-
#else
429-
zval *entry = NULL;
430-
431-
MAKE_STD_ZVAL(entry);
432-
php_phongo_server_to_zval(entry, server);
433-
add_next_index_zval(retval, entry);
434-
#endif
435-
436-
return true;
437-
} /* }}} */
438-
439412
HashTable *php_phongo_manager_get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */
440413
{
441-
php_phongo_manager_t *intern;
414+
php_phongo_manager_t *intern;
415+
mongoc_server_description_t **sds;
416+
size_t i, n = 0;
442417
#if PHP_VERSION_ID >= 70000
443-
zval retval;
418+
zval retval, cluster;
444419
#else
445-
zval retval = zval_used_for_init;
420+
zval retval = zval_used_for_init;
421+
zval *cluster = NULL;
446422
#endif
447423

448424

449425
*is_temp = 1;
450426
intern = Z_MANAGER_OBJ_P(object);
451427

452428

453-
array_init(&retval);
429+
array_init_size(&retval, 2);
454430

455431
ADD_ASSOC_STRING(&retval, "uri", (char *)mongoc_uri_get_string(intern->client->uri));
456432

433+
sds = mongoc_client_get_server_descriptions(intern->client, &n);
457434

458-
{
459435
#if PHP_VERSION_ID >= 70000
460-
zval cluster;
436+
array_init_size(&cluster, n);
437+
438+
for (i = 0; i < n; i++) {
439+
zval obj;
461440

462-
array_init(&cluster);
463-
mongoc_set_for_each(intern->client->topology->description.servers, phongo_add_server_debug, &cluster);
464-
ADD_ASSOC_ZVAL_EX(&retval, "cluster", &cluster);
441+
php_phongo_server_to_zval(&obj, sds[i]);
442+
add_next_index_zval(&cluster, &obj);
443+
}
444+
445+
ADD_ASSOC_ZVAL_EX(&retval, "cluster", &cluster);
465446
#else
466-
zval *cluster = NULL;
447+
MAKE_STD_ZVAL(cluster);
448+
array_init_size(cluster, n);
467449

468-
MAKE_STD_ZVAL(cluster);
469-
array_init(cluster);
470-
mongoc_set_for_each(intern->client->topology->description.servers, phongo_add_server_debug, cluster);
471-
ADD_ASSOC_ZVAL_EX(&retval, "cluster", cluster);
472-
#endif
450+
for (i = 0; i < n; i++) {
451+
zval *obj = NULL;
452+
453+
MAKE_STD_ZVAL(obj);
454+
php_phongo_server_to_zval(obj, sds[i]);
455+
add_next_index_zval(cluster, obj);
473456
}
474457

458+
ADD_ASSOC_ZVAL_EX(&retval, "cluster", cluster);
459+
#endif
460+
461+
mongoc_server_descriptions_destroy_all(sds, n);
462+
475463
return Z_ARRVAL(retval);
476464
} /* }}} */
477465
/* }}} */

tests/manager/manager-var-dump-001.phpt

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,34 +23,7 @@ object(MongoDB\Driver\Manager)#%d (%d) {
2323
["uri"]=>
2424
string(%d) "mongodb://%s"
2525
["cluster"]=>
26-
array(1) {
27-
[0]=>
28-
array(11) {
29-
["host"]=>
30-
string(%d) "%s"
31-
["port"]=>
32-
int(%d)
33-
["type"]=>
34-
int(0)
35-
["is_primary"]=>
36-
bool(false)
37-
["is_secondary"]=>
38-
bool(false)
39-
["is_arbiter"]=>
40-
bool(false)
41-
["is_hidden"]=>
42-
bool(false)
43-
["is_passive"]=>
44-
bool(false)
45-
["tags"]=>
46-
array(0) {
47-
}
48-
["last_is_master"]=>
49-
array(0) {
50-
}
51-
["round_trip_time"]=>
52-
int(-1)
53-
}
26+
array(0) {
5427
}
5528
}
5629
object(MongoDB\Driver\Manager)#%d (%d) {

0 commit comments

Comments
 (0)