forward object not found error in switch as dav 404

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2018-11-16 20:21:21 +01:00 committed by Morris Jobke
parent a4d81ba164
commit 35251928d5
No known key found for this signature in database
GPG Key ID: FE03C3A163FEDE68
3 changed files with 26 additions and 5 deletions

View File

@ -50,6 +50,7 @@ use OCP\Files\ForbiddenException;
use OCP\Files\InvalidContentException;
use OCP\Files\InvalidPathException;
use OCP\Files\LockNotAcquiredException;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OCP\Files\Storage;
use OCP\Files\StorageNotAvailableException;
@ -592,6 +593,9 @@ class File extends Node implements IFile {
if ($e instanceof StorageNotAvailableException) {
throw new ServiceUnavailable('Failed to write file contents: ' . $e->getMessage(), 0, $e);
}
if ($e instanceof NotFoundException) {
throw new NotFound('File not found: ' . $e->getMessage(), 0, $e);
}
throw new \Sabre\DAV\Exception($e->getMessage(), 0, $e);
}

View File

@ -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;
}

View File

@ -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 {
/**
@ -86,11 +88,19 @@ class Swift implements IObjectStore {
* @throws \Exception from openstack lib when something goes wrong
*/
public function readObject($urn) {
$object = $this->getContainer()->getObject($urn);
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();
// 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();