--TEST-- MongoDB\Driver\Server::executeWriteCommand() pins transaction to server --SKIPIF-- --FILE-- executeCommand( DATABASE_NAME, new \MongoDB\Driver\Command([ 'create' => COLLECTION_NAME ]), [ 'writeConcern' => new \MongoDB\Driver\WriteConcern( \MongoDB\Driver\WriteConcern::MAJORITY ) ] ); $servers = $manager->getServers(); $selectedServer = array_pop($servers); $wrongServer = array_pop($servers); var_dump($selectedServer != $wrongServer); $session = $manager->startSession(); var_dump($session->getServer() instanceof \MongoDB\Driver\Server); $session->startTransaction(); var_dump($session->getServer() instanceof \MongoDB\Driver\Server); $command = new MongoDB\Driver\Command([ 'findAndModify' => COLLECTION_NAME, 'query' => ['_id' => 'foo'], 'upsert' => true, 'new' => true, 'update' => ['x' => 1] ]); $selectedServer->executeWriteCommand(DATABASE_NAME, $command, ['session' => $session]); var_dump($session->getServer() instanceof \MongoDB\Driver\Server); $bulk = new MongoDB\Driver\BulkWrite(); $bulk->insert(['x' => 1]); $selectedServer->executeBulkWrite(NS, $bulk, ['session' => $session]); echo throws(function () use ($wrongServer, $session) { $command = new MongoDB\Driver\Command([ 'findAndModify' => COLLECTION_NAME, 'query' => ['_id' => 'foo'], 'upsert' => true, 'new' => true, 'update' => ['x' => 1] ]); $wrongServer->executeWriteCommand(DATABASE_NAME, $command, ['session' => $session]); }, \MongoDB\Driver\Exception\RuntimeException::class), "\n"; $session->commitTransaction(); var_dump($session->getServer() instanceof \MongoDB\Driver\Server); $bulk = new MongoDB\Driver\BulkWrite(); $bulk->insert(['x' => 1]); $selectedServer->executeBulkWrite(NS, $bulk, ['session' => $session]); var_dump($session->getServer() instanceof \MongoDB\Driver\Server); ?> ===DONE=== --EXPECT-- bool(true) bool(false) bool(false) bool(true) OK: Got MongoDB\Driver\Exception\RuntimeException Requested server id does not matched pinned server id bool(true) bool(false) ===DONE===