96 lines
3.4 KiB
TypeScript
96 lines
3.4 KiB
TypeScript
/// <reference types="node" />
|
|
import { CallCredentials } from './call-credentials';
|
|
import { Status } from './constants';
|
|
import { Deadline } from './deadline';
|
|
import { Metadata } from './metadata';
|
|
import { CallConfig } from './resolver';
|
|
import { Call, InterceptingListener, MessageContext } from './call-interface';
|
|
import { InternalChannel } from './internal-channel';
|
|
export declare class RetryThrottler {
|
|
private readonly maxTokens;
|
|
private readonly tokenRatio;
|
|
private tokens;
|
|
constructor(maxTokens: number, tokenRatio: number, previousRetryThrottler?: RetryThrottler);
|
|
addCallSucceeded(): void;
|
|
addCallFailed(): void;
|
|
canRetryCall(): boolean;
|
|
}
|
|
export declare class MessageBufferTracker {
|
|
private totalLimit;
|
|
private limitPerCall;
|
|
private totalAllocated;
|
|
private allocatedPerCall;
|
|
constructor(totalLimit: number, limitPerCall: number);
|
|
allocate(size: number, callId: number): boolean;
|
|
free(size: number, callId: number): void;
|
|
freeAll(callId: number): void;
|
|
}
|
|
export declare class RetryingCall implements Call {
|
|
private readonly channel;
|
|
private readonly callConfig;
|
|
private readonly methodName;
|
|
private readonly host;
|
|
private readonly credentials;
|
|
private readonly deadline;
|
|
private readonly callNumber;
|
|
private readonly bufferTracker;
|
|
private readonly retryThrottler?;
|
|
private state;
|
|
private listener;
|
|
private initialMetadata;
|
|
private underlyingCalls;
|
|
private writeBuffer;
|
|
/**
|
|
* The offset of message indices in the writeBuffer. For example, if
|
|
* writeBufferOffset is 10, message 10 is in writeBuffer[0] and message 15
|
|
* is in writeBuffer[5].
|
|
*/
|
|
private writeBufferOffset;
|
|
/**
|
|
* Tracks whether a read has been started, so that we know whether to start
|
|
* reads on new child calls. This only matters for the first read, because
|
|
* once a message comes in the child call becomes committed and there will
|
|
* be no new child calls.
|
|
*/
|
|
private readStarted;
|
|
private transparentRetryUsed;
|
|
/**
|
|
* Number of attempts so far
|
|
*/
|
|
private attempts;
|
|
private hedgingTimer;
|
|
private committedCallIndex;
|
|
private initialRetryBackoffSec;
|
|
private nextRetryBackoffSec;
|
|
constructor(channel: InternalChannel, callConfig: CallConfig, methodName: string, host: string, credentials: CallCredentials, deadline: Deadline, callNumber: number, bufferTracker: MessageBufferTracker, retryThrottler?: RetryThrottler | undefined);
|
|
getCallNumber(): number;
|
|
private trace;
|
|
private reportStatus;
|
|
cancelWithStatus(status: Status, details: string): void;
|
|
getPeer(): string;
|
|
private getBufferEntry;
|
|
private getNextBufferIndex;
|
|
private clearSentMessages;
|
|
private commitCall;
|
|
private commitCallWithMostMessages;
|
|
private isStatusCodeInList;
|
|
private getNextRetryBackoffMs;
|
|
private maybeRetryCall;
|
|
private countActiveCalls;
|
|
private handleProcessedStatus;
|
|
private getPushback;
|
|
private handleChildStatus;
|
|
private maybeStartHedgingAttempt;
|
|
private maybeStartHedgingTimer;
|
|
private startNewAttempt;
|
|
start(metadata: Metadata, listener: InterceptingListener): void;
|
|
private handleChildWriteCompleted;
|
|
private sendNextChildMessage;
|
|
sendMessageWithContext(context: MessageContext, message: Buffer): void;
|
|
startRead(): void;
|
|
halfClose(): void;
|
|
setCredentials(newCredentials: CallCredentials): void;
|
|
getMethod(): string;
|
|
getHost(): string;
|
|
}
|