Skip to content

Commit 14d43f7

Browse files
committed
Merge pull request #80
2 parents 81553f0 + a2c88be commit 14d43f7

File tree

4 files changed

+105
-2
lines changed

4 files changed

+105
-2
lines changed

src/MongoDB/Manager.c

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

3334
/* PHP Core stuff */
3435
#include <php.h>
@@ -312,11 +313,16 @@ PHP_METHOD(Manager, getServers)
312313
array_init(return_value);
313314
set = intern->client->topology->description.servers;
314315
for(i=0; i<set->items_len; i++) {
316+
mongoc_server_description_t *sd = (mongoc_server_description_t *) set->items[i].item;
315317
zval *obj = NULL;
316318

319+
if (sd->type == MONGOC_SERVER_UNKNOWN) {
320+
continue;
321+
}
322+
317323
MAKE_STD_ZVAL(obj);
318324

319-
phongo_server_init(obj, intern->client, ((mongoc_server_description_t *)set->items[i].item)->id TSRMLS_CC);
325+
phongo_server_init(obj, intern->client, sd->id TSRMLS_CC);
320326
add_next_index_zval(return_value, obj);
321327
}
322328
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
--TEST--
2+
MongoDB\Driver\Manager::getServers() (standalone)
3+
--SKIPIF--
4+
<?php require __DIR__ . "/../utils/basic-skipif.inc"; CLEANUP(STANDALONE); ?>
5+
--FILE--
6+
<?php
7+
require_once __DIR__ . "/../utils/basic.inc";
8+
9+
function assertServerType($type) {
10+
if ($type === MongoDB\Driver\Server::TYPE_STANDALONE) {
11+
printf("Found standalone server type: %d\n", $type);
12+
} else {
13+
printf("Unexpected server type: %d\n", $type);
14+
}
15+
}
16+
17+
$manager = new MongoDB\Driver\Manager(STANDALONE);
18+
19+
$servers = $manager->getServers();
20+
printf("Known servers: %d\n", count($servers));
21+
22+
echo "Pinging\n";
23+
$command = new MongoDB\Driver\Command(array('ping' => 1));
24+
$manager->executeCommand(DATABASE_NAME, $command);
25+
26+
$servers = $manager->getServers();
27+
printf("Known servers: %d\n", count($servers));
28+
29+
foreach ($servers as $server) {
30+
printf("Found server: %s:%d\n", $server->getHost(), $server->getPort());
31+
assertServerType($server->getType());
32+
}
33+
34+
?>
35+
===DONE===
36+
<?php exit(0); ?>
37+
--EXPECTF--
38+
Known servers: 0
39+
Pinging
40+
Known servers: 1
41+
Found server: %s:%d
42+
Found standalone server type: 1
43+
===DONE===
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
--TEST--
2+
MongoDB\Driver\Manager::getServers() (replica set)
3+
--SKIPIF--
4+
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
5+
<?php NEEDS("REPLICASET"); CLEANUP(REPLICASET); ?>
6+
--FILE--
7+
<?php
8+
require_once __DIR__ . "/../utils/basic.inc";
9+
10+
function assertServerType($type) {
11+
$rsTypes = array(
12+
MongoDB\Driver\Server::TYPE_RS_PRIMARY,
13+
MongoDB\Driver\Server::TYPE_RS_SECONDARY,
14+
MongoDB\Driver\Server::TYPE_RS_ARBITER,
15+
);
16+
17+
if (in_array($type, $rsTypes, true)) {
18+
printf("Found replica set server type: %d\n", $type);
19+
} else {
20+
printf("Unexpected server type: %d\n", $type);
21+
}
22+
}
23+
24+
$manager = new MongoDB\Driver\Manager(REPLICASET);
25+
26+
$servers = $manager->getServers();
27+
printf("Known servers: %d\n", count($servers));
28+
29+
echo "Pinging\n";
30+
$command = new MongoDB\Driver\Command(array('ping' => 1));
31+
$manager->executeCommand(DATABASE_NAME, $command);
32+
33+
$servers = $manager->getServers();
34+
printf("Known servers: %d\n", count($servers));
35+
36+
foreach ($servers as $server) {
37+
printf("Found server: %s:%d\n", $server->getHost(), $server->getPort());
38+
assertServerType($server->getType());
39+
}
40+
41+
?>
42+
===DONE===
43+
<?php exit(0); ?>
44+
--EXPECTF--
45+
Known servers: 0
46+
Pinging
47+
Known servers: 3
48+
Found server: %s:%d
49+
Found replica set server type: %r(4|5|6)%r
50+
Found server: %s:%d
51+
Found replica set server type: %r(4|5|6)%r
52+
Found server: %s:%d
53+
Found replica set server type: %r(4|5|6)%r
54+
===DONE===

tests/replicaset/manager-getservers-001.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
MongoDB\Driver\Manager: getServers()
2+
MongoDB\Driver\Manager::getServers()
33
--SKIPIF--
44
<?php require __DIR__ . "/../utils/basic-skipif.inc"; NEEDS("REPLICASET"); ?>
55
--FILE--

0 commit comments

Comments
 (0)