Merge pull request #37709 from nextcloud/bugfix/deadlock

This commit is contained in:
Julius Härtl 2023-05-13 13:13:04 +02:00 committed by GitHub
commit e18f97fc95
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 2 deletions

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

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 ]);