summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-11-20 09:49:57 +0100
committerGitHub <noreply@github.com>2018-11-20 09:49:57 +0100
commit8e65f08617d77d29280e9a5ab1d6d8a2fed75f36 (patch)
tree93706c11a430c7c30aa0fad88b84c4e5eaf6ca45 /lib
parent2be8930cdf254a923b5c44cbff680c7828108b6d (diff)
parentcef8eadf2a69a38475a67c575957674ae41c136d (diff)
downloadnextcloud-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.php9
-rw-r--r--lib/private/Files/ObjectStore/Swift.php21
-rw-r--r--lib/public/Files/ObjectStore/IObjectStore.php3
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);