From 59fd2885f23c7cb99b4cdab0a2de09e3cb22f61f Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 15 Mar 2016 15:24:26 +0100 Subject: [PATCH] Make DB locking detectable --- .gitignore | 1 + apps/testing/appinfo/routes.php | 1 + ...blocking.php => fakedblockingprovider.php} | 2 +- apps/testing/locking/provisioning.php | 21 +++++++++++++++---- 4 files changed, 20 insertions(+), 5 deletions(-) rename apps/testing/locking/{fakedblocking.php => fakedblockingprovider.php} (96%) diff --git a/.gitignore b/.gitignore index 73f57989a8da..e7ced4b393f2 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ !/apps/user_ldap !/apps/provisioning_api !/apps/systemtags +!/apps/testing !/apps/updatenotification /apps/files_external/3rdparty/irodsphp/PHPUnitTest /apps/files_external/3rdparty/irodsphp/web diff --git a/apps/testing/appinfo/routes.php b/apps/testing/appinfo/routes.php index 7b0f6678afa5..619daf40da9d 100644 --- a/apps/testing/appinfo/routes.php +++ b/apps/testing/appinfo/routes.php @@ -52,6 +52,7 @@ \OC::$server->getConfig(), \OC::$server->getRequest() ); +API::register('get', '/apps/testing/api/v1/lockprovisioning', [$locking, 'isLockingEnabled'], 'files_lockprovisioning', API::ADMIN_AUTH); API::register('get', '/apps/testing/api/v1/lockprovisioning/{type}/{user}', [$locking, 'isLocked'], 'files_lockprovisioning', API::ADMIN_AUTH); API::register('post', '/apps/testing/api/v1/lockprovisioning/{type}/{user}', [$locking, 'acquireLock'], 'files_lockprovisioning', API::ADMIN_AUTH); API::register('put', '/apps/testing/api/v1/lockprovisioning/{type}/{user}', [$locking, 'changeLock'], 'files_lockprovisioning', API::ADMIN_AUTH); diff --git a/apps/testing/locking/fakedblocking.php b/apps/testing/locking/fakedblockingprovider.php similarity index 96% rename from apps/testing/locking/fakedblocking.php rename to apps/testing/locking/fakedblockingprovider.php index 08f1f4e9eaa8..fd090e0e0756 100644 --- a/apps/testing/locking/fakedblocking.php +++ b/apps/testing/locking/fakedblockingprovider.php @@ -25,7 +25,7 @@ use OCP\IDBConnection; use OCP\ILogger; -class FakeDBLocking extends \OC\Lock\DBLockingProvider { +class FakeDBLockingProvider extends \OC\Lock\DBLockingProvider { // Lock for 10 hours just to be sure const TTL = 36000; diff --git a/apps/testing/locking/provisioning.php b/apps/testing/locking/provisioning.php index dae2730fda9a..55a1be0caee6 100644 --- a/apps/testing/locking/provisioning.php +++ b/apps/testing/locking/provisioning.php @@ -21,6 +21,8 @@ namespace OCA\Testing\Locking; +use OC\Lock\DBLockingProvider; +use OC\Lock\MemcacheLockingProvider; use OC\User\NoUserException; use OCP\AppFramework\Http; use OCP\Files\NotFoundException; @@ -61,12 +63,11 @@ public function __construct(ILockingProvider $lockingProvider, IDBConnection $co * @return ILockingProvider */ protected function getLockingProvider() { - return \OC::$server->query('OCA\Testing\Locking\FakeDBLocking'); - /* if ($this->lockingProvider instanceof DBLockingProvider) { - return \OC::$server->query('OCA\Testing\Locking\FakeDBLocking'); + return \OC::$server->query('OCA\Testing\Locking\FakeDBLockingProvider'); + } else { + throw new \RuntimeException('Lock provisioning is only possible using the DBLockingProvider'); } - */ } /** @@ -88,6 +89,18 @@ protected function getPath($parameters) { return 'files/' . md5($node->getStorage()->getId() . '::' . trim($node->getInternalPath(), '/')); } + /** + * @return \OC_OCS_Result + */ + public function isLockingEnabled() { + try { + $this->getLockingProvider(); + return new \OC_OCS_Result(null, 100); + } catch (\RuntimeException $e) { + return new \OC_OCS_Result(null, Http::STATUS_NOT_IMPLEMENTED, $e->getMessage()); + } + } + /** * @param array $parameters * @return \OC_OCS_Result