summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php90
-rw-r--r--lib/composer/composer/autoload_classmap.php2
-rw-r--r--lib/composer/composer/autoload_static.php2
-rw-r--r--lib/private/Repair.php2
-rw-r--r--lib/private/Repair/AddCleanupUpdaterBackupsJob.php48
5 files changed, 144 insertions, 0 deletions
diff --git a/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php b/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php
new file mode 100644
index 00000000000..2b629861088
--- /dev/null
+++ b/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * @copyright 2018 Morris Jobke <hey@morrisjobke.de>
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OC\Core\BackgroundJobs;
+
+use OC\BackgroundJob\QueuedJob;
+use OCP\IConfig;
+use OCP\ILogger;
+
+class BackgroundCleanupUpdaterBackupsJob extends QueuedJob {
+
+ /** @var IConfig */
+ protected $config;
+ /** @var ILogger */
+ protected $log;
+
+ public function __construct(IConfig $config, ILogger $log) {
+ $this->config = $config;
+ $this->log = $log;
+ }
+
+ /**
+ * This job cleans up all backups except the latest 3 from the updaters backup directory
+ *
+ */
+ public function run($arguments) {
+ $dataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data');
+ $instanceId = $this->config->getSystemValue('instanceid', null);
+
+ if(!is_string($instanceId) || empty($instanceId)) {
+ return;
+ }
+
+ $updaterFolderPath = $dataDir . '/updater-' . $instanceId;
+ $backupFolderPath = $updaterFolderPath . '/backups';
+ if(file_exists($backupFolderPath)) {
+ $this->log->info("$backupFolderPath exists - start to clean it up");
+
+ $dirList = [];
+ $dirs = new \DirectoryIterator($backupFolderPath);
+ foreach($dirs as $dir) {
+ // skip files and dot dirs
+ if ($dir->isFile() || $dir->isDot()) {
+ continue;
+ }
+
+ $mtime = $dir->getMTime();
+ $realPath = $dir->getRealPath();
+
+ if ($realPath === false) {
+ continue;
+ }
+
+ $dirList[$mtime] = $realPath;
+ }
+
+ ksort($dirList);
+ // drop the newest 3 directories
+ $dirList = array_slice($dirList, 0, -3);
+ $this->log->info("List of all directories that will be deleted: " . json_encode($dirList));
+
+ foreach($dirList as $dir) {
+ $this->log->info("Removing $dir ...");
+ \OC_Helper::rmdirr($dir);
+ }
+ $this->log->info("Cleanup finished");
+ } else {
+ $this->log->info("Could not find updater directory $backupFolderPath - cleanup step not needed");
+ }
+ }
+}
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 08f8760b321..bd253c342d2 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -462,6 +462,7 @@ return array(
'OC\\Contacts\\ContactsMenu\\Manager' => $baseDir . '/lib/private/Contacts/ContactsMenu/Manager.php',
'OC\\Contacts\\ContactsMenu\\Providers\\EMailProvider' => $baseDir . '/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php',
'OC\\Core\\Application' => $baseDir . '/core/Application.php',
+ 'OC\\Core\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => $baseDir . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php',
'OC\\Core\\Command\\App\\CheckCode' => $baseDir . '/core/Command/App/CheckCode.php',
'OC\\Core\\Command\\App\\Disable' => $baseDir . '/core/Command/App/Disable.php',
'OC\\Core\\Command\\App\\Enable' => $baseDir . '/core/Command/App/Enable.php',
@@ -838,6 +839,7 @@ return array(
'OC\\Remote\\User' => $baseDir . '/lib/private/Remote/User.php',
'OC\\Repair' => $baseDir . '/lib/private/Repair.php',
'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php',
+ 'OC\\Repair\\AddCleanupUpdaterBackupsJob' => $baseDir . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
'OC\\Repair\\CleanTags' => $baseDir . '/lib/private/Repair/CleanTags.php',
'OC\\Repair\\ClearFrontendCaches' => $baseDir . '/lib/private/Repair/ClearFrontendCaches.php',
'OC\\Repair\\Collation' => $baseDir . '/lib/private/Repair/Collation.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 4c5756b98e3..0aa0987037d 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -492,6 +492,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Contacts\\ContactsMenu\\Manager' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Manager.php',
'OC\\Contacts\\ContactsMenu\\Providers\\EMailProvider' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php',
'OC\\Core\\Application' => __DIR__ . '/../../..' . '/core/Application.php',
+ 'OC\\Core\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php',
'OC\\Core\\Command\\App\\CheckCode' => __DIR__ . '/../../..' . '/core/Command/App/CheckCode.php',
'OC\\Core\\Command\\App\\Disable' => __DIR__ . '/../../..' . '/core/Command/App/Disable.php',
'OC\\Core\\Command\\App\\Enable' => __DIR__ . '/../../..' . '/core/Command/App/Enable.php',
@@ -868,6 +869,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Remote\\User' => __DIR__ . '/../../..' . '/lib/private/Remote/User.php',
'OC\\Repair' => __DIR__ . '/../../..' . '/lib/private/Repair.php',
'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php',
+ 'OC\\Repair\\AddCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
'OC\\Repair\\CleanTags' => __DIR__ . '/../../..' . '/lib/private/Repair/CleanTags.php',
'OC\\Repair\\ClearFrontendCaches' => __DIR__ . '/../../..' . '/lib/private/Repair/ClearFrontendCaches.php',
'OC\\Repair\\Collation' => __DIR__ . '/../../..' . '/lib/private/Repair/Collation.php',
diff --git a/lib/private/Repair.php b/lib/private/Repair.php
index 72407d2570c..78a60392219 100644
--- a/lib/private/Repair.php
+++ b/lib/private/Repair.php
@@ -30,6 +30,7 @@
namespace OC;
+use OC\Repair\AddCleanupUpdaterBackupsJob;
use OC\Repair\CleanTags;
use OC\Repair\ClearFrontendCaches;
use OC\Repair\Collation;
@@ -135,6 +136,7 @@ class Repair implements IOutput{
new AddLogRotateJob(\OC::$server->getJobList()),
new ClearFrontendCaches(\OC::$server->getMemCacheFactory(), \OC::$server->query(SCSSCacher::class), \OC::$server->query(JSCombiner::class)),
new AddPreviewBackgroundCleanupJob(\OC::$server->getJobList()),
+ new AddCleanupUpdaterBackupsJob(\OC::$server->getJobList()),
];
}
diff --git a/lib/private/Repair/AddCleanupUpdaterBackupsJob.php b/lib/private/Repair/AddCleanupUpdaterBackupsJob.php
new file mode 100644
index 00000000000..1574e665fb6
--- /dev/null
+++ b/lib/private/Repair/AddCleanupUpdaterBackupsJob.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * @copyright Copyright (c) 2018 Morris Jobke <hey@morrisjobke.de>
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Repair;
+
+use OC\Core\BackgroundJobs\BackgroundCleanupUpdaterBackupsJob;
+use OCP\BackgroundJob\IJobList;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+class AddCleanupUpdaterBackupsJob implements IRepairStep {
+
+ /** @var IJobList */
+ protected $jobList;
+
+ public function __construct(IJobList $jobList) {
+ $this->jobList = $jobList;
+ }
+
+ public function getName() {
+ return 'Queue a one-time job to cleanup old backups of the updater';
+ }
+
+ public function run(IOutput $output) {
+ $this->jobList->add(BackgroundCleanupUpdaterBackupsJob::class);
+ }
+}
+