Skip to content

Commit 123c41d

Browse files
committed
Merge branch 'phpc-1639' into v1.7
* phpc-1639: PHPC-1639: Manager::executeCommand should not inherit read preference
2 parents ff4795b + b0ba3af commit 123c41d

File tree

2 files changed

+39
-9
lines changed

2 files changed

+39
-9
lines changed

src/MongoDB/Manager.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ static void php_phongo_manager_prep_uri_options(zval* options TSRMLS_DC) /* {{{
271271
*
272272
* On success, server_id will be set and the function will return true;
273273
* otherwise, false is returned and an exception is thrown. */
274-
static bool php_phongo_manager_select_server(bool for_writes, zval* zreadPreference, zval* zsession, mongoc_client_t* client, uint32_t* server_id TSRMLS_DC) /* {{{ */
274+
static bool php_phongo_manager_select_server(bool for_writes, bool inherit_read_preference, zval* zreadPreference, zval* zsession, mongoc_client_t* client, uint32_t* server_id TSRMLS_DC) /* {{{ */
275275
{
276276
mongoc_server_description_t* selected_server;
277277
const mongoc_read_prefs_t* read_preference = NULL;
@@ -289,7 +289,11 @@ static bool php_phongo_manager_select_server(bool for_writes, zval* zreadPrefere
289289
}
290290

291291
if (!for_writes) {
292-
read_preference = zreadPreference ? phongo_read_preference_from_zval(zreadPreference TSRMLS_CC) : mongoc_client_get_read_prefs(client);
292+
if (zreadPreference) {
293+
read_preference = phongo_read_preference_from_zval(zreadPreference TSRMLS_CC);
294+
} else if (inherit_read_preference) {
295+
read_preference = mongoc_client_get_read_prefs(client);
296+
}
293297
}
294298

295299
selected_server = mongoc_client_select_server(client, for_writes, read_preference, &error);
@@ -402,7 +406,7 @@ static PHP_METHOD(Manager, executeCommand)
402406
goto cleanup;
403407
}
404408

405-
if (!php_phongo_manager_select_server(false, zreadPreference, zsession, intern->client, &server_id TSRMLS_CC)) {
409+
if (!php_phongo_manager_select_server(false, false, zreadPreference, zsession, intern->client, &server_id TSRMLS_CC)) {
406410
/* Exception should already have been thrown */
407411
goto cleanup;
408412
}
@@ -450,7 +454,7 @@ static PHP_METHOD(Manager, executeReadCommand)
450454
return;
451455
}
452456

453-
if (!php_phongo_manager_select_server(false, zreadPreference, zsession, intern->client, &server_id TSRMLS_CC)) {
457+
if (!php_phongo_manager_select_server(false, true, zreadPreference, zsession, intern->client, &server_id TSRMLS_CC)) {
454458
/* Exception should already have been thrown */
455459
return;
456460
}
@@ -487,7 +491,7 @@ static PHP_METHOD(Manager, executeWriteCommand)
487491
return;
488492
}
489493

490-
if (!php_phongo_manager_select_server(true, NULL, zsession, intern->client, &server_id TSRMLS_CC)) {
494+
if (!php_phongo_manager_select_server(true, false, NULL, zsession, intern->client, &server_id TSRMLS_CC)) {
491495
/* Exception should already have been thrown */
492496
return;
493497
}
@@ -524,7 +528,7 @@ static PHP_METHOD(Manager, executeReadWriteCommand)
524528
return;
525529
}
526530

527-
if (!php_phongo_manager_select_server(true, NULL, zsession, intern->client, &server_id TSRMLS_CC)) {
531+
if (!php_phongo_manager_select_server(true, false, NULL, zsession, intern->client, &server_id TSRMLS_CC)) {
528532
/* Exception should already have been thrown */
529533
return;
530534
}
@@ -570,7 +574,7 @@ static PHP_METHOD(Manager, executeQuery)
570574
goto cleanup;
571575
}
572576

573-
if (!php_phongo_manager_select_server(false, zreadPreference, zsession, intern->client, &server_id TSRMLS_CC)) {
577+
if (!php_phongo_manager_select_server(false, true, zreadPreference, zsession, intern->client, &server_id TSRMLS_CC)) {
574578
/* Exception should already have been thrown */
575579
goto cleanup;
576580
}
@@ -617,7 +621,7 @@ static PHP_METHOD(Manager, executeBulkWrite)
617621
return;
618622
}
619623

620-
if (!php_phongo_manager_select_server(true, NULL, zsession, intern->client, &server_id TSRMLS_CC)) {
624+
if (!php_phongo_manager_select_server(true, false, NULL, zsession, intern->client, &server_id TSRMLS_CC)) {
621625
/* Exception should already have been thrown */
622626
goto cleanup;
623627
}
@@ -737,7 +741,7 @@ static PHP_METHOD(Manager, selectServer)
737741
return;
738742
}
739743

740-
if (!php_phongo_manager_select_server(false, zreadPreference, NULL, intern->client, &server_id TSRMLS_CC)) {
744+
if (!php_phongo_manager_select_server(false, true, zreadPreference, NULL, intern->client, &server_id TSRMLS_CC)) {
741745
/* Exception should already have been thrown */
742746
return;
743747
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
MongoDB\Driver\Manager::executeCommand() does not inherit read preference
3+
--SKIPIF--
4+
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
5+
<?php skip_if_not_replica_set(); ?>
6+
<?php skip_if_no_secondary(); ?>
7+
<?php skip_if_not_clean(); ?>
8+
--FILE--
9+
<?php
10+
require_once __DIR__ . "/../utils/basic.inc";
11+
12+
$manager = new MongoDB\Driver\Manager(URI, ['readPreference' => 'secondary']);
13+
14+
$command = new MongoDB\Driver\Command(['ping' => 1]);
15+
$cursor = $manager->executeCommand(DATABASE_NAME, $command);
16+
17+
echo "is_primary: ", $cursor->getServer()->isPrimary() ? 'true' : 'false', "\n";
18+
echo "is_secondary: ", $cursor->getServer()->isSecondary() ? 'true' : 'false', "\n\n";
19+
?>
20+
===DONE===
21+
<?php exit(0); ?>
22+
--EXPECTF--
23+
is_primary: true
24+
is_secondary: false
25+
26+
===DONE===

0 commit comments

Comments
 (0)