aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/grpc++/impl/codegen/completion_queue.h22
-rw-r--r--include/grpc++/impl/codegen/server_interface.h2
-rw-r--r--src/core/ext/transport/chttp2/client/chttp2_connector.c10
-rw-r--r--src/core/ext/transport/chttp2/server/chttp2_server.c16
-rw-r--r--src/core/ext/transport/chttp2/server/chttp2_server.h3
-rw-r--r--src/core/ext/transport/chttp2/server/insecure/server_chttp2.c2
-rw-r--r--src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c6
-rw-r--r--src/core/ext/transport/chttp2/transport/chttp2_transport.c78
-rw-r--r--src/core/ext/transport/chttp2/transport/internal.h9
-rw-r--r--src/core/ext/transport/chttp2/transport/writing.c2
-rw-r--r--src/core/lib/surface/call.c4
-rw-r--r--src/cpp/common/completion_queue_cc.cc14
-rw-r--r--src/cpp/server/server_cc.cc17
-rw-r--r--src/objective-c/GRPCClient/private/GRPCWrappedCall.m2
-rw-r--r--test/cpp/end2end/server_crash_test.cc4
-rw-r--r--test/cpp/interop/interop_server.cc2
-rw-r--r--test/cpp/interop/interop_server_bootstrap.cc4
-rw-r--r--test/cpp/interop/interop_test.cc2
-rw-r--r--test/cpp/interop/server_helper.h6
-rwxr-xr-xtest/cpp/qps/gen_build_yaml.py6
-rwxr-xr-xtools/run_tests/run_tests.py2
-rw-r--r--tools/run_tests/tests.json204
22 files changed, 224 insertions, 193 deletions
diff --git a/include/grpc++/impl/codegen/completion_queue.h b/include/grpc++/impl/codegen/completion_queue.h
index ef00163b7e..944f2c3919 100644
--- a/include/grpc++/impl/codegen/completion_queue.h
+++ b/include/grpc++/impl/codegen/completion_queue.h
@@ -52,6 +52,7 @@
#include <grpc++/impl/codegen/grpc_library.h>
#include <grpc++/impl/codegen/status.h>
#include <grpc++/impl/codegen/time.h>
+#include <grpc/impl/codegen/atm.h>
struct grpc_completion_queue;
@@ -101,6 +102,7 @@ class CompletionQueue : private GrpcLibraryCodegen {
/// instance.
CompletionQueue() {
cq_ = g_core_codegen_interface->grpc_completion_queue_create(nullptr);
+ InitialAvalanching(); // reserve this for the future shutdown
}
/// Wrap \a take, taking ownership of the instance.
@@ -151,7 +153,8 @@ class CompletionQueue : private GrpcLibraryCodegen {
/// Request the shutdown of the queue.
///
- /// \warning This method must be called at some point. Once invoked, \a Next
+ /// \warning This method must be called at some point if this completion queue
+ /// is accessed with Next or AsyncNext. Once invoked, \a Next
/// will start to return false and \a AsyncNext will return \a
/// NextStatus::SHUTDOWN. Only once either one of these methods does that
/// (that is, once the queue has been \em drained) can an instance of this
@@ -165,6 +168,21 @@ class CompletionQueue : private GrpcLibraryCodegen {
/// owership is performed.
grpc_completion_queue* cq() { return cq_; }
+ /// Manage state of avalanching operations : completion queue tags that
+ /// trigger other completion queue operations. The underlying core completion
+ /// queue should not really shutdown until all avalanching operations have
+ /// been finalized. Note that we maintain the requirement that an avalanche
+ /// registration must take place before CQ shutdown (which must be maintained
+ /// elsehwere)
+ void InitialAvalanching() {
+ gpr_atm_rel_store(&avalanches_in_flight_, static_cast<gpr_atm>(1));
+ }
+ void RegisterAvalanching() {
+ gpr_atm_no_barrier_fetch_add(&avalanches_in_flight_,
+ static_cast<gpr_atm>(1));
+ };
+ void CompleteAvalanching();
+
private:
// Friend synchronous wrappers so that they can access Pluck(), which is
// a semi-private API geared towards the synchronous implementation.
@@ -229,6 +247,8 @@ class CompletionQueue : private GrpcLibraryCodegen {
}
grpc_completion_queue* cq_; // owned
+
+ gpr_atm avalanches_in_flight_;
};
/// A specific type of completion queue used by the processing of notifications
diff --git a/include/grpc++/impl/codegen/server_interface.h b/include/grpc++/impl/codegen/server_interface.h
index 41a64bead0..666b9ff66e 100644
--- a/include/grpc++/impl/codegen/server_interface.h
+++ b/include/grpc++/impl/codegen/server_interface.h
@@ -140,7 +140,7 @@ class ServerInterface : public CallHook {
ServerAsyncStreamingInterface* stream,
CompletionQueue* call_cq, void* tag,
bool delete_on_finalize);
- virtual ~BaseAsyncRequest() {}
+ virtual ~BaseAsyncRequest();
bool FinalizeResult(void** tag, bool* status) override;
diff --git a/src/core/ext/transport/chttp2/client/chttp2_connector.c b/src/core/ext/transport/chttp2/client/chttp2_connector.c
index 213395c20f..568b114d64 100644
--- a/src/core/ext/transport/chttp2/client/chttp2_connector.c
+++ b/src/core/ext/transport/chttp2/client/chttp2_connector.c
@@ -56,6 +56,7 @@ typedef struct {
gpr_refcount refs;
bool shutdown;
+ bool connecting;
char *server_name;
grpc_chttp2_create_handshakers_func create_handshakers;
@@ -103,7 +104,9 @@ static void chttp2_connector_shutdown(grpc_exec_ctx *exec_ctx,
}
// If handshaking is not yet in progress, shutdown the endpoint.
// Otherwise, the handshaker will do this for us.
- if (c->endpoint != NULL) grpc_endpoint_shutdown(exec_ctx, c->endpoint);
+ if (!c->connecting && c->endpoint != NULL) {
+ grpc_endpoint_shutdown(exec_ctx, c->endpoint);
+ }
gpr_mu_unlock(&c->mu);
}
@@ -192,6 +195,8 @@ static void on_initial_connect_string_sent(grpc_exec_ctx *exec_ctx, void *arg,
static void connected(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
chttp2_connector *c = arg;
gpr_mu_lock(&c->mu);
+ GPR_ASSERT(c->connecting);
+ c->connecting = false;
if (error != GRPC_ERROR_NONE || c->shutdown) {
if (error == GRPC_ERROR_NONE) {
error = GRPC_ERROR_CREATE("connector shutdown");
@@ -202,6 +207,7 @@ static void connected(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
grpc_closure *notify = c->notify;
c->notify = NULL;
grpc_exec_ctx_sched(exec_ctx, notify, error, NULL);
+ if (c->endpoint != NULL) grpc_endpoint_shutdown(exec_ctx, c->endpoint);
gpr_mu_unlock(&c->mu);
chttp2_connector_unref(exec_ctx, arg);
} else {
@@ -235,6 +241,8 @@ static void chttp2_connector_connect(grpc_exec_ctx *exec_ctx,
GPR_ASSERT(c->endpoint == NULL);
chttp2_connector_ref(con); // Ref taken for callback.
grpc_closure_init(&c->connected, connected, c);
+ GPR_ASSERT(!c->connecting);
+ c->connecting = true;
grpc_tcp_client_connect(exec_ctx, &c->connected, &c->endpoint,
args->interested_parties, args->channel_args,
args->addr, args->deadline);
diff --git a/src/core/ext/transport/chttp2/server/chttp2_server.c b/src/core/ext/transport/chttp2/server/chttp2_server.c
index 7795606e73..8ee7e29316 100644
--- a/src/core/ext/transport/chttp2/server/chttp2_server.c
+++ b/src/core/ext/transport/chttp2/server/chttp2_server.c
@@ -58,8 +58,8 @@ void grpc_chttp2_server_handshaker_factory_create_handshakers(
grpc_chttp2_server_handshaker_factory *handshaker_factory,
grpc_handshake_manager *handshake_mgr) {
if (handshaker_factory != NULL) {
- handshaker_factory->vtable->create_handshakers(
- exec_ctx, handshaker_factory, handshake_mgr);
+ handshaker_factory->vtable->create_handshakers(exec_ctx, handshaker_factory,
+ handshake_mgr);
}
}
@@ -71,7 +71,6 @@ void grpc_chttp2_server_handshaker_factory_destroy(
}
}
-
typedef struct pending_handshake_manager_node {
grpc_handshake_manager *handshake_mgr;
struct pending_handshake_manager_node *next;
@@ -196,9 +195,9 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp,
// args instead of hard-coding it.
const gpr_timespec deadline = gpr_time_add(
gpr_now(GPR_CLOCK_MONOTONIC), gpr_time_from_seconds(120, GPR_TIMESPAN));
- grpc_handshake_manager_do_handshake(
- exec_ctx, connection_state->handshake_mgr, tcp, state->args, deadline,
- acceptor, on_handshake_done, connection_state);
+ grpc_handshake_manager_do_handshake(exec_ctx, connection_state->handshake_mgr,
+ tcp, state->args, deadline, acceptor,
+ on_handshake_done, connection_state);
}
/* Server callback: start listening on our ports */
@@ -275,9 +274,8 @@ grpc_error *grpc_chttp2_server_add_port(
memset(state, 0, sizeof(*state));
grpc_closure_init(&state->tcp_server_shutdown_complete,
tcp_server_shutdown_complete, state);
- err =
- grpc_tcp_server_create(exec_ctx, &state->tcp_server_shutdown_complete,
- args, &tcp_server);
+ err = grpc_tcp_server_create(exec_ctx, &state->tcp_server_shutdown_complete,
+ args, &tcp_server);
if (err != GRPC_ERROR_NONE) {
goto error;
}
diff --git a/src/core/ext/transport/chttp2/server/chttp2_server.h b/src/core/ext/transport/chttp2/server/chttp2_server.h
index b1ff04bcbb..3073399267 100644
--- a/src/core/ext/transport/chttp2/server/chttp2_server.h
+++ b/src/core/ext/transport/chttp2/server/chttp2_server.h
@@ -73,7 +73,6 @@ void grpc_chttp2_server_handshaker_factory_destroy(
grpc_error *grpc_chttp2_server_add_port(
grpc_exec_ctx *exec_ctx, grpc_server *server, const char *addr,
grpc_channel_args *args,
- grpc_chttp2_server_handshaker_factory *handshaker_factory,
- int *port_num);
+ grpc_chttp2_server_handshaker_factory *handshaker_factory, int *port_num);
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_SERVER_CHTTP2_SERVER_H */
diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
index 366312bd72..7e286d4e46 100644
--- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
+++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
@@ -45,7 +45,7 @@ int grpc_server_add_insecure_http2_port(grpc_server *server, const char *addr) {
int port_num = 0;
GRPC_API_TRACE("grpc_server_add_insecure_http2_port(server=%p, addr=%s)", 2,
(server, addr));
- grpc_error* err = grpc_chttp2_server_add_port(
+ grpc_error *err = grpc_chttp2_server_add_port(
&exec_ctx, server, addr,
grpc_channel_args_copy(grpc_server_get_channel_args(server)),
NULL /* handshaker_factory */, &port_num);
diff --git a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
index 5f41728132..85c21f0ca2 100644
--- a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
+++ b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
@@ -64,7 +64,7 @@ static void server_security_handshaker_factory_create_handshakers(
}
static void server_security_handshaker_factory_destroy(
- grpc_exec_ctx* exec_ctx, grpc_chttp2_server_handshaker_factory *hf) {
+ grpc_exec_ctx *exec_ctx, grpc_chttp2_server_handshaker_factory *hf) {
server_security_handshaker_factory *handshaker_factory =
(server_security_handshaker_factory *)hf;
GRPC_SECURITY_CONNECTOR_UNREF(&handshaker_factory->security_connector->base,
@@ -106,8 +106,8 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr,
goto done;
}
// Create handshaker factory.
- server_security_handshaker_factory* handshaker_factory =
- gpr_malloc(sizeof(*handshaker_factory));
+ server_security_handshaker_factory *handshaker_factory =
+ gpr_malloc(sizeof(*handshaker_factory));
memset(handshaker_factory, 0, sizeof(*handshaker_factory));
handshaker_factory->base.vtable = &server_security_handshaker_factory_vtable;
handshaker_factory->security_connector = sc;
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index 3e7c078d3c..3b84898fee 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -425,7 +425,6 @@ static void close_transport_locked(grpc_exec_ctx *exec_ctx,
/* flush writable stream list to avoid dangling references */
grpc_chttp2_stream *s;
while (grpc_chttp2_list_pop_writable_stream(t, &s)) {
- grpc_chttp2_leave_writing_lists(exec_ctx, t, s);
GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:close");
}
end_all_the_calls(exec_ctx, t, GRPC_ERROR_REF(error));
@@ -521,10 +520,6 @@ static void destroy_stream_locked(grpc_exec_ctx *exec_ctx, void *sp,
}
}
- if (s->fail_pending_writes_on_writes_finished_error != NULL) {
- GRPC_ERROR_UNREF(s->fail_pending_writes_on_writes_finished_error);
- }
-
GPR_ASSERT(s->send_initial_metadata_finished == NULL);
GPR_ASSERT(s->fetching_send_message == NULL);
GPR_ASSERT(s->send_trailing_metadata_finished == NULL);
@@ -604,11 +599,13 @@ static void set_write_state(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
write_state_name(t->write_state),
write_state_name(st), reason));
t->write_state = st;
- if (st == GRPC_CHTTP2_WRITE_STATE_IDLE &&
- t->close_transport_on_writes_finished != NULL) {
- grpc_error *err = t->close_transport_on_writes_finished;
- t->close_transport_on_writes_finished = NULL;
- close_transport_locked(exec_ctx, t, err);
+ if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
+ grpc_exec_ctx_enqueue_list(exec_ctx, &t->run_after_write, NULL);
+ if (t->close_transport_on_writes_finished != NULL) {
+ grpc_error *err = t->close_transport_on_writes_finished;
+ t->close_transport_on_writes_finished = NULL;
+ close_transport_locked(exec_ctx, t, err);
+ }
}
}
@@ -825,7 +822,14 @@ static void maybe_start_some_streams(grpc_exec_ctx *exec_ctx,
}
}
+/* Flag that this closure barrier wants stats to be updated before finishing */
#define CLOSURE_BARRIER_STATS_BIT (1 << 0)
+/* Flag that this closure barrier may be covering a write in a pollset, and so
+ we should not complete this closure until we can prove that the write got
+ scheduled */
+#define CLOSURE_BARRIER_MAY_COVER_WRITE (1 << 1)
+/* First bit of the reference count, stored in the high order bits (with the low
+ bits being used for flags defined above) */
#define CLOSURE_BARRIER_FIRST_REF_BIT (1 << 16)
static grpc_closure *add_closure_barrier(grpc_closure *closure) {
@@ -852,6 +856,16 @@ void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx,
return;
}
closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
+ if (grpc_http_trace) {
+ const char *errstr = grpc_error_string(error);
+ gpr_log(GPR_DEBUG,
+ "complete_closure_step: %p refs=%d flags=0x%04x desc=%s err=%s",
+ closure,
+ (int)(closure->next_data.scratch / CLOSURE_BARRIER_FIRST_REF_BIT),
+ (int)(closure->next_data.scratch % CLOSURE_BARRIER_FIRST_REF_BIT),
+ desc, errstr);
+ grpc_error_free_string(errstr);
+ }
if (error != GRPC_ERROR_NONE) {
if (closure->error_data.error == GRPC_ERROR_NONE) {
closure->error_data.error =
@@ -868,7 +882,13 @@ void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx,
grpc_transport_move_stats(&s->stats, s->collecting_stats);
s->collecting_stats = NULL;
}
- grpc_closure_run(exec_ctx, closure, closure->error_data.error);
+ if ((t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE) ||
+ !(closure->next_data.scratch & CLOSURE_BARRIER_MAY_COVER_WRITE)) {
+ grpc_closure_run(exec_ctx, closure, closure->error_data.error);
+ } else {
+ grpc_closure_list_append(&t->run_after_write, closure,
+ closure->error_data.error);
+ }
}
}
@@ -1013,6 +1033,7 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op,
if (op->send_initial_metadata != NULL) {
GPR_ASSERT(s->send_initial_metadata_finished == NULL);
+ on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
s->send_initial_metadata_finished = add_closure_barrier(on_complete);
s->send_initial_metadata = op->send_initial_metadata;
const size_t metadata_size =
@@ -1066,6 +1087,7 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op,
}
if (op->send_message != NULL) {
+ on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
s->fetching_send_message_finished = add_closure_barrier(op->on_complete);
if (s->write_closed) {
grpc_chttp2_complete_closure_step(
@@ -1103,6 +1125,7 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op,
if (op->send_trailing_metadata != NULL) {
GPR_ASSERT(s->send_trailing_metadata_finished == NULL);
+ on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
s->send_trailing_metadata_finished = add_closure_barrier(on_complete);
s->send_trailing_metadata = op->send_trailing_metadata;
const size_t metadata_size =
@@ -1406,7 +1429,6 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
}
}
if (grpc_chttp2_list_remove_writable_stream(t, s)) {
- grpc_chttp2_leave_writing_lists(exec_ctx, t, s);
GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:remove_stream");
}
@@ -1537,41 +1559,9 @@ static grpc_error *removal_error(grpc_error *extra_error, grpc_chttp2_stream *s,
return error;
}
-void grpc_chttp2_leave_writing_lists(grpc_exec_ctx *exec_ctx,
- grpc_chttp2_transport *t,
- grpc_chttp2_stream *s) {
- if (s->need_fail_pending_writes_on_writes_finished) {
- grpc_error *error = s->fail_pending_writes_on_writes_finished_error;
- s->fail_pending_writes_on_writes_finished_error = NULL;
- s->need_fail_pending_writes_on_writes_finished = false;
- grpc_chttp2_fail_pending_writes(exec_ctx, t, s, error);
- }
-}
-
void grpc_chttp2_fail_pending_writes(grpc_exec_ctx *exec_ctx,
grpc_chttp2_transport *t,
grpc_chttp2_stream *s, grpc_error *error) {
- if (s->need_fail_pending_writes_on_writes_finished ||
- (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE &&
- (s->included[GRPC_CHTTP2_LIST_WRITABLE] ||
- s->included[GRPC_CHTTP2_LIST_WRITING]))) {
- /* If a write is in progress, and it involves this stream, wait for the
- * write to complete before cancelling things out. If we don't do this, then
- * our combiner lock might think that some operation on its queue might be
- * covering a completion even though there is none, in which case we might
- * offload to another thread, which isn't guarateed to exist */
- if (error != GRPC_ERROR_NONE) {
- if (s->fail_pending_writes_on_writes_finished_error == GRPC_ERROR_NONE) {
- s->fail_pending_writes_on_writes_finished_error = GRPC_ERROR_CREATE(
- "Post-poned fail writes due to in-progress write");
- }
- s->fail_pending_writes_on_writes_finished_error = grpc_error_add_child(
- s->fail_pending_writes_on_writes_finished_error, error);
- }
- s->need_fail_pending_writes_on_writes_finished = true;
- return; /* early out */
- }
-
error =
removal_error(error, s, "Pending writes failed due to stream closure");
s->send_initial_metadata = NULL;
diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h
index 6cba1e7fd2..31eb1e01ac 100644
--- a/src/core/ext/transport/chttp2/transport/internal.h
+++ b/src/core/ext/transport/chttp2/transport/internal.h
@@ -327,6 +327,9 @@ struct grpc_chttp2_transport {
*/
grpc_error *close_transport_on_writes_finished;
+ /* a list of closures to run after writes are finished */
+ grpc_closure_list run_after_write;
+
/* buffer pool state */
/** have we scheduled a benign cleanup? */
bool benign_reclaimer_registered;
@@ -409,9 +412,6 @@ struct grpc_chttp2_stream {
grpc_error *read_closed_error;
/** the error that resulted in this stream being write-closed */
grpc_error *write_closed_error;
- /** should any writes be cleared once this stream becomes non-writable */
- bool need_fail_pending_writes_on_writes_finished;
- grpc_error *fail_pending_writes_on_writes_finished_error;
grpc_published_metadata_method published_metadata[2];
bool final_metadata_requested;
@@ -692,9 +692,6 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_exec_ctx *exec_ctx,
grpc_chttp2_transport *t,
grpc_chttp2_stream *s);
-void grpc_chttp2_leave_writing_lists(grpc_exec_ctx *exec_ctx,
- grpc_chttp2_transport *t,
- grpc_chttp2_stream *s);
void grpc_chttp2_fail_pending_writes(grpc_exec_ctx *exec_ctx,
grpc_chttp2_transport *t,
grpc_chttp2_stream *s, grpc_error *error);
diff --git a/src/core/ext/transport/chttp2/transport/writing.c b/src/core/ext/transport/chttp2/transport/writing.c
index 769b229a0d..139e7387c4 100644
--- a/src/core/ext/transport/chttp2/transport/writing.c
+++ b/src/core/ext/transport/chttp2/transport/writing.c
@@ -208,7 +208,6 @@ bool grpc_chttp2_begin_write(grpc_exec_ctx *exec_ctx,
GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:already_writing");
}
} else {
- grpc_chttp2_leave_writing_lists(exec_ctx, t, s);
GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:no_write");
}
}
@@ -253,7 +252,6 @@ void grpc_chttp2_end_write(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
grpc_chttp2_mark_stream_closed(exec_ctx, t, s, !t->is_client, 1,
GRPC_ERROR_REF(error));
}
- grpc_chttp2_leave_writing_lists(exec_ctx, t, s);
GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:end");
}
grpc_slice_buffer_reset_and_unref(&t->outbuf);
diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c
index 1e0f3eeca5..8ca3cab9d5 100644
--- a/src/core/lib/surface/call.c
+++ b/src/core/lib/surface/call.c
@@ -1551,6 +1551,10 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
goto done_with_error;
}
+ /* IF this is a server, then GRPC_OP_RECV_INITIAL_METADATA *must* come
+ from server.c. In that case, it's coming from accept_stream, and in
+ that case we're not necessarily covered by a poller. */
+ stream_op->covered_by_poller = call->is_client;
call->received_initial_metadata = 1;
call->buffered_metadata[0] = op->data.recv_initial_metadata;
grpc_closure_init(&call->receiving_initial_metadata_ready,
diff --git a/src/cpp/common/completion_queue_cc.cc b/src/cpp/common/completion_queue_cc.cc
index 00cc102f92..0408a41085 100644
--- a/src/cpp/common/completion_queue_cc.cc
+++ b/src/cpp/common/completion_queue_cc.cc
@@ -43,11 +43,21 @@ namespace grpc {
static internal::GrpcLibraryInitializer g_gli_initializer;
-CompletionQueue::CompletionQueue(grpc_completion_queue* take) : cq_(take) {}
+CompletionQueue::CompletionQueue(grpc_completion_queue* take) : cq_(take) {
+ InitialAvalanching();
+}
void CompletionQueue::Shutdown() {
g_gli_initializer.summon();
- grpc_completion_queue_shutdown(cq_);
+ CompleteAvalanching();
+}
+
+void CompletionQueue::CompleteAvalanching() {
+ // Check if this was the last avalanching operation
+ if (gpr_atm_no_barrier_fetch_add(&avalanches_in_flight_,
+ static_cast<gpr_atm>(-1)) == 1) {
+ grpc_completion_queue_shutdown(cq_);
+ }
}
CompletionQueue::NextStatus CompletionQueue::AsyncNextInternal(
diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc
index b7cfd6dbf1..817d85a81c 100644
--- a/src/cpp/server/server_cc.cc
+++ b/src/cpp/server/server_cc.cc
@@ -510,12 +510,6 @@ void Server::ShutdownInternal(gpr_timespec deadline) {
ShutdownTag shutdown_tag; // Dummy shutdown tag
grpc_server_shutdown_and_notify(server_, shutdown_cq.cq(), &shutdown_tag);
- // Shutdown all ThreadManagers. This will try to gracefully stop all the
- // threads in the ThreadManagers (once they process any inflight requests)
- for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) {
- (*it)->Shutdown(); // ThreadManager's Shutdown()
- }
-
shutdown_cq.Shutdown();
void* tag;
@@ -531,6 +525,12 @@ void Server::ShutdownInternal(gpr_timespec deadline) {
// Else in case of SHUTDOWN or GOT_EVENT, it means that the server has
// successfully shutdown
+ // Shutdown all ThreadManagers. This will try to gracefully stop all the
+ // threads in the ThreadManagers (once they process any inflight requests)
+ for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) {
+ (*it)->Shutdown(); // ThreadManager's Shutdown()
+ }
+
// Wait for threads in all ThreadManagers to terminate
for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) {
(*it)->Wait();
@@ -575,9 +575,14 @@ ServerInterface::BaseAsyncRequest::BaseAsyncRequest(
tag_(tag),
delete_on_finalize_(delete_on_finalize),
call_(nullptr) {
+ call_cq_->RegisterAvalanching(); // This op will trigger more ops
memset(&initial_metadata_array_, 0, sizeof(initial_metadata_array_));
}
+ServerInterface::BaseAsyncRequest::~BaseAsyncRequest() {
+ call_cq_->CompleteAvalanching();
+}
+
bool ServerInterface::BaseAsyncRequest::FinalizeResult(void** tag,
bool* status) {
if (*status) {
diff --git a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
index 627b6aa86d..38fcae0299 100644
--- a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
+++ b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
@@ -112,7 +112,7 @@
}
- (void)dealloc {
- gpr_free(_op.data.send_message);
+ grpc_byte_buffer_destroy(_op.data.send_message);
}
@end
diff --git a/test/cpp/end2end/server_crash_test.cc b/test/cpp/end2end/server_crash_test.cc
index 8cee1403dc..b1f9216055 100644
--- a/test/cpp/end2end/server_crash_test.cc
+++ b/test/cpp/end2end/server_crash_test.cc
@@ -138,7 +138,7 @@ TEST_F(CrashTest, ResponseStream) {
auto server = CreateServerAndClient("response");
gpr_sleep_until(gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
- gpr_time_from_seconds(5, GPR_TIMESPAN)));
+ gpr_time_from_seconds(60, GPR_TIMESPAN)));
KillClient();
server->Shutdown();
GPR_ASSERT(HadOneResponseStream());
@@ -148,7 +148,7 @@ TEST_F(CrashTest, BidiStream) {
auto server = CreateServerAndClient("bidi");
gpr_sleep_until(gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
- gpr_time_from_seconds(5, GPR_TIMESPAN)));
+ gpr_time_from_seconds(60, GPR_TIMESPAN)));
KillClient();
server->Shutdown();
GPR_ASSERT(HadOneBidiStream());
diff --git a/test/cpp/interop/interop_server.cc b/test/cpp/interop/interop_server.cc
index 8b50ae8c05..67456ce18b 100644
--- a/test/cpp/interop/interop_server.cc
+++ b/test/cpp/interop/interop_server.cc
@@ -344,7 +344,7 @@ void grpc::testing::interop::RunServer(
}
std::unique_ptr<Server> server(builder.BuildAndStart());
gpr_log(GPR_INFO, "Server listening on %s", server_address.str().c_str());
- while (!g_got_sigint) {
+ while (!gpr_atm_no_barrier_load(&g_got_sigint)) {
sleep(5);
}
}
diff --git a/test/cpp/interop/interop_server_bootstrap.cc b/test/cpp/interop/interop_server_bootstrap.cc
index 424f7ca7f0..99518c6943 100644
--- a/test/cpp/interop/interop_server_bootstrap.cc
+++ b/test/cpp/interop/interop_server_bootstrap.cc
@@ -37,10 +37,10 @@
#include "test/cpp/interop/server_helper.h"
#include "test/cpp/util/test_config.h"
-bool grpc::testing::interop::g_got_sigint = false;
+gpr_atm grpc::testing::interop::g_got_sigint;
static void sigint_handler(int x) {
- grpc::testing::interop::g_got_sigint = true;
+ gpr_atm_no_barrier_store(&grpc::testing::interop::g_got_sigint, true);
}
int main(int argc, char** argv) {
diff --git a/test/cpp/interop/interop_test.cc b/test/cpp/interop/interop_test.cc
index c066598d36..d4004740a4 100644
--- a/test/cpp/interop/interop_test.cc
+++ b/test/cpp/interop/interop_test.cc
@@ -126,7 +126,7 @@ int main(int argc, char** argv) {
return 1;
}
/* wait a little */
- sleep(2);
+ sleep(10);
/* start the clients */
ret = test_client(root, "127.0.0.1", port);
if (ret != 0) return ret;
diff --git a/test/cpp/interop/server_helper.h b/test/cpp/interop/server_helper.h
index fc4ea8b3e8..99539adee5 100644
--- a/test/cpp/interop/server_helper.h
+++ b/test/cpp/interop/server_helper.h
@@ -36,9 +36,11 @@
#include <memory>
+#include <grpc/compression.h>
+#include <grpc/impl/codegen/atm.h>
+
#include <grpc++/security/server_credentials.h>
#include <grpc++/server_context.h>
-#include <grpc/compression.h>
namespace grpc {
namespace testing {
@@ -62,7 +64,7 @@ class InteropServerContextInspector {
namespace interop {
-extern bool g_got_sigint;
+extern gpr_atm g_got_sigint;
void RunServer(std::shared_ptr<ServerCredentials> creds);
} // namespace interop
diff --git a/test/cpp/qps/gen_build_yaml.py b/test/cpp/qps/gen_build_yaml.py
index 4aa58d2737..188d6196e5 100755
--- a/test/cpp/qps/gen_build_yaml.py
+++ b/test/cpp/qps/gen_build_yaml.py
@@ -91,7 +91,7 @@ print yaml.dump({
'boringssl': True,
'defaults': 'boringssl',
'cpu_cost': guess_cpu(scenario_json, False),
- 'exclude_configs': ['tsan'],
+ 'exclude_configs': ['tsan', 'asan'],
'timeout_seconds': 6*60
}
for scenario_json in scenario_config.CXXLanguage().scenarios()
@@ -99,7 +99,7 @@ print yaml.dump({
] + [
{
'name': 'json_run_localhost',
- 'shortname': 'json_run_localhost:%s' % scenario_json['name'],
+ 'shortname': 'json_run_localhost:%s_low_thread_count' % scenario_json['name'],
'args': ['--scenarios_json', _scenario_json_string(scenario_json, True)],
'ci_platforms': ['linux'],
'platforms': ['linux'],
@@ -108,7 +108,7 @@ print yaml.dump({
'boringssl': True,
'defaults': 'boringssl',
'cpu_cost': guess_cpu(scenario_json, True),
- 'exclude_configs': sorted(c for c in configs_from_yaml if c != 'tsan'),
+ 'exclude_configs': sorted(c for c in configs_from_yaml if c not in ('tsan', 'asan')),
'timeout_seconds': 6*60
}
for scenario_json in scenario_config.CXXLanguage().scenarios()
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 1544ff369d..c49ee4a6cc 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -511,7 +511,7 @@ class PythonLanguage(object):
config.run,
timeout_seconds=5*60,
environ=dict(list(environment.items()) +
- [('GRPC_PYTHON_TESTRUNNER_FILTER', suite_name)]),
+ [('GRPC_PYTHON_TESTRUNNER_FILTER', str(suite_name))]),
shortname='%s.test.%s' % (config.name, suite_name),)
for suite_name in tests_json
for config in self.pythons]
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index c4bfd0a9a7..b76263b8b9 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -36765,7 +36765,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36788,7 +36789,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36811,7 +36813,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36834,7 +36837,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36857,7 +36861,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36880,7 +36885,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36903,7 +36909,8 @@
"cpu_cost": 1024,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36926,7 +36933,8 @@
"cpu_cost": 1024,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36949,7 +36957,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36972,7 +36981,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -36995,7 +37005,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37018,7 +37029,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37041,7 +37053,8 @@
"cpu_cost": 1024,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37064,7 +37077,8 @@
"cpu_cost": 1024,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37087,7 +37101,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37110,7 +37125,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37133,7 +37149,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37156,7 +37173,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37179,7 +37197,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37202,7 +37221,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37225,7 +37245,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37248,7 +37269,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37271,7 +37293,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37294,7 +37317,8 @@
"cpu_cost": 1024,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37317,7 +37341,8 @@
"cpu_cost": 1024,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37340,7 +37365,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37363,7 +37389,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37386,7 +37413,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37409,7 +37437,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37432,7 +37461,8 @@
"cpu_cost": 1024,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37455,7 +37485,8 @@
"cpu_cost": 1024,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37478,7 +37509,8 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37501,7 +37533,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37524,7 +37557,8 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "tsan"
+ "tsan",
+ "asan"
],
"flaky": false,
"language": "c++",
@@ -37547,7 +37581,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37570,7 +37603,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_generic_async_streaming_ping_pong_secure",
+ "shortname": "json_run_localhost:cpp_generic_async_streaming_ping_pong_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37585,7 +37618,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37608,7 +37640,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_secure",
+ "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37623,7 +37655,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37646,7 +37677,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_secure",
+ "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37661,7 +37692,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37684,7 +37714,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37699,7 +37729,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37722,7 +37751,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37737,7 +37766,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37760,7 +37788,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37775,7 +37803,6 @@
"cpu_cost": 64,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37798,7 +37825,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37813,7 +37840,6 @@
"cpu_cost": 64,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37836,7 +37862,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37851,7 +37877,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37874,7 +37899,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37889,7 +37914,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37912,7 +37936,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37927,7 +37951,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37950,7 +37973,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota",
+ "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota_low_thread_count",
"timeout_seconds": 360
},
{
@@ -37965,7 +37988,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -37988,7 +38010,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_ping_pong_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_ping_pong_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38003,7 +38025,6 @@
"cpu_cost": 64,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38026,7 +38047,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38041,7 +38062,6 @@
"cpu_cost": 64,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38064,7 +38084,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38079,7 +38099,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38102,7 +38121,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38117,7 +38136,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38140,7 +38158,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38155,7 +38173,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38178,7 +38195,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota",
+ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38193,7 +38210,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38216,7 +38232,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_generic_async_streaming_ping_pong_insecure",
+ "shortname": "json_run_localhost:cpp_generic_async_streaming_ping_pong_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38231,7 +38247,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38254,7 +38269,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_insecure",
+ "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38269,7 +38284,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38292,7 +38306,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_insecure",
+ "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38307,7 +38321,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38330,7 +38343,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38345,7 +38358,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38368,7 +38380,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38383,7 +38395,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38406,7 +38417,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38421,7 +38432,6 @@
"cpu_cost": 64,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38444,7 +38454,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38459,7 +38469,6 @@
"cpu_cost": 64,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38482,7 +38491,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38497,7 +38506,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38520,7 +38528,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38535,7 +38543,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38558,7 +38565,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38573,7 +38580,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38596,7 +38602,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota",
+ "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38611,7 +38617,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38634,7 +38639,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_ping_pong_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_ping_pong_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38649,7 +38654,6 @@
"cpu_cost": 64,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38672,7 +38676,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38687,7 +38691,6 @@
"cpu_cost": 64,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38710,7 +38713,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota",
+ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38725,7 +38728,6 @@
"cpu_cost": 2,
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38748,7 +38750,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38763,7 +38765,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38786,7 +38787,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure",
+ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_low_thread_count",
"timeout_seconds": 360
},
{
@@ -38801,7 +38802,6 @@
"cpu_cost": "capacity",
"defaults": "boringssl",
"exclude_configs": [
- "asan",
"asan-noleaks",
"asan-trace-cmp",
"basicprof",
@@ -38824,7 +38824,7 @@
"platforms": [
"linux"
],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota",
+ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count",
"timeout_seconds": 360
},
{