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>
This commit is contained in:
Arthur Schiwon 2020-03-12 12:45:52 +01:00
parent e8ddb4718c
commit cc31c38277
No known key found for this signature in database
GPG Key ID: 7424F1874854DF23
3 changed files with 29 additions and 4 deletions

View File

@ -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

View File

@ -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;

View File

@ -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