Skip to content

Commit eb0eb26

Browse files
committed
fix: improved retry logic, improve retry logging
1 parent 4e47544 commit eb0eb26

3 files changed

Lines changed: 12 additions & 7 deletions

File tree

packages/node-sdk/src/cache.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ export default function cache<T>(
3434
if (newValue === undefined) {
3535
return;
3636
}
37+
logger?.info("refreshed features");
38+
3739
cachedValue = newValue;
3840

3941
lastUpdate = Date.now();
@@ -63,7 +65,6 @@ export default function cache<T>(
6365
refreshPromise = update();
6466
}
6567
await refreshPromise;
66-
logger?.info("refreshed cached features");
6768
return get();
6869
};
6970

packages/node-sdk/src/client.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ export class BucketClient {
675675
if (!response.ok || !isObject(response.body) || !response.body.success) {
676676
this.logger.warn(
677677
`invalid response received from server for "${url}"`,
678-
response,
678+
JSON.stringify(response),
679679
);
680680
return false;
681681
}
@@ -713,15 +713,16 @@ export class BucketClient {
713713
!isObject(response.body) ||
714714
!response.body.success
715715
) {
716-
this.logger.warn(
717-
`invalid response received from server for "${url}"`,
718-
response,
716+
throw new Error(
717+
`invalid response received from server for "${url}": ${JSON.stringify(response.body)}`,
719718
);
720-
return undefined;
721719
}
722720
const { success: _, ...result } = response.body;
723721
return result as TResponse;
724722
},
723+
() => {
724+
this.logger.warn("failed to fetch features, will retry");
725+
},
725726
retries,
726727
1000,
727728
10000,

packages/node-sdk/src/fetch-http-client.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ const fetchClient: HttpClient = {
6767
*/
6868
export async function withRetry<T>(
6969
fn: () => Promise<T>,
70+
onFailedTry: () => void,
7071
maxRetries: number,
7172
baseDelay: number,
7273
maxDelay: number,
@@ -83,13 +84,15 @@ export async function withRetry<T>(
8384
break;
8485
}
8586

87+
onFailedTry();
88+
8689
// Calculate exponential backoff with jitter
8790
const delay = Math.min(
8891
maxDelay,
8992
baseDelay * Math.pow(2, attempt) * (0.8 + Math.random() * 0.4),
9093
);
9194

92-
await new Promise((resolve) => setTimeout(resolve, delay).unref());
95+
await new Promise((resolve) => setTimeout(resolve, delay));
9396
}
9497
}
9598

0 commit comments

Comments
 (0)