aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Chemineau <louis@chmn.me>2025-06-18 15:48:22 +0200
committerLouis Chemineau <louis@chmn.me>2025-06-18 17:22:33 +0200
commit82ede51423e9bb4c5ad19b10f84974086f2413b9 (patch)
tree965e0a507cd5e1ca90e8fff52f02839bb689e631
parent28004c4b8309bee5325e5e88de40965cf5f0a96d (diff)
downloadnextcloud-server-artonge/fix/generate_metadata_perf.tar.gz
nextcloud-server-artonge/fix/generate_metadata_perf.zip
fix(metadata): Skip generating metadata if there are some pending UpdateSingleMetadata job alreadyartonge/fix/generate_metadata_perf
This prevent the GenerateMetadataJob job from quickly piling up UpdateSingleMetadata jobs. Signed-off-by: Louis Chemineau <louis@chmn.me>
-rw-r--r--core/BackgroundJobs/GenerateMetadataJob.php8
1 files changed, 8 insertions, 0 deletions
diff --git a/core/BackgroundJobs/GenerateMetadataJob.php b/core/BackgroundJobs/GenerateMetadataJob.php
index b584a771fbb..b42cca13ef9 100644
--- a/core/BackgroundJobs/GenerateMetadataJob.php
+++ b/core/BackgroundJobs/GenerateMetadataJob.php
@@ -9,6 +9,7 @@ declare(strict_types=1);
namespace OC\Core\BackgroundJobs;
use OC\Files\Mount\MoveableMount;
+use OC\FilesMetadata\Job\UpdateSingleMetadata;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\IJobList;
use OCP\BackgroundJob\TimedJob;
@@ -46,6 +47,13 @@ class GenerateMetadataJob extends TimedJob {
return;
}
+ // This prevent the job from piling up UpdateSingleMetadata jobs
+ $pendingUpdateSingleMetadataJobs = $this->jobList->countByClass(UpdateSingleMetadata::class);
+ if (isset($pendingUpdateSingleMetadataJobs[0]) && $pendingUpdateSingleMetadataJobs[0]['count'] > 1000) {
+ $this->logger->debug('Skipping metadata generation job as there are more than 1000 pending UpdateSingleMetadata jobs.');
+ return;
+ }
+
$offset = $this->appConfig->getValueInt('core', 'metadataGenerationOffset', 0);
$users = $this->userManager->getSeenUsers($offset);