aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2024-01-10 08:57:36 -0100
committerEduardo Morales <emoral435@gmail.com>2024-01-12 07:54:40 -0600
commitd1088e82b0b7e1d2530163ed98752126322d7f86 (patch)
treea7a0c29eb7f171c4ae57164e6de5917a58ed01bc /core
parentb9540a8964cb6f7edb9e5e5631c18322cbfd77ad (diff)
downloadnextcloud-server-d1088e82b0b7e1d2530163ed98752126322d7f86.tar.gz
nextcloud-server-d1088e82b0b7e1d2530163ed98752126322d7f86.zip
better users cycle
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
Diffstat (limited to 'core')
-rw-r--r--core/BackgroundJobs/GenerateMetadataJob.php52
1 files changed, 26 insertions, 26 deletions
diff --git a/core/BackgroundJobs/GenerateMetadataJob.php b/core/BackgroundJobs/GenerateMetadataJob.php
index 393545b097d..65a687649b8 100644
--- a/core/BackgroundJobs/GenerateMetadataJob.php
+++ b/core/BackgroundJobs/GenerateMetadataJob.php
@@ -30,6 +30,7 @@ use OCP\BackgroundJob\IJobList;
use OCP\BackgroundJob\TimedJob;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
+use OCP\FilesMetadata\Exceptions\FilesMetadataNotFoundException;
use OCP\FilesMetadata\IFilesMetadataManager;
use OCP\IConfig;
use OCP\IUserManager;
@@ -53,38 +54,33 @@ class GenerateMetadataJob extends TimedJob {
protected function run(mixed $argument): void {
$users = $this->userManager->search('');
- $lastMappedUser = $this->config->getAppValue('core', 'metadataGenerationLastHandledUser', '');
+ $lastHandledUser = $this->config->getAppValue('core', 'metadataGenerationLastHandledUser', '');
- if ($lastMappedUser === '') {
- $user = array_key_first($users);
- if ($user === null) {
- return;
- }
-
- $lastMappedUser = $users[$user]->getUID();
- }
-
- $startTime = null;
+ // we'll only start timer once we have found a valid user to handle
+ // meaning NOW if we have not handled any user from a previous run
+ $startTime = ($lastHandledUser === '') ? time() : null;
foreach ($users as $user) {
+ $userId = $user->getUID();
+
+ // if we already handled a previous run, we start timer only when we face the last handled user
if ($startTime === null) {
- // Skip all user before lastMappedUser.
- if ($lastMappedUser !== $user->getUID()) {
- continue;
+ if ($userId === $lastHandledUser) {
+ $startTime = time();
}
-
- $startTime = time();
+ continue;
}
+ $this->config->setAppValue('core', 'metadataGenerationLastHandledUser', $userId);
+ $this->scanFilesForUser($user->getUID());
+
// Stop if execution time is more than one hour.
- if (time() - $startTime > 60 * 60) {
+ if (time() - $startTime > 3600) {
return;
}
-
- $this->scanFilesForUser($user->getUID());
- $this->config->setAppValue('core', 'metadataGenerationLastHandledUser', $user->getUID());
}
$this->jobList->remove(GenerateMetadataJob::class);
+ $this->config->deleteAppValue('core', 'metadataGenerationLastHandledUser');
}
private function scanFilesForUser(string $userId): void {
@@ -105,12 +101,16 @@ class GenerateMetadataJob extends TimedJob {
}
try {
- $this->filesMetadataManager->refreshMetadata(
- $node,
- IFilesMetadataManager::PROCESS_LIVE | IFilesMetadataManager::PROCESS_BACKGROUND
- );
- } catch (\Throwable $ex) {
- $this->logger->warning("Error while generating metadata for fileid ".$node->getId(), ['exception' => $ex]);
+ $this->filesMetadataManager->getMetadata($node->getId(), false);
+ } catch (FilesMetadataNotFoundException) {
+ try {
+ $this->filesMetadataManager->refreshMetadata(
+ $node,
+ IFilesMetadataManager::PROCESS_LIVE | IFilesMetadataManager::PROCESS_BACKGROUND
+ );
+ } catch (\Throwable $ex) {
+ $this->logger->warning("Error while generating metadata for fileid " . $node->getId(), ['exception' => $ex]);
+ }
}
}
}