aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/node/src/server.js
diff options
context:
space:
mode:
authorGravatar murgatroid99 <mlumish@google.com>2017-02-02 13:37:36 -0800
committerGravatar murgatroid99 <mlumish@google.com>2017-02-02 13:37:36 -0800
commit98673fa34981fd1ae1b532fb3e27f1596c223090 (patch)
tree86a86626edf88db2bf8243fcb01fb68f3cd67b28 /src/node/src/server.js
parentbb3edafea245a9780cc4c10f0b58da21e8193f38 (diff)
Node: fix handling/propagation of server-side serialization errors
Diffstat (limited to 'src/node/src/server.js')
-rw-r--r--src/node/src/server.js24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/node/src/server.js b/src/node/src/server.js
index d501e76c67..8a7eff507d 100644
--- a/src/node/src/server.js
+++ b/src/node/src/server.js
@@ -121,20 +121,20 @@ function sendUnaryResponse(call, value, serialize, metadata, flags) {
if (metadata) {
statusMetadata = metadata;
}
- status.metadata = statusMetadata._getCoreRepresentation();
- if (!call.metadataSent) {
- end_batch[grpc.opType.SEND_INITIAL_METADATA] =
- (new Metadata())._getCoreRepresentation();
- call.metadataSent = true;
- }
var message;
try {
message = serialize(value);
} catch (e) {
e.code = grpc.status.INTERNAL;
- handleError(e);
+ handleError(call, e);
return;
}
+ status.metadata = statusMetadata._getCoreRepresentation();
+ if (!call.metadataSent) {
+ end_batch[grpc.opType.SEND_INITIAL_METADATA] =
+ (new Metadata())._getCoreRepresentation();
+ call.metadataSent = true;
+ }
message.grpcWriteFlags = flags;
end_batch[grpc.opType.SEND_MESSAGE] = message;
end_batch[grpc.opType.SEND_STATUS_FROM_SERVER] = status;
@@ -280,11 +280,6 @@ function _write(chunk, encoding, callback) {
/* jshint validthis: true */
var batch = {};
var self = this;
- if (!this.call.metadataSent) {
- batch[grpc.opType.SEND_INITIAL_METADATA] =
- (new Metadata())._getCoreRepresentation();
- this.call.metadataSent = true;
- }
var message;
try {
message = this.serialize(chunk);
@@ -293,6 +288,11 @@ function _write(chunk, encoding, callback) {
callback(e);
return;
}
+ if (!this.call.metadataSent) {
+ batch[grpc.opType.SEND_INITIAL_METADATA] =
+ (new Metadata())._getCoreRepresentation();
+ this.call.metadataSent = true;
+ }
if (_.isFinite(encoding)) {
/* Attach the encoding if it is a finite number. This is the closest we
* can get to checking that it is valid flags */