Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2020-03-12 14:45:52 +0300
committerArthur Schiwon <blizzz@arthur-schiwon.de>2020-04-17 13:38:52 +0300
commitcc31c3827749e2eeb3437648226413742ffe7dcd (patch)
treee9a3aee401957e992d59285467305f0074490a4c /apps/user_ldap
parente8ddb4718cee824af3bb24cae247fe64d043a96a (diff)
don't circulate with only one backend
- saves some overhead costs - in some occasions saves LDAP requests Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'apps/user_ldap')
-rw-r--r--apps/user_ldap/lib/Group_Proxy.php8
-rw-r--r--apps/user_ldap/lib/Proxy.php17
-rw-r--r--apps/user_ldap/lib/User_Proxy.php8
3 files changed, 29 insertions, 4 deletions
diff --git a/apps/user_ldap/lib/Group_Proxy.php b/apps/user_ldap/lib/Group_Proxy.php
index 3bd0cc4c400..a586906df8e 100644
--- a/apps/user_ldap/lib/Group_Proxy.php
+++ b/apps/user_ldap/lib/Group_Proxy.php
@@ -60,7 +60,9 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet
$cacheKey = $this->getGroupCacheKey($gid);
foreach ($this->backends as $configPrefix => $backend) {
if ($result = call_user_func_array([$backend, $method], $parameters)) {
- $this->writeToCache($cacheKey, $configPrefix);
+ if(!$this->isSingleBackend()) {
+ $this->writeToCache($cacheKey, $configPrefix);
+ }
return $result;
}
}
@@ -99,6 +101,10 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet
return false;
}
+ protected function activeBackends(): int {
+ return count($this->backends);
+ }
+
/**
* is user in group?
* @param string $uid uid of the user
diff --git a/apps/user_ldap/lib/Proxy.php b/apps/user_ldap/lib/Proxy.php
index 3cf55f8cd58..09f4ac407d8 100644
--- a/apps/user_ldap/lib/Proxy.php
+++ b/apps/user_ldap/lib/Proxy.php
@@ -40,6 +40,8 @@ use OCA\User_LDAP\User\Manager;
abstract class Proxy {
private static $accesses = [];
private $ldap = null;
+ /** @var bool */
+ private $isSingleBackend;
/** @var \OCP\ICache|null */
private $cache;
@@ -139,6 +141,15 @@ abstract class Proxy {
*/
abstract public function getLDAPAccess($id);
+ abstract protected function activeBackends(): int;
+
+ protected function isSingleBackend(): bool{
+ if($this->isSingleBackend === null) {
+ $this->isSingleBackend = $this->activeBackends() === 1;
+ }
+ return $this->isSingleBackend;
+ }
+
/**
* Takes care of the request to the User backend
* @param string $id
@@ -148,8 +159,10 @@ abstract class Proxy {
* @return mixed, the result of the specified method
*/
protected function handleRequest($id, $method, $parameters, $passOnWhen = false) {
- $result = $this->callOnLastSeenOn($id, $method, $parameters, $passOnWhen);
- if ($result === $passOnWhen) {
+ if (!$this->isSingleBackend()) {
+ $result = $this->callOnLastSeenOn($id, $method, $parameters, $passOnWhen);
+ }
+ if (!isset($result) || $result === $passOnWhen) {
$result = $this->walkBackends($id, $method, $parameters);
}
return $result;
diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php
index e9ff92d03eb..d4eba412b40 100644
--- a/apps/user_ldap/lib/User_Proxy.php
+++ b/apps/user_ldap/lib/User_Proxy.php
@@ -86,7 +86,9 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface,
$instance = $this->getAccess($configPrefix);
}
if ($result = call_user_func_array([$instance, $method], $parameters)) {
- $this->writeToCache($cacheKey, $configPrefix);
+ if(!$this->isSingleBackend()) {
+ $this->writeToCache($cacheKey, $configPrefix);
+ }
return $result;
}
}
@@ -130,6 +132,10 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface,
return false;
}
+ protected function activeBackends(): int {
+ return count($this->backends);
+ }
+
/**
* Check if backend implements actions
* @param int $actions bitwise-or'ed actions