mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-18 21:45:31 +09:00
fix(api): dead-letter retired worker task types (#2323)
This commit is contained in:
1 parent
bc40073a02
commit
aa267b54ec
8 files changed
+337
-5
No files matched your search
@@ -5,6 +5,7 @@ import type {APIWorkerLaneName, APIWorkerMode} from '../config/APIConfig';
|
||||
interface LaneSettings {
|
||||
readonly consumerName: string;
|
||||
readonly tasks: ReadonlyArray<string>;
|
||||
readonly retiredTasks: ReadonlyArray<string>;
|
||||
readonly concurrency: number;
|
||||
readonly maxAckPending: number;
|
||||
readonly ackWaitMs: number;
|
||||
@@ -15,6 +16,7 @@ const LANE_CONFIG = {
|
||||
realtime: {
|
||||
consumerName: 'workers_realtime',
|
||||
tasks: ['handleMentions', 'handleMentionChunk'] as const,
|
||||
retiredTasks: [],
|
||||
concurrency: 10,
|
||||
maxAckPending: 50,
|
||||
ackWaitMs: 15000,
|
||||
@@ -23,6 +25,7 @@ const LANE_CONFIG = {
|
||||
unfurl: {
|
||||
consumerName: 'workers_unfurl',
|
||||
tasks: ['extractEmbeds'] as const,
|
||||
retiredTasks: [],
|
||||
concurrency: 20,
|
||||
maxAckPending: 200,
|
||||
ackWaitMs: 30000,
|
||||
@@ -54,6 +57,7 @@ const LANE_CONFIG = {
|
||||
'bulkAddGuildMembers',
|
||||
'bulkBanFileShas',
|
||||
] as const,
|
||||
retiredTasks: ['sendScheduledMessage'],
|
||||
concurrency: 8,
|
||||
maxAckPending: 50,
|
||||
ackWaitMs: 60000,
|
||||
@@ -79,6 +83,7 @@ const LANE_CONFIG = {
|
||||
'syncFileShaBlocklists',
|
||||
'flushUserActivityBuffer',
|
||||
] as const,
|
||||
retiredTasks: [],
|
||||
concurrency: 12,
|
||||
maxAckPending: 100,
|
||||
ackWaitMs: 120000,
|
||||
@@ -92,6 +97,7 @@ interface WorkerLaneDefinition {
|
||||
name: APIWorkerLaneName;
|
||||
consumerName: string;
|
||||
taskTypes: ReadonlyArray<WorkerTaskName>;
|
||||
retiredTaskTypes: ReadonlyArray<string>;
|
||||
concurrency: number;
|
||||
maxAckPending: number;
|
||||
ackWaitMs: number;
|
||||
@@ -111,6 +117,7 @@ function makeLane(name: APIWorkerLaneName): WorkerLaneDefinition {
|
||||
name,
|
||||
consumerName: config.consumerName,
|
||||
taskTypes: config.tasks,
|
||||
retiredTaskTypes: config.retiredTasks,
|
||||
concurrency: config.concurrency,
|
||||
maxAckPending: config.maxAckPending,
|
||||
ackWaitMs: config.ackWaitMs,
|
||||
@@ -160,6 +167,7 @@ function resolveSingleTaskLane(taskName: WorkerTaskName | undefined): WorkerLane
|
||||
name: parentLane.name,
|
||||
consumerName: `worker_${taskName}`,
|
||||
taskTypes: [taskName],
|
||||
retiredTaskTypes: [],
|
||||
concurrency: parentLane.concurrency,
|
||||
maxAckPending: parentLane.maxAckPending,
|
||||
ackWaitMs: parentLane.ackWaitMs,
|
||||
@@ -231,6 +239,12 @@ function validateLaneCompleteness(registeredTasks: Record<string, unknown>): voi
|
||||
if (missingFromRegistry.length > 0) {
|
||||
errors.push(`Lane tasks not found in registry: ${missingFromRegistry.join(', ')}`);
|
||||
}
|
||||
const retiredCollisions = WORKER_LANES.flatMap<string>((lane) => [...lane.retiredTaskTypes]).filter((task) =>
|
||||
registeredTaskNames.has(task),
|
||||
);
|
||||
if (retiredCollisions.length > 0) {
|
||||
errors.push(`Retired tasks registered again: ${retiredCollisions.join(', ')}`);
|
||||
}
|
||||
if (errors.length > 0) {
|
||||
throw new Error(`Worker lane configuration mismatch:\n${errors.join('\n')}`);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user