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;
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);
}
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 {
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;
}
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 {
/**
* @throws \Exception from openstack lib when something goes wrong
*/
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();