From 49e0691b718a918ed55c9b6b570b1265221d9818 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Fri, 23 Sep 2016 00:30:31 -0700 Subject: [PATCH] Move RedisLockManager to /libs Change-Id: Ia476f117243cf0f6984e373d460b24db18584704 --- autoload.php | 2 +- .../filebackend/lockmanager/MySqlLockManager.php | 6 ++++++ includes/libs/lockmanager/DBLockManager.php | 8 -------- includes/libs/lockmanager/LockManager.php | 15 +++++++++++++++ .../lockmanager/RedisLockManager.php | 9 --------- 5 files changed, 22 insertions(+), 18 deletions(-) rename includes/{filebackend => libs}/lockmanager/RedisLockManager.php (97%) diff --git a/autoload.php b/autoload.php index 2b70387862..b3747fe3d9 100644 --- a/autoload.php +++ b/autoload.php @@ -1140,7 +1140,7 @@ $wgAutoloadLocalClasses = [ 'RedisBagOStuff' => __DIR__ . '/includes/objectcache/RedisBagOStuff.php', 'RedisConnRef' => __DIR__ . '/includes/libs/redis/RedisConnRef.php', 'RedisConnectionPool' => __DIR__ . '/includes/libs/redis/RedisConnectionPool.php', - 'RedisLockManager' => __DIR__ . '/includes/filebackend/lockmanager/RedisLockManager.php', + 'RedisLockManager' => __DIR__ . '/includes/libs/lockmanager/RedisLockManager.php', 'RedisPubSubFeedEngine' => __DIR__ . '/includes/rcfeed/RedisPubSubFeedEngine.php', 'RefreshFileHeaders' => __DIR__ . '/maintenance/refreshFileHeaders.php', 'RefreshImageMetadata' => __DIR__ . '/maintenance/refreshImageMetadata.php', diff --git a/includes/filebackend/lockmanager/MySqlLockManager.php b/includes/filebackend/lockmanager/MySqlLockManager.php index 441ffea2d5..125b5e2de0 100644 --- a/includes/filebackend/lockmanager/MySqlLockManager.php +++ b/includes/filebackend/lockmanager/MySqlLockManager.php @@ -15,6 +15,12 @@ class MySqlLockManager extends DBLockManager { self::LOCK_EX => self::LOCK_EX ]; + public function __construct( array $config ) { + parent::__construct( $config ); + + $this->session = substr( $this->session, 0, 31 ); // fit to field + } + protected function initConnection( $lockDb, IDatabase $db ) { # Let this transaction see lock rows from other transactions $db->query( "SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;" ); diff --git a/includes/libs/lockmanager/DBLockManager.php b/includes/libs/lockmanager/DBLockManager.php index c36ff483f8..b0581468f1 100644 --- a/includes/libs/lockmanager/DBLockManager.php +++ b/includes/libs/lockmanager/DBLockManager.php @@ -43,8 +43,6 @@ abstract class DBLockManager extends QuorumLockManager { protected $lockExpiry; // integer number of seconds protected $safeDelay; // integer number of seconds - - protected $session = 0; // random integer /** @var IDatabase[] Map Database connections (DB name => Database) */ protected $conns = []; @@ -91,12 +89,6 @@ abstract class DBLockManager extends QuorumLockManager { $this->statusCache = isset( $config['srvCache'] ) ? $config['srvCache'] : new HashBagOStuff(); - - $random = []; - for ( $i = 1; $i <= 5; ++$i ) { - $random[] = mt_rand( 0, 0xFFFFFFF ); - } - $this->session = substr( md5( implode( '-', $random ) ), 0, 31 ); } /** diff --git a/includes/libs/lockmanager/LockManager.php b/includes/libs/lockmanager/LockManager.php index 80add5b8b7..42391a0986 100644 --- a/includes/libs/lockmanager/LockManager.php +++ b/includes/libs/lockmanager/LockManager.php @@ -3,6 +3,7 @@ * @defgroup LockManager Lock management * @ingroup FileBackend */ +use Psr\Log\LoggerInterface; /** * Resource locking handling. @@ -43,6 +44,9 @@ * @since 1.19 */ abstract class LockManager { + /** @var LoggerInterface */ + protected $logger; + /** @var array Mapping of lock types to the type actually used */ protected $lockTypeMap = [ self::LOCK_SH => self::LOCK_SH, @@ -56,6 +60,9 @@ abstract class LockManager { protected $domain; // string; domain (usually wiki ID) protected $lockTTL; // integer; maximum time locks can be held + /** @var string Random 32-char hex number */ + protected $session; + /** Lock types; stronger locks have higher values */ const LOCK_SH = 1; // shared lock (for reads) const LOCK_UW = 2; // shared lock (for reads used to write elsewhere) @@ -79,6 +86,14 @@ abstract class LockManager { $met = ini_get( 'max_execution_time' ); // this is 0 in CLI mode $this->lockTTL = max( 5 * 60, 2 * (int)$met ); } + + $random = []; + for ( $i = 1; $i <= 5; ++$i ) { + $random[] = mt_rand( 0, 0xFFFFFFF ); + } + $this->session = md5( implode( '-', $random ) ); + + $this->logger = isset( $config['logger'] ) ? $config['logger'] : new \Psr\Log\NullLogger(); } /** diff --git a/includes/filebackend/lockmanager/RedisLockManager.php b/includes/libs/lockmanager/RedisLockManager.php similarity index 97% rename from includes/filebackend/lockmanager/RedisLockManager.php rename to includes/libs/lockmanager/RedisLockManager.php index 267aecead1..a9f5ca364c 100644 --- a/includes/filebackend/lockmanager/RedisLockManager.php +++ b/includes/libs/lockmanager/RedisLockManager.php @@ -20,7 +20,6 @@ * @file * @ingroup LockManager */ -use Psr\Log\LoggerInterface; /** * Manage locks using redis servers. @@ -52,11 +51,6 @@ class RedisLockManager extends QuorumLockManager { /** @var array Map server names to hostname/IP and port numbers */ protected $lockServers = []; - /** @var LoggerInterface */ - protected $logger; - /** @var string Random UUID */ - protected $session = ''; - /** * Construct a new instance from configuration. * @@ -77,9 +71,6 @@ class RedisLockManager extends QuorumLockManager { $config['redisConfig']['serializer'] = 'none'; $this->redisPool = RedisConnectionPool::singleton( $config['redisConfig'] ); - - $this->session = wfRandomString( 32 ); - $this->logger = \MediaWiki\Logger\LoggerFactory::getInstance( 'redis' ); } protected function getLocksOnServer( $lockSrv, array $pathsByType ) { -- 2.20.1