Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-06-13 18:43:29 +0300
committerMorris Jobke <hey@morrisjobke.de>2018-06-13 18:43:29 +0300
commitdc4c158ea732b3aefbc8bedb2e61236a62fa24d5 (patch)
tree2eb586c38b992e199d44c6b39de11c4c6b9a13ec /core/BackgroundJobs
parentcd87a40eb3a2b7026dfd1822e6e43e131edd3423 (diff)
Background job to clean up old backups of the updater
* a one-time job gets scheduled after each update via a repair job * the job remove all directories inside data/updater-INSTANCEID/backups except the 3 most recent ones (determined by mtime of the folder) Signed-off-by: Morris Jobke <hey@morrisjobke.de>
Diffstat (limited to 'core/BackgroundJobs')
-rw-r--r--core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php90
1 files changed, 90 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");
+ }
+ }
+}