|
1 | 1 | import { json } from "@remix-run/server-runtime"; |
2 | | -import { DequeuedMessage, DevDequeueRequestBody, MachineResources } from "@trigger.dev/core/v3"; |
3 | | -import { BackgroundWorkerId } from "@trigger.dev/core/v3/isomorphic"; |
4 | | -import { env } from "~/env.server"; |
| 2 | +import { DevDequeueRequestBody } from "@trigger.dev/core/v3"; |
5 | 3 | import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server"; |
6 | 4 | import { engine } from "~/v3/runEngine.server"; |
7 | 5 |
|
8 | 6 | const { action } = createActionApiRoute( |
9 | 7 | { |
10 | | - body: DevDequeueRequestBody, |
| 8 | + body: DevDequeueRequestBody, // Even though we don't use it, we need to keep it for backwards compatibility |
11 | 9 | maxContentLength: 1024 * 10, // 10KB |
12 | 10 | method: "POST", |
13 | 11 | }, |
14 | | - async ({ authentication, body }) => { |
15 | | - //we won't return more runs than this in one API call |
16 | | - let maxDequeueCount = env.DEV_DEQUEUE_MAX_RUNS_PER_PULL; |
17 | | - |
18 | | - //we can't use more than the max resources |
19 | | - const availableResources = body.maxResources ?? { |
20 | | - cpu: 8, |
21 | | - memory: 16, |
22 | | - }; |
23 | | - |
24 | | - let dequeuedMessages: DequeuedMessage[] = []; |
25 | | - |
26 | | - //we need to check the current worker, because a run might have been locked to it |
27 | | - const workers = body.oldWorkers.concat(body.currentWorker); |
28 | | - |
29 | | - //first we want to clear out old runs |
30 | | - for (const worker of workers) { |
31 | | - //dequeue |
32 | | - const latestResult = await engine.dequeueFromBackgroundWorkerMasterQueue({ |
33 | | - consumerId: authentication.environment.id, |
34 | | - //specific version |
35 | | - backgroundWorkerId: BackgroundWorkerId.toId(worker), |
36 | | - maxRunCount: maxDequeueCount, |
37 | | - maxResources: availableResources, |
38 | | - }); |
39 | | - |
40 | | - //add runs to the array |
41 | | - dequeuedMessages.push(...latestResult); |
42 | | - |
43 | | - //update availableResources |
44 | | - const consumedResources = latestResult.reduce( |
45 | | - (acc, r) => { |
46 | | - return { |
47 | | - cpu: acc.cpu + r.run.machine.cpu, |
48 | | - memory: acc.memory + r.run.machine.memory, |
49 | | - }; |
50 | | - }, |
51 | | - { cpu: 0, memory: 0 } |
52 | | - ); |
53 | | - updateAvailableResources(availableResources, consumedResources); |
54 | | - |
55 | | - //update maxDequeueCount |
56 | | - maxDequeueCount -= latestResult.length; |
57 | | - |
58 | | - //if we have no resources left, we exit the loop |
59 | | - if (!hasAvailableResources(availableResources)) break; |
60 | | - //we've already dequeued the max number of runs |
61 | | - if (maxDequeueCount <= 0) break; |
62 | | - } |
63 | | - |
64 | | - //dequeue from the current version if we still have space |
65 | | - if (hasAvailableResources(availableResources) && maxDequeueCount > 0) { |
66 | | - const latestResult = await engine.dequeueFromEnvironmentMasterQueue({ |
67 | | - consumerId: authentication.environment.id, |
68 | | - //current dev version (no specific version specified) |
69 | | - environmentId: authentication.environment.id, |
70 | | - maxRunCount: maxDequeueCount, |
71 | | - maxResources: availableResources, |
72 | | - }); |
73 | | - dequeuedMessages.push(...latestResult); |
74 | | - } |
| 12 | + async ({ authentication }) => { |
| 13 | + const dequeuedMessages = await engine.dequeueFromEnvironmentWorkerQueue({ |
| 14 | + consumerId: authentication.environment.id, |
| 15 | + environmentId: authentication.environment.id, |
| 16 | + }); |
75 | 17 |
|
76 | 18 | return json({ dequeuedMessages }, { status: 200 }); |
77 | 19 | } |
78 | 20 | ); |
79 | 21 |
|
80 | | -function updateAvailableResources( |
81 | | - availableResources: MachineResources, |
82 | | - resources: MachineResources |
83 | | -) { |
84 | | - availableResources.cpu -= resources.cpu; |
85 | | - availableResources.memory -= resources.memory; |
86 | | -} |
87 | | - |
88 | | -function hasAvailableResources(availableResources: MachineResources) { |
89 | | - return availableResources.cpu > 0 && availableResources.memory > 0; |
90 | | -} |
91 | | - |
92 | 22 | export { action }; |
0 commit comments