Skip to content

Commit c80331c

Browse files
committed
fix: Catch exceptions when expiring trashbin
Signed-off-by: Louis Chemineau <louis@chmn.me>
1 parent 9677cb8 commit c80331c

File tree

3 files changed

+29
-12
lines changed

3 files changed

+29
-12
lines changed

apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414
use OCP\BackgroundJob\TimedJob;
1515
use OCP\IAppConfig;
1616
use OCP\IUserManager;
17+
use Psr\Log\LoggerInterface;
1718

1819
class ExpireTrash extends TimedJob {
1920
public function __construct(
2021
private IAppConfig $appConfig,
2122
private IUserManager $userManager,
2223
private Expiration $expiration,
24+
private LoggerInterface $logger,
2325
ITimeFactory $time,
2426
) {
2527
parent::__construct($time);
@@ -43,12 +45,16 @@ protected function run($argument) {
4345
$users = $this->userManager->getSeenUsers($offset);
4446

4547
foreach ($users as $user) {
46-
$uid = $user->getUID();
47-
if (!$this->setupFS($uid)) {
48-
continue;
48+
try {
49+
$uid = $user->getUID();
50+
if (!$this->setupFS($uid)) {
51+
continue;
52+
}
53+
$dirContent = Helper::getTrashFiles('/', $uid, 'mtime');
54+
Trashbin::deleteExpiredFiles($dirContent, $uid);
55+
} catch (\Throwable $e) {
56+
$this->logger->error('Error while expiring trashbin for user ' . $user->getUID(), ['exception' => $e]);
4957
}
50-
$dirContent = Helper::getTrashFiles('/', $uid, 'mtime');
51-
Trashbin::deleteExpiredFiles($dirContent, $uid);
5258

5359
$offset++;
5460

apps/files_trashbin/lib/Command/ExpireTrash.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use OCA\Files_Trashbin\Trashbin;
1313
use OCP\IUser;
1414
use OCP\IUserManager;
15+
use Psr\Log\LoggerInterface;
1516
use Symfony\Component\Console\Command\Command;
1617
use Symfony\Component\Console\Helper\ProgressBar;
1718
use Symfony\Component\Console\Input\InputArgument;
@@ -25,6 +26,7 @@ class ExpireTrash extends Command {
2526
* @param Expiration|null $expiration
2627
*/
2728
public function __construct(
29+
private LoggerInterface $logger,
2830
private ?IUserManager $userManager = null,
2931
private ?Expiration $expiration = null,
3032
) {
@@ -77,12 +79,16 @@ protected function execute(InputInterface $input, OutputInterface $output): int
7779
}
7880

7981
public function expireTrashForUser(IUser $user) {
80-
$uid = $user->getUID();
81-
if (!$this->setupFS($uid)) {
82-
return;
82+
try {
83+
$uid = $user->getUID();
84+
if (!$this->setupFS($uid)) {
85+
return;
86+
}
87+
$dirContent = Helper::getTrashFiles('/', $uid, 'mtime');
88+
Trashbin::deleteExpiredFiles($dirContent, $uid);
89+
} catch (\Throwable $e) {
90+
$this->logger->error('Error while expiring trashbin for user ' . $user->getUID(), ['exception' => $e]);
8391
}
84-
$dirContent = Helper::getTrashFiles('/', $uid, 'mtime');
85-
Trashbin::deleteExpiredFiles($dirContent, $uid);
8692
}
8793

8894
/**

apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use OCP\IAppConfig;
1515
use OCP\IUserManager;
1616
use PHPUnit\Framework\MockObject\MockObject;
17+
use Psr\Log\LoggerInterface;
1718
use Test\TestCase;
1819

1920
class ExpireTrashTest extends TestCase {
@@ -29,6 +30,9 @@ class ExpireTrashTest extends TestCase {
2930
/** @var IJobList&MockObject */
3031
private $jobList;
3132

33+
/** @var LoggerInterface&MockObject */
34+
private $logger;
35+
3236
/** @var ITimeFactory&MockObject */
3337
private $time;
3438

@@ -39,6 +43,7 @@ protected function setUp(): void {
3943
$this->userManager = $this->createMock(IUserManager::class);
4044
$this->expiration = $this->createMock(Expiration::class);
4145
$this->jobList = $this->createMock(IJobList::class);
46+
$this->logger = $this->createMock(IJobList::class);
4247

4348
$this->time = $this->createMock(ITimeFactory::class);
4449
$this->time->method('getTime')
@@ -58,7 +63,7 @@ public function testConstructAndRun(): void {
5863
->with('files_trashbin', 'background_job_expire_trash_offset', 0)
5964
->willReturn(0);
6065

61-
$job = new ExpireTrash($this->appConfig, $this->userManager, $this->expiration, $this->time);
66+
$job = new ExpireTrash($this->appConfig, $this->userManager, $this->expiration, $this->logger, $this->time);
6267
$job->start($this->jobList);
6368
}
6469

@@ -69,7 +74,7 @@ public function testBackgroundJobDeactivated(): void {
6974
$this->expiration->expects($this->never())
7075
->method('getMaxAgeAsTimestamp');
7176

72-
$job = new ExpireTrash($this->appConfig, $this->userManager, $this->expiration, $this->time);
77+
$job = new ExpireTrash($this->appConfig, $this->userManager, $this->expiration, $this->logger, $this->time);
7378
$job->start($this->jobList);
7479
}
7580
}

0 commit comments

Comments
 (0)