'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
*
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,
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) {