allow getting the path from the lockedexception
This commit is contained in:
parent
8119b8b040
commit
ba7d221cff
|
@ -62,12 +62,12 @@ class MemcacheLockingProvider implements ILockingProvider {
|
||||||
public function acquireLock($path, $type) {
|
public function acquireLock($path, $type) {
|
||||||
if ($type === self::LOCK_SHARED) {
|
if ($type === self::LOCK_SHARED) {
|
||||||
if (!$this->memcache->inc($path)) {
|
if (!$this->memcache->inc($path)) {
|
||||||
throw new LockedException($path . ' is locked');
|
throw new LockedException($path);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->memcache->add($path, 0);
|
$this->memcache->add($path, 0);
|
||||||
if (!$this->memcache->cas($path, 0, 'exclusive')) {
|
if (!$this->memcache->cas($path, 0, 'exclusive')) {
|
||||||
throw new LockedException($path . ' is locked');
|
throw new LockedException($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,4 +22,25 @@
|
||||||
namespace OCP\Lock;
|
namespace OCP\Lock;
|
||||||
|
|
||||||
class LockedException extends \Exception {
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
namespace Test\Lock;
|
namespace Test\Lock;
|
||||||
|
|
||||||
use OCP\Lock\ILockingProvider;
|
use OCP\Lock\ILockingProvider;
|
||||||
|
use OCP\Lock\LockedException;
|
||||||
use Test\TestCase;
|
use Test\TestCase;
|
||||||
|
|
||||||
abstract class LockingProvider extends 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->assertTrue($this->instance->isLocked('foo', ILockingProvider::LOCK_EXCLUSIVE));
|
||||||
$this->instance->acquireLock('foo', ILockingProvider::LOCK_SHARED);
|
$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());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue