diff options
author | Julius Härtl <jus@bitgrid.net> | 2023-02-06 20:08:37 +0100 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2023-02-10 14:33:07 +0100 |
commit | aebf6542140f593beb03a5c897f74d3ab057b362 (patch) | |
tree | e8235b77ec853bfe574b71205cdba975608ff8a2 /apps/workflowengine/lib | |
parent | e0946a1608283bd376f439906c50f3a4eb810839 (diff) | |
download | nextcloud-server-aebf6542140f593beb03a5c897f74d3ab057b362.tar.gz nextcloud-server-aebf6542140f593beb03a5c897f74d3ab057b362.zip |
perf(workflowengine): Cache query that is performed on every request
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'apps/workflowengine/lib')
-rw-r--r-- | apps/workflowengine/lib/Manager.php | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/apps/workflowengine/lib/Manager.php b/apps/workflowengine/lib/Manager.php index 659fd2421c1..417e1a1eba6 100644 --- a/apps/workflowengine/lib/Manager.php +++ b/apps/workflowengine/lib/Manager.php @@ -49,6 +49,7 @@ use OCP\AppFramework\QueryException; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\Storage\IStorage; +use OCP\ICacheFactory; use OCP\IConfig; use OCP\IDBConnection; use OCP\IL10N; @@ -69,7 +70,6 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface as LegacyDispatch use Symfony\Component\EventDispatcher\GenericEvent; class Manager implements IManager { - /** @var IStorage */ protected $storage; @@ -120,6 +120,7 @@ class Manager implements IManager { /** @var IConfig */ private $config; + private ICacheFactory $cacheFactory; public function __construct( IDBConnection $connection, @@ -129,7 +130,8 @@ class Manager implements IManager { ILogger $logger, IUserSession $session, IEventDispatcher $dispatcher, - IConfig $config + IConfig $config, + ICacheFactory $cacheFactory, ) { $this->connection = $connection; $this->container = $container; @@ -140,6 +142,7 @@ class Manager implements IManager { $this->session = $session; $this->dispatcher = $dispatcher; $this->config = $config; + $this->cacheFactory = $cacheFactory; } public function getRuleMatcher(): IRuleMatcher { @@ -153,6 +156,12 @@ class Manager implements IManager { } public function getAllConfiguredEvents() { + $cache = $this->cacheFactory->createDistributed('flow'); + $cached = $cache->get('events'); + if ($cached !== null) { + return $cached; + } + $query = $this->connection->getQueryBuilder(); $query->select('class', 'entity') @@ -176,6 +185,8 @@ class Manager implements IManager { } $result->closeCursor(); + $cache->set('events', $operations, 3600); + return $operations; } @@ -289,6 +300,8 @@ class Manager implements IManager { ]); $query->execute(); + $this->cacheFactory->createDistributed('flow')->remove('events'); + return $query->getLastInsertId(); } @@ -407,6 +420,7 @@ class Manager implements IManager { throw $e; } unset($this->operations[$scopeContext->getHash()]); + $this->cacheFactory->createDistributed('flow')->remove('events'); return $this->getOperation($id); } @@ -444,6 +458,8 @@ class Manager implements IManager { unset($this->operations[$scopeContext->getHash()]); } + $this->cacheFactory->createDistributed('flow')->remove('events'); + return $result; } |