@@ -57,6 +57,7 @@ export class DefaultQueueManager implements QueueManager {
5757 ) : Promise < QueueProperties > {
5858 let queueName : string ;
5959 let lockedQueueId : string | undefined ;
60+ let resolvedRegion : string | undefined ;
6061
6162 // Determine queue name based on lockToVersion and provided options
6263 if ( lockedBackgroundWorker ) {
@@ -83,6 +84,17 @@ export class DefaultQueueManager implements QueueManager {
8384 // Use the validated queue name directly
8485 queueName = specifiedQueue . name ;
8586 lockedQueueId = specifiedQueue . id ;
87+
88+ // Get task-level region config for the locked worker
89+ const lockedTask = await this . prisma . backgroundWorkerTask . findFirst ( {
90+ where : {
91+ workerId : lockedBackgroundWorker . id ,
92+ runtimeEnvironmentId : request . environment . id ,
93+ slug : request . taskId ,
94+ } ,
95+ select : { regionConfig : true } ,
96+ } ) ;
97+ resolvedRegion = lockedTask ?. regionConfig ?? undefined ;
8698 } else {
8799 // No specific queue name provided, use the default queue for the task on the locked worker
88100 const lockedTask = await this . prisma . backgroundWorkerTask . findFirst ( {
@@ -121,6 +133,7 @@ export class DefaultQueueManager implements QueueManager {
121133 // Use the task's default queue name
122134 queueName = lockedTask . queue . name ;
123135 lockedQueueId = lockedTask . queue . id ;
136+ resolvedRegion = lockedTask . regionConfig ?? undefined ;
124137 }
125138 } else {
126139 // Task is not locked to a specific version, use regular logic
@@ -131,8 +144,10 @@ export class DefaultQueueManager implements QueueManager {
131144 ) ;
132145 }
133146
134- // Get queue name using the helper for non-locked case (handles provided name or finds default)
135- queueName = await this . getQueueName ( request ) ;
147+ // Get queue name and task-level region using the helper for non-locked case
148+ const queueInfo = await this . _getQueueInfo ( request ) ;
149+ queueName = queueInfo . queueName ;
150+ resolvedRegion = queueInfo . regionConfig ?? undefined ;
136151 }
137152
138153 // Sanitize the final determined queue name once
@@ -148,19 +163,21 @@ export class DefaultQueueManager implements QueueManager {
148163 return {
149164 queueName,
150165 lockedQueueId,
166+ resolvedRegion,
151167 } ;
152168 }
153169
154170 async getQueueName ( request : TriggerTaskRequest ) : Promise < string > {
171+ const { queueName } = await this . _getQueueInfo ( request ) ;
172+ return queueName ;
173+ }
174+
175+ private async _getQueueInfo (
176+ request : TriggerTaskRequest
177+ ) : Promise < { queueName : string ; regionConfig ?: string | null } > {
155178 const { taskId, environment, body } = request ;
156179 const { queue } = body . options ?? { } ;
157180
158- // Use extractQueueName to handle double-wrapped queue objects
159- const queueName = extractQueueName ( queue ) ;
160- if ( queueName ) {
161- return queueName ;
162- }
163-
164181 const defaultQueueName = `task/${ taskId } ` ;
165182
166183 // Find the current worker for the environment
@@ -172,7 +189,9 @@ export class DefaultQueueManager implements QueueManager {
172189 environmentId : environment . id ,
173190 } ) ;
174191
175- return defaultQueueName ;
192+ // Use extractQueueName to handle double-wrapped queue objects
193+ const queueName = extractQueueName ( queue ) ;
194+ return { queueName : queueName ?? defaultQueueName } ;
176195 }
177196
178197 const task = await this . prisma . backgroundWorkerTask . findFirst ( {
@@ -192,7 +211,14 @@ export class DefaultQueueManager implements QueueManager {
192211 environmentId : environment . id ,
193212 } ) ;
194213
195- return defaultQueueName ;
214+ const queueName = extractQueueName ( queue ) ;
215+ return { queueName : queueName ?? defaultQueueName } ;
216+ }
217+
218+ // Use specified queue name if provided, otherwise fall back to task's queue
219+ const specifiedQueueName = extractQueueName ( queue ) ;
220+ if ( specifiedQueueName ) {
221+ return { queueName : specifiedQueueName , regionConfig : task . regionConfig } ;
196222 }
197223
198224 if ( ! task . queue ) {
@@ -202,10 +228,13 @@ export class DefaultQueueManager implements QueueManager {
202228 queueConfig : task . queueConfig ,
203229 } ) ;
204230
205- return defaultQueueName ;
231+ return { queueName : defaultQueueName , regionConfig : task . regionConfig } ;
206232 }
207233
208- return task . queue . name ?? defaultQueueName ;
234+ return {
235+ queueName : task . queue . name ?? defaultQueueName ,
236+ regionConfig : task . regionConfig ,
237+ } ;
209238 }
210239
211240 async validateQueueLimits (
0 commit comments