diff options
author | Git'Fellow <12234510+solracsf@users.noreply.github.com> | 2024-01-15 14:41:36 +0100 |
---|---|---|
committer | Richard Steinmetz <richard@steinmetz.cloud> | 2024-08-05 08:48:15 +0200 |
commit | 2ea6713504aa49d1a8cb9a7efaad8706484986c1 (patch) | |
tree | 4e1bb94316d459010f8366ea4f5eee72e72dde7e /core/BackgroundJobs | |
parent | c283683a08a6aefb60997e961d1365c61e4d0100 (diff) | |
download | nextcloud-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.php | 14 |
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) { |