From dff1d2eb120122934d40ab5c8f9d67118ba6539d Mon Sep 17 00:00:00 2001 From: Sambhav Jain <136801346+DarkLord017@users.noreply.github.com> Date: Sat, 18 Oct 2025 18:17:02 +0530 Subject: [PATCH] feat(upload): add exponential backoff to retry logic --- packages/synapse-sdk/src/storage/context.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/synapse-sdk/src/storage/context.ts b/packages/synapse-sdk/src/storage/context.ts index 15f5294..b108195 100644 --- a/packages/synapse-sdk/src/storage/context.ts +++ b/packages/synapse-sdk/src/storage/context.ts @@ -1015,7 +1015,9 @@ export class StorageContext { // Poll for piece to be "parked" (ready) const maxWaitTime = TIMING_CONSTANTS.PIECE_PARKING_TIMEOUT_MS - const pollInterval = TIMING_CONSTANTS.PIECE_PARKING_POLL_INTERVAL_MS + const baseDelay = TIMING_CONSTANTS.PIECE_PARKING_POLL_INTERVAL_MS + const maxDelay = 10_000 + let attempt = 0 const startTime = Date.now() let pieceReady = false @@ -1026,10 +1028,12 @@ export class StorageContext { pieceReady = true break } catch { - // Piece not ready yet, wait and retry if we haven't exceeded timeout - if (Date.now() - startTime + pollInterval < maxWaitTime) { - await new Promise((resolve) => setTimeout(resolve, pollInterval)) - } + attempt++ + const backoff = Math.min(baseDelay * 2 ** attempt, maxDelay) + const jitter = Math.random() * backoff * 0.2 + const delay = backoff + jitter + if (Date.now() - startTime + delay >= maxWaitTime) break + await new Promise((resolve) => setTimeout(resolve, delay)) } } performance.mark('synapse:findPiece-end')