--TEST-- MongoDB\Driver\Session::startTransaction() Transient Error Test --SKIPIF-- --FILE-- COLLECTION_NAME, ]); $manager->executeCommand(DATABASE_NAME, $cmd); /* Insert Data */ $bw = new \MongoDB\Driver\BulkWrite(); $bw->insert( [ '_id' => 0, 'msg' => 'Initial Value' ] ); $manager->executeBulkWrite(NS, $bw); /* First 'thread', try to update document, but don't close transaction */ $sessionA = $manager->startSession(); $sessionA->startTransaction( [ 'readConcern' => new \MongoDB\Driver\ReadConcern( "snapshot" ), 'writeConcern' => new \MongoDB\Driver\WriteConcern( \MongoDB\Driver\WriteConcern::MAJORITY ) ] ); $bw = new \MongoDB\Driver\BulkWrite(); $bw->update( [ '_id' => 0 ], [ '$set' => [ 'msg' => 'Update from session A' ] ] ); $manager->executeBulkWrite(NS, $bw, ['session' => $sessionA]); /* Second 'thread', try to update the same document, should trigger exception. In handler, commit * first settion, verify result, and redo this transaction. */ $sessionB = $manager->startSession(); $sessionB->startTransaction( [ 'readConcern' => new \MongoDB\Driver\ReadConcern( "snapshot" ), 'writeConcern' => new \MongoDB\Driver\WriteConcern( \MongoDB\Driver\WriteConcern::MAJORITY ) ] ); try { $bw = new \MongoDB\Driver\BulkWrite(); $bw->update( [ '_id' => 0 ], [ '$set' => [ 'msg' => 'Update from session B' ] ] ); $manager->executeBulkWrite(NS, $bw, ['session' => $sessionB]); } catch (MongoDB\Driver\Exception\BulkWriteException $e) { echo $e->hasErrorLabel('TransientTransactionError') ? "found a TransientTransactionError" : "did NOT get a TransientTransactionError", "\n"; } ?> ===DONE=== --EXPECTF-- found a TransientTransactionError ===DONE===