]> source.dussan.org Git - nextcloud-server.git/commitdiff
perf: Only query the db once for trusted servers 42033/head
authorJulius Härtl <jus@bitgrid.net>
Tue, 5 Dec 2023 11:31:20 +0000 (12:31 +0100)
committerJulius Härtl <jus@bitgrid.net>
Tue, 5 Dec 2023 15:55:02 +0000 (16:55 +0100)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
apps/federation/lib/TrustedServers.php

index c27529bd12cb612739a3a03704a4ba688e8b7141..b110be24aff12c01b927a3caf2430759c64b3890 100644 (file)
@@ -31,6 +31,7 @@ use OCA\Federation\BackgroundJob\RequestSharedSecret;
 use OCP\AppFramework\Http;
 use OCP\AppFramework\Utility\ITimeFactory;
 use OCP\BackgroundJob\IJobList;
+use OCP\DB\Exception;
 use OCP\EventDispatcher\IEventDispatcher;
 use OCP\Federation\Events\TrustedServerRemovedEvent;
 use OCP\HintException;
@@ -59,6 +60,9 @@ class TrustedServers {
        private IEventDispatcher $dispatcher;
        private ITimeFactory $timeFactory;
 
+       /** @var list<array{id: int, url: string, url_hash: string, shared_secret: ?string, status: int, sync_token: ?string}>|null */
+       private ?array $trustedServersCache = null;
+
        public function __construct(
                DbHandler $dbHandler,
                IClientService $httpClientService,
@@ -122,14 +126,20 @@ class TrustedServers {
                $server = $this->dbHandler->getServerById($id);
                $this->dbHandler->removeServer($id);
                $this->dispatcher->dispatchTyped(new TrustedServerRemovedEvent($server['url_hash']));
+
        }
 
        /**
         * Get all trusted servers
-        * @return list<array{id: int, url: string, url_hash: string, shared_secret: string, status: int, sync_token: string}>
+        *
+        * @return list<array{id: int, url: string, url_hash: string, shared_secret: ?string, status: int, sync_token: ?string}>
+        * @throws Exception
         */
        public function getServers() {
-               return $this->dbHandler->getAllServer();
+               if ($this->trustedServersCache === null) {
+                       $this->trustedServersCache = $this->dbHandler->getAllServer();
+               }
+               return $this->trustedServersCache;
        }
 
        /**