mirror of
https://github.com/grpc/grpc-node.git
synced 2025-12-08 18:23:54 +00:00
Merge pull request #2109 from murgatroid99/grpc-js_extra_error_call_stack
grpc-js: Add calling context to call errors
This commit is contained in:
commit
ef5b3556ad
@ -76,9 +76,11 @@ export type ClientDuplexStream<
|
||||
* error is not necessarily a problem in gRPC itself.
|
||||
* @param status
|
||||
*/
|
||||
export function callErrorFromStatus(status: StatusObject): ServiceError {
|
||||
export function callErrorFromStatus(status: StatusObject, callerStack: string): ServiceError {
|
||||
const message = `${status.code} ${Status[status.code]}: ${status.details}`;
|
||||
return Object.assign(new Error(message), status);
|
||||
const error = new Error(message);
|
||||
const stack = `${error.stack}\nfor call at\n${callerStack}`;
|
||||
return Object.assign(new Error(message), status, {stack});
|
||||
}
|
||||
|
||||
export class ClientUnaryCallImpl
|
||||
|
||||
@ -321,6 +321,7 @@ export class Client {
|
||||
}
|
||||
let responseMessage: ResponseType | null = null;
|
||||
let receivedStatus = false;
|
||||
const callerStack = (new Error().stack!).split('\n').slice(1).join('\n');
|
||||
call.start(callProperties.metadata, {
|
||||
onReceiveMetadata: (metadata) => {
|
||||
emitter.emit('metadata', metadata);
|
||||
@ -343,12 +344,12 @@ export class Client {
|
||||
code: Status.INTERNAL,
|
||||
details: 'No message received',
|
||||
metadata: status.metadata
|
||||
}));
|
||||
}, callerStack));
|
||||
} else {
|
||||
callProperties.callback!(null, responseMessage);
|
||||
}
|
||||
} else {
|
||||
callProperties.callback!(callErrorFromStatus(status));
|
||||
callProperties.callback!(callErrorFromStatus(status, callerStack));
|
||||
}
|
||||
emitter.emit('status', status);
|
||||
},
|
||||
@ -446,6 +447,7 @@ export class Client {
|
||||
}
|
||||
let responseMessage: ResponseType | null = null;
|
||||
let receivedStatus = false;
|
||||
const callerStack = (new Error().stack!).split('\n').slice(1).join('\n');
|
||||
call.start(callProperties.metadata, {
|
||||
onReceiveMetadata: (metadata) => {
|
||||
emitter.emit('metadata', metadata);
|
||||
@ -468,12 +470,12 @@ export class Client {
|
||||
code: Status.INTERNAL,
|
||||
details: 'No message received',
|
||||
metadata: status.metadata
|
||||
}));
|
||||
}, callerStack));
|
||||
} else {
|
||||
callProperties.callback!(null, responseMessage);
|
||||
}
|
||||
} else {
|
||||
callProperties.callback!(callErrorFromStatus(status));
|
||||
callProperties.callback!(callErrorFromStatus(status, callerStack));
|
||||
}
|
||||
emitter.emit('status', status);
|
||||
},
|
||||
@ -575,6 +577,7 @@ export class Client {
|
||||
call.setCredentials(callProperties.callOptions.credentials);
|
||||
}
|
||||
let receivedStatus = false;
|
||||
const callerStack = (new Error().stack!).split('\n').slice(1).join('\n');
|
||||
call.start(callProperties.metadata, {
|
||||
onReceiveMetadata(metadata: Metadata) {
|
||||
stream.emit('metadata', metadata);
|
||||
@ -590,7 +593,7 @@ export class Client {
|
||||
receivedStatus = true;
|
||||
stream.push(null);
|
||||
if (status.code !== Status.OK) {
|
||||
stream.emit('error', callErrorFromStatus(status));
|
||||
stream.emit('error', callErrorFromStatus(status, callerStack));
|
||||
}
|
||||
stream.emit('status', status);
|
||||
},
|
||||
@ -672,6 +675,7 @@ export class Client {
|
||||
call.setCredentials(callProperties.callOptions.credentials);
|
||||
}
|
||||
let receivedStatus = false;
|
||||
const callerStack = (new Error().stack!).split('\n').slice(1).join('\n');
|
||||
call.start(callProperties.metadata, {
|
||||
onReceiveMetadata(metadata: Metadata) {
|
||||
stream.emit('metadata', metadata);
|
||||
@ -686,7 +690,7 @@ export class Client {
|
||||
receivedStatus = true;
|
||||
stream.push(null);
|
||||
if (status.code !== Status.OK) {
|
||||
stream.emit('error', callErrorFromStatus(status));
|
||||
stream.emit('error', callErrorFromStatus(status, callerStack));
|
||||
}
|
||||
stream.emit('status', status);
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user