summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2018-01-16 19:34:43 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2018-01-16 21:54:20 +0100
commit8edbfdb29173a97f6fd265bad234ec458b72bf40 (patch)
treedd44453cf41fae4d8453ce3738ae9c8dae57d619
parent13a787e2f5d22e4cd8204f4524ea3e2c4eba4d32 (diff)
downloadnextcloud-server-8edbfdb29173a97f6fd265bad234ec458b72bf40.tar.gz
nextcloud-server-8edbfdb29173a97f6fd265bad234ec458b72bf40.zip
Made locking providers strict
* Added typehints * Added return types * Made strict Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
-rw-r--r--apps/testing/lib/Locking/FakeDBLockingProvider.php2
-rw-r--r--lib/private/Lock/AbstractLockingProvider.php12
-rw-r--r--lib/private/Lock/DBLockingProvider.php20
-rw-r--r--lib/private/Lock/MemcacheLockingProvider.php13
-rw-r--r--lib/private/Lock/NoopLockingProvider.php23
-rw-r--r--lib/public/Lock/ILockingProvider.php9
-rw-r--r--lib/public/Lock/LockedException.php5
7 files changed, 45 insertions, 39 deletions
diff --git a/apps/testing/lib/Locking/FakeDBLockingProvider.php b/apps/testing/lib/Locking/FakeDBLockingProvider.php
index 174cc2ec7fe..f656150da3b 100644
--- a/apps/testing/lib/Locking/FakeDBLockingProvider.php
+++ b/apps/testing/lib/Locking/FakeDBLockingProvider.php
@@ -51,7 +51,7 @@ class FakeDBLockingProvider extends \OC\Lock\DBLockingProvider {
* @param string $path
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
*/
- public function releaseLock($path, $type) {
+ public function releaseLock(string $path, int $type) {
// we DONT keep shared locks till the end of the request
if ($type === self::LOCK_SHARED) {
$this->db->executeUpdate(
diff --git a/lib/private/Lock/AbstractLockingProvider.php b/lib/private/Lock/AbstractLockingProvider.php
index 6ad1dd7ca1b..f7f0ee34a12 100644
--- a/lib/private/Lock/AbstractLockingProvider.php
+++ b/lib/private/Lock/AbstractLockingProvider.php
@@ -1,4 +1,5 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
@@ -29,6 +30,7 @@ use OCP\Lock\ILockingProvider;
* to release any left over locks at the end of the request
*/
abstract class AbstractLockingProvider implements ILockingProvider {
+ /** @var int $ttl */
protected $ttl; // how long until we clear stray locks in seconds
protected $acquiredLocks = [
@@ -43,7 +45,7 @@ abstract class AbstractLockingProvider implements ILockingProvider {
* @param int $type
* @return bool
*/
- protected function hasAcquiredLock($path, $type) {
+ protected function hasAcquiredLock(string $path, int $type): bool {
if ($type === self::LOCK_SHARED) {
return isset($this->acquiredLocks['shared'][$path]) && $this->acquiredLocks['shared'][$path] > 0;
} else {
@@ -57,7 +59,7 @@ abstract class AbstractLockingProvider implements ILockingProvider {
* @param string $path
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
*/
- protected function markAcquire($path, $type) {
+ protected function markAcquire(string $path, int $type) {
if ($type === self::LOCK_SHARED) {
if (!isset($this->acquiredLocks['shared'][$path])) {
$this->acquiredLocks['shared'][$path] = 0;
@@ -74,7 +76,7 @@ abstract class AbstractLockingProvider implements ILockingProvider {
* @param string $path
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
*/
- protected function markRelease($path, $type) {
+ protected function markRelease(string $path, int $type) {
if ($type === self::LOCK_SHARED) {
if (isset($this->acquiredLocks['shared'][$path]) and $this->acquiredLocks['shared'][$path] > 0) {
$this->acquiredLocks['shared'][$path]--;
@@ -93,7 +95,7 @@ abstract class AbstractLockingProvider implements ILockingProvider {
* @param string $path
* @param int $targetType self::LOCK_SHARED or self::LOCK_EXCLUSIVE
*/
- protected function markChange($path, $targetType) {
+ protected function markChange(string $path, int $targetType) {
if ($targetType === self::LOCK_SHARED) {
unset($this->acquiredLocks['exclusive'][$path]);
if (!isset($this->acquiredLocks['shared'][$path])) {
@@ -121,7 +123,7 @@ abstract class AbstractLockingProvider implements ILockingProvider {
}
}
- protected function getOwnSharedLockCount($path) {
+ protected function getOwnSharedLockCount(string $path) {
return isset($this->acquiredLocks['shared'][$path]) ? $this->acquiredLocks['shared'][$path] : 0;
}
}
diff --git a/lib/private/Lock/DBLockingProvider.php b/lib/private/Lock/DBLockingProvider.php
index 9de1098a466..016be64c097 100644
--- a/lib/private/Lock/DBLockingProvider.php
+++ b/lib/private/Lock/DBLockingProvider.php
@@ -61,7 +61,7 @@ class DBLockingProvider extends AbstractLockingProvider {
* @param string $path
* @return bool
*/
- protected function isLocallyLocked($path) {
+ protected function isLocallyLocked(string $path): bool {
return isset($this->sharedLocks[$path]) && $this->sharedLocks[$path];
}
@@ -71,7 +71,7 @@ class DBLockingProvider extends AbstractLockingProvider {
* @param string $path
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
*/
- protected function markAcquire($path, $type) {
+ protected function markAcquire(string $path, int $type) {
parent::markAcquire($path, $type);
if ($type === self::LOCK_SHARED) {
$this->sharedLocks[$path] = true;
@@ -84,7 +84,7 @@ class DBLockingProvider extends AbstractLockingProvider {
* @param string $path
* @param int $targetType self::LOCK_SHARED or self::LOCK_EXCLUSIVE
*/
- protected function markChange($path, $targetType) {
+ protected function markChange(string $path, int $targetType) {
parent::markChange($path, $targetType);
if ($targetType === self::LOCK_SHARED) {
$this->sharedLocks[$path] = true;
@@ -99,7 +99,7 @@ class DBLockingProvider extends AbstractLockingProvider {
* @param \OCP\AppFramework\Utility\ITimeFactory $timeFactory
* @param int $ttl
*/
- public function __construct(IDBConnection $connection, ILogger $logger, ITimeFactory $timeFactory, $ttl = 3600) {
+ public function __construct(IDBConnection $connection, ILogger $logger, ITimeFactory $timeFactory, int $ttl = 3600) {
$this->connection = $connection;
$this->logger = $logger;
$this->timeFactory = $timeFactory;
@@ -114,7 +114,7 @@ class DBLockingProvider extends AbstractLockingProvider {
* @return int number of inserted rows
*/
- protected function initLockField($path, $lock = 0) {
+ protected function initLockField(string $path, int $lock = 0): int {
$expire = $this->getExpireTime();
return $this->connection->insertIfNotExist('*PREFIX*file_locks', ['key' => $path, 'lock' => $lock, 'ttl' => $expire], ['key']);
}
@@ -122,7 +122,7 @@ class DBLockingProvider extends AbstractLockingProvider {
/**
* @return int
*/
- protected function getExpireTime() {
+ protected function getExpireTime(): int {
return $this->timeFactory->getTime() + $this->ttl;
}
@@ -131,7 +131,7 @@ class DBLockingProvider extends AbstractLockingProvider {
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
* @return bool
*/
- public function isLocked($path, $type) {
+ public function isLocked(string $path, int $type): bool {
if ($this->hasAcquiredLock($path, $type)) {
return true;
}
@@ -157,7 +157,7 @@ class DBLockingProvider extends AbstractLockingProvider {
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
* @throws \OCP\Lock\LockedException
*/
- public function acquireLock($path, $type) {
+ public function acquireLock(string $path, int $type) {
$expire = $this->getExpireTime();
if ($type === self::LOCK_SHARED) {
if (!$this->isLocallyLocked($path)) {
@@ -194,7 +194,7 @@ class DBLockingProvider extends AbstractLockingProvider {
* @param string $path
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
*/
- public function releaseLock($path, $type) {
+ public function releaseLock(string $path, int $type) {
$this->markRelease($path, $type);
// we keep shared locks till the end of the request so we can re-use them
@@ -213,7 +213,7 @@ class DBLockingProvider extends AbstractLockingProvider {
* @param int $targetType self::LOCK_SHARED or self::LOCK_EXCLUSIVE
* @throws \OCP\Lock\LockedException
*/
- public function changeLock($path, $targetType) {
+ public function changeLock(string $path, int $targetType) {
$expire = $this->getExpireTime();
if ($targetType === self::LOCK_SHARED) {
$result = $this->connection->executeUpdate(
diff --git a/lib/private/Lock/MemcacheLockingProvider.php b/lib/private/Lock/MemcacheLockingProvider.php
index c4b1469b50f..70ad972b46d 100644
--- a/lib/private/Lock/MemcacheLockingProvider.php
+++ b/lib/private/Lock/MemcacheLockingProvider.php
@@ -1,4 +1,5 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
@@ -36,12 +37,12 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
* @param \OCP\IMemcache $memcache
* @param int $ttl
*/
- public function __construct(IMemcache $memcache, $ttl = 3600) {
+ public function __construct(IMemcache $memcache, int $ttl = 3600) {
$this->memcache = $memcache;
$this->ttl = $ttl;
}
- private function setTTL($path) {
+ private function setTTL(string $path) {
if ($this->memcache instanceof IMemcacheTTL) {
$this->memcache->setTTL($path, $this->ttl);
}
@@ -52,7 +53,7 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
* @return bool
*/
- public function isLocked($path, $type) {
+ public function isLocked(string $path, int $type): bool {
$lockValue = $this->memcache->get($path);
if ($type === self::LOCK_SHARED) {
return $lockValue > 0;
@@ -68,7 +69,7 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
* @throws \OCP\Lock\LockedException
*/
- public function acquireLock($path, $type) {
+ public function acquireLock(string $path, int $type) {
if ($type === self::LOCK_SHARED) {
if (!$this->memcache->inc($path)) {
throw new LockedException($path);
@@ -87,7 +88,7 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
* @param string $path
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
*/
- public function releaseLock($path, $type) {
+ public function releaseLock(string $path, int $type) {
if ($type === self::LOCK_SHARED) {
if ($this->getOwnSharedLockCount($path) === 1) {
$removed = $this->memcache->cad($path, 1); // if we're the only one having a shared lock we can remove it in one go
@@ -111,7 +112,7 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
* @param int $targetType self::LOCK_SHARED or self::LOCK_EXCLUSIVE
* @throws \OCP\Lock\LockedException
*/
- public function changeLock($path, $targetType) {
+ public function changeLock(string $path, int $targetType) {
if ($targetType === self::LOCK_SHARED) {
if (!$this->memcache->cas($path, 'exclusive', 1)) {
throw new LockedException($path);
diff --git a/lib/private/Lock/NoopLockingProvider.php b/lib/private/Lock/NoopLockingProvider.php
index 6dfbd8ccb44..9133f818033 100644
--- a/lib/private/Lock/NoopLockingProvider.php
+++ b/lib/private/Lock/NoopLockingProvider.php
@@ -1,4 +1,5 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
@@ -32,24 +33,24 @@ use OCP\Lock\ILockingProvider;
*/
class NoopLockingProvider implements ILockingProvider {
- /**
- * {@inheritdoc}
- */
- public function isLocked($path, $type) {
+ /**
+ * {@inheritdoc}
+ */
+ public function isLocked(string $path, int $type): bool {
return false;
}
- /**
- * {@inheritdoc}
- */
- public function acquireLock($path, $type) {
+ /**
+ * {@inheritdoc}
+ */
+ public function acquireLock(string $path, int $type) {
// do nothing
}
/**
- * {@inheritdoc}
+ * {@inheritdoc}
*/
- public function releaseLock($path, $type) {
+ public function releaseLock(string $path, int $type) {
// do nothing
}
@@ -63,7 +64,7 @@ class NoopLockingProvider implements ILockingProvider {
/**
* {@inheritdoc}
*/
- public function changeLock($path, $targetType) {
+ public function changeLock(string $path, int $targetType) {
// do nothing
}
}
diff --git a/lib/public/Lock/ILockingProvider.php b/lib/public/Lock/ILockingProvider.php
index 6fe9894b7b5..32e76c72531 100644
--- a/lib/public/Lock/ILockingProvider.php
+++ b/lib/public/Lock/ILockingProvider.php
@@ -1,4 +1,5 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
@@ -45,7 +46,7 @@ interface ILockingProvider {
* @return bool
* @since 8.1.0
*/
- public function isLocked($path, $type);
+ public function isLocked(string $path, int $type): bool;
/**
* @param string $path
@@ -53,14 +54,14 @@ interface ILockingProvider {
* @throws \OCP\Lock\LockedException
* @since 8.1.0
*/
- public function acquireLock($path, $type);
+ public function acquireLock(string $path, int $type);
/**
* @param string $path
* @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE
* @since 8.1.0
*/
- public function releaseLock($path, $type);
+ public function releaseLock(string $path, int $type);
/**
* Change the type of an existing lock
@@ -70,7 +71,7 @@ interface ILockingProvider {
* @throws \OCP\Lock\LockedException
* @since 8.1.0
*/
- public function changeLock($path, $targetType);
+ public function changeLock(string $path, int $targetType);
/**
* release all lock acquired by this instance
diff --git a/lib/public/Lock/LockedException.php b/lib/public/Lock/LockedException.php
index 5b5d88c18ca..1378f437c3a 100644
--- a/lib/public/Lock/LockedException.php
+++ b/lib/public/Lock/LockedException.php
@@ -1,4 +1,5 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
@@ -48,7 +49,7 @@ class LockedException extends \Exception {
*
* @since 8.1.0
*/
- public function __construct($path, \Exception $previous = null) {
+ public function __construct(string $path, \Exception $previous = null) {
parent::__construct('"' . $path . '" is locked', 0, $previous);
$this->path = $path;
}
@@ -57,7 +58,7 @@ class LockedException extends \Exception {
* @return string
* @since 8.1.0
*/
- public function getPath() {
+ public function getPath(): string {
return $this->path;
}
}