Skip to content

Commit

Permalink
address language comments
Browse files Browse the repository at this point in the history
  • Loading branch information
purnesh42H committed Dec 10, 2024
1 parent d2aa9ab commit 4f1bf98
Showing 1 changed file with 20 additions and 22 deletions.
42 changes: 20 additions & 22 deletions content/en/docs/guides/server-graceful-stop.md
Original file line number Diff line number Diff line change
@@ -1,49 +1,48 @@
---
title: GracefulStop
title: Gracefully stopping a server
description: >-
Explains how to gracefully shut down a gRPC server.
Explains how to gracefully stop/shutdown a gRPC server.
---

### Overview

gRPC servers often need to shut down gracefully, ensuring that in-flight RPCs
are completed within a reasonable timeframe and new RPCs are no longer
accepted. `GracefulStop()` facilitates this process, allowing the server to
accepted. "Graceful shutdown function" facilitates this process, allowing the server to
transition smoothly without abruptly terminating active connections.

When `GracefulStop()` is called, the server immediately stops accepting new
When "Graceful shutdown function" is called, the server immediately stops accepting new
RPCs. In-flight RPCs are allowed to continue until they complete or a specified
deadline is reached. Once all active RPCs finish or the deadline expires, the
server shuts down completely.

For detailed semantics see [this][grpc doc].

### How to use Wait-for-Ready

The exact implementation of `GracefulStop()` varies depending on the
The exact implementation of "Graceful shutdown function" varies depending on the
programming language you are using. However, the general pattern
involves:

- Initiating the graceful shutdown process by calling `GracefulStop()` on your
gRPC server object. This function blocks until all currently running RPCs
completed. This ensures that in-flight requests are allowed to finish
processing.
- Initiating the graceful shutdown process by calling "Graceful shutdown
Function" on your gRPC server object. This function blocks until all
currently running RPCs completed. This ensures that in-flight requests are
allowed to finish processing.
- Specify a timeout period to limit the time allowed for in-progress RPCs to
finish. It's crucial to call `Stop()` on server object with a timeout before
calling `GracefulStop()`. This acts as a safety net, ensuring that the server
eventually shuts down even if some in-flight RPCs don't complete within a
reasonable timeframe. This prevents indefinite blocking.
finish. It's crucial to call "Forceful Shutdown Function" on server object
with a timeout before calling "Graceful shutdown function". This acts as a
safety net, ensuring that the server eventually shuts down even if some
in-flight RPCs don't complete within a reasonable timeframe. This prevents
indefinite blocking.

The following shows the sequence of events that occur, when a server graceful
shutdown is invoked while active RPCs are being process and client is sending
new RPCs.
stop is invoked, in-flight RPCs continue to prorcess but new RPCs are rejected.
If all in-flight RPCs are not finished in time, server is forcefully shutdown.
```mermaid
sequenceDiagram
Client->>Server: New RPC Request 1
Client->>Server: New RPC Request 2
Server->>Client: Processing RPC 1
Server->>Client: Processing RPC 2
Server-->>Server: GracefulStop() Invoked
Server-->>Server: Graceful Stop Invoked
Server->>Client: Continues Processing In-Flight RPCs
Client->>Server: New RPC Request 3 (Rejected)
alt RPCs complete within timeout
Expand All @@ -70,9 +69,9 @@ stateDiagram-v2

### Alternatives

- Forceful Shutdown: Immediately terminates the server using `Stop()` on server
object, potentially interrupting active RPCs and leading to errors on the
client-side. Use only as a last resort.
- Forceful Shutdown: Immediately terminates the server using "Forceful Shutdown
Function" on server object, potentially interrupting active RPCs and leading
to errors on the client-side. Use only as a last resort.

### Language Support

Expand All @@ -83,4 +82,3 @@ stateDiagram-v2
| Python | |

[Go example]: https://github.com/grpc/grpc-go/tree/master/examples/features/gracefulstop
[grpc doc]: https://github.com/grpc/grpc/blob/master/doc/server-graceful-stop.md

0 comments on commit 4f1bf98

Please sign in to comment.