Browse Source

fix: Check for wrapped retriable exceptions

Signed-off-by: Julius Härtl <jus@bitgrid.net>
tags/v27.0.0rc1
Julius Härtl 1 year ago
parent
commit
3bdd770129
No account linked to committer's email address

+ 5
- 0
lib/private/DB/Exceptions/DbalException.php View File

@@ -37,6 +37,7 @@ use Doctrine\DBAL\Exception\InvalidArgumentException;
use Doctrine\DBAL\Exception\InvalidFieldNameException;
use Doctrine\DBAL\Exception\NonUniqueFieldNameException;
use Doctrine\DBAL\Exception\NotNullConstraintViolationException;
use Doctrine\DBAL\Exception\RetryableException;
use Doctrine\DBAL\Exception\ServerException;
use Doctrine\DBAL\Exception\SyntaxErrorException;
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
@@ -74,6 +75,10 @@ class DbalException extends Exception {
);
}

public function isRetryable(): bool {
return $this->original instanceof RetryableException;
}

public function getReason(): ?int {
/**
* Constraint errors

+ 6
- 2
lib/private/Files/Cache/Propagator.php View File

@@ -24,7 +24,7 @@

namespace OC\Files\Cache;

use Doctrine\DBAL\Exception\RetryableException;
use OC\DB\Exceptions\DbalException;
use OC\Files\Storage\Wrapper\Encryption;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Files\Cache\IPropagator;
@@ -136,7 +136,11 @@ class Propagator implements IPropagator {
try {
$builder->executeStatement();
break;
} catch (RetryableException $e) {
} catch (DbalException $e) {
if (!$e->isRetryable()) {
throw $e;
}

/** @var LoggerInterface $loggerInterface */
$loggerInterface = \OCP\Server::get(LoggerInterface::class);
$loggerInterface->warning('Retrying propagation query after retryable exception.', [ 'exception' => $e ]);

Loading…
Cancel
Save