From 6f158733211749ca6d70858ee58ba35e85d46e81 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sun, 2 Oct 2022 12:07:51 +0200 Subject: Add a background job to prune outdated sync tokens We remove all outdated sync tokens, based on their auto-incremented ID. By default we only keep the last 10 000, but this can be configurable. Signed-off-by: Thomas Citharel --- .../BackgroundJob/PruneOutdatedSyncTokensJob.php | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 apps/dav/lib/BackgroundJob/PruneOutdatedSyncTokensJob.php (limited to 'apps/dav/lib/BackgroundJob') diff --git a/apps/dav/lib/BackgroundJob/PruneOutdatedSyncTokensJob.php b/apps/dav/lib/BackgroundJob/PruneOutdatedSyncTokensJob.php new file mode 100644 index 00000000000..deca55a26cb --- /dev/null +++ b/apps/dav/lib/BackgroundJob/PruneOutdatedSyncTokensJob.php @@ -0,0 +1,64 @@ + + * + * @author Thomas Citharel + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +namespace OCA\DAV\BackgroundJob; + +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\TimedJob; +use OCA\DAV\AppInfo\Application; +use OCA\DAV\CalDAV\CalDavBackend; +use OCA\DAV\CardDAV\CardDavBackend; +use OCP\IConfig; +use Psr\Log\LoggerInterface; + +class PruneOutdatedSyncTokensJob extends TimedJob { + + private IConfig $config; + private LoggerInterface $logger; + private CardDavBackend $cardDavBackend; + private CalDavBackend $calDavBackend; + + public function __construct(ITimeFactory $timeFactory, CalDavBackend $calDavBackend, CardDavBackend $cardDavBackend, IConfig $config, LoggerInterface $logger) { + parent::__construct($timeFactory); + $this->calDavBackend = $calDavBackend; + $this->cardDavBackend = $cardDavBackend; + $this->config = $config; + $this->logger = $logger; + $this->setInterval(60 * 60 * 24); // One day + $this->setTimeSensitivity(self::TIME_INSENSITIVE); + } + + public function run($argument) { + $limit = max(1, (int) $this->config->getAppValue(Application::APP_ID, 'totalNumberOfSyncTokensToKeep', '10000')); + + $prunedCalendarSyncTokens = $this->calDavBackend->pruneOutdatedSyncTokens($limit); + $prunedAddressBookSyncTokens = $this->cardDavBackend->pruneOutdatedSyncTokens($limit); + + $this->logger->info('Pruned {calendarSyncTokensNumber} calendar sync tokens and {addressBooksSyncTokensNumber} address book sync tokens', [ + 'calendarSyncTokensNumber' => $prunedCalendarSyncTokens, + 'addressBooksSyncTokensNumber' => $prunedAddressBookSyncTokens + ]); + } +} -- cgit v1.2.3