From: Robin Appelman Date: Fri, 28 Feb 2020 16:36:38 +0000 (+0100) Subject: restart transaction when cache insert fails due to duplicate X-Git-Tag: v19.0.0beta1~6^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d9184584e08def794a298966afde24f232b7abf5;p=nextcloud-server.git restart transaction when cache insert fails due to duplicate Signed-off-by: Robin Appelman --- diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php index e57124d6cbd..11f7eedea26 100644 --- a/lib/private/Files/Cache/Cache.php +++ b/lib/private/Files/Cache/Cache.php @@ -309,6 +309,10 @@ class Cache implements ICache { } } catch (UniqueConstraintViolationException $e) { // entry exists already + if ($this->connection->inTransaction()) { + $this->connection->commit(); + $this->connection->beginTransaction(); + } } // The file was created in the mean time @@ -611,8 +615,8 @@ class Cache implements ICache { $sourceId = $sourceData['fileid']; $newParentId = $this->getParentId($targetPath); - list($sourceStorageId, $sourcePath) = $sourceCache->getMoveInfo($sourcePath); - list($targetStorageId, $targetPath) = $this->getMoveInfo($targetPath); + [$sourceStorageId, $sourcePath] = $sourceCache->getMoveInfo($sourcePath); + [$targetStorageId, $targetPath] = $this->getMoveInfo($targetPath); if (is_null($sourceStorageId) || $sourceStorageId === false) { throw new \Exception('Invalid source storage id: ' . $sourceStorageId); @@ -882,7 +886,7 @@ class Cache implements ICache { ->whereParent($id); if ($row = $query->execute()->fetch()) { - list($sum, $min) = array_values($row); + [$sum, $min] = array_values($row); $sum = 0 + $sum; $min = 0 + $min; if ($min === -1) {