diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2014-06-04 20:11:54 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2014-06-04 20:11:54 +0200 |
commit | ec7225da66c6b9c5e231d93f26a9a39a4e049c91 (patch) | |
tree | e6dd4287102de5173762eb8232175e0fd2240258 /lib/private/files/storage/wrapper | |
parent | 7a20d22daad49653090f52d79a5f424a220f95f6 (diff) | |
download | nextcloud-server-ec7225da66c6b9c5e231d93f26a9a39a4e049c91.tar.gz nextcloud-server-ec7225da66c6b9c5e231d93f26a9a39a4e049c91.zip |
remove file locking - code will continue to live in it's own app
Diffstat (limited to 'lib/private/files/storage/wrapper')
-rw-r--r-- | lib/private/files/storage/wrapper/lockingwrapper.php | 182 |
1 files changed, 0 insertions, 182 deletions
diff --git a/lib/private/files/storage/wrapper/lockingwrapper.php b/lib/private/files/storage/wrapper/lockingwrapper.php deleted file mode 100644 index b785046bc3c..00000000000 --- a/lib/private/files/storage/wrapper/lockingwrapper.php +++ /dev/null @@ -1,182 +0,0 @@ -<?php - -/** - * Copyright (c) 2013 ownCloud, Inc. - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace OC\Files\Storage\Wrapper; - -use OC\Files\Filesystem; -use OC\Files\Lock; - -/** - * Class LockingWrapper - * A Storage Wrapper used to lock files at the system level - * @package OC\Files\Storage\Wrapper - * - * Notes: Does the $locks array need to be global to all LockingWrapper instances, such as in the case of two paths - * that point to the same physical file? Otherwise accessing the file from a different path the second time would show - * the file as locked, even though this process is the one locking it. - */ -class LockingWrapper extends Wrapper { - - /** @var \OCP\Files\Lock[] $locks Holds an array of lock instances indexed by path for this storage */ - protected $locks = array(); - - /** - * Acquire a lock on a file - * @param string $path Path to file, relative to this storage - * @param integer $lockType A Lock class constant, Lock::READ/Lock::WRITE - * @param null|resource $existingHandle An existing file handle from an fopen() - * @return bool|\OCP\Files\Lock Lock instance on success, false on failure - */ - protected function getLock($path, $lockType, $existingHandle = null){ - $path = Filesystem::normalizePath($this->storage->getLocalFile($path)); - if(!isset($this->locks[$path])) { - $this->locks[$path] = new Lock($path); - } - $this->locks[$path]->addLock($lockType, $existingHandle); - return $this->locks[$path]; - } - - /** - * Release an existing lock - * @param string $path Path to file, relative to this storage - * @param integer $lockType The type of lock to release - * @param bool $releaseAll If true, release all outstanding locks - * @return bool true on success, false on failure - */ - protected function releaseLock($path, $lockType, $releaseAll = false){ - $path = Filesystem::normalizePath($this->storage->getLocalFile($path)); - if(isset($this->locks[$path])) { - if($releaseAll) { - return $this->locks[$path]->releaseAll(); - } - else { - return $this->locks[$path]->release($lockType); - } - } - return true; - } - - /** - * see http://php.net/manual/en/function.file_get_contents.php - * @param string $path - * @return string - * @throws \Exception - */ - public function file_get_contents($path) { - try { - $this->getLock($path, Lock::READ); - $result = $this->storage->file_get_contents($path); - } - catch(\Exception $originalException) { - // Need to release the lock before more operations happen in upstream exception handlers - $this->releaseLock($path, Lock::READ); - throw $originalException; - } - $this->releaseLock($path, Lock::READ); - return $result; - } - - public function file_put_contents($path, $data) { - try { - $this->getLock($path, Lock::WRITE); - $result = $this->storage->file_put_contents($path, $data); - } - catch(\Exception $originalException) { - // Release lock, throw original exception - $this->releaseLock($path, Lock::WRITE); - throw $originalException; - } - $this->releaseLock($path, Lock::WRITE); - return $result; - } - - - public function copy($path1, $path2) { - try { - $this->getLock($path1, Lock::READ); - $this->getLock($path2, Lock::WRITE); - $result = $this->storage->copy($path1, $path2); - } - catch(\Exception $originalException) { - // Release locks, throw original exception - $this->releaseLock($path1, Lock::READ); - $this->releaseLock($path2, Lock::WRITE); - throw $originalException; - } - $this->releaseLock($path1, Lock::READ); - $this->releaseLock($path2, Lock::WRITE); - return $result; - } - - public function rename($path1, $path2) { - try { - $this->getLock($path1, Lock::READ); - $this->getLock($path2, Lock::WRITE); - $result = $this->storage->rename($path1, $path2); - } - catch(\Exception $originalException) { - // Release locks, throw original exception - $this->releaseLock($path1, Lock::READ); - $this->releaseLock($path2, Lock::WRITE); - throw $originalException; - } - $this->releaseLock($path1, Lock::READ); - $this->releaseLock($path2, Lock::WRITE); - return $result; - } - - public function fopen($path, $mode) { - $lockType = Lock::READ; - switch ($mode) { - case 'r+': - case 'rb+': - case 'w+': - case 'wb+': - case 'x+': - case 'xb+': - case 'a+': - case 'ab+': - case 'c+': - case 'w': - case 'wb': - case 'x': - case 'xb': - case 'a': - case 'ab': - case 'c': - $lockType = Lock::WRITE; - break; - } - // The handle for $this->fopen() is used outside of this class, so the handle/lock can't be closed - // Instead, it will be closed when the request goes out of scope - // Storage doesn't have an fclose() - if($result = $this->storage->fopen($path, $mode)) { - $this->getLock($path, $lockType, $result); - } - return $result; - } - - public function unlink($path) { - try { - if (\OC\Files\Filesystem::is_file($path)) { - $this->getLock($path, Lock::WRITE); - } - $result = $this->storage->unlink($path); - } - catch(\Exception $originalException) { - // Need to release the lock before more operations happen in upstream exception handlers - $this->releaseLock($path, Lock::WRITE); - throw $originalException; - } - $this->releaseLock($path, Lock::WRITE); - return $result; - } - - -}
\ No newline at end of file |