Hi guys, I have some confusions about grpc-js client streaming. Sorry for the long question. I have encountered multiple errors, 13 INTERNAL: Received RST_STREAM with code 2 triggered by internal client error: Session closed with error code 2 during the load testing. May I know what could trigger this error? I have the following grpc server and client implementation, referencing from *https://github.com/grpc/grpc-node/blob/master/examples/metadata/server.js*.
*Client* function clientStreamingWithMetadata(client, message) { return new Promise((resolve, reject) => { const requestMetadata = new grpc.Metadata(); requestMetadata.set('timestamp', new Date().toISOString()); const call = client.clientStreamingEcho(requestMetadata, (error, value) => { if (error) { console.log(`Received error ${error}`); return; } }); call.on('status', status => { const timestamps = status.metadata.get('timestamp'); if (timestamps.length == 0) { console.error("timestamp expected but doesn't exist in trailer"); } resolve(); }); for (let i = 0; i < STREAMING_COUNT; i++) { call.write({message}); } call.end(); }); } *Server* function clientStreamingEcho(call, callback) { const incomingTimestamps = call.metadata.get('timestamp'); if (incomingTimestamps.length > 0) { console.log('Timestamp from metadata:'); for (const [index, value] of incomingTimestamps.entries()) { console.log(` ${index}. ${value}`); } } let lastReceivedMessage = ''; call.on('data', value => { console.log(`Received request ${JSON.stringify(value)}`); lastReceivedMessage = value.message; }); call.on('end', () => { console.log("Call end!") const outgoingTrailers = new grpc.Metadata(); outgoingTrailers.set('timestamp', new Date().toISOString()); callback(null, {message: lastReceivedMessage}, outgoingTrailers); }); } May I also know that do I really need to listen back to the server callback on stream end initiated by client side? I tried running the code by removing the server callback on stream end event and remove the call.on('status') listener on the client side. Then the client stream doesn't seem to be ended even after call.end() and keep pinging the server. These are the logs from server and client. *Client* D 2024-01-03T04:11:09.279Z | v1.9.13 354656 | subchannel_call | [3] write() called with message of length 32 D 2024-01-03T04:11:09.279Z | v1.9.13 354656 | subchannel_call | [3] sending data chunk of length 32 D 2024-01-03T04:11:09.279Z | v1.9.13 354656 | load_balancing_call | [2] halfClose called D 2024-01-03T04:11:09.279Z | v1.9.13 354656 | subchannel_call | [3] end() called D 2024-01-03T04:11:09.279Z | v1.9.13 354656 | subchannel_call | [3] calling end() on HTTP/2 stream D 2024-01-03T04:11:10.277Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Sending ping with timeout 20000ms D 2024-01-03T04:11:10.277Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Received ping response D 2024-01-03T04:11:10.277Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Starting keepalive timer for 1000ms D 2024-01-03T04:11:11.278Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Sending ping with timeout 20000ms D 2024-01-03T04:11:11.278Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Received ping response D 2024-01-03T04:11:11.278Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Starting keepalive timer for 1000ms D 2024-01-03T04:11:12.279Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Sending ping with timeout 20000ms D 2024-01-03T04:11:12.279Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Received ping response D 2024-01-03T04:11:12.279Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Starting keepalive timer for 1000ms D 2024-01-03T04:11:13.281Z | v1.9.13 354656 | keepalive | (3) 127.0.0.1:50052 Sending ping with timeout 20000ms *Server* D 2024-01-03T04:11:09.278Z | v1.9.13 352893 | server_call | Received message of length 27 Received request {"message":"this is examples/metadata"} D 2024-01-03T04:11:09.279Z | v1.9.13 352893 | server_call | Received message of length 27 Received request {"message":"this is examples/metadata"} D 2024-01-03T04:11:09.279Z | v1.9.13 352893 | server_call | Received message of length 27 Received request {"message":"this is examples/metadata"} D 2024-01-03T04:11:09.279Z | v1.9.13 352893 | server_call | Received end of stream Call end! D 2024-01-03T04:11:26.004Z | v1.9.13 352893 | server_call | Request to method /grpc.examples.echo.Echo/ClientStreamingEcho stream closed with rstCode 8 Thank you so much and appreciated any explanation. -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to grpc-io+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/9b6662fe-d368-45de-a454-a0273f0c1c09n%40googlegroups.com.