|
|
|
@ -112,11 +112,13 @@ void resource_quota_server(grpc_end2end_test_config config) { |
|
|
|
|
grpc_resource_quota_create("test_server"); |
|
|
|
|
grpc_resource_quota_resize(resource_quota, 5 * 1024 * 1024); |
|
|
|
|
|
|
|
|
|
#define NUM_CALLS 100 |
|
|
|
|
#define NUM_CALLS 10 |
|
|
|
|
#define CLIENT_BASE_TAG 1000 |
|
|
|
|
#define SERVER_START_BASE_TAG 2000 |
|
|
|
|
#define SERVER_RECV_BASE_TAG 3000 |
|
|
|
|
#define SERVER_END_BASE_TAG 4000 |
|
|
|
|
#define NUM_ROUNDS 1 |
|
|
|
|
#define MAX_READING 4 |
|
|
|
|
|
|
|
|
|
grpc_arg arg; |
|
|
|
|
arg.key = GRPC_ARG_RESOURCE_QUOTA; |
|
|
|
@ -132,7 +134,10 @@ void resource_quota_server(grpc_end2end_test_config config) { |
|
|
|
|
* multiple round trips to deliver to the peer, and their exact contents of |
|
|
|
|
* will be verified on completion. */ |
|
|
|
|
gpr_slice request_payload_slice = generate_random_slice(); |
|
|
|
|
grpc_byte_buffer *request_payload = |
|
|
|
|
grpc_raw_byte_buffer_create(&request_payload_slice, 1); |
|
|
|
|
|
|
|
|
|
for (int r = 0; r < NUM_ROUNDS; r++) { |
|
|
|
|
grpc_call *client_calls[NUM_CALLS]; |
|
|
|
|
grpc_call *server_calls[NUM_CALLS]; |
|
|
|
|
grpc_metadata_array initial_metadata_recv[NUM_CALLS]; |
|
|
|
@ -151,9 +156,9 @@ void resource_quota_server(grpc_end2end_test_config config) { |
|
|
|
|
int pending_server_end_calls = 0; |
|
|
|
|
int cancelled_calls_on_client = 0; |
|
|
|
|
int cancelled_calls_on_server = 0; |
|
|
|
|
|
|
|
|
|
grpc_byte_buffer *request_payload = |
|
|
|
|
grpc_raw_byte_buffer_create(&request_payload_slice, 1); |
|
|
|
|
int num_ready_for_reading_on_server = 0; |
|
|
|
|
int num_currently_reading_on_server = 0; |
|
|
|
|
int ready_for_reading[NUM_CALLS]; |
|
|
|
|
|
|
|
|
|
grpc_op ops[6]; |
|
|
|
|
grpc_op *op; |
|
|
|
@ -170,9 +175,10 @@ void resource_quota_server(grpc_end2end_test_config config) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < NUM_CALLS; i++) { |
|
|
|
|
error = grpc_server_request_call( |
|
|
|
|
f.server, &server_calls[i], &call_details[i], &request_metadata_recv[i], |
|
|
|
|
f.cq, f.cq, tag(SERVER_START_BASE_TAG + i)); |
|
|
|
|
error = |
|
|
|
|
grpc_server_request_call(f.server, &server_calls[i], &call_details[i], |
|
|
|
|
&request_metadata_recv[i], f.cq, f.cq, |
|
|
|
|
tag(SERVER_START_BASE_TAG + i)); |
|
|
|
|
GPR_ASSERT(GRPC_CALL_OK == error); |
|
|
|
|
|
|
|
|
|
pending_server_start_calls++; |
|
|
|
@ -224,7 +230,39 @@ void resource_quota_server(grpc_end2end_test_config config) { |
|
|
|
|
while (pending_client_calls + pending_server_recv_calls + |
|
|
|
|
pending_server_end_calls > |
|
|
|
|
0) { |
|
|
|
|
grpc_event ev = grpc_completion_queue_next(f.cq, n_seconds_time(10), NULL); |
|
|
|
|
gpr_log(GPR_DEBUG, "cur=%d ready=%d", num_currently_reading_on_server, |
|
|
|
|
num_ready_for_reading_on_server); |
|
|
|
|
while (num_currently_reading_on_server < MAX_READING && |
|
|
|
|
num_ready_for_reading_on_server > 0) { |
|
|
|
|
int call_id = ready_for_reading[--num_ready_for_reading_on_server]; |
|
|
|
|
|
|
|
|
|
gpr_log(GPR_DEBUG, "start reading %d", call_id); |
|
|
|
|
|
|
|
|
|
memset(ops, 0, sizeof(ops)); |
|
|
|
|
op = ops; |
|
|
|
|
op->op = GRPC_OP_SEND_INITIAL_METADATA; |
|
|
|
|
op->data.send_initial_metadata.count = 0; |
|
|
|
|
op->flags = 0; |
|
|
|
|
op->reserved = NULL; |
|
|
|
|
op++; |
|
|
|
|
op->op = GRPC_OP_RECV_MESSAGE; |
|
|
|
|
op->data.recv_message = &request_payload_recv[call_id]; |
|
|
|
|
op->flags = 0; |
|
|
|
|
op->reserved = NULL; |
|
|
|
|
op++; |
|
|
|
|
error = grpc_call_start_batch( |
|
|
|
|
server_calls[call_id], ops, (size_t)(op - ops), |
|
|
|
|
tag(SERVER_RECV_BASE_TAG + call_id), NULL); |
|
|
|
|
GPR_ASSERT(GRPC_CALL_OK == error); |
|
|
|
|
|
|
|
|
|
num_currently_reading_on_server++; |
|
|
|
|
|
|
|
|
|
gpr_log(GPR_DEBUG, "> cur=%d ready=%d", num_currently_reading_on_server, |
|
|
|
|
num_ready_for_reading_on_server); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
grpc_event ev = |
|
|
|
|
grpc_completion_queue_next(f.cq, n_seconds_time(10), NULL); |
|
|
|
|
GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); |
|
|
|
|
|
|
|
|
|
int ev_tag = (int)(intptr_t)ev.tag; |
|
|
|
@ -259,22 +297,8 @@ void resource_quota_server(grpc_end2end_test_config config) { |
|
|
|
|
GPR_ASSERT(call_id >= 0); |
|
|
|
|
GPR_ASSERT(call_id < NUM_CALLS); |
|
|
|
|
|
|
|
|
|
memset(ops, 0, sizeof(ops)); |
|
|
|
|
op = ops; |
|
|
|
|
op->op = GRPC_OP_SEND_INITIAL_METADATA; |
|
|
|
|
op->data.send_initial_metadata.count = 0; |
|
|
|
|
op->flags = 0; |
|
|
|
|
op->reserved = NULL; |
|
|
|
|
op++; |
|
|
|
|
op->op = GRPC_OP_RECV_MESSAGE; |
|
|
|
|
op->data.recv_message = &request_payload_recv[call_id]; |
|
|
|
|
op->flags = 0; |
|
|
|
|
op->reserved = NULL; |
|
|
|
|
op++; |
|
|
|
|
error = |
|
|
|
|
grpc_call_start_batch(server_calls[call_id], ops, (size_t)(op - ops), |
|
|
|
|
tag(SERVER_RECV_BASE_TAG + call_id), NULL); |
|
|
|
|
GPR_ASSERT(GRPC_CALL_OK == error); |
|
|
|
|
ready_for_reading[num_ready_for_reading_on_server++] = call_id; |
|
|
|
|
gpr_log(GPR_DEBUG, "queue read %d", call_id); |
|
|
|
|
|
|
|
|
|
GPR_ASSERT(pending_server_start_calls > 0); |
|
|
|
|
pending_server_start_calls--; |
|
|
|
@ -311,14 +335,15 @@ void resource_quota_server(grpc_end2end_test_config config) { |
|
|
|
|
op->flags = 0; |
|
|
|
|
op->reserved = NULL; |
|
|
|
|
op++; |
|
|
|
|
error = |
|
|
|
|
grpc_call_start_batch(server_calls[call_id], ops, (size_t)(op - ops), |
|
|
|
|
error = grpc_call_start_batch(server_calls[call_id], ops, |
|
|
|
|
(size_t)(op - ops), |
|
|
|
|
tag(SERVER_END_BASE_TAG + call_id), NULL); |
|
|
|
|
GPR_ASSERT(GRPC_CALL_OK == error); |
|
|
|
|
|
|
|
|
|
GPR_ASSERT(pending_server_recv_calls > 0); |
|
|
|
|
pending_server_recv_calls--; |
|
|
|
|
pending_server_end_calls++; |
|
|
|
|
num_currently_reading_on_server--; |
|
|
|
|
} else { |
|
|
|
|
int call_id = ev_tag - SERVER_END_BASE_TAG; |
|
|
|
|
GPR_ASSERT(call_id >= 0); |
|
|
|
@ -338,9 +363,7 @@ void resource_quota_server(grpc_end2end_test_config config) { |
|
|
|
|
GPR_INFO, |
|
|
|
|
"Done. %d total calls: %d cancelled at server, %d cancelled at client.", |
|
|
|
|
NUM_CALLS, cancelled_calls_on_server, cancelled_calls_on_client); |
|
|
|
|
|
|
|
|
|
GPR_ASSERT(cancelled_calls_on_client >= cancelled_calls_on_server); |
|
|
|
|
GPR_ASSERT(cancelled_calls_on_server >= 0.9 * cancelled_calls_on_client); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
grpc_byte_buffer_destroy(request_payload); |
|
|
|
|
gpr_slice_unref(request_payload_slice); |
|
|
|
|