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>
pull/42800/head
Git'Fellow 2 years ago committed by Richard Steinmetz
parent c283683a08
commit 2ea6713504
No known key found for this signature in database
GPG Key ID: 27137D9E7D273FB2
  1. 9
      config/config.sample.php
  2. 14
      core/BackgroundJobs/GenerateMetadataJob.php

@ -1373,6 +1373,15 @@ $CONFIG = [
'OC\Preview\XBitmap',
],
/**
* Maximum file size for metadata generation.
* If a file exceeds this size, metadata generation will be skipped.
* Note: memory equivalent to this size will be used for metadata generation.
*
* Default: 256 megabytes.
*/
'metadata_max_filesize' => 256,
/**
* LDAP
*

@ -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) {

Loading…
Cancel
Save