From ccb05dbb170475870e755573f91da6e1914698d5 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 16 Nov 2016 11:40:52 +0100 Subject: Adds background job to cleanup all previews. * A repair step that inserts a background job for each user * Each background job will delete for 15 seconds if it takes longer we reschedule. This is done so instances that don't use the system cron won't time out. * Added tests Signed-off-by: Roeland Jago Douma --- lib/private/Repair.php | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'lib/private/Repair.php') diff --git a/lib/private/Repair.php b/lib/private/Repair.php index 7a5ef9fbd9e..c9f8dbfff69 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -36,6 +36,7 @@ use OC\Repair\CleanTags; use OC\Repair\Collation; use OC\Repair\DropOldJobs; use OC\Repair\MoveUpdaterStepFile; +use OC\Repair\NC11\CleanPreviews; use OC\Repair\NC11\MoveAvatars; use OC\Repair\OldGroupMembershipShares; use OC\Repair\RemoveGetETagEntries; @@ -155,6 +156,10 @@ class Repair implements IOutput{ \OC::$server->getJobList(), \OC::$server->getSystemConfig() ), + new CleanPreviews( + \OC::$server->getJobList(), + \OC::$server->getUserManager() + ), ]; } -- cgit v1.2.3 From 78a318d388bfe82e1a3adebeb75ac195cb1334d7 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 19 Nov 2016 20:26:53 +0100 Subject: Add test if repair step is already done Signed-off-by: Roeland Jago Douma --- lib/private/Repair.php | 3 +- lib/private/Repair/NC11/CleanPreviews.php | 18 +++++++++--- tests/lib/Repair/NC11/CleanPreviewsTest.php | 44 ++++++++++++++++++++++++++++- 3 files changed, 59 insertions(+), 6 deletions(-) (limited to 'lib/private/Repair.php') diff --git a/lib/private/Repair.php b/lib/private/Repair.php index c9f8dbfff69..5efbb9f8e2e 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -158,7 +158,8 @@ class Repair implements IOutput{ ), new CleanPreviews( \OC::$server->getJobList(), - \OC::$server->getUserManager() + \OC::$server->getUserManager(), + \OC::$server->getConfig() ), ]; } diff --git a/lib/private/Repair/NC11/CleanPreviews.php b/lib/private/Repair/NC11/CleanPreviews.php index 0c6be0165fc..94f5d19b795 100644 --- a/lib/private/Repair/NC11/CleanPreviews.php +++ b/lib/private/Repair/NC11/CleanPreviews.php @@ -23,6 +23,7 @@ namespace OC\Repair\NC11; use OCP\BackgroundJob\IJobList; +use OCP\IConfig; use OCP\IUser; use OCP\IUserManager; use OCP\Migration\IOutput; @@ -36,16 +37,22 @@ class CleanPreviews implements IRepairStep { /** @var IUserManager */ private $userManager; + /** @var IConfig */ + private $config; + /** * MoveAvatars constructor. * * @param IJobList $jobList * @param IUserManager $userManager + * @param IConfig $config */ public function __construct(IJobList $jobList, - IUserManager $userManager) { + IUserManager $userManager, + IConfig $config) { $this->jobList = $jobList; $this->userManager = $userManager; + $this->config = $config; } /** @@ -56,8 +63,11 @@ class CleanPreviews implements IRepairStep { } public function run(IOutput $output) { - $this->userManager->callForSeenUsers(function(IUser $user) { - $this->jobList->add(CleanPreviewsBackgroundJob::class, ['uid' => $user->getUID()]); - }); + if (!$this->config->getAppValue('core', 'previewsCleanedUp', false)) { + $this->userManager->callForSeenUsers(function (IUser $user) { + $this->jobList->add(CleanPreviewsBackgroundJob::class, ['uid' => $user->getUID()]); + }); + $this->config->setAppValue('core', 'previewsCleanedUp', 1); + } } } diff --git a/tests/lib/Repair/NC11/CleanPreviewsTest.php b/tests/lib/Repair/NC11/CleanPreviewsTest.php index 643f18e89b7..8abc6b7bab9 100644 --- a/tests/lib/Repair/NC11/CleanPreviewsTest.php +++ b/tests/lib/Repair/NC11/CleanPreviewsTest.php @@ -25,6 +25,7 @@ namespace Test\Repair\NC11; use OC\Repair\NC11\CleanPreviews; use OC\Repair\NC11\CleanPreviewsBackgroundJob; use OCP\BackgroundJob\IJobList; +use OCP\IConfig; use OCP\IUser; use OCP\IUserManager; use OCP\Migration\IOutput; @@ -39,6 +40,9 @@ class CleanPreviewsTest extends TestCase { /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ private $userManager; + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ + private $config; + /** @var CleanPreviews */ private $repair; @@ -47,10 +51,12 @@ class CleanPreviewsTest extends TestCase { $this->jobList = $this->createMock(IJobList::class); $this->userManager = $this->createMock(IUserManager::class); + $this->config = $this->createMock(IConfig::class); $this->repair = new CleanPreviews( $this->jobList, - $this->userManager + $this->userManager, + $this->config ); } @@ -87,6 +93,42 @@ class CleanPreviewsTest extends TestCase { $this->equalTo(['uid' => 'user2']) ); + $this->config->expects($this->once()) + ->method('getAppValue') + ->with( + $this->equalTo('core'), + $this->equalTo('previewsCleanedUp'), + $this->equalTo(false) + )->willReturn(false); + $this->config->expects($this->once()) + ->method('setAppValue') + ->with( + $this->equalTo('core'), + $this->equalTo('previewsCleanedUp'), + $this->equalTo(1) + ); + + $this->repair->run($this->createMock(IOutput::class)); + } + + + public function testRunAlreadyDoone() { + $this->userManager->expects($this->never()) + ->method($this->anything()); + + $this->jobList->expects($this->never()) + ->method($this->anything()); + + $this->config->expects($this->once()) + ->method('getAppValue') + ->with( + $this->equalTo('core'), + $this->equalTo('previewsCleanedUp'), + $this->equalTo(false) + )->willReturn('1'); + $this->config->expects($this->never()) + ->method('setAppValue'); + $this->repair->run($this->createMock(IOutput::class)); } -- cgit v1.2.3