Skip to content

Commit b6ca4ce

Browse files
committed
Use system resources for throttling
1 parent ddc3d1b commit b6ca4ce

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

apps/media-server/src/routes/video.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@ import type { VideoMetadata } from "../lib/job-manager";
1919
import {
2020
canAcceptNewVideoProcess,
2121
createJob,
22-
decrementActiveVideoProcesses,
2322
deleteJob,
2423
generateJobId,
2524
getActiveVideoProcessCount,
2625
getAllJobs,
2726
getJob,
2827
getJobProgress,
2928
getMaxConcurrentVideoProcesses,
30-
incrementActiveVideoProcesses,
29+
getSystemResources,
3130
sendWebhook,
3231
updateJob,
3332
} from "../lib/job-manager";
@@ -77,14 +76,17 @@ function isTimeoutError(err: unknown): boolean {
7776

7877
video.get("/status", (c) => {
7978
const jobs = getAllJobs();
79+
const resources = getSystemResources();
8080
return c.json({
8181
instanceId: getInstanceId(),
8282
pid: process.pid,
8383
activeVideoProcesses: getActiveVideoProcessCount(),
8484
maxConcurrentVideoProcesses: getMaxConcurrentVideoProcesses(),
85+
effectiveMaxVideoProcesses: resources.effectiveMax,
8586
activeProbeProcesses: getActiveProbeProcessCount(),
8687
canAcceptNewVideoProcess: canAcceptNewVideoProcess(),
8788
canAcceptNewProbeProcess: canAcceptNewProbeProcess(),
89+
resources,
8890
jobCount: jobs.length,
8991
jobs: jobs.map((j) => ({
9092
jobId: j.jobId,
@@ -239,17 +241,21 @@ video.post("/process", async (c) => {
239241

240242
if (!canAcceptNewVideoProcess()) {
241243
const activeVideoProcesses = getActiveVideoProcessCount();
242-
const maxConcurrentVideoProcesses = getMaxConcurrentVideoProcesses();
244+
const resources = getSystemResources();
243245
const jobs = getAllJobs();
244246
return c.json(
245247
{
246248
error: "Server is busy",
247249
code: "SERVER_BUSY",
248-
details: `Too many concurrent video processing jobs (${activeVideoProcesses}/${maxConcurrentVideoProcesses}), please retry later`,
250+
details: resources.throttleReason
251+
? `Throttled: ${resources.throttleReason} (${activeVideoProcesses}/${resources.effectiveMax} active)`
252+
: `Too many concurrent video processing jobs (${activeVideoProcesses}/${resources.effectiveMax}), please retry later`,
249253
instanceId: getInstanceId(),
250254
pid: process.pid,
251255
activeVideoProcesses,
252-
maxConcurrentVideoProcesses,
256+
maxConcurrentVideoProcesses: getMaxConcurrentVideoProcesses(),
257+
effectiveMaxVideoProcesses: resources.effectiveMax,
258+
resources,
253259
jobCount: jobs.length,
254260
jobs: jobs.map((job) => ({
255261
jobId: job.jobId,
@@ -275,8 +281,6 @@ video.post("/process", async (c) => {
275281
const jobId = generateJobId();
276282
const job = createJob(jobId, videoId, userId, webhookUrl);
277283

278-
incrementActiveVideoProcesses();
279-
280284
processVideoAsync(
281285
job.jobId,
282286
videoUrl,
@@ -494,7 +498,6 @@ async function processVideoAsync(
494498
): Promise<void> {
495499
const job = getJob(jobId);
496500
if (!job) {
497-
decrementActiveVideoProcesses();
498501
return;
499502
}
500503

@@ -619,8 +622,6 @@ async function processVideoAsync(
619622
}
620623
await repairedTempFile?.cleanup();
621624
await lastResortRepairFile?.cleanup();
622-
} finally {
623-
decrementActiveVideoProcesses();
624625
}
625626
}
626627

0 commit comments

Comments
 (0)