if ( !isset( $this->conns[$lockDb] ) ) {
$db = null;
if ( $lockDb === 'localDBMaster' ) {
- $lb = wfGetLBFactory()->getMainLB( $this->domain );
- $db = $lb->getConnection( DB_MASTER, [], $this->domain );
+ $db = $this->getLocalLB()->getConnection( DB_MASTER, [], $this->domain );
} elseif ( isset( $this->dbServers[$lockDb] ) ) {
$config = $this->dbServers[$lockDb];
$db = DatabaseBase::factory( $config['type'], $config );
return $this->conns[$lockDb];
}
+ /**
+ * @return LoadBalancer
+ */
+ protected function getLocalLB() {
+ return wfGetLBFactory()->getMainLB( $this->domain );
+ }
+
/**
* Do additional initialization for new lock DB connection
*
self::LOCK_EX => self::LOCK_EX
];
- /**
- * @param string $lockDb
- * @param IDatabase $db
- */
+ protected function getLocalLB() {
+ // Use a separate connection so releaseAllLocks() doesn't rollback the main trx
+ return wfGetLBFactory()->newMainLB( $this->domain );
+ }
+
protected function initConnection( $lockDb, IDatabase $db ) {
# Let this transaction see lock rows from other transactions
$db->query( "SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;" );