@@ -86,6 +86,10 @@ async function executeJobs(queue: string | undefined): Promise<void> {
86
86
}
87
87
}
88
88
89
+ function enforceMaxDelay ( maxDelay : number | undefined , delay : number ) : number {
90
+ return maxDelay !== undefined ? Math . min ( delay , maxDelay ) : delay
91
+ }
92
+
89
93
function addDelay (
90
94
timestamp : number | undefined ,
91
95
currentAttempts : number ,
@@ -97,6 +101,7 @@ function addDelay(
97
101
const backOff = classPayload . backoff
98
102
const backoffConfig = classPayload . backoffConfig
99
103
const jitter = backoffConfig ?. jitter
104
+ const maxDelay = backoffConfig ?. maxDelay ? meilisecondsToSeconds ( backoffConfig . maxDelay ) : undefined
100
105
101
106
// Fixed backoff strategy logic
102
107
if ( backoffConfig && backoffConfig . strategy === 'fixed' ) {
@@ -106,7 +111,7 @@ function addDelay(
106
111
delay = applyJitter ( delay , jitter )
107
112
}
108
113
109
- return effectiveTimestamp + delay
114
+ return effectiveTimestamp + enforceMaxDelay ( maxDelay , delay )
110
115
}
111
116
112
117
// Exponential backoff logic
@@ -117,7 +122,7 @@ function addDelay(
117
122
delay = applyJitter ( delay , jitter )
118
123
}
119
124
120
- return effectiveTimestamp + delay
125
+ return effectiveTimestamp + enforceMaxDelay ( maxDelay , delay )
121
126
}
122
127
123
128
// Linear backoff logic
@@ -128,19 +133,19 @@ function addDelay(
128
133
delay = applyJitter ( delay , jitter )
129
134
}
130
135
131
- return effectiveTimestamp + delay
136
+ return effectiveTimestamp + enforceMaxDelay ( maxDelay , delay )
132
137
}
133
138
134
139
// Backoff as an array of delays (in seconds), convert to milliseconds
135
140
if ( Array . isArray ( backOff ) ) {
136
- const backOffValueInMeliseconds = backOff [ currentAttempts ] || 0
141
+ const backOffValueInMilliseconds = backOff [ currentAttempts ] || 0
137
142
138
143
if ( jitter ?. enabled ) {
139
- const delayWithJitter = applyJitter ( backOffValueInMeliseconds , jitter )
140
- return effectiveTimestamp + delayWithJitter
144
+ const delayWithJitter = applyJitter ( backOffValueInMilliseconds , jitter )
145
+ return effectiveTimestamp + enforceMaxDelay ( maxDelay , delayWithJitter )
141
146
}
142
147
143
- return effectiveTimestamp + meilisecondsToSeconds ( backOffValueInMeliseconds )
148
+ return effectiveTimestamp + enforceMaxDelay ( maxDelay , meilisecondsToSeconds ( backOffValueInMilliseconds ) )
144
149
}
145
150
146
151
// Backoff as a single number (exponential or linear backoff), convert to milliseconds
@@ -149,14 +154,14 @@ function addDelay(
149
154
150
155
if ( jitter ?. enabled ) {
151
156
const delayWithJitter = applyJitter ( backoffInMilliseconds , jitter )
152
- return effectiveTimestamp + delayWithJitter
157
+ return effectiveTimestamp + enforceMaxDelay ( maxDelay , delayWithJitter )
153
158
}
154
-
155
- return effectiveTimestamp + meilisecondsToSeconds ( backoffInMilliseconds )
159
+
160
+ return effectiveTimestamp + enforceMaxDelay ( maxDelay , meilisecondsToSeconds ( backoffInMilliseconds ) )
156
161
}
157
162
158
- // let's default the retry delay to 3 seconds if no backoff is configured
159
- return effectiveTimestamp + 10
163
+ // Default to a 10-second retry delay if no backoff is configured
164
+ return effectiveTimestamp + enforceMaxDelay ( maxDelay , 10 )
160
165
}
161
166
162
167
function meilisecondsToSeconds ( meiliseconds : number ) : number {
0 commit comments