diff --git a/CMakeLists.txt b/CMakeLists.txt index 629b7c62260..b45cc7fcc6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1405,7 +1405,6 @@ add_library(end2end_tests test/core/end2end/tests/max_connection_idle.cc test/core/end2end/tests/max_message_length.cc test/core/end2end/tests/negative_deadline.cc - test/core/end2end/tests/no_error_on_hotpath.cc test/core/end2end/tests/no_logging.cc test/core/end2end/tests/no_op.cc test/core/end2end/tests/payload.cc diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index aa8f245b708..05c897a3581 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -101,7 +101,6 @@ libs: - test/core/end2end/tests/max_connection_idle.cc - test/core/end2end/tests/max_message_length.cc - test/core/end2end/tests/negative_deadline.cc - - test/core/end2end/tests/no_error_on_hotpath.cc - test/core/end2end/tests/no_logging.cc - test/core/end2end/tests/no_op.cc - test/core/end2end/tests/payload.cc diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 3a1e0388c07..8a61a405830 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -2635,7 +2635,6 @@ Pod::Spec.new do |s| 'test/core/end2end/tests/max_connection_idle.cc', 'test/core/end2end/tests/max_message_length.cc', 'test/core/end2end/tests/negative_deadline.cc', - 'test/core/end2end/tests/no_error_on_hotpath.cc', 'test/core/end2end/tests/no_logging.cc', 'test/core/end2end/tests/no_op.cc', 'test/core/end2end/tests/payload.cc', diff --git a/grpc.gyp b/grpc.gyp index 72bbcdb5799..b421221137b 100644 --- a/grpc.gyp +++ b/grpc.gyp @@ -231,7 +231,6 @@ 'test/core/end2end/tests/max_connection_idle.cc', 'test/core/end2end/tests/max_message_length.cc', 'test/core/end2end/tests/negative_deadline.cc', - 'test/core/end2end/tests/no_error_on_hotpath.cc', 'test/core/end2end/tests/no_logging.cc', 'test/core/end2end/tests/no_op.cc', 'test/core/end2end/tests/payload.cc', diff --git a/src/core/lib/iomgr/error.cc b/src/core/lib/iomgr/error.cc index 927146a3b7b..527ff503dc2 100644 --- a/src/core/lib/iomgr/error.cc +++ b/src/core/lib/iomgr/error.cc @@ -42,16 +42,6 @@ grpc_core::DebugOnlyTraceFlag grpc_trace_error_refcount(false, "error_refcount"); grpc_core::DebugOnlyTraceFlag grpc_trace_closure(false, "closure"); -static gpr_atm g_error_creation_allowed = true; - -void grpc_disable_error_creation() { - gpr_atm_no_barrier_store(&g_error_creation_allowed, false); -} - -void grpc_enable_error_creation() { - gpr_atm_no_barrier_store(&g_error_creation_allowed, true); -} - absl::Status grpc_status_create(absl::StatusCode code, absl::string_view msg, const grpc_core::DebugLocation& location, size_t children_count, absl::Status* children) { diff --git a/src/core/lib/iomgr/error.h b/src/core/lib/iomgr/error.h index 137e70cecd4..31212086a4d 100644 --- a/src/core/lib/iomgr/error.h +++ b/src/core/lib/iomgr/error.h @@ -132,11 +132,6 @@ typedef enum { std::string grpc_error_std_string(grpc_error_handle error); -// debug only toggles that allow for a sanity to check that ensures we will -// never create any errors in the per-RPC hotpath. -void grpc_disable_error_creation(); -void grpc_enable_error_creation(); - #define GRPC_ERROR_NONE absl::OkStatus() #define GRPC_ERROR_OOM absl::Status(absl::ResourceExhaustedError("")) #define GRPC_ERROR_CANCELLED absl::CancelledError() diff --git a/test/core/end2end/end2end_tests.cc b/test/core/end2end/end2end_tests.cc index 79fb8b65c4a..5e1f9ff2a51 100644 --- a/test/core/end2end/end2end_tests.cc +++ b/test/core/end2end/end2end_tests.cc @@ -105,8 +105,6 @@ extern void max_message_length(grpc_end2end_test_config config); extern void max_message_length_pre_init(void); extern void negative_deadline(grpc_end2end_test_config config); extern void negative_deadline_pre_init(void); -extern void no_error_on_hotpath(grpc_end2end_test_config config); -extern void no_error_on_hotpath_pre_init(void); extern void no_logging(grpc_end2end_test_config config); extern void no_logging_pre_init(void); extern void no_op(grpc_end2end_test_config config); @@ -259,7 +257,6 @@ void grpc_end2end_tests_pre_init(void) { max_connection_idle_pre_init(); max_message_length_pre_init(); negative_deadline_pre_init(); - no_error_on_hotpath_pre_init(); no_logging_pre_init(); no_op_pre_init(); payload_pre_init(); @@ -363,7 +360,6 @@ void grpc_end2end_tests(int argc, char **argv, max_connection_idle(config); max_message_length(config); negative_deadline(config); - no_error_on_hotpath(config); no_logging(config); no_op(config); payload(config); @@ -575,10 +571,6 @@ void grpc_end2end_tests(int argc, char **argv, negative_deadline(config); continue; } - if (0 == strcmp("no_error_on_hotpath", argv[i])) { - no_error_on_hotpath(config); - continue; - } if (0 == strcmp("no_logging", argv[i])) { no_logging(config); continue; diff --git a/test/core/end2end/generate_tests.bzl b/test/core/end2end/generate_tests.bzl index e8e23889076..c3dc7af2ecd 100755 --- a/test/core/end2end/generate_tests.bzl +++ b/test/core/end2end/generate_tests.bzl @@ -265,7 +265,6 @@ END2END_TESTS = { "max_connection_idle": _test_options(needs_fullstack = True, proxyable = False), "max_message_length": _test_options(exclude_minstack = True), "negative_deadline": _test_options(exclude_minstack = True), - "no_error_on_hotpath": _test_options(proxyable = False), "no_logging": _test_options(traceable = False), "no_op": _test_options(), "payload": _test_options(exclude_1byte = True), diff --git a/test/core/end2end/tests/no_error_on_hotpath.cc b/test/core/end2end/tests/no_error_on_hotpath.cc deleted file mode 100644 index 96b44e89e39..00000000000 --- a/test/core/end2end/tests/no_error_on_hotpath.cc +++ /dev/null @@ -1,243 +0,0 @@ -/* - * - * Copyright 2016 gRPC authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "src/core/lib/iomgr/error.h" -#include "test/core/end2end/cq_verifier.h" -#include "test/core/end2end/end2end_tests.h" -#include "test/core/util/test_config.h" - -static void* tag(intptr_t t) { return reinterpret_cast(t); } - -static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, - const char* test_name, - grpc_channel_args* client_args, - grpc_channel_args* server_args) { - grpc_end2end_test_fixture f; - gpr_log(GPR_INFO, "Running test: %s/%s", test_name, config.name); - f = config.create_fixture(client_args, server_args); - config.init_server(&f, server_args); - config.init_client(&f, client_args); - return f; -} - -static gpr_timespec n_seconds_from_now(int n) { - return grpc_timeout_seconds_to_deadline(n); -} - -static gpr_timespec five_seconds_from_now(void) { - return n_seconds_from_now(5); -} - -static void drain_cq(grpc_completion_queue* cq) { - grpc_event ev; - do { - ev = grpc_completion_queue_next(cq, five_seconds_from_now(), nullptr); - } while (ev.type != GRPC_QUEUE_SHUTDOWN); -} - -static void shutdown_server(grpc_end2end_test_fixture* f) { - if (!f->server) return; - grpc_server_shutdown_and_notify(f->server, f->cq, tag(1000)); - grpc_event ev; - do { - ev = grpc_completion_queue_next(f->cq, grpc_timeout_seconds_to_deadline(5), - nullptr); - } while (ev.type != GRPC_OP_COMPLETE || ev.tag != tag(1000)); - grpc_server_destroy(f->server); - f->server = nullptr; -} - -static void shutdown_client(grpc_end2end_test_fixture* f) { - if (!f->client) return; - grpc_channel_destroy(f->client); - f->client = nullptr; -} - -static void end_test(grpc_end2end_test_fixture* f) { - shutdown_server(f); - shutdown_client(f); - - grpc_completion_queue_shutdown(f->cq); - drain_cq(f->cq); - grpc_completion_queue_destroy(f->cq); -} - -static void simple_request_body(grpc_end2end_test_config /*config*/, - grpc_end2end_test_fixture f) { - grpc_call* c; - grpc_call* s; - grpc_core::CqVerifier cqv(f.cq); - grpc_op ops[6]; - grpc_op* op; - grpc_metadata_array initial_metadata_recv; - grpc_metadata_array trailing_metadata_recv; - grpc_metadata_array request_metadata_recv; - grpc_call_details call_details; - grpc_status_code status; - grpc_call_error error; - grpc_slice details; - int was_cancelled = 2; - char* peer; - - gpr_timespec deadline = five_seconds_from_now(); - c = grpc_channel_create_call(f.client, nullptr, GRPC_PROPAGATE_DEFAULTS, f.cq, - grpc_slice_from_static_string("/foo"), nullptr, - deadline, nullptr); - GPR_ASSERT(c); - - peer = grpc_call_get_peer(c); - GPR_ASSERT(peer != nullptr); - gpr_free(peer); - - grpc_metadata_array_init(&initial_metadata_recv); - grpc_metadata_array_init(&trailing_metadata_recv); - grpc_metadata_array_init(&request_metadata_recv); - grpc_call_details_init(&call_details); - - 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 = nullptr; - op++; - op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; - op->flags = 0; - op->reserved = nullptr; - op++; - op->op = GRPC_OP_RECV_INITIAL_METADATA; - op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv; - op->flags = 0; - op->reserved = nullptr; - op++; - op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; - op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv; - op->data.recv_status_on_client.status = &status; - op->data.recv_status_on_client.status_details = &details; - op->flags = 0; - op->reserved = nullptr; - op++; - error = grpc_call_start_batch(c, ops, static_cast(op - ops), tag(1), - nullptr); - GPR_ASSERT(GRPC_CALL_OK == error); - - error = - grpc_server_request_call(f.server, &s, &call_details, - &request_metadata_recv, f.cq, f.cq, tag(101)); - GPR_ASSERT(GRPC_CALL_OK == error); - cqv.Expect(tag(101), true); - cqv.Verify(); - - peer = grpc_call_get_peer(s); - GPR_ASSERT(peer != nullptr); - gpr_free(peer); - peer = grpc_call_get_peer(c); - GPR_ASSERT(peer != nullptr); - gpr_free(peer); - - 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 = nullptr; - op++; - op->op = GRPC_OP_SEND_STATUS_FROM_SERVER; - op->data.send_status_from_server.trailing_metadata_count = 0; - op->data.send_status_from_server.status = GRPC_STATUS_OK; - op->data.send_status_from_server.status_details = nullptr; - op->flags = 0; - op->reserved = nullptr; - op++; - op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; - op->data.recv_close_on_server.cancelled = &was_cancelled; - op->flags = 0; - op->reserved = nullptr; - op++; - error = grpc_call_start_batch(s, ops, static_cast(op - ops), tag(102), - nullptr); - GPR_ASSERT(GRPC_CALL_OK == error); - - cqv.Expect(tag(102), true); - cqv.Expect(tag(1), true); - cqv.Verify(); - - GPR_ASSERT(status == GRPC_STATUS_OK); - GPR_ASSERT(GRPC_SLICE_LENGTH(details) == 0); - GPR_ASSERT(0 == grpc_slice_str_cmp(call_details.method, "/foo")); - GPR_ASSERT(was_cancelled == 0); - - grpc_slice_unref(details); - grpc_metadata_array_destroy(&initial_metadata_recv); - grpc_metadata_array_destroy(&trailing_metadata_recv); - grpc_metadata_array_destroy(&request_metadata_recv); - grpc_call_details_destroy(&call_details); - - grpc_call_unref(c); - grpc_call_unref(s); -} - -static void test_no_error_on_hotpath_one_request( - grpc_end2end_test_config config) { - grpc_end2end_test_fixture f; - - f = begin_test(config, "test_invoke_simple_request_with_no_error_logging", - nullptr, nullptr); - // First RPC is not considered the hotpath, since there are lots of things to - // set up. - simple_request_body(config, f); - grpc_disable_error_creation(); - simple_request_body(config, f); - grpc_enable_error_creation(); - end_test(&f); - config.tear_down_data(&f); -} - -static void test_no_error_on_hotpath_10_requests( - grpc_end2end_test_config config) { - int i; - grpc_end2end_test_fixture f = begin_test( - config, "test_no_error_on_hotpath_in_one_request", nullptr, nullptr); - // First RPC is not considered the hotpath, since there are lots of things to - // set up. - simple_request_body(config, f); - grpc_disable_error_creation(); - for (i = 0; i < 10; i++) { - simple_request_body(config, f); - } - grpc_enable_error_creation(); - end_test(&f); - config.tear_down_data(&f); -} - -void no_error_on_hotpath(grpc_end2end_test_config config) { - test_no_error_on_hotpath_one_request(config); - test_no_error_on_hotpath_10_requests(config); -} - -void no_error_on_hotpath_pre_init(void) {}