summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/Repair/RepairDavShares.php2
-rw-r--r--lib/private/User/Manager.php25
2 files changed, 25 insertions, 2 deletions
diff --git a/lib/private/Repair/RepairDavShares.php b/lib/private/Repair/RepairDavShares.php
index 64104c1e28a..8c53eaad43b 100644
--- a/lib/private/Repair/RepairDavShares.php
+++ b/lib/private/Repair/RepairDavShares.php
@@ -126,7 +126,7 @@ class RepairDavShares implements IRepairStep {
*/
public function run(IOutput $output) {
$versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0');
- if (version_compare($versionFromBeforeUpdate, '20.0.7', '<')
+ if (version_compare($versionFromBeforeUpdate, '20.0.8', '<')
&& $this->repairUnencodedGroupShares()
) {
$output->info('Repaired DAV group shares');
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php
index e447b0bfcf2..036d2703d35 100644
--- a/lib/private/User/Manager.php
+++ b/lib/private/User/Manager.php
@@ -38,6 +38,8 @@ use OC\HintException;
use OC\Hooks\PublicEmitter;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\EventDispatcher\IEventDispatcher;
+use OCP\ICache;
+use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IGroup;
use OCP\IUser;
@@ -84,14 +86,19 @@ class Manager extends PublicEmitter implements IUserManager {
/** @var EventDispatcherInterface */
private $dispatcher;
+ /** @var ICache */
+ private $cache;
+
/** @var IEventDispatcher */
private $eventDispatcher;
public function __construct(IConfig $config,
EventDispatcherInterface $oldDispatcher,
+ ICacheFactory $cacheFactory,
IEventDispatcher $eventDispatcher) {
$this->config = $config;
$this->dispatcher = $oldDispatcher;
+ $this->cache = $cacheFactory->createDistributed('user_backend_map');
$cachedUsers = &$this->cachedUsers;
$this->listen('\OC\User', 'postDelete', function ($user) use (&$cachedUsers) {
/** @var \OC\User\User $user */
@@ -150,8 +157,24 @@ class Manager extends PublicEmitter implements IUserManager {
if (isset($this->cachedUsers[$uid])) { //check the cache first to prevent having to loop over the backends
return $this->cachedUsers[$uid];
}
- foreach ($this->backends as $backend) {
+
+ $cachedBackend = $this->cache->get($uid);
+ if ($cachedBackend !== null && isset($this->backends[$cachedBackend])) {
+ // Cache has the info of the user backend already, so ask that one directly
+ $backend = $this->backends[$cachedBackend];
+ if ($backend->userExists($uid)) {
+ return $this->getUserObject($uid, $backend);
+ }
+ }
+
+ foreach ($this->backends as $i => $backend) {
+ if ($i === $cachedBackend) {
+ // Tried that one already
+ continue;
+ }
+
if ($backend->userExists($uid)) {
+ $this->cache->set($uid, $i, 300);
return $this->getUserObject($uid, $backend);
}
}