Skip to content

Commit b43cdda

Browse files
authored
Fixup after retry and job option changes in swift-jobs (#23)
* Fixup after retry and job option changes * Change from PR comments
1 parent d5ace87 commit b43cdda

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

Sources/JobsPostgres/PostgresJobsQueue.swift

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,23 @@ public final class PostgresJobQueue: JobQueueDriver {
5151
case remove
5252
}
5353

54+
/// Options for job pushed to queue
55+
public struct JobOptions: JobOptionsProtocol {
56+
/// Delay running job until
57+
public var delayUntil: Date
58+
59+
/// Default initializer for JobOptions
60+
public init() {
61+
self.delayUntil = .now
62+
}
63+
64+
/// Initializer for JobOptions
65+
/// - Parameter delayUntil: Whether job execution should be delayed until a later date
66+
public init(delayUntil: Date?) {
67+
self.delayUntil = delayUntil ?? .now
68+
}
69+
}
70+
5471
/// Errors thrown by PostgresJobQueue
5572
public enum PostgresQueueError: Error, CustomStringConvertible {
5673
case failedToAdd
@@ -186,8 +203,8 @@ public final class PostgresJobQueue: JobQueueDriver {
186203
/// - Parameters
187204
/// - id: Job instance ID
188205
/// - jobRequest: Job Request
189-
/// - options: JobOptions
190-
public func retry<Parameters: JobParameters>(_ id: JobID, jobRequest: JobRequest<Parameters>, options: JobOptions) async throws {
206+
/// - options: Job retry options
207+
public func retry<Parameters: JobParameters>(_ id: JobID, jobRequest: JobRequest<Parameters>, options: JobRetryOptions) async throws {
191208
let buffer = try self.jobRegistry.encode(jobRequest: jobRequest)
192209
try await self.client.withTransaction(logger: self.logger) { connection in
193210
try await self.updateJob(id: id, buffer: buffer, connection: connection)

Tests/JobsPostgresTests/JobsTests.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,7 @@ final class JobsTests: XCTestCase {
6565
),
6666
numWorkers: numWorkers,
6767
logger: logger,
68-
options: .init(
69-
maximumBackoff: 0.01,
70-
maxJitter: 0.01,
71-
minJitter: 0.0
72-
)
68+
options: .init(defaultRetryStrategy: .exponentialJitter(maxBackoff: 0.01, maxJitter: 0.01))
7369
)
7470
}
7571

@@ -257,7 +253,10 @@ final class JobsTests: XCTestCase {
257253
let expectation = XCTestExpectation(description: "TestJob.execute was called", expectedFulfillmentCount: 4)
258254
struct FailedError: Error {}
259255
try await self.testJobQueue(numWorkers: 1) { jobQueue in
260-
jobQueue.registerJob(parameters: TestParameters.self, maxRetryCount: 3) { _, _ in
256+
jobQueue.registerJob(
257+
parameters: TestParameters.self,
258+
retryStrategy: .exponentialJitter(maxAttempts: 3, maxBackoff: 0.01, maxJitter: 0.01)
259+
) { _, _ in
261260
expectation.fulfill()
262261
throw FailedError()
263262
}
@@ -281,7 +280,10 @@ final class JobsTests: XCTestCase {
281280
let currentJobTryCount: NIOLockedValueBox<Int> = .init(0)
282281
struct FailedError: Error {}
283282
try await self.testJobQueue(numWorkers: 1) { jobQueue in
284-
jobQueue.registerJob(parameters: TestParameters.self, maxRetryCount: 3) { _, _ in
283+
jobQueue.registerJob(
284+
parameters: TestParameters.self,
285+
retryStrategy: .exponentialJitter(maxAttempts: 3, maxBackoff: 0.01, maxJitter: 0.01)
286+
) { _, _ in
285287
defer {
286288
currentJobTryCount.withLockedValue {
287289
$0 += 1

0 commit comments

Comments
 (0)