From 89404299761c8f294e5cdbdc2f72c1b144be0ce0 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 1 Dec 2015 12:41:48 +0100 Subject: [PATCH] log duplicates --- lib/private/files/config/usermountcache.php | 19 +++++++++++++++++-- lib/private/server.php | 2 +- tests/lib/files/config/usermountcache.php | 3 ++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/private/files/config/usermountcache.php b/lib/private/files/config/usermountcache.php index af4fe6488d4..444c59bb603 100644 --- a/lib/private/files/config/usermountcache.php +++ b/lib/private/files/config/usermountcache.php @@ -21,11 +21,13 @@ namespace OC\Files\Config; +use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use OCP\Files\Config\ICachedMountInfo; use OCP\Files\Config\IUserMountCache; use OCP\Files\Mount\IMountPoint; use OCP\ICache; use OCP\IDBConnection; +use OCP\ILogger; use OCP\IUser; use OCP\IUserManager; @@ -43,15 +45,22 @@ class UserMountCache implements IUserMountCache { /** @var ICachedMountInfo[][] [$userId => [$cachedMountInfo, ....], ...] */ private $mountsForUsers = []; + /** + * @var ILogger + */ + private $logger; + /** * UserMountCache constructor. * * @param IDBConnection $connection * @param IUserManager $userManager + * @param ILogger $logger */ - public function __construct(IDBConnection $connection, IUserManager $userManager) { + public function __construct(IDBConnection $connection, IUserManager $userManager, ILogger $logger) { $this->connection = $connection; $this->userManager = $userManager; + $this->logger = $logger; } public function registerMounts(IUser $user, array $mounts) { @@ -108,7 +117,13 @@ class UserMountCache implements IUserMountCache { ':user' => $mount->getUser()->getUID(), ':mount' => $mount->getMountPoint() ]); - $query->execute(); + try { + $query->execute(); + } catch (UniqueConstraintViolationException $e) { + // seems to mainly happen in tests + $this->logger->error('Duplicate entry while inserting mount'); + $this->logger->logException($e); + } } private function removeFromCache(ICachedMountInfo $mount) { diff --git a/lib/private/server.php b/lib/private/server.php index 634de4ab1aa..e3a303b84eb 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -407,7 +407,7 @@ class Server extends ServerContainer implements IServerContainer { }); $this->registerService('MountConfigManager', function (Server $c) { $loader = \OC\Files\Filesystem::getLoader(); - $mountCache = new UserMountCache($c->getDatabaseConnection(), $c->getUserManager()); + $mountCache = new UserMountCache($c->getDatabaseConnection(), $c->getUserManager(), $c->getLogger()); return new \OC\Files\Config\MountProviderCollection($loader, $mountCache); }); $this->registerService('IniWrapper', function ($c) { diff --git a/tests/lib/files/config/usermountcache.php b/tests/lib/files/config/usermountcache.php index bee13adc8c8..3d147fbc7a9 100644 --- a/tests/lib/files/config/usermountcache.php +++ b/tests/lib/files/config/usermountcache.php @@ -13,6 +13,7 @@ use OC\Files\Storage\Temporary; use OC\User\Manager; use OCP\IDBConnection; use OCP\IUserManager; +use Test\NullLogger; use Test\TestCase; use Test\Util\User\Dummy; @@ -42,7 +43,7 @@ class UserMountCache extends TestCase { $userBackend->createUser('u1', ''); $userBackend->createUser('u2', ''); $this->userManager->registerBackend($userBackend); - $this->cache = new \OC\Files\Config\UserMountCache($this->connection, $this->userManager); + $this->cache = new \OC\Files\Config\UserMountCache($this->connection, $this->userManager, new NullLogger()); } public function tearDown() {