aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php61
-rw-r--r--apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php29
2 files changed, 45 insertions, 45 deletions
diff --git a/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php b/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php
index 35e4d91e539..136b1748043 100644
--- a/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php
+++ b/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php
@@ -7,27 +7,31 @@
*/
namespace OCA\Files_Trashbin\BackgroundJob;
+use OC\Files\SetupManager;
+use OC\Files\View;
use OCA\Files_Trashbin\Expiration;
use OCA\Files_Trashbin\Helper;
use OCA\Files_Trashbin\Trashbin;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\TimedJob;
use OCP\IAppConfig;
+use OCP\IUser;
use OCP\IUserManager;
use Psr\Log\LoggerInterface;
class ExpireTrash extends TimedJob {
+ private const THIRTY_MINUTES = 30 * 60;
public function __construct(
private IAppConfig $appConfig,
private IUserManager $userManager,
private Expiration $expiration,
private LoggerInterface $logger,
- ITimeFactory $time
+ private SetupManager $setupManager,
+ ITimeFactory $time,
) {
parent::__construct($time);
- // Run once per 30 minutes
- $this->setInterval(60 * 30);
+ $this->setInterval(self::THIRTY_MINUTES);
}
protected function run($argument) {
@@ -41,44 +45,47 @@ class ExpireTrash extends TimedJob {
return;
}
- $stopTime = time() + 60 * 30; // Stops after 30 minutes.
- $offset = $this->appConfig->getValueInt('files_trashbin', 'background_job_expire_trash_offset', 0);
- $users = $this->userManager->getSeenUsers($offset);
+ $stopTime = time() + self::THIRTY_MINUTES;
- foreach ($users as $user) {
- try {
+ do {
+ $this->appConfig->clearCache();
+ $offset = $this->appConfig->getValueInt('files_trashbin', 'background_job_expire_trash_offset', 0);
+ $this->appConfig->setValueInt('files_trashbin', 'background_job_expire_trash_offset', $offset + 10);
+
+ $users = $this->userManager->getSeenUsers($offset, 10);
+ $count = 0;
+
+ foreach ($users as $user) {
$uid = $user->getUID();
- if (!$this->setupFS($uid)) {
- continue;
+ $count++;
+
+ try {
+ if ($this->setupFS($user)) {
+ $dirContent = Helper::getTrashFiles('/', $uid, 'mtime');
+ Trashbin::deleteExpiredFiles($dirContent, $uid);
+ }
+ } catch (\Throwable $e) {
+ $this->logger->error('Error while expiring trashbin for user ' . $uid, ['exception' => $e]);
+ } finally {
+ $this->setupManager->tearDown();
}
- $dirContent = Helper::getTrashFiles('/', $uid, 'mtime');
- Trashbin::deleteExpiredFiles($dirContent, $uid);
- } catch (\Throwable $e) {
- $this->logger->error('Error while expiring trashbin for user ' . $user->getUID(), ['exception' => $e]);
}
- $offset++;
+ } while (time() < $stopTime && $count === 10);
- if ($stopTime < time()) {
- $this->appConfig->setValueInt('files_trashbin', 'background_job_expire_trash_offset', $offset);
- \OC_Util::tearDownFS();
- return;
- }
+ if ($count < 10) {
+ $this->appConfig->setValueInt('files_trashbin', 'background_job_expire_trash_offset', 0);
}
-
- $this->appConfig->setValueInt('files_trashbin', 'background_job_expire_trash_offset', 0);
- \OC_Util::tearDownFS();
}
/**
* Act on behalf on trash item owner
*/
- protected function setupFS(string $user): bool {
- \OC_Util::tearDownFS();
- \OC_Util::setupFS($user);
+ protected function setupFS(IUser $user): bool {
+ $this->setupManager->setupForUser($user);
// Check if this user has a trashbin directory
- $view = new \OC\Files\View('/' . $user);
+ $view = new View('/' . $user->getUID());
if (!$view->is_dir('/files_trashbin/files')) {
return false;
}
diff --git a/apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php b/apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php
index 2a860851e99..27adff08ba2 100644
--- a/apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php
+++ b/apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php
@@ -8,6 +8,7 @@
namespace OCA\Files_Trashbin\Tests\BackgroundJob;
+use OC\Files\SetupManager;
use OCA\Files_Trashbin\BackgroundJob\ExpireTrash;
use OCA\Files_Trashbin\Expiration;
use OCP\AppFramework\Utility\ITimeFactory;
@@ -19,23 +20,14 @@ use Psr\Log\LoggerInterface;
use Test\TestCase;
class ExpireTrashTest extends TestCase {
- /** @var IAppConfig&MockObject */
- private $appConfig;
- /** @var IUserManager&MockObject */
- private $userManager;
-
- /** @var Expiration&MockObject */
- private $expiration;
-
- /** @var IJobList&MockObject */
- private $jobList;
-
- /** @var LoggerInterface&MockObject */
- private $logger;
-
- /** @var ITimeFactory&MockObject */
- private $time;
+ private IAppConfig&MockObject $appConfig;
+ private IUserManager&MockObject $userManager;
+ private Expiration&MockObject $expiration;
+ private IJobList&MockObject $jobList;
+ private LoggerInterface&MockObject $logger;
+ private ITimeFactory&MockObject $time;
+ private SetupManager&MockObject $setupManager;
protected function setUp(): void {
parent::setUp();
@@ -45,6 +37,7 @@ class ExpireTrashTest extends TestCase {
$this->expiration = $this->createMock(Expiration::class);
$this->jobList = $this->createMock(IJobList::class);
$this->logger = $this->createMock(LoggerInterface::class);
+ $this->setupManager = $this->createMock(SetupManager::class);
$this->time = $this->createMock(ITimeFactory::class);
$this->time->method('getTime')
@@ -64,7 +57,7 @@ class ExpireTrashTest extends TestCase {
->with('files_trashbin', 'background_job_expire_trash_offset', 0)
->willReturn(0);
- $job = new ExpireTrash($this->appConfig, $this->userManager, $this->expiration, $this->logger, $this->time);
+ $job = new ExpireTrash($this->appConfig, $this->userManager, $this->expiration, $this->logger, $this->setupManager, $this->time);
$job->start($this->jobList);
}
@@ -75,7 +68,7 @@ class ExpireTrashTest extends TestCase {
$this->expiration->expects($this->never())
->method('getMaxAgeAsTimestamp');
- $job = new ExpireTrash($this->appConfig, $this->userManager, $this->expiration, $this->logger, $this->time);
+ $job = new ExpireTrash($this->appConfig, $this->userManager, $this->expiration, $this->logger, $this->setupManager, $this->time);
$job->start($this->jobList);
}
}