Skip to content
This repository was archived by the owner on Dec 23, 2021. It is now read-only.

Commit 46358c5

Browse files
committed
HHVM-196: Manager::getServers() and ::debugInfo() should use mongoc_client_get_server_descriptions()
1 parent 3ecfa6f commit 46358c5

File tree

4 files changed

+116
-8
lines changed

4 files changed

+116
-8
lines changed

bson.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "hphp/runtime/base/array-iterator.h"
1919
#include "hphp/runtime/base/execution-context.h"
2020
#include "hphp/runtime/base/type-string.h"
21+
#include "hphp/util/logger.h"
2122

2223
#include "bson.h"
2324
#include "utils.h"

src/MongoDB/Driver/Manager.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -466,12 +466,22 @@ const StaticString
466466
Array HHVM_METHOD(MongoDBDriverManager, __debugInfo)
467467
{
468468
MongoDBDriverManagerData* data = Native::data<MongoDBDriverManagerData>(this_);
469+
size_t i;
470+
mongoc_server_description_t **sds;
471+
size_t n;
469472
Array retval = Array::Create();
470473
Array servers = Array::Create();
471474

472475
retval.add(s_MongoDBDriverManager_uri, (char*) mongoc_uri_get_string(data->m_client->uri));
473476

474-
mongoc_set_for_each(data->m_client->topology->description.servers, mongodb_driver_add_server_debug_wrapper, &servers);
477+
sds = mongoc_client_get_server_descriptions(data->m_client, &n);
478+
for (i = 0; i < n; i++) {
479+
if (sds[i]->type == MONGOC_SERVER_UNKNOWN) {
480+
continue;
481+
}
482+
483+
mongodb_driver_add_server_debug_wrapper(sds[i], &servers);
484+
}
475485

476486
retval.add(s_MongoDBDriverManager_cluster, servers);
477487

@@ -568,21 +578,20 @@ Array HHVM_METHOD(MongoDBDriverManager, getServers)
568578
{
569579
MongoDBDriverManagerData *data = Native::data<MongoDBDriverManagerData>(this_);
570580
size_t i;
571-
mongoc_set_t *set;
581+
mongoc_server_description_t **sds;
582+
size_t n;
572583

573584
Array retval = Array::Create();
574585

575-
set = data->m_client->topology->description.servers;
576-
for (i = 0; i < set->items_len; i++) {
577-
mongoc_server_description_t *sd = (mongoc_server_description_t*) set->items[i].item;
578-
579-
if (sd->type == MONGOC_SERVER_UNKNOWN) {
586+
sds = mongoc_client_get_server_descriptions(data->m_client, &n);
587+
for (i = 0; i < n; i++) {
588+
if (sds[i]->type == MONGOC_SERVER_UNKNOWN) {
580589
continue;
581590
}
582591

583592
retval.add(
584593
(int64_t) i,
585-
hippo_mongo_driver_server_create_from_id(data->m_client, sd->id)
594+
hippo_mongo_driver_server_create_from_id(data->m_client, sds[i]->id)
586595
);
587596

588597
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
--TEST--
2+
MongoDB\Driver\Manager::__debugInfo()
3+
--FILE--
4+
<?php
5+
$manager = new MongoDB\Driver\Manager();
6+
7+
$command = new MongoDB\Driver\Command(array('ping' => 1));
8+
$manager->executeCommand("test", $command);
9+
10+
var_dump( $manager->__debugInfo() );
11+
?>
12+
--EXPECTF--
13+
array(2) {
14+
["uri"]=>
15+
string(%d) "%s"
16+
["cluster"]=>
17+
array(1) {
18+
[0]=>
19+
array(10) {
20+
["host"]=>
21+
string(%d) "%s"
22+
["port"]=>
23+
int(%d)
24+
["type"]=>
25+
int(1)
26+
["is_primary"]=>
27+
bool(false)
28+
["is_secondary"]=>
29+
bool(false)
30+
["is_arbiter"]=>
31+
bool(false)
32+
["is_hidden"]=>
33+
bool(false)
34+
["is_passive"]=>
35+
bool(false)
36+
["last_is_master"]=>
37+
array(8) {
38+
["ismaster"]=>
39+
bool(true)
40+
["maxBsonObjectSize"]=>
41+
int(%d)
42+
["maxMessageSizeBytes"]=>
43+
int(%d)
44+
["maxWriteBatchSize"]=>
45+
int(%d)
46+
["localTime"]=>
47+
object(MongoDB\BSON\UTCDateTime)#4 (1) {
48+
["milliseconds"]=>
49+
int(%d)
50+
}
51+
["maxWireVersion"]=>
52+
int(%d)
53+
["minWireVersion"]=>
54+
int(0)
55+
["ok"]=>
56+
float(1)
57+
}
58+
["round_trip_time"]=>
59+
int(%d)
60+
}
61+
}
62+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--TEST--
2+
MongoDB\Driver\Manager::getServers()
3+
--FILE--
4+
<?php
5+
function assertServerType($type) {
6+
if ($type === MongoDB\Driver\Server::TYPE_STANDALONE) {
7+
printf("Found standalone server type: %d\n", $type);
8+
} else {
9+
printf("Unexpected server type: %d\n", $type);
10+
}
11+
}
12+
13+
$manager = new MongoDB\Driver\Manager();
14+
15+
$servers = $manager->getServers();
16+
printf("Known servers: %d\n", count($servers));
17+
18+
echo "Pinging\n";
19+
$command = new MongoDB\Driver\Command(array('ping' => 1));
20+
$manager->executeCommand("test", $command);
21+
22+
$servers = $manager->getServers();
23+
printf("Known servers: %d\n", count($servers));
24+
25+
foreach ($servers as $server) {
26+
printf("Found server: %s:%d\n", $server->getHost(), $server->getPort());
27+
assertServerType($server->getType());
28+
}
29+
30+
?>
31+
--EXPECTF--
32+
Known servers: 0
33+
Pinging
34+
Known servers: 1
35+
Found server: %s:%d
36+
Found standalone server type: 1

0 commit comments

Comments
 (0)