/** @var array Map of degraded buckets */
protected $degradedBuckets = []; // (bucket index => UNIX timestamp)
- final protected function doLock( array $paths, $type ) {
- return $this->doLockByType( [ $type => $paths ] );
- }
-
- final protected function doUnlock( array $paths, $type ) {
- return $this->doUnlockByType( [ $type => $paths ] );
- }
-
- protected function doLockByType( array $pathsByType ) {
+ final protected function doLockByType( array $pathsByType ) {
$status = StatusValue::newGood();
$pathsToLock = []; // (bucket => type => paths)
$bucket = $this->getBucketFromPath( $path );
$pathsToUnlock[$bucket][$type][] = $path;
}
- if ( !count( $this->locksHeld[$path] ) ) {
+ if ( $this->locksHeld[$path] === [] ) {
unset( $this->locksHeld[$path] ); // no SH or EX locks left for key
}
}
foreach ( $pathsToUnlock as $bucket => $pathsToUnlockByType ) {
$status->merge( $this->doUnlockingRequestBucket( $bucket, $pathsToUnlockByType ) );
}
- if ( !count( $this->locksHeld ) ) {
+ if ( $this->locksHeld === [] ) {
$status->merge( $this->releaseAllLocks() );
$this->degradedBuckets = []; // safe to retry the normal quorum
}
* @return StatusValue
*/
abstract protected function releaseAllLocks();
+
+ final protected function doLock( array $paths, $type ) {
+ throw new LogicException( __METHOD__ . ': proxy class does not need this method.' );
+ }
+
+ final protected function doUnlock( array $paths, $type ) {
+ throw new LogicException( __METHOD__ . ': proxy class does not need this method.' );
+ }
}