aboutsummaryrefslogtreecommitdiffstats
path: root/core/BackgroundJobs
diff options
context:
space:
mode:
authorGit'Fellow <12234510+solracsf@users.noreply.github.com>2024-01-15 14:41:36 +0100
committerRichard Steinmetz <richard@steinmetz.cloud>2024-08-05 08:48:15 +0200
commit2ea6713504aa49d1a8cb9a7efaad8706484986c1 (patch)
tree4e1bb94316d459010f8366ea4f5eee72e72dde7e /core/BackgroundJobs
parentc283683a08a6aefb60997e961d1365c61e4d0100 (diff)
downloadnextcloud-server-2ea6713504aa49d1a8cb9a7efaad8706484986c1.tar.gz
nextcloud-server-2ea6713504aa49d1a8cb9a7efaad8706484986c1.zip
fix: Max file size for metadata generation
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com> Co-Authored-By: Louis <louis@chmn.me> Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
Diffstat (limited to 'core/BackgroundJobs')
-rw-r--r--core/BackgroundJobs/GenerateMetadataJob.php14
1 files changed, 14 insertions, 0 deletions
diff --git a/core/BackgroundJobs/GenerateMetadataJob.php b/core/BackgroundJobs/GenerateMetadataJob.php
index 809e139e6ef..c40a1b11f06 100644
--- a/core/BackgroundJobs/GenerateMetadataJob.php
+++ b/core/BackgroundJobs/GenerateMetadataJob.php
@@ -16,12 +16,17 @@ use OCP\Files\IRootFolder;
use OCP\FilesMetadata\Exceptions\FilesMetadataNotFoundException;
use OCP\FilesMetadata\IFilesMetadataManager;
use OCP\IAppConfig;
+use OCP\IConfig;
use OCP\IUserManager;
use Psr\Log\LoggerInterface;
class GenerateMetadataJob extends TimedJob {
+ // Default file size limit for metadata generation (MBytes).
+ protected const DEFAULT_MAX_FILESIZE = 256;
+
public function __construct(
ITimeFactory $time,
+ private IConfig $config,
private IAppConfig $appConfig,
private IRootFolder $rootFolder,
private IUserManager $userManager,
@@ -88,6 +93,15 @@ class GenerateMetadataJob extends TimedJob {
continue;
}
+ // Don't generate metadata for files bigger than configured metadata_max_filesize
+ // Files are loaded in memory so very big files can lead to an OOM on the server
+ $nodeSize = $node->getSize();
+ $nodeLimit = $this->config->getSystemValueInt('metadata_max_filesize', self::DEFAULT_MAX_FILESIZE);
+ if ($nodeSize > $nodeLimit * 1000000) {
+ $this->logger->debug("Skipping generating metadata for fileid " . $node->getId() . " as its size exceeds configured 'metadata_max_filesize'.");
+ continue;
+ }
+
try {
$this->filesMetadataManager->getMetadata($node->getId(), false);
} catch (FilesMetadataNotFoundException) {