aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorBenjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>2025-02-12 15:29:26 +0100
committerBenjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>2025-02-13 10:11:02 +0100
commit9bdee76535af2e0fbc0e4c9de6ffc932a3a311c1 (patch)
tree379c2840a7b679d2d4e16cd3951501f7fefd15b3 /lib/private
parent4905255936ecd0bf1511b326e5de47f91d589b18 (diff)
downloadnextcloud-server-perf/improve-incomplete-scan.tar.gz
nextcloud-server-perf/improve-incomplete-scan.zip
perf(files): faster query to fetch incomplete directoriesperf/improve-incomplete-scan
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/Files/Cache/Cache.php19
-rw-r--r--lib/private/Files/ObjectStore/ObjectStoreScanner.php2
2 files changed, 6 insertions, 15 deletions
diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php
index 7fbb625050b..2c190720c23 100644
--- a/lib/private/Files/Cache/Cache.php
+++ b/lib/private/Files/Cache/Cache.php
@@ -926,7 +926,7 @@ class Cache implements ICache {
->from('filecache')
->whereParent($fileId)
->whereStorageId($this->getNumericStorageId())
- ->andWhere($query->expr()->lt('size', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)));
+ ->andWhere($query->expr()->eq('size', $query->createNamedParameter(-1, IQueryBuilder::PARAM_INT)));
$result = $query->executeQuery();
$size = (int)$result->fetchOne();
@@ -1067,28 +1067,19 @@ class Cache implements ICache {
* @return string|false the path of the folder or false when no folder matched
*/
public function getIncomplete() {
- // we select the fileid here first instead of directly selecting the path since this helps mariadb/mysql
- // to use the correct index.
- // The overhead of this should be minimal since the cost of selecting the path by id should be much lower
- // than the cost of finding an item with size < 0
$query = $this->getQueryBuilder();
- $query->select('fileid')
+ $query->select('path')
->from('filecache')
->whereStorageId($this->getNumericStorageId())
- ->andWhere($query->expr()->lt('size', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
+ ->andWhere($query->expr()->eq('size', $query->createNamedParameter(-1, IQueryBuilder::PARAM_INT)))
->orderBy('fileid', 'DESC')
->setMaxResults(1);
$result = $query->executeQuery();
- $id = $result->fetchOne();
+ $path = $result->fetchOne();
$result->closeCursor();
- if ($id === false) {
- return false;
- }
-
- $path = $this->getPathById($id);
- return $path ?? false;
+ return $path === false ? false : (string)$path;
}
/**
diff --git a/lib/private/Files/ObjectStore/ObjectStoreScanner.php b/lib/private/Files/ObjectStore/ObjectStoreScanner.php
index 05929a49aab..5c3992b8458 100644
--- a/lib/private/Files/ObjectStore/ObjectStoreScanner.php
+++ b/lib/private/Files/ObjectStore/ObjectStoreScanner.php
@@ -61,7 +61,7 @@ class ObjectStoreScanner extends Scanner {
$query->select('path')
->from('filecache')
->where($query->expr()->eq('storage', $query->createNamedParameter($this->cache->getNumericStorageId(), IQueryBuilder::PARAM_INT)))
- ->andWhere($query->expr()->lt('size', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
+ ->andWhere($query->expr()->eq('size', $query->createNamedParameter(-1, IQueryBuilder::PARAM_INT)))
->orderBy('path', 'DESC')
->setMaxResults(1);