mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 16:26:59 -04:00
Merge pull request #42800 from nextcloud/metaGenMemLimit
enh(metadata): Introduce a memory limit for metadata generation
This commit is contained in:
commit
8511b89579
2 changed files with 23 additions and 0 deletions
|
|
@ -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…
Reference in a new issue