Skip to content

Commit e75319c

Browse files
committed
Remove releaseConcurrency and releaseConcurrencyOnWaitpoint
Also removed deadlock detection, and added environment burst concurrency
1 parent 018baa7 commit e75319c

56 files changed

Lines changed: 611 additions & 1560 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/webapp/app/env.server.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ const EnvironmentSchema = z.object({
200200
PUBSUB_REDIS_CLUSTER_MODE_ENABLED: z.string().default("0"),
201201

202202
DEFAULT_ENV_EXECUTION_CONCURRENCY_LIMIT: z.coerce.number().int().default(100),
203+
DEFAULT_ENV_EXECUTION_CONCURRENCY_BURST_FACTOR: z.coerce.number().default(1.0),
203204
DEFAULT_ORG_EXECUTION_CONCURRENCY_LIMIT: z.coerce.number().int().default(300),
204205
DEFAULT_DEV_ENV_EXECUTION_ATTEMPTS: z.coerce.number().int().positive().default(1),
205206

apps/webapp/app/presenters/v3/QueueListPresenter.server.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ export class QueueListPresenter extends BasePresenter {
116116
concurrencyLimit: true,
117117
type: true,
118118
paused: true,
119-
releaseConcurrencyOnWaitpoint: true,
120119
},
121120
orderBy: {
122121
orderableName: "asc",
@@ -146,7 +145,6 @@ export class QueueListPresenter extends BasePresenter {
146145
queued: results[0][queue.name] ?? 0,
147146
concurrencyLimit: queue.concurrencyLimit ?? null,
148147
paused: queue.paused,
149-
releaseConcurrencyOnWaitpoint: queue.releaseConcurrencyOnWaitpoint,
150148
})
151149
);
152150
}

apps/webapp/app/presenters/v3/QueueRetrievePresenter.server.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ export class QueueRetrievePresenter extends BasePresenter {
7676
queued: results[0]?.[queue.name] ?? 0,
7777
concurrencyLimit: queue.concurrencyLimit ?? null,
7878
paused: queue.paused,
79-
releaseConcurrencyOnWaitpoint: queue.releaseConcurrencyOnWaitpoint,
8079
}),
8180
};
8281
}
@@ -106,7 +105,6 @@ export function toQueueItem(data: {
106105
queued: number;
107106
concurrencyLimit: number | null;
108107
paused: boolean;
109-
releaseConcurrencyOnWaitpoint: boolean;
110108
}): QueueItem {
111109
return {
112110
id: data.friendlyId,
@@ -117,6 +115,7 @@ export function toQueueItem(data: {
117115
queued: data.queued,
118116
concurrencyLimit: data.concurrencyLimit,
119117
paused: data.paused,
120-
releaseConcurrencyOnWaitpoint: data.releaseConcurrencyOnWaitpoint,
118+
// TODO: This needs to be removed but keeping this here for now to avoid breaking existing clients
119+
releaseConcurrencyOnWaitpoint: true,
121120
};
122121
}

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues/route.tsx

Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@ import {
1010
import { DialogClose } from "@radix-ui/react-dialog";
1111
import {
1212
Form,
13-
useNavigate,
1413
useNavigation,
1514
useRevalidator,
1615
useSearchParams,
17-
type MetaFunction,
16+
type MetaFunction
1817
} from "@remix-run/react";
1918
import { type ActionFunctionArgs, type LoaderFunctionArgs } from "@remix-run/server-runtime";
2019
import { type RuntimeEnvironmentType } from "@trigger.dev/database";
@@ -34,6 +33,8 @@ import { Button, LinkButton } from "~/components/primitives/Buttons";
3433
import { Callout } from "~/components/primitives/Callout";
3534
import { Dialog, DialogContent, DialogHeader, DialogTrigger } from "~/components/primitives/Dialog";
3635
import { FormButtons } from "~/components/primitives/FormButtons";
36+
import { Header3 } from "~/components/primitives/Headers";
37+
import { Input } from "~/components/primitives/Input";
3738
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
3839
import { PaginationControls } from "~/components/primitives/Pagination";
3940
import { Paragraph } from "~/components/primitives/Paragraph";
@@ -58,6 +59,7 @@ import { useEnvironment } from "~/hooks/useEnvironment";
5859
import { useEventSource } from "~/hooks/useEventSource";
5960
import { useOrganization } from "~/hooks/useOrganizations";
6061
import { useProject } from "~/hooks/useProject";
62+
import { useThrottle } from "~/hooks/useThrottle";
6163
import { redirectWithErrorMessage, redirectWithSuccessMessage } from "~/models/message.server";
6264
import { findProjectBySlug } from "~/models/project.server";
6365
import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server";
@@ -69,9 +71,6 @@ import { docsPath, EnvironmentParamSchema, v3BillingPath } from "~/utils/pathBui
6971
import { PauseEnvironmentService } from "~/v3/services/pauseEnvironment.server";
7072
import { PauseQueueService } from "~/v3/services/pauseQueue.server";
7173
import { useCurrentPlan } from "../_app.orgs.$organizationSlug/route";
72-
import { Header3 } from "~/components/primitives/Headers";
73-
import { Input } from "~/components/primitives/Input";
74-
import { useThrottle } from "~/hooks/useThrottle";
7574

7675
const SearchParamsSchema = z.object({
7776
query: z.string().optional(),
@@ -360,32 +359,6 @@ export default function Page() {
360359
>
361360
Limited by
362361
</TableHeaderCell>
363-
<TableHeaderCell
364-
alignment="right"
365-
tooltip={
366-
<div className="max-w-xs p-1 text-left">
367-
<Paragraph
368-
variant="small"
369-
className="!text-wrap text-text-dimmed"
370-
spacing
371-
>
372-
When a task executing on this queue is paused and waiting for a
373-
waitpoint to complete, the queue will release the concurrency being used
374-
by the run so other runs can be started.
375-
</Paragraph>
376-
<LinkButton
377-
to={docsPath("v3/queues#release-concurrency-on-waitpoint")}
378-
variant="docs/small"
379-
LeadingIcon={BookOpenIcon}
380-
className="mt-3"
381-
>
382-
Read docs
383-
</LinkButton>
384-
</div>
385-
}
386-
>
387-
Release on waitpoint
388-
</TableHeaderCell>
389362
<TableHeaderCell className="w-[1%] pl-24">
390363
<span className="sr-only">Pause/resume</span>
391364
</TableHeaderCell>
@@ -472,12 +445,6 @@ export default function Page() {
472445
>
473446
{queue.concurrencyLimit ? "User" : "Environment"}
474447
</TableCell>
475-
<TableCell
476-
alignment="right"
477-
className={queue.paused ? "opacity-50" : undefined}
478-
>
479-
{queue.releaseConcurrencyOnWaitpoint ? "Yes" : "No"}
480-
</TableCell>
481448
<TableCellMenu
482449
isSticky
483450
visibleButtons={

apps/webapp/app/routes/engine.v1.runs.$runFriendlyId.wait.duration.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ const { action } = createActionApiRoute(
5050
waitpoints: waitpoint.id,
5151
projectId: authentication.environment.project.id,
5252
organizationId: authentication.environment.organization.id,
53-
releaseConcurrency: body.releaseConcurrency,
5453
});
5554

5655
return json({

apps/webapp/app/routes/engine.v1.runs.$runFriendlyId.waitpoints.tokens.$waitpointFriendlyId.wait.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,10 @@ const { action } = createActionApiRoute(
1313
runFriendlyId: z.string(),
1414
waitpointFriendlyId: z.string(),
1515
}),
16-
body: z.object({
17-
releaseConcurrency: z.boolean().optional(),
18-
}),
1916
maxContentLength: 1024 * 10, // 10KB
2017
method: "POST",
2118
},
22-
async ({ authentication, body, params }) => {
19+
async ({ authentication, params }) => {
2320
// Resume tokens are actually just waitpoints
2421
const waitpointId = WaitpointId.toId(params.waitpointFriendlyId);
2522
const runId = RunId.toId(params.runFriendlyId);
@@ -42,7 +39,6 @@ const { action } = createActionApiRoute(
4239
waitpoints: [waitpointId],
4340
projectId: authentication.environment.project.id,
4441
organizationId: authentication.environment.organization.id,
45-
releaseConcurrency: body.releaseConcurrency,
4642
});
4743

4844
return json<WaitForWaitpointTokenResponseBody>(

apps/webapp/app/routes/resources.taskruns.$runParam.debug.ts

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
3131
organizationId: true,
3232
project: true,
3333
maximumConcurrencyLimit: true,
34+
concurrencyLimitBurstFactor: true,
3435
organization: {
3536
select: {
3637
id: true,
@@ -120,10 +121,6 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
120121
run.runtimeEnvironment
121122
);
122123

123-
const releaseConcurrencyBucketKey = `engine:release-concurrency:org:${run.runtimeEnvironment.organizationId}:proj:${run.runtimeEnvironment.project.id}:env:${run.runtimeEnvironment.id}:bucket`;
124-
const releaseConcurrencyQueueKey = `engine:release-concurrency:org:${run.runtimeEnvironment.organizationId}:proj:${run.runtimeEnvironment.project.id}:env:${run.runtimeEnvironment.id}:queue`;
125-
const releaseConcurrencyMetadataKey = `engine:release-concurrency:org:${run.runtimeEnvironment.organizationId}:proj:${run.runtimeEnvironment.project.id}:env:${run.runtimeEnvironment.id}:metadata`;
126-
127124
const withPrefix = (key: string) => `engine:runqueue:${key}`;
128125

129126
const keys = [
@@ -143,22 +140,6 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
143140
label: "Env concurrency limit",
144141
key: withPrefix(envConcurrencyLimitKey),
145142
},
146-
{
147-
label: "Release concurrency bucket",
148-
key: releaseConcurrencyBucketKey,
149-
},
150-
{
151-
label: "Release concurrency queue",
152-
key: releaseConcurrencyQueueKey,
153-
},
154-
{
155-
label: "Release concurrency metadata",
156-
key: releaseConcurrencyMetadataKey,
157-
},
158-
{
159-
label: "Release concurrency releasings",
160-
key: "engine:release-concurrency:releasings",
161-
},
162143
];
163144

164145
return typedjson({

apps/webapp/app/runEngine/concerns/idempotencyKeys.server.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ export class IdempotencyKeyConcern {
8181
projectId: request.environment.projectId,
8282
organizationId: request.environment.organizationId,
8383
tx: this.prisma,
84-
releaseConcurrency: request.body.options?.releaseConcurrency,
8584
});
8685
}
8786
);

apps/webapp/app/runEngine/concerns/queues.server.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ export class DefaultQueueManager implements QueueManager {
2727
): Promise<QueueProperties> {
2828
let queueName: string;
2929
let lockedQueueId: string | undefined;
30-
let lockedQueueReleaseConcurrencyOnWaitpoint: boolean | undefined;
3130

3231
// Determine queue name based on lockToVersion and provided options
3332
if (lockedBackgroundWorker) {
@@ -54,8 +53,6 @@ export class DefaultQueueManager implements QueueManager {
5453
// Use the validated queue name directly
5554
queueName = specifiedQueue.name;
5655
lockedQueueId = specifiedQueue.id;
57-
lockedQueueReleaseConcurrencyOnWaitpoint =
58-
this.engine.shouldReleaseConcurrencyOnWaitpointForQueue(specifiedQueue);
5956
} else {
6057
// No specific queue name provided, use the default queue for the task on the locked worker
6158
const lockedTask = await this.prisma.backgroundWorkerTask.findFirst({
@@ -94,9 +91,6 @@ export class DefaultQueueManager implements QueueManager {
9491
// Use the task's default queue name
9592
queueName = lockedTask.queue.name;
9693
lockedQueueId = lockedTask.queue.id;
97-
lockedQueueReleaseConcurrencyOnWaitpoint =
98-
typeof lockedTask.queue.concurrencyLimit === "undefined" ||
99-
lockedTask.queue.releaseConcurrencyOnWaitpoint;
10094
}
10195
} else {
10296
// Task is not locked to a specific version, use regular logic
@@ -124,7 +118,6 @@ export class DefaultQueueManager implements QueueManager {
124118
return {
125119
queueName,
126120
lockedQueueId,
127-
lockedQueueReleaseConcurrencyOnWaitpoint,
128121
};
129122
}
130123

0 commit comments

Comments
 (0)