Skip to content

Commit 88bcec3

Browse files
committed
Add retry to runtime extension
1 parent fd4795e commit 88bcec3

File tree

7 files changed

+88
-26
lines changed

7 files changed

+88
-26
lines changed

.changeset/chilled-lies-care.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@smithy/smithy-client": minor
3+
"@smithy/types": minor
4+
---
5+
6+
Add retry to runtime extension

packages/smithy-client/src/extensions/checksum.ts

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,28 @@ export { AlgorithmId, ChecksumAlgorithm, ChecksumConfiguration };
66
/**
77
* @internal
88
*/
9-
export const getChecksumConfiguration = (
10-
runtimeConfig: Partial<{
11-
sha256: ChecksumConstructor | HashConstructor;
12-
md5: ChecksumConstructor | HashConstructor;
13-
}>
14-
) => {
15-
const checksumAlgorithms: ChecksumAlgorithm[] = [];
9+
export type PartialChecksumRuntimeConfigType = Partial<{
10+
sha256: ChecksumConstructor | HashConstructor;
11+
md5: ChecksumConstructor | HashConstructor;
12+
crc32: ChecksumConstructor | HashConstructor;
13+
crc32c: ChecksumConstructor | HashConstructor;
14+
sha1: ChecksumConstructor | HashConstructor;
15+
}>;
1616

17-
if (runtimeConfig.sha256 !== undefined) {
18-
checksumAlgorithms.push({
19-
algorithmId: () => AlgorithmId.SHA256,
20-
checksumConstructor: () => runtimeConfig.sha256!,
21-
});
22-
}
17+
/**
18+
* @internal
19+
*/
20+
export const getChecksumConfiguration = (runtimeConfig: PartialChecksumRuntimeConfigType) => {
21+
const checksumAlgorithms: ChecksumAlgorithm[] = [];
2322

24-
if (runtimeConfig.md5 != undefined) {
23+
for (const id in AlgorithmId) {
24+
const algorithmId = AlgorithmId[id as keyof typeof AlgorithmId];
25+
if (runtimeConfig[algorithmId] === undefined) {
26+
continue;
27+
}
2528
checksumAlgorithms.push({
26-
algorithmId: () => AlgorithmId.MD5,
27-
checksumConstructor: () => runtimeConfig.md5!,
29+
algorithmId: () => algorithmId,
30+
checksumConstructor: () => runtimeConfig[algorithmId]!,
2831
});
2932
}
3033

@@ -42,9 +45,8 @@ export const getChecksumConfiguration = (
4245
/**
4346
* @internal
4447
*/
45-
export const resolveChecksumRuntimeConfig = (clientConfig: ChecksumConfiguration) => {
46-
const runtimeConfig: Partial<Record<AlgorithmId, HashConstructor | ChecksumConstructor>> = {};
47-
48+
export const resolveChecksumRuntimeConfig = (clientConfig: ChecksumConfiguration): PartialChecksumRuntimeConfigType => {
49+
const runtimeConfig: PartialChecksumRuntimeConfigType = {};
4850
clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {
4951
runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();
5052
});

packages/smithy-client/src/extensions/defaultExtensionConfiguration.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
import type { DefaultExtensionConfiguration } from "@smithy/types";
22

3-
import { getChecksumConfiguration, resolveChecksumRuntimeConfig } from "./checksum";
3+
import { getChecksumConfiguration, PartialChecksumRuntimeConfigType, resolveChecksumRuntimeConfig } from "./checksum";
4+
import { getRetryConfiguration, PartialRetryRuntimeConfigType, resolveRetryRuntimeConfig } from "./retry";
45

56
/**
67
* @internal
78
*/
8-
export type DefaultExtensionConfigType = Parameters<typeof getChecksumConfiguration>[0];
9+
export type DefaultExtensionRuntimeConfigType = PartialRetryRuntimeConfigType & PartialChecksumRuntimeConfigType;
910

1011
/**
1112
* @internal
1213
*
1314
* Helper function to resolve default extension configuration from runtime config
1415
*/
15-
export const getDefaultExtensionConfiguration = (runtimeConfig: DefaultExtensionConfigType) => {
16+
export const getDefaultExtensionConfiguration = (runtimeConfig: DefaultExtensionRuntimeConfigType) => {
1617
return {
1718
...getChecksumConfiguration(runtimeConfig),
19+
...getRetryConfiguration(runtimeConfig),
1820
};
1921
};
2022

@@ -31,8 +33,11 @@ export const getDefaultClientConfiguration = getDefaultExtensionConfiguration;
3133
*
3234
* Helper function to resolve runtime config from default extension configuration
3335
*/
34-
export const resolveDefaultRuntimeConfig = (config: DefaultExtensionConfiguration) => {
36+
export const resolveDefaultRuntimeConfig = (
37+
config: DefaultExtensionConfiguration
38+
): DefaultExtensionRuntimeConfigType => {
3539
return {
3640
...resolveChecksumRuntimeConfig(config),
41+
...resolveRetryRuntimeConfig(config),
3742
};
3843
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Provider, RetryStrategy, RetryStrategyConfiguration, RetryStrategyV2 } from "@smithy/types";
2+
3+
export type PartialRetryRuntimeConfigType = Partial<{ retryStrategy: Provider<RetryStrategyV2 | RetryStrategy> }>;
4+
5+
/**
6+
* @internal
7+
*/
8+
export const getRetryConfiguration = (runtimeConfig: PartialRetryRuntimeConfigType) => {
9+
let _retryStrategy = runtimeConfig.retryStrategy!;
10+
return {
11+
setRetryStrategy(retryStrategy: Provider<RetryStrategyV2 | RetryStrategy>): void {
12+
_retryStrategy = retryStrategy;
13+
},
14+
retryStrategy(): Provider<RetryStrategyV2 | RetryStrategy> {
15+
return _retryStrategy;
16+
},
17+
};
18+
};
19+
20+
/**
21+
* @internal
22+
*/
23+
export const resolveRetryRuntimeConfig = (
24+
retryStrategyConfiguration: RetryStrategyConfiguration
25+
): PartialRetryRuntimeConfigType => {
26+
const runtimeConfig: PartialRetryRuntimeConfigType = {};
27+
runtimeConfig.retryStrategy = retryStrategyConfiguration.retryStrategy();
28+
return runtimeConfig;
29+
};
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { ChecksumConfiguration } from "./checksum";
2+
import { RetryStrategyConfiguration } from "./retry";
23

34
/**
45
* @internal
56
*
67
* Default extension configuration consisting various configurations for modifying a service client
78
*/
8-
export interface DefaultExtensionConfiguration extends ChecksumConfiguration {}
9-
10-
type GetDefaultConfigurationType = (runtimeConfig: any) => DefaultExtensionConfiguration;
9+
export interface DefaultExtensionConfiguration extends ChecksumConfiguration, RetryStrategyConfiguration {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from "./defaultClientConfiguration";
22
export * from "./defaultExtensionConfiguration";
33
export { AlgorithmId, ChecksumAlgorithm, ChecksumConfiguration } from "./checksum";
4+
export { RetryStrategyConfiguration } from "./retry";
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { RetryStrategyV2 } from "../retry";
2+
import { Provider, RetryStrategy } from "../util";
3+
4+
/**
5+
* A configuration interface with methods called by runtime extension
6+
* @internal
7+
*/
8+
export interface RetryStrategyConfiguration {
9+
/**
10+
* Set retry strategy used for all http requests
11+
* @param retryStrategy
12+
*/
13+
setRetryStrategy(retryStrategy: Provider<RetryStrategyV2 | RetryStrategy>): void;
14+
15+
/**
16+
* Get retry strategy used for all http requests
17+
* @param retryStrategy
18+
*/
19+
retryStrategy(): Provider<RetryStrategyV2 | RetryStrategy>;
20+
}

0 commit comments

Comments
 (0)