Skip to content

Commit b747394

Browse files
authored
fix: improved retry logic, improve retry logging (#408)
- removed `unref()` to ensure retries block the process from exiting - improved logging around retries
1 parent 4e47544 commit b747394

4 files changed

Lines changed: 17 additions & 12 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

packages/node-sdk/test/client.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ const validOptions: ClientOptions = {
8888
featuresFetchRetries: 2,
8989
batchOptions: {
9090
maxSize: 99,
91-
intervalMs: 100,
91+
intervalMs: 10001,
9292
flushOnExit: false,
9393
},
9494
offline: false,
@@ -270,7 +270,7 @@ describe("BucketClient", () => {
270270
expect(client["_config"].headers).toEqual(expectedHeaders);
271271
expect(client["batchBuffer"]).toMatchObject({
272272
maxSize: 99,
273-
intervalMs: 100,
273+
intervalMs: 10001,
274274
});
275275

276276
expect(client["_config"].fallbackFeatures).toEqual({
@@ -630,7 +630,7 @@ describe("BucketClient", () => {
630630

631631
expect(logger.warn).toHaveBeenCalledWith(
632632
expect.stringMatching("invalid response received from server for"),
633-
response,
633+
JSON.stringify(response),
634634
);
635635
});
636636

@@ -722,7 +722,7 @@ describe("BucketClient", () => {
722722

723723
expect(logger.warn).toHaveBeenCalledWith(
724724
expect.stringMatching("invalid response received from server for"),
725-
response,
725+
JSON.stringify(response),
726726
);
727727
});
728728

@@ -859,7 +859,7 @@ describe("BucketClient", () => {
859859

860860
expect(logger.warn).toHaveBeenCalledWith(
861861
expect.stringMatching("invalid response received from server for "),
862-
response,
862+
JSON.stringify(response),
863863
);
864864
});
865865

0 commit comments

Comments
 (0)