summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2015-04-30 14:16:09 +0200
committerRobin Appelman <icewind@owncloud.com>2015-04-30 14:48:42 +0200
commitba7d221cffab4b42871e5926dd6c3e0a2d2b98dc (patch)
tree7036af4364af0e32f80774f6ad226d4762609c46
parent8119b8b0403b83970f329a8512de980580b013d6 (diff)
downloadnextcloud-server-ba7d221cffab4b42871e5926dd6c3e0a2d2b98dc.tar.gz
nextcloud-server-ba7d221cffab4b42871e5926dd6c3e0a2d2b98dc.zip
allow getting the path from the lockedexception
-rw-r--r--lib/private/lock/memcachelockingprovider.php4
-rw-r--r--lib/public/lock/lockedexception.php21
-rw-r--r--tests/lib/lock/lockingprovider.php19
3 files changed, 42 insertions, 2 deletions
diff --git a/lib/private/lock/memcachelockingprovider.php b/lib/private/lock/memcachelockingprovider.php
index 43fdf70bc8b..9c8c7235462 100644
--- a/lib/private/lock/memcachelockingprovider.php
+++ b/lib/private/lock/memcachelockingprovider.php
@@ -62,12 +62,12 @@ class MemcacheLockingProvider implements ILockingProvider {
public function acquireLock($path, $type) {
if ($type === self::LOCK_SHARED) {
if (!$this->memcache->inc($path)) {
- throw new LockedException($path . ' is locked');
+ throw new LockedException($path);
}
} else {
$this->memcache->add($path, 0);
if (!$this->memcache->cas($path, 0, 'exclusive')) {
- throw new LockedException($path . ' is locked');
+ throw new LockedException($path);
}
}
}
diff --git a/lib/public/lock/lockedexception.php b/lib/public/lock/lockedexception.php
index 4c0ca9b8c5b..87f7164b7e0 100644
--- a/lib/public/lock/lockedexception.php
+++ b/lib/public/lock/lockedexception.php
@@ -22,4 +22,25 @@
namespace OCP\Lock;
class LockedException extends \Exception {
+ /**
+ * @var string
+ */
+ private $path;
+
+ /**
+ * LockedException constructor.
+ *
+ * @param string $path
+ */
+ public function __construct($path) {
+ parent::__construct($path . ' is locked');
+ $this->path = $path;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPath() {
+ return $this->path;
+ }
}
diff --git a/tests/lib/lock/lockingprovider.php b/tests/lib/lock/lockingprovider.php
index e7b8028dc94..08d879da8bb 100644
--- a/tests/lib/lock/lockingprovider.php
+++ b/tests/lib/lock/lockingprovider.php
@@ -22,6 +22,7 @@
namespace Test\Lock;
use OCP\Lock\ILockingProvider;
+use OCP\Lock\LockedException;
use Test\TestCase;
abstract class LockingProvider extends TestCase {
@@ -115,4 +116,22 @@ abstract class LockingProvider extends TestCase {
$this->assertTrue($this->instance->isLocked('foo', ILockingProvider::LOCK_EXCLUSIVE));
$this->instance->acquireLock('foo', ILockingProvider::LOCK_SHARED);
}
+
+ public function testLockedExceptionHasPathForShared() {
+ try {
+ $this->testSharedLockAfterExclusive();
+ $this->fail('Expected locked exception');
+ } catch (LockedException $e) {
+ $this->assertEquals('foo', $e->getPath());
+ }
+ }
+
+ public function testLockedExceptionHasPathForExclusive() {
+ try {
+ $this->testExclusiveLockAfterShared();
+ $this->fail('Expected locked exception');
+ } catch (LockedException $e) {
+ $this->assertEquals('foo', $e->getPath());
+ }
+ }
}