aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Schulz <aschulz@wikimedia.org>2016-09-17 20:48:23 -0700
committerAaron Schulz <aschulz@wikimedia.org>2016-09-18 13:45:56 -0700
commit740fcb4c58746d3b797bb2fa218c6edb40daeed7 (patch)
tree3676f55850288831e22be5c54d1237a4241c4c14
parented174d0ffca593ca4c6df8eaab8ecb3c820e2f8e (diff)
downloadmediawikicore-740fcb4c58746d3b797bb2fa218c6edb40daeed7.tar.gz
mediawikicore-740fcb4c58746d3b797bb2fa218c6edb40daeed7.zip
Remove wf* function dependencies from FSLockManager
Change-Id: I52f08c6e7372ddbbcc1b5f82d505e435b01ff138
-rw-r--r--includes/db/DatabaseSqlite.php7
-rw-r--r--includes/filebackend/lockmanager/FSLockManager.php13
-rw-r--r--includes/filebackend/lockmanager/LockManager.php2
3 files changed, 16 insertions, 6 deletions
diff --git a/includes/db/DatabaseSqlite.php b/includes/db/DatabaseSqlite.php
index 28fb5b5db73e..a52c2edf1ad9 100644
--- a/includes/db/DatabaseSqlite.php
+++ b/includes/db/DatabaseSqlite.php
@@ -69,8 +69,10 @@ class DatabaseSqlite extends DatabaseBase {
// Super doesn't open when $user is false, but we can work with $dbName,
// which is derived from the file path in this case.
$this->openFile( $p['dbFilePath'] );
+ $lockDomain = md5( $p['dbFilePath'] );
} else {
$this->mDBname = $p['dbname'];
+ $lockDomain = $this->mDBname;
// Stock wiki mode using standard file names per DB.
parent::__construct( $p );
// Super doesn't open when $user is false, but we can work with $dbName
@@ -96,7 +98,10 @@ class DatabaseSqlite extends DatabaseBase {
wfWarn( "Invalid SQLite transaction mode provided." );
}
- $this->lockMgr = new FSLockManager( [ 'lockDirectory' => "{$this->dbDir}/locks" ] );
+ $this->lockMgr = new FSLockManager( [
+ 'domain' => $lockDomain,
+ 'lockDirectory' => "{$this->dbDir}/locks"
+ ] );
}
/**
diff --git a/includes/filebackend/lockmanager/FSLockManager.php b/includes/filebackend/lockmanager/FSLockManager.php
index 8e149d6380df..b6629aa84663 100644
--- a/includes/filebackend/lockmanager/FSLockManager.php
+++ b/includes/filebackend/lockmanager/FSLockManager.php
@@ -41,11 +41,15 @@ class FSLockManager extends LockManager {
self::LOCK_EX => self::LOCK_EX
];
- protected $lockDir; // global dir for all servers
+ /** @var string Global dir for all servers */
+ protected $lockDir;
/** @var array Map of (locked key => lock file handle) */
protected $handles = [];
+ /** @var bool */
+ protected $isWindows;
+
/**
* Construct a new instance from configuration.
*
@@ -56,6 +60,7 @@ class FSLockManager extends LockManager {
parent::__construct( $config );
$this->lockDir = $config['lockDirectory'];
+ $this->isWindows = ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' );
}
/**
@@ -119,11 +124,11 @@ class FSLockManager extends LockManager {
} else {
MediaWiki\suppressWarnings();
$handle = fopen( $this->getLockPath( $path ), 'a+' );
- MediaWiki\restoreWarnings();
if ( !$handle ) { // lock dir missing?
- wfMkdirParents( $this->lockDir );
+ mkdir( $this->lockDir, 0777, true );
$handle = fopen( $this->getLockPath( $path ), 'a+' ); // try again
}
+ MediaWiki\restoreWarnings();
}
if ( $handle ) {
// Either a shared or exclusive lock
@@ -173,7 +178,7 @@ class FSLockManager extends LockManager {
}
// Unlock handles to release locks and delete
// any lock files that end up with no locks on them...
- if ( wfIsWindows() ) {
+ if ( $this->isWindows ) {
// Windows: for any process, including this one,
// calling unlink() on a locked file will fail
$status->merge( $this->closeLockHandles( $path, $handlesToClose ) );
diff --git a/includes/filebackend/lockmanager/LockManager.php b/includes/filebackend/lockmanager/LockManager.php
index eff031b58b53..e7f37ed9818c 100644
--- a/includes/filebackend/lockmanager/LockManager.php
+++ b/includes/filebackend/lockmanager/LockManager.php
@@ -70,7 +70,7 @@ abstract class LockManager {
* This only applies if locks are not tied to a connection/process.
*/
public function __construct( array $config ) {
- $this->domain = isset( $config['domain'] ) ? $config['domain'] : wfWikiID();
+ $this->domain = isset( $config['domain'] ) ? $config['domain'] : 'global';
if ( isset( $config['lockTTL'] ) ) {
$this->lockTTL = max( 5, $config['lockTTL'] );
} elseif ( PHP_SAPI === 'cli' ) {