From 553cda2a6d3f89d1844c8abfbd8f5a125b9ae349 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 20 Aug 2020 07:56:25 +0200 Subject: [PATCH] Don't load all calendar objects into memory Signed-off-by: Joas Schilling --- .../BuildCalendarSearchIndexBackgroundJob.php | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/apps/dav/lib/Migration/BuildCalendarSearchIndexBackgroundJob.php b/apps/dav/lib/Migration/BuildCalendarSearchIndexBackgroundJob.php index ada3c47017..5f6ec2e77f 100644 --- a/apps/dav/lib/Migration/BuildCalendarSearchIndexBackgroundJob.php +++ b/apps/dav/lib/Migration/BuildCalendarSearchIndexBackgroundJob.php @@ -69,12 +69,18 @@ class BuildCalendarSearchIndexBackgroundJob extends QueuedJob { } public function run($arguments) { - $offset = $arguments['offset']; - $stopAt = $arguments['stopAt']; + $offset = (int) $arguments['offset']; + $stopAt = (int) $arguments['stopAt']; $this->logger->info('Building calendar index (' . $offset .'/' . $stopAt . ')'); - $offset = $this->buildIndex($offset, $stopAt); + $startTime = $this->timeFactory->getTime(); + while (($this->timeFactory->getTime() - $startTime) < 15) { + $offset = $this->buildIndex($offset, $stopAt); + if ($offset >= $stopAt) { + break; + } + } if ($offset >= $stopAt) { $this->logger->info('Building calendar index done'); @@ -92,18 +98,17 @@ class BuildCalendarSearchIndexBackgroundJob extends QueuedJob { * @param int $stopAt * @return int */ - private function buildIndex($offset, $stopAt) { - $startTime = $this->timeFactory->getTime(); - + private function buildIndex(int $offset, int $stopAt): int { $query = $this->db->getQueryBuilder(); $query->select(['id', 'calendarid', 'uri', 'calendardata']) ->from('calendarobjects') ->where($query->expr()->lte('id', $query->createNamedParameter($stopAt))) ->andWhere($query->expr()->gt('id', $query->createNamedParameter($offset))) - ->orderBy('id', 'ASC'); + ->orderBy('id', 'ASC') + ->setMaxResults(500); - $stmt = $query->execute(); - while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $result = $query->execute(); + while ($row = $result->fetch(\PDO::FETCH_ASSOC)) { $offset = $row['id']; $calendarData = $row['calendardata']; @@ -112,12 +117,8 @@ class BuildCalendarSearchIndexBackgroundJob extends QueuedJob { } $this->calDavBackend->updateProperties($row['calendarid'], $row['uri'], $calendarData); - - if (($this->timeFactory->getTime() - $startTime) > 15) { - return $offset; - } } - return $stopAt; + return $offset; } }