aboutsummaryrefslogtreecommitdiffstats
path: root/apps/workflowengine/lib
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2023-02-06 20:08:37 +0100
committerJulius Härtl <jus@bitgrid.net>2023-02-10 14:33:07 +0100
commitaebf6542140f593beb03a5c897f74d3ab057b362 (patch)
treee8235b77ec853bfe574b71205cdba975608ff8a2 /apps/workflowengine/lib
parente0946a1608283bd376f439906c50f3a4eb810839 (diff)
downloadnextcloud-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.php20
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;
}