Skip to content

Commit 7213189

Browse files
authored
fix: grpc not retrying UNAVAILABLE/UNKNOWN, e2e test stability (#1457)
Signed-off-by: Todd Baert <[email protected]>
1 parent e020cce commit 7213189

3 files changed

Lines changed: 15 additions & 7 deletions

File tree

libs/providers/flagd/src/e2e/step-definitions/providerSteps.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { OpenFeature, ProviderStatus } from '@openfeature/server-sdk';
1+
import { OpenFeature, ProviderEvents, ProviderStatus } from '@openfeature/server-sdk';
22
import { FlagdComposeContainer } from '../tests/flagdComposeContainer';
33
import type { State, Steps } from './state';
44
import { FlagdProvider } from '../../lib/flagd-provider';
@@ -26,16 +26,19 @@ export const providerSteps: Steps =
2626
});
2727

2828
afterEach(async () => {
29-
await fetch('http://' + container.getLaunchpadUrl() + '/stop');
3029
await OpenFeature.close();
31-
return Promise.resolve();
30+
await fetch('http://' + container.getLaunchpadUrl() + '/stop');
3231
}, 50000);
3332

3433
given(/a (.*) flagd provider/, async (providerType: string) => {
3534
const flagdOptions: FlagdProviderOptions = {
3635
resolverType: state.resolverType,
37-
deadlineMs: 2000,
38-
retryGracePeriod: 2,
36+
retryGracePeriod: 2, // retryGracePeriod is related to test expectations; this must be 2
37+
// these 3 options are optimized for test speed and stability
38+
deadlineMs: 4000,
39+
retryBackoffMaxMs: 1000,
40+
retryBackoffMs: 1000,
41+
3942
...state.config,
4043
...state.options,
4144
};

libs/providers/flagd/src/lib/service/common/grpc-util.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ import type { Config } from '../../configuration';
55
import type { Logger } from '@openfeature/server-sdk';
66
import { ProviderFatalError } from '@openfeature/server-sdk';
77

8+
/**
9+
* Get the string name of a gRPC status code.
10+
*/
11+
const statusName = (code: status): string => status[code];
12+
813
export const closeStreamIfDefined = (stream: ClientReadableStream<unknown> | undefined) => {
914
/**
1015
* cancel() is necessary to prevent calls from hanging the process, so we need to we need to remove all the
@@ -90,7 +95,7 @@ export const buildRetryPolicy = (serviceName: string, retryBackoffMs?: number, r
9095
initialBackoff: `${Math.round(initialBackoff / 1000).toFixed(2)}s`,
9196
maxBackoff: `${Math.round(maxBackoff / 1000).toFixed(2)}s`,
9297
backoffMultiplier: 2,
93-
retryableStatusCodes: [status.UNAVAILABLE, status.UNKNOWN],
98+
retryableStatusCodes: [statusName(status.UNAVAILABLE), statusName(status.UNKNOWN)],
9499
},
95100
},
96101
],

0 commit comments

Comments
 (0)