Skip to content

chore(middleware-retry): move non-config interfaces to types.ts #2435

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/middleware-retry/src/defaultRetryQuota.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { SdkError } from "@aws-sdk/smithy-client";

import { NO_RETRY_INCREMENT, RETRY_COST, TIMEOUT_RETRY_COST } from "./constants";
import { RetryQuota } from "./defaultStrategy";
import { RetryQuota } from "./types";

export const getDefaultRetryQuota = (initialRetryTokens: number): RetryQuota => {
const MAX_CAPACITY = initialRetryTokens;
Expand Down
3 changes: 2 additions & 1 deletion packages/middleware-retry/src/defaultStrategy.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ import { v4 } from "uuid";

import { DEFAULT_RETRY_DELAY_BASE, INITIAL_RETRY_TOKENS, THROTTLING_RETRY_DELAY_BASE } from "./constants";
import { getDefaultRetryQuota } from "./defaultRetryQuota";
import { DEFAULT_MAX_ATTEMPTS, RetryQuota, StandardRetryStrategy } from "./defaultStrategy";
import { DEFAULT_MAX_ATTEMPTS, StandardRetryStrategy } from "./defaultStrategy";
import { defaultDelayDecider } from "./delayDecider";
import { defaultRetryDecider } from "./retryDecider";
import { RetryQuota } from "./types";

jest.mock("@aws-sdk/service-error-classification");
jest.mock("./delayDecider");
Expand Down
42 changes: 1 addition & 41 deletions packages/middleware-retry/src/defaultStrategy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
import { getDefaultRetryQuota } from "./defaultRetryQuota";
import { defaultDelayDecider } from "./delayDecider";
import { defaultRetryDecider } from "./retryDecider";
import { DelayDecider, RetryDecider, RetryQuota } from "./types";

/**
* The default value for how many HTTP requests an SDK should make for a
Expand All @@ -26,47 +27,6 @@ export const DEFAULT_MAX_ATTEMPTS = 3;
*/
export const DEFAULT_RETRY_MODE = "standard";

/**
* Determines whether an error is retryable based on the number of retries
* already attempted, the HTTP status code, and the error received (if any).
*
* @param error The error encountered.
*/
export interface RetryDecider {
(error: SdkError): boolean;
}

/**
* Determines the number of milliseconds to wait before retrying an action.
*
* @param delayBase The base delay (in milliseconds).
* @param attempts The number of times the action has already been tried.
*/
export interface DelayDecider {
(delayBase: number, attempts: number): number;
}

/**
* Interface that specifies the retry quota behavior.
*/
export interface RetryQuota {
/**
* returns true if retry tokens are available from the retry quota bucket.
*/
hasRetryTokens: (error: SdkError) => boolean;

/**
* returns token amount from the retry quota bucket.
* throws error is retry tokens are not available.
*/
retrieveRetryTokens: (error: SdkError) => number;

/**
* releases tokens back to the retry quota.
*/
releaseRetryTokens: (releaseCapacityAmount?: number) => void;
}

/**
* Strategy options to be passed to StandardRetryStrategy
*/
Expand Down
1 change: 1 addition & 0 deletions packages/middleware-retry/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ export * from "./defaultStrategy";
export * from "./configurations";
export * from "./delayDecider";
export * from "./retryDecider";
export * from "./types";
42 changes: 42 additions & 0 deletions packages/middleware-retry/src/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { SdkError } from "@aws-sdk/smithy-client";

/**
* Determines whether an error is retryable based on the number of retries
* already attempted, the HTTP status code, and the error received (if any).
*
* @param error The error encountered.
*/
export interface RetryDecider {
(error: SdkError): boolean;
}

/**
* Determines the number of milliseconds to wait before retrying an action.
*
* @param delayBase The base delay (in milliseconds).
* @param attempts The number of times the action has already been tried.
*/
export interface DelayDecider {
(delayBase: number, attempts: number): number;
}

/**
* Interface that specifies the retry quota behavior.
*/
export interface RetryQuota {
/**
* returns true if retry tokens are available from the retry quota bucket.
*/
hasRetryTokens: (error: SdkError) => boolean;

/**
* returns token amount from the retry quota bucket.
* throws error is retry tokens are not available.
*/
retrieveRetryTokens: (error: SdkError) => number;

/**
* releases tokens back to the retry quota.
*/
releaseRetryTokens: (releaseCapacityAmount?: number) => void;
}