Merge pull request #7387 from nextcloud/swift-retry

add retry wrapper when reading files from swift
This commit is contained in:
Roeland Jago Douma 2017-12-06 08:28:20 +01:00 committed by GitHub
commit cde58610b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 2 deletions

View File

@ -43,6 +43,7 @@ use Guzzle\Http\Url;
use Guzzle\Http\Exception\ClientErrorResponseException; use Guzzle\Http\Exception\ClientErrorResponseException;
use Icewind\Streams\CallbackWrapper; use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory; use Icewind\Streams\IteratorDirectory;
use Icewind\Streams\RetryWrapper;
use OpenCloud; use OpenCloud;
use OpenCloud\Common\Exceptions; use OpenCloud\Common\Exceptions;
use OpenCloud\OpenStack; use OpenCloud\OpenStack;
@ -389,7 +390,7 @@ class Swift extends \OC\Files\Storage\Common {
stream_context_set_option($stream, 'swift','content', $streamInterface); stream_context_set_option($stream, 'swift','content', $streamInterface);
if(!strrpos($streamInterface if(!strrpos($streamInterface
->getMetaData('wrapper_data')[0], '404 Not Found')) { ->getMetaData('wrapper_data')[0], '404 Not Found')) {
return $stream; return RetryWrapper::wrap($stream);
} }
return false; return false;
} catch (\Guzzle\Http\Exception\BadResponseException $e) { } catch (\Guzzle\Http\Exception\BadResponseException $e) {

View File

@ -26,6 +26,7 @@
namespace OC\Files\ObjectStore; namespace OC\Files\ObjectStore;
use Guzzle\Http\Exception\ClientErrorResponseException; use Guzzle\Http\Exception\ClientErrorResponseException;
use Icewind\Streams\RetryWrapper;
use OCP\Files\ObjectStore\IObjectStore; use OCP\Files\ObjectStore\IObjectStore;
use OCP\Files\StorageAuthException; use OCP\Files\StorageAuthException;
use OCP\Files\StorageNotAvailableException; use OCP\Files\StorageNotAvailableException;
@ -264,7 +265,7 @@ class Swift implements IObjectStore {
// save the object content in the context of the stream to prevent it being gc'd until the stream is closed // save the object content in the context of the stream to prevent it being gc'd until the stream is closed
stream_context_set_option($stream, 'swift', 'content', $objectContent); stream_context_set_option($stream, 'swift', 'content', $objectContent);
return $stream; RetryWrapper::wrap($stream);
} }
/** /**