mirror of https://github.com/grpc/grpc.git
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
3.3 KiB
77 lines
3.3 KiB
Connection Backoff Interop Test Descriptions |
|
=============================================== |
|
|
|
This test is to verify the client is reconnecting the server with correct |
|
backoffs as specified in |
|
[the spec](https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md). |
|
The test server has a port (control_port) running a rpc service for controlling |
|
the server and another port (retry_port) to close any incoming tcp connections. |
|
The test has the following flow: |
|
|
|
1. The server starts listening on control_port. |
|
2. The client calls Start rpc on server control_port. |
|
3. The server starts listening on retry_port. |
|
4. The client connects to server retry_port and retries with backoff for 540s, |
|
which translates to about 13 retries. |
|
5. The client calls Stop rpc on server control port. |
|
6. The client checks the response to see whether the server thinks the backoffs |
|
are conforming the spec or do its own check on the backoffs in the response. |
|
|
|
Client and server use |
|
[test.proto](https://github.com/grpc/grpc/blob/master/src/proto/grpc/testing/test.proto). |
|
Each language should implement its own client. The C++ server is shared among |
|
languages. |
|
|
|
Client |
|
------ |
|
|
|
Clients should accept these arguments: |
|
* --server_control_port=PORT |
|
* The server port to connect to for rpc. For example, "8080" |
|
* --server_retry_port=PORT |
|
* The server port to connect to for testing backoffs. For example, "8081" |
|
|
|
The client must connect to the control port without TLS. The client must connect |
|
to the retry port with TLS. The client should either assert on the server |
|
returned backoff status or check the returned backoffs on its own. |
|
|
|
Procedure of client: |
|
|
|
1. Calls Start on server control port with a large deadline or no deadline, |
|
waits for its finish and checks it succeeded. |
|
2. Initiates a channel connection to server retry port, which should perform |
|
reconnections with proper backoffs. A convenient way to achieve this is to |
|
call Start with a deadline of 540s. The rpc should fail with deadline exceeded. |
|
3. Calls Stop on server control port and checks it succeeded. |
|
4. Checks the response to see whether the server thinks the backoffs passed the |
|
test. |
|
5. Optionally, the client can do its own check on the returned backoffs. |
|
|
|
|
|
Server |
|
------ |
|
|
|
A C++ server can be used for the test. Other languages do NOT need to implement |
|
a server. To minimize the network delay, the server binary should run on the |
|
same machine or on a nearby machine (in terms of network distance) with the |
|
client binary. |
|
|
|
A server implements the ReconnectService to its state. It also opens a |
|
tcp server on the retry_port, which just shuts down all incoming tcp |
|
connections to simulate connection failures. The server will keep a record of |
|
all the reconnection timestamps and return the connection backoffs in the |
|
response in milliseconds. The server also checks the backoffs to see whether |
|
they conform the spec and returns whether the client passes the test. |
|
|
|
If the server receives a Start call when another client is being tested, it |
|
finishes the call when the other client is done. If some other host connects |
|
to the server retry_port when a client is being tested, the server will log an |
|
error but likely would think the client fails the test. |
|
|
|
The server accepts these arguments: |
|
|
|
* --control_port=PORT |
|
* The port to listen on for control rpcs. For example, "8080" |
|
* --retry_port=PORT |
|
* The tcp server port. For example, "8081" |
|
|
|
|