Simplify logic to prevent writes on replica DB connections
[lhc/web/wiklou.git] / includes / libs / rdbms / database / Database.php
index 1c9cad5..15e02ad 100644 (file)
@@ -236,12 +236,6 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        /** @var TransactionProfiler */
        protected $trxProfiler;
 
-       /**
-        * @var bool Whether writing is allowed on this connection.
-        *      Should be false for connections to replicas.
-        */
-       protected $allowWrite = true;
-
        /**
         * Constructor and database handle and attempt to connect to the DB server
         *
@@ -283,7 +277,6 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                $this->connLogger = $params['connLogger'];
                $this->queryLogger = $params['queryLogger'];
                $this->errorLogger = $params['errorLogger'];
-               $this->allowWrite = empty( $params['noWrite'] );
 
                // Set initial dummy domain until open() sets the final DB/prefix
                $this->currentDomain = DatabaseDomain::newUnspecified();
@@ -915,13 +908,12 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                }
 
                if ( $isWrite ) {
-                       if ( !$this->allowWrite ) {
+                       if ( $this->getLBInfo( 'replica' ) === true ) {
                                throw new DBError(
                                        $this,
-                                       'Write operations are not allowed on this database connection!'
+                                       'Write operations are not allowed on replica database connections.'
                                );
                        }
-
                        # In theory, non-persistent writes are allowed in read-only mode, but due to things
                        # like https://bugs.mysql.com/bug.php?id=33669 that might not work anyway...
                        $reason = $this->getReadOnlyReason();
@@ -2965,13 +2957,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 +3018,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 );