From ba7d221cffab4b42871e5926dd6c3e0a2d2b98dc Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 30 Apr 2015 14:16:09 +0200 Subject: [PATCH] allow getting the path from the lockedexception --- lib/private/lock/memcachelockingprovider.php | 4 ++-- lib/public/lock/lockedexception.php | 21 ++++++++++++++++++++ tests/lib/lock/lockingprovider.php | 19 ++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/lib/private/lock/memcachelockingprovider.php b/lib/private/lock/memcachelockingprovider.php index 43fdf70bc8..9c8c723546 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 4c0ca9b8c5..87f7164b7e 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 e7b8028dc9..08d879da8b 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()); + } + } }