]> source.dussan.org Git - nextcloud-server.git/commitdiff
split locking related methods to their own interface
authorRobin Appelman <icewind@owncloud.com>
Mon, 4 Jan 2016 13:07:03 +0000 (14:07 +0100)
committerRobin Appelman <icewind@owncloud.com>
Thu, 14 Jan 2016 11:54:42 +0000 (12:54 +0100)
lib/private/files/storage/common.php
lib/public/files/storage/ilockingstorage.php [new file with mode: 0644]
lib/public/files/storage/istorage.php

index c27f9d759f1a6324b2f8d57dc76a182d411e5ac3..95bb3f74ba723d2fae5c10a08ee62e59deb1b332 100644 (file)
@@ -46,6 +46,7 @@ use OCP\Files\FileNameTooLongException;
 use OCP\Files\InvalidCharacterInPathException;
 use OCP\Files\InvalidPathException;
 use OCP\Files\ReservedWordException;
+use OCP\Files\Storage\ILockingStorage;
 use OCP\Lock\ILockingProvider;
 
 /**
@@ -59,7 +60,7 @@ use OCP\Lock\ILockingProvider;
  * Some \OC\Files\Storage\Common methods call functions which are first defined
  * in classes which extend it, e.g. $this->stat() .
  */
-abstract class Common implements Storage {
+abstract class Common implements Storage, ILockingStorage {
 
        use LocalTempFileTrait;
 
diff --git a/lib/public/files/storage/ilockingstorage.php b/lib/public/files/storage/ilockingstorage.php
new file mode 100644 (file)
index 0000000..32cc32f
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCP\Files\Storage;
+
+use OCP\Lock\ILockingProvider;
+
+/**
+ * Storage backends that require explicit locking
+ *
+ * Storage backends implementing this interface do not need to implement their own locking implementation but should use the provided lockingprovider instead
+ * The implementation of the locking methods only need to map internal storage paths to "lock keys"
+ *
+ * @since 9.0.0
+ */
+interface ILockingStorage {
+       /**
+        * @param string $path The path of the file to acquire the lock for
+        * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE
+        * @param \OCP\Lock\ILockingProvider $provider
+        * @throws \OCP\Lock\LockedException
+        * @since 9.0.0
+        */
+       public function acquireLock($path, $type, ILockingProvider $provider);
+
+       /**
+        * @param string $path The path of the file to acquire the lock for
+        * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE
+        * @param \OCP\Lock\ILockingProvider $provider
+        * @since 9.0.0
+        */
+       public function releaseLock($path, $type, ILockingProvider $provider);
+
+       /**
+        * @param string $path The path of the file to change the lock for
+        * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE
+        * @param \OCP\Lock\ILockingProvider $provider
+        * @throws \OCP\Lock\LockedException
+        * @since 9.0.0
+        */
+       public function changeLock($path, $type, ILockingProvider $provider);
+}
index 377bb96ea2b7de1280f4ae0fbf9db60b2564fcaf..4bc5e3536dcd8578b7878a71dd5f73adfce5b047 100644 (file)
@@ -40,7 +40,6 @@ use OCP\Files\Cache\IScanner;
 use OCP\Files\Cache\IUpdater;
 use OCP\Files\Cache\IWatcher;
 use OCP\Files\InvalidPathException;
-use OCP\Lock\ILockingProvider;
 
 /**
  * Provide a common interface to all different storage options
@@ -425,32 +424,6 @@ interface IStorage {
         */
        public function moveFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath);
 
-       /**
-        * @param string $path The path of the file to acquire the lock for
-        * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE
-        * @param \OCP\Lock\ILockingProvider $provider
-        * @throws \OCP\Lock\LockedException
-        * @since 9.0.0
-        */
-       public function acquireLock($path, $type, ILockingProvider $provider);
-
-       /**
-        * @param string $path The path of the file to acquire the lock for
-        * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE
-        * @param \OCP\Lock\ILockingProvider $provider
-        * @since 9.0.0
-        */
-       public function releaseLock($path, $type, ILockingProvider $provider);
-
-       /**
-        * @param string $path The path of the file to change the lock for
-        * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE
-        * @param \OCP\Lock\ILockingProvider $provider
-        * @throws \OCP\Lock\LockedException
-        * @since 9.0.0
-        */
-       public function changeLock($path, $type, ILockingProvider $provider);
-
        /**
         * Test a storage for availability
         *