Edit File: backoff.d.ts
/*! * Copyright 2017 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /// <reference types="node" /> /*! * The default initial backoff time in milliseconds after an error. * Set to 1s according to https://cloud.google.com/apis/design/errors. */ export declare const DEFAULT_BACKOFF_INITIAL_DELAY_MS = 1000; /*! * The default maximum backoff time in milliseconds. */ export declare const DEFAULT_BACKOFF_MAX_DELAY_MS: number; /*! * The default factor to increase the backup by after each failed attempt. */ export declare const DEFAULT_BACKOFF_FACTOR = 1.5; /*! * The maximum number of retries that will be attempted by backoff * before stopping all retry attempts. */ export declare const MAX_RETRY_ATTEMPTS = 10; /*! * The timeout handler used by `ExponentialBackoff` and `BulkWriter`. */ export declare let delayExecution: (f: () => void, ms: number) => NodeJS.Timeout; /** * Allows overriding of the timeout handler used by the exponential backoff * implementation. If not invoked, we default to `setTimeout()`. * * Used only in testing. * * @private * @internal * @param {function} handler A handler than matches the API of `setTimeout()`. */ export declare function setTimeoutHandler(handler: (f: () => void, ms: number) => void): void; /** * Configuration object to adjust the delays of the exponential backoff * algorithm. * * @private * @internal */ export interface ExponentialBackoffSetting { /** Optional override for the initial retry delay. */ initialDelayMs?: number; /** Optional override for the exponential backoff factor. */ backoffFactor?: number; /** Optional override for the maximum retry delay. */ maxDelayMs?: number; /** * Optional override to control the itter factor by which to randomize * attempts (0 means no randomization, 1.0 means +/-50% randomization). It is * suggested not to exceed this range. */ jitterFactor?: number; } /** * A helper for running delayed tasks following an exponential backoff curve * between attempts. * * Each delay is made up of a "base" delay which follows the exponential * backoff curve, and a "jitter" (+/- 50% by default) that is calculated and * added to the base delay. This prevents clients from accidentally * synchronizing their delays causing spikes of load to the backend. * * @private * @internal */ export declare class ExponentialBackoff { /** * The initial delay (used as the base delay on the first retry attempt). * Note that jitter will still be applied, so the actual delay could be as * little as 0.5*initialDelayMs (based on a jitter factor of 1.0). * * @private * @internal */ private readonly initialDelayMs; /** * The multiplier to use to determine the extended base delay after each * attempt. * * @private * @internal */ private readonly backoffFactor; /** * The maximum base delay after which no further backoff is performed. * Note that jitter will still be applied, so the actual delay could be as * much as 1.5*maxDelayMs (based on a jitter factor of 1.0). * * @private * @internal */ private readonly maxDelayMs; /** * The jitter factor that controls the random distribution of the backoff * points. * * @private * @internal */ private readonly jitterFactor; /** * The number of retries that has been attempted. * * @private * @internal */ private _retryCount; /** * The backoff delay of the current attempt. * * @private * @internal */ private currentBaseMs; /** * Whether we are currently waiting for backoff to complete. * * @private * @internal */ private awaitingBackoffCompletion; constructor(options?: ExponentialBackoffSetting); /** * Resets the backoff delay and retry count. * * The very next backoffAndWait() will have no delay. If it is called again * (i.e. due to an error), initialDelayMs (plus jitter) will be used, and * subsequent ones will increase according to the backoffFactor. * * @private * @internal */ reset(): void; /** * Resets the backoff delay to the maximum delay (e.g. for use after a * RESOURCE_EXHAUSTED error). * * @private * @internal */ resetToMax(): void; /** * Returns a promise that resolves after currentDelayMs, and increases the * delay for any subsequent attempts. * * @return A Promise that resolves when the current delay elapsed. * @private * @internal */ backoffAndWait(): Promise<void>; get retryCount(): number; /** * Returns a randomized "jitter" delay based on the current base and jitter * factor. * * @returns {number} The jitter to apply based on the current delay. * @private * @internal */ private jitterDelayMs; }
Back to File Manager