From 4ddb207a32e0235e87954b0d4167c5d7afa85b64 Mon Sep 17 00:00:00 2001 From: Roan Kattouw Date: Wed, 20 Dec 2017 15:25:35 +0100 Subject: [PATCH] Follow-up 36f4daf32c: allow no-write database connections to use transactions After 36f4daf32c was merged, Aaron pointed out on Gerrit that: Transaction can be used on replicas for REPEATABLE-READ mode, so queries in that transaction see the same version of the DB. Those do not involve writes and things would probably break sometimes without it (like reads following foreign keys and reference in separate queries). So allow no-write connections to call begin() and commit(), and only throw an exception when a write query is attempted. Bug: T183265 Change-Id: I138677a714df13ead08061c3e9ef794c3befbe9d --- includes/libs/rdbms/database/Database.php | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php index 1c9cad58cb..3d40417d65 100644 --- a/includes/libs/rdbms/database/Database.php +++ b/includes/libs/rdbms/database/Database.php @@ -2965,13 +2965,6 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware } final public function begin( $fname = __METHOD__, $mode = self::TRANSACTION_EXPLICIT ) { - if ( !$this->allowWrite ) { - throw new DBError( - $this, - 'Write operations are not allowed on this database connection!' - ); - } - // Protect against mismatched atomic section, transaction nesting, and snapshot loss if ( $this->mTrxLevel ) { if ( $this->mTrxAtomicLevels ) { @@ -3033,14 +3026,6 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware } final public function commit( $fname = __METHOD__, $flush = '' ) { - if ( !$this->allowWrite ) { - // we should never get here, since begin() would already throw - throw new DBError( - $this, - 'Write operations are not allowed on this database connection!' - ); - } - if ( $this->mTrxLevel && $this->mTrxAtomicLevels ) { // There are still atomic sections open. This cannot be ignored $levels = implode( ', ', $this->mTrxAtomicLevels ); -- 2.20.1