summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <vincent@nextcloud.com>2021-10-21 22:53:33 +0200
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2021-11-05 14:06:18 +0000
commit2421282497840545c3cc912bb268f4567a77a64e (patch)
treef49d4a9257eef0f6d891f1479ace30d67f70474b
parent6e45663018afea1f227c0999afe0f8d3d30ae93f (diff)
downloadnextcloud-server-2421282497840545c3cc912bb268f4567a77a64e.tar.gz
nextcloud-server-2421282497840545c3cc912bb268f4567a77a64e.zip
Return false in hasUpdated when storage is not available
Technically, saying that a storage has no updates when it's not available is correct. This makes it possible to retrieve the cache entry for the mount point and also to list and remove unavailable federated shares. Signed-off-by: Vincent Petry <vincent@nextcloud.com>
-rw-r--r--lib/private/Files/Storage/Wrapper/Availability.php14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/private/Files/Storage/Wrapper/Availability.php b/lib/private/Files/Storage/Wrapper/Availability.php
index b6d1ba2178b..1b532e3ba04 100644
--- a/lib/private/Files/Storage/Wrapper/Availability.php
+++ b/lib/private/Files/Storage/Wrapper/Availability.php
@@ -379,11 +379,15 @@ class Availability extends Wrapper {
/** {@inheritdoc} */
public function hasUpdated($path, $time) {
- $this->checkAvailability();
+ if (!$this->isAvailable()) {
+ return false;
+ }
try {
return parent::hasUpdated($path, $time);
} catch (StorageNotAvailableException $e) {
- $this->setUnavailable($e);
+ // set unavailable but don't rethrow
+ $this->setUnavailable(null);
+ return false;
}
}
@@ -449,7 +453,7 @@ class Availability extends Wrapper {
/**
* @throws StorageNotAvailableException
*/
- protected function setUnavailable(StorageNotAvailableException $e) {
+ protected function setUnavailable(?StorageNotAvailableException $e) {
$delay = self::RECHECK_TTL_SEC;
if ($e instanceof StorageAuthException) {
$delay = max(
@@ -459,7 +463,9 @@ class Availability extends Wrapper {
);
}
$this->getStorageCache()->setAvailability(false, $delay);
- throw $e;
+ if ($e !== null) {
+ throw $e;
+ }
}