Skip to content

Commit 8055ee1

Browse files
Merge pull request #62456 from nextcloud/backport/62425/stable33
[stable33] fix(background-jobs): preserve Snowflake IDs as strings
2 parents 55ae713 + a03cefe commit 8055ee1

3 files changed

Lines changed: 26 additions & 6 deletions

File tree

apps/dav/lib/BackgroundJob/UserStatusAutomation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ protected function setLastRunToNextToggleTime(string $userId, int $timestamp): v
8989

9090
$query->update('jobs')
9191
->set('last_run', $query->createNamedParameter($timestamp, IQueryBuilder::PARAM_INT))
92-
->where($query->expr()->eq('id', $query->createNamedParameter($this->getId(), IQueryBuilder::PARAM_INT)));
92+
->where($query->expr()->eq('id', $query->createNamedParameter($this->getId())));
9393
$query->executeStatement();
9494

9595
$this->logger->debug('Updated user status automation last_run to ' . $timestamp . ' for user ' . $userId);

lib/private/BackgroundJob/JobList.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public function remove(IJob|string $job, mixed $argument = null): void {
112112
public function removeById(string $id): void {
113113
$query = $this->connection->getQueryBuilder();
114114
$query->delete('jobs')
115-
->where($query->expr()->eq('id', $query->createNamedParameter($id, IQueryBuilder::PARAM_INT)));
115+
->where($query->expr()->eq('id', $query->createNamedParameter($id)));
116116
$query->executeStatement();
117117
}
118118

@@ -262,7 +262,7 @@ public function getNext(bool $onlyTimeSensitive = false, ?array $jobClasses = nu
262262
$reset->update('jobs')
263263
->set('reserved_at', $reset->expr()->literal(0, IQueryBuilder::PARAM_INT))
264264
->set('last_checked', $reset->createNamedParameter($this->timeFactory->getTime() + 12 * 3600, IQueryBuilder::PARAM_INT))
265-
->where($reset->expr()->eq('id', $reset->createNamedParameter($row['id'], IQueryBuilder::PARAM_INT)));
265+
->where($reset->expr()->eq('id', $reset->createNamedParameter($row['id'])));
266266
$reset->executeStatement();
267267

268268
// Background job from disabled app, try again.
@@ -354,7 +354,7 @@ public function unlockJob(IJob $job): void {
354354
$query = $this->connection->getQueryBuilder();
355355
$query->update('jobs')
356356
->set('reserved_at', $query->expr()->literal(0, IQueryBuilder::PARAM_INT))
357-
->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), IQueryBuilder::PARAM_INT)));
357+
->where($query->expr()->eq('id', $query->createNamedParameter($job->getId())));
358358
$query->executeStatement();
359359
}
360360

@@ -379,7 +379,7 @@ public function setExecutionTime(IJob $job, $timeTaken): void {
379379
$query->update('jobs')
380380
->set('execution_duration', $query->createNamedParameter($timeTaken, IQueryBuilder::PARAM_INT))
381381
->set('reserved_at', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT))
382-
->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), IQueryBuilder::PARAM_INT)));
382+
->where($query->expr()->eq('id', $query->createNamedParameter($job->getId())));
383383
$query->executeStatement();
384384
}
385385

@@ -389,7 +389,7 @@ public function resetBackgroundJob(IJob $job): void {
389389
$query->update('jobs')
390390
->set('last_run', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT))
391391
->set('reserved_at', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT))
392-
->where($query->expr()->eq('id', $query->createNamedParameter($job->getId()), IQueryBuilder::PARAM_INT));
392+
->where($query->expr()->eq('id', $query->createNamedParameter($job->getId())));
393393
$query->executeStatement();
394394
}
395395

tests/lib/BackgroundJob/JobListTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,26 @@ public function testSetLastRun(): void {
272272
$this->assertLessThanOrEqual($timeEnd, $addedJob->getLastRun());
273273
}
274274

275+
public function testRemoveByIdWithSnowflakeId(): void {
276+
$this->instance->add(new TestJob(), 'remove-by-id');
277+
$job = $this->instance->getJobs(null, 1, 0)[0];
278+
279+
$this->instance->removeById($job->getId());
280+
281+
$this->assertNull($this->instance->getById($job->getId()));
282+
}
283+
284+
public function testResetBackgroundJobWithSnowflakeId(): void {
285+
$this->instance->add(new TestJob(), 'reset');
286+
$job = $this->instance->getJobs(null, 1, 0)[0];
287+
288+
$this->instance->resetBackgroundJob($job);
289+
290+
$row = $this->instance->getDetailsById($job->getId());
291+
$this->assertSame('0', (string)$row['last_run']);
292+
$this->assertSame('0', (string)$row['reserved_at']);
293+
}
294+
275295
public function testHasReservedJobs(): void {
276296
$this->clearJobsList();
277297

0 commit comments

Comments
 (0)