Skip to content

Commit bfad336

Browse files
Bump worker drain timeout (#1930)
Co-authored-by: rosetta-livekit-bot[bot] <282703043+rosetta-livekit-bot[bot]@users.noreply.github.com>
1 parent fee7bd3 commit bfad336

2 files changed

Lines changed: 15 additions & 2 deletions

File tree

.changeset/slow-bikes-drain.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@livekit/agents': patch
3+
---
4+
5+
Increase the default worker drain timeout to one hour.

agents/src/worker.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { version } from './version.js';
3535
const MAX_RECONNECT_ATTEMPTS = 10;
3636
const ASSIGNMENT_TIMEOUT = 7.5 * 1000;
3737
const UPDATE_LOAD_INTERVAL = 2.5 * 1000;
38+
const DRAIN_TIMEOUT = 60 * 60 * 1000;
3839
const PROJECT_TYPE = 'nodejs';
3940

4041
let localEotRunnerRegistered = false;
@@ -159,6 +160,7 @@ export class ServerOptions {
159160
loadFunc: (worker: AgentServer) => Promise<number>;
160161
loadThreshold: number;
161162
numIdleProcesses: number;
163+
drainTimeout: number;
162164
shutdownProcessTimeout: number;
163165
initializeProcessTimeout: number;
164166
permissions: WorkerPermissions;
@@ -185,6 +187,7 @@ export class ServerOptions {
185187
loadFunc = defaultCpuLoad,
186188
loadThreshold = undefined,
187189
numIdleProcesses = undefined,
190+
drainTimeout = DRAIN_TIMEOUT,
188191
shutdownProcessTimeout = 60 * 1000,
189192
initializeProcessTimeout = 10 * 1000,
190193
permissions = new WorkerPermissions(),
@@ -215,6 +218,8 @@ export class ServerOptions {
215218
/** When the load exceeds this threshold, the worker will be marked as unavailable. */
216219
loadThreshold?: number;
217220
numIdleProcesses?: number;
221+
/** Number of milliseconds to wait for current jobs to finish upon shutdown. */
222+
drainTimeout?: number;
218223
shutdownProcessTimeout?: number;
219224
initializeProcessTimeout?: number;
220225
permissions?: WorkerPermissions;
@@ -254,6 +259,7 @@ export class ServerOptions {
254259
this.loadFunc = loadFunc;
255260
this.loadThreshold = simulation ? Infinity : loadThreshold || Default.loadThreshold(production);
256261
this.numIdleProcesses = numIdleProcesses || Default.numIdleProcesses(production);
262+
this.drainTimeout = drainTimeout;
257263
this.shutdownProcessTimeout = shutdownProcessTimeout;
258264
this.initializeProcessTimeout = initializeProcessTimeout;
259265
this.permissions = permissions;
@@ -539,9 +545,11 @@ export class AgentServer {
539545

540546
const promises = [joinJobs()];
541547

542-
if (timeout) {
548+
const timeoutMs = timeout ?? this.#opts.drainTimeout;
549+
550+
if (timeoutMs) {
543551
promises.push(
544-
rejectOnAbort(AbortSignal.timeout(timeout)).catch(() => {
552+
rejectOnAbort(AbortSignal.timeout(timeoutMs)).catch(() => {
545553
throw new WorkerError('timed out draining');
546554
}),
547555
);

0 commit comments

Comments
 (0)