14 UNAVAILABLE: upstream connect error or disconnect/reset before headers. reset reason: connection termination
- Dominant language
- TypeScript
- Stars
- 4.8k
- Forks
- 716
- Avg merge
- 2d 3h
- Merged PRs (30d)
- 10
Description
Excuse me, what could be the reason for this log? I am using grpc-js
> 14 UNAVAILABLE: upstream connect error or disconnect/reset before headers. reset reason: connection termination
My client code
```js
const userClient = new UacApiRpcClient(data.target, credentials.createInsecure(), {
'grpc.keepalive_time_ms': 10 * 1000,
'grpc.keepalive_timeout_ms': 10 * 1000,
interceptors: [retiresInterceptor]
});
```
```js
export const retiresInterceptor: Interceptor = (options, nextCall) => {
const maxRetries = 5;
// eslint-disable-next-line @typescript-eslint/init-declarations
let savedMetadata: any;
// eslint-disable-next-line @typescript-eslint/init-declarations
let savedSendMessage: any;
// eslint-disable-next-line @typescript-eslint/init-declarations
let savedReceiveMessage: any;
// eslint-disable-next-line @typescript-eslint/init-declarations
let savedMessageNext: any;
const requester: Requester = {
start: function(metadata, listener, next) {
savedMetadata = metadata;
const newListener: Parameters[1] = {
onReceiveMessage: function(message, next) {
savedReceiveMessage = message;
savedMessageNext = next;
},
onReceiveStatus: function(status, next) {
let retries = 0;
const retry = function(message, metadata) {
retries++;
const newCall = nextCall(options);
newCall.start(metadata, {
onReceiveMessage: function(message) {
savedReceiveMessage = message;
},
onReceiveStatus: function(status) {
if (status.code !== grpcStatus.OK) {
if (retries <= maxRetries) {
retry(message, metadata);
} else {
savedMessageNext(savedReceiveMessage);
next(status);
}
} else {
savedMessageNext(savedReceiveMessage);
next({ ...status, code: grpcStatus.OK });
}
}
});
};
if (status.code !== grpcStatus.OK) {
retry(savedSendMessage, savedMetadata);
} else {
savedMessageNext(savedReceiveMessage);
next(status);
}
}
};
next(metadata, newListener);
},
sendMessage: function(message, next) {
savedSendMessage = message;
next(message);
}
};
return new InterceptingCall(nextCall(options), requester);
};
```
Contributor guide
Assessment
This issue has not been assessed yet.