aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Files
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/Files')
-rw-r--r--lib/private/Files/Cache/Cache.php30
1 files changed, 7 insertions, 23 deletions
diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php
index 8f0f962a3b7..a08c39ef302 100644
--- a/lib/private/Files/Cache/Cache.php
+++ b/lib/private/Files/Cache/Cache.php
@@ -46,6 +46,7 @@ use OC\Files\Search\SearchComparison;
use OC\Files\Search\SearchQuery;
use OC\Files\Storage\Wrapper\Encryption;
use OC\SystemConfig;
+use OCP\AppFramework\Db\TTransactional;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Cache\CacheEntryInsertedEvent;
@@ -81,6 +82,9 @@ class Cache implements ICache {
MoveFromCacheTrait::moveFromCache as moveFromCacheFallback;
}
+ use TTransactional;
+
+
/**
* @var array partial data for the cache
*/
@@ -715,29 +719,9 @@ class Cache implements ICache {
$query->set('encrypted', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT));
}
- // Retry transaction in case of RetryableException like deadlocks.
- // Retry up to 4 times because we should receive up to 4 concurrent requests from the frontend
- $retryLimit = 4;
- for ($i = 1; $i <= $retryLimit; $i++) {
- try {
- $this->connection->beginTransaction();
- $query->executeStatement();
- break;
- } catch (\OC\DatabaseException $e) {
- $this->connection->rollBack();
- throw $e;
- } catch (RetryableException $e) {
- // Simply throw if we already retried 4 times.
- if ($i === $retryLimit) {
- throw $e;
- }
-
- $this->connection->rollBack();
-
- // Sleep a bit to give some time to the other transaction to finish.
- usleep(100 * 1000 * $i);
- }
- }
+ // Retry the transaction in case of RetryableException like deadlocks.
+ // Retry up to 4 times because we should receive up to 4 concurrent requests from the frontend.
+ $this->atomicRetry(fn () => $query->executeStatement(), $this->connection, 4, 100 * 1000);
} else {
$this->connection->beginTransaction();
}