I can think of a few ways to achieve this (with keepalives configured 
ofcourse). One way to detect this would be to perform a `Read()` on the 
stream. If the channel dies, the stream would die too and the read would 
fail.

On Tuesday, November 16, 2021 at 3:08:46 AM UTC-8 paulin...@gmail.com wrote:

> Hi all,
>
> During client side streaming, I'd like to know how the client could detect 
> that the server process has been abruptly restarted (e.g. due to some 
> critical failure), and how the client could recover from this.
>
> Apparently for server side streaming we can use IsCancelled() and 
> AsyncNotifyWhenDone() to detect such issues. But is there any similar 
> mechanism on the client side?
>
> This is what I have tested so far:
>
>
>    1. *I started a synchronous client side streaming RPC. *The channel is 
>    in a GRPC_CHANNEL_READY state
>    2. *Killed the server process.* After the server dies, the channel is 
>    briefly GRPC_CHANNEL_IDLE. Then the channel started alternating between 
>    GRPC_CHANNEL_CONNECTING and GRPC_CHANNEL_TRANSIENT_FAILURE
>    3. *Then the server is started again. *Тhe channel then goes in a 
>    GRPC_CHANNEL_READY state. However, the server no longer receives any of 
> the 
>    streamed messages. I suppose at this stage the client should start a new 
>    RPC and abandon the old one? But how would the client know that it has to 
>    do this? *Is there a reliable way for the client to know that it has 
>    to re-establish the connection?*
>
> I attempted to detect the issue using the retval of WaitForConnected() and 
> Write() but both of these functions returned “true” while the server was 
> down.
>
> Also, I tried setting these configuration variables on both the server and 
> client, but it didn't seem to help:
>
> args.SetInt(GRPC_ARG_KEEPALIVE_TIME_MS, 10000);
>
> args.SetInt(GRPC_ARG_KEEPALIVE_TIMEOUT_MS, 5000);
>
> args.SetInt(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS, 1);
>
> args.SetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA, 0);
>
> Regards,
>
> Paulin
>

-- 
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/66a022e7-638d-4441-b532-1fa3589c441cn%40googlegroups.com.

Reply via email to