@@ -6,6 +6,7 @@ import { bootWordPressAndRequestHandler, type WordPressInstallMode } from "@wp-p
66import { dependenciesTotalSize , init } from "../../../node_modules/@php-wasm/web-8-5/asyncify/php_8_5.js"
77import phpWasmModule from "../../../node_modules/@php-wasm/web-8-5/asyncify/8_5_8/php_8_5.wasm"
88import { CLOUDFLARE_RUNTIME_HEALTH_MARKER , CLOUDFLARE_RUNTIME_HEALTH_SCHEMA , cloudflareRuntimeHealthResponse } from "./health-envelope.js"
9+ import { leaseRetryDelayMs } from "./lease-retry.js"
910import { routeWorkerRequest } from "./request-routing.js"
1011import { toFetchResponse , toPHPRequest } from "./request-translation.js"
1112import { deriveWordPressAuthConstants , type WordPressAuthConstant } from "./wordpress-auth.js"
@@ -228,13 +229,15 @@ async function coordinatorCall<T>(coordinator: DurableObjectStub, requestUrl: st
228229async function acquireLease ( coordinator : DurableObjectStub , requestUrl : string ) : Promise < Lease > {
229230 const deadline = Date . now ( ) + LEASE_ACQUISITION_TIMEOUT_MS
230231 let lastError : CoordinatorRequestError | undefined
231- while ( Date . now ( ) < deadline ) {
232+ while ( true ) {
233+ const remainingMs = deadline - Date . now ( )
234+ if ( remainingMs <= 0 ) break
232235 try {
233236 return await coordinatorCall < Lease > ( coordinator , requestUrl , "begin" , { } )
234237 } catch ( error ) {
235238 if ( ! ( error instanceof CoordinatorRequestError ) || error . status !== 409 ) throw error
236239 lastError = error
237- await new Promise ( ( resolve ) => setTimeout ( resolve , Math . min ( 250 , Math . max ( 25 , ( error . retryAfter ?? 1 ) * 100 ) ) ) )
240+ await new Promise ( ( resolve ) => setTimeout ( resolve , leaseRetryDelayMs ( error . retryAfter , deadline - Date . now ( ) ) ) )
238241 }
239242 }
240243 throw new Error ( `Timed out waiting for the canonical WordPress lease${ lastError ? `: ${ lastError . message } ` : "." } ` )
0 commit comments