diff options
author | Morris Jobke <hey@morrisjobke.de> | 2018-11-20 09:49:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-20 09:49:57 +0100 |
commit | 8e65f08617d77d29280e9a5ab1d6d8a2fed75f36 (patch) | |
tree | 93706c11a430c7c30aa0fad88b84c4e5eaf6ca45 /lib | |
parent | 2be8930cdf254a923b5c44cbff680c7828108b6d (diff) | |
parent | cef8eadf2a69a38475a67c575957674ae41c136d (diff) | |
download | nextcloud-server-8e65f08617d77d29280e9a5ab1d6d8a2fed75f36.tar.gz nextcloud-server-8e65f08617d77d29280e9a5ab1d6d8a2fed75f36.zip |
Merge pull request #12500 from nextcloud/swift-object-not-found
forward object not found error in swift as dav 404
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Files/ObjectStore/ObjectStoreStorage.php | 9 | ||||
-rw-r--r-- | lib/private/Files/ObjectStore/Swift.php | 21 | ||||
-rw-r--r-- | lib/public/Files/ObjectStore/IObjectStore.php | 3 |
3 files changed, 27 insertions, 6 deletions
diff --git a/lib/private/Files/ObjectStore/ObjectStoreStorage.php b/lib/private/Files/ObjectStore/ObjectStoreStorage.php index 71acd27783c..26db551a384 100644 --- a/lib/private/Files/ObjectStore/ObjectStoreStorage.php +++ b/lib/private/Files/ObjectStore/ObjectStoreStorage.php @@ -29,6 +29,7 @@ use Icewind\Streams\CallbackWrapper; use Icewind\Streams\IteratorDirectory; use OC\Files\Cache\CacheEntry; use OC\Files\Stream\CountReadStream; +use OCP\Files\NotFoundException; use OCP\Files\ObjectStore\IObjectStore; class ObjectStoreStorage extends \OC\Files\Storage\Common { @@ -275,10 +276,16 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { if (is_array($stat)) { try { return $this->objectStore->readObject($this->getURN($stat['fileid'])); + } catch (NotFoundException $e) { + $this->logger->logException($e, [ + 'app' => 'objectstore', + 'message' => 'Could not get object ' . $this->getURN($stat['fileid']) . ' for file ' . $path, + ]); + throw $e; } catch (\Exception $ex) { $this->logger->logException($ex, [ 'app' => 'objectstore', - 'message' => 'Count not get object ' . $this->getURN($stat['fileid']) . ' for file ' . $path, + 'message' => 'Could not get object ' . $this->getURN($stat['fileid']) . ' for file ' . $path, ]); return false; } diff --git a/lib/private/Files/ObjectStore/Swift.php b/lib/private/Files/ObjectStore/Swift.php index 6bb01506c4c..e379e54d018 100644 --- a/lib/private/Files/ObjectStore/Swift.php +++ b/lib/private/Files/ObjectStore/Swift.php @@ -27,8 +27,10 @@ namespace OC\Files\ObjectStore; use function GuzzleHttp\Psr7\stream_for; use Icewind\Streams\RetryWrapper; +use OCP\Files\NotFoundException; use OCP\Files\ObjectStore\IObjectStore; use OCP\Files\StorageAuthException; +use OpenStack\Common\Error\BadResponseError; class Swift implements IObjectStore { /** @@ -84,13 +86,22 @@ class Swift implements IObjectStore { * @param string $urn the unified resource name used to identify the object * @return resource stream with the read data * @throws \Exception from openstack lib when something goes wrong + * @throws NotFoundException if file does not exist */ public function readObject($urn) { - $object = $this->getContainer()->getObject($urn); - - // we need to keep a reference to objectContent or - // the stream will be closed before we can do anything with it - $objectContent = $object->download(); + try { + $object = $this->getContainer()->getObject($urn); + + // we need to keep a reference to objectContent or + // the stream will be closed before we can do anything with it + $objectContent = $object->download(); + } catch (BadResponseError $e) { + if ($e->getResponse()->getStatusCode() === 404) { + throw new NotFoundException("object $urn not found in object store"); + } else { + throw $e; + } + } $objectContent->rewind(); $stream = $objectContent->detach(); diff --git a/lib/public/Files/ObjectStore/IObjectStore.php b/lib/public/Files/ObjectStore/IObjectStore.php index 8e9df5a55a3..628fd5852da 100644 --- a/lib/public/Files/ObjectStore/IObjectStore.php +++ b/lib/public/Files/ObjectStore/IObjectStore.php @@ -23,6 +23,8 @@ */ namespace OCP\Files\ObjectStore; +use OCP\Files\NotFoundException; + /** * Interface IObjectStore * @@ -41,6 +43,7 @@ interface IObjectStore { * @param string $urn the unified resource name used to identify the object * @return resource stream with the read data * @throws \Exception when something goes wrong, message will be logged + * @throws NotFoundException if file does not exist * @since 7.0.0 */ public function readObject($urn); |