<?php
+/**
+ * Version of LockManager based on using lock daemon servers.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup LockManager
+ */
/**
+ * Manage locks using a lock daemon server.
+ *
* Version of LockManager based on using lock daemon servers.
* This is meant for multi-wiki systems that may share files.
* All locks are non-blocking, which avoids deadlocks.
* A majority of peers must agree for a lock to be acquired.
*
* @ingroup LockManager
+ * @since 1.19
*/
class LSLockManager extends LockManager {
/** @var Array Mapping of lock types to the type actually used */
/**
* Construct a new instance from configuration.
+ *
* $config paramaters include:
* 'lockServers' : Associative array of server names to configuration.
* Configuration is an associative array that includes:
* @param Array $config
*/
public function __construct( array $config ) {
+ parent::__construct( $config );
+
$this->lockServers = $config['lockServers'];
// Sanitize srvsByBucket config to prevent PHP errors
$this->srvsByBucket = array_filter( $config['srvsByBucket'], 'is_array' );
$this->session = wfBaseConvert( sha1( $this->session ), 16, 36, 31 );
}
+ /**
+ * @see LockManager::doLock()
+ * @param $paths array
+ * @param $type int
+ * @return Status
+ */
protected function doLock( array $paths, $type ) {
$status = Status::newGood();
return $status;
}
+ /**
+ * @see LockManager::doUnlock()
+ * @param $paths array
+ * @param $type int
+ * @return Status
+ */
protected function doUnlock( array $paths, $type ) {
$status = Status::newGood();
* @param $action string
* @param $type string
* @param $values Array
- * @return string|false
+ * @return string|bool
*/
protected function sendCommand( $lockSrv, $action, $type, $values ) {
$conn = $this->getConnection( $lockSrv );
*/
protected function getBucketFromKey( $path ) {
$prefix = substr( sha1( $path ), 0, 2 ); // first 2 hex chars (8 bits)
- return intval( base_convert( $prefix, 16, 10 ) ) % count( $this->dbsByBucket );
+ return intval( base_convert( $prefix, 16, 10 ) ) % count( $this->srvsByBucket );
}
/**