Skip to content
10 changes: 6 additions & 4 deletions packages/sdk/browser/src/platform/DefaultBrowserEventSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ import {
HttpErrorResponse,
EventSource as LDEventSource,
} from '@launchdarkly/js-client-sdk-common';

import Backoff from './Backoff';
import { DefaultBackoff } from '@launchdarkly/js-sdk-common';

/**
* Implementation Notes:
Expand All @@ -22,7 +21,7 @@ import Backoff from './Backoff';
*/
export default class DefaultBrowserEventSource implements LDEventSource {
private _es?: EventSource;
private _backoff: Backoff;
private _backoff: DefaultBackoff;
private _errorFilter: (err: HttpErrorResponse) => boolean;

// The type of the handle can be platform specific and we treat is opaquely.
Expand All @@ -34,7 +33,10 @@ export default class DefaultBrowserEventSource implements LDEventSource {
private readonly _url: string,
options: EventSourceInitDict,
) {
this._backoff = new Backoff(options.initialRetryDelayMillis, options.retryResetIntervalMillis);
this._backoff = new DefaultBackoff(
options.initialRetryDelayMillis,
options.retryResetIntervalMillis,
);
this._errorFilter = options.errorFilter;
this._openConnection();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
import Backoff from '../../src/platform/Backoff';
import DefaultBackoff from '../../src/datasource/Backoff';

const noJitter = (): number => 0;
const maxJitter = (): number => 1;
const defaultResetInterval = 60 * 1000;

it.each([1, 1000, 5000])('has the correct starting delay', (initialDelay) => {
const backoff = new Backoff(initialDelay, defaultResetInterval, noJitter);
const backoff = new DefaultBackoff(initialDelay, defaultResetInterval, noJitter);
expect(backoff.fail()).toEqual(initialDelay);
});

it.each([1, 1000, 5000])('doubles delay on consecutive failures', (initialDelay) => {
const backoff = new Backoff(initialDelay, defaultResetInterval, noJitter);
const backoff = new DefaultBackoff(initialDelay, defaultResetInterval, noJitter);
expect(backoff.fail()).toEqual(initialDelay);
expect(backoff.fail()).toEqual(initialDelay * 2);
expect(backoff.fail()).toEqual(initialDelay * 4);
});

it('stops increasing delay when the max backoff is encountered', () => {
const backoff = new Backoff(5000, defaultResetInterval, noJitter);
const backoff = new DefaultBackoff(5000, defaultResetInterval, noJitter);
expect(backoff.fail()).toEqual(5000);
expect(backoff.fail()).toEqual(10000);
expect(backoff.fail()).toEqual(20000);
expect(backoff.fail()).toEqual(30000);

const backoff2 = new Backoff(1000, defaultResetInterval, noJitter);
const backoff2 = new DefaultBackoff(1000, defaultResetInterval, noJitter);
expect(backoff2.fail()).toEqual(1000);
expect(backoff2.fail()).toEqual(2000);
expect(backoff2.fail()).toEqual(4000);
Expand All @@ -33,12 +33,12 @@ it('stops increasing delay when the max backoff is encountered', () => {
});

it('handles an initial retry delay longer than the maximum retry delay', () => {
const backoff = new Backoff(40000, defaultResetInterval, noJitter);
const backoff = new DefaultBackoff(40000, defaultResetInterval, noJitter);
expect(backoff.fail()).toEqual(30000);
});

it('jitters the backoff value', () => {
const backoff = new Backoff(1000, defaultResetInterval, maxJitter);
const backoff = new DefaultBackoff(1000, defaultResetInterval, maxJitter);
expect(backoff.fail()).toEqual(500);
expect(backoff.fail()).toEqual(1000);
expect(backoff.fail()).toEqual(2000);
Expand All @@ -51,7 +51,7 @@ it.each([10 * 1000, 60 * 1000])(
'resets the delay when the last successful connection was connected greater than the retry reset interval',
(retryResetInterval) => {
let time = 1000;
const backoff = new Backoff(1000, retryResetInterval, noJitter);
const backoff = new DefaultBackoff(1000, retryResetInterval, noJitter);
expect(backoff.fail(time)).toEqual(1000);
time += 1;
backoff.success(time);
Expand All @@ -69,7 +69,7 @@ it.each([10 * 1000, 60 * 1000])(
it.each([10 * 1000, 60 * 1000])(
'does not reset the delay when the connection did not persist longer than the retry reset interval',
(retryResetInterval) => {
const backoff = new Backoff(1000, retryResetInterval, noJitter);
const backoff = new DefaultBackoff(1000, retryResetInterval, noJitter);

let time = 1000;
expect(backoff.fail(time)).toEqual(1000);
Expand Down
Loading