Skip to content

Commit 9d0cbbb

Browse files
committed
PHPLIB-466: Respect pinned session during server selection
1 parent 4a3db49 commit 9d0cbbb

File tree

5 files changed

+75
-39
lines changed

5 files changed

+75
-39
lines changed

src/Client.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public function dropDatabase($databaseName, array $options = [])
170170
$options['typeMap'] = $this->typeMap;
171171
}
172172

173-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
173+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
174174

175175
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForWritableCommandWriteConcern)) {
176176
$options['writeConcern'] = $this->writeConcern;
@@ -246,7 +246,7 @@ public function getWriteConcern()
246246
public function listDatabases(array $options = [])
247247
{
248248
$operation = new ListDatabases($options);
249-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
249+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
250250

251251
return $operation->execute($server);
252252
}
@@ -311,7 +311,7 @@ public function watch(array $pipeline = [], array $options = [])
311311
$options['readPreference'] = $this->readPreference;
312312
}
313313

314-
$server = $this->manager->selectServer($options['readPreference']);
314+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
315315

316316
if (! isset($options['readConcern']) && server_supports_feature($server, self::$wireVersionForReadConcern)) {
317317
$options['readConcern'] = $this->readConcern;

src/Collection.php

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ public function aggregate(array $pipeline, array $options = [])
227227
$options['readPreference'] = new ReadPreference(ReadPreference::RP_PRIMARY);
228228
}
229229

230-
$server = $this->manager->selectServer($options['readPreference']);
230+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
231231

232232
/* MongoDB 4.2 and later supports a read concern when an $out stage is
233233
* being used, but earlier versions do not.
@@ -276,7 +276,7 @@ public function bulkWrite(array $operations, array $options = [])
276276
}
277277

278278
$operation = new BulkWrite($this->databaseName, $this->collectionName, $operations, $options);
279-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
279+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
280280

281281
return $operation->execute($server);
282282
}
@@ -301,7 +301,7 @@ public function count($filter = [], array $options = [])
301301
$options['readPreference'] = $this->readPreference;
302302
}
303303

304-
$server = $this->manager->selectServer($options['readPreference']);
304+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
305305

306306
if (! isset($options['readConcern']) && server_supports_feature($server, self::$wireVersionForReadConcern) && ! is_in_transaction($options)) {
307307
$options['readConcern'] = $this->readConcern;
@@ -330,7 +330,7 @@ public function countDocuments($filter = [], array $options = [])
330330
$options['readPreference'] = $this->readPreference;
331331
}
332332

333-
$server = $this->manager->selectServer($options['readPreference']);
333+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
334334

335335
if (! isset($options['readConcern']) && server_supports_feature($server, self::$wireVersionForReadConcern) && ! is_in_transaction($options)) {
336336
$options['readConcern'] = $this->readConcern;
@@ -392,7 +392,7 @@ public function createIndex($key, array $options = [])
392392
*/
393393
public function createIndexes(array $indexes, array $options = [])
394394
{
395-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
395+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
396396

397397
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForWritableCommandWriteConcern) && ! is_in_transaction($options)) {
398398
$options['writeConcern'] = $this->writeConcern;
@@ -422,7 +422,7 @@ public function deleteMany($filter, array $options = [])
422422
}
423423

424424
$operation = new DeleteMany($this->databaseName, $this->collectionName, $filter, $options);
425-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
425+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
426426

427427
return $operation->execute($server);
428428
}
@@ -446,7 +446,7 @@ public function deleteOne($filter, array $options = [])
446446
}
447447

448448
$operation = new DeleteOne($this->databaseName, $this->collectionName, $filter, $options);
449-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
449+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
450450

451451
return $operation->execute($server);
452452
}
@@ -470,7 +470,7 @@ public function distinct($fieldName, $filter = [], array $options = [])
470470
$options['readPreference'] = $this->readPreference;
471471
}
472472

473-
$server = $this->manager->selectServer($options['readPreference']);
473+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
474474

475475
if (! isset($options['readConcern']) && server_supports_feature($server, self::$wireVersionForReadConcern) && ! is_in_transaction($options)) {
476476
$options['readConcern'] = $this->readConcern;
@@ -497,7 +497,7 @@ public function drop(array $options = [])
497497
$options['typeMap'] = $this->typeMap;
498498
}
499499

500-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
500+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
501501

502502
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForWritableCommandWriteConcern) && ! is_in_transaction($options)) {
503503
$options['writeConcern'] = $this->writeConcern;
@@ -531,7 +531,7 @@ public function dropIndex($indexName, array $options = [])
531531
$options['typeMap'] = $this->typeMap;
532532
}
533533

534-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
534+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
535535

536536
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForWritableCommandWriteConcern) && ! is_in_transaction($options)) {
537537
$options['writeConcern'] = $this->writeConcern;
@@ -558,7 +558,7 @@ public function dropIndexes(array $options = [])
558558
$options['typeMap'] = $this->typeMap;
559559
}
560560

561-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
561+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
562562

563563
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForWritableCommandWriteConcern) && ! is_in_transaction($options)) {
564564
$options['writeConcern'] = $this->writeConcern;
@@ -586,7 +586,7 @@ public function estimatedDocumentCount(array $options = [])
586586
$options['readPreference'] = $this->readPreference;
587587
}
588588

589-
$server = $this->manager->selectServer($options['readPreference']);
589+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
590590

591591
if (! isset($options['readConcern']) && server_supports_feature($server, self::$wireVersionForReadConcern) && ! is_in_transaction($options)) {
592592
$options['readConcern'] = $this->readConcern;
@@ -619,7 +619,7 @@ public function explain(Explainable $explainable, array $options = [])
619619
$options['typeMap'] = $this->typeMap;
620620
}
621621

622-
$server = $this->manager->selectServer($options['readPreference']);
622+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
623623

624624
$operation = new Explain($this->databaseName, $explainable, $options);
625625

@@ -644,7 +644,7 @@ public function find($filter = [], array $options = [])
644644
$options['readPreference'] = $this->readPreference;
645645
}
646646

647-
$server = $this->manager->selectServer($options['readPreference']);
647+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
648648

649649
if (! isset($options['readConcern']) && server_supports_feature($server, self::$wireVersionForReadConcern) && ! is_in_transaction($options)) {
650650
$options['readConcern'] = $this->readConcern;
@@ -677,7 +677,7 @@ public function findOne($filter = [], array $options = [])
677677
$options['readPreference'] = $this->readPreference;
678678
}
679679

680-
$server = $this->manager->selectServer($options['readPreference']);
680+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
681681

682682
if (! isset($options['readConcern']) && server_supports_feature($server, self::$wireVersionForReadConcern) && ! is_in_transaction($options)) {
683683
$options['readConcern'] = $this->readConcern;
@@ -709,7 +709,7 @@ public function findOne($filter = [], array $options = [])
709709
*/
710710
public function findOneAndDelete($filter, array $options = [])
711711
{
712-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
712+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
713713

714714
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForFindAndModifyWriteConcern) && ! is_in_transaction($options)) {
715715
$options['writeConcern'] = $this->writeConcern;
@@ -746,7 +746,7 @@ public function findOneAndDelete($filter, array $options = [])
746746
*/
747747
public function findOneAndReplace($filter, $replacement, array $options = [])
748748
{
749-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
749+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
750750

751751
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForFindAndModifyWriteConcern) && ! is_in_transaction($options)) {
752752
$options['writeConcern'] = $this->writeConcern;
@@ -783,7 +783,7 @@ public function findOneAndReplace($filter, $replacement, array $options = [])
783783
*/
784784
public function findOneAndUpdate($filter, $update, array $options = [])
785785
{
786-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
786+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
787787

788788
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForFindAndModifyWriteConcern) && ! is_in_transaction($options)) {
789789
$options['writeConcern'] = $this->writeConcern;
@@ -899,7 +899,7 @@ public function insertMany(array $documents, array $options = [])
899899
}
900900

901901
$operation = new InsertMany($this->databaseName, $this->collectionName, $documents, $options);
902-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
902+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
903903

904904
return $operation->execute($server);
905905
}
@@ -922,7 +922,7 @@ public function insertOne($document, array $options = [])
922922
}
923923

924924
$operation = new InsertOne($this->databaseName, $this->collectionName, $document, $options);
925-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
925+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
926926

927927
return $operation->execute($server);
928928
}
@@ -939,7 +939,7 @@ public function insertOne($document, array $options = [])
939939
public function listIndexes(array $options = [])
940940
{
941941
$operation = new ListIndexes($this->databaseName, $this->collectionName, $options);
942-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
942+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
943943

944944
return $operation->execute($server);
945945
}
@@ -972,7 +972,7 @@ public function mapReduce(JavascriptInterface $map, JavascriptInterface $reduce,
972972
$options['readPreference'] = new ReadPreference(ReadPreference::RP_PRIMARY);
973973
}
974974

975-
$server = $this->manager->selectServer($options['readPreference']);
975+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
976976

977977
/* A "majority" read concern is not compatible with inline output, so
978978
* avoid providing the Collection's read concern if it would conflict.
@@ -1016,7 +1016,7 @@ public function replaceOne($filter, $replacement, array $options = [])
10161016
}
10171017

10181018
$operation = new ReplaceOne($this->databaseName, $this->collectionName, $filter, $replacement, $options);
1019-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
1019+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
10201020

10211021
return $operation->execute($server);
10221022
}
@@ -1041,7 +1041,7 @@ public function updateMany($filter, $update, array $options = [])
10411041
}
10421042

10431043
$operation = new UpdateMany($this->databaseName, $this->collectionName, $filter, $update, $options);
1044-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
1044+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
10451045

10461046
return $operation->execute($server);
10471047
}
@@ -1066,7 +1066,7 @@ public function updateOne($filter, $update, array $options = [])
10661066
}
10671067

10681068
$operation = new UpdateOne($this->databaseName, $this->collectionName, $filter, $update, $options);
1069-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
1069+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
10701070

10711071
return $operation->execute($server);
10721072
}
@@ -1086,7 +1086,7 @@ public function watch(array $pipeline = [], array $options = [])
10861086
$options['readPreference'] = $this->readPreference;
10871087
}
10881088

1089-
$server = $this->manager->selectServer($options['readPreference']);
1089+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
10901090

10911091
/* Although change streams require a newer version of the server than
10921092
* read concerns, perform the usual wire version check before inheriting

src/Database.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ public function aggregate(array $pipeline, array $options = [])
206206
$options['readPreference'] = new ReadPreference(ReadPreference::RP_PRIMARY);
207207
}
208208

209-
$server = $this->manager->selectServer($options['readPreference']);
209+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
210210

211211
/* MongoDB 4.2 and later supports a read concern when an $out stage is
212212
* being used, but earlier versions do not.
@@ -258,7 +258,7 @@ public function command($command, array $options = [])
258258
}
259259

260260
$operation = new DatabaseCommand($this->databaseName, $command, $options);
261-
$server = $this->manager->selectServer($options['readPreference']);
261+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
262262

263263
return $operation->execute($server);
264264
}
@@ -280,7 +280,7 @@ public function createCollection($collectionName, array $options = [])
280280
$options['typeMap'] = $this->typeMap;
281281
}
282282

283-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
283+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
284284

285285
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForWritableCommandWriteConcern)) {
286286
$options['writeConcern'] = $this->writeConcern;
@@ -307,7 +307,7 @@ public function drop(array $options = [])
307307
$options['typeMap'] = $this->typeMap;
308308
}
309309

310-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
310+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
311311

312312
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForWritableCommandWriteConcern)) {
313313
$options['writeConcern'] = $this->writeConcern;
@@ -335,7 +335,7 @@ public function dropCollection($collectionName, array $options = [])
335335
$options['typeMap'] = $this->typeMap;
336336
}
337337

338-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
338+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
339339

340340
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForWritableCommandWriteConcern)) {
341341
$options['writeConcern'] = $this->writeConcern;
@@ -420,7 +420,7 @@ public function getWriteConcern()
420420
public function listCollections(array $options = [])
421421
{
422422
$operation = new ListCollections($this->databaseName, $options);
423-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
423+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
424424

425425
return $operation->execute($server);
426426
}
@@ -442,7 +442,7 @@ public function modifyCollection($collectionName, array $collectionOptions, arra
442442
$options['typeMap'] = $this->typeMap;
443443
}
444444

445-
$server = $this->manager->selectServer(new ReadPreference(ReadPreference::RP_PRIMARY));
445+
$server = select_server($this->manager, new ReadPreference(ReadPreference::RP_PRIMARY), extract_session_from_options($options));
446446

447447
if (! isset($options['writeConcern']) && server_supports_feature($server, self::$wireVersionForWritableCommandWriteConcern)) {
448448
$options['writeConcern'] = $this->writeConcern;
@@ -509,7 +509,7 @@ public function watch(array $pipeline = [], array $options = [])
509509
$options['readPreference'] = $this->readPreference;
510510
}
511511

512-
$server = $this->manager->selectServer($options['readPreference']);
512+
$server = select_server($this->manager, $options['readPreference'], extract_session_from_options($options));
513513

514514
if (! isset($options['readConcern']) && server_supports_feature($server, self::$wireVersionForReadConcern)) {
515515
$options['readConcern'] = $this->readConcern;

0 commit comments

Comments
 (0)