From 9e656a4340c8c7bfb7eb621f9d60b31dd77a665f Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 18 Jul 2016 13:01:42 -0700 Subject: [PATCH 001/286] Initial shell --- BUILD | 4 ++ CMakeLists.txt | 2 + Makefile | 2 + build.yaml | 2 + src/cpp/rpcmanager/grpc_rpc_manager.cc | 51 ++++++++++++++++ src/cpp/rpcmanager/grpc_rpc_manager.h | 59 +++++++++++++++++++ tools/doxygen/Doxyfile.c++.internal | 2 + tools/run_tests/sources_and_headers.json | 3 + vsprojects/vcxproj/grpc++/grpc++.vcxproj | 3 + .../vcxproj/grpc++/grpc++.vcxproj.filters | 9 +++ .../grpc++_unsecure/grpc++_unsecure.vcxproj | 3 + .../grpc++_unsecure.vcxproj.filters | 9 +++ 12 files changed, 149 insertions(+) create mode 100644 src/cpp/rpcmanager/grpc_rpc_manager.cc create mode 100644 src/cpp/rpcmanager/grpc_rpc_manager.h diff --git a/BUILD b/BUILD index 33323be229d..279a2ae303b 100644 --- a/BUILD +++ b/BUILD @@ -1233,6 +1233,7 @@ cc_library( "src/cpp/common/secure_auth_context.h", "src/cpp/server/secure_server_credentials.h", "src/cpp/client/create_channel_internal.h", + "src/cpp/rpcmanager/grpc_rpc_manager.h", "src/cpp/server/dynamic_thread_pool.h", "src/cpp/server/thread_pool_interface.h", "src/cpp/client/secure_credentials.cc", @@ -1253,6 +1254,7 @@ cc_library( "src/cpp/common/completion_queue.cc", "src/cpp/common/core_codegen.cc", "src/cpp/common/rpc_method.cc", + "src/cpp/rpcmanager/grpc_rpc_manager.cc", "src/cpp/server/async_generic_service.cc", "src/cpp/server/create_default_thread_pool.cc", "src/cpp/server/dynamic_thread_pool.cc", @@ -1464,6 +1466,7 @@ cc_library( name = "grpc++_unsecure", srcs = [ "src/cpp/client/create_channel_internal.h", + "src/cpp/rpcmanager/grpc_rpc_manager.h", "src/cpp/server/dynamic_thread_pool.h", "src/cpp/server/thread_pool_interface.h", "src/cpp/common/insecure_create_auth_context.cc", @@ -1479,6 +1482,7 @@ cc_library( "src/cpp/common/completion_queue.cc", "src/cpp/common/core_codegen.cc", "src/cpp/common/rpc_method.cc", + "src/cpp/rpcmanager/grpc_rpc_manager.cc", "src/cpp/server/async_generic_service.cc", "src/cpp/server/create_default_thread_pool.cc", "src/cpp/server/dynamic_thread_pool.cc", diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c0059cd2db..cec6b6795ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -711,6 +711,7 @@ add_library(grpc++ src/cpp/common/completion_queue.cc src/cpp/common/core_codegen.cc src/cpp/common/rpc_method.cc + src/cpp/rpcmanager/grpc_rpc_manager.cc src/cpp/server/async_generic_service.cc src/cpp/server/create_default_thread_pool.cc src/cpp/server/dynamic_thread_pool.cc @@ -779,6 +780,7 @@ add_library(grpc++_unsecure src/cpp/common/completion_queue.cc src/cpp/common/core_codegen.cc src/cpp/common/rpc_method.cc + src/cpp/rpcmanager/grpc_rpc_manager.cc src/cpp/server/async_generic_service.cc src/cpp/server/create_default_thread_pool.cc src/cpp/server/dynamic_thread_pool.cc diff --git a/Makefile b/Makefile index 4ce22678d7e..7eb0e27d74b 100644 --- a/Makefile +++ b/Makefile @@ -3403,6 +3403,7 @@ LIBGRPC++_SRC = \ src/cpp/common/completion_queue.cc \ src/cpp/common/core_codegen.cc \ src/cpp/common/rpc_method.cc \ + src/cpp/rpcmanager/grpc_rpc_manager.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/create_default_thread_pool.cc \ src/cpp/server/dynamic_thread_pool.cc \ @@ -3890,6 +3891,7 @@ LIBGRPC++_UNSECURE_SRC = \ src/cpp/common/completion_queue.cc \ src/cpp/common/core_codegen.cc \ src/cpp/common/rpc_method.cc \ + src/cpp/rpcmanager/grpc_rpc_manager.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/create_default_thread_pool.cc \ src/cpp/server/dynamic_thread_pool.cc \ diff --git a/build.yaml b/build.yaml index 57545839d43..545cad02da3 100644 --- a/build.yaml +++ b/build.yaml @@ -683,6 +683,7 @@ filegroups: - include/grpc++/support/time.h headers: - src/cpp/client/create_channel_internal.h + - src/cpp/rpcmanager/grpc_rpc_manager.h - src/cpp/server/dynamic_thread_pool.h - src/cpp/server/thread_pool_interface.h src: @@ -698,6 +699,7 @@ filegroups: - src/cpp/common/completion_queue.cc - src/cpp/common/core_codegen.cc - src/cpp/common/rpc_method.cc + - src/cpp/rpcmanager/grpc_rpc_manager.cc - src/cpp/server/async_generic_service.cc - src/cpp/server/create_default_thread_pool.cc - src/cpp/server/dynamic_thread_pool.cc diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc new file mode 100644 index 00000000000..ce4fdff929d --- /dev/null +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -0,0 +1,51 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include + +#include "src/cpp/rpcmanager/grpc_rpc_manager.h" + +namespace grpc { + +GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_threads) + : shutdown_(false), + min_pollers_(min_pollers), + max_threads_(max_threads), + num_threads_(0) {} + +GrpcRpcManager::~GrpcRpcManager() {} + +bool GrpcRpcManager::SyncReadAndHandle() { return true; } + +} // namespace grpc diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.h b/src/cpp/rpcmanager/grpc_rpc_manager.h new file mode 100644 index 00000000000..e4300839b14 --- /dev/null +++ b/src/cpp/rpcmanager/grpc_rpc_manager.h @@ -0,0 +1,59 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_INTERNAL_CPP_GRPC_RPC_MANAGER_H +#define GRPC_INTERNAL_CPP_GRPC_RPC_MANAGER_H + +#include + +namespace grpc { + +class GrpcRpcManager { + public: + explicit GrpcRpcManager(int min_pollers, int max_threads); + ~GrpcRpcManager(); + + bool SyncReadAndHandle(); + + + private: + grpc::mutex mu_; + bool shutdown_; + int min_pollers_; + int max_threads_; + int num_threads_; +}; + +} // namespace grpc + +#endif // GRPC_INTERNAL_CPP_GRPC_RPC_MANAGER_H diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 945298b964c..9318f450487 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -863,6 +863,7 @@ src/cpp/client/secure_credentials.h \ src/cpp/common/secure_auth_context.h \ src/cpp/server/secure_server_credentials.h \ src/cpp/client/create_channel_internal.h \ +src/cpp/rpcmanager/grpc_rpc_manager.h \ src/cpp/server/dynamic_thread_pool.h \ src/cpp/server/thread_pool_interface.h \ src/cpp/client/secure_credentials.cc \ @@ -883,6 +884,7 @@ src/cpp/common/channel_arguments.cc \ src/cpp/common/completion_queue.cc \ src/cpp/common/core_codegen.cc \ src/cpp/common/rpc_method.cc \ +src/cpp/rpcmanager/grpc_rpc_manager.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/create_default_thread_pool.cc \ src/cpp/server/dynamic_thread_pool.cc \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index e3cfd55cd62..000f2822d43 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6551,6 +6551,7 @@ "include/grpc++/support/sync_stream.h", "include/grpc++/support/time.h", "src/cpp/client/create_channel_internal.h", + "src/cpp/rpcmanager/grpc_rpc_manager.h", "src/cpp/server/dynamic_thread_pool.h", "src/cpp/server/thread_pool_interface.h" ], @@ -6617,6 +6618,8 @@ "src/cpp/common/completion_queue.cc", "src/cpp/common/core_codegen.cc", "src/cpp/common/rpc_method.cc", + "src/cpp/rpcmanager/grpc_rpc_manager.cc", + "src/cpp/rpcmanager/grpc_rpc_manager.h", "src/cpp/server/async_generic_service.cc", "src/cpp/server/create_default_thread_pool.cc", "src/cpp/server/dynamic_thread_pool.cc", diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index cb9e41ea22f..f64155fae83 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -363,6 +363,7 @@ + @@ -403,6 +404,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index a9051182b3c..7e957239a30 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -55,6 +55,9 @@ src\cpp\common + + src\cpp\rpcmanager + src\cpp\server @@ -413,6 +416,9 @@ src\cpp\client + + src\cpp\rpcmanager + src\cpp\server @@ -470,6 +476,9 @@ {2336e396-7e0b-8bf9-3b09-adc6ad1f0e5b} + + {f142b1a2-5198-040b-9da4-2afc09e9248a} + {321b0980-74ad-e8ca-f23b-deffa5d6bb8f} diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index 03be485b297..e5073e4a818 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -359,6 +359,7 @@ + @@ -389,6 +390,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index ba99bc53c8c..93628601f93 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -40,6 +40,9 @@ src\cpp\common + + src\cpp\rpcmanager + src\cpp\server @@ -386,6 +389,9 @@ src\cpp\client + + src\cpp\rpcmanager + src\cpp\server @@ -443,6 +449,9 @@ {ed8e4daa-825f-fbe5-2a45-846ad9165d3d} + + {cb26a5cb-4725-6fee-8abc-09d5fcd52f39} + {8a54a279-d14b-4237-0df3-1ffe1ef5a7af} From 8600438d547ccbc7895435b67c99a74c4d399f08 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 18 Jul 2016 22:27:39 -0700 Subject: [PATCH 002/286] Add more functionality (no cq integration yet) and add a dummy test --- Makefile | 48 +++++ build.yaml | 12 ++ src/cpp/rpcmanager/grpc_rpc_manager.cc | 127 ++++++++++- src/cpp/rpcmanager/grpc_rpc_manager.h | 74 ++++++- test/cpp/rpcmanager/grpc_rpc_manager_test.cc | 83 +++++++ test/cpp/rpcmanager/grpc_rpc_manager_test.h | 57 +++++ tools/run_tests/sources_and_headers.json | 19 ++ tools/run_tests/tests.json | 21 ++ .../grpc_rpc_manager_test.vcxproj | 204 ++++++++++++++++++ .../grpc_rpc_manager_test.vcxproj.filters | 26 +++ 10 files changed, 662 insertions(+), 9 deletions(-) create mode 100644 test/cpp/rpcmanager/grpc_rpc_manager_test.cc create mode 100644 test/cpp/rpcmanager/grpc_rpc_manager_test.h create mode 100644 vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj create mode 100644 vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj.filters diff --git a/Makefile b/Makefile index 7eb0e27d74b..5dee985f39a 100644 --- a/Makefile +++ b/Makefile @@ -1014,6 +1014,7 @@ grpc_csharp_plugin: $(BINDIR)/$(CONFIG)/grpc_csharp_plugin grpc_node_plugin: $(BINDIR)/$(CONFIG)/grpc_node_plugin grpc_objective_c_plugin: $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin grpc_python_plugin: $(BINDIR)/$(CONFIG)/grpc_python_plugin +grpc_rpc_manager_test: $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test grpc_ruby_plugin: $(BINDIR)/$(CONFIG)/grpc_ruby_plugin grpclb_api_test: $(BINDIR)/$(CONFIG)/grpclb_api_test hybrid_end2end_test: $(BINDIR)/$(CONFIG)/hybrid_end2end_test @@ -1370,6 +1371,7 @@ buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/generic_end2end_test \ $(BINDIR)/$(CONFIG)/golden_file_test \ $(BINDIR)/$(CONFIG)/grpc_cli \ + $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test \ $(BINDIR)/$(CONFIG)/grpclb_api_test \ $(BINDIR)/$(CONFIG)/hybrid_end2end_test \ $(BINDIR)/$(CONFIG)/interop_client \ @@ -1454,6 +1456,7 @@ buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/generic_end2end_test \ $(BINDIR)/$(CONFIG)/golden_file_test \ $(BINDIR)/$(CONFIG)/grpc_cli \ + $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test \ $(BINDIR)/$(CONFIG)/grpclb_api_test \ $(BINDIR)/$(CONFIG)/hybrid_end2end_test \ $(BINDIR)/$(CONFIG)/interop_client \ @@ -1740,6 +1743,8 @@ test_cxx: buildtests_cxx $(Q) $(BINDIR)/$(CONFIG)/generic_end2end_test || ( echo test generic_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing golden_file_test" $(Q) $(BINDIR)/$(CONFIG)/golden_file_test || ( echo test golden_file_test failed ; exit 1 ) + $(E) "[RUN] Testing grpc_rpc_manager_test" + $(Q) $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test || ( echo test grpc_rpc_manager_test failed ; exit 1 ) $(E) "[RUN] Testing grpclb_api_test" $(Q) $(BINDIR)/$(CONFIG)/grpclb_api_test || ( echo test grpclb_api_test failed ; exit 1 ) $(E) "[RUN] Testing hybrid_end2end_test" @@ -11142,6 +11147,49 @@ ifneq ($(NO_DEPS),true) endif +GRPC_RPC_MANAGER_TEST_SRC = \ + test/cpp/rpcmanager/grpc_rpc_manager_test.cc \ + +GRPC_RPC_MANAGER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_RPC_MANAGER_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/grpc_rpc_manager_test: openssl_dep_error + +else + + + + +ifeq ($(NO_PROTOBUF),true) + +# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+. + +$(BINDIR)/$(CONFIG)/grpc_rpc_manager_test: protobuf_dep_error + +else + +$(BINDIR)/$(CONFIG)/grpc_rpc_manager_test: $(PROTOBUF_DEP) $(GRPC_RPC_MANAGER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LDXX) $(LDFLAGS) $(GRPC_RPC_MANAGER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test + +endif + +endif + +$(OBJDIR)/$(CONFIG)/test/cpp/rpcmanager/grpc_rpc_manager_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a + +deps_grpc_rpc_manager_test: $(GRPC_RPC_MANAGER_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(GRPC_RPC_MANAGER_TEST_OBJS:.o=.dep) +endif +endif + + GRPC_RUBY_PLUGIN_SRC = \ src/compiler/ruby_plugin.cc \ diff --git a/build.yaml b/build.yaml index 545cad02da3..b2ba020dbbb 100644 --- a/build.yaml +++ b/build.yaml @@ -2713,6 +2713,18 @@ targets: secure: false vs_config_type: Application vs_project_guid: '{DF52D501-A6CF-4E6F-BA38-6EBE2E8DAFB2}' +- name: grpc_rpc_manager_test + build: test + language: c++ + headers: + - test/cpp/rpcmanager/grpc_rpc_manager_test.h + src: + - test/cpp/rpcmanager/grpc_rpc_manager_test.cc + deps: + - grpc++ + - grpc + - gpr + - grpc++_test_config - name: grpc_ruby_plugin build: protoc language: c++ diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index ce4fdff929d..5bfd4eedada 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -33,19 +33,136 @@ #include #include +#include #include "src/cpp/rpcmanager/grpc_rpc_manager.h" namespace grpc { -GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_threads) +GrpcRpcManager::GrpcRpcManagerThread::GrpcRpcManagerThread( + GrpcRpcManager* rpc_mgr) + : rpc_mgr_(rpc_mgr), + thd_(new std::thread(&GrpcRpcManager::GrpcRpcManagerThread::Run, this)) {} + +void GrpcRpcManager::GrpcRpcManagerThread::Run() { + rpc_mgr_->MainWorkLoop(); + rpc_mgr_->MarkAsCompleted(this); +} + +GrpcRpcManager::GrpcRpcManagerThread::~GrpcRpcManagerThread() { + thd_->join(); + thd_.reset(); +} + +GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_pollers, + int max_threads) : shutdown_(false), + num_pollers_(0), min_pollers_(min_pollers), - max_threads_(max_threads), - num_threads_(0) {} + max_pollers_(max_pollers), + num_threads_(0), + max_threads_(max_threads) {} + +GrpcRpcManager::~GrpcRpcManager() { + std::unique_lock lock(mu_); + + shutdown_ = true; + while (num_threads_ != 0) { + shutdown_cv_.wait(lock); + } + + CleanupCompletedThreads(); +} + +// For testing only +void GrpcRpcManager::Wait() { + std::unique_lock lock(mu_); + while (!shutdown_) { + shutdown_cv_.wait(lock); + } +} + +// For testing only +void GrpcRpcManager::Shutdown() { + std::unique_lock lock(mu_); + shutdown_ = true; +} + +void GrpcRpcManager::MarkAsCompleted(GrpcRpcManagerThread* thd) { + std::unique_lock lock(list_mu_); + completed_threads_.push_back(thd); +} + +void GrpcRpcManager::CleanupCompletedThreads() { + std::unique_lock lock(list_mu_); + for (auto thd = completed_threads_.begin(); thd != completed_threads_.end(); + thd = completed_threads_.erase(thd)) { + delete *thd; + } +} + +void GrpcRpcManager::Initialize() { + for (int i = 0; i < min_pollers_; i++) { + MaybeCreatePoller(); + } +} + +bool GrpcRpcManager::MaybeContinueAsPoller() { + std::unique_lock lock(mu_); + if (shutdown_ || num_pollers_ > max_pollers_ || + num_threads_ >= max_threads_) { + return false; + } + + num_pollers_++; + return true; +} + +void GrpcRpcManager::MaybeCreatePoller() { + grpc::unique_lock lock(mu_); + if (num_pollers_ < min_pollers_ && num_threads_ < max_threads_) { + num_pollers_++; + num_threads_++; + + // Create a new thread (which ends up calling the MainWorkLoop() function + new GrpcRpcManagerThread(this); + } +} + +void GrpcRpcManager::MainWorkLoop() { + bool is_work_found = false; + + do { + PollForWork(is_work_found); + + // Decrement num_pollers since this thread is no longer polling + { + grpc::unique_lock lock(mu_); + num_pollers_--; + } + + if (is_work_found) { + // Start a new poller if needed + MaybeCreatePoller(); + + // Do actual work + DoWork(); + } + + // Continue to loop if this thread can continue as a poller + } while (MaybeContinueAsPoller()); -GrpcRpcManager::~GrpcRpcManager() {} + // If we are here, it means that the GrpcRpcManager already has enough threads + // and that the current thread can be terminated + { + grpc::unique_lock lock(mu_); + num_threads_--; + if (num_threads_ == 0) { + shutdown_cv_.notify_one(); + } + } -bool GrpcRpcManager::SyncReadAndHandle() { return true; } + CleanupCompletedThreads(); +} } // namespace grpc diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.h b/src/cpp/rpcmanager/grpc_rpc_manager.h index e4300839b14..5f89c1599d7 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.h +++ b/src/cpp/rpcmanager/grpc_rpc_manager.h @@ -34,24 +34,90 @@ #ifndef GRPC_INTERNAL_CPP_GRPC_RPC_MANAGER_H #define GRPC_INTERNAL_CPP_GRPC_RPC_MANAGER_H +#include +#include + #include +#include namespace grpc { class GrpcRpcManager { public: - explicit GrpcRpcManager(int min_pollers, int max_threads); - ~GrpcRpcManager(); + explicit GrpcRpcManager(int min_pollers, int max_pollers, int max_threads); + virtual ~GrpcRpcManager(); + + // This function MUST be called before using the object + void Initialize(); - bool SyncReadAndHandle(); + virtual void PollForWork(bool& is_work_found) = 0; + virtual void DoWork() = 0; + // Use this for testing purposes only + void Wait(); + void Shutdown(); private: + // Helper wrapper class around std::thread. This takes a GrpcRpcManager object + // and starts a new std::thread to calls the Run() function. + // + // The Run() function calls GrpcManager::MainWorkLoop() function and once that + // completes, it marks the GrpcRpcManagerThread completed by calling + // GrpcRpcManager::MarkAsCompleted() + class GrpcRpcManagerThread { + public: + GrpcRpcManagerThread(GrpcRpcManager* rpc_mgr); + ~GrpcRpcManagerThread(); + + private: + // Calls rpc_mgr_->MainWorkLoop() and once that completes, calls + // rpc_mgr_>MarkAsCompleted(this) to mark the thread as completed + void Run(); + + GrpcRpcManager* rpc_mgr_; + std::unique_ptr thd_; + }; + + // The main funtion in GrpcRpcManager + void MainWorkLoop(); + + // Create a new poller if the number of current pollers is less than the + // minimum number of pollers needed (i.e min_pollers) and the total number of + // threads are less than the max number of threads (i.e max_threads) + void MaybeCreatePoller(); + + // Returns true if the current thread can resume as a poller. i.e if the + // current number of pollers is less than the max_pollers AND the total number + // of threads is less than max_threads + bool MaybeContinueAsPoller(); + + void MarkAsCompleted(GrpcRpcManagerThread* thd); + void CleanupCompletedThreads(); + + // Protects shutdown_, num_pollers_ and num_threads_ + // TODO: sreek - Change num_pollers and num_threads_ to atomics grpc::mutex mu_; + bool shutdown_; + grpc::condition_variable shutdown_cv_; + + // Number of threads doing polling + int num_pollers_; + + // The minimum and maximum number of threads that should be doing polling int min_pollers_; - int max_threads_; + int max_pollers_; + + // The total number of threads (includes threads includes the threads that are + // currently polling i.e num_pollers_) int num_threads_; + + // The maximum number of threads that can be active (This is a soft limit and + // the actual number of threads may sometimes be briefly above this number) + int max_threads_; + + grpc::mutex list_mu_; + std::list completed_threads_; }; } // namespace grpc diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc new file mode 100644 index 00000000000..b2e601d95ee --- /dev/null +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc @@ -0,0 +1,83 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *is % allowed in string + */ + +#include +#include +#include + +#include +#include + +#include "test/cpp/rpcmanager/grpc_rpc_manager_test.h" +#include "test/cpp/util/test_config.h" + +using grpc::testing::GrpcRpcManagerTest; + +// TODO: sreek - Rewrite this test. Find a better test case + +void GrpcRpcManagerTest::PollForWork(bool& is_work_found) { + { + std::unique_lock lock(mu_); + std::cout << "Poll: " << std::this_thread::get_id() << std::endl; + } + is_work_found = true; + + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + + { + std::unique_lock lock(mu_); + num_calls_++; + if (num_calls_ > 50) { + std::cout << "poll: False" << std::endl; + is_work_found = false; + Shutdown(); + } + } +} + +void GrpcRpcManagerTest::DoWork() { + { + std::unique_lock lock(mu_); + std::cout << "Work: " << std::this_thread::get_id() << std::endl; + } + std::this_thread::sleep_for(std::chrono::milliseconds(1)); +} + +int main(int argc, char** argv) { + grpc::testing::InitTest(&argc, &argv, true); + GrpcRpcManagerTest test_rpc_manager(3, 15, 20); + test_rpc_manager.Initialize(); + test_rpc_manager.Wait(); + + return 0; +} diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.h b/test/cpp/rpcmanager/grpc_rpc_manager_test.h new file mode 100644 index 00000000000..5073abd8f11 --- /dev/null +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.h @@ -0,0 +1,57 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *is % allowed in string + */ +#ifndef GRPC_TEST_CPP_GRPC_RPC_MANAGER_TEST_H +#define GRPC_TEST_CPP_GRPC_RPC_MANAGER_TEST_H + +#include "src/cpp/rpcmanager/grpc_rpc_manager.h" + +namespace grpc { +namespace testing { + +class GrpcRpcManagerTest GRPC_FINAL : public GrpcRpcManager { + public: + GrpcRpcManagerTest(int min_pollers, int max_pollers, int max_threads) + : GrpcRpcManager(min_pollers, max_pollers, max_threads), num_calls_(0){}; + + void PollForWork(bool &is_work_found) GRPC_OVERRIDE; + void DoWork() GRPC_OVERRIDE; + + private: + grpc::mutex mu_; + int num_calls_; +}; + +} // namespace testing +} // namespace grpc + +#endif // GRPC_TEST_CPP_GRPC_RPC_MANAGER_TEST_H diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 000f2822d43..3733518b095 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -2212,6 +2212,25 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "grpc", + "grpc++", + "grpc++_test_config" + ], + "headers": [ + "test/cpp/rpcmanager/grpc_rpc_manager_test.h" + ], + "language": "c++", + "name": "grpc_rpc_manager_test", + "src": [ + "test/cpp/rpcmanager/grpc_rpc_manager_test.cc", + "test/cpp/rpcmanager/grpc_rpc_manager_test.h" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "grpc_plugin_support" diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index d94301b946b..31e9d67fb1e 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -2269,6 +2269,27 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c++", + "name": "grpc_rpc_manager_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ diff --git a/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj b/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj new file mode 100644 index 00000000000..4502de81676 --- /dev/null +++ b/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj @@ -0,0 +1,204 @@ + + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {A4F24E89-1766-2FAA-9058-1094EAA018A8} + true + $(SolutionDir)IntDir\$(MSBuildProjectName)\ + + + + v100 + + + v110 + + + v120 + + + v140 + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + + grpc_rpc_manager_test + static + Debug + static + Debug + + + grpc_rpc_manager_test + static + Release + static + Release + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + + + + + + + + {C187A093-A0FE-489D-A40A-6E33DE0F9FEB} + + + {29D16885-7228-4C31-81ED-5F9187C7F2A9} + + + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + + + {3F7D093D-11F9-C4BC-BEB7-18EB28E3F290} + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + diff --git a/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj.filters b/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj.filters new file mode 100644 index 00000000000..fedaea08d33 --- /dev/null +++ b/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj.filters @@ -0,0 +1,26 @@ + + + + + test\cpp\rpcmanager + + + + + test\cpp\rpcmanager + + + + + + {9da529f7-8064-34c0-54da-0fade27184ad} + + + {b6e53cff-22ab-1194-866d-57caa3551fd2} + + + {c63d7236-e7c6-d7b7-e3d8-f25853e358e6} + + + + From 0ba41907a25bd2433a433b82269817ea9ab8ec2d Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 19 Jul 2016 09:28:39 -0700 Subject: [PATCH 003/286] Minor changes to GrpcRpcManager --- src/cpp/rpcmanager/grpc_rpc_manager.cc | 9 +++++---- src/cpp/rpcmanager/grpc_rpc_manager.h | 8 ++++---- test/cpp/rpcmanager/grpc_rpc_manager_test.cc | 9 +++++---- test/cpp/rpcmanager/grpc_rpc_manager_test.h | 4 ++-- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index 5bfd4eedada..1c7d5adeaf2 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -83,7 +83,7 @@ void GrpcRpcManager::Wait() { } // For testing only -void GrpcRpcManager::Shutdown() { +void GrpcRpcManager::ShutdownRpcManager() { std::unique_lock lock(mu_); shutdown_ = true; } @@ -131,9 +131,10 @@ void GrpcRpcManager::MaybeCreatePoller() { void GrpcRpcManager::MainWorkLoop() { bool is_work_found = false; + void *tag; do { - PollForWork(is_work_found); + PollForWork(is_work_found, &tag); // Decrement num_pollers since this thread is no longer polling { @@ -146,7 +147,7 @@ void GrpcRpcManager::MainWorkLoop() { MaybeCreatePoller(); // Do actual work - DoWork(); + DoWork(tag); } // Continue to loop if this thread can continue as a poller @@ -158,7 +159,7 @@ void GrpcRpcManager::MainWorkLoop() { grpc::unique_lock lock(mu_); num_threads_--; if (num_threads_ == 0) { - shutdown_cv_.notify_one(); + shutdown_cv_.notify_all(); } } diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.h b/src/cpp/rpcmanager/grpc_rpc_manager.h index 5f89c1599d7..a8cc6eb80f2 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.h +++ b/src/cpp/rpcmanager/grpc_rpc_manager.h @@ -50,12 +50,12 @@ class GrpcRpcManager { // This function MUST be called before using the object void Initialize(); - virtual void PollForWork(bool& is_work_found) = 0; - virtual void DoWork() = 0; + virtual void PollForWork(bool& is_work_found, void **tag) = 0; + virtual void DoWork(void *tag) = 0; - // Use this for testing purposes only + // Use the following two functions for testing purposes only void Wait(); - void Shutdown(); + void ShutdownRpcManager(); private: // Helper wrapper class around std::thread. This takes a GrpcRpcManager object diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc index b2e601d95ee..2a306e48ad6 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc @@ -45,14 +45,15 @@ using grpc::testing::GrpcRpcManagerTest; // TODO: sreek - Rewrite this test. Find a better test case -void GrpcRpcManagerTest::PollForWork(bool& is_work_found) { +void GrpcRpcManagerTest::PollForWork(bool& is_work_found, void **tag) { { std::unique_lock lock(mu_); std::cout << "Poll: " << std::this_thread::get_id() << std::endl; } is_work_found = true; + *tag = NULL; - std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + std::this_thread::sleep_for(std::chrono::milliseconds(10)); { std::unique_lock lock(mu_); @@ -60,12 +61,12 @@ void GrpcRpcManagerTest::PollForWork(bool& is_work_found) { if (num_calls_ > 50) { std::cout << "poll: False" << std::endl; is_work_found = false; - Shutdown(); + ShutdownRpcManager(); } } } -void GrpcRpcManagerTest::DoWork() { +void GrpcRpcManagerTest::DoWork(void *tag) { { std::unique_lock lock(mu_); std::cout << "Work: " << std::this_thread::get_id() << std::endl; diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.h b/test/cpp/rpcmanager/grpc_rpc_manager_test.h index 5073abd8f11..42e3549ed13 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.h +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.h @@ -43,8 +43,8 @@ class GrpcRpcManagerTest GRPC_FINAL : public GrpcRpcManager { GrpcRpcManagerTest(int min_pollers, int max_pollers, int max_threads) : GrpcRpcManager(min_pollers, max_pollers, max_threads), num_calls_(0){}; - void PollForWork(bool &is_work_found) GRPC_OVERRIDE; - void DoWork() GRPC_OVERRIDE; + void PollForWork(bool &is_work_found, void **tag) GRPC_OVERRIDE; + void DoWork(void *tag) GRPC_OVERRIDE; private: grpc::mutex mu_; From bb5519f5a52aeb23d32ec6ca817e008a65fdfa30 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 19 Jul 2016 11:00:39 -0700 Subject: [PATCH 004/286] More changes --- include/grpc++/server.h | 10 ++- src/cpp/rpcmanager/grpc_rpc_manager.cc | 19 +++--- src/cpp/rpcmanager/grpc_rpc_manager.h | 3 +- src/cpp/server/server.cc | 93 +++++++++++++++++++------- 4 files changed, 87 insertions(+), 38 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 6876961e210..03c97784686 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -50,6 +50,8 @@ #include #include +#include "src/cpp/rpcmanager/grpc_rpc_manager.h" + struct grpc_server; namespace grpc { @@ -64,7 +66,9 @@ class ThreadPoolInterface; /// Models a gRPC server. /// /// Servers are configured and started via \a grpc::ServerBuilder. -class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { +class Server GRPC_FINAL : public ServerInterface, + private GrpcLibraryCodegen, + public GrpcRpcManager { public: ~Server(); @@ -99,6 +103,10 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { // Returns a \em raw pointer to the underlying CompletionQueue. CompletionQueue* completion_queue(); + /// GRPC RPC Manager functions + void PollForWork(bool& is_work_found, void** tag) GRPC_OVERRIDE; + void DoWork(void* tag) GRPC_OVERRIDE; + private: friend class AsyncGenericService; friend class ServerBuilder; diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index 1c7d5adeaf2..7cffb23858e 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -65,24 +65,20 @@ GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_pollers, GrpcRpcManager::~GrpcRpcManager() { std::unique_lock lock(mu_); - - shutdown_ = true; - while (num_threads_ != 0) { - shutdown_cv_.wait(lock); - } + // ShutdownRpcManager() and Wait() must be called before destroying the object + GPR_ASSERT(shutdown_); + GPR_ASSERT(num_threads_ == 0); CleanupCompletedThreads(); } -// For testing only void GrpcRpcManager::Wait() { std::unique_lock lock(mu_); - while (!shutdown_) { + while (num_threads_ != 0) { shutdown_cv_.wait(lock); } } -// For testing only void GrpcRpcManager::ShutdownRpcManager() { std::unique_lock lock(mu_); shutdown_ = true; @@ -120,7 +116,8 @@ bool GrpcRpcManager::MaybeContinueAsPoller() { void GrpcRpcManager::MaybeCreatePoller() { grpc::unique_lock lock(mu_); - if (num_pollers_ < min_pollers_ && num_threads_ < max_threads_) { + if (!shutdown_ && num_pollers_ < min_pollers_ && + num_threads_ < max_threads_) { num_pollers_++; num_threads_++; @@ -131,7 +128,7 @@ void GrpcRpcManager::MaybeCreatePoller() { void GrpcRpcManager::MainWorkLoop() { bool is_work_found = false; - void *tag; + void* tag; do { PollForWork(is_work_found, &tag); @@ -159,7 +156,7 @@ void GrpcRpcManager::MainWorkLoop() { grpc::unique_lock lock(mu_); num_threads_--; if (num_threads_ == 0) { - shutdown_cv_.notify_all(); + shutdown_cv_.notify_one(); } } diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.h b/src/cpp/rpcmanager/grpc_rpc_manager.h index a8cc6eb80f2..475ce979953 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.h +++ b/src/cpp/rpcmanager/grpc_rpc_manager.h @@ -53,7 +53,6 @@ class GrpcRpcManager { virtual void PollForWork(bool& is_work_found, void **tag) = 0; virtual void DoWork(void *tag) = 0; - // Use the following two functions for testing purposes only void Wait(); void ShutdownRpcManager(); @@ -64,6 +63,8 @@ class GrpcRpcManager { // The Run() function calls GrpcManager::MainWorkLoop() function and once that // completes, it marks the GrpcRpcManagerThread completed by calling // GrpcRpcManager::MarkAsCompleted() + // TODO: sreek - Consider using a separate threadpool rather than implementing + // one in this class class GrpcRpcManagerThread { public: GrpcRpcManagerThread(GrpcRpcManager* rpc_mgr); diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index af04fd4ca64..732c20b2d2d 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -278,7 +278,8 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { static internal::GrpcLibraryInitializer g_gli_initializer; Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned, int max_message_size, ChannelArguments* args) - : max_message_size_(max_message_size), + : GrpcRpcManager(3, 5, 8), + max_message_size_(max_message_size), started_(false), shutdown_(false), shutdown_notified_(false), @@ -314,6 +315,7 @@ Server::~Server() { cq_.Shutdown(); } } + void* got_tag; bool ok; GPR_ASSERT(!cq_.Next(&got_tag, &ok)); @@ -429,7 +431,8 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { m->Request(server_, cq_.cq()); } - ScheduleCallback(); + GrpcRpcManager::Initialize(); + // ScheduleCallback(); } return true; @@ -442,6 +445,10 @@ void Server::ShutdownInternal(gpr_timespec deadline) { grpc_server_shutdown_and_notify(server_, cq_.cq(), new ShutdownRequest()); cq_.Shutdown(); lock.unlock(); + + GrpcRpcManager::ShutdownRpcManager(); + GrpcRpcManager::Wait(); + // Spin, eating requests until the completion queue is completely shutdown. // If the deadline expires then cancel anything that's pending and keep // spinning forever until the work is actually drained. @@ -587,44 +594,80 @@ Server::UnimplementedAsyncResponse::UnimplementedAsyncResponse( request_->stream()->call_.PerformOps(this); } +// TODO: sreek - Remove this function void Server::ScheduleCallback() { + GPR_ASSERT(false); + /* { grpc::unique_lock lock(mu_); num_running_cb_++; } thread_pool_->Add(std::bind(&Server::RunRpc, this)); + */ } +// TODO: sreek - Remove this function void Server::RunRpc() { - // Wait for one more incoming rpc. - bool ok; - GPR_TIMER_SCOPE("Server::RunRpc", 0); - auto* mrd = SyncRequest::Wait(&cq_, &ok); - if (mrd) { - ScheduleCallback(); - if (ok) { - SyncRequest::CallData cd(this, mrd); - { - mrd->SetupRequest(); - grpc::unique_lock lock(mu_); - if (!shutdown_) { - mrd->Request(server_, cq_.cq()); - } else { - // destroy the structure that was created - mrd->TeardownRequest(); + GPR_ASSERT(false); + /* + // Wait for one more incoming rpc. + bool ok; + GPR_TIMER_SCOPE("Server::RunRpc", 0); + auto* mrd = SyncRequest::Wait(&cq_, &ok); + if (mrd) { + ScheduleCallback(); + if (ok) { + SyncRequest::CallData cd(this, mrd); + { + mrd->SetupRequest(); + grpc::unique_lock lock(mu_); + if (!shutdown_) { + mrd->Request(server_, cq_.cq()); + } else { + // destroy the structure that was created + mrd->TeardownRequest(); + } } + GPR_TIMER_SCOPE("cd.Run()", 0); + cd.Run(global_callbacks_); + } + } + + { + grpc::unique_lock lock(mu_); + num_running_cb_--; + if (shutdown_) { + callback_cv_.notify_all(); } - GPR_TIMER_SCOPE("cd.Run()", 0); - cd.Run(global_callbacks_); } + */ +} + +void Server::PollForWork(bool& is_work_found, void** tag) { + is_work_found = true; + *tag = nullptr; + auto* mrd = SyncRequest::Wait(&cq_, &is_work_found); + if (is_work_found) { + *tag = mrd; } +} - { - grpc::unique_lock lock(mu_); - num_running_cb_--; - if (shutdown_) { - callback_cv_.notify_all(); +void Server::DoWork(void* tag) { + auto* mrd = static_cast(tag); + if (mrd) { + SyncRequest::CallData cd(this, mrd); + { + mrd->SetupRequest(); + grpc::unique_lock lock(mu_); + if (!shutdown_) { + mrd->Request(server_, cq_.cq()); + } else { + // destroy the structure that was created + mrd->TeardownRequest(); + } } + GPR_TIMER_SCOPE("cd.Run()", 0); + cd.Run(global_callbacks_); } } From f95f125506373eb6c2ae630eae54badd871d2089 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 19 Jul 2016 17:47:46 -0700 Subject: [PATCH 005/286] Minor changes --- src/cpp/rpcmanager/grpc_rpc_manager.cc | 20 ++++++++++++++------ src/cpp/server/server.cc | 1 - 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index 7cffb23858e..f0a40578573 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -103,6 +103,9 @@ void GrpcRpcManager::Initialize() { } } +// If the number of pollers (i.e threads currently blocked in PollForWork()) is +// less than max threshold (i.e max_pollers_) and the total number of threads is +// below the maximum threshold, we can let the current thread continue as poller bool GrpcRpcManager::MaybeContinueAsPoller() { std::unique_lock lock(mu_); if (shutdown_ || num_pollers_ > max_pollers_ || @@ -114,6 +117,9 @@ bool GrpcRpcManager::MaybeContinueAsPoller() { return true; } +// Create a new poller if the current number of pollers i.e num_pollers_ (i.e +// threads currently blocked in PollForWork()) is below the threshold (i.e +// min_pollers_) and the total number of threads is below the maximum threshold void GrpcRpcManager::MaybeCreatePoller() { grpc::unique_lock lock(mu_); if (!shutdown_ && num_pollers_ < min_pollers_ && @@ -130,24 +136,26 @@ void GrpcRpcManager::MainWorkLoop() { bool is_work_found = false; void* tag; + /* + 1. Poll for work (i.e PollForWork()) + 2. After returning from PollForWork, reduce the number of pollers by 1 + 3. Since we are short of one poller now, see if a new poller has to be + created (i.e see MaybeCreatePoller() for more details) + 4. Do the actual work (DoWork()) + 5. After doing the work, see it this thread can resume polling work (i.e + see MaybeContinueAsPoller() for more details) */ do { PollForWork(is_work_found, &tag); - // Decrement num_pollers since this thread is no longer polling { grpc::unique_lock lock(mu_); num_pollers_--; } if (is_work_found) { - // Start a new poller if needed MaybeCreatePoller(); - - // Do actual work DoWork(tag); } - - // Continue to loop if this thread can continue as a poller } while (MaybeContinueAsPoller()); // If we are here, it means that the GrpcRpcManager already has enough threads diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 732c20b2d2d..6bfa1f2369a 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -432,7 +432,6 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { } GrpcRpcManager::Initialize(); - // ScheduleCallback(); } return true; From 79b322751f6b6b0c11599235c5e62375c235783d Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 8 Aug 2016 13:38:30 -0700 Subject: [PATCH 006/286] refactor inet_ntop into a portability header --- BUILD | 8 ++++ CMakeLists.txt | 3 ++ Makefile | 4 ++ binding.gyp | 1 + build.yaml | 2 + config.m4 | 1 + gRPC-Core.podspec | 3 ++ grpc.gemspec | 2 + include/grpc/impl/codegen/port_platform.h | 1 + package.xml | 2 + src/core/lib/iomgr/port.h | 43 +++++++++++++++++ src/core/lib/iomgr/socket_utils.h | 47 ++++++++++++++++++ .../lib/iomgr/socket_utils_common_posix.c | 6 +++ src/core/lib/iomgr/socket_utils_windows.c | 48 +++++++++++++++++++ src/core/lib/tsi/ssl_transport_security.c | 12 ++--- src/python/grpcio/grpc_core_dependencies.py | 1 + tools/doxygen/Doxyfile.core.internal | 2 + tools/run_tests/sources_and_headers.json | 3 ++ vsprojects/vcxproj/grpc/grpc.vcxproj | 3 ++ vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 6 +++ .../grpc_test_util/grpc_test_util.vcxproj | 3 ++ .../grpc_test_util.vcxproj.filters | 6 +++ .../grpc_unsecure/grpc_unsecure.vcxproj | 3 ++ .../grpc_unsecure.vcxproj.filters | 6 +++ 24 files changed, 207 insertions(+), 9 deletions(-) create mode 100644 src/core/lib/iomgr/port.h create mode 100644 src/core/lib/iomgr/socket_utils.h create mode 100644 src/core/lib/iomgr/socket_utils_windows.c diff --git a/BUILD b/BUILD index f4ebeba3108..e0e70459fdd 100644 --- a/BUILD +++ b/BUILD @@ -200,6 +200,7 @@ cc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", @@ -355,6 +356,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -595,6 +597,7 @@ cc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", @@ -737,6 +740,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -949,6 +953,7 @@ cc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", @@ -1081,6 +1086,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -1844,6 +1850,7 @@ objc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -2063,6 +2070,7 @@ objc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index c9d28e6553d..fdb730b983d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -318,6 +318,7 @@ add_library(grpc src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c + src/core/lib/iomgr/socket_utils_windows.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c src/core/lib/iomgr/tcp_client_windows.c @@ -574,6 +575,7 @@ add_library(grpc_cronet src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c + src/core/lib/iomgr/socket_utils_windows.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c src/core/lib/iomgr/tcp_client_windows.c @@ -804,6 +806,7 @@ add_library(grpc_unsecure src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c + src/core/lib/iomgr/socket_utils_windows.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c src/core/lib/iomgr/tcp_client_windows.c diff --git a/Makefile b/Makefile index df96a8af29c..8b6af559e08 100644 --- a/Makefile +++ b/Makefile @@ -2566,6 +2566,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -2842,6 +2843,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -3108,6 +3110,7 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -3300,6 +3303,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ diff --git a/binding.gyp b/binding.gyp index 17dbfc0d381..a078e5cca84 100644 --- a/binding.gyp +++ b/binding.gyp @@ -603,6 +603,7 @@ 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', + 'src/core/lib/iomgr/socket_utils_windows.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c', diff --git a/build.yaml b/build.yaml index 3bb217c0884..d0e1fe0b0f1 100644 --- a/build.yaml +++ b/build.yaml @@ -195,6 +195,7 @@ filegroups: - src/core/lib/iomgr/sockaddr_posix.h - src/core/lib/iomgr/sockaddr_utils.h - src/core/lib/iomgr/sockaddr_windows.h + - src/core/lib/iomgr/socket_utils.h - src/core/lib/iomgr/socket_utils_posix.h - src/core/lib/iomgr/socket_windows.h - src/core/lib/iomgr/tcp_client.h @@ -275,6 +276,7 @@ filegroups: - src/core/lib/iomgr/socket_utils_common_posix.c - src/core/lib/iomgr/socket_utils_linux.c - src/core/lib/iomgr/socket_utils_posix.c + - src/core/lib/iomgr/socket_utils_windows.c - src/core/lib/iomgr/socket_windows.c - src/core/lib/iomgr/tcp_client_posix.c - src/core/lib/iomgr/tcp_client_windows.c diff --git a/config.m4 b/config.m4 index b37658dc617..69f06274d76 100644 --- a/config.m4 +++ b/config.m4 @@ -122,6 +122,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 200f9c21252..5a94fa9f1f4 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -293,6 +293,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', + 'src/core/lib/iomgr/socket_utils.h', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/tcp_client.h', @@ -452,6 +453,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', + 'src/core/lib/iomgr/socket_utils_windows.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c', @@ -654,6 +656,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', + 'src/core/lib/iomgr/socket_utils.h', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/tcp_client.h', diff --git a/grpc.gemspec b/grpc.gemspec index 29d8afef9b9..4593a0a607c 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -212,6 +212,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/sockaddr_posix.h ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.h ) s.files += %w( src/core/lib/iomgr/sockaddr_windows.h ) + s.files += %w( src/core/lib/iomgr/socket_utils.h ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.h ) s.files += %w( src/core/lib/iomgr/socket_windows.h ) s.files += %w( src/core/lib/iomgr/tcp_client.h ) @@ -371,6 +372,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.c ) s.files += %w( src/core/lib/iomgr/socket_utils_linux.c ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.c ) + s.files += %w( src/core/lib/iomgr/socket_utils_windows.c ) s.files += %w( src/core/lib/iomgr/socket_windows.c ) s.files += %w( src/core/lib/iomgr/tcp_client_posix.c ) s.files += %w( src/core/lib/iomgr/tcp_client_windows.c ) diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index 7c67bad5ae1..e51cc174608 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -93,6 +93,7 @@ #define GPR_WINSOCK_SOCKET 1 #define GPR_WINDOWS_SUBPROCESS 1 #define GPR_WINDOWS_ENV +#define GPR_WINDOWS_SOCKETUTILS #ifdef __MSYS__ #define GPR_GETPID_IN_UNISTD_H 1 #define GPR_MSYS_TMPFILE diff --git a/package.xml b/package.xml index 38b74f526b8..c7354987579 100644 --- a/package.xml +++ b/package.xml @@ -220,6 +220,7 @@ + @@ -379,6 +380,7 @@ + diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h new file mode 100644 index 00000000000..10b55d7453b --- /dev/null +++ b/src/core/lib/iomgr/port.h @@ -0,0 +1,43 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include + +#ifndef GRPC_CORE_LIB_IOMGR_PORT_H +#define GRPC_CORE_LIB_IOMGR_PORT_H + +#if GPR_WINDOWS +#define GPR_WINSOCK_SOCKET 1 + + +#endif /* GRPC_CORE_LIB_IOMGR_PORT_H */ diff --git a/src/core/lib/iomgr/socket_utils.h b/src/core/lib/iomgr/socket_utils.h new file mode 100644 index 00000000000..69774aac748 --- /dev/null +++ b/src/core/lib/iomgr/socket_utils.h @@ -0,0 +1,47 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H +#define GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H + +#ifdef GPR_WINSOCK_SOCKET +#include "sockaddr_windows.h" +#else +#include "sockaddr_posix.h" +#endif + +/* A wrapper for inet_ntop on POSIX systems and InetNtop on Windows systems */ +const char *grpc_inet_ntop(int af, const void *src, + char *dst, socklen_t size); + +#endif /* GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H */ diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index d2f6261e2ab..e683ef8f187 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -35,6 +35,7 @@ #ifdef GPR_POSIX_SOCKET +#include "src/core/lib/iomgr/socket_utils.h" #include "src/core/lib/iomgr/socket_utils_posix.h" #include @@ -296,4 +297,9 @@ grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, return error_for_fd(*newfd, addr); } +const char *grpc_inet_ntop(int af, const void *src, + char *dst, socklen_t size) { + return inet_ntop(af, src, dst, size); +} + #endif diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c new file mode 100644 index 00000000000..e4f9e2a5103 --- /dev/null +++ b/src/core/lib/iomgr/socket_utils_windows.c @@ -0,0 +1,48 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include + +#ifdef GPR_WINDOWS_SOCKETUTILS + +#include "src/core/lib/iomgr/socket_utils.h" + +#include + +const char *grpc_inet_ntop(int af, const void *src, + char *dst, socklen_t size) { + GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); + return InetNtop(af, src, dst, (size_t)size); +} + +#endif /* GPR_WINDOWS_SOCKETUTILS */ diff --git a/src/core/lib/tsi/ssl_transport_security.c b/src/core/lib/tsi/ssl_transport_security.c index e91c6316e7f..f6e8c518e32 100644 --- a/src/core/lib/tsi/ssl_transport_security.c +++ b/src/core/lib/tsi/ssl_transport_security.c @@ -32,19 +32,13 @@ */ #include "src/core/lib/tsi/ssl_transport_security.h" +#include "src/core/lib/iomgr/socket_utils.h" #include #include #include -/* TODO(jboeuf): refactor inet_ntop into a portability header. */ -#ifdef GPR_WINSOCK_SOCKET -#include -#else -#include -#endif - #include #include #include @@ -353,8 +347,8 @@ static tsi_result add_subject_alt_names_properties_to_peer( result = TSI_INTERNAL_ERROR; break; } - const char *name = inet_ntop(af, subject_alt_name->d.iPAddress->data, - ntop_buf, INET6_ADDRSTRLEN); + const char *name = grpc_inet_ntop(af, subject_alt_name->d.iPAddress->data, + ntop_buf, INET6_ADDRSTRLEN); if (name == NULL) { gpr_log(GPR_ERROR, "Could not get IP string from asn1 octet."); result = TSI_INTERNAL_ERROR; diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 7ae76f52c1f..78fa4289030 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -116,6 +116,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', + 'src/core/lib/iomgr/socket_utils_windows.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c', diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index dcb11bd9330..57aefb4b3c0 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -831,6 +831,7 @@ src/core/lib/iomgr/sockaddr.h \ src/core/lib/iomgr/sockaddr_posix.h \ src/core/lib/iomgr/sockaddr_utils.h \ src/core/lib/iomgr/sockaddr_windows.h \ +src/core/lib/iomgr/socket_utils.h \ src/core/lib/iomgr/socket_utils_posix.h \ src/core/lib/iomgr/socket_windows.h \ src/core/lib/iomgr/tcp_client.h \ @@ -990,6 +991,7 @@ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ +src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 566f41e7301..42faca3ee51 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -5806,6 +5806,7 @@ "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", @@ -5933,10 +5934,12 @@ "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", "src/core/lib/iomgr/socket_utils_posix.h", + "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index ed010c55b51..4166b1b08c0 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -340,6 +340,7 @@ + @@ -542,6 +543,8 @@ + + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index b3101728ab1..5608139f53d 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -124,6 +124,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -788,6 +791,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index 84a71d217d9..f7006c81cda 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -230,6 +230,7 @@ + @@ -385,6 +386,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 18fe9264057..22f542bda12 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -172,6 +172,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -566,6 +569,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 7a5f8589ca9..c3591634125 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -329,6 +329,7 @@ + @@ -509,6 +510,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 99db98eb7ce..cf4e4a0a3c2 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -127,6 +127,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -695,6 +698,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr From 5407089b37581b010504171d939f5a3238411027 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 8 Aug 2016 17:01:18 -0700 Subject: [PATCH 007/286] Separate out iomgr-specific constants into a separate header --- BUILD | 4 + build.yaml | 1 + gRPC-Core.podspec | 2 + grpc.gemspec | 1 + include/grpc/impl/codegen/port_platform.h | 76 +---------------- package.xml | 1 + src/core/lib/iomgr/endpoint_pair_posix.c | 2 +- src/core/lib/iomgr/endpoint_pair_windows.c | 2 +- src/core/lib/iomgr/ev_epoll_linux.c | 2 +- src/core/lib/iomgr/ev_epoll_linux.h | 1 + src/core/lib/iomgr/ev_poll_and_epoll_posix.c | 2 +- src/core/lib/iomgr/ev_poll_posix.c | 2 +- src/core/lib/iomgr/ev_posix.c | 2 +- src/core/lib/iomgr/iocp_windows.c | 2 +- src/core/lib/iomgr/iomgr_posix.c | 2 +- src/core/lib/iomgr/iomgr_windows.c | 2 +- src/core/lib/iomgr/pollset_set_windows.c | 2 +- src/core/lib/iomgr/pollset_windows.c | 2 +- src/core/lib/iomgr/port.h | 83 ++++++++++++++++++- src/core/lib/iomgr/resolve_address_posix.c | 2 +- src/core/lib/iomgr/resolve_address_windows.c | 2 +- src/core/lib/iomgr/sockaddr.h | 2 +- src/core/lib/iomgr/socket_utils.h | 2 + .../lib/iomgr/socket_utils_common_posix.c | 2 +- src/core/lib/iomgr/socket_utils_linux.c | 2 +- src/core/lib/iomgr/socket_utils_posix.c | 2 +- src/core/lib/iomgr/socket_utils_windows.c | 2 +- src/core/lib/iomgr/socket_windows.c | 2 +- src/core/lib/iomgr/tcp_client_posix.c | 2 +- src/core/lib/iomgr/tcp_client_windows.c | 2 +- src/core/lib/iomgr/tcp_posix.c | 2 +- src/core/lib/iomgr/tcp_server_posix.c | 2 +- src/core/lib/iomgr/tcp_server_windows.c | 2 +- src/core/lib/iomgr/tcp_windows.c | 2 +- src/core/lib/iomgr/udp_server.c | 2 +- src/core/lib/iomgr/unix_sockets_posix.c | 5 +- src/core/lib/iomgr/unix_sockets_posix.h | 2 +- src/core/lib/iomgr/wakeup_fd_eventfd.c | 2 +- src/core/lib/iomgr/wakeup_fd_nospecial.c | 2 +- src/core/lib/iomgr/wakeup_fd_pipe.c | 2 +- src/core/lib/iomgr/wakeup_fd_posix.c | 2 +- src/core/lib/iomgr/workqueue.h | 1 + src/core/lib/iomgr/workqueue_posix.c | 2 +- test/core/end2end/fixtures/h2_full+trace.c | 1 + .../core/end2end/fixtures/h2_sockpair+trace.c | 1 + test/core/iomgr/ev_epoll_linux_test.c | 2 +- test/core/util/port_posix.c | 2 +- test/core/util/port_windows.c | 2 +- test/cpp/end2end/async_end2end_test.cc | 1 + tools/doxygen/Doxyfile.core.internal | 1 + tools/run_tests/sources_and_headers.json | 2 + vsprojects/vcxproj/grpc/grpc.vcxproj | 1 + vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 3 + .../grpc_test_util/grpc_test_util.vcxproj | 1 + .../grpc_test_util.vcxproj.filters | 3 + .../grpc_unsecure/grpc_unsecure.vcxproj | 1 + .../grpc_unsecure.vcxproj.filters | 3 + 57 files changed, 154 insertions(+), 111 deletions(-) diff --git a/BUILD b/BUILD index e0e70459fdd..c874341a982 100644 --- a/BUILD +++ b/BUILD @@ -195,6 +195,7 @@ cc_library( "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", + "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", @@ -592,6 +593,7 @@ cc_library( "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", + "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", @@ -948,6 +950,7 @@ cc_library( "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", + "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", @@ -2065,6 +2068,7 @@ objc_library( "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", + "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", diff --git a/build.yaml b/build.yaml index d0e1fe0b0f1..39514bdef08 100644 --- a/build.yaml +++ b/build.yaml @@ -190,6 +190,7 @@ filegroups: - src/core/lib/iomgr/pollset_set.h - src/core/lib/iomgr/pollset_set_windows.h - src/core/lib/iomgr/pollset_windows.h + - src/core/lib/iomgr/port.h - src/core/lib/iomgr/resolve_address.h - src/core/lib/iomgr/sockaddr.h - src/core/lib/iomgr/sockaddr_posix.h diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 5a94fa9f1f4..753dabebe46 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -288,6 +288,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/pollset_set.h', 'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_windows.h', + 'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/resolve_address.h', 'src/core/lib/iomgr/sockaddr.h', 'src/core/lib/iomgr/sockaddr_posix.h', @@ -651,6 +652,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/pollset_set.h', 'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_windows.h', + 'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/resolve_address.h', 'src/core/lib/iomgr/sockaddr.h', 'src/core/lib/iomgr/sockaddr_posix.h', diff --git a/grpc.gemspec b/grpc.gemspec index 4593a0a607c..bb7913bf660 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -207,6 +207,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/pollset_set.h ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.h ) s.files += %w( src/core/lib/iomgr/pollset_windows.h ) + s.files += %w( src/core/lib/iomgr/port.h ) s.files += %w( src/core/lib/iomgr/resolve_address.h ) s.files += %w( src/core/lib/iomgr/sockaddr.h ) s.files += %w( src/core/lib/iomgr/sockaddr_posix.h ) diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index e51cc174608..1aeda9b658a 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -90,10 +90,8 @@ #endif #define GPR_PLATFORM_STRING "windows" #define GPR_WINDOWS 1 -#define GPR_WINSOCK_SOCKET 1 #define GPR_WINDOWS_SUBPROCESS 1 #define GPR_WINDOWS_ENV -#define GPR_WINDOWS_SOCKETUTILS #ifdef __MSYS__ #define GPR_GETPID_IN_UNISTD_H 1 #define GPR_MSYS_TMPFILE @@ -125,15 +123,7 @@ #define GPR_GCC_TLS 1 #define GPR_LINUX 1 #define GPR_LINUX_LOG 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_WAKEUP_FD 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 -#define GPR_POSIX_SOCKETUTILS 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_HAVE_IP_PKTINFO 1 -#define GPR_HAVE_IPV6_RECVPKTINFO 1 #define GPR_LINUX_ENV 1 #define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 @@ -142,7 +132,6 @@ #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_GETPID_IN_UNISTD_H 1 -#define GPR_HAVE_MSG_NOSIGNAL 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ @@ -159,12 +148,6 @@ #define GPR_CPU_LINUX 1 #define GPR_GCC_SYNC 1 #define GPR_GCC_TLS 1 -#define GPR_POSIX_MULTIPOLL_WITH_POLL 1 -#define GPR_POSIX_WAKEUP_FD 1 -#define GPR_LINUX_EVENTFD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_SOCKETUTILS 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 @@ -175,10 +158,6 @@ #define GPR_POSIX_TIME 1 #define GPR_GETPID_IN_UNISTD_H 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 -#define GPR_HAVE_MSG_NOSIGNAL 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_HAVE_IP_PKTINFO 1 -#define GPR_HAVE_IPV6_RECVPKTINFO 1 #elif defined(__linux__) #define GPR_POSIX_CRASH_HANDLER 1 #define GPR_PLATFORM_STRING "linux" @@ -197,30 +176,11 @@ #define GPR_GCC_TLS 1 #define GPR_LINUX 1 #define GPR_LINUX_LOG -#define GPR_LINUX_MULTIPOLL_WITH_EPOLL 1 -#define GPR_POSIX_WAKEUP_FD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_HAVE_IP_PKTINFO 1 -#define GPR_HAVE_IPV6_RECVPKTINFO 1 -#ifdef __GLIBC_PREREQ -#if __GLIBC_PREREQ(2, 9) -#define GPR_LINUX_EVENTFD 1 -#define GPR_LINUX_EPOLL 1 -#endif -#if __GLIBC_PREREQ(2, 10) -#define GPR_LINUX_SOCKETUTILS 1 -#endif -#endif #define GPR_LINUX_ENV 1 #ifndef GPR_LINUX_EVENTFD #define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 #endif -#ifndef GPR_LINUX_SOCKETUTILS -#define GPR_POSIX_SOCKETUTILS -#endif #define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 @@ -228,7 +188,6 @@ #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_GETPID_IN_UNISTD_H 1 -#define GPR_HAVE_MSG_NOSIGNAL 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ @@ -239,7 +198,6 @@ #ifndef _BSD_SOURCE #define _BSD_SOURCE #endif -#define GPR_MSG_IOVLEN_TYPE int #if TARGET_OS_IPHONE #define GPR_FORBID_UNREACHABLE_CODE 1 #define GPR_PLATFORM_STRING "ios" @@ -251,14 +209,9 @@ #define GPR_GCC_TLS 1 #define GPR_POSIX_CRASH_HANDLER 1 #endif +#define GPR_APPLE 1 #define GPR_GCC_ATOMIC 1 #define GPR_POSIX_LOG 1 -#define GPR_POSIX_MULTIPOLL_WITH_POLL 1 -#define GPR_POSIX_WAKEUP_FD 1 -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_SOCKETUTILS 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 @@ -268,9 +221,6 @@ #define GPR_POSIX_TIME 1 #define GPR_GETPID_IN_UNISTD_H 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 -#define GPR_HAVE_SO_NOSIGPIPE 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_HAVE_IP_PKTINFO 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ @@ -281,16 +231,11 @@ #ifndef _BSD_SOURCE #define _BSD_SOURCE #endif +#define GPR_FREEBSD 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #define GPR_POSIX_LOG 1 -#define GPR_POSIX_MULTIPOLL_WITH_POLL 1 -#define GPR_POSIX_WAKEUP_FD 1 -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_SOCKETUTILS 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 @@ -300,10 +245,6 @@ #define GPR_POSIX_TIME 1 #define GPR_GETPID_IN_UNISTD_H 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 -#define GPR_HAVE_SO_NOSIGPIPE 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_HAVE_IP_PKTINFO 1 -#define GPR_HAVE_IPV6_RECVPKTINFO 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ @@ -320,16 +261,11 @@ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif +#define GPR_NACL 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #define GPR_POSIX_LOG 1 -#define GPR_POSIX_MULTIPOLL_WITH_POLL 1 -#define GPR_POSIX_WAKEUP_FD 1 -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_SOCKETUTILS 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 @@ -416,12 +352,6 @@ typedef unsigned __int64 uint64_t; #error Must define GPR_POSIX_SOCKET to use GPR_POSIX_MULTIPOLL_WITH_POLL #endif -#if defined(GPR_POSIX_SOCKET) + defined(GPR_WINSOCK_SOCKET) + \ - defined(GPR_CUSTOM_SOCKET) != \ - 1 -#error Must define exactly one of GPR_POSIX_SOCKET, GPR_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET -#endif - #if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + \ defined(GPR_CUSTOM_TLS) != \ 1 diff --git a/package.xml b/package.xml index c7354987579..3d5a83dc791 100644 --- a/package.xml +++ b/package.xml @@ -215,6 +215,7 @@ + diff --git a/src/core/lib/iomgr/endpoint_pair_posix.c b/src/core/lib/iomgr/endpoint_pair_posix.c index e295fb4867a..7437dbf6abc 100644 --- a/src/core/lib/iomgr/endpoint_pair_posix.c +++ b/src/core/lib/iomgr/endpoint_pair_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/endpoint_pair_windows.c b/src/core/lib/iomgr/endpoint_pair_windows.c index 582704e267e..0933ba0d570 100644 --- a/src/core/lib/iomgr/endpoint_pair_windows.c +++ b/src/core/lib/iomgr/endpoint_pair_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINSOCK_SOCKET #include "src/core/lib/iomgr/endpoint_pair.h" diff --git a/src/core/lib/iomgr/ev_epoll_linux.c b/src/core/lib/iomgr/ev_epoll_linux.c index 6a63c4d1d18..2d9c0e49b29 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.c +++ b/src/core/lib/iomgr/ev_epoll_linux.c @@ -32,7 +32,7 @@ */ #include -#include +#include "src/core/lib/iomgr/port.h" /* This polling engine is only relevant on linux kernels supporting epoll() */ #ifdef GPR_LINUX_EPOLL diff --git a/src/core/lib/iomgr/ev_epoll_linux.h b/src/core/lib/iomgr/ev_epoll_linux.h index 7a494aba198..e2a66555bcd 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.h +++ b/src/core/lib/iomgr/ev_epoll_linux.h @@ -34,6 +34,7 @@ #ifndef GRPC_CORE_LIB_IOMGR_EV_EPOLL_LINUX_H #define GRPC_CORE_LIB_IOMGR_EV_EPOLL_LINUX_H +#include "src/core/lib/iomgr/port.h" #include "src/core/lib/iomgr/ev_posix.h" const grpc_event_engine_vtable *grpc_init_epoll_linux(void); diff --git a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c index c2107e5e393..57ae8325e8e 100644 --- a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +++ b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c @@ -42,7 +42,7 @@ * - ev_epoll_posix.{h,c} */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/ev_poll_posix.c b/src/core/lib/iomgr/ev_poll_posix.c index 16a5e3083e6..7df1b2e3de2 100644 --- a/src/core/lib/iomgr/ev_poll_posix.c +++ b/src/core/lib/iomgr/ev_poll_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/ev_posix.c b/src/core/lib/iomgr/ev_posix.c index 65366726859..b510c6fc26d 100644 --- a/src/core/lib/iomgr/ev_posix.c +++ b/src/core/lib/iomgr/ev_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/iocp_windows.c b/src/core/lib/iomgr/iocp_windows.c index 2532e52e48e..e6915502a43 100644 --- a/src/core/lib/iomgr/iocp_windows.c +++ b/src/core/lib/iomgr/iocp_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/iomgr_posix.c b/src/core/lib/iomgr/iomgr_posix.c index cede97f4c60..963684ad7ae 100644 --- a/src/core/lib/iomgr/iomgr_posix.c +++ b/src/core/lib/iomgr/iomgr_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/iomgr_windows.c b/src/core/lib/iomgr/iomgr_windows.c index 7653f6e6354..e0e307bf814 100644 --- a/src/core/lib/iomgr/iomgr_windows.c +++ b/src/core/lib/iomgr/iomgr_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/pollset_set_windows.c b/src/core/lib/iomgr/pollset_set_windows.c index a35a9766fc0..4a2563d32ef 100644 --- a/src/core/lib/iomgr/pollset_set_windows.c +++ b/src/core/lib/iomgr/pollset_set_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #include #ifdef GPR_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/pollset_windows.c b/src/core/lib/iomgr/pollset_windows.c index 626dd784b30..bd650d56091 100644 --- a/src/core/lib/iomgr/pollset_windows.c +++ b/src/core/lib/iomgr/pollset_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h index 10b55d7453b..acd68dce79d 100644 --- a/src/core/lib/iomgr/port.h +++ b/src/core/lib/iomgr/port.h @@ -36,8 +36,89 @@ #ifndef GRPC_CORE_LIB_IOMGR_PORT_H #define GRPC_CORE_LIB_IOMGR_PORT_H -#if GPR_WINDOWS +#if defined(GPR_WINDOWS) #define GPR_WINSOCK_SOCKET 1 +#define GPR_WINDOWS_SOCKETUTILS 1 +/* #undef GPR_POSIX_SOCKET */ +/* #undef GPR_POSIX_WAKEUP_FD */ +#elif defined(GPR_MANYLINUX1) +#define GPR_HAVE_IPV6_RECVPKTINFO 1 +#define GPR_HAVE_IP_PKTINFO 1 +#define GPR_HAVE_MSG_NOSIGNAL 1 +#define GPR_HAVE_UNIX_SOCKET 1 +#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#define GPR_POSIX_SOCKET 1 +#define GPR_POSIX_SOCKETADDR 1 +#define GPR_POSIX_SOCKETUTILS 1 +#define GPR_POSIX_WAKEUP_FD 1 +#elif defined(GPR_ANDROID) +#define GPR_HAVE_IPV6_RECVPKTINFO 1 +#define GPR_HAVE_IP_PKTINFO 1 +#define GPR_HAVE_MSG_NOSIGNAL 1 +#define GPR_HAVE_UNIX_SOCKET 1 +#define GPR_LINUX_EVENTFD 1 +#define GPR_POSIX_SOCKET 1 +#define GPR_POSIX_SOCKETADDR 1 +#define GPR_POSIX_SOCKETUTILS 1 +#define GPR_POSIX_WAKEUP_FD 1 +#elif defined(GPR_LINUX) +#define GPR_HAVE_IPV6_RECVPKTINFO 1 +#define GPR_HAVE_IP_PKTINFO 1 +#define GPR_HAVE_MSG_NOSIGNAL 1 +#define GPR_HAVE_UNIX_SOCKET 1 +#define GPR_LINUX_MULTIPOLL_WITH_EPOLL 1 +#define GPR_POSIX_SOCKET 1 +#define GPR_POSIX_SOCKETADDR 1 +#define GPR_POSIX_WAKEUP_FD 1 +#ifdef __GLIBC_PREREQ +#if __GLIBC_PREREQ(2, 9) +#define GPR_LINUX_EPOLL 1 +#define GPR_LINUX_EVENTFD 1 +#endif +#if __GLIBC_PREREQ(2, 10) +#define GPR_LINUX_SOCKETUTILS 1 +#endif +#endif +#ifndef GPR_LINUX_EVENTFD +#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#endif +#ifndef GPR_LINUX_SOCKETUTILS +#define GPR_POSIX_SOCKETUTILS +#endif +#elif defined(GPR_APPLE) +#define GPR_HAVE_IP_PKTINFO 1 +#define GPR_HAVE_SO_NOSIGPIPE 1 +#define GPR_HAVE_UNIX_SOCKET 1 +#define GPR_MSG_IOVLEN_TYPE int +#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#define GPR_POSIX_SOCKET 1 +#define GPR_POSIX_SOCKETADDR 1 +#define GPR_POSIX_SOCKETUTILS 1 +#define GPR_POSIX_WAKEUP_FD 1 +#elif defined(GPR_FREEBSD) +#define GPR_HAVE_IPV6_RECVPKTINFO 1 +#define GPR_HAVE_IP_PKTINFO 1 +#define GPR_HAVE_SO_NOSIGPIPE 1 +#define GPR_HAVE_UNIX_SOCKET 1 +#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#define GPR_POSIX_SOCKET 1 +#define GPR_POSIX_SOCKETADDR 1 +#define GPR_POSIX_SOCKETUTILS 1 +#define GPR_POSIX_WAKEUP_FD 1 +#elif defined(GPR_NACL) +#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#define GPR_POSIX_SOCKET 1 +#define GPR_POSIX_SOCKETADDR 1 +#define GPR_POSIX_SOCKETUTILS 1 +#define GPR_POSIX_WAKEUP_FD 1 +#elif !defined(GPR_NO_AUTODETECT_PLATFORM) +#error "Platform not recognized" +#endif +#if defined(GPR_POSIX_SOCKET) + defined(GPR_WINSOCK_SOCKET) + \ + defined(GPR_CUSTOM_SOCKET) != \ + 1 +#error Must define exactly one of GPR_POSIX_SOCKET, GPR_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET +#endif #endif /* GRPC_CORE_LIB_IOMGR_PORT_H */ diff --git a/src/core/lib/iomgr/resolve_address_posix.c b/src/core/lib/iomgr/resolve_address_posix.c index 4e9f978584a..164fe10855e 100644 --- a/src/core/lib/iomgr/resolve_address_posix.c +++ b/src/core/lib/iomgr/resolve_address_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET #include "src/core/lib/iomgr/resolve_address.h" diff --git a/src/core/lib/iomgr/resolve_address_windows.c b/src/core/lib/iomgr/resolve_address_windows.c index 2af8af82dcb..334473c6bf1 100644 --- a/src/core/lib/iomgr/resolve_address_windows.c +++ b/src/core/lib/iomgr/resolve_address_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINSOCK_SOCKET #include "src/core/lib/iomgr/resolve_address.h" diff --git a/src/core/lib/iomgr/sockaddr.h b/src/core/lib/iomgr/sockaddr.h index 5563d0b8a6c..fd85f176dab 100644 --- a/src/core/lib/iomgr/sockaddr.h +++ b/src/core/lib/iomgr/sockaddr.h @@ -34,7 +34,7 @@ #ifndef GRPC_CORE_LIB_IOMGR_SOCKADDR_H #define GRPC_CORE_LIB_IOMGR_SOCKADDR_H -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINDOWS #include "src/core/lib/iomgr/sockaddr_windows.h" diff --git a/src/core/lib/iomgr/socket_utils.h b/src/core/lib/iomgr/socket_utils.h index 69774aac748..1d871a34e6d 100644 --- a/src/core/lib/iomgr/socket_utils.h +++ b/src/core/lib/iomgr/socket_utils.h @@ -34,6 +34,8 @@ #ifndef GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H #define GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H +#include "src/core/lib/iomgr/port.h" + #ifdef GPR_WINSOCK_SOCKET #include "sockaddr_windows.h" #else diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index e683ef8f187..afd9a7652e6 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/socket_utils_linux.c b/src/core/lib/iomgr/socket_utils_linux.c index 144e3110c8b..defdaf388e3 100644 --- a/src/core/lib/iomgr/socket_utils_linux.c +++ b/src/core/lib/iomgr/socket_utils_linux.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_LINUX_SOCKETUTILS diff --git a/src/core/lib/iomgr/socket_utils_posix.c b/src/core/lib/iomgr/socket_utils_posix.c index 57ae64c1031..a923ff870ff 100644 --- a/src/core/lib/iomgr/socket_utils_posix.c +++ b/src/core/lib/iomgr/socket_utils_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKETUTILS diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c index e4f9e2a5103..c9ddce156b8 100644 --- a/src/core/lib/iomgr/socket_utils_windows.c +++ b/src/core/lib/iomgr/socket_utils_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINDOWS_SOCKETUTILS diff --git a/src/core/lib/iomgr/socket_windows.c b/src/core/lib/iomgr/socket_windows.c index d7d5f6f1570..e9d0cedce55 100644 --- a/src/core/lib/iomgr/socket_windows.c +++ b/src/core/lib/iomgr/socket_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 80c7a3f1287..84b22d0c333 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index 562cb9c6bff..2ae4834f995 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 974d5ae4798..ba4dc755753 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index 38ebd2dbcb0..75241bd65de 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -36,7 +36,7 @@ #define _GNU_SOURCE #endif -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index 1b125e7005b..fd193c3fa26 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/tcp_windows.c b/src/core/lib/iomgr/tcp_windows.c index 35054c42b55..0eecccb0000 100644 --- a/src/core/lib/iomgr/tcp_windows.c +++ b/src/core/lib/iomgr/tcp_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c index 48032412a2e..07eee75e5a9 100644 --- a/src/core/lib/iomgr/udp_server.c +++ b/src/core/lib/iomgr/udp_server.c @@ -36,7 +36,7 @@ #define _GNU_SOURCE #endif -#include +#include "src/core/lib/iomgr/port.h" #ifdef GRPC_NEED_UDP #ifdef GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/unix_sockets_posix.c b/src/core/lib/iomgr/unix_sockets_posix.c index 0e7670e5a5e..c59d38848b3 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.c +++ b/src/core/lib/iomgr/unix_sockets_posix.c @@ -30,8 +30,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ - -#include "src/core/lib/iomgr/unix_sockets_posix.h" +#include "src/core/lib/iomgr/port.h" #ifdef GPR_HAVE_UNIX_SOCKET @@ -40,6 +39,8 @@ #include #include +#include "src/core/lib/iomgr/unix_sockets_posix.h" + #include #include diff --git a/src/core/lib/iomgr/unix_sockets_posix.h b/src/core/lib/iomgr/unix_sockets_posix.h index db0516d9458..5458f6ab4fa 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.h +++ b/src/core/lib/iomgr/unix_sockets_posix.h @@ -34,7 +34,7 @@ #ifndef GRPC_CORE_LIB_IOMGR_UNIX_SOCKETS_POSIX_H #define GRPC_CORE_LIB_IOMGR_UNIX_SOCKETS_POSIX_H -#include +#include "src/core/lib/iomgr/port.h" #include diff --git a/src/core/lib/iomgr/wakeup_fd_eventfd.c b/src/core/lib/iomgr/wakeup_fd_eventfd.c index 95f61023306..3d21d9d1d57 100644 --- a/src/core/lib/iomgr/wakeup_fd_eventfd.c +++ b/src/core/lib/iomgr/wakeup_fd_eventfd.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_LINUX_EVENTFD diff --git a/src/core/lib/iomgr/wakeup_fd_nospecial.c b/src/core/lib/iomgr/wakeup_fd_nospecial.c index cb2f707dc52..c2b273d3a60 100644 --- a/src/core/lib/iomgr/wakeup_fd_nospecial.c +++ b/src/core/lib/iomgr/wakeup_fd_nospecial.c @@ -36,7 +36,7 @@ * systems without anything better than pipe. */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_NO_SPECIAL_WAKEUP_FD diff --git a/src/core/lib/iomgr/wakeup_fd_pipe.c b/src/core/lib/iomgr/wakeup_fd_pipe.c index 4e5dbdcb735..8991d177419 100644 --- a/src/core/lib/iomgr/wakeup_fd_pipe.c +++ b/src/core/lib/iomgr/wakeup_fd_pipe.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_WAKEUP_FD diff --git a/src/core/lib/iomgr/wakeup_fd_posix.c b/src/core/lib/iomgr/wakeup_fd_posix.c index 046208abc83..c5c4eeb62e8 100644 --- a/src/core/lib/iomgr/wakeup_fd_posix.c +++ b/src/core/lib/iomgr/wakeup_fd_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_WAKEUP_FD diff --git a/src/core/lib/iomgr/workqueue.h b/src/core/lib/iomgr/workqueue.h index 7156e490d73..86c7114c315 100644 --- a/src/core/lib/iomgr/workqueue.h +++ b/src/core/lib/iomgr/workqueue.h @@ -39,6 +39,7 @@ #include "src/core/lib/iomgr/iomgr.h" #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET #include "src/core/lib/iomgr/workqueue_posix.h" diff --git a/src/core/lib/iomgr/workqueue_posix.c b/src/core/lib/iomgr/workqueue_posix.c index e0d6dac2308..2665b9580ff 100644 --- a/src/core/lib/iomgr/workqueue_posix.c +++ b/src/core/lib/iomgr/workqueue_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #ifdef GPR_POSIX_SOCKET diff --git a/test/core/end2end/fixtures/h2_full+trace.c b/test/core/end2end/fixtures/h2_full+trace.c index c4dc5b9bc17..ad31d21fefe 100644 --- a/test/core/end2end/fixtures/h2_full+trace.c +++ b/test/core/end2end/fixtures/h2_full+trace.c @@ -45,6 +45,7 @@ #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" #include "src/core/lib/channel/connected_channel.h" #include "src/core/lib/channel/http_server_filter.h" +#include "src/core/lib/iomgr/port.h" #include "src/core/lib/support/env.h" #include "src/core/lib/surface/channel.h" #include "src/core/lib/surface/server.h" diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c index 6b0769b6088..429c2013d35 100644 --- a/test/core/end2end/fixtures/h2_sockpair+trace.c +++ b/test/core/end2end/fixtures/h2_sockpair+trace.c @@ -48,6 +48,7 @@ #include "src/core/lib/channel/http_server_filter.h" #include "src/core/lib/iomgr/endpoint_pair.h" #include "src/core/lib/iomgr/iomgr.h" +#include "src/core/lib/iomgr/port.h" #include "src/core/lib/support/env.h" #include "src/core/lib/surface/channel.h" #include "src/core/lib/surface/completion_queue.h" diff --git a/test/core/iomgr/ev_epoll_linux_test.c b/test/core/iomgr/ev_epoll_linux_test.c index 2547dc98718..d7ee6da7c6d 100644 --- a/test/core/iomgr/ev_epoll_linux_test.c +++ b/test/core/iomgr/ev_epoll_linux_test.c @@ -30,7 +30,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -#include +#include "src/core/lib/iomgr/port.h" /* This test only relevant on linux systems where epoll() is available */ #ifdef GPR_LINUX_EPOLL diff --git a/test/core/util/port_posix.c b/test/core/util/port_posix.c index 265e0acee14..6e3ab64eddb 100644 --- a/test/core/util/port_posix.c +++ b/test/core/util/port_posix.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #include "test/core/util/test_config.h" #if defined(GPR_POSIX_SOCKET) && defined(GRPC_TEST_PICK_PORT) diff --git a/test/core/util/port_windows.c b/test/core/util/port_windows.c index 90237196758..4cc0cea0cb8 100644 --- a/test/core/util/port_windows.c +++ b/test/core/util/port_windows.c @@ -31,7 +31,7 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" #include "test/core/util/test_config.h" #if defined(GPR_WINSOCK_SOCKET) && defined(GRPC_TEST_PICK_PORT) diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index ac79fe82740..662ccbd1c2c 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -47,6 +47,7 @@ #include #include +#include "src/core/lib/iomgr/port.h" #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" #include "test/core/util/port.h" diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 57aefb4b3c0..8f2f011eaf8 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -826,6 +826,7 @@ src/core/lib/iomgr/pollset.h \ src/core/lib/iomgr/pollset_set.h \ src/core/lib/iomgr/pollset_set_windows.h \ src/core/lib/iomgr/pollset_windows.h \ +src/core/lib/iomgr/port.h \ src/core/lib/iomgr/resolve_address.h \ src/core/lib/iomgr/sockaddr.h \ src/core/lib/iomgr/sockaddr_posix.h \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 42faca3ee51..8c1cd249ba2 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -5801,6 +5801,7 @@ "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", + "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", @@ -5926,6 +5927,7 @@ "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/pollset_windows.h", + "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 4166b1b08c0..69ec3c0a087 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -335,6 +335,7 @@ + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 5608139f53d..d72c32046ad 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -776,6 +776,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index f7006c81cda..84e2a60d585 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -225,6 +225,7 @@ + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 22f542bda12..1a2ecf91df6 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -554,6 +554,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index c3591634125..d053dd9a306 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -324,6 +324,7 @@ + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index cf4e4a0a3c2..7edd0db4b60 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -683,6 +683,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr From 623dd4f55624b2fc09848141ab095bf6fe5c6cb2 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 8 Aug 2016 17:31:27 -0700 Subject: [PATCH 008/286] Renamed GPR_ constants to GRPC_ in iomgr/port.h --- include/grpc/impl/codegen/port_platform.h | 8 +- src/core/ext/client_config/parse_address.c | 4 +- src/core/ext/client_config/parse_address.h | 2 +- .../ext/resolver/sockaddr/sockaddr_resolver.c | 6 +- src/core/lib/iomgr/endpoint_pair_posix.c | 2 +- src/core/lib/iomgr/endpoint_pair_windows.c | 2 +- src/core/lib/iomgr/ev_epoll_linux.c | 12 +- src/core/lib/iomgr/ev_epoll_linux.h | 4 +- src/core/lib/iomgr/ev_poll_and_epoll_posix.c | 14 +- src/core/lib/iomgr/ev_poll_posix.c | 2 +- src/core/lib/iomgr/ev_posix.c | 4 +- src/core/lib/iomgr/iocp_windows.c | 4 +- src/core/lib/iomgr/iomgr_posix.c | 2 +- src/core/lib/iomgr/iomgr_windows.c | 2 +- src/core/lib/iomgr/pollset_set_windows.c | 4 +- src/core/lib/iomgr/pollset_windows.c | 4 +- src/core/lib/iomgr/port.h | 124 +++++++++--------- src/core/lib/iomgr/resolve_address_posix.c | 2 +- src/core/lib/iomgr/resolve_address_windows.c | 2 +- src/core/lib/iomgr/sockaddr.h | 2 +- src/core/lib/iomgr/socket_utils.h | 2 +- .../lib/iomgr/socket_utils_common_posix.c | 8 +- src/core/lib/iomgr/socket_utils_linux.c | 2 +- src/core/lib/iomgr/socket_utils_posix.c | 4 +- src/core/lib/iomgr/socket_utils_windows.c | 4 +- src/core/lib/iomgr/socket_windows.c | 4 +- src/core/lib/iomgr/tcp_client_posix.c | 2 +- src/core/lib/iomgr/tcp_client_windows.c | 4 +- src/core/lib/iomgr/tcp_posix.c | 8 +- src/core/lib/iomgr/tcp_server_posix.c | 2 +- src/core/lib/iomgr/tcp_server_windows.c | 4 +- src/core/lib/iomgr/tcp_windows.c | 4 +- src/core/lib/iomgr/udp_server.c | 2 +- src/core/lib/iomgr/unix_sockets_posix.c | 2 +- src/core/lib/iomgr/unix_sockets_posix_noop.c | 2 +- src/core/lib/iomgr/wakeup_fd_eventfd.c | 4 +- src/core/lib/iomgr/wakeup_fd_nospecial.c | 4 +- src/core/lib/iomgr/wakeup_fd_pipe.c | 2 +- src/core/lib/iomgr/wakeup_fd_posix.c | 4 +- src/core/lib/iomgr/workqueue.h | 2 +- src/core/lib/iomgr/workqueue_posix.c | 4 +- test/core/end2end/fixtures/h2_full+trace.c | 2 +- .../core/end2end/fixtures/h2_sockpair+trace.c | 2 +- test/core/iomgr/ev_epoll_linux_test.c | 6 +- test/core/util/port_posix.c | 4 +- test/core/util/port_windows.c | 4 +- test/cpp/end2end/async_end2end_test.cc | 4 +- 47 files changed, 148 insertions(+), 154 deletions(-) diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index 1aeda9b658a..f65f56db87d 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -178,8 +178,8 @@ #define GPR_LINUX_LOG #define GPR_SUPPORT_CHANNELS_FROM_FD 1 #define GPR_LINUX_ENV 1 -#ifndef GPR_LINUX_EVENTFD -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#ifndef GRPC_LINUX_EVENTFD +#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #endif #define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 @@ -348,10 +348,6 @@ typedef unsigned __int64 uint64_t; #error Must define exactly one of GPR_CPU_LINUX, GPR_CPU_POSIX, GPR_WINDOWS, GPR_CPU_IPHONE, GPR_CPU_CUSTOM #endif -#if defined(GPR_POSIX_MULTIPOLL_WITH_POLL) && !defined(GPR_POSIX_SOCKET) -#error Must define GPR_POSIX_SOCKET to use GPR_POSIX_MULTIPOLL_WITH_POLL -#endif - #if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + \ defined(GPR_CUSTOM_TLS) != \ 1 diff --git a/src/core/ext/client_config/parse_address.c b/src/core/ext/client_config/parse_address.c index 8b4abe24a61..7c548b15adb 100644 --- a/src/core/ext/client_config/parse_address.c +++ b/src/core/ext/client_config/parse_address.c @@ -35,7 +35,7 @@ #include #include -#ifdef GPR_HAVE_UNIX_SOCKET +#ifdef GRPC_HAVE_UNIX_SOCKET #include #endif @@ -44,7 +44,7 @@ #include #include -#ifdef GPR_HAVE_UNIX_SOCKET +#ifdef GRPC_HAVE_UNIX_SOCKET int parse_unix(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len) { struct sockaddr_un *un = (struct sockaddr_un *)addr; diff --git a/src/core/ext/client_config/parse_address.h b/src/core/ext/client_config/parse_address.h index 74c86f4d938..16300de2087 100644 --- a/src/core/ext/client_config/parse_address.h +++ b/src/core/ext/client_config/parse_address.h @@ -39,7 +39,7 @@ #include "src/core/ext/client_config/uri_parser.h" #include "src/core/lib/iomgr/sockaddr.h" -#ifdef GPR_HAVE_UNIX_SOCKET +#ifdef GRPC_HAVE_UNIX_SOCKET /** Populate \a addr and \a len from \a uri, whose path is expected to contain a * unix socket path. Returns true upon success. */ int parse_unix(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len); diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index 1f7cce2f43a..d613c5393e0 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -163,7 +163,7 @@ static char *ipv6_get_default_authority(grpc_resolver_factory *factory, return ip_get_default_authority(uri); } -#ifdef GPR_HAVE_UNIX_SOCKET +#ifdef GRPC_HAVE_UNIX_SOCKET char *unix_get_default_authority(grpc_resolver_factory *factory, grpc_uri *uri) { return gpr_strdup("localhost"); @@ -271,7 +271,7 @@ static void sockaddr_factory_unref(grpc_resolver_factory *factory) {} static grpc_resolver_factory name##_resolver_factory = { \ &name##_factory_vtable} -#ifdef GPR_HAVE_UNIX_SOCKET +#ifdef GRPC_HAVE_UNIX_SOCKET DECL_FACTORY(unix); #endif DECL_FACTORY(ipv4); @@ -280,7 +280,7 @@ DECL_FACTORY(ipv6); void grpc_resolver_sockaddr_init(void) { grpc_register_resolver_type(&ipv4_resolver_factory); grpc_register_resolver_type(&ipv6_resolver_factory); -#ifdef GPR_HAVE_UNIX_SOCKET +#ifdef GRPC_HAVE_UNIX_SOCKET grpc_register_resolver_type(&unix_resolver_factory); #endif } diff --git a/src/core/lib/iomgr/endpoint_pair_posix.c b/src/core/lib/iomgr/endpoint_pair_posix.c index 7437dbf6abc..ec2cd782b14 100644 --- a/src/core/lib/iomgr/endpoint_pair_posix.c +++ b/src/core/lib/iomgr/endpoint_pair_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/endpoint_pair.h" #include "src/core/lib/iomgr/socket_utils_posix.h" diff --git a/src/core/lib/iomgr/endpoint_pair_windows.c b/src/core/lib/iomgr/endpoint_pair_windows.c index 0933ba0d570..5c78c95492b 100644 --- a/src/core/lib/iomgr/endpoint_pair_windows.c +++ b/src/core/lib/iomgr/endpoint_pair_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include "src/core/lib/iomgr/endpoint_pair.h" #include "src/core/lib/iomgr/sockaddr_utils.h" diff --git a/src/core/lib/iomgr/ev_epoll_linux.c b/src/core/lib/iomgr/ev_epoll_linux.c index 2d9c0e49b29..9837a986928 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.c +++ b/src/core/lib/iomgr/ev_epoll_linux.c @@ -35,7 +35,7 @@ #include "src/core/lib/iomgr/port.h" /* This polling engine is only relevant on linux kernels supporting epoll() */ -#ifdef GPR_LINUX_EPOLL +#ifdef GRPC_LINUX_EPOLL #include "src/core/lib/iomgr/ev_epoll_linux.h" @@ -1905,13 +1905,13 @@ const grpc_event_engine_vtable *grpc_init_epoll_linux(void) { return &vtable; } -#else /* defined(GPR_LINUX_EPOLL) */ -#if defined(GPR_POSIX_SOCKET) +#else /* defined(GRPC_LINUX_EPOLL) */ +#if defined(GRPC_POSIX_SOCKET) #include "src/core/lib/iomgr/ev_posix.h" -/* If GPR_LINUX_EPOLL is not defined, it means epoll is not available. Return +/* If GRPC_LINUX_EPOLL is not defined, it means epoll is not available. Return * NULL */ const grpc_event_engine_vtable *grpc_init_epoll_linux(void) { return NULL; } -#endif /* defined(GPR_POSIX_SOCKET) */ +#endif /* defined(GRPC_POSIX_SOCKET) */ void grpc_use_signal(int signum) {} -#endif /* !defined(GPR_LINUX_EPOLL) */ +#endif /* !defined(GRPC_LINUX_EPOLL) */ diff --git a/src/core/lib/iomgr/ev_epoll_linux.h b/src/core/lib/iomgr/ev_epoll_linux.h index e2a66555bcd..e6d5441236b 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.h +++ b/src/core/lib/iomgr/ev_epoll_linux.h @@ -39,10 +39,10 @@ const grpc_event_engine_vtable *grpc_init_epoll_linux(void); -#ifdef GPR_LINUX_EPOLL +#ifdef GRPC_LINUX_EPOLL void *grpc_fd_get_polling_island(grpc_fd *fd); void *grpc_pollset_get_polling_island(grpc_pollset *ps); bool grpc_are_polling_islands_equal(void *p, void *q); -#endif /* defined(GPR_LINUX_EPOLL) */ +#endif /* defined(GRPC_LINUX_EPOLL) */ #endif /* GRPC_CORE_LIB_IOMGR_EV_EPOLL_LINUX_H */ diff --git a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c index 57ae8325e8e..fb35311d2b3 100644 --- a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +++ b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c @@ -44,7 +44,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/ev_poll_and_epoll_posix.h" @@ -1338,7 +1338,7 @@ static void become_basic_pollset(grpc_pollset *pollset, grpc_fd *fd_or_null) { * pollset_multipoller_with_poll_posix.c */ -#ifndef GPR_LINUX_MULTIPOLL_WITH_EPOLL +#ifndef GRPC_LINUX_MULTIPOLL_WITH_EPOLL typedef struct { /* all polled fds */ @@ -1520,13 +1520,13 @@ static void poll_become_multipoller(grpc_exec_ctx *exec_ctx, } } -#endif /* !GPR_LINUX_MULTIPOLL_WITH_EPOLL */ +#endif /* !GRPC_LINUX_MULTIPOLL_WITH_EPOLL */ /******************************************************************************* * pollset_multipoller_with_epoll_posix.c */ -#ifdef GPR_LINUX_MULTIPOLL_WITH_EPOLL +#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL #include #include @@ -1839,11 +1839,11 @@ static void epoll_become_multipoller(grpc_exec_ctx *exec_ctx, } } -#else /* GPR_LINUX_MULTIPOLL_WITH_EPOLL */ +#else /* GRPC_LINUX_MULTIPOLL_WITH_EPOLL */ static void remove_fd_from_all_epoll_sets(int fd) {} -#endif /* GPR_LINUX_MULTIPOLL_WITH_EPOLL */ +#endif /* GRPC_LINUX_MULTIPOLL_WITH_EPOLL */ /******************************************************************************* * pollset_set_posix.c @@ -2033,7 +2033,7 @@ static const grpc_event_engine_vtable vtable = { }; const grpc_event_engine_vtable *grpc_init_poll_and_epoll_posix(void) { -#ifdef GPR_LINUX_MULTIPOLL_WITH_EPOLL +#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL platform_become_multipoller = epoll_become_multipoller; #else platform_become_multipoller = poll_become_multipoller; diff --git a/src/core/lib/iomgr/ev_poll_posix.c b/src/core/lib/iomgr/ev_poll_posix.c index 7df1b2e3de2..52c137b8a33 100644 --- a/src/core/lib/iomgr/ev_poll_posix.c +++ b/src/core/lib/iomgr/ev_poll_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/ev_poll_posix.h" diff --git a/src/core/lib/iomgr/ev_posix.c b/src/core/lib/iomgr/ev_posix.c index b510c6fc26d..6079a60b22f 100644 --- a/src/core/lib/iomgr/ev_posix.c +++ b/src/core/lib/iomgr/ev_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/ev_posix.h" @@ -258,4 +258,4 @@ void grpc_pollset_set_del_fd(grpc_exec_ctx *exec_ctx, grpc_error *grpc_kick_poller(void) { return g_event_engine->kick_poller(); } -#endif // GPR_POSIX_SOCKET +#endif // GRPC_POSIX_SOCKET diff --git a/src/core/lib/iomgr/iocp_windows.c b/src/core/lib/iomgr/iocp_windows.c index e6915502a43..60ebe43676d 100644 --- a/src/core/lib/iomgr/iocp_windows.c +++ b/src/core/lib/iomgr/iocp_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include @@ -166,4 +166,4 @@ void grpc_iocp_add_socket(grpc_winsocket *socket) { GPR_ASSERT(ret == g_iocp); } -#endif /* GPR_WINSOCK_SOCKET */ +#endif /* GRPC_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/iomgr_posix.c b/src/core/lib/iomgr/iomgr_posix.c index 963684ad7ae..f5ee0c9ee4e 100644 --- a/src/core/lib/iomgr/iomgr_posix.c +++ b/src/core/lib/iomgr/iomgr_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/debug/trace.h" #include "src/core/lib/iomgr/ev_posix.h" diff --git a/src/core/lib/iomgr/iomgr_windows.c b/src/core/lib/iomgr/iomgr_windows.c index e0e307bf814..b659264edef 100644 --- a/src/core/lib/iomgr/iomgr_windows.c +++ b/src/core/lib/iomgr/iomgr_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include "src/core/lib/iomgr/sockaddr_windows.h" diff --git a/src/core/lib/iomgr/pollset_set_windows.c b/src/core/lib/iomgr/pollset_set_windows.c index 4a2563d32ef..293893f18eb 100644 --- a/src/core/lib/iomgr/pollset_set_windows.c +++ b/src/core/lib/iomgr/pollset_set_windows.c @@ -34,7 +34,7 @@ #include "src/core/lib/iomgr/port.h" #include -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include "src/core/lib/iomgr/pollset_set_windows.h" @@ -60,4 +60,4 @@ void grpc_pollset_set_del_pollset_set(grpc_exec_ctx* exec_ctx, grpc_pollset_set* bag, grpc_pollset_set* item) {} -#endif /* GPR_WINSOCK_SOCKET */ +#endif /* GRPC_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/pollset_windows.c b/src/core/lib/iomgr/pollset_windows.c index bd650d56091..5540303e49b 100644 --- a/src/core/lib/iomgr/pollset_windows.c +++ b/src/core/lib/iomgr/pollset_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include #include @@ -241,4 +241,4 @@ grpc_error *grpc_pollset_kick(grpc_pollset *p, void grpc_kick_poller(void) { grpc_iocp_kick(); } -#endif /* GPR_WINSOCK_SOCKET */ +#endif /* GRPC_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h index acd68dce79d..021bbfff5ab 100644 --- a/src/core/lib/iomgr/port.h +++ b/src/core/lib/iomgr/port.h @@ -37,88 +37,86 @@ #define GRPC_CORE_LIB_IOMGR_PORT_H #if defined(GPR_WINDOWS) -#define GPR_WINSOCK_SOCKET 1 -#define GPR_WINDOWS_SOCKETUTILS 1 -/* #undef GPR_POSIX_SOCKET */ -/* #undef GPR_POSIX_WAKEUP_FD */ +#define GRPC_WINSOCK_SOCKET 1 +#define GRPC_WINDOWS_SOCKETUTILS 1 #elif defined(GPR_MANYLINUX1) -#define GPR_HAVE_IPV6_RECVPKTINFO 1 -#define GPR_HAVE_IP_PKTINFO 1 -#define GPR_HAVE_MSG_NOSIGNAL 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_SOCKETUTILS 1 -#define GPR_POSIX_WAKEUP_FD 1 +#define GRPC_HAVE_IPV6_RECVPKTINFO 1 +#define GRPC_HAVE_IP_PKTINFO 1 +#define GRPC_HAVE_MSG_NOSIGNAL 1 +#define GRPC_HAVE_UNIX_SOCKET 1 +#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#define GRPC_POSIX_SOCKET 1 +#define GRPC_POSIX_SOCKETADDR 1 +#define GRPC_POSIX_SOCKETUTILS 1 +#define GRPC_POSIX_WAKEUP_FD 1 #elif defined(GPR_ANDROID) -#define GPR_HAVE_IPV6_RECVPKTINFO 1 -#define GPR_HAVE_IP_PKTINFO 1 -#define GPR_HAVE_MSG_NOSIGNAL 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_LINUX_EVENTFD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_SOCKETUTILS 1 -#define GPR_POSIX_WAKEUP_FD 1 +#define GRPC_HAVE_IPV6_RECVPKTINFO 1 +#define GRPC_HAVE_IP_PKTINFO 1 +#define GRPC_HAVE_MSG_NOSIGNAL 1 +#define GRPC_HAVE_UNIX_SOCKET 1 +#define GRPC_LINUX_EVENTFD 1 +#define GRPC_POSIX_SOCKET 1 +#define GRPC_POSIX_SOCKETADDR 1 +#define GRPC_POSIX_SOCKETUTILS 1 +#define GRPC_POSIX_WAKEUP_FD 1 #elif defined(GPR_LINUX) -#define GPR_HAVE_IPV6_RECVPKTINFO 1 -#define GPR_HAVE_IP_PKTINFO 1 -#define GPR_HAVE_MSG_NOSIGNAL 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_LINUX_MULTIPOLL_WITH_EPOLL 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_WAKEUP_FD 1 +#define GRPC_HAVE_IPV6_RECVPKTINFO 1 +#define GRPC_HAVE_IP_PKTINFO 1 +#define GRPC_HAVE_MSG_NOSIGNAL 1 +#define GRPC_HAVE_UNIX_SOCKET 1 +#define GRPC_LINUX_MULTIPOLL_WITH_EPOLL 1 +#define GRPC_POSIX_SOCKET 1 +#define GRPC_POSIX_SOCKETADDR 1 +#define GRPC_POSIX_WAKEUP_FD 1 #ifdef __GLIBC_PREREQ #if __GLIBC_PREREQ(2, 9) -#define GPR_LINUX_EPOLL 1 -#define GPR_LINUX_EVENTFD 1 +#define GRPC_LINUX_EPOLL 1 +#define GRPC_LINUX_EVENTFD 1 #endif #if __GLIBC_PREREQ(2, 10) -#define GPR_LINUX_SOCKETUTILS 1 +#define GRPC_LINUX_SOCKETUTILS 1 #endif #endif -#ifndef GPR_LINUX_EVENTFD -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#ifndef GRPC_LINUX_EVENTFD +#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #endif -#ifndef GPR_LINUX_SOCKETUTILS -#define GPR_POSIX_SOCKETUTILS +#ifndef GRPC_LINUX_SOCKETUTILS +#define GRPC_POSIX_SOCKETUTILS #endif #elif defined(GPR_APPLE) -#define GPR_HAVE_IP_PKTINFO 1 -#define GPR_HAVE_SO_NOSIGPIPE 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_MSG_IOVLEN_TYPE int -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_SOCKETUTILS 1 -#define GPR_POSIX_WAKEUP_FD 1 +#define GRPC_HAVE_IP_PKTINFO 1 +#define GRPC_HAVE_SO_NOSIGPIPE 1 +#define GRPC_HAVE_UNIX_SOCKET 1 +#define GRPC_MSG_IOVLEN_TYPE int +#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#define GRPC_POSIX_SOCKET 1 +#define GRPC_POSIX_SOCKETADDR 1 +#define GRPC_POSIX_SOCKETUTILS 1 +#define GRPC_POSIX_WAKEUP_FD 1 #elif defined(GPR_FREEBSD) -#define GPR_HAVE_IPV6_RECVPKTINFO 1 -#define GPR_HAVE_IP_PKTINFO 1 -#define GPR_HAVE_SO_NOSIGPIPE 1 -#define GPR_HAVE_UNIX_SOCKET 1 -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_SOCKETUTILS 1 -#define GPR_POSIX_WAKEUP_FD 1 +#define GRPC_HAVE_IPV6_RECVPKTINFO 1 +#define GRPC_HAVE_IP_PKTINFO 1 +#define GRPC_HAVE_SO_NOSIGPIPE 1 +#define GRPC_HAVE_UNIX_SOCKET 1 +#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#define GRPC_POSIX_SOCKET 1 +#define GRPC_POSIX_SOCKETADDR 1 +#define GRPC_POSIX_SOCKETUTILS 1 +#define GRPC_POSIX_WAKEUP_FD 1 #elif defined(GPR_NACL) -#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 -#define GPR_POSIX_SOCKET 1 -#define GPR_POSIX_SOCKETADDR 1 -#define GPR_POSIX_SOCKETUTILS 1 -#define GPR_POSIX_WAKEUP_FD 1 +#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#define GRPC_POSIX_SOCKET 1 +#define GRPC_POSIX_SOCKETADDR 1 +#define GRPC_POSIX_SOCKETUTILS 1 +#define GRPC_POSIX_WAKEUP_FD 1 #elif !defined(GPR_NO_AUTODETECT_PLATFORM) #error "Platform not recognized" #endif -#if defined(GPR_POSIX_SOCKET) + defined(GPR_WINSOCK_SOCKET) + \ - defined(GPR_CUSTOM_SOCKET) != \ +#if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \ + defined(GRPC_CUSTOM_SOCKET) != \ 1 -#error Must define exactly one of GPR_POSIX_SOCKET, GPR_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET +#error Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET #endif #endif /* GRPC_CORE_LIB_IOMGR_PORT_H */ diff --git a/src/core/lib/iomgr/resolve_address_posix.c b/src/core/lib/iomgr/resolve_address_posix.c index 164fe10855e..9bc46901b11 100644 --- a/src/core/lib/iomgr/resolve_address_posix.c +++ b/src/core/lib/iomgr/resolve_address_posix.c @@ -32,7 +32,7 @@ */ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/sockaddr.h" diff --git a/src/core/lib/iomgr/resolve_address_windows.c b/src/core/lib/iomgr/resolve_address_windows.c index 334473c6bf1..460bd1f2ee3 100644 --- a/src/core/lib/iomgr/resolve_address_windows.c +++ b/src/core/lib/iomgr/resolve_address_windows.c @@ -32,7 +32,7 @@ */ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/sockaddr.h" diff --git a/src/core/lib/iomgr/sockaddr.h b/src/core/lib/iomgr/sockaddr.h index fd85f176dab..58cae6cc010 100644 --- a/src/core/lib/iomgr/sockaddr.h +++ b/src/core/lib/iomgr/sockaddr.h @@ -40,7 +40,7 @@ #include "src/core/lib/iomgr/sockaddr_windows.h" #endif -#ifdef GPR_POSIX_SOCKETADDR +#ifdef GRPC_POSIX_SOCKETADDR #include "src/core/lib/iomgr/sockaddr_posix.h" #endif diff --git a/src/core/lib/iomgr/socket_utils.h b/src/core/lib/iomgr/socket_utils.h index 1d871a34e6d..f0b5a33b638 100644 --- a/src/core/lib/iomgr/socket_utils.h +++ b/src/core/lib/iomgr/socket_utils.h @@ -36,7 +36,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include "sockaddr_windows.h" #else #include "sockaddr_posix.h" diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index afd9a7652e6..21432568465 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/socket_utils.h" #include "src/core/lib/iomgr/socket_utils_posix.h" @@ -79,7 +79,7 @@ grpc_error *grpc_set_socket_nonblocking(int fd, int non_blocking) { } grpc_error *grpc_set_socket_no_sigpipe_if_possible(int fd) { -#ifdef GPR_HAVE_SO_NOSIGPIPE +#ifdef GRPC_HAVE_SO_NOSIGPIPE int val = 1; int newval; socklen_t intlen = sizeof(newval); @@ -97,7 +97,7 @@ grpc_error *grpc_set_socket_no_sigpipe_if_possible(int fd) { } grpc_error *grpc_set_socket_ip_pktinfo_if_possible(int fd) { -#ifdef GPR_HAVE_IP_PKTINFO +#ifdef GRPC_HAVE_IP_PKTINFO int get_local_ip = 1; if (0 != setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &get_local_ip, sizeof(get_local_ip))) { @@ -108,7 +108,7 @@ grpc_error *grpc_set_socket_ip_pktinfo_if_possible(int fd) { } grpc_error *grpc_set_socket_ipv6_recvpktinfo_if_possible(int fd) { -#ifdef GPR_HAVE_IPV6_RECVPKTINFO +#ifdef GRPC_HAVE_IPV6_RECVPKTINFO int get_local_ip = 1; if (0 != setsockopt(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &get_local_ip, sizeof(get_local_ip))) { diff --git a/src/core/lib/iomgr/socket_utils_linux.c b/src/core/lib/iomgr/socket_utils_linux.c index defdaf388e3..3ebc3f1ac1c 100644 --- a/src/core/lib/iomgr/socket_utils_linux.c +++ b/src/core/lib/iomgr/socket_utils_linux.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_LINUX_SOCKETUTILS +#ifdef GRPC_LINUX_SOCKETUTILS #include "src/core/lib/iomgr/socket_utils_posix.h" diff --git a/src/core/lib/iomgr/socket_utils_posix.c b/src/core/lib/iomgr/socket_utils_posix.c index a923ff870ff..4f26773342a 100644 --- a/src/core/lib/iomgr/socket_utils_posix.c +++ b/src/core/lib/iomgr/socket_utils_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKETUTILS +#ifdef GRPC_POSIX_SOCKETUTILS #include "src/core/lib/iomgr/socket_utils_posix.h" @@ -67,4 +67,4 @@ close_and_error: return -1; } -#endif /* GPR_POSIX_SOCKETUTILS */ +#endif /* GRPC_POSIX_SOCKETUTILS */ diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c index c9ddce156b8..74dbd57c7d4 100644 --- a/src/core/lib/iomgr/socket_utils_windows.c +++ b/src/core/lib/iomgr/socket_utils_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINDOWS_SOCKETUTILS +#ifdef GRPC_WINDOWS_SOCKETUTILS #include "src/core/lib/iomgr/socket_utils.h" @@ -45,4 +45,4 @@ const char *grpc_inet_ntop(int af, const void *src, return InetNtop(af, src, dst, (size_t)size); } -#endif /* GPR_WINDOWS_SOCKETUTILS */ +#endif /* GRPC_WINDOWS_SOCKETUTILS */ diff --git a/src/core/lib/iomgr/socket_windows.c b/src/core/lib/iomgr/socket_windows.c index e9d0cedce55..14bd603d02a 100644 --- a/src/core/lib/iomgr/socket_windows.c +++ b/src/core/lib/iomgr/socket_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include @@ -156,4 +156,4 @@ void grpc_socket_become_ready(grpc_exec_ctx *exec_ctx, grpc_winsocket *socket, if (should_destroy) destroy(socket); } -#endif /* GPR_WINSOCK_SOCKET */ +#endif /* GRPC_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 84b22d0c333..4c1dcd671fa 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/tcp_client.h" diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index 2ae4834f995..29775cce215 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include "src/core/lib/iomgr/sockaddr_windows.h" @@ -228,4 +228,4 @@ failure: grpc_exec_ctx_sched(exec_ctx, on_done, final_error, NULL); } -#endif /* GPR_WINSOCK_SOCKET */ +#endif /* GRPC_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index ba4dc755753..b3ed0484fdf 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/network_status_tracker.h" #include "src/core/lib/iomgr/tcp_posix.h" @@ -58,14 +58,14 @@ #include "src/core/lib/profiling/timers.h" #include "src/core/lib/support/string.h" -#ifdef GPR_HAVE_MSG_NOSIGNAL +#ifdef GRPC_HAVE_MSG_NOSIGNAL #define SENDMSG_FLAGS MSG_NOSIGNAL #else #define SENDMSG_FLAGS 0 #endif -#ifdef GPR_MSG_IOVLEN_TYPE -typedef GPR_MSG_IOVLEN_TYPE msg_iovlen_type; +#ifdef GRPC_MSG_IOVLEN_TYPE +typedef GRPC_MSG_IOVLEN_TYPE msg_iovlen_type; #else typedef size_t msg_iovlen_type; #endif diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index 75241bd65de..0a2c80a6f6f 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -38,7 +38,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/tcp_server.h" diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index fd193c3fa26..b84a1095371 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include @@ -543,4 +543,4 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s, void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {} -#endif /* GPR_WINSOCK_SOCKET */ +#endif /* GRPC_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/tcp_windows.c b/src/core/lib/iomgr/tcp_windows.c index 0eecccb0000..533f07abc07 100644 --- a/src/core/lib/iomgr/tcp_windows.c +++ b/src/core/lib/iomgr/tcp_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_WINSOCK_SOCKET +#ifdef GRPC_WINSOCK_SOCKET #include @@ -416,4 +416,4 @@ grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, char *peer_string) { return &tcp->base; } -#endif /* GPR_WINSOCK_SOCKET */ +#endif /* GRPC_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c index 07eee75e5a9..b8076c965cd 100644 --- a/src/core/lib/iomgr/udp_server.c +++ b/src/core/lib/iomgr/udp_server.c @@ -39,7 +39,7 @@ #include "src/core/lib/iomgr/port.h" #ifdef GRPC_NEED_UDP -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/udp_server.h" diff --git a/src/core/lib/iomgr/unix_sockets_posix.c b/src/core/lib/iomgr/unix_sockets_posix.c index c59d38848b3..33082a2e998 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.c +++ b/src/core/lib/iomgr/unix_sockets_posix.c @@ -32,7 +32,7 @@ */ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_HAVE_UNIX_SOCKET +#ifdef GRPC_HAVE_UNIX_SOCKET #include #include diff --git a/src/core/lib/iomgr/unix_sockets_posix_noop.c b/src/core/lib/iomgr/unix_sockets_posix_noop.c index 56b47c3daf0..82f008d599a 100644 --- a/src/core/lib/iomgr/unix_sockets_posix_noop.c +++ b/src/core/lib/iomgr/unix_sockets_posix_noop.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/unix_sockets_posix.h" -#ifndef GPR_HAVE_UNIX_SOCKET +#ifndef GRPC_HAVE_UNIX_SOCKET #include diff --git a/src/core/lib/iomgr/wakeup_fd_eventfd.c b/src/core/lib/iomgr/wakeup_fd_eventfd.c index 3d21d9d1d57..373e21d3e15 100644 --- a/src/core/lib/iomgr/wakeup_fd_eventfd.c +++ b/src/core/lib/iomgr/wakeup_fd_eventfd.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_LINUX_EVENTFD +#ifdef GRPC_LINUX_EVENTFD #include #include @@ -94,4 +94,4 @@ const grpc_wakeup_fd_vtable grpc_specialized_wakeup_fd_vtable = { eventfd_create, eventfd_consume, eventfd_wakeup, eventfd_destroy, eventfd_check_availability}; -#endif /* GPR_LINUX_EVENTFD */ +#endif /* GRPC_LINUX_EVENTFD */ diff --git a/src/core/lib/iomgr/wakeup_fd_nospecial.c b/src/core/lib/iomgr/wakeup_fd_nospecial.c index c2b273d3a60..611bced0291 100644 --- a/src/core/lib/iomgr/wakeup_fd_nospecial.c +++ b/src/core/lib/iomgr/wakeup_fd_nospecial.c @@ -38,7 +38,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_NO_SPECIAL_WAKEUP_FD +#ifdef GRPC_POSIX_NO_SPECIAL_WAKEUP_FD #include #include "src/core/lib/iomgr/wakeup_fd_posix.h" @@ -48,4 +48,4 @@ static int check_availability_invalid(void) { return 0; } const grpc_wakeup_fd_vtable grpc_specialized_wakeup_fd_vtable = { NULL, NULL, NULL, NULL, check_availability_invalid}; -#endif /* GPR_POSIX_NO_SPECIAL_WAKEUP_FD */ +#endif /* GRPC_POSIX_NO_SPECIAL_WAKEUP_FD */ diff --git a/src/core/lib/iomgr/wakeup_fd_pipe.c b/src/core/lib/iomgr/wakeup_fd_pipe.c index 8991d177419..b9754228b1d 100644 --- a/src/core/lib/iomgr/wakeup_fd_pipe.c +++ b/src/core/lib/iomgr/wakeup_fd_pipe.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_WAKEUP_FD +#ifdef GRPC_POSIX_WAKEUP_FD #include "src/core/lib/iomgr/wakeup_fd_posix.h" diff --git a/src/core/lib/iomgr/wakeup_fd_posix.c b/src/core/lib/iomgr/wakeup_fd_posix.c index c5c4eeb62e8..dc51a08ca20 100644 --- a/src/core/lib/iomgr/wakeup_fd_posix.c +++ b/src/core/lib/iomgr/wakeup_fd_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_WAKEUP_FD +#ifdef GRPC_POSIX_WAKEUP_FD #include #include "src/core/lib/iomgr/wakeup_fd_pipe.h" @@ -69,4 +69,4 @@ void grpc_wakeup_fd_destroy(grpc_wakeup_fd *fd_info) { wakeup_fd_vtable->destroy(fd_info); } -#endif /* GPR_POSIX_WAKEUP_FD */ +#endif /* GRPC_POSIX_WAKEUP_FD */ diff --git a/src/core/lib/iomgr/workqueue.h b/src/core/lib/iomgr/workqueue.h index 86c7114c315..3edba4b305a 100644 --- a/src/core/lib/iomgr/workqueue.h +++ b/src/core/lib/iomgr/workqueue.h @@ -41,7 +41,7 @@ #include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/workqueue_posix.h" #endif diff --git a/src/core/lib/iomgr/workqueue_posix.c b/src/core/lib/iomgr/workqueue_posix.c index 2665b9580ff..f28a442718c 100644 --- a/src/core/lib/iomgr/workqueue_posix.c +++ b/src/core/lib/iomgr/workqueue_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/workqueue.h" @@ -148,4 +148,4 @@ void grpc_workqueue_enqueue(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue, gpr_mu_unlock(&workqueue->mu); } -#endif /* GPR_POSIX_SOCKET */ +#endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/end2end/fixtures/h2_full+trace.c b/test/core/end2end/fixtures/h2_full+trace.c index ad31d21fefe..e25b5e33470 100644 --- a/test/core/end2end/fixtures/h2_full+trace.c +++ b/test/core/end2end/fixtures/h2_full+trace.c @@ -110,7 +110,7 @@ int main(int argc, char **argv) { code paths in trace.c to be taken */ gpr_setenv("GRPC_TRACE", "doesnt-exist,http,all"); -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET g_fixture_slowdown_factor = isatty(STDOUT_FILENO) ? 10.0 : 1.0; #else g_fixture_slowdown_factor = 10.0; diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c index 429c2013d35..90f815077c0 100644 --- a/test/core/end2end/fixtures/h2_sockpair+trace.c +++ b/test/core/end2end/fixtures/h2_sockpair+trace.c @@ -147,7 +147,7 @@ int main(int argc, char **argv) { /* force tracing on, with a value to force many code paths in trace.c to be taken */ gpr_setenv("GRPC_TRACE", "doesnt-exist,http,all"); -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET g_fixture_slowdown_factor = isatty(STDOUT_FILENO) ? 10.0 : 1.0; #else g_fixture_slowdown_factor = 10.0; diff --git a/test/core/iomgr/ev_epoll_linux_test.c b/test/core/iomgr/ev_epoll_linux_test.c index d7ee6da7c6d..564b05d7f4c 100644 --- a/test/core/iomgr/ev_epoll_linux_test.c +++ b/test/core/iomgr/ev_epoll_linux_test.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" /* This test only relevant on linux systems where epoll() is available */ -#ifdef GPR_LINUX_EPOLL +#ifdef GRPC_LINUX_EPOLL #include "src/core/lib/iomgr/ev_epoll_linux.h" #include "src/core/lib/iomgr/ev_posix.h" @@ -239,6 +239,6 @@ int main(int argc, char **argv) { grpc_iomgr_shutdown(); return 0; } -#else /* defined(GPR_LINUX_EPOLL) */ +#else /* defined(GRPC_LINUX_EPOLL) */ int main(int argc, char **argv) { return 0; } -#endif /* !defined(GPR_LINUX_EPOLL) */ +#endif /* !defined(GRPC_LINUX_EPOLL) */ diff --git a/test/core/util/port_posix.c b/test/core/util/port_posix.c index 6e3ab64eddb..60537b49469 100644 --- a/test/core/util/port_posix.c +++ b/test/core/util/port_posix.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" #include "test/core/util/test_config.h" -#if defined(GPR_POSIX_SOCKET) && defined(GRPC_TEST_PICK_PORT) +#if defined(GRPC_POSIX_SOCKET) && defined(GRPC_TEST_PICK_PORT) #include "test/core/util/port.h" @@ -237,4 +237,4 @@ int grpc_pick_unused_port_or_die(void) { void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); } -#endif /* GPR_POSIX_SOCKET && GRPC_TEST_PICK_PORT */ +#endif /* GRPC_POSIX_SOCKET && GRPC_TEST_PICK_PORT */ diff --git a/test/core/util/port_windows.c b/test/core/util/port_windows.c index 4cc0cea0cb8..db9787dec6d 100644 --- a/test/core/util/port_windows.c +++ b/test/core/util/port_windows.c @@ -33,7 +33,7 @@ #include "src/core/lib/iomgr/port.h" #include "test/core/util/test_config.h" -#if defined(GPR_WINSOCK_SOCKET) && defined(GRPC_TEST_PICK_PORT) +#if defined(GRPC_WINSOCK_SOCKET) && defined(GRPC_TEST_PICK_PORT) #include "test/core/util/port.h" @@ -242,4 +242,4 @@ int grpc_pick_unused_port_or_die(void) { void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); } -#endif /* GPR_WINSOCK_SOCKET && GRPC_TEST_PICK_PORT */ +#endif /* GRPC_WINSOCK_SOCKET && GRPC_TEST_PICK_PORT */ diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index 662ccbd1c2c..b5c95bca86d 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -55,7 +55,7 @@ #include "test/cpp/util/string_ref_helper.h" #include "test/cpp/util/test_credentials_provider.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/ev_posix.h" #endif @@ -74,7 +74,7 @@ namespace { void* tag(int i) { return (void*)(intptr_t)i; } int detag(void* p) { return static_cast(reinterpret_cast(p)); } -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET static int maybe_assert_non_blocking_poll(struct pollfd* pfds, nfds_t nfds, int timeout) { if (gpr_tls_get(&g_is_async_end2end_test)) { From 7c205906d5d47cfaa9a7e4729bbd71821e3bb5bd Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 9 Aug 2016 10:07:42 -0700 Subject: [PATCH 009/286] Removed GPR_POSIX_FILE, and changed the files that used it --- BUILD | 9 +-- CMakeLists.txt | 6 +- Makefile | 9 +-- binding.gyp | 3 +- build.yaml | 3 +- config.m4 | 3 +- gRPC-Core.podspec | 3 +- grpc.gemspec | 3 +- include/grpc/impl/codegen/port_platform.h | 6 -- package.xml | 3 +- ...dentials_posix.c => credentials_generic.c} | 24 ++++---- .../google_default/credentials_windows.c | 61 ------------------- .../google_default_credentials.h | 12 ++++ src/python/grpcio/grpc_core_dependencies.py | 3 +- test/core/security/credentials_test.c | 22 +++---- tools/doxygen/Doxyfile.core.internal | 3 +- tools/run_tests/sources_and_headers.json | 3 +- vsprojects/vcxproj/grpc/grpc.vcxproj | 4 +- vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 5 +- 19 files changed, 49 insertions(+), 136 deletions(-) rename src/core/lib/security/credentials/google_default/{credentials_posix.c => credentials_generic.c} (82%) delete mode 100644 src/core/lib/security/credentials/google_default/credentials_windows.c diff --git a/BUILD b/BUILD index c874341a982..056e91a9e29 100644 --- a/BUILD +++ b/BUILD @@ -436,8 +436,7 @@ cc_library( "src/core/lib/security/credentials/credentials.c", "src/core/lib/security/credentials/credentials_metadata.c", "src/core/lib/security/credentials/fake/fake_credentials.c", - "src/core/lib/security/credentials/google_default/credentials_posix.c", - "src/core/lib/security/credentials/google_default/credentials_windows.c", + "src/core/lib/security/credentials/google_default/credentials_generic.c", "src/core/lib/security/credentials/google_default/google_default_credentials.c", "src/core/lib/security/credentials/iam/iam_credentials.c", "src/core/lib/security/credentials/jwt/json_token.c", @@ -843,8 +842,7 @@ cc_library( "src/core/lib/security/credentials/credentials.c", "src/core/lib/security/credentials/credentials_metadata.c", "src/core/lib/security/credentials/fake/fake_credentials.c", - "src/core/lib/security/credentials/google_default/credentials_posix.c", - "src/core/lib/security/credentials/google_default/credentials_windows.c", + "src/core/lib/security/credentials/google_default/credentials_generic.c", "src/core/lib/security/credentials/google_default/google_default_credentials.c", "src/core/lib/security/credentials/iam/iam_credentials.c", "src/core/lib/security/credentials/jwt/json_token.c", @@ -1932,8 +1930,7 @@ objc_library( "src/core/lib/security/credentials/credentials.c", "src/core/lib/security/credentials/credentials_metadata.c", "src/core/lib/security/credentials/fake/fake_credentials.c", - "src/core/lib/security/credentials/google_default/credentials_posix.c", - "src/core/lib/security/credentials/google_default/credentials_windows.c", + "src/core/lib/security/credentials/google_default/credentials_generic.c", "src/core/lib/security/credentials/google_default/google_default_credentials.c", "src/core/lib/security/credentials/iam/iam_credentials.c", "src/core/lib/security/credentials/jwt/json_token.c", diff --git a/CMakeLists.txt b/CMakeLists.txt index fdb730b983d..ac7218236eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -397,8 +397,7 @@ add_library(grpc src/core/lib/security/credentials/credentials.c src/core/lib/security/credentials/credentials_metadata.c src/core/lib/security/credentials/fake/fake_credentials.c - src/core/lib/security/credentials/google_default/credentials_posix.c - src/core/lib/security/credentials/google_default/credentials_windows.c + src/core/lib/security/credentials/google_default/credentials_generic.c src/core/lib/security/credentials/google_default/google_default_credentials.c src/core/lib/security/credentials/iam/iam_credentials.c src/core/lib/security/credentials/jwt/json_token.c @@ -676,8 +675,7 @@ add_library(grpc_cronet src/core/lib/security/credentials/credentials.c src/core/lib/security/credentials/credentials_metadata.c src/core/lib/security/credentials/fake/fake_credentials.c - src/core/lib/security/credentials/google_default/credentials_posix.c - src/core/lib/security/credentials/google_default/credentials_windows.c + src/core/lib/security/credentials/google_default/credentials_generic.c src/core/lib/security/credentials/google_default/google_default_credentials.c src/core/lib/security/credentials/iam/iam_credentials.c src/core/lib/security/credentials/jwt/json_token.c diff --git a/Makefile b/Makefile index 8b6af559e08..e85633f8eb0 100644 --- a/Makefile +++ b/Makefile @@ -2645,8 +2645,7 @@ LIBGRPC_SRC = \ src/core/lib/security/credentials/credentials.c \ src/core/lib/security/credentials/credentials_metadata.c \ src/core/lib/security/credentials/fake/fake_credentials.c \ - src/core/lib/security/credentials/google_default/credentials_posix.c \ - src/core/lib/security/credentials/google_default/credentials_windows.c \ + src/core/lib/security/credentials/google_default/credentials_generic.c \ src/core/lib/security/credentials/google_default/google_default_credentials.c \ src/core/lib/security/credentials/iam/iam_credentials.c \ src/core/lib/security/credentials/jwt/json_token.c \ @@ -2944,8 +2943,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/security/credentials/credentials.c \ src/core/lib/security/credentials/credentials_metadata.c \ src/core/lib/security/credentials/fake/fake_credentials.c \ - src/core/lib/security/credentials/google_default/credentials_posix.c \ - src/core/lib/security/credentials/google_default/credentials_windows.c \ + src/core/lib/security/credentials/google_default/credentials_generic.c \ src/core/lib/security/credentials/google_default/google_default_credentials.c \ src/core/lib/security/credentials/iam/iam_credentials.c \ src/core/lib/security/credentials/jwt/json_token.c \ @@ -15188,8 +15186,7 @@ src/core/lib/security/credentials/composite/composite_credentials.c: $(OPENSSL_D src/core/lib/security/credentials/credentials.c: $(OPENSSL_DEP) src/core/lib/security/credentials/credentials_metadata.c: $(OPENSSL_DEP) src/core/lib/security/credentials/fake/fake_credentials.c: $(OPENSSL_DEP) -src/core/lib/security/credentials/google_default/credentials_posix.c: $(OPENSSL_DEP) -src/core/lib/security/credentials/google_default/credentials_windows.c: $(OPENSSL_DEP) +src/core/lib/security/credentials/google_default/credentials_generic.c: $(OPENSSL_DEP) src/core/lib/security/credentials/google_default/google_default_credentials.c: $(OPENSSL_DEP) src/core/lib/security/credentials/iam/iam_credentials.c: $(OPENSSL_DEP) src/core/lib/security/credentials/jwt/json_token.c: $(OPENSSL_DEP) diff --git a/binding.gyp b/binding.gyp index a078e5cca84..b03da7cb583 100644 --- a/binding.gyp +++ b/binding.gyp @@ -682,8 +682,7 @@ 'src/core/lib/security/credentials/credentials.c', 'src/core/lib/security/credentials/credentials_metadata.c', 'src/core/lib/security/credentials/fake/fake_credentials.c', - 'src/core/lib/security/credentials/google_default/credentials_posix.c', - 'src/core/lib/security/credentials/google_default/credentials_windows.c', + 'src/core/lib/security/credentials/google_default/credentials_generic.c', 'src/core/lib/security/credentials/google_default/google_default_credentials.c', 'src/core/lib/security/credentials/iam/iam_credentials.c', 'src/core/lib/security/credentials/jwt/json_token.c', diff --git a/build.yaml b/build.yaml index 39514bdef08..e3afcd643b8 100644 --- a/build.yaml +++ b/build.yaml @@ -466,8 +466,7 @@ filegroups: - src/core/lib/security/credentials/credentials.c - src/core/lib/security/credentials/credentials_metadata.c - src/core/lib/security/credentials/fake/fake_credentials.c - - src/core/lib/security/credentials/google_default/credentials_posix.c - - src/core/lib/security/credentials/google_default/credentials_windows.c + - src/core/lib/security/credentials/google_default/credentials_generic.c - src/core/lib/security/credentials/google_default/google_default_credentials.c - src/core/lib/security/credentials/iam/iam_credentials.c - src/core/lib/security/credentials/jwt/json_token.c diff --git a/config.m4 b/config.m4 index 69f06274d76..7a06923e593 100644 --- a/config.m4 +++ b/config.m4 @@ -201,8 +201,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/security/credentials/credentials.c \ src/core/lib/security/credentials/credentials_metadata.c \ src/core/lib/security/credentials/fake/fake_credentials.c \ - src/core/lib/security/credentials/google_default/credentials_posix.c \ - src/core/lib/security/credentials/google_default/credentials_windows.c \ + src/core/lib/security/credentials/google_default/credentials_generic.c \ src/core/lib/security/credentials/google_default/google_default_credentials.c \ src/core/lib/security/credentials/iam/iam_credentials.c \ src/core/lib/security/credentials/jwt/json_token.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 753dabebe46..b7a5e72a2ac 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -533,8 +533,7 @@ Pod::Spec.new do |s| 'src/core/lib/security/credentials/credentials.c', 'src/core/lib/security/credentials/credentials_metadata.c', 'src/core/lib/security/credentials/fake/fake_credentials.c', - 'src/core/lib/security/credentials/google_default/credentials_posix.c', - 'src/core/lib/security/credentials/google_default/credentials_windows.c', + 'src/core/lib/security/credentials/google_default/credentials_generic.c', 'src/core/lib/security/credentials/google_default/google_default_credentials.c', 'src/core/lib/security/credentials/iam/iam_credentials.c', 'src/core/lib/security/credentials/jwt/json_token.c', diff --git a/grpc.gemspec b/grpc.gemspec index bb7913bf660..d231bf1db9f 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -452,8 +452,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/security/credentials/credentials.c ) s.files += %w( src/core/lib/security/credentials/credentials_metadata.c ) s.files += %w( src/core/lib/security/credentials/fake/fake_credentials.c ) - s.files += %w( src/core/lib/security/credentials/google_default/credentials_posix.c ) - s.files += %w( src/core/lib/security/credentials/google_default/credentials_windows.c ) + s.files += %w( src/core/lib/security/credentials/google_default/credentials_generic.c ) s.files += %w( src/core/lib/security/credentials/google_default/google_default_credentials.c ) s.files += %w( src/core/lib/security/credentials/iam/iam_credentials.c ) s.files += %w( src/core/lib/security/credentials/jwt/json_token.c ) diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index f65f56db87d..c2b467a1bc6 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -125,7 +125,6 @@ #define GPR_LINUX_LOG 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 #define GPR_LINUX_ENV 1 -#define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 @@ -149,7 +148,6 @@ #define GPR_GCC_SYNC 1 #define GPR_GCC_TLS 1 #define GPR_POSIX_ENV 1 -#define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_LOG #define GPR_POSIX_STRING 1 @@ -181,7 +179,6 @@ #ifndef GRPC_LINUX_EVENTFD #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #endif -#define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 @@ -213,7 +210,6 @@ #define GPR_GCC_ATOMIC 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_ENV 1 -#define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 @@ -237,7 +233,6 @@ #define GPR_GCC_TLS 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_ENV 1 -#define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 @@ -267,7 +262,6 @@ #define GPR_GCC_TLS 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_ENV 1 -#define GPR_POSIX_FILE 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 diff --git a/package.xml b/package.xml index 3d5a83dc791..dd59cfd3305 100644 --- a/package.xml +++ b/package.xml @@ -460,8 +460,7 @@ - - + diff --git a/src/core/lib/security/credentials/google_default/credentials_posix.c b/src/core/lib/security/credentials/google_default/credentials_generic.c similarity index 82% rename from src/core/lib/security/credentials/google_default/credentials_posix.c rename to src/core/lib/security/credentials/google_default/credentials_generic.c index 42c9d7f997a..02a6e9e9dd0 100644 --- a/src/core/lib/security/credentials/google_default/credentials_posix.c +++ b/src/core/lib/security/credentials/google_default/credentials_generic.c @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -31,12 +31,10 @@ * */ -#include - -#ifdef GPR_POSIX_FILE - #include "src/core/lib/security/credentials/google_default/google_default_credentials.h" +#ifdef GRPC_GOOGLE_CREDENTIALS_GENERIC + #include #include #include @@ -46,16 +44,16 @@ char *grpc_get_well_known_google_credentials_file_path_impl(void) { char *result = NULL; - char *home = gpr_getenv("HOME"); - if (home == NULL) { - gpr_log(GPR_ERROR, "Could not get HOME environment variable."); + char *base = gpr_getenv(GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR); + if (base == NULL) { + gpr_log(GPR_ERROR, "Could not get " GRPC_GOOGLE_CREDENTIALS_ENV_VAR + " environment variable."); return NULL; } - gpr_asprintf(&result, "%s/.config/%s/%s", home, - GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY, - GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE); - gpr_free(home); + gpr_asprintf(&result, "%s/%s", base, + GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX); + gpr_free(base); return result; } -#endif /* GPR_POSIX_FILE */ +#endif /* GRPC_GOOGLE_CREDENTIALS_GENERIC */ diff --git a/src/core/lib/security/credentials/google_default/credentials_windows.c b/src/core/lib/security/credentials/google_default/credentials_windows.c deleted file mode 100644 index 208b8fd9add..00000000000 --- a/src/core/lib/security/credentials/google_default/credentials_windows.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * - * Copyright 2015, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include - -#ifdef GPR_WINDOWS - -#include "src/core/lib/security/credentials/google_default/google_default_credentials.h" - -#include -#include -#include - -#include "src/core/lib/support/env.h" -#include "src/core/lib/support/string.h" - -char *grpc_get_well_known_google_credentials_file_path_impl(void) { - char *result = NULL; - char *appdata_path = gpr_getenv("APPDATA"); - if (appdata_path == NULL) { - gpr_log(GPR_ERROR, "Could not get APPDATA environment variable."); - return NULL; - } - gpr_asprintf(&result, "%s/%s/%s", appdata_path, - GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY, - GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE); - gpr_free(appdata_path); - return result; -} - -#endif /* GPR_WINDOWS */ diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.h b/src/core/lib/security/credentials/google_default/google_default_credentials.h index fac4377e2c8..bc816bcb775 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.h +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.h @@ -34,12 +34,24 @@ #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_GOOGLE_DEFAULT_GOOGLE_DEFAULT_CREDENTIALS_H #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_GOOGLE_DEFAULT_GOOGLE_DEFAULT_CREDENTIALS_H +#include + #include "src/core/lib/security/credentials/credentials.h" #define GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY "gcloud" #define GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE \ "application_default_credentials.json" +#ifdef GPR_WINDOWS +#define GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR "APPDATA" +#define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE +#define GRPC_GOOGLE_CREDENTIALS_GENERIC 1 +#else +#define GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR "HOME" +#define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX ".config/" GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE +#define GRPC_GOOGLE_CREDENTIALS_GENERIC 1 +#endif + void grpc_flush_cached_google_default_credentials(void); #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_GOOGLE_DEFAULT_GOOGLE_DEFAULT_CREDENTIALS_H \ diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 78fa4289030..ab7b4611787 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -195,8 +195,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/security/credentials/credentials.c', 'src/core/lib/security/credentials/credentials_metadata.c', 'src/core/lib/security/credentials/fake/fake_credentials.c', - 'src/core/lib/security/credentials/google_default/credentials_posix.c', - 'src/core/lib/security/credentials/google_default/credentials_windows.c', + 'src/core/lib/security/credentials/google_default/credentials_generic.c', 'src/core/lib/security/credentials/google_default/google_default_credentials.c', 'src/core/lib/security/credentials/iam/iam_credentials.c', 'src/core/lib/security/credentials/jwt/json_token.c', diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c index 7043953154a..d4dd5005802 100644 --- a/test/core/security/credentials_test.c +++ b/test/core/security/credentials_test.c @@ -1124,28 +1124,20 @@ static void test_metadata_plugin_failure(void) { } static void test_get_well_known_google_credentials_file_path(void) { -#ifdef GPR_POSIX_FILE char *path; - char *old_home = gpr_getenv("HOME"); - gpr_setenv("HOME", "/tmp"); + char *home = gpr_getenv("HOME"); + char *appdata = gpr_getenv("APPDATA"); path = grpc_get_well_known_google_credentials_file_path(); GPR_ASSERT(path != NULL); - GPR_ASSERT(0 == strcmp("/tmp/.config/" GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY - "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE, - path)); - gpr_free(path); -#if defined(GPR_POSIX_ENV) || defined(GPR_LINUX_ENV) unsetenv("HOME"); + unsetenv("APPDATA"); path = grpc_get_well_known_google_credentials_file_path(); GPR_ASSERT(path == NULL); -#endif /* GPR_POSIX_ENV || GPR_LINUX_ENV */ - gpr_setenv("HOME", old_home); - gpr_free(old_home); -#else /* GPR_POSIX_FILE */ - char *path = grpc_get_well_known_google_credentials_file_path(); - GPR_ASSERT(path != NULL); + gpr_setenv("HOME", home); + gpr_setenv("APPDATA", appdata); + gpr_free(home); + gpr_free(appdata); gpr_free(path); -#endif } int main(int argc, char **argv) { diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 8f2f011eaf8..24c78091c74 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -1071,8 +1071,7 @@ src/core/lib/security/credentials/composite/composite_credentials.c \ src/core/lib/security/credentials/credentials.c \ src/core/lib/security/credentials/credentials_metadata.c \ src/core/lib/security/credentials/fake/fake_credentials.c \ -src/core/lib/security/credentials/google_default/credentials_posix.c \ -src/core/lib/security/credentials/google_default/credentials_windows.c \ +src/core/lib/security/credentials/google_default/credentials_generic.c \ src/core/lib/security/credentials/google_default/google_default_credentials.c \ src/core/lib/security/credentials/iam/iam_credentials.c \ src/core/lib/security/credentials/jwt/json_token.c \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 8c1cd249ba2..534abdda091 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6275,8 +6275,7 @@ "src/core/lib/security/credentials/credentials_metadata.c", "src/core/lib/security/credentials/fake/fake_credentials.c", "src/core/lib/security/credentials/fake/fake_credentials.h", - "src/core/lib/security/credentials/google_default/credentials_posix.c", - "src/core/lib/security/credentials/google_default/credentials_windows.c", + "src/core/lib/security/credentials/google_default/credentials_generic.c", "src/core/lib/security/credentials/google_default/google_default_credentials.c", "src/core/lib/security/credentials/google_default/google_default_credentials.h", "src/core/lib/security/credentials/iam/iam_credentials.c", diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 69ec3c0a087..d09c07d0cb8 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -702,9 +702,7 @@ - - - + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index d72c32046ad..d5ac3d44220 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -361,10 +361,7 @@ src\core\lib\security\credentials\fake - - src\core\lib\security\credentials\google_default - - + src\core\lib\security\credentials\google_default From 192293d64bc957e149539bd846c7f2e7cb0ca795 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 9 Aug 2016 10:24:22 -0700 Subject: [PATCH 010/286] Move GPR_MANYLINUX1 to top of port.h checks --- src/core/lib/iomgr/port.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h index 021bbfff5ab..1cd0a29ee26 100644 --- a/src/core/lib/iomgr/port.h +++ b/src/core/lib/iomgr/port.h @@ -36,10 +36,7 @@ #ifndef GRPC_CORE_LIB_IOMGR_PORT_H #define GRPC_CORE_LIB_IOMGR_PORT_H -#if defined(GPR_WINDOWS) -#define GRPC_WINSOCK_SOCKET 1 -#define GRPC_WINDOWS_SOCKETUTILS 1 -#elif defined(GPR_MANYLINUX1) +#if defined(GPR_MANYLINUX1) #define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_IP_PKTINFO 1 #define GRPC_HAVE_MSG_NOSIGNAL 1 @@ -49,6 +46,9 @@ #define GRPC_POSIX_SOCKETADDR 1 #define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_WAKEUP_FD 1 +#elif defined(GPR_WINDOWS) +#define GRPC_WINSOCK_SOCKET 1 +#define GRPC_WINDOWS_SOCKETUTILS 1 #elif defined(GPR_ANDROID) #define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_IP_PKTINFO 1 From db9630a5493577c3168fa123c1c7ef418c96e62b Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 9 Aug 2016 10:52:39 -0700 Subject: [PATCH 011/286] Removed duplicate #define in port_platform --- include/grpc/impl/codegen/port_platform.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index c2b467a1bc6..ff8cd00e08d 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -176,9 +176,6 @@ #define GPR_LINUX_LOG #define GPR_SUPPORT_CHANNELS_FROM_FD 1 #define GPR_LINUX_ENV 1 -#ifndef GRPC_LINUX_EVENTFD -#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 -#endif #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 From 3c2c6c15d9facefbb826c47136107ad7b0aaaa4c Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 9 Aug 2016 11:16:42 -0700 Subject: [PATCH 012/286] Fixed InetNtop function call --- src/core/lib/iomgr/socket_utils_windows.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c index 74dbd57c7d4..17f43e4c875 100644 --- a/src/core/lib/iomgr/socket_utils_windows.c +++ b/src/core/lib/iomgr/socket_utils_windows.c @@ -42,7 +42,7 @@ const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size) { GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); - return InetNtop(af, src, dst, (size_t)size); + return InetNtopA(af, src, dst, (size_t)size); } #endif /* GRPC_WINDOWS_SOCKETUTILS */ From cb6ce70b5a580ece86746a7a48708134a1fd478b Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 9 Aug 2016 11:18:35 -0700 Subject: [PATCH 013/286] Fixed copyright year in new file --- src/core/lib/iomgr/socket_utils_windows.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c index 17f43e4c875..c65812fec67 100644 --- a/src/core/lib/iomgr/socket_utils_windows.c +++ b/src/core/lib/iomgr/socket_utils_windows.c @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without From 0b110dd28d7a03a8f28cdbd112baf5998369d893 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 9 Aug 2016 13:19:58 -0700 Subject: [PATCH 014/286] Changed grpc_inet_ntop signature to match Windows function --- src/core/lib/iomgr/socket_utils.h | 2 +- src/core/lib/iomgr/socket_utils_common_posix.c | 4 ++-- src/core/lib/iomgr/socket_utils_windows.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/lib/iomgr/socket_utils.h b/src/core/lib/iomgr/socket_utils.h index f0b5a33b638..79903571a01 100644 --- a/src/core/lib/iomgr/socket_utils.h +++ b/src/core/lib/iomgr/socket_utils.h @@ -43,7 +43,7 @@ #endif /* A wrapper for inet_ntop on POSIX systems and InetNtop on Windows systems */ -const char *grpc_inet_ntop(int af, const void *src, +const char *grpc_inet_ntop(int af, void *src, char *dst, socklen_t size); #endif /* GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H */ diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index 21432568465..42ee76d2fe7 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -297,9 +297,9 @@ grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, return error_for_fd(*newfd, addr); } -const char *grpc_inet_ntop(int af, const void *src, +const char *grpc_inet_ntop(int af, void *src, char *dst, socklen_t size) { - return inet_ntop(af, src, dst, size); + return inet_ntop(af, (const void*)src, dst, size); } #endif diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c index c65812fec67..c1dfc6e96f8 100644 --- a/src/core/lib/iomgr/socket_utils_windows.c +++ b/src/core/lib/iomgr/socket_utils_windows.c @@ -39,7 +39,7 @@ #include -const char *grpc_inet_ntop(int af, const void *src, +const char *grpc_inet_ntop(int af, void *src, char *dst, socklen_t size) { GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); return InetNtopA(af, src, dst, (size_t)size); From 31963632dc048d18f31d63101c0e5a6636aa98d7 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 9 Aug 2016 14:00:41 -0700 Subject: [PATCH 015/286] Make usage of grpc_inet_ntop consistent --- src/core/lib/iomgr/sockaddr_utils.c | 4 ++-- src/core/lib/iomgr/socket_utils.h | 2 +- src/core/lib/iomgr/socket_utils_common_posix.c | 4 ++-- src/core/lib/iomgr/socket_utils_windows.c | 5 +++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/core/lib/iomgr/sockaddr_utils.c b/src/core/lib/iomgr/sockaddr_utils.c index 127d95c618a..7f8e6ea3c3c 100644 --- a/src/core/lib/iomgr/sockaddr_utils.c +++ b/src/core/lib/iomgr/sockaddr_utils.c @@ -42,6 +42,7 @@ #include #include +#include "src/core/lib/iomgr/socket_utils.h" #include "src/core/lib/iomgr/unix_sockets_posix.h" #include "src/core/lib/support/string.h" @@ -155,9 +156,8 @@ int grpc_sockaddr_to_string(char **out, const struct sockaddr *addr, ip = &addr6->sin6_addr; port = ntohs(addr6->sin6_port); } - /* Windows inet_ntop wants a mutable ip pointer */ if (ip != NULL && - inet_ntop(addr->sa_family, (void *)ip, ntop_buf, sizeof(ntop_buf)) != + grpc_inet_ntop(addr->sa_family, ip, ntop_buf, sizeof(ntop_buf)) != NULL) { ret = gpr_join_host_port(out, ntop_buf, port); } else { diff --git a/src/core/lib/iomgr/socket_utils.h b/src/core/lib/iomgr/socket_utils.h index 79903571a01..f0b5a33b638 100644 --- a/src/core/lib/iomgr/socket_utils.h +++ b/src/core/lib/iomgr/socket_utils.h @@ -43,7 +43,7 @@ #endif /* A wrapper for inet_ntop on POSIX systems and InetNtop on Windows systems */ -const char *grpc_inet_ntop(int af, void *src, +const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size); #endif /* GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H */ diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index 42ee76d2fe7..21432568465 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -297,9 +297,9 @@ grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, return error_for_fd(*newfd, addr); } -const char *grpc_inet_ntop(int af, void *src, +const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size) { - return inet_ntop(af, (const void*)src, dst, size); + return inet_ntop(af, src, dst, size); } #endif diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c index c1dfc6e96f8..41e53bd812c 100644 --- a/src/core/lib/iomgr/socket_utils_windows.c +++ b/src/core/lib/iomgr/socket_utils_windows.c @@ -39,10 +39,11 @@ #include -const char *grpc_inet_ntop(int af, void *src, +const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size) { GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); - return InetNtopA(af, src, dst, (size_t)size); + /* Windows InetNtopA wants a mutable ip pointer */ + return InetNtopA(af, (void*)src, dst, (size_t)size); } #endif /* GRPC_WINDOWS_SOCKETUTILS */ From 165e5066e4c80f8d40c0ff5526d750aead2d6e98 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 10 Aug 2016 10:05:14 -0700 Subject: [PATCH 016/286] Only use unsetenv where available --- test/core/security/credentials_test.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c index d4dd5005802..8a2f33977c5 100644 --- a/test/core/security/credentials_test.c +++ b/test/core/security/credentials_test.c @@ -1126,18 +1126,17 @@ static void test_metadata_plugin_failure(void) { static void test_get_well_known_google_credentials_file_path(void) { char *path; char *home = gpr_getenv("HOME"); - char *appdata = gpr_getenv("APPDATA"); path = grpc_get_well_known_google_credentials_file_path(); GPR_ASSERT(path != NULL); + gpr_free(path); +#if defined(GPR_POSIX_ENV) || defined(GPR_LINUX_ENV) unsetenv("HOME"); - unsetenv("APPDATA"); path = grpc_get_well_known_google_credentials_file_path(); GPR_ASSERT(path == NULL); gpr_setenv("HOME", home); - gpr_setenv("APPDATA", appdata); - gpr_free(home); - gpr_free(appdata); gpr_free(path); +#endif /* GPR_POSIX_ENV || GPR_LINUX_ENV */ + gpr_free(home); } int main(int argc, char **argv) { From 7e924a0dd4dfc98c7ef00e79a651d28c56ca3907 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 10 Aug 2016 10:06:43 -0700 Subject: [PATCH 017/286] Clang format --- src/core/lib/iomgr/ev_epoll_linux.h | 2 +- src/core/lib/iomgr/pollset_set_windows.c | 2 +- src/core/lib/iomgr/port.h | 2 +- src/core/lib/iomgr/sockaddr_utils.c | 3 +-- src/core/lib/iomgr/socket_utils.h | 3 +-- src/core/lib/iomgr/socket_utils_common_posix.c | 3 +-- src/core/lib/iomgr/socket_utils_windows.c | 5 ++--- .../credentials/google_default/credentials_generic.c | 5 ++--- .../google_default/google_default_credentials.h | 8 ++++++-- 9 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/core/lib/iomgr/ev_epoll_linux.h b/src/core/lib/iomgr/ev_epoll_linux.h index e6d5441236b..8fc3ff59a3e 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.h +++ b/src/core/lib/iomgr/ev_epoll_linux.h @@ -34,8 +34,8 @@ #ifndef GRPC_CORE_LIB_IOMGR_EV_EPOLL_LINUX_H #define GRPC_CORE_LIB_IOMGR_EV_EPOLL_LINUX_H -#include "src/core/lib/iomgr/port.h" #include "src/core/lib/iomgr/ev_posix.h" +#include "src/core/lib/iomgr/port.h" const grpc_event_engine_vtable *grpc_init_epoll_linux(void); diff --git a/src/core/lib/iomgr/pollset_set_windows.c b/src/core/lib/iomgr/pollset_set_windows.c index 293893f18eb..645650db9be 100644 --- a/src/core/lib/iomgr/pollset_set_windows.c +++ b/src/core/lib/iomgr/pollset_set_windows.c @@ -31,8 +31,8 @@ * */ -#include "src/core/lib/iomgr/port.h" #include +#include "src/core/lib/iomgr/port.h" #ifdef GRPC_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h index 1cd0a29ee26..e6f01802ed9 100644 --- a/src/core/lib/iomgr/port.h +++ b/src/core/lib/iomgr/port.h @@ -119,4 +119,4 @@ #error Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET #endif -#endif /* GRPC_CORE_LIB_IOMGR_PORT_H */ +#endif /* GRPC_CORE_LIB_IOMGR_PORT_H */ diff --git a/src/core/lib/iomgr/sockaddr_utils.c b/src/core/lib/iomgr/sockaddr_utils.c index 7f8e6ea3c3c..ed1dac56222 100644 --- a/src/core/lib/iomgr/sockaddr_utils.c +++ b/src/core/lib/iomgr/sockaddr_utils.c @@ -157,8 +157,7 @@ int grpc_sockaddr_to_string(char **out, const struct sockaddr *addr, port = ntohs(addr6->sin6_port); } if (ip != NULL && - grpc_inet_ntop(addr->sa_family, ip, ntop_buf, sizeof(ntop_buf)) != - NULL) { + grpc_inet_ntop(addr->sa_family, ip, ntop_buf, sizeof(ntop_buf)) != NULL) { ret = gpr_join_host_port(out, ntop_buf, port); } else { ret = gpr_asprintf(out, "(sockaddr family=%d)", addr->sa_family); diff --git a/src/core/lib/iomgr/socket_utils.h b/src/core/lib/iomgr/socket_utils.h index f0b5a33b638..238061ea5a5 100644 --- a/src/core/lib/iomgr/socket_utils.h +++ b/src/core/lib/iomgr/socket_utils.h @@ -43,7 +43,6 @@ #endif /* A wrapper for inet_ntop on POSIX systems and InetNtop on Windows systems */ -const char *grpc_inet_ntop(int af, const void *src, - char *dst, socklen_t size); +const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size); #endif /* GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H */ diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index 21432568465..aa844da0784 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -297,8 +297,7 @@ grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, return error_for_fd(*newfd, addr); } -const char *grpc_inet_ntop(int af, const void *src, - char *dst, socklen_t size) { +const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size) { return inet_ntop(af, src, dst, size); } diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c index 41e53bd812c..09dabd7a730 100644 --- a/src/core/lib/iomgr/socket_utils_windows.c +++ b/src/core/lib/iomgr/socket_utils_windows.c @@ -39,11 +39,10 @@ #include -const char *grpc_inet_ntop(int af, const void *src, - char *dst, socklen_t size) { +const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size) { GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); /* Windows InetNtopA wants a mutable ip pointer */ - return InetNtopA(af, (void*)src, dst, (size_t)size); + return InetNtopA(af, (void *)src, dst, (size_t)size); } #endif /* GRPC_WINDOWS_SOCKETUTILS */ diff --git a/src/core/lib/security/credentials/google_default/credentials_generic.c b/src/core/lib/security/credentials/google_default/credentials_generic.c index 02a6e9e9dd0..013e3b54518 100644 --- a/src/core/lib/security/credentials/google_default/credentials_generic.c +++ b/src/core/lib/security/credentials/google_default/credentials_generic.c @@ -47,11 +47,10 @@ char *grpc_get_well_known_google_credentials_file_path_impl(void) { char *base = gpr_getenv(GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR); if (base == NULL) { gpr_log(GPR_ERROR, "Could not get " GRPC_GOOGLE_CREDENTIALS_ENV_VAR - " environment variable."); + " environment variable."); return NULL; } - gpr_asprintf(&result, "%s/%s", base, - GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX); + gpr_asprintf(&result, "%s/%s", base, GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX); gpr_free(base); return result; } diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.h b/src/core/lib/security/credentials/google_default/google_default_credentials.h index bc816bcb775..476e1839ca1 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.h +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.h @@ -44,11 +44,15 @@ #ifdef GPR_WINDOWS #define GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR "APPDATA" -#define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE +#define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX \ + GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY \ + "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE #define GRPC_GOOGLE_CREDENTIALS_GENERIC 1 #else #define GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR "HOME" -#define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX ".config/" GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE +#define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX \ + ".config/" GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY \ + "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE #define GRPC_GOOGLE_CREDENTIALS_GENERIC 1 #endif From 32ee4a66e2c66f58ba56976541fd6183e656dbf0 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 10 Aug 2016 10:56:35 -0700 Subject: [PATCH 018/286] Clang format again --- .../credentials/google_default/google_default_credentials.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.h b/src/core/lib/security/credentials/google_default/google_default_credentials.h index 476e1839ca1..0a5a6605e54 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.h +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.h @@ -46,7 +46,7 @@ #define GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR "APPDATA" #define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX \ GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY \ - "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE + "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE #define GRPC_GOOGLE_CREDENTIALS_GENERIC 1 #else #define GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR "HOME" From 2f320cac223d9b4c72e9e2d6eb8d194a6d73d4bf Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 10 Aug 2016 13:35:53 -0700 Subject: [PATCH 019/286] Fix some #include statements and add one dependency in build.yaml --- build.yaml | 2 ++ src/core/lib/iomgr/socket_utils.h | 4 ++-- tools/run_tests/sources_and_headers.json | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/build.yaml b/build.yaml index e3afcd643b8..72e48c0ec80 100644 --- a/build.yaml +++ b/build.yaml @@ -642,6 +642,8 @@ filegroups: deps: - gpr secure: true + uses: + - grpc_base - name: grpc++_base language: c++ public_headers: diff --git a/src/core/lib/iomgr/socket_utils.h b/src/core/lib/iomgr/socket_utils.h index 238061ea5a5..6ce9a6859cc 100644 --- a/src/core/lib/iomgr/socket_utils.h +++ b/src/core/lib/iomgr/socket_utils.h @@ -37,9 +37,9 @@ #include "src/core/lib/iomgr/port.h" #ifdef GRPC_WINSOCK_SOCKET -#include "sockaddr_windows.h" +#include "src/core/lib/iomgr/sockaddr_windows.h" #else -#include "sockaddr_posix.h" +#include "src/core/lib/iomgr/sockaddr_posix.h" #endif /* A wrapper for inet_ntop on POSIX systems and InetNtop on Windows systems */ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 534abdda091..3b337d0c359 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6558,7 +6558,8 @@ }, { "deps": [ - "gpr" + "gpr", + "grpc_base" ], "headers": [ "src/core/lib/tsi/fake_transport_security.h", From c0a64cda947f331420ad24b9b4c80637d28b825e Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 15 Aug 2016 13:14:16 -0700 Subject: [PATCH 020/286] Update Node library dependencies and change deprecated function calls --- package.json | 25 +++++++++++++------------ src/node/ext/byte_buffer.cc | 14 +++++++++----- src/node/ext/call.cc | 8 ++++---- src/node/ext/channel.cc | 4 ++-- src/node/ext/node_grpc.cc | 4 ++-- src/node/ext/server.cc | 2 +- src/node/src/common.js | 2 +- templates/package.json.template | 25 +++++++++++++------------ 8 files changed, 45 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index b06e4756c3d..eaac9d7c0c6 100644 --- a/package.json +++ b/package.json @@ -25,24 +25,26 @@ "coverage": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha src/node/test", "install": "./node_modules/.bin/node-pre-gyp install --fallback-to-build" }, - "bundledDependencies": ["node-pre-gyp"], + "bundledDependencies": [ + "node-pre-gyp" + ], "dependencies": { "arguejs": "^0.2.3", - "lodash": "^3.9.3", + "lodash": "^4.15.0", "nan": "^2.0.0", - "protobufjs": "^4.0.0" + "node-pre-gyp": "^0.6.0", + "protobufjs": "^5.0.0" }, "devDependencies": { - "async": "^1.5.0", + "async": "^2.0.1", "google-auth-library": "^0.9.2", "google-protobuf": "^3.0.0", - "istanbul": "^0.3.21", + "istanbul": "^0.4.4", "jsdoc": "^3.3.2", "jshint": "^2.5.0", "minimist": "^1.1.0", - "mocha": "^2.3.4", - "mocha-jenkins-reporter": "^0.1.9", - "mustache": "^2.0.0", + "mocha": "^3.0.2", + "mocha-jenkins-reporter": "^0.2.3", "poisson-process": "^0.2.1" }, "engines": { @@ -50,11 +52,10 @@ }, "binary": { "module_name": "grpc_node", - "module_path": "./build/Release/", + "module_path": "src/node/extension_binary", "host": "https://storage.googleapis.com/", "remote_path": "grpc-precompiled-binaries/node/{name}/v{version}", - "package_name": "{node_abi}-{platform}-{arch}.tar.gz", - "module_path": "src/node/extension_binary" + "package_name": "{node_abi}-{platform}-{arch}.tar.gz" }, "files": [ "LICENSE", @@ -75,7 +76,7 @@ ], "main": "src/node/index.js", "license": "BSD-3-Clause", - "jshintConfig" : { + "jshintConfig": { "bitwise": true, "curly": true, "eqeqeq": true, diff --git a/src/node/ext/byte_buffer.cc b/src/node/ext/byte_buffer.cc index a3f678f32c6..ad7d0ec8c89 100644 --- a/src/node/ext/byte_buffer.cc +++ b/src/node/ext/byte_buffer.cc @@ -44,8 +44,8 @@ namespace grpc { namespace node { +using Nan::MaybeLocal; -using v8::Context; using v8::Function; using v8::Local; using v8::Object; @@ -89,15 +89,19 @@ Local ByteBufferToBuffer(grpc_byte_buffer *buffer) { Local MakeFastBuffer(Local slowBuffer) { Nan::EscapableHandleScope scope; Local globalObj = Nan::GetCurrentContext()->Global(); + MaybeLocal constructorValue = Nan::Get( + globalObj, Nan::New("Buffer").ToLocalChecked()); Local bufferConstructor = Local::Cast( - globalObj->Get(Nan::New("Buffer").ToLocalChecked())); - Local consArgs[3] = { + constructorValue.ToLocalChecked()); + const int argc = 3; + Local consArgs[argc] = { slowBuffer, Nan::New(::node::Buffer::Length(slowBuffer)), Nan::New(0) }; - Local fastBuffer = bufferConstructor->NewInstance(3, consArgs); - return scope.Escape(fastBuffer); + MaybeLocal fastBuffer = Nan::NewInstance(bufferConstructor, + argc, consArgs); + return scope.Escape(fastBuffer.ToLocalChecked()); } } // namespace node } // namespace grpc diff --git a/src/node/ext/call.cc b/src/node/ext/call.cc index 9f023b58831..fbab40dca1d 100644 --- a/src/node/ext/call.cc +++ b/src/node/ext/call.cc @@ -613,16 +613,16 @@ NAN_METHOD(Call::New) { return Nan::ThrowTypeError("Call's fourth argument must be a string"); } call = new Call(wrapped_call); - info.This()->SetHiddenValue(Nan::New("channel_").ToLocalChecked(), - channel_object); + Nan::Set(info.This(), Nan::New("channel_").ToLocalChecked(), + channel_object); } call->Wrap(info.This()); info.GetReturnValue().Set(info.This()); } else { const int argc = 4; Local argv[argc] = {info[0], info[1], info[2], info[3]}; - MaybeLocal maybe_instance = constructor->GetFunction()->NewInstance( - argc, argv); + MaybeLocal maybe_instance = Nan::NewInstance( + constructor->GetFunction(), argc, argv); if (maybe_instance.IsEmpty()) { // There's probably a pending exception return; diff --git a/src/node/ext/channel.cc b/src/node/ext/channel.cc index 00fcca6dc84..db46533b14f 100644 --- a/src/node/ext/channel.cc +++ b/src/node/ext/channel.cc @@ -206,8 +206,8 @@ NAN_METHOD(Channel::New) { } else { const int argc = 3; Local argv[argc] = {info[0], info[1], info[2]}; - MaybeLocal maybe_instance = constructor->GetFunction()->NewInstance( - argc, argv); + MaybeLocal maybe_instance = Nan::NewInstance( + constructor->GetFunction(), argc, argv); if (maybe_instance.IsEmpty()) { // There's probably a pending exception return; diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc index 745b5023d59..ec81356761a 100644 --- a/src/node/ext/node_grpc.cc +++ b/src/node/ext/node_grpc.cc @@ -261,8 +261,8 @@ void InitLogConstants(Local exports) { Nan::HandleScope scope; Local log_verbosity = Nan::New(); Nan::Set(exports, Nan::New("logVerbosity").ToLocalChecked(), log_verbosity); - Local DEBUG(Nan::New(GPR_LOG_SEVERITY_DEBUG)); - Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), DEBUG); + Local DEBUG_LOG(Nan::New(GPR_LOG_SEVERITY_DEBUG)); + Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), DEBUG_LOG); Local INFO(Nan::New(GPR_LOG_SEVERITY_INFO)); Nan::Set(log_verbosity, Nan::New("INFO").ToLocalChecked(), INFO); Local LOG_ERROR(Nan::New(GPR_LOG_SEVERITY_ERROR)); diff --git a/src/node/ext/server.cc b/src/node/ext/server.cc index dd1b777ac88..73c5ef2db3b 100644 --- a/src/node/ext/server.cc +++ b/src/node/ext/server.cc @@ -169,7 +169,7 @@ NAN_METHOD(Server::New) { const int argc = 1; Local argv[argc] = {info[0]}; MaybeLocal maybe_instance = - constructor->GetFunction()->NewInstance(argc, argv); + Nan::NewInstance(constructor->GetFunction(), argc, argv); if (maybe_instance.IsEmpty()) { // There's probably a pending exception return; diff --git a/src/node/src/common.js b/src/node/src/common.js index 22159dd39f7..c6c6d597a88 100644 --- a/src/node/src/common.js +++ b/src/node/src/common.js @@ -141,7 +141,7 @@ exports.getProtobufServiceAttrs = function getProtobufServiceAttrs(service, binaryAsBase64 = options.binaryAsBase64; longsAsStrings = options.longsAsStrings; } - return _.object(_.map(service.children, function(method) { + return _.fromPairs(_.map(service.children, function(method) { return [_.camelCase(method.name), { path: prefix + method.name, requestStream: method.requestStream, diff --git a/templates/package.json.template b/templates/package.json.template index e9596d4d4cb..0829517f8fb 100644 --- a/templates/package.json.template +++ b/templates/package.json.template @@ -27,24 +27,26 @@ "coverage": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha src/node/test", "install": "./node_modules/.bin/node-pre-gyp install --fallback-to-build" }, - "bundledDependencies": ["node-pre-gyp"], + "bundledDependencies": [ + "node-pre-gyp" + ], "dependencies": { "arguejs": "^0.2.3", - "lodash": "^3.9.3", + "lodash": "^4.15.0", "nan": "^2.0.0", - "protobufjs": "^4.0.0" + "node-pre-gyp": "^0.6.0", + "protobufjs": "^5.0.0" }, "devDependencies": { - "async": "^1.5.0", + "async": "^2.0.1", "google-auth-library": "^0.9.2", "google-protobuf": "^3.0.0", - "istanbul": "^0.3.21", + "istanbul": "^0.4.4", "jsdoc": "^3.3.2", "jshint": "^2.5.0", "minimist": "^1.1.0", - "mocha": "^2.3.4", - "mocha-jenkins-reporter": "^0.1.9", - "mustache": "^2.0.0", + "mocha": "^3.0.2", + "mocha-jenkins-reporter": "^0.2.3", "poisson-process": "^0.2.1" }, "engines": { @@ -52,11 +54,10 @@ }, "binary": { "module_name": "grpc_node", - "module_path": "./build/Release/", + "module_path": "src/node/extension_binary", "host": "https://storage.googleapis.com/", "remote_path": "grpc-precompiled-binaries/node/{name}/v{version}", - "package_name": "{node_abi}-{platform}-{arch}.tar.gz", - "module_path": "src/node/extension_binary" + "package_name": "{node_abi}-{platform}-{arch}.tar.gz" }, "files": [ "LICENSE", @@ -77,7 +78,7 @@ ], "main": "src/node/index.js", "license": "BSD-3-Clause", - "jshintConfig" : { + "jshintConfig": { "bitwise": true, "curly": true, "eqeqeq": true, From 3ea9e247e0f933fd303c94f6f2397580983946cd Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 22 Aug 2016 14:15:43 -0700 Subject: [PATCH 021/286] some refactoring --- include/grpc++/server.h | 24 ++++++++++++---------- src/cpp/server/server.cc | 24 +++++++++++----------- src/cpp/server/server_builder.cc | 35 ++++++++++++++++++++------------ 3 files changed, 47 insertions(+), 36 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 03c97784686..5b0a316a031 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -122,12 +122,13 @@ class Server GRPC_FINAL : public ServerInterface, /// Server constructors. To be used by \a ServerBuilder only. /// - /// \param thread_pool The threadpool instance to use for call processing. - /// \param thread_pool_owned Does the server own the \a thread_pool instance? + /// \param has_sync_methods Does this Server have any synchronous methods. + /// This information is useful to the server in creating some internal data + /// structures (completion queues / thread pools etc) to handle the incoming + /// RPCs corresponding to those sync methods /// \param max_message_size Maximum message length that the channel can /// receive. - Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned, - int max_message_size, ChannelArguments* args); + Server(bool has_sync_methods, int max_message_size, ChannelArguments* args); /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the Server instance. @@ -180,7 +181,10 @@ class Server GRPC_FINAL : public ServerInterface, const int max_message_size_; - // Completion queue. + // The following completion queues used ONLY if the server has any services + // with sync methods. The queues are used as notification_cqs to get notified + // of the incoming RPCs + // std::vector> notification_cqs_; CompletionQueue cq_; // Sever status @@ -188,9 +192,11 @@ class Server GRPC_FINAL : public ServerInterface, bool started_; bool shutdown_; bool shutdown_notified_; + + // TODO (sreek) : Remove num_running_cb_ and callback_cv_; // The number of threads which are running callbacks. - int num_running_cb_; - grpc::condition_variable callback_cv_; + // int num_running_cb_; + // grpc::condition_variable callback_cv_; grpc::condition_variable shutdown_cv_; @@ -204,10 +210,6 @@ class Server GRPC_FINAL : public ServerInterface, // Pointer to the c grpc server. grpc_server* server_; - ThreadPoolInterface* thread_pool_; - // Whether the thread pool is created and owned by the server. - bool thread_pool_owned_; - std::unique_ptr server_initializer_; }; diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 6bfa1f2369a..a436ee43e9e 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -276,19 +276,16 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { }; static internal::GrpcLibraryInitializer g_gli_initializer; -Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned, - int max_message_size, ChannelArguments* args) +Server::Server(bool has_sync_methods, int max_message_size, + ChannelArguments* args) : GrpcRpcManager(3, 5, 8), max_message_size_(max_message_size), started_(false), shutdown_(false), shutdown_notified_(false), - num_running_cb_(0), sync_methods_(new std::list), has_generic_service_(false), server_(nullptr), - thread_pool_(thread_pool), - thread_pool_owned_(thread_pool_owned), server_initializer_(new ServerInitializer(this)) { g_gli_initializer.summon(); gpr_once_init(&g_once_init_callbacks, InitGlobalCallbacks); @@ -297,7 +294,8 @@ Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned, grpc_channel_args channel_args; args->SetChannelArgs(&channel_args); server_ = grpc_server_create(&channel_args, nullptr); - if (thread_pool_ == nullptr) { + + if (!has_sync_methods) { grpc_server_register_non_listening_completion_queue(server_, cq_.cq(), nullptr); } else { @@ -320,9 +318,6 @@ Server::~Server() { bool ok; GPR_ASSERT(!cq_.Next(&got_tag, &ok)); grpc_server_destroy(server_); - if (thread_pool_owned_) { - delete thread_pool_; - } delete sync_methods_; } @@ -418,12 +413,14 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { // proper constructor implicitly. Construct the object and use push_back. sync_methods_->push_back(SyncRequest(unknown_method_.get(), nullptr)); } + for (size_t i = 0; i < num_cqs; i++) { if (cqs[i]->IsFrequentlyPolled()) { new UnimplementedAsyncRequest(this, cqs[i]); } } } + // Start processing rpcs. if (!sync_methods_->empty()) { for (auto m = sync_methods_->begin(); m != sync_methods_->end(); m++) { @@ -465,10 +462,13 @@ void Server::ShutdownInternal(gpr_timespec deadline) { } lock.lock(); + /* TODO (sreek) - Remove this block */ // Wait for running callbacks to finish. - while (num_running_cb_ != 0) { - callback_cv_.wait(lock); - } + /* + while (num_running_cb_ != 0) { + callback_cv_.wait(lock); + } + */ shutdown_notified_ = true; shutdown_cv_.notify_all(); diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 45bb858e2ed..760309d911a 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -138,31 +138,32 @@ ServerBuilder& ServerBuilder::AddListeningPort( } std::unique_ptr ServerBuilder::BuildAndStart() { - std::unique_ptr thread_pool; + + // == Determine if the server has any syncrhonous methods == bool has_sync_methods = false; for (auto it = services_.begin(); it != services_.end(); ++it) { if ((*it)->service->has_synchronous_methods()) { - if (!thread_pool) { - thread_pool.reset(CreateDefaultThreadPool()); + has_sync_methods = true; + break; + } + } + + if (!has_sync_methods) { + for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { + if ((*plugin)->has_sync_methods()) { has_sync_methods = true; break; } } } + + // == Channel args == ChannelArguments args; for (auto option = options_.begin(); option != options_.end(); ++option) { (*option)->UpdateArguments(&args); (*option)->UpdatePlugins(&plugins_); } - if (!thread_pool) { - for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { - if ((*plugin)->has_sync_methods()) { - thread_pool.reset(CreateDefaultThreadPool()); - has_sync_methods = true; - break; - } - } - } + if (max_message_size_ > 0) { args.SetInt(GRPC_ARG_MAX_MESSAGE_LENGTH, max_message_size_); } @@ -176,8 +177,10 @@ std::unique_ptr ServerBuilder::BuildAndStart() { args.SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, maybe_default_compression_algorithm_.algorithm); } + std::unique_ptr server( - new Server(thread_pool.release(), true, max_message_size_, &args)); + new Server(has_sync_methods, max_message_size_, &args)); + ServerInitializer* initializer = server->initializer(); // If the server has atleast one sync methods, we know that this is a Sync @@ -212,9 +215,11 @@ std::unique_ptr ServerBuilder::BuildAndStart() { return nullptr; } } + for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { (*plugin)->InitServer(initializer); } + if (generic_service_) { server->RegisterAsyncGenericService(generic_service_); } else { @@ -227,6 +232,7 @@ std::unique_ptr ServerBuilder::BuildAndStart() { } } } + for (auto port = ports_.begin(); port != ports_.end(); port++) { int r = server->AddListeningPort(port->addr, port->creds.get()); if (!r) return nullptr; @@ -234,13 +240,16 @@ std::unique_ptr ServerBuilder::BuildAndStart() { *port->selected_port = r; } } + auto cqs_data = cqs_.empty() ? nullptr : &cqs_[0]; if (!server->Start(cqs_data, cqs_.size())) { return nullptr; } + for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { (*plugin)->Finish(initializer); } + return server; } From 088416df190204c32ef1d90b672926480e4738f4 Mon Sep 17 00:00:00 2001 From: Alexander Polcyn Date: Wed, 14 Sep 2016 11:10:41 -0700 Subject: [PATCH 022/286] surface more exception info for call creds errors --- src/ruby/ext/grpc/rb_call_credentials.c | 13 ++---- src/ruby/spec/generic/client_stub_spec.rb | 56 +++++++++++++++++++++-- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/src/ruby/ext/grpc/rb_call_credentials.c b/src/ruby/ext/grpc/rb_call_credentials.c index 9b6675da846..2489f55f582 100644 --- a/src/ruby/ext/grpc/rb_call_credentials.c +++ b/src/ruby/ext/grpc/rb_call_credentials.c @@ -86,19 +86,16 @@ static VALUE grpc_rb_call_credentials_callback_rescue(VALUE args, rb_funcall(exception_object, rb_intern("backtrace"), 0), rb_intern("join"), 1, rb_str_new2("\n\tfrom ")); - VALUE rb_exception_info = rb_funcall(exception_object, rb_intern("to_s"), 0); - const char *exception_classname = rb_obj_classname(exception_object); + VALUE rb_exception_info = rb_funcall(exception_object, rb_intern("inspect"), 0); (void)args; - gpr_log(GPR_INFO, "Call credentials callback failed: %s: %s\n%s", - exception_classname, StringValueCStr(rb_exception_info), + gpr_log(GPR_INFO, "Call credentials callback failed: %s\n%s", + StringValueCStr(rb_exception_info), StringValueCStr(backtrace)); rb_hash_aset(result, rb_str_new2("metadata"), Qnil); - /* Currently only gives the exception class name. It should be possible get - more details */ rb_hash_aset(result, rb_str_new2("status"), - INT2NUM(GRPC_STATUS_PERMISSION_DENIED)); + INT2NUM(GRPC_STATUS_UNAVAILABLE)); rb_hash_aset(result, rb_str_new2("details"), - rb_str_new2(exception_classname)); + rb_exception_info); return result; } diff --git a/src/ruby/spec/generic/client_stub_spec.rb b/src/ruby/spec/generic/client_stub_spec.rb index 6034b5419c9..60a83488933 100644 --- a/src/ruby/spec/generic/client_stub_spec.rb +++ b/src/ruby/spec/generic/client_stub_spec.rb @@ -168,23 +168,62 @@ describe 'ClientStub' do expect(&blk).to raise_error(GRPC::BadStatus) th.join end + + it 'should receive UNAUTHENTICATED if call credentials plugin fails' do + server_port = create_secure_test_server + th = run_request_response(@sent_msg, @resp, @pass) + + certs = load_test_certs + secure_channel_creds = GRPC::Core::ChannelCredentials.new( + certs[0], nil, nil) + secure_stub_opts = { + channel_args: { + GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.fr' + } + } + stub = GRPC::ClientStub.new("localhost:#{server_port}", + secure_channel_creds, **secure_stub_opts) + + error_message = 'Failing call credentials callback' + failing_auth = proc do + fail error_message + end + creds = GRPC::Core::CallCredentials.new(failing_auth) + + error_occured = false + begin + get_response(stub, credentials: creds) + rescue GRPC::BadStatus => e + error_occured = true + expect(e.code).to eq(GRPC::Core::StatusCodes::UNAUTHENTICATED) + # Expecting the error message from the exception to also be included + expect(e.details.include?(error_message)).to be true + end + expect(error_occured).to eq(true) + + # Kill the server thread so tests can complete + th.kill + end end describe 'without a call operation' do - def get_response(stub) + def get_response(stub, credentials: nil) + puts credentials.inspect stub.request_response(@method, @sent_msg, noop, noop, - metadata: { k1: 'v1', k2: 'v2' }) + metadata: { k1: 'v1', k2: 'v2' }, + credentials: credentials) end it_behaves_like 'request response' end describe 'via a call operation' do - def get_response(stub) + def get_response(stub, credentials: nil) op = stub.request_response(@method, @sent_msg, noop, noop, return_op: true, metadata: { k1: 'v1', k2: 'v2' }, - deadline: from_relative_time(2)) + deadline: from_relative_time(2), + credentials: credentials) expect(op).to be_a(GRPC::ActiveCall::Operation) op.execute end @@ -441,6 +480,15 @@ describe 'ClientStub' do end end + def create_secure_test_server + certs = load_test_certs + secure_credentials = GRPC::Core::ServerCredentials.new( + nil, [{ private_key: certs[1], cert_chain: certs[2] }], false) + + @server = GRPC::Core::Server.new(nil) + @server.add_http2_port('0.0.0.0:0', secure_credentials) + end + def create_test_server @server = GRPC::Core::Server.new(nil) @server.add_http2_port('0.0.0.0:0', :this_port_is_insecure) From 9d36eb5ceb098649e4141149f91727ea1be5ccfe Mon Sep 17 00:00:00 2001 From: Alexander Polcyn Date: Wed, 14 Sep 2016 17:10:11 -0700 Subject: [PATCH 023/286] remove comment, for issues with pushing updates --- src/ruby/spec/generic/client_stub_spec.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ruby/spec/generic/client_stub_spec.rb b/src/ruby/spec/generic/client_stub_spec.rb index 60a83488933..9c4e9cbd078 100644 --- a/src/ruby/spec/generic/client_stub_spec.rb +++ b/src/ruby/spec/generic/client_stub_spec.rb @@ -196,7 +196,6 @@ describe 'ClientStub' do rescue GRPC::BadStatus => e error_occured = true expect(e.code).to eq(GRPC::Core::StatusCodes::UNAUTHENTICATED) - # Expecting the error message from the exception to also be included expect(e.details.include?(error_message)).to be true end expect(error_occured).to eq(true) From ee96ce3a71c6b9e97aa99879a8d56611266964ed Mon Sep 17 00:00:00 2001 From: Alexander Polcyn Date: Wed, 14 Sep 2016 17:33:53 -0700 Subject: [PATCH 024/286] change status in failed credential handler to unauth as intended --- src/ruby/ext/grpc/rb_call_credentials.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ruby/ext/grpc/rb_call_credentials.c b/src/ruby/ext/grpc/rb_call_credentials.c index 2489f55f582..280f21c9731 100644 --- a/src/ruby/ext/grpc/rb_call_credentials.c +++ b/src/ruby/ext/grpc/rb_call_credentials.c @@ -93,7 +93,7 @@ static VALUE grpc_rb_call_credentials_callback_rescue(VALUE args, StringValueCStr(backtrace)); rb_hash_aset(result, rb_str_new2("metadata"), Qnil); rb_hash_aset(result, rb_str_new2("status"), - INT2NUM(GRPC_STATUS_UNAVAILABLE)); + INT2NUM(GRPC_STATUS_UNAUTHENTICATED)); rb_hash_aset(result, rb_str_new2("details"), rb_exception_info); return result; From 9030c81f20c3721e7b0a92564f6e4d772a78ffcb Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 16 Sep 2016 13:25:08 -0700 Subject: [PATCH 025/286] Add a libuv endpoint to the C core, for use in the Node library --- BUILD | 68 +++- CMakeLists.txt | 36 +- Makefile | 48 ++- binding.gyp | 16 +- build.yaml | 19 +- config.m4 | 12 +- gRPC-Core.podspec | 22 +- grpc.gemspec | 17 +- package.xml | 17 +- .../ext/client_config/client_config_plugin.c | 5 + src/core/ext/client_config/connector.h | 5 + src/core/ext/lb_policy/grpclb/grpclb.c | 5 + .../ext/lb_policy/pick_first/pick_first.c | 5 + .../ext/lb_policy/round_robin/round_robin.c | 5 + .../ext/resolver/dns/native/dns_resolver.c | 5 + .../ext/resolver/sockaddr/sockaddr_resolver.c | 5 + src/core/lib/http/httpcli.h | 5 + src/core/lib/iomgr/iomgr.h | 2 + src/core/lib/iomgr/iomgr_uv.c | 51 +++ src/core/lib/iomgr/pollset_set_uv.c | 62 +++ src/core/lib/iomgr/pollset_set_windows.c | 2 +- src/core/lib/iomgr/pollset_uv.c | 84 ++++ src/core/lib/iomgr/pollset_uv.h | 35 ++ src/core/lib/iomgr/port.h | 13 +- src/core/lib/iomgr/resolve_address_uv.c | 234 ++++++++++++ src/core/lib/iomgr/sockaddr.h | 4 + src/core/lib/iomgr/socket_utils.h | 6 +- src/core/lib/iomgr/socket_utils_uv.c | 50 +++ src/core/lib/iomgr/tcp_client_uv.c | 142 +++++++ src/core/lib/iomgr/tcp_server_uv.c | 358 ++++++++++++++++++ src/core/lib/iomgr/tcp_uv.c | 336 ++++++++++++++++ src/core/lib/iomgr/tcp_uv.h | 57 +++ src/core/lib/iomgr/timer.h | 17 +- .../lib/iomgr/{timer.c => timer_generic.c} | 6 + src/core/lib/iomgr/timer_generic.h | 49 +++ src/core/lib/iomgr/timer_heap.c | 6 + src/core/lib/iomgr/timer_uv.c | 103 +++++ src/core/lib/iomgr/timer_uv.h | 47 +++ src/core/lib/iomgr/workqueue_uv.c | 62 +++ src/core/lib/iomgr/workqueue_uv.h | 37 ++ .../lib/security/context/security_context.c | 5 + .../lib/security/context/security_context.h | 5 + .../lib/security/credentials/credentials.h | 5 + .../credentials/oauth2/oauth2_credentials.c | 5 + .../security/transport/server_auth_filter.c | 5 + src/core/lib/surface/call.c | 6 + src/core/lib/surface/init_secure.c | 5 + src/core/lib/tsi/ssl_transport_security.c | 5 + src/node/ext/call.cc | 73 +++- src/node/ext/call.h | 68 ++-- src/node/ext/channel.cc | 8 +- src/node/ext/completion_queue.cc | 114 ++++++ src/node/ext/completion_queue.h | 46 +++ src/node/ext/completion_queue_async_worker.cc | 2 + src/node/ext/node_grpc.cc | 19 +- src/node/ext/server.cc | 91 ++++- src/node/ext/server.h | 1 - src/node/ext/server_credentials.cc | 8 +- src/node/index.js | 4 + src/node/src/client.js | 1 + src/node/src/grpc_extension.js | 2 +- src/node/test/async_test.js | 1 + src/python/grpcio/grpc_core_dependencies.py | 12 +- templates/binding.gyp.template | 3 + tools/doxygen/Doxyfile.core.internal | 17 +- .../run_tests/performance/scenario_config.py | 15 +- tools/run_tests/sources_and_headers.json | 22 +- vsprojects/vcxproj/grpc/grpc.vcxproj | 27 +- vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 47 ++- .../grpc_test_util/grpc_test_util.vcxproj | 27 +- .../grpc_test_util.vcxproj.filters | 47 ++- .../grpc_unsecure/grpc_unsecure.vcxproj | 27 +- .../grpc_unsecure.vcxproj.filters | 47 ++- 73 files changed, 2719 insertions(+), 109 deletions(-) create mode 100644 src/core/lib/iomgr/iomgr_uv.c create mode 100644 src/core/lib/iomgr/pollset_set_uv.c create mode 100644 src/core/lib/iomgr/pollset_uv.c create mode 100644 src/core/lib/iomgr/pollset_uv.h create mode 100644 src/core/lib/iomgr/resolve_address_uv.c create mode 100644 src/core/lib/iomgr/socket_utils_uv.c create mode 100644 src/core/lib/iomgr/tcp_client_uv.c create mode 100644 src/core/lib/iomgr/tcp_server_uv.c create mode 100644 src/core/lib/iomgr/tcp_uv.c create mode 100644 src/core/lib/iomgr/tcp_uv.h rename src/core/lib/iomgr/{timer.c => timer_generic.c} (99%) create mode 100644 src/core/lib/iomgr/timer_generic.h create mode 100644 src/core/lib/iomgr/timer_uv.c create mode 100644 src/core/lib/iomgr/timer_uv.h create mode 100644 src/core/lib/iomgr/workqueue_uv.c create mode 100644 src/core/lib/iomgr/workqueue_uv.h create mode 100644 src/node/ext/completion_queue.cc create mode 100644 src/node/ext/completion_queue.h diff --git a/BUILD b/BUILD index cf811638328..57f0e0d7bf2 100644 --- a/BUILD +++ b/BUILD @@ -194,6 +194,7 @@ cc_library( "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", + "src/core/lib/iomgr/pollset_uv.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", @@ -207,16 +208,20 @@ cc_library( "src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", + "src/core/lib/iomgr/tcp_uv.h", "src/core/lib/iomgr/tcp_windows.h", "src/core/lib/iomgr/time_averaged_stats.h", "src/core/lib/iomgr/timer.h", + "src/core/lib/iomgr/timer_generic.h", "src/core/lib/iomgr/timer_heap.h", + "src/core/lib/iomgr/timer_uv.h", "src/core/lib/iomgr/udp_server.h", "src/core/lib/iomgr/unix_sockets_posix.h", "src/core/lib/iomgr/wakeup_fd_pipe.h", "src/core/lib/iomgr/wakeup_fd_posix.h", "src/core/lib/iomgr/workqueue.h", "src/core/lib/iomgr/workqueue_posix.h", + "src/core/lib/iomgr/workqueue_uv.h", "src/core/lib/iomgr/workqueue_windows.h", "src/core/lib/json/json.h", "src/core/lib/json/json_common.h", @@ -345,29 +350,38 @@ cc_library( "src/core/lib/iomgr/iocp_windows.c", "src/core/lib/iomgr/iomgr.c", "src/core/lib/iomgr/iomgr_posix.c", + "src/core/lib/iomgr/iomgr_uv.c", "src/core/lib/iomgr/iomgr_windows.c", "src/core/lib/iomgr/load_file.c", "src/core/lib/iomgr/network_status_tracker.c", "src/core/lib/iomgr/polling_entity.c", + "src/core/lib/iomgr/pollset_set_uv.c", "src/core/lib/iomgr/pollset_set_windows.c", + "src/core/lib/iomgr/pollset_uv.c", "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/resolve_address_posix.c", + "src/core/lib/iomgr/resolve_address_uv.c", "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_uv.c", "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", + "src/core/lib/iomgr/tcp_client_uv.c", "src/core/lib/iomgr/tcp_client_windows.c", "src/core/lib/iomgr/tcp_posix.c", "src/core/lib/iomgr/tcp_server_posix.c", + "src/core/lib/iomgr/tcp_server_uv.c", "src/core/lib/iomgr/tcp_server_windows.c", + "src/core/lib/iomgr/tcp_uv.c", "src/core/lib/iomgr/tcp_windows.c", "src/core/lib/iomgr/time_averaged_stats.c", - "src/core/lib/iomgr/timer.c", + "src/core/lib/iomgr/timer_generic.c", "src/core/lib/iomgr/timer_heap.c", + "src/core/lib/iomgr/timer_uv.c", "src/core/lib/iomgr/udp_server.c", "src/core/lib/iomgr/unix_sockets_posix.c", "src/core/lib/iomgr/unix_sockets_posix_noop.c", @@ -376,6 +390,7 @@ cc_library( "src/core/lib/iomgr/wakeup_fd_pipe.c", "src/core/lib/iomgr/wakeup_fd_posix.c", "src/core/lib/iomgr/workqueue_posix.c", + "src/core/lib/iomgr/workqueue_uv.c", "src/core/lib/iomgr/workqueue_windows.c", "src/core/lib/json/json.c", "src/core/lib/json/json_reader.c", @@ -591,6 +606,7 @@ cc_library( "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", + "src/core/lib/iomgr/pollset_uv.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", @@ -604,16 +620,20 @@ cc_library( "src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", + "src/core/lib/iomgr/tcp_uv.h", "src/core/lib/iomgr/tcp_windows.h", "src/core/lib/iomgr/time_averaged_stats.h", "src/core/lib/iomgr/timer.h", + "src/core/lib/iomgr/timer_generic.h", "src/core/lib/iomgr/timer_heap.h", + "src/core/lib/iomgr/timer_uv.h", "src/core/lib/iomgr/udp_server.h", "src/core/lib/iomgr/unix_sockets_posix.h", "src/core/lib/iomgr/wakeup_fd_pipe.h", "src/core/lib/iomgr/wakeup_fd_posix.h", "src/core/lib/iomgr/workqueue.h", "src/core/lib/iomgr/workqueue_posix.h", + "src/core/lib/iomgr/workqueue_uv.h", "src/core/lib/iomgr/workqueue_windows.h", "src/core/lib/json/json.h", "src/core/lib/json/json_common.h", @@ -729,29 +749,38 @@ cc_library( "src/core/lib/iomgr/iocp_windows.c", "src/core/lib/iomgr/iomgr.c", "src/core/lib/iomgr/iomgr_posix.c", + "src/core/lib/iomgr/iomgr_uv.c", "src/core/lib/iomgr/iomgr_windows.c", "src/core/lib/iomgr/load_file.c", "src/core/lib/iomgr/network_status_tracker.c", "src/core/lib/iomgr/polling_entity.c", + "src/core/lib/iomgr/pollset_set_uv.c", "src/core/lib/iomgr/pollset_set_windows.c", + "src/core/lib/iomgr/pollset_uv.c", "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/resolve_address_posix.c", + "src/core/lib/iomgr/resolve_address_uv.c", "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_uv.c", "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", + "src/core/lib/iomgr/tcp_client_uv.c", "src/core/lib/iomgr/tcp_client_windows.c", "src/core/lib/iomgr/tcp_posix.c", "src/core/lib/iomgr/tcp_server_posix.c", + "src/core/lib/iomgr/tcp_server_uv.c", "src/core/lib/iomgr/tcp_server_windows.c", + "src/core/lib/iomgr/tcp_uv.c", "src/core/lib/iomgr/tcp_windows.c", "src/core/lib/iomgr/time_averaged_stats.c", - "src/core/lib/iomgr/timer.c", + "src/core/lib/iomgr/timer_generic.c", "src/core/lib/iomgr/timer_heap.c", + "src/core/lib/iomgr/timer_uv.c", "src/core/lib/iomgr/udp_server.c", "src/core/lib/iomgr/unix_sockets_posix.c", "src/core/lib/iomgr/unix_sockets_posix_noop.c", @@ -760,6 +789,7 @@ cc_library( "src/core/lib/iomgr/wakeup_fd_pipe.c", "src/core/lib/iomgr/wakeup_fd_posix.c", "src/core/lib/iomgr/workqueue_posix.c", + "src/core/lib/iomgr/workqueue_uv.c", "src/core/lib/iomgr/workqueue_windows.c", "src/core/lib/json/json.c", "src/core/lib/json/json_reader.c", @@ -947,6 +977,7 @@ cc_library( "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", + "src/core/lib/iomgr/pollset_uv.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", @@ -960,16 +991,20 @@ cc_library( "src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", + "src/core/lib/iomgr/tcp_uv.h", "src/core/lib/iomgr/tcp_windows.h", "src/core/lib/iomgr/time_averaged_stats.h", "src/core/lib/iomgr/timer.h", + "src/core/lib/iomgr/timer_generic.h", "src/core/lib/iomgr/timer_heap.h", + "src/core/lib/iomgr/timer_uv.h", "src/core/lib/iomgr/udp_server.h", "src/core/lib/iomgr/unix_sockets_posix.h", "src/core/lib/iomgr/wakeup_fd_pipe.h", "src/core/lib/iomgr/wakeup_fd_posix.h", "src/core/lib/iomgr/workqueue.h", "src/core/lib/iomgr/workqueue_posix.h", + "src/core/lib/iomgr/workqueue_uv.h", "src/core/lib/iomgr/workqueue_windows.h", "src/core/lib/json/json.h", "src/core/lib/json/json_common.h", @@ -1075,29 +1110,38 @@ cc_library( "src/core/lib/iomgr/iocp_windows.c", "src/core/lib/iomgr/iomgr.c", "src/core/lib/iomgr/iomgr_posix.c", + "src/core/lib/iomgr/iomgr_uv.c", "src/core/lib/iomgr/iomgr_windows.c", "src/core/lib/iomgr/load_file.c", "src/core/lib/iomgr/network_status_tracker.c", "src/core/lib/iomgr/polling_entity.c", + "src/core/lib/iomgr/pollset_set_uv.c", "src/core/lib/iomgr/pollset_set_windows.c", + "src/core/lib/iomgr/pollset_uv.c", "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/resolve_address_posix.c", + "src/core/lib/iomgr/resolve_address_uv.c", "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_uv.c", "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", + "src/core/lib/iomgr/tcp_client_uv.c", "src/core/lib/iomgr/tcp_client_windows.c", "src/core/lib/iomgr/tcp_posix.c", "src/core/lib/iomgr/tcp_server_posix.c", + "src/core/lib/iomgr/tcp_server_uv.c", "src/core/lib/iomgr/tcp_server_windows.c", + "src/core/lib/iomgr/tcp_uv.c", "src/core/lib/iomgr/tcp_windows.c", "src/core/lib/iomgr/time_averaged_stats.c", - "src/core/lib/iomgr/timer.c", + "src/core/lib/iomgr/timer_generic.c", "src/core/lib/iomgr/timer_heap.c", + "src/core/lib/iomgr/timer_uv.c", "src/core/lib/iomgr/udp_server.c", "src/core/lib/iomgr/unix_sockets_posix.c", "src/core/lib/iomgr/unix_sockets_posix_noop.c", @@ -1106,6 +1150,7 @@ cc_library( "src/core/lib/iomgr/wakeup_fd_pipe.c", "src/core/lib/iomgr/wakeup_fd_posix.c", "src/core/lib/iomgr/workqueue_posix.c", + "src/core/lib/iomgr/workqueue_uv.c", "src/core/lib/iomgr/workqueue_windows.c", "src/core/lib/json/json.c", "src/core/lib/json/json_reader.c", @@ -1843,29 +1888,38 @@ objc_library( "src/core/lib/iomgr/iocp_windows.c", "src/core/lib/iomgr/iomgr.c", "src/core/lib/iomgr/iomgr_posix.c", + "src/core/lib/iomgr/iomgr_uv.c", "src/core/lib/iomgr/iomgr_windows.c", "src/core/lib/iomgr/load_file.c", "src/core/lib/iomgr/network_status_tracker.c", "src/core/lib/iomgr/polling_entity.c", + "src/core/lib/iomgr/pollset_set_uv.c", "src/core/lib/iomgr/pollset_set_windows.c", + "src/core/lib/iomgr/pollset_uv.c", "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/resolve_address_posix.c", + "src/core/lib/iomgr/resolve_address_uv.c", "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_uv.c", "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", + "src/core/lib/iomgr/tcp_client_uv.c", "src/core/lib/iomgr/tcp_client_windows.c", "src/core/lib/iomgr/tcp_posix.c", "src/core/lib/iomgr/tcp_server_posix.c", + "src/core/lib/iomgr/tcp_server_uv.c", "src/core/lib/iomgr/tcp_server_windows.c", + "src/core/lib/iomgr/tcp_uv.c", "src/core/lib/iomgr/tcp_windows.c", "src/core/lib/iomgr/time_averaged_stats.c", - "src/core/lib/iomgr/timer.c", + "src/core/lib/iomgr/timer_generic.c", "src/core/lib/iomgr/timer_heap.c", + "src/core/lib/iomgr/timer_uv.c", "src/core/lib/iomgr/udp_server.c", "src/core/lib/iomgr/unix_sockets_posix.c", "src/core/lib/iomgr/unix_sockets_posix_noop.c", @@ -1874,6 +1928,7 @@ objc_library( "src/core/lib/iomgr/wakeup_fd_pipe.c", "src/core/lib/iomgr/wakeup_fd_posix.c", "src/core/lib/iomgr/workqueue_posix.c", + "src/core/lib/iomgr/workqueue_uv.c", "src/core/lib/iomgr/workqueue_windows.c", "src/core/lib/json/json.c", "src/core/lib/json/json_reader.c", @@ -2068,6 +2123,7 @@ objc_library( "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", + "src/core/lib/iomgr/pollset_uv.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", @@ -2081,16 +2137,20 @@ objc_library( "src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", + "src/core/lib/iomgr/tcp_uv.h", "src/core/lib/iomgr/tcp_windows.h", "src/core/lib/iomgr/time_averaged_stats.h", "src/core/lib/iomgr/timer.h", + "src/core/lib/iomgr/timer_generic.h", "src/core/lib/iomgr/timer_heap.h", + "src/core/lib/iomgr/timer_uv.h", "src/core/lib/iomgr/udp_server.h", "src/core/lib/iomgr/unix_sockets_posix.h", "src/core/lib/iomgr/wakeup_fd_pipe.h", "src/core/lib/iomgr/wakeup_fd_posix.h", "src/core/lib/iomgr/workqueue.h", "src/core/lib/iomgr/workqueue_posix.h", + "src/core/lib/iomgr/workqueue_uv.h", "src/core/lib/iomgr/workqueue_windows.h", "src/core/lib/json/json.h", "src/core/lib/json/json_common.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ba714465e0..722051e7494 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -319,29 +319,38 @@ add_library(grpc src/core/lib/iomgr/iocp_windows.c src/core/lib/iomgr/iomgr.c src/core/lib/iomgr/iomgr_posix.c + src/core/lib/iomgr/iomgr_uv.c src/core/lib/iomgr/iomgr_windows.c src/core/lib/iomgr/load_file.c src/core/lib/iomgr/network_status_tracker.c src/core/lib/iomgr/polling_entity.c + src/core/lib/iomgr/pollset_set_uv.c src/core/lib/iomgr/pollset_set_windows.c + src/core/lib/iomgr/pollset_uv.c src/core/lib/iomgr/pollset_windows.c src/core/lib/iomgr/resolve_address_posix.c + src/core/lib/iomgr/resolve_address_uv.c src/core/lib/iomgr/resolve_address_windows.c src/core/lib/iomgr/sockaddr_utils.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c + src/core/lib/iomgr/socket_utils_uv.c src/core/lib/iomgr/socket_utils_windows.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c + src/core/lib/iomgr/tcp_client_uv.c src/core/lib/iomgr/tcp_client_windows.c src/core/lib/iomgr/tcp_posix.c src/core/lib/iomgr/tcp_server_posix.c + src/core/lib/iomgr/tcp_server_uv.c src/core/lib/iomgr/tcp_server_windows.c + src/core/lib/iomgr/tcp_uv.c src/core/lib/iomgr/tcp_windows.c src/core/lib/iomgr/time_averaged_stats.c - src/core/lib/iomgr/timer.c + src/core/lib/iomgr/timer_generic.c src/core/lib/iomgr/timer_heap.c + src/core/lib/iomgr/timer_uv.c src/core/lib/iomgr/udp_server.c src/core/lib/iomgr/unix_sockets_posix.c src/core/lib/iomgr/unix_sockets_posix_noop.c @@ -350,6 +359,7 @@ add_library(grpc src/core/lib/iomgr/wakeup_fd_pipe.c src/core/lib/iomgr/wakeup_fd_posix.c src/core/lib/iomgr/workqueue_posix.c + src/core/lib/iomgr/workqueue_uv.c src/core/lib/iomgr/workqueue_windows.c src/core/lib/json/json.c src/core/lib/json/json_reader.c @@ -577,29 +587,38 @@ add_library(grpc_cronet src/core/lib/iomgr/iocp_windows.c src/core/lib/iomgr/iomgr.c src/core/lib/iomgr/iomgr_posix.c + src/core/lib/iomgr/iomgr_uv.c src/core/lib/iomgr/iomgr_windows.c src/core/lib/iomgr/load_file.c src/core/lib/iomgr/network_status_tracker.c src/core/lib/iomgr/polling_entity.c + src/core/lib/iomgr/pollset_set_uv.c src/core/lib/iomgr/pollset_set_windows.c + src/core/lib/iomgr/pollset_uv.c src/core/lib/iomgr/pollset_windows.c src/core/lib/iomgr/resolve_address_posix.c + src/core/lib/iomgr/resolve_address_uv.c src/core/lib/iomgr/resolve_address_windows.c src/core/lib/iomgr/sockaddr_utils.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c + src/core/lib/iomgr/socket_utils_uv.c src/core/lib/iomgr/socket_utils_windows.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c + src/core/lib/iomgr/tcp_client_uv.c src/core/lib/iomgr/tcp_client_windows.c src/core/lib/iomgr/tcp_posix.c src/core/lib/iomgr/tcp_server_posix.c + src/core/lib/iomgr/tcp_server_uv.c src/core/lib/iomgr/tcp_server_windows.c + src/core/lib/iomgr/tcp_uv.c src/core/lib/iomgr/tcp_windows.c src/core/lib/iomgr/time_averaged_stats.c - src/core/lib/iomgr/timer.c + src/core/lib/iomgr/timer_generic.c src/core/lib/iomgr/timer_heap.c + src/core/lib/iomgr/timer_uv.c src/core/lib/iomgr/udp_server.c src/core/lib/iomgr/unix_sockets_posix.c src/core/lib/iomgr/unix_sockets_posix_noop.c @@ -608,6 +627,7 @@ add_library(grpc_cronet src/core/lib/iomgr/wakeup_fd_pipe.c src/core/lib/iomgr/wakeup_fd_posix.c src/core/lib/iomgr/workqueue_posix.c + src/core/lib/iomgr/workqueue_uv.c src/core/lib/iomgr/workqueue_windows.c src/core/lib/json/json.c src/core/lib/json/json_reader.c @@ -809,29 +829,38 @@ add_library(grpc_unsecure src/core/lib/iomgr/iocp_windows.c src/core/lib/iomgr/iomgr.c src/core/lib/iomgr/iomgr_posix.c + src/core/lib/iomgr/iomgr_uv.c src/core/lib/iomgr/iomgr_windows.c src/core/lib/iomgr/load_file.c src/core/lib/iomgr/network_status_tracker.c src/core/lib/iomgr/polling_entity.c + src/core/lib/iomgr/pollset_set_uv.c src/core/lib/iomgr/pollset_set_windows.c + src/core/lib/iomgr/pollset_uv.c src/core/lib/iomgr/pollset_windows.c src/core/lib/iomgr/resolve_address_posix.c + src/core/lib/iomgr/resolve_address_uv.c src/core/lib/iomgr/resolve_address_windows.c src/core/lib/iomgr/sockaddr_utils.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c + src/core/lib/iomgr/socket_utils_uv.c src/core/lib/iomgr/socket_utils_windows.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c + src/core/lib/iomgr/tcp_client_uv.c src/core/lib/iomgr/tcp_client_windows.c src/core/lib/iomgr/tcp_posix.c src/core/lib/iomgr/tcp_server_posix.c + src/core/lib/iomgr/tcp_server_uv.c src/core/lib/iomgr/tcp_server_windows.c + src/core/lib/iomgr/tcp_uv.c src/core/lib/iomgr/tcp_windows.c src/core/lib/iomgr/time_averaged_stats.c - src/core/lib/iomgr/timer.c + src/core/lib/iomgr/timer_generic.c src/core/lib/iomgr/timer_heap.c + src/core/lib/iomgr/timer_uv.c src/core/lib/iomgr/udp_server.c src/core/lib/iomgr/unix_sockets_posix.c src/core/lib/iomgr/unix_sockets_posix_noop.c @@ -840,6 +869,7 @@ add_library(grpc_unsecure src/core/lib/iomgr/wakeup_fd_pipe.c src/core/lib/iomgr/wakeup_fd_posix.c src/core/lib/iomgr/workqueue_posix.c + src/core/lib/iomgr/workqueue_uv.c src/core/lib/iomgr/workqueue_windows.c src/core/lib/json/json.c src/core/lib/json/json_reader.c diff --git a/Makefile b/Makefile index c87c35962ac..4abce94e513 100644 --- a/Makefile +++ b/Makefile @@ -2535,29 +2535,38 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/iocp_windows.c \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ + src/core/lib/iomgr/iomgr_uv.c \ src/core/lib/iomgr/iomgr_windows.c \ src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/network_status_tracker.c \ src/core/lib/iomgr/polling_entity.c \ + src/core/lib/iomgr/pollset_set_uv.c \ src/core/lib/iomgr/pollset_set_windows.c \ + src/core/lib/iomgr/pollset_uv.c \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ + src/core/lib/iomgr/resolve_address_uv.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_uv.c \ src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ + src/core/lib/iomgr/tcp_client_uv.c \ src/core/lib/iomgr/tcp_client_windows.c \ src/core/lib/iomgr/tcp_posix.c \ src/core/lib/iomgr/tcp_server_posix.c \ + src/core/lib/iomgr/tcp_server_uv.c \ src/core/lib/iomgr/tcp_server_windows.c \ + src/core/lib/iomgr/tcp_uv.c \ src/core/lib/iomgr/tcp_windows.c \ src/core/lib/iomgr/time_averaged_stats.c \ - src/core/lib/iomgr/timer.c \ + src/core/lib/iomgr/timer_generic.c \ src/core/lib/iomgr/timer_heap.c \ + src/core/lib/iomgr/timer_uv.c \ src/core/lib/iomgr/udp_server.c \ src/core/lib/iomgr/unix_sockets_posix.c \ src/core/lib/iomgr/unix_sockets_posix_noop.c \ @@ -2566,6 +2575,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/wakeup_fd_pipe.c \ src/core/lib/iomgr/wakeup_fd_posix.c \ src/core/lib/iomgr/workqueue_posix.c \ + src/core/lib/iomgr/workqueue_uv.c \ src/core/lib/iomgr/workqueue_windows.c \ src/core/lib/json/json.c \ src/core/lib/json/json_reader.c \ @@ -2811,29 +2821,38 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/iocp_windows.c \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ + src/core/lib/iomgr/iomgr_uv.c \ src/core/lib/iomgr/iomgr_windows.c \ src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/network_status_tracker.c \ src/core/lib/iomgr/polling_entity.c \ + src/core/lib/iomgr/pollset_set_uv.c \ src/core/lib/iomgr/pollset_set_windows.c \ + src/core/lib/iomgr/pollset_uv.c \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ + src/core/lib/iomgr/resolve_address_uv.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_uv.c \ src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ + src/core/lib/iomgr/tcp_client_uv.c \ src/core/lib/iomgr/tcp_client_windows.c \ src/core/lib/iomgr/tcp_posix.c \ src/core/lib/iomgr/tcp_server_posix.c \ + src/core/lib/iomgr/tcp_server_uv.c \ src/core/lib/iomgr/tcp_server_windows.c \ + src/core/lib/iomgr/tcp_uv.c \ src/core/lib/iomgr/tcp_windows.c \ src/core/lib/iomgr/time_averaged_stats.c \ - src/core/lib/iomgr/timer.c \ + src/core/lib/iomgr/timer_generic.c \ src/core/lib/iomgr/timer_heap.c \ + src/core/lib/iomgr/timer_uv.c \ src/core/lib/iomgr/udp_server.c \ src/core/lib/iomgr/unix_sockets_posix.c \ src/core/lib/iomgr/unix_sockets_posix_noop.c \ @@ -2842,6 +2861,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/wakeup_fd_pipe.c \ src/core/lib/iomgr/wakeup_fd_posix.c \ src/core/lib/iomgr/workqueue_posix.c \ + src/core/lib/iomgr/workqueue_uv.c \ src/core/lib/iomgr/workqueue_windows.c \ src/core/lib/json/json.c \ src/core/lib/json/json_reader.c \ @@ -3077,29 +3097,38 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/iocp_windows.c \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ + src/core/lib/iomgr/iomgr_uv.c \ src/core/lib/iomgr/iomgr_windows.c \ src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/network_status_tracker.c \ src/core/lib/iomgr/polling_entity.c \ + src/core/lib/iomgr/pollset_set_uv.c \ src/core/lib/iomgr/pollset_set_windows.c \ + src/core/lib/iomgr/pollset_uv.c \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ + src/core/lib/iomgr/resolve_address_uv.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_uv.c \ src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ + src/core/lib/iomgr/tcp_client_uv.c \ src/core/lib/iomgr/tcp_client_windows.c \ src/core/lib/iomgr/tcp_posix.c \ src/core/lib/iomgr/tcp_server_posix.c \ + src/core/lib/iomgr/tcp_server_uv.c \ src/core/lib/iomgr/tcp_server_windows.c \ + src/core/lib/iomgr/tcp_uv.c \ src/core/lib/iomgr/tcp_windows.c \ src/core/lib/iomgr/time_averaged_stats.c \ - src/core/lib/iomgr/timer.c \ + src/core/lib/iomgr/timer_generic.c \ src/core/lib/iomgr/timer_heap.c \ + src/core/lib/iomgr/timer_uv.c \ src/core/lib/iomgr/udp_server.c \ src/core/lib/iomgr/unix_sockets_posix.c \ src/core/lib/iomgr/unix_sockets_posix_noop.c \ @@ -3108,6 +3137,7 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/wakeup_fd_pipe.c \ src/core/lib/iomgr/wakeup_fd_posix.c \ src/core/lib/iomgr/workqueue_posix.c \ + src/core/lib/iomgr/workqueue_uv.c \ src/core/lib/iomgr/workqueue_windows.c \ src/core/lib/json/json.c \ src/core/lib/json/json_reader.c \ @@ -3270,29 +3300,38 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/iocp_windows.c \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ + src/core/lib/iomgr/iomgr_uv.c \ src/core/lib/iomgr/iomgr_windows.c \ src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/network_status_tracker.c \ src/core/lib/iomgr/polling_entity.c \ + src/core/lib/iomgr/pollset_set_uv.c \ src/core/lib/iomgr/pollset_set_windows.c \ + src/core/lib/iomgr/pollset_uv.c \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ + src/core/lib/iomgr/resolve_address_uv.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_uv.c \ src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ + src/core/lib/iomgr/tcp_client_uv.c \ src/core/lib/iomgr/tcp_client_windows.c \ src/core/lib/iomgr/tcp_posix.c \ src/core/lib/iomgr/tcp_server_posix.c \ + src/core/lib/iomgr/tcp_server_uv.c \ src/core/lib/iomgr/tcp_server_windows.c \ + src/core/lib/iomgr/tcp_uv.c \ src/core/lib/iomgr/tcp_windows.c \ src/core/lib/iomgr/time_averaged_stats.c \ - src/core/lib/iomgr/timer.c \ + src/core/lib/iomgr/timer_generic.c \ src/core/lib/iomgr/timer_heap.c \ + src/core/lib/iomgr/timer_uv.c \ src/core/lib/iomgr/udp_server.c \ src/core/lib/iomgr/unix_sockets_posix.c \ src/core/lib/iomgr/unix_sockets_posix_noop.c \ @@ -3301,6 +3340,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/wakeup_fd_pipe.c \ src/core/lib/iomgr/wakeup_fd_posix.c \ src/core/lib/iomgr/workqueue_posix.c \ + src/core/lib/iomgr/workqueue_uv.c \ src/core/lib/iomgr/workqueue_windows.c \ src/core/lib/json/json.c \ src/core/lib/json/json_reader.c \ diff --git a/binding.gyp b/binding.gyp index b03da7cb583..ea585464c35 100644 --- a/binding.gyp +++ b/binding.gyp @@ -42,6 +42,9 @@ '.', 'include' ], + 'defines': [ + 'GRPC_UV' + ], 'conditions': [ ['OS == "win"', { "include_dirs": [ @@ -591,29 +594,38 @@ 'src/core/lib/iomgr/iocp_windows.c', 'src/core/lib/iomgr/iomgr.c', 'src/core/lib/iomgr/iomgr_posix.c', + 'src/core/lib/iomgr/iomgr_uv.c', 'src/core/lib/iomgr/iomgr_windows.c', 'src/core/lib/iomgr/load_file.c', 'src/core/lib/iomgr/network_status_tracker.c', 'src/core/lib/iomgr/polling_entity.c', + 'src/core/lib/iomgr/pollset_set_uv.c', 'src/core/lib/iomgr/pollset_set_windows.c', + 'src/core/lib/iomgr/pollset_uv.c', 'src/core/lib/iomgr/pollset_windows.c', 'src/core/lib/iomgr/resolve_address_posix.c', + 'src/core/lib/iomgr/resolve_address_uv.c', 'src/core/lib/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/sockaddr_utils.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', + 'src/core/lib/iomgr/socket_utils_uv.c', 'src/core/lib/iomgr/socket_utils_windows.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', + 'src/core/lib/iomgr/tcp_client_uv.c', 'src/core/lib/iomgr/tcp_client_windows.c', 'src/core/lib/iomgr/tcp_posix.c', 'src/core/lib/iomgr/tcp_server_posix.c', + 'src/core/lib/iomgr/tcp_server_uv.c', 'src/core/lib/iomgr/tcp_server_windows.c', + 'src/core/lib/iomgr/tcp_uv.c', 'src/core/lib/iomgr/tcp_windows.c', 'src/core/lib/iomgr/time_averaged_stats.c', - 'src/core/lib/iomgr/timer.c', + 'src/core/lib/iomgr/timer_generic.c', 'src/core/lib/iomgr/timer_heap.c', + 'src/core/lib/iomgr/timer_uv.c', 'src/core/lib/iomgr/udp_server.c', 'src/core/lib/iomgr/unix_sockets_posix.c', 'src/core/lib/iomgr/unix_sockets_posix_noop.c', @@ -622,6 +634,7 @@ 'src/core/lib/iomgr/wakeup_fd_pipe.c', 'src/core/lib/iomgr/wakeup_fd_posix.c', 'src/core/lib/iomgr/workqueue_posix.c', + 'src/core/lib/iomgr/workqueue_uv.c', 'src/core/lib/iomgr/workqueue_windows.c', 'src/core/lib/json/json.c', 'src/core/lib/json/json_reader.c', @@ -806,6 +819,7 @@ "src/node/ext/call_credentials.cc", "src/node/ext/channel.cc", "src/node/ext/channel_credentials.cc", + "src/node/ext/completion_queue.cc", "src/node/ext/completion_queue_async_worker.cc", "src/node/ext/node_grpc.cc", "src/node/ext/server.cc", diff --git a/build.yaml b/build.yaml index e1e3a8c0bb6..562dff15659 100644 --- a/build.yaml +++ b/build.yaml @@ -189,6 +189,7 @@ filegroups: - src/core/lib/iomgr/pollset.h - src/core/lib/iomgr/pollset_set.h - src/core/lib/iomgr/pollset_set_windows.h + - src/core/lib/iomgr/pollset_uv.h - src/core/lib/iomgr/pollset_windows.h - src/core/lib/iomgr/port.h - src/core/lib/iomgr/resolve_address.h @@ -202,16 +203,20 @@ filegroups: - src/core/lib/iomgr/tcp_client.h - src/core/lib/iomgr/tcp_posix.h - src/core/lib/iomgr/tcp_server.h + - src/core/lib/iomgr/tcp_uv.h - src/core/lib/iomgr/tcp_windows.h - src/core/lib/iomgr/time_averaged_stats.h - src/core/lib/iomgr/timer.h + - src/core/lib/iomgr/timer_generic.h - src/core/lib/iomgr/timer_heap.h + - src/core/lib/iomgr/timer_uv.h - src/core/lib/iomgr/udp_server.h - src/core/lib/iomgr/unix_sockets_posix.h - src/core/lib/iomgr/wakeup_fd_pipe.h - src/core/lib/iomgr/wakeup_fd_posix.h - src/core/lib/iomgr/workqueue.h - src/core/lib/iomgr/workqueue_posix.h + - src/core/lib/iomgr/workqueue_uv.h - src/core/lib/iomgr/workqueue_windows.h - src/core/lib/json/json.h - src/core/lib/json/json_common.h @@ -265,29 +270,38 @@ filegroups: - src/core/lib/iomgr/iocp_windows.c - src/core/lib/iomgr/iomgr.c - src/core/lib/iomgr/iomgr_posix.c + - src/core/lib/iomgr/iomgr_uv.c - src/core/lib/iomgr/iomgr_windows.c - src/core/lib/iomgr/load_file.c - src/core/lib/iomgr/network_status_tracker.c - src/core/lib/iomgr/polling_entity.c + - src/core/lib/iomgr/pollset_set_uv.c - src/core/lib/iomgr/pollset_set_windows.c + - src/core/lib/iomgr/pollset_uv.c - src/core/lib/iomgr/pollset_windows.c - src/core/lib/iomgr/resolve_address_posix.c + - src/core/lib/iomgr/resolve_address_uv.c - src/core/lib/iomgr/resolve_address_windows.c - src/core/lib/iomgr/sockaddr_utils.c - src/core/lib/iomgr/socket_utils_common_posix.c - src/core/lib/iomgr/socket_utils_linux.c - src/core/lib/iomgr/socket_utils_posix.c + - src/core/lib/iomgr/socket_utils_uv.c - src/core/lib/iomgr/socket_utils_windows.c - src/core/lib/iomgr/socket_windows.c - src/core/lib/iomgr/tcp_client_posix.c + - src/core/lib/iomgr/tcp_client_uv.c - src/core/lib/iomgr/tcp_client_windows.c - src/core/lib/iomgr/tcp_posix.c - src/core/lib/iomgr/tcp_server_posix.c + - src/core/lib/iomgr/tcp_server_uv.c - src/core/lib/iomgr/tcp_server_windows.c + - src/core/lib/iomgr/tcp_uv.c - src/core/lib/iomgr/tcp_windows.c - src/core/lib/iomgr/time_averaged_stats.c - - src/core/lib/iomgr/timer.c + - src/core/lib/iomgr/timer_generic.c - src/core/lib/iomgr/timer_heap.c + - src/core/lib/iomgr/timer_uv.c - src/core/lib/iomgr/udp_server.c - src/core/lib/iomgr/unix_sockets_posix.c - src/core/lib/iomgr/unix_sockets_posix_noop.c @@ -296,6 +310,7 @@ filegroups: - src/core/lib/iomgr/wakeup_fd_pipe.c - src/core/lib/iomgr/wakeup_fd_posix.c - src/core/lib/iomgr/workqueue_posix.c + - src/core/lib/iomgr/workqueue_uv.c - src/core/lib/iomgr/workqueue_windows.c - src/core/lib/json/json.c - src/core/lib/json/json_reader.c @@ -3421,6 +3436,7 @@ node_modules: - src/node/ext/call_credentials.h - src/node/ext/channel.h - src/node/ext/channel_credentials.h + - src/node/ext/completion_queue.h - src/node/ext/completion_queue_async_worker.h - src/node/ext/server.h - src/node/ext/server_credentials.h @@ -3440,6 +3456,7 @@ node_modules: - src/node/ext/call_credentials.cc - src/node/ext/channel.cc - src/node/ext/channel_credentials.cc + - src/node/ext/completion_queue.cc - src/node/ext/completion_queue_async_worker.cc - src/node/ext/node_grpc.cc - src/node/ext/server.cc diff --git a/config.m4 b/config.m4 index 7a06923e593..4df7b1a8dc0 100644 --- a/config.m4 +++ b/config.m4 @@ -110,29 +110,38 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/iocp_windows.c \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ + src/core/lib/iomgr/iomgr_uv.c \ src/core/lib/iomgr/iomgr_windows.c \ src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/network_status_tracker.c \ src/core/lib/iomgr/polling_entity.c \ + src/core/lib/iomgr/pollset_set_uv.c \ src/core/lib/iomgr/pollset_set_windows.c \ + src/core/lib/iomgr/pollset_uv.c \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ + src/core/lib/iomgr/resolve_address_uv.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_uv.c \ src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ + src/core/lib/iomgr/tcp_client_uv.c \ src/core/lib/iomgr/tcp_client_windows.c \ src/core/lib/iomgr/tcp_posix.c \ src/core/lib/iomgr/tcp_server_posix.c \ + src/core/lib/iomgr/tcp_server_uv.c \ src/core/lib/iomgr/tcp_server_windows.c \ + src/core/lib/iomgr/tcp_uv.c \ src/core/lib/iomgr/tcp_windows.c \ src/core/lib/iomgr/time_averaged_stats.c \ - src/core/lib/iomgr/timer.c \ + src/core/lib/iomgr/timer_generic.c \ src/core/lib/iomgr/timer_heap.c \ + src/core/lib/iomgr/timer_uv.c \ src/core/lib/iomgr/udp_server.c \ src/core/lib/iomgr/unix_sockets_posix.c \ src/core/lib/iomgr/unix_sockets_posix_noop.c \ @@ -141,6 +150,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/wakeup_fd_pipe.c \ src/core/lib/iomgr/wakeup_fd_posix.c \ src/core/lib/iomgr/workqueue_posix.c \ + src/core/lib/iomgr/workqueue_uv.c \ src/core/lib/iomgr/workqueue_windows.c \ src/core/lib/json/json.c \ src/core/lib/json/json_reader.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index b7a5e72a2ac..f11fc5c6c50 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -287,6 +287,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/pollset.h', 'src/core/lib/iomgr/pollset_set.h', 'src/core/lib/iomgr/pollset_set_windows.h', + 'src/core/lib/iomgr/pollset_uv.h', 'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/resolve_address.h', @@ -300,16 +301,20 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/tcp_client.h', 'src/core/lib/iomgr/tcp_posix.h', 'src/core/lib/iomgr/tcp_server.h', + 'src/core/lib/iomgr/tcp_uv.h', 'src/core/lib/iomgr/tcp_windows.h', 'src/core/lib/iomgr/time_averaged_stats.h', 'src/core/lib/iomgr/timer.h', + 'src/core/lib/iomgr/timer_generic.h', 'src/core/lib/iomgr/timer_heap.h', + 'src/core/lib/iomgr/timer_uv.h', 'src/core/lib/iomgr/udp_server.h', 'src/core/lib/iomgr/unix_sockets_posix.h', 'src/core/lib/iomgr/wakeup_fd_pipe.h', 'src/core/lib/iomgr/wakeup_fd_posix.h', 'src/core/lib/iomgr/workqueue.h', 'src/core/lib/iomgr/workqueue_posix.h', + 'src/core/lib/iomgr/workqueue_uv.h', 'src/core/lib/iomgr/workqueue_windows.h', 'src/core/lib/json/json.h', 'src/core/lib/json/json_common.h', @@ -442,29 +447,38 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/iocp_windows.c', 'src/core/lib/iomgr/iomgr.c', 'src/core/lib/iomgr/iomgr_posix.c', + 'src/core/lib/iomgr/iomgr_uv.c', 'src/core/lib/iomgr/iomgr_windows.c', 'src/core/lib/iomgr/load_file.c', 'src/core/lib/iomgr/network_status_tracker.c', 'src/core/lib/iomgr/polling_entity.c', + 'src/core/lib/iomgr/pollset_set_uv.c', 'src/core/lib/iomgr/pollset_set_windows.c', + 'src/core/lib/iomgr/pollset_uv.c', 'src/core/lib/iomgr/pollset_windows.c', 'src/core/lib/iomgr/resolve_address_posix.c', + 'src/core/lib/iomgr/resolve_address_uv.c', 'src/core/lib/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/sockaddr_utils.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', + 'src/core/lib/iomgr/socket_utils_uv.c', 'src/core/lib/iomgr/socket_utils_windows.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', + 'src/core/lib/iomgr/tcp_client_uv.c', 'src/core/lib/iomgr/tcp_client_windows.c', 'src/core/lib/iomgr/tcp_posix.c', 'src/core/lib/iomgr/tcp_server_posix.c', + 'src/core/lib/iomgr/tcp_server_uv.c', 'src/core/lib/iomgr/tcp_server_windows.c', + 'src/core/lib/iomgr/tcp_uv.c', 'src/core/lib/iomgr/tcp_windows.c', 'src/core/lib/iomgr/time_averaged_stats.c', - 'src/core/lib/iomgr/timer.c', + 'src/core/lib/iomgr/timer_generic.c', 'src/core/lib/iomgr/timer_heap.c', + 'src/core/lib/iomgr/timer_uv.c', 'src/core/lib/iomgr/udp_server.c', 'src/core/lib/iomgr/unix_sockets_posix.c', 'src/core/lib/iomgr/unix_sockets_posix_noop.c', @@ -473,6 +487,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/wakeup_fd_pipe.c', 'src/core/lib/iomgr/wakeup_fd_posix.c', 'src/core/lib/iomgr/workqueue_posix.c', + 'src/core/lib/iomgr/workqueue_uv.c', 'src/core/lib/iomgr/workqueue_windows.c', 'src/core/lib/json/json.c', 'src/core/lib/json/json_reader.c', @@ -650,6 +665,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/pollset.h', 'src/core/lib/iomgr/pollset_set.h', 'src/core/lib/iomgr/pollset_set_windows.h', + 'src/core/lib/iomgr/pollset_uv.h', 'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/resolve_address.h', @@ -663,16 +679,20 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/tcp_client.h', 'src/core/lib/iomgr/tcp_posix.h', 'src/core/lib/iomgr/tcp_server.h', + 'src/core/lib/iomgr/tcp_uv.h', 'src/core/lib/iomgr/tcp_windows.h', 'src/core/lib/iomgr/time_averaged_stats.h', 'src/core/lib/iomgr/timer.h', + 'src/core/lib/iomgr/timer_generic.h', 'src/core/lib/iomgr/timer_heap.h', + 'src/core/lib/iomgr/timer_uv.h', 'src/core/lib/iomgr/udp_server.h', 'src/core/lib/iomgr/unix_sockets_posix.h', 'src/core/lib/iomgr/wakeup_fd_pipe.h', 'src/core/lib/iomgr/wakeup_fd_posix.h', 'src/core/lib/iomgr/workqueue.h', 'src/core/lib/iomgr/workqueue_posix.h', + 'src/core/lib/iomgr/workqueue_uv.h', 'src/core/lib/iomgr/workqueue_windows.h', 'src/core/lib/json/json.h', 'src/core/lib/json/json_common.h', diff --git a/grpc.gemspec b/grpc.gemspec index 60701d12883..5ab3f913012 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -206,6 +206,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/pollset.h ) s.files += %w( src/core/lib/iomgr/pollset_set.h ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.h ) + s.files += %w( src/core/lib/iomgr/pollset_uv.h ) s.files += %w( src/core/lib/iomgr/pollset_windows.h ) s.files += %w( src/core/lib/iomgr/port.h ) s.files += %w( src/core/lib/iomgr/resolve_address.h ) @@ -219,16 +220,20 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/tcp_client.h ) s.files += %w( src/core/lib/iomgr/tcp_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_server.h ) + s.files += %w( src/core/lib/iomgr/tcp_uv.h ) s.files += %w( src/core/lib/iomgr/tcp_windows.h ) s.files += %w( src/core/lib/iomgr/time_averaged_stats.h ) s.files += %w( src/core/lib/iomgr/timer.h ) + s.files += %w( src/core/lib/iomgr/timer_generic.h ) s.files += %w( src/core/lib/iomgr/timer_heap.h ) + s.files += %w( src/core/lib/iomgr/timer_uv.h ) s.files += %w( src/core/lib/iomgr/udp_server.h ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix.h ) s.files += %w( src/core/lib/iomgr/wakeup_fd_pipe.h ) s.files += %w( src/core/lib/iomgr/wakeup_fd_posix.h ) s.files += %w( src/core/lib/iomgr/workqueue.h ) s.files += %w( src/core/lib/iomgr/workqueue_posix.h ) + s.files += %w( src/core/lib/iomgr/workqueue_uv.h ) s.files += %w( src/core/lib/iomgr/workqueue_windows.h ) s.files += %w( src/core/lib/json/json.h ) s.files += %w( src/core/lib/json/json_common.h ) @@ -361,29 +366,38 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/iocp_windows.c ) s.files += %w( src/core/lib/iomgr/iomgr.c ) s.files += %w( src/core/lib/iomgr/iomgr_posix.c ) + s.files += %w( src/core/lib/iomgr/iomgr_uv.c ) s.files += %w( src/core/lib/iomgr/iomgr_windows.c ) s.files += %w( src/core/lib/iomgr/load_file.c ) s.files += %w( src/core/lib/iomgr/network_status_tracker.c ) s.files += %w( src/core/lib/iomgr/polling_entity.c ) + s.files += %w( src/core/lib/iomgr/pollset_set_uv.c ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.c ) + s.files += %w( src/core/lib/iomgr/pollset_uv.c ) s.files += %w( src/core/lib/iomgr/pollset_windows.c ) s.files += %w( src/core/lib/iomgr/resolve_address_posix.c ) + s.files += %w( src/core/lib/iomgr/resolve_address_uv.c ) s.files += %w( src/core/lib/iomgr/resolve_address_windows.c ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.c ) s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.c ) s.files += %w( src/core/lib/iomgr/socket_utils_linux.c ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.c ) + s.files += %w( src/core/lib/iomgr/socket_utils_uv.c ) s.files += %w( src/core/lib/iomgr/socket_utils_windows.c ) s.files += %w( src/core/lib/iomgr/socket_windows.c ) s.files += %w( src/core/lib/iomgr/tcp_client_posix.c ) + s.files += %w( src/core/lib/iomgr/tcp_client_uv.c ) s.files += %w( src/core/lib/iomgr/tcp_client_windows.c ) s.files += %w( src/core/lib/iomgr/tcp_posix.c ) s.files += %w( src/core/lib/iomgr/tcp_server_posix.c ) + s.files += %w( src/core/lib/iomgr/tcp_server_uv.c ) s.files += %w( src/core/lib/iomgr/tcp_server_windows.c ) + s.files += %w( src/core/lib/iomgr/tcp_uv.c ) s.files += %w( src/core/lib/iomgr/tcp_windows.c ) s.files += %w( src/core/lib/iomgr/time_averaged_stats.c ) - s.files += %w( src/core/lib/iomgr/timer.c ) + s.files += %w( src/core/lib/iomgr/timer_generic.c ) s.files += %w( src/core/lib/iomgr/timer_heap.c ) + s.files += %w( src/core/lib/iomgr/timer_uv.c ) s.files += %w( src/core/lib/iomgr/udp_server.c ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix.c ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix_noop.c ) @@ -392,6 +406,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/wakeup_fd_pipe.c ) s.files += %w( src/core/lib/iomgr/wakeup_fd_posix.c ) s.files += %w( src/core/lib/iomgr/workqueue_posix.c ) + s.files += %w( src/core/lib/iomgr/workqueue_uv.c ) s.files += %w( src/core/lib/iomgr/workqueue_windows.c ) s.files += %w( src/core/lib/json/json.c ) s.files += %w( src/core/lib/json/json_reader.c ) diff --git a/package.xml b/package.xml index d49c1243145..9493d01ba27 100644 --- a/package.xml +++ b/package.xml @@ -214,6 +214,7 @@ + @@ -227,16 +228,20 @@ + + + + @@ -369,29 +374,38 @@ + + + + + + + + - + + @@ -400,6 +414,7 @@ + diff --git a/src/core/ext/client_config/client_config_plugin.c b/src/core/ext/client_config/client_config_plugin.c index 5e316134205..e065d06be96 100644 --- a/src/core/ext/client_config/client_config_plugin.c +++ b/src/core/ext/client_config/client_config_plugin.c @@ -31,6 +31,11 @@ * */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include #include diff --git a/src/core/ext/client_config/connector.h b/src/core/ext/client_config/connector.h index ea9d23706e4..5cf8f14721c 100644 --- a/src/core/ext/client_config/connector.h +++ b/src/core/ext/client_config/connector.h @@ -34,6 +34,11 @@ #ifndef GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H #define GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include "src/core/lib/channel/channel_stack.h" #include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/transport/transport.h" diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index af913d8a9df..a390daec01d 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -96,6 +96,11 @@ * - Implement LB service forwarding (point 2c. in the doc's diagram). */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c index 9decf70692a..61b637fe7d4 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -31,6 +31,11 @@ * */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c index 7bcf608ab9b..da53143948d 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -59,6 +59,11 @@ * the subchannel by the caller. */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index 31ac968670f..6a699804fe8 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -31,6 +31,11 @@ * */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index d613c5393e0..46d185a9845 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -31,6 +31,11 @@ * */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include #include diff --git a/src/core/lib/http/httpcli.h b/src/core/lib/http/httpcli.h index 662e176f4cc..eba6ecb9ab7 100644 --- a/src/core/lib/http/httpcli.h +++ b/src/core/lib/http/httpcli.h @@ -34,6 +34,11 @@ #ifndef GRPC_CORE_LIB_HTTP_HTTPCLI_H #define GRPC_CORE_LIB_HTTP_HTTPCLI_H +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include diff --git a/src/core/lib/iomgr/iomgr.h b/src/core/lib/iomgr/iomgr.h index 6c82de78acf..c1cfaf302e8 100644 --- a/src/core/lib/iomgr/iomgr.h +++ b/src/core/lib/iomgr/iomgr.h @@ -34,6 +34,8 @@ #ifndef GRPC_CORE_LIB_IOMGR_IOMGR_H #define GRPC_CORE_LIB_IOMGR_IOMGR_H +#include "src/core/lib/iomgr/port.h" + /** Initializes the iomgr. */ void grpc_iomgr_init(void); diff --git a/src/core/lib/iomgr/iomgr_uv.c b/src/core/lib/iomgr/iomgr_uv.c new file mode 100644 index 00000000000..4c8acfbd96e --- /dev/null +++ b/src/core/lib/iomgr/iomgr_uv.c @@ -0,0 +1,51 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV + +#include "src/core/lib/debug/trace.h" +#include "src/core/lib/iomgr/pollset_uv.h" +#include "src/core/lib/iomgr/tcp_uv.h" + +void grpc_iomgr_platform_init(void) { + grpc_pollset_global_init(); + grpc_register_tracer("tcp", &grpc_tcp_trace); +} +void grpc_iomgr_platform_flush(void) {} +void grpc_iomgr_platform_shutdown(void) { + grpc_pollset_global_shutdown(); +} + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/pollset_set_uv.c b/src/core/lib/iomgr/pollset_set_uv.c new file mode 100644 index 00000000000..e5ef8b29e03 --- /dev/null +++ b/src/core/lib/iomgr/pollset_set_uv.c @@ -0,0 +1,62 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV + +#include "src/core/lib/iomgr/pollset_set.h" + +grpc_pollset_set* grpc_pollset_set_create(void) { + return (grpc_pollset_set*)((intptr_t)0xdeafbeef); +} + +void grpc_pollset_set_destroy(grpc_pollset_set* pollset_set) {} + +void grpc_pollset_set_add_pollset(grpc_exec_ctx* exec_ctx, + grpc_pollset_set* pollset_set, + grpc_pollset* pollset) {} + +void grpc_pollset_set_del_pollset(grpc_exec_ctx* exec_ctx, + grpc_pollset_set* pollset_set, + grpc_pollset* pollset) {} + +void grpc_pollset_set_add_pollset_set(grpc_exec_ctx* exec_ctx, + grpc_pollset_set* bag, + grpc_pollset_set* item) {} + +void grpc_pollset_set_del_pollset_set(grpc_exec_ctx* exec_ctx, + grpc_pollset_set* bag, + grpc_pollset_set* item) {} + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/pollset_set_windows.c b/src/core/lib/iomgr/pollset_set_windows.c index 645650db9be..293893f18eb 100644 --- a/src/core/lib/iomgr/pollset_set_windows.c +++ b/src/core/lib/iomgr/pollset_set_windows.c @@ -31,8 +31,8 @@ * */ -#include #include "src/core/lib/iomgr/port.h" +#include #ifdef GRPC_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/pollset_uv.c b/src/core/lib/iomgr/pollset_uv.c new file mode 100644 index 00000000000..2c41a58c309 --- /dev/null +++ b/src/core/lib/iomgr/pollset_uv.c @@ -0,0 +1,84 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV + +#include + +#include "src/core/lib/iomgr/pollset.h" +#include "src/core/lib/iomgr/pollset_uv.h" + +gpr_mu grpc_polling_mu; + +size_t grpc_pollset_size() { + return 1; +} + +void grpc_pollset_global_init(void) { + gpr_mu_init(&grpc_polling_mu); +} + +void grpc_pollset_global_shutdown(void) { gpr_mu_destroy(&grpc_polling_mu); } + +void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu) { + *mu = &grpc_polling_mu; +} + +void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, + grpc_closure *closure) { + grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_NONE, NULL); +} + +void grpc_pollset_destroy(grpc_pollset *pollset) {} + +void grpc_pollset_reset(grpc_pollset *pollset) {} + +grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, + grpc_pollset_worker **worker_hdl, + gpr_timespec now, gpr_timespec deadline) { + if (!grpc_closure_list_empty(exec_ctx->closure_list)) { + gpr_mu_unlock(&grpc_polling_mu); + grpc_exec_ctx_flush(exec_ctx); + gpr_mu_lock(&grpc_polling_mu); + } + return GRPC_ERROR_NONE; +} + +grpc_error *grpc_pollset_kick(grpc_pollset *pollset, + grpc_pollset_worker *specific_worker) { + return GRPC_ERROR_NONE; +} + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/pollset_uv.h b/src/core/lib/iomgr/pollset_uv.h new file mode 100644 index 00000000000..5cbc83e9910 --- /dev/null +++ b/src/core/lib/iomgr/pollset_uv.h @@ -0,0 +1,35 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +void grpc_pollset_global_init(void); +void grpc_pollset_global_shutdown(void); diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h index e6f01802ed9..60bb16a4235 100644 --- a/src/core/lib/iomgr/port.h +++ b/src/core/lib/iomgr/port.h @@ -36,7 +36,9 @@ #ifndef GRPC_CORE_LIB_IOMGR_PORT_H #define GRPC_CORE_LIB_IOMGR_PORT_H -#if defined(GPR_MANYLINUX1) +#if defined(GRPC_UV) +#include +#elif defined(GPR_MANYLINUX1) #define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_IP_PKTINFO 1 #define GRPC_HAVE_MSG_NOSIGNAL 1 @@ -46,7 +48,9 @@ #define GRPC_POSIX_SOCKETADDR 1 #define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_WAKEUP_FD 1 +#define GRPC_TIMER_USE_GENERIC 1 #elif defined(GPR_WINDOWS) +#define GRPC_TIMER_USE_GENERIC 1 #define GRPC_WINSOCK_SOCKET 1 #define GRPC_WINDOWS_SOCKETUTILS 1 #elif defined(GPR_ANDROID) @@ -59,6 +63,7 @@ #define GRPC_POSIX_SOCKETADDR 1 #define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_WAKEUP_FD 1 +#define GRPC_TIMER_USE_GENERIC 1 #elif defined(GPR_LINUX) #define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_IP_PKTINFO 1 @@ -68,6 +73,7 @@ #define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKETADDR 1 #define GRPC_POSIX_WAKEUP_FD 1 +#define GRPC_TIMER_USE_GENERIC 1 #ifdef __GLIBC_PREREQ #if __GLIBC_PREREQ(2, 9) #define GRPC_LINUX_EPOLL 1 @@ -93,6 +99,7 @@ #define GRPC_POSIX_SOCKETADDR 1 #define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_WAKEUP_FD 1 +#define GRPC_TIMER_USE_GENERIC 1 #elif defined(GPR_FREEBSD) #define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_IP_PKTINFO 1 @@ -103,18 +110,20 @@ #define GRPC_POSIX_SOCKETADDR 1 #define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_WAKEUP_FD 1 +#define GRPC_TIMER_USE_GENERIC 1 #elif defined(GPR_NACL) #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKETADDR 1 #define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_WAKEUP_FD 1 +#define GRPC_TIMER_USE_GENERIC 1 #elif !defined(GPR_NO_AUTODETECT_PLATFORM) #error "Platform not recognized" #endif #if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \ - defined(GRPC_CUSTOM_SOCKET) != \ + defined(GRPC_CUSTOM_SOCKET) + defined(GRPC_UV) != \ 1 #error Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET #endif diff --git a/src/core/lib/iomgr/resolve_address_uv.c b/src/core/lib/iomgr/resolve_address_uv.c new file mode 100644 index 00000000000..550047b4d24 --- /dev/null +++ b/src/core/lib/iomgr/resolve_address_uv.c @@ -0,0 +1,234 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" +#ifdef GRPC_UV + +#include + +#include +#include +#include +#include + +#include "src/core/lib/iomgr/closure.h" +#include "src/core/lib/iomgr/error.h" +#include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/resolve_address.h" +#include "src/core/lib/iomgr/sockaddr_utils.h" + +#include + +typedef struct request { + grpc_closure *on_done; + grpc_resolved_addresses **addresses; + struct addrinfo *hints; +} request; + +static grpc_error *handle_addrinfo_result(int status, + struct addrinfo *result, + grpc_resolved_addresses **addresses) { + + struct addrinfo *resp; + size_t i; + if (status != 0) { + grpc_error *error; + *addresses = NULL; + error = GRPC_ERROR_CREATE("getaddrinfo failed"); + error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + uv_strerror(status)); + return error; + } + (*addresses) = gpr_malloc(sizeof(grpc_resolved_addresses)); + (*addresses)->naddrs = 0; + for (resp = result; resp != NULL; resp = resp->ai_next) { + (*addresses)->naddrs++; + } + (*addresses)->addrs = + gpr_malloc(sizeof(grpc_resolved_address) * (*addresses)->naddrs); + i = 0; + for (resp = result; resp != NULL; resp = resp->ai_next) { + memcpy(&(*addresses)->addrs[i].addr, resp->ai_addr, resp->ai_addrlen); + (*addresses)->addrs[i].len = resp->ai_addrlen; + i++; + } + + { + for (i = 0; i < (*addresses)->naddrs; i++) { + char *buf; + grpc_sockaddr_to_string( + &buf, (struct sockaddr *)&(*addresses)->addrs[i].addr, 0); + gpr_free(buf); + } + } + return GRPC_ERROR_NONE; +} + +static void getaddrinfo_callback(uv_getaddrinfo_t *req, int status, + struct addrinfo *res) { + request *r = (request *)req->data; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_error *error; + error = handle_addrinfo_result(status, res, r->addresses); + grpc_exec_ctx_sched(&exec_ctx, r->on_done, error, NULL); + grpc_exec_ctx_finish(&exec_ctx); + + gpr_free(r->hints); + gpr_free(r); + gpr_free(req); + uv_freeaddrinfo(res); +} + +static grpc_error *try_split_host_port(const char *name, + const char *default_port, char **host, + char **port) { + /* parse name, splitting it into host and port parts */ + grpc_error *error; + gpr_split_host_port(name, host, port); + if (host == NULL) { + char *msg; + gpr_asprintf(&msg, "unparseable host:port: '%s'", name); + error = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return error; + } + if (port == NULL) { + if (default_port == NULL) { + char *msg; + gpr_asprintf(&msg, "no port in name '%s'", name); + error = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return error; + } + *port = gpr_strdup(default_port); + } + return GRPC_ERROR_NONE; +} + +static grpc_error *blocking_resolve_address_impl( + const char *name, const char *default_port, + grpc_resolved_addresses **addresses) { + char *host; + char *port; + struct addrinfo hints; + uv_getaddrinfo_t req; + int s; + grpc_error *err; + + err = try_split_host_port(name, default_port, &host, &port); + if (err != GRPC_ERROR_NONE) { + goto done; + } + + /* Call getaddrinfo */ + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; /* ipv4 or ipv6 */ + hints.ai_socktype = SOCK_STREAM; /* stream socket */ + hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */ + + s = uv_getaddrinfo(uv_default_loop(), &req, NULL, host, port, &hints); + err = handle_addrinfo_result(s, req.addrinfo, addresses); + +done: + gpr_free(host); + gpr_free(port); + if (req.addrinfo) { + uv_freeaddrinfo(req.addrinfo); + } + return err; +} + + + +grpc_error *(*grpc_blocking_resolve_address)( + const char *name, const char *default_port, + grpc_resolved_addresses **addresses) = blocking_resolve_address_impl; + +void grpc_resolved_addresses_destroy(grpc_resolved_addresses *addrs) { + if (addrs != NULL) { + gpr_free(addrs->addrs); + } + gpr_free(addrs); +} + +static void resolve_address_impl(grpc_exec_ctx *exec_ctx, const char *name, + const char *default_port, + grpc_closure *on_done, + grpc_resolved_addresses **addrs) { + uv_getaddrinfo_t *req; + request *r; + struct addrinfo *hints; + char *host; + char *port; + grpc_error *err; + int s; + err = try_split_host_port(name, default_port, &host, &port); + if (err != GRPC_ERROR_NONE) { + grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL); + return; + } + r = gpr_malloc(sizeof(request)); + r->on_done = on_done; + r->addresses = addrs; + req = gpr_malloc(sizeof(uv_getaddrinfo_t)); + req->data = r; + + /* Call getaddrinfo */ + hints = gpr_malloc(sizeof(struct addrinfo)); + memset(hints, 0, sizeof(struct addrinfo)); + hints->ai_family = AF_UNSPEC; /* ipv4 or ipv6 */ + hints->ai_socktype = SOCK_STREAM; /* stream socket */ + hints->ai_flags = AI_PASSIVE; /* for wildcard IP address */ + r->hints = hints; + + s = uv_getaddrinfo(uv_default_loop(), req, getaddrinfo_callback, host, port, + hints); + + if (s != 0) { + *addrs = NULL; + err = GRPC_ERROR_CREATE("getaddrinfo failed"); + err = grpc_error_set_str(err, GRPC_ERROR_STR_OS_ERROR, + uv_strerror(s)); + grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL); + gpr_free(r); + gpr_free(req); + gpr_free(hints); + } +} + +void (*grpc_resolve_address)(grpc_exec_ctx *exec_ctx, const char *name, + const char *default_port, grpc_closure *on_done, + grpc_resolved_addresses **addrs) = + resolve_address_impl; + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/sockaddr.h b/src/core/lib/iomgr/sockaddr.h index 58cae6cc010..418488a0ea5 100644 --- a/src/core/lib/iomgr/sockaddr.h +++ b/src/core/lib/iomgr/sockaddr.h @@ -36,6 +36,10 @@ #include "src/core/lib/iomgr/port.h" +#ifdef GRPC_UV +#include +#endif + #ifdef GPR_WINDOWS #include "src/core/lib/iomgr/sockaddr_windows.h" #endif diff --git a/src/core/lib/iomgr/socket_utils.h b/src/core/lib/iomgr/socket_utils.h index 6ce9a6859cc..b01197ad18c 100644 --- a/src/core/lib/iomgr/socket_utils.h +++ b/src/core/lib/iomgr/socket_utils.h @@ -36,10 +36,12 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GRPC_WINSOCK_SOCKET +#if defined(GRPC_WINSOCK_SOCKET) #include "src/core/lib/iomgr/sockaddr_windows.h" -#else +#elif defined(GRPC_POSIX_SOCKET) #include "src/core/lib/iomgr/sockaddr_posix.h" +#elif defined(GRPC_UV) +#include #endif /* A wrapper for inet_ntop on POSIX systems and InetNtop on Windows systems */ diff --git a/src/core/lib/iomgr/socket_utils_uv.c b/src/core/lib/iomgr/socket_utils_uv.c new file mode 100644 index 00000000000..7f61384e741 --- /dev/null +++ b/src/core/lib/iomgr/socket_utils_uv.c @@ -0,0 +1,50 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV + +#include + +#include "src/core/lib/iomgr/socket_utils.h" + +#include + +const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size) { + GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); + uv_inet_ntop(af, src, dst, (size_t)size); + return dst; +} + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c new file mode 100644 index 00000000000..7823a1d873b --- /dev/null +++ b/src/core/lib/iomgr/tcp_client_uv.c @@ -0,0 +1,142 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV + +#include + +#include +#include + +#include "src/core/lib/iomgr/error.h" +#include "src/core/lib/iomgr/sockaddr_utils.h" +#include "src/core/lib/iomgr/tcp_client.h" +#include "src/core/lib/iomgr/tcp_uv.h" +#include "src/core/lib/iomgr/timer.h" + +typedef struct grpc_uv_tcp_connect { + uv_connect_t connect_req; + grpc_timer alarm; + uv_tcp_t *tcp_handle; + grpc_closure *closure; + grpc_endpoint **endpoint; + int refs; + char *addr_name; +} grpc_uv_tcp_connect; + +static void uv_tcp_connect_cleanup(grpc_uv_tcp_connect *connect) { + gpr_free(connect); +} + +static void tcp_close_callback(uv_handle_t *handle) { + gpr_log(GPR_DEBUG, "Freeing uv_tcp_t handle %p", handle); + gpr_free(handle); +} + +static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { + int done; + grpc_uv_tcp_connect *connect = acp; + if (error == GRPC_ERROR_NONE) { + /* error == NONE implies that the timer ran out, and wasn't cancelled. If + it was cancelled, then the handler that cancelled it also should close + the handle, if applicable */ + gpr_log(GPR_DEBUG, "Closing uv_tcp_t handle %p", connect->tcp_handle); + uv_close((uv_handle_t *)connect->tcp_handle, tcp_close_callback); + } + done = (--connect->refs == 0); + if (done) { + uv_tcp_connect_cleanup(connect); + } +} + +static void uv_tc_on_connect(uv_connect_t *req, int status) { + grpc_uv_tcp_connect *connect = req->data; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_error *error = GRPC_ERROR_NONE; + int done; + grpc_closure *closure = connect->closure; + grpc_timer_cancel(&exec_ctx, &connect->alarm); + if (status == 0) { + *connect->endpoint = grpc_tcp_create(connect->tcp_handle, + connect->addr_name); + } else { + error = GRPC_ERROR_CREATE("Failed to connect to remote host"); + error = grpc_error_set_int(error, GRPC_ERROR_INT_ERRNO, -status); + error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + uv_strerror(status)); + if (status == UV_ECANCELED) { + error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + "Timeout occurred"); + // This should only happen if the handle is already closed + } else { + error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + uv_strerror(status)); + gpr_log(GPR_DEBUG, "Closing uv_tcp_t handle %p", connect->tcp_handle); + uv_close((uv_handle_t *)connect->tcp_handle, tcp_close_callback); + } + } + done = (--connect->refs == 0); + if (done) { + uv_tcp_connect_cleanup(connect); + } + grpc_exec_ctx_sched(&exec_ctx, closure, error, NULL); + grpc_exec_ctx_finish(&exec_ctx); +} + +void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, + grpc_closure *closure, grpc_endpoint **ep, + grpc_pollset_set *interested_parties, + const struct sockaddr *addr, + size_t addr_len, gpr_timespec deadline) { + grpc_uv_tcp_connect *connect; + (void)interested_parties; + connect = gpr_malloc(sizeof(grpc_uv_tcp_connect)); + memset(connect, 0, sizeof(grpc_uv_tcp_connect)); + connect->closure = closure; + connect->endpoint = ep; + connect->tcp_handle = gpr_malloc(sizeof(uv_tcp_t)); + gpr_log(GPR_DEBUG, "Allocated uv_tcp_t handle %p", connect->tcp_handle); + connect->addr_name = grpc_sockaddr_to_uri(addr); + uv_tcp_init(uv_default_loop(), connect->tcp_handle); + connect->connect_req.data = connect; + // TODO(murgatroid99): figure out what the return value here means + uv_tcp_connect(&connect->connect_req, connect->tcp_handle, addr, + uv_tc_on_connect); + grpc_timer_init(exec_ctx, &connect->alarm, + gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC), + uv_tc_on_alarm, connect, gpr_now(GPR_CLOCK_MONOTONIC)); +} + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/tcp_server_uv.c b/src/core/lib/iomgr/tcp_server_uv.c new file mode 100644 index 00000000000..b69e70881f6 --- /dev/null +++ b/src/core/lib/iomgr/tcp_server_uv.c @@ -0,0 +1,358 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV + +#include + +#include +#include + +#include "src/core/lib/iomgr/error.h" +#include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/sockaddr_utils.h" +#include "src/core/lib/iomgr/tcp_server.h" +#include "src/core/lib/iomgr/tcp_uv.h" + +/* one listening port */ +typedef struct grpc_tcp_listener grpc_tcp_listener; +struct grpc_tcp_listener { + uv_tcp_t *handle; + grpc_tcp_server *server; + unsigned port_index; + int port; + /* linked list */ + struct grpc_tcp_listener *next; +}; + +struct grpc_tcp_server { + gpr_refcount refs; + + /* Called whenever accept() succeeds on a server port. */ + grpc_tcp_server_cb on_accept_cb; + void *on_accept_cb_arg; + + int open_ports; + + /* linked list of server ports */ + grpc_tcp_listener *head; + grpc_tcp_listener *tail; + + /* List of closures passed to shutdown_starting_add(). */ + grpc_closure_list shutdown_starting; + + /* shutdown callback */ + grpc_closure *shutdown_complete; +}; + +grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete, + const grpc_channel_args *args, + grpc_tcp_server **server) { + grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server)); + (void)args; + gpr_ref_init(&s->refs, 1); + s->on_accept_cb = NULL; + s->on_accept_cb_arg = NULL; + s->open_ports = 0; + s->head = NULL; + s->tail = NULL; + s->shutdown_starting.head = NULL; + s->shutdown_starting.tail = NULL; + s->shutdown_complete = shutdown_complete; + *server = s; + return GRPC_ERROR_NONE; +} + +grpc_tcp_server *grpc_tcp_server_ref(grpc_tcp_server *s) { + gpr_ref(&s->refs); + return s; +} + +void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server *s, + grpc_closure *shutdown_starting) { + grpc_closure_list_append(&s->shutdown_starting, shutdown_starting, + GRPC_ERROR_NONE); +} + +static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { + if (s->shutdown_complete != NULL) { + grpc_exec_ctx_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE, NULL); + } + + while (s->head) { + grpc_tcp_listener *sp = s->head; + s->head = sp->next; + sp->next = NULL; + gpr_log(GPR_DEBUG, "Freeing uv_tcp_t handle %p", sp->handle); + gpr_free(sp->handle); + gpr_free(sp); + } + gpr_free(s); +} + +static void handle_close_callback(uv_handle_t *handle) { + grpc_tcp_listener *sp = (grpc_tcp_listener *)handle->data; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + sp->server->open_ports--; + if (sp->server->open_ports == 0) { + finish_shutdown(&exec_ctx, sp->server); + } + grpc_exec_ctx_finish(&exec_ctx); +} + +static void tcp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { + int immediately_done = 0; + grpc_tcp_listener *sp; + + if (s->open_ports == 0) { + immediately_done = 1; + } + for (sp = s->head; sp; sp = sp->next){ + gpr_log(GPR_DEBUG, "Closing uv_tcp_t handle %p", sp->handle); + uv_close((uv_handle_t *)sp->handle, handle_close_callback); + } + + if (immediately_done) { + finish_shutdown(exec_ctx, s); + } +} + +void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { + if (gpr_unref(&s->refs)) { + /* Complete shutdown_starting work before destroying. */ + grpc_exec_ctx local_exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_exec_ctx_enqueue_list(&local_exec_ctx, &s->shutdown_starting, NULL); + if (exec_ctx == NULL) { + grpc_exec_ctx_flush(&local_exec_ctx); + tcp_server_destroy(&local_exec_ctx, s); + grpc_exec_ctx_finish(&local_exec_ctx); + } else { + grpc_exec_ctx_finish(&local_exec_ctx); + tcp_server_destroy(exec_ctx, s); + } + } +} + +static void on_connect(uv_stream_t *server, int status) { + grpc_tcp_listener *sp = (grpc_tcp_listener *)server->data; + grpc_tcp_server_acceptor acceptor = {sp->server, sp->port_index, 0}; + uv_tcp_t *client; + grpc_endpoint *ep = NULL; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + struct sockaddr_storage peer_name; + int peer_name_len = sizeof(peer_name); + char *peer_name_string; + int err; + + gpr_log(GPR_DEBUG, "Server %p received a connection", sp->server); + + if (status < 0) { + gpr_log(GPR_INFO, "Skipping on_accept due to error: %s", + uv_strerror(status)); + return; + } + client = gpr_malloc(sizeof(uv_tcp_t)); + gpr_log(GPR_DEBUG, "Allocated uv_tcp_t handle %p", client); + uv_tcp_init(uv_default_loop(), client); + // UV documentation says this is guaranteed to succeed + uv_accept((uv_stream_t *)server, (uv_stream_t *)client); + peer_name_string = NULL; + err = uv_tcp_getpeername(client, (struct sockaddr *)&peer_name, + &peer_name_len); + if (err == 0) { + peer_name_string = grpc_sockaddr_to_uri((struct sockaddr *)&peer_name); + } else { + gpr_log(GPR_INFO, "uv_tcp_getpeername error: %s", + uv_strerror(status)); + } + ep = grpc_tcp_create(client, peer_name_string); + gpr_log(GPR_DEBUG, "Calling on_accept_cb for server %p", sp->server); + sp->server->on_accept_cb(&exec_ctx, sp->server->on_accept_cb_arg, ep, NULL, + &acceptor); + grpc_exec_ctx_finish(&exec_ctx); +} + +static grpc_error *add_socket_to_server(grpc_tcp_server *s, + uv_tcp_t *handle, + struct sockaddr *addr, + size_t addr_len, unsigned port_index, + grpc_tcp_listener **listener) { + grpc_tcp_listener *sp = NULL; + int port = -1; + int status; + grpc_error *error; + struct sockaddr_storage sockname_temp; + int sockname_len; + + // The last argument to uv_tcp_bind is flags + status = uv_tcp_bind(handle, addr, 0); + if (status != 0) { + error = GRPC_ERROR_CREATE("Failed to bind to port"); + error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + uv_strerror(status)); + return error; + } + + sockname_len = (int)sizeof(sockname_temp); + status = uv_tcp_getsockname(handle, (struct sockaddr *)&sockname_temp, + &sockname_len); + if (status != 0) { + error = GRPC_ERROR_CREATE("getsockname failed"); + error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + uv_strerror(status)); + return error; + } + + port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + + GPR_ASSERT(port >= 0); + GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server"); + sp = gpr_malloc(sizeof(grpc_tcp_listener)); + sp->next = NULL; + if (s->head == NULL) { + s->head = sp; + } else { + s->tail->next = sp; + } + s->tail = sp; + sp->server = s; + sp->handle = handle; + sp->port = port; + sp->port_index = port_index; + handle->data = sp; + s->open_ports++; + GPR_ASSERT(sp->handle); + *listener = sp; + + return GRPC_ERROR_NONE; +} + +grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, + size_t addr_len, int *port) { + // This function is mostly copied from tcp_server_windows.c + grpc_tcp_listener *sp = NULL; + uv_tcp_t *handle; + struct sockaddr_in6 addr6_v4mapped; + struct sockaddr_in6 wildcard; + struct sockaddr *allocated_addr = NULL; + struct sockaddr_storage sockname_temp; + int sockname_len; + unsigned port_index = 0; + int status; + grpc_error *error = GRPC_ERROR_NONE; + + if (s->tail != NULL) { + port_index = s->tail->port_index + 1; + } + + /* Check if this is a wildcard port, and if so, try to keep the port the same + as some previously created listener. */ + if (grpc_sockaddr_get_port(addr) == 0) { + for (sp = s->head; sp; sp = sp->next) { + sockname_len = sizeof(sockname_temp); + if (0 == uv_tcp_getsockname(sp->handle, (struct sockaddr *)&sockname_temp, + &sockname_len)) { + *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + if (*port > 0) { + allocated_addr = gpr_malloc(addr_len); + memcpy(allocated_addr, addr, addr_len); + grpc_sockaddr_set_port(allocated_addr, *port); + addr = allocated_addr; + break; + } + } + } + } + + if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) { + addr = (const struct sockaddr *)&addr6_v4mapped; + addr_len = sizeof(addr6_v4mapped); + } + + /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */ + if (grpc_sockaddr_is_wildcard(addr, port)) { + grpc_sockaddr_make_wildcard6(*port, &wildcard); + + addr = (struct sockaddr *)&wildcard; + addr_len = sizeof(wildcard); + } + + handle = gpr_malloc(sizeof(uv_tcp_t)); + gpr_log(GPR_DEBUG, "Allocating uv_tcp_t handle %p", handle); + status = uv_tcp_init(uv_default_loop(), handle); + if (status == 0) { + error = add_socket_to_server(s, handle, (struct sockaddr *)addr, addr_len, + port_index, &sp); + } else { + error = GRPC_ERROR_CREATE("Failed to initialize UV tcp handle"); + error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + uv_strerror(status)); + } + + gpr_free(allocated_addr); + + if (error != GRPC_ERROR_NONE) { + grpc_error *error_out = GRPC_ERROR_CREATE_REFERENCING( + "Failed to add port to server", &error, 1); + GRPC_ERROR_UNREF(error); + error = error_out; + *port = -1; + } else { + GPR_ASSERT(sp != NULL); + *port = sp->port; + } + return error; +} + +void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *server, + grpc_pollset **pollsets, size_t pollset_count, + grpc_tcp_server_cb on_accept_cb, void *cb_arg) { + grpc_tcp_listener *sp; + (void)pollsets; + (void)pollset_count; + GPR_ASSERT(on_accept_cb); + GPR_ASSERT(!server->on_accept_cb); + server->on_accept_cb = on_accept_cb; + server->on_accept_cb_arg = cb_arg; + for(sp = server->head; sp; sp = sp->next) { + GPR_ASSERT(uv_listen((uv_stream_t *) sp->handle, SOMAXCONN, on_connect) == 0); + } +} + +void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx, + grpc_tcp_server *s) {} + + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c new file mode 100644 index 00000000000..fa198fd8e1c --- /dev/null +++ b/src/core/lib/iomgr/tcp_uv.c @@ -0,0 +1,336 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV + +#include +#include + +#include +#include +#include +#include + +#include "src/core/lib/iomgr/error.h" +#include "src/core/lib/iomgr/network_status_tracker.h" +#include "src/core/lib/iomgr/tcp_uv.h" +#include "src/core/lib/support/string.h" + +int grpc_tcp_trace = 0; + +typedef struct { + grpc_endpoint base; + gpr_refcount refcount; + + uv_tcp_t *handle; + + grpc_closure *read_cb; + grpc_closure *write_cb; + + gpr_slice read_slice; + gpr_slice_buffer *read_slices; + gpr_slice_buffer *write_slices; + uv_buf_t *write_buffers; + + int shutting_down; + char *peer_string; + grpc_pollset *pollset; +} grpc_tcp; + +static void uv_close_callback(uv_handle_t *handle) { + gpr_log(GPR_DEBUG, "Freeing uv_tcp_t handle %p", handle); + gpr_free(handle); +} + +static void tcp_free(grpc_tcp *tcp) { + gpr_free(tcp); +} + +/*#define GRPC_TCP_REFCOUNT_DEBUG*/ +#ifdef GRPC_TCP_REFCOUNT_DEBUG +#define TCP_UNREF(tcp, reason) \ + tcp_unref((tcp), (reason), __FILE__, __LINE__) +#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__) +static void tcp_unref(grpc_tcp *tcp, const char *reason, const char *file, + int line) { + gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp, + reason, tcp->refcount.count, tcp->refcount.count - 1); + if (gpr_unref(&tcp->refcount)) { + tcp_free(tcp); + } +} + +static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file, + int line) { + gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP ref %p : %s %d -> %d", tcp, + reason, tcp->refcount.count, tcp->refcount.count + 1); + gpr_ref(&tcp->refcount); +} +#else +#define TCP_UNREF(tcp, reason) tcp_unref((tcp)) +#define TCP_REF(tcp, reason) tcp_ref((tcp)) +static void tcp_unref(grpc_tcp *tcp) { + if (gpr_unref(&tcp->refcount)) { + tcp_free(tcp); + } +} + +static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); } +#endif + +static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { + grpc_tcp *tcp = handle->data; + (void)suggested_size; + tcp->read_slice = gpr_slice_malloc(GRPC_TCP_DEFAULT_READ_SLICE_SIZE); + buf->base = (char *)GPR_SLICE_START_PTR(tcp->read_slice); + buf->len = GPR_SLICE_LENGTH(tcp->read_slice); +} + +static void read_callback(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) { + gpr_slice sub; + grpc_error *error; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_tcp *tcp = stream->data; + grpc_closure *cb = tcp->read_cb; + if (nread == 0) { + // Nothing happened. Wait for the next callback + return; + } + TCP_UNREF(tcp, "read"); + tcp->read_cb = NULL; + // TODO(murgatroid99): figure out what the return value here means + uv_read_stop(stream); + if (nread == UV_EOF) { + error = GRPC_ERROR_CREATE("EOF"); + } else if (nread > 0) { + // Successful read + sub = gpr_slice_sub_no_ref(tcp->read_slice, 0, nread); + gpr_slice_buffer_add(tcp->read_slices, sub); + error = GRPC_ERROR_NONE; + if (grpc_tcp_trace) { + size_t i; + const char *str = grpc_error_string(error); + gpr_log(GPR_DEBUG, "read: error=%s", str); + grpc_error_free_string(str); + for (i = 0; i < tcp->read_slices->count; i++) { + char *dump = gpr_dump_slice(tcp->read_slices->slices[i], + GPR_DUMP_HEX | GPR_DUMP_ASCII); + gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump); + gpr_free(dump); + } + } + } else { + // nread < 0: Error + error = GRPC_ERROR_CREATE("TCP Read failed"); + } + grpc_exec_ctx_sched(&exec_ctx, cb, error, NULL); + grpc_exec_ctx_finish(&exec_ctx); +} + +static void uv_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + gpr_slice_buffer *read_slices, grpc_closure *cb) { + grpc_tcp *tcp = (grpc_tcp *)ep; + int status; + grpc_error *error = GRPC_ERROR_NONE; + GPR_ASSERT(tcp->read_cb == NULL); + tcp->read_cb = cb; + tcp->read_slices = read_slices; + gpr_slice_buffer_reset_and_unref(read_slices); + TCP_REF(tcp, "read"); + // TODO(murgatroid99): figure out what the return value here means + status = uv_read_start((uv_stream_t *)tcp->handle, alloc_uv_buf, read_callback); + if (status != 0) { + error = GRPC_ERROR_CREATE("TCP Read failed at start"); + error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + uv_strerror(status)); + grpc_exec_ctx_sched(exec_ctx, cb, error, NULL); + } + if (grpc_tcp_trace) { + const char *str = grpc_error_string(error); + gpr_log(GPR_DEBUG, "Initiating read on %p: error=%s", tcp, str); + } +} + +static void write_callback(uv_write_t *req, int status) { + grpc_tcp *tcp = req->data; + grpc_error *error; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_closure *cb = tcp->write_cb; + tcp->write_cb = NULL; + TCP_UNREF(tcp, "write"); + if (status == 0) { + error = GRPC_ERROR_NONE; + } else { + error = GRPC_ERROR_CREATE("TCP Write failed"); + } + if (grpc_tcp_trace) { + const char *str = grpc_error_string(error); + gpr_log(GPR_DEBUG, "write complete on %p: error=%s", tcp, str); + } + gpr_free(tcp->write_buffers); + gpr_free(req); + grpc_exec_ctx_sched(&exec_ctx, cb, error, NULL); + grpc_exec_ctx_finish(&exec_ctx); +} + +static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + gpr_slice_buffer *write_slices, + grpc_closure *cb) { + grpc_tcp *tcp = (grpc_tcp *)ep; + uv_buf_t *buffers; + unsigned int buffer_count; + unsigned int i; + gpr_slice *slice; + uv_write_t *write_req; + + if (grpc_tcp_trace) { + size_t i; + + for (i = 0; i < write_slices->count; i++) { + char *data = + gpr_dump_slice(write_slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII); + gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data); + gpr_free(data); + } + } + + if (tcp->shutting_down) { + grpc_exec_ctx_sched(exec_ctx, cb, + GRPC_ERROR_CREATE("TCP socket is shutting down"), NULL); + return; + } + + GPR_ASSERT(tcp->write_cb == NULL); + tcp->write_slices = write_slices; + GPR_ASSERT(tcp->write_slices->count <= UINT_MAX); + if (tcp->write_slices->count == 0) { + // No slices means we don't have to do anything, + // and libuv doesn't like empty writes + grpc_exec_ctx_sched(exec_ctx, cb, GRPC_ERROR_NONE, NULL); + return; + } + + tcp->write_cb = cb; + buffer_count = (unsigned int)tcp->write_slices->count; + buffers = gpr_malloc(sizeof(uv_buf_t) * buffer_count); + for (i = 0; i < buffer_count; i++) { + slice = &tcp->write_slices->slices[i]; + buffers[i].base = (char *)GPR_SLICE_START_PTR(*slice); + buffers[i].len = GPR_SLICE_LENGTH(*slice); + } + write_req = gpr_malloc(sizeof(uv_write_t)); + write_req->data = tcp; + TCP_REF(tcp, "write"); + // TODO(murgatroid99): figure out what the return value here means + uv_write(write_req, (uv_stream_t *)tcp->handle, buffers, buffer_count, + write_callback); +} + +static void uv_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_pollset *pollset) { + // No-op. We're ignoring pollsets currently + (void) exec_ctx; + (void) ep; + (void) pollset; + grpc_tcp *tcp = (grpc_tcp *) ep; + tcp->pollset = pollset; +} + +static void uv_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_pollset_set *pollset) { + // No-op. We're ignoring pollsets currently + (void) exec_ctx; + (void) ep; + (void) pollset; +} + +static void shutdown_callback(uv_shutdown_t *req, int status) { + gpr_free(req); +} + +static void uv_endpoint_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { + grpc_tcp *tcp = (grpc_tcp *)ep; + uv_shutdown_t *req = gpr_malloc(sizeof(uv_shutdown_t)); + uv_shutdown(req, (uv_stream_t *)tcp->handle, shutdown_callback); +} + +static void uv_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { + grpc_network_status_unregister_endpoint(ep); + grpc_tcp *tcp = (grpc_tcp *)ep; + gpr_log(GPR_DEBUG, "Closing uv_tcp_t handle %p", tcp->handle); + uv_close((uv_handle_t *)tcp->handle, uv_close_callback); + TCP_UNREF(tcp, "destroy"); +} + +static char *uv_get_peer(grpc_endpoint *ep) { + grpc_tcp *tcp = (grpc_tcp *)ep; + return gpr_strdup(tcp->peer_string); +} + +static grpc_workqueue *uv_get_workqueue(grpc_endpoint *ep) {return NULL; } + +static grpc_endpoint_vtable vtable = {uv_endpoint_read, + uv_endpoint_write, + uv_get_workqueue, + uv_add_to_pollset, + uv_add_to_pollset_set, + uv_endpoint_shutdown, + uv_destroy, + uv_get_peer}; + +grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, char *peer_string) { + grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp)); + + if (grpc_tcp_trace) { + gpr_log(GPR_DEBUG, "Creating TCP endpoint %p", tcp); + } + + memset(tcp, 0, sizeof(grpc_tcp)); + tcp->base.vtable = &vtable; + tcp->handle = handle; + handle->data = tcp; + gpr_ref_init(&tcp->refcount, 1); + tcp->peer_string = gpr_strdup(peer_string); + /* Tell network status tracking code about the new endpoint */ + grpc_network_status_register_endpoint(&tcp->base); + +#ifndef GRPC_UV_TCP_HOLD_LOOP + uv_unref((uv_handle_t *)handle); +#endif + + return &tcp->base; +} + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/tcp_uv.h b/src/core/lib/iomgr/tcp_uv.h new file mode 100644 index 00000000000..eed41151ea7 --- /dev/null +++ b/src/core/lib/iomgr/tcp_uv.h @@ -0,0 +1,57 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_TCP_UV_H +#define GRPC_CORE_LIB_IOMGR_TCP_UV_H +/* + Low level TCP "bottom half" implementation, for use by transports built on + top of a TCP connection. + + Note that this file does not (yet) include APIs for creating the socket in + the first place. + + All calls passing slice transfer ownership of a slice refcount unless + otherwise specified. +*/ + +#include "src/core/lib/iomgr/endpoint.h" + +#include + +extern int grpc_tcp_trace; + +#define GRPC_TCP_DEFAULT_READ_SLICE_SIZE 8192 + +grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, char *peer_string); + +#endif /* GRPC_CORE_LIB_IOMGR_TCP_UV_H */ diff --git a/src/core/lib/iomgr/timer.h b/src/core/lib/iomgr/timer.h index a825d2a28b1..b76ba079c42 100644 --- a/src/core/lib/iomgr/timer.h +++ b/src/core/lib/iomgr/timer.h @@ -34,19 +34,20 @@ #ifndef GRPC_CORE_LIB_IOMGR_TIMER_H #define GRPC_CORE_LIB_IOMGR_TIMER_H +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV +#include "src/core/lib/iomgr/timer_uv.h" +#else +#include "src/core/lib/iomgr/timer_generic.h" +#endif /* GRPC_UV */ + #include #include #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr.h" -typedef struct grpc_timer { - gpr_timespec deadline; - uint32_t heap_index; /* INVALID_HEAP_INDEX if not in heap */ - int triggered; - struct grpc_timer *next; - struct grpc_timer *prev; - grpc_closure closure; -} grpc_timer; +typedef struct grpc_timer grpc_timer; /* Initialize *timer. When expired or canceled, timer_cb will be called with *timer_cb_arg and status to indicate if it expired (SUCCESS) or was diff --git a/src/core/lib/iomgr/timer.c b/src/core/lib/iomgr/timer_generic.c similarity index 99% rename from src/core/lib/iomgr/timer.c rename to src/core/lib/iomgr/timer_generic.c index 9975fa16715..00058f9d86b 100644 --- a/src/core/lib/iomgr/timer.c +++ b/src/core/lib/iomgr/timer_generic.c @@ -31,6 +31,10 @@ * */ +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_TIMER_USE_GENERIC + #include "src/core/lib/iomgr/timer.h" #include @@ -382,3 +386,5 @@ bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now, ? GRPC_ERROR_NONE : GRPC_ERROR_CREATE("Shutting down timer system")); } + +#endif /* GRPC_TIMER_USE_GENERIC */ diff --git a/src/core/lib/iomgr/timer_generic.h b/src/core/lib/iomgr/timer_generic.h new file mode 100644 index 00000000000..e4494adb5fe --- /dev/null +++ b/src/core/lib/iomgr/timer_generic.h @@ -0,0 +1,49 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H +#define GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H + +#include +#include "src/core/lib/iomgr/exec_ctx.h" + +struct grpc_timer { + gpr_timespec deadline; + uint32_t heap_index; /* INVALID_HEAP_INDEX if not in heap */ + int triggered; + struct grpc_timer *next; + struct grpc_timer *prev; + grpc_closure closure; +}; + +#endif /* GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H */ diff --git a/src/core/lib/iomgr/timer_heap.c b/src/core/lib/iomgr/timer_heap.c index 2ad9bb9cd23..f736d335e6c 100644 --- a/src/core/lib/iomgr/timer_heap.c +++ b/src/core/lib/iomgr/timer_heap.c @@ -31,6 +31,10 @@ * */ +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_TIMER_USE_GENERIC + #include "src/core/lib/iomgr/timer_heap.h" #include @@ -144,3 +148,5 @@ grpc_timer *grpc_timer_heap_top(grpc_timer_heap *heap) { void grpc_timer_heap_pop(grpc_timer_heap *heap) { grpc_timer_heap_remove(heap, grpc_timer_heap_top(heap)); } + +#endif /* GRPC_TIMER_USE_GENERIC */ diff --git a/src/core/lib/iomgr/timer_uv.c b/src/core/lib/iomgr/timer_uv.c new file mode 100644 index 00000000000..ffeb08cb79e --- /dev/null +++ b/src/core/lib/iomgr/timer_uv.c @@ -0,0 +1,103 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#if GRPC_UV + +#include +#include + +#include "src/core/lib/iomgr/timer.h" + +#include + +static void timer_close_callback(uv_handle_t *handle) { + gpr_free(handle); +} + +static void stop_uv_timer(uv_timer_t *handle) { + uv_timer_stop(handle); + uv_unref((uv_handle_t*) handle); + gpr_log(GPR_DEBUG, "Closing uv_timer_t handle %p", handle); + uv_close((uv_handle_t*) handle, timer_close_callback); +} + +void run_expired_timer(uv_timer_t *handle) { + grpc_timer *timer = (grpc_timer*)handle->data; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + gpr_log(GPR_DEBUG, "Timer callback: %p", timer); + GPR_ASSERT(!timer->triggered); + timer->triggered = 1; + grpc_exec_ctx_sched(&exec_ctx, &timer->closure, GRPC_ERROR_NONE, NULL); + stop_uv_timer(handle); + grpc_exec_ctx_finish(&exec_ctx); +} + +void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer, + gpr_timespec deadline, grpc_iomgr_cb_func timer_cb, + void *timer_cb_arg, gpr_timespec now) { + uint64_t timeout; + grpc_closure_init(&timer->closure, timer_cb, timer_cb_arg); + if (gpr_time_cmp(deadline, now) <= 0) { + timer->triggered = 1; + grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_NONE, NULL); + return; + } + timer->triggered = 0; + timeout = (uint64_t)gpr_time_to_millis(gpr_time_sub(deadline, now)); + gpr_log(GPR_DEBUG, "Setting timer %p: %lu", timer, timeout); + timer->uv_timer = gpr_malloc(sizeof(uv_timer_t)); + uv_timer_init(uv_default_loop(), timer->uv_timer); + timer->uv_timer->data = timer; + uv_timer_start(timer->uv_timer, run_expired_timer, timeout, 0); +} + +void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) { + if (!timer->triggered) { + gpr_log(GPR_DEBUG, "Running cancelled timer callback"); + timer->triggered = 1; + grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_CANCELLED, NULL); + stop_uv_timer(timer->uv_timer); + } +} + +bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now, + gpr_timespec *next) { + return false; +} + +void grpc_timer_list_init(gpr_timespec now) {} +void grpc_timer_list_shutdown(grpc_exec_ctx *exec_ctx) {} + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/timer_uv.h b/src/core/lib/iomgr/timer_uv.h new file mode 100644 index 00000000000..d78d6a6ca2f --- /dev/null +++ b/src/core/lib/iomgr/timer_uv.h @@ -0,0 +1,47 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H +#define GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H + +#include + +#include "src/core/lib/iomgr/exec_ctx.h" + +struct grpc_timer { + grpc_closure closure; + uv_timer_t *uv_timer; + int triggered; +}; + +#endif /* GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H */ diff --git a/src/core/lib/iomgr/workqueue_uv.c b/src/core/lib/iomgr/workqueue_uv.c new file mode 100644 index 00000000000..5e4eb504acc --- /dev/null +++ b/src/core/lib/iomgr/workqueue_uv.c @@ -0,0 +1,62 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV + +#include "src/core/lib/iomgr/workqueue.h" + +// Minimal implementation of grpc_workqueue for libuv +// Works by directly enqueuing workqueue items onto the current execution +// context, which is at least correct, if not performant or in the spirit of +// workqueues. + +void grpc_workqueue_flush(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {} + +#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG +void grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file, int line, + const char *reason) {} +void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue, + const char *file, int line, const char *reason) {} +#else +void grpc_workqueue_ref(grpc_workqueue *workqueue) {} +void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {} +#endif + +void grpc_workqueue_enqueue(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue, + grpc_closure *closure, grpc_error *error) { + grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); +} + +#endif /* GPR_UV */ diff --git a/src/core/lib/iomgr/workqueue_uv.h b/src/core/lib/iomgr/workqueue_uv.h new file mode 100644 index 00000000000..be3f8e4d939 --- /dev/null +++ b/src/core/lib/iomgr/workqueue_uv.h @@ -0,0 +1,37 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_WORKQUEUE_UV_H +#define GRPC_CORE_LIB_IOMGR_WORKQUEUE_UV_H + +#endif /* GRPC_CORE_LIB_IOMGR_WORKQUEUE_UV_H */ diff --git a/src/core/lib/security/context/security_context.c b/src/core/lib/security/context/security_context.c index 127b13ee503..874cc054559 100644 --- a/src/core/lib/security/context/security_context.c +++ b/src/core/lib/security/context/security_context.c @@ -31,6 +31,11 @@ * */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include "src/core/lib/security/context/security_context.h" diff --git a/src/core/lib/security/context/security_context.h b/src/core/lib/security/context/security_context.h index 4e7666dfe31..b48d1d0ab71 100644 --- a/src/core/lib/security/context/security_context.h +++ b/src/core/lib/security/context/security_context.h @@ -34,6 +34,11 @@ #ifndef GRPC_CORE_LIB_SECURITY_CONTEXT_SECURITY_CONTEXT_H #define GRPC_CORE_LIB_SECURITY_CONTEXT_SECURITY_CONTEXT_H +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/security/credentials/credentials.h" diff --git a/src/core/lib/security/credentials/credentials.h b/src/core/lib/security/credentials/credentials.h index 8e9d842eadd..bfdfcb67611 100644 --- a/src/core/lib/security/credentials/credentials.h +++ b/src/core/lib/security/credentials/credentials.h @@ -34,6 +34,11 @@ #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_CREDENTIALS_H #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_CREDENTIALS_H +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include #include diff --git a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c index c22ea5c468b..e9638c5a229 100644 --- a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +++ b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c @@ -31,6 +31,11 @@ * */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include "src/core/lib/security/credentials/oauth2/oauth2_credentials.h" #include diff --git a/src/core/lib/security/transport/server_auth_filter.c b/src/core/lib/security/transport/server_auth_filter.c index def16c82299..3339c0a3bef 100644 --- a/src/core/lib/security/transport/server_auth_filter.c +++ b/src/core/lib/security/transport/server_auth_filter.c @@ -31,6 +31,11 @@ * */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include "src/core/lib/security/context/security_context.h" diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c index 772681109a0..6a38b4b4278 100644 --- a/src/core/lib/surface/call.c +++ b/src/core/lib/surface/call.c @@ -30,6 +30,12 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ + +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include #include #include diff --git a/src/core/lib/surface/init_secure.c b/src/core/lib/surface/init_secure.c index 7ee7b51568e..9a9342ff2c9 100644 --- a/src/core/lib/surface/init_secure.c +++ b/src/core/lib/surface/init_secure.c @@ -31,6 +31,11 @@ * */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include "src/core/lib/surface/init.h" #include diff --git a/src/core/lib/tsi/ssl_transport_security.c b/src/core/lib/tsi/ssl_transport_security.c index f6e8c518e32..116b66a1790 100644 --- a/src/core/lib/tsi/ssl_transport_security.c +++ b/src/core/lib/tsi/ssl_transport_security.c @@ -31,6 +31,11 @@ * */ +/* We currently need this at the top of the file if we import some iomgr + headers because if we are building with libuv, those headers will include + uv.h, which needs to be included before other system headers */ +#include "src/core/lib/iomgr/port.h" + #include "src/core/lib/tsi/ssl_transport_security.h" #include "src/core/lib/iomgr/socket_utils.h" diff --git a/src/node/ext/call.cc b/src/node/ext/call.cc index 9f023b58831..b48a7bd6987 100644 --- a/src/node/ext/call.cc +++ b/src/node/ext/call.cc @@ -45,6 +45,7 @@ #include "byte_buffer.h" #include "call.h" #include "channel.h" +#include "completion_queue.h" #include "completion_queue_async_worker.h" #include "call_credentials.h" #include "timeval.h" @@ -222,6 +223,9 @@ class SendMetadataOp : public Op { out->data.send_initial_metadata.metadata = array.metadata; return true; } + bool IsFinalOp() { + return false; + } protected: std::string GetTypeString() const { return "send_metadata"; @@ -263,6 +267,9 @@ class SendMessageOp : public Op { resources->handles.push_back(unique_ptr(handle)); return true; } + bool IsFinalOp() { + return false; + } protected: std::string GetTypeString() const { return "send_message"; @@ -281,6 +288,9 @@ class SendClientCloseOp : public Op { shared_ptr resources) { return true; } + bool IsFinalOp() { + return false; + } protected: std::string GetTypeString() const { return "client_close"; @@ -341,6 +351,9 @@ class SendServerStatusOp : public Op { out->data.send_status_from_server.status_details = **str; return true; } + bool IsFinalOp() { + return true; + } protected: std::string GetTypeString() const { return "send_status"; @@ -367,6 +380,9 @@ class GetMetadataOp : public Op { out->data.recv_initial_metadata = &recv_metadata; return true; } + bool IsFinalOp() { + return false; + } protected: std::string GetTypeString() const { @@ -397,6 +413,9 @@ class ReadMessageOp : public Op { out->data.recv_message = &recv_message; return true; } + bool IsFinalOp() { + return false; + } protected: std::string GetTypeString() const { @@ -442,6 +461,9 @@ class ClientStatusOp : public Op { ParseMetadata(&metadata_array)); return scope.Escape(status_obj); } + bool IsFinalOp() { + return true; + } protected: std::string GetTypeString() const { return "status"; @@ -465,6 +487,9 @@ class ServerCloseResponseOp : public Op { out->data.recv_close_on_server.cancelled = &cancelled; return true; } + bool IsFinalOp() { + return false; + } protected: std::string GetTypeString() const { @@ -476,8 +501,8 @@ class ServerCloseResponseOp : public Op { }; tag::tag(Callback *callback, OpVec *ops, - shared_ptr resources) : - callback(callback), ops(ops), resources(resources){ + shared_ptr resources, Call *call) : + callback(callback), ops(ops), resources(resources), call(call){ } tag::~tag() { @@ -502,16 +527,36 @@ Callback *GetTagCallback(void *tag) { return tag_struct->callback; } +void CompleteTag(void *tag) { + struct tag *tag_struct = reinterpret_cast(tag); + bool is_final_op = false; + if (tag_struct->call == NULL) { + return; + } + for (vector >::iterator it = tag_struct->ops->begin(); + it != tag_struct->ops->end(); ++it) { + Op *op_ptr = it->get(); + if (op_ptr->IsFinalOp()) { + is_final_op = true; + } + } + tag_struct->call->CompleteBatch(is_final_op); +} + void DestroyTag(void *tag) { struct tag *tag_struct = reinterpret_cast(tag); delete tag_struct; } -Call::Call(grpc_call *call) : wrapped_call(call) { +Call::Call(grpc_call *call) : wrapped_call(call), + pending_batches(0), + has_final_op_completed(false) { } Call::~Call() { - grpc_call_destroy(wrapped_call); + if (wrapped_call != NULL) { + grpc_call_destroy(wrapped_call); + } } void Call::Init(Local exports) { @@ -552,6 +597,17 @@ Local Call::WrapStruct(grpc_call *call) { } } +void Call::CompleteBatch(bool is_final_op) { + if (is_final_op) { + this->has_final_op_completed = true; + } + this->pending_batches--; + if (this->has_final_op_completed && this->pending_batches == 0) { + grpc_call_destroy(this->wrapped_call); + this->wrapped_call = NULL; + } +} + NAN_METHOD(Call::New) { if (info.IsConstructCall()) { Call *call; @@ -602,12 +658,12 @@ NAN_METHOD(Call::New) { Utf8String host_override(info[3]); wrapped_call = grpc_channel_create_call( wrapped_channel, parent_call, propagate_flags, - CompletionQueueAsyncWorker::GetQueue(), *method, + GetCompletionQueue(), *method, *host_override, MillisecondsToTimespec(deadline), NULL); } else if (info[3]->IsUndefined() || info[3]->IsNull()) { wrapped_call = grpc_channel_create_call( wrapped_channel, parent_call, propagate_flags, - CompletionQueueAsyncWorker::GetQueue(), *method, + GetCompletionQueue(), *method, NULL, MillisecondsToTimespec(deadline), NULL); } else { return Nan::ThrowTypeError("Call's fourth argument must be a string"); @@ -697,11 +753,12 @@ NAN_METHOD(Call::StartBatch) { Callback *callback = new Callback(callback_func); grpc_call_error error = grpc_call_start_batch( call->wrapped_call, &ops[0], nops, new struct tag( - callback, op_vector.release(), resources), NULL); + callback, op_vector.release(), resources, call), NULL); if (error != GRPC_CALL_OK) { return Nan::ThrowError(nanErrorWithCode("startBatch failed", error)); } - CompletionQueueAsyncWorker::Next(); + call->pending_batches++; + CompletionQueueNext(); } NAN_METHOD(Call::Cancel) { diff --git a/src/node/ext/call.h b/src/node/ext/call.h index 1e3c3ba18d5..31c6566d145 100644 --- a/src/node/ext/call.h +++ b/src/node/ext/call.h @@ -66,34 +66,6 @@ bool CreateMetadataArray(v8::Local metadata, grpc_metadata_array *array, shared_ptr resources); -class Op { - public: - virtual v8::Local GetNodeValue() const = 0; - virtual bool ParseOp(v8::Local value, grpc_op *out, - shared_ptr resources) = 0; - virtual ~Op(); - v8::Local GetOpType() const; - - protected: - virtual std::string GetTypeString() const = 0; -}; - -typedef std::vector> OpVec; -struct tag { - tag(Nan::Callback *callback, OpVec *ops, - shared_ptr resources); - ~tag(); - Nan::Callback *callback; - OpVec *ops; - shared_ptr resources; -}; - -v8::Local GetTagNodeValue(void *tag); - -Nan::Callback *GetTagCallback(void *tag); - -void DestroyTag(void *tag); - /* Wrapper class for grpc_call structs. */ class Call : public Nan::ObjectWrap { public: @@ -102,6 +74,8 @@ class Call : public Nan::ObjectWrap { /* Wrap a grpc_call struct in a javascript object */ static v8::Local WrapStruct(grpc_call *call); + void CompleteBatch(bool is_final_op); + private: explicit Call(grpc_call *call); ~Call(); @@ -121,8 +95,46 @@ class Call : public Nan::ObjectWrap { static Nan::Persistent fun_tpl; grpc_call *wrapped_call; + // The number of ops that were started but not completed on this call + int pending_batches; + /* Indicates whether the "final" op on a call has completed. For a client + call, this is GRPC_OP_RECV_STATUS_ON_CLIENT and for a server call, this + is GRPC_OP_SEND_STATUS_FROM_SERVER */ + bool has_final_op_completed; }; +class Op { + public: + virtual v8::Local GetNodeValue() const = 0; + virtual bool ParseOp(v8::Local value, grpc_op *out, + shared_ptr resources) = 0; + virtual ~Op(); + v8::Local GetOpType() const; + virtual bool IsFinalOp() = 0; + + protected: + virtual std::string GetTypeString() const = 0; +}; + +typedef std::vector> OpVec; +struct tag { + tag(Nan::Callback *callback, OpVec *ops, + shared_ptr resources, Call *call); + ~tag(); + Nan::Callback *callback; + OpVec *ops; + shared_ptr resources; + Call *call; +}; + +v8::Local GetTagNodeValue(void *tag); + +Nan::Callback *GetTagCallback(void *tag); + +void DestroyTag(void *tag); + +void CompleteTag(void *tag); + } // namespace node } // namespace grpc diff --git a/src/node/ext/channel.cc b/src/node/ext/channel.cc index 00fcca6dc84..c4028170e73 100644 --- a/src/node/ext/channel.cc +++ b/src/node/ext/channel.cc @@ -41,6 +41,7 @@ #include "grpc/grpc_security.h" #include "call.h" #include "channel.h" +#include "completion_queue.h" #include "completion_queue_async_worker.h" #include "channel_credentials.h" #include "timeval.h" @@ -140,6 +141,7 @@ void DeallocateChannelArgs(grpc_channel_args *channel_args) { Channel::Channel(grpc_channel *channel) : wrapped_channel(channel) {} Channel::~Channel() { + gpr_log(GPR_DEBUG, "Destroying channel"); if (wrapped_channel != NULL) { grpc_channel_destroy(wrapped_channel); } @@ -276,11 +278,11 @@ NAN_METHOD(Channel::WatchConnectivityState) { unique_ptr ops(new OpVec()); grpc_channel_watch_connectivity_state( channel->wrapped_channel, last_state, MillisecondsToTimespec(deadline), - CompletionQueueAsyncWorker::GetQueue(), + GetCompletionQueue(), new struct tag(callback, ops.release(), - shared_ptr(nullptr))); - CompletionQueueAsyncWorker::Next(); + shared_ptr(nullptr), NULL)); + CompletionQueueNext(); } } // namespace node diff --git a/src/node/ext/completion_queue.cc b/src/node/ext/completion_queue.cc new file mode 100644 index 00000000000..fcfa77b39ce --- /dev/null +++ b/src/node/ext/completion_queue.cc @@ -0,0 +1,114 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include +#include + +#include "call.h" +#include "completion_queue.h" +#include "completion_queue_async_worker.h" + +namespace grpc { +namespace node { + +using v8::Local; +using v8::Object; +using v8::Value; + +grpc_completion_queue *queue; +uv_prepare_t prepare; +int pending_batches; + +void drain_completion_queue(uv_prepare_t *handle) { + Nan::HandleScope scope; + grpc_event event; + (void)handle; + do { + event = grpc_completion_queue_next( + queue, gpr_inf_past(GPR_CLOCK_MONOTONIC), NULL); + + if (event.type == GRPC_OP_COMPLETE) { + Nan::Callback *callback = grpc::node::GetTagCallback(event.tag); + if (event.success) { + Local argv[] = {Nan::Null(), + grpc::node::GetTagNodeValue(event.tag)}; + callback->Call(2, argv); + } else { + Local argv[] = {Nan::Error( + "The async function encountered an error")}; + callback->Call(1, argv); + } + grpc::node::CompleteTag(event.tag); + grpc::node::DestroyTag(event.tag); + pending_batches--; + if (pending_batches == 0) { + uv_prepare_stop(&prepare); + } + } + } while (event.type != GRPC_QUEUE_TIMEOUT); +} + +grpc_completion_queue *GetCompletionQueue() { +#ifdef GRPC_UV + return queue; +#else + return CompletionQueueAsyncWorker::GetQueue(); +#endif +} + +void CompletionQueueNext() { +#ifdef GRPC_UV + if (pending_batches == 0) { + GPR_ASSERT(!uv_is_active((uv_handle_t *)&prepare)); + uv_prepare_start(&prepare, drain_completion_queue); + } + pending_batches++; +#else + CompletionQueueAsyncWorker::Next(); +#endif +} + +void CompletionQueueInit(Local exports) { +#ifdef GRPC_UV + queue = grpc_completion_queue_create(NULL); + uv_prepare_init(uv_default_loop(), &prepare); + pending_batches = 0; +#else + CompletionQueueAsyncWorker::Init(exports); +#endif +} + +} // namespace node +} // namespace grpc diff --git a/src/node/ext/completion_queue.h b/src/node/ext/completion_queue.h new file mode 100644 index 00000000000..bf280f768b0 --- /dev/null +++ b/src/node/ext/completion_queue.h @@ -0,0 +1,46 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include + +namespace grpc { +namespace node { + +grpc_completion_queue *GetCompletionQueue(); + +void CompletionQueueNext(); + +void CompletionQueueInit(v8::Local exports); + +} // namespace node +} // namespace grpc diff --git a/src/node/ext/completion_queue_async_worker.cc b/src/node/ext/completion_queue_async_worker.cc index 619ea415156..f5e03b277b3 100644 --- a/src/node/ext/completion_queue_async_worker.cc +++ b/src/node/ext/completion_queue_async_worker.cc @@ -74,6 +74,7 @@ void CompletionQueueAsyncWorker::Execute() { grpc_completion_queue *CompletionQueueAsyncWorker::GetQueue() { return queue; } void CompletionQueueAsyncWorker::Next() { +#ifndef GRPC_UV Nan::HandleScope scope; if (current_threads < max_queue_threads) { current_threads += 1; @@ -85,6 +86,7 @@ void CompletionQueueAsyncWorker::Next() { GPR_ASSERT(current_threads <= max_queue_threads); GPR_ASSERT((current_threads == max_queue_threads) || (waiting_next_calls == 0)); +#endif } void CompletionQueueAsyncWorker::Init(Local exports) { diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc index 745b5023d59..a246a8c678b 100644 --- a/src/node/ext/node_grpc.cc +++ b/src/node/ext/node_grpc.cc @@ -50,6 +50,7 @@ #include "completion_queue_async_worker.h" #include "server_credentials.h" #include "timeval.h" +#include "completion_queue.h" using v8::FunctionTemplate; using v8::Local; @@ -261,8 +262,8 @@ void InitLogConstants(Local exports) { Nan::HandleScope scope; Local log_verbosity = Nan::New(); Nan::Set(exports, Nan::New("logVerbosity").ToLocalChecked(), log_verbosity); - Local DEBUG(Nan::New(GPR_LOG_SEVERITY_DEBUG)); - Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), DEBUG); + Local DEBUG_LOG(Nan::New(GPR_LOG_SEVERITY_DEBUG)); + Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), DEBUG_LOG); Local INFO(Nan::New(GPR_LOG_SEVERITY_INFO)); Nan::Set(log_verbosity, Nan::New("INFO").ToLocalChecked(), INFO); Local LOG_ERROR(Nan::New(GPR_LOG_SEVERITY_ERROR)); @@ -414,6 +415,12 @@ NAN_METHOD(SetLogVerbosity) { gpr_set_log_verbosity(severity); } +uv_signal_t signal_handle; + +void signal_callback(uv_signal_t *handle, int signum) { + uv_print_all_handles(uv_default_loop(), stderr); +} + void init(Local exports) { Nan::HandleScope scope; grpc_init(); @@ -428,14 +435,20 @@ void init(Local exports) { InitWriteFlags(exports); InitLogConstants(exports); + uv_signal_init(uv_default_loop(), &signal_handle); + uv_signal_start(&signal_handle, signal_callback, SIGUSR2); + uv_unref((uv_handle_t *)&signal_handle); + + grpc::node::Call::Init(exports); grpc::node::CallCredentials::Init(exports); grpc::node::Channel::Init(exports); grpc::node::ChannelCredentials::Init(exports); grpc::node::Server::Init(exports); - grpc::node::CompletionQueueAsyncWorker::Init(exports); grpc::node::ServerCredentials::Init(exports); + grpc::node::CompletionQueueInit(exports); + // Attach a few utility functions directly to the module Nan::Set(exports, Nan::New("metadataKeyIsLegal").ToLocalChecked(), Nan::GetFunction( diff --git a/src/node/ext/server.cc b/src/node/ext/server.cc index dd1b777ac88..29f31ff15ee 100644 --- a/src/node/ext/server.cc +++ b/src/node/ext/server.cc @@ -40,6 +40,7 @@ #include #include "call.h" +#include "completion_queue.h" #include "completion_queue_async_worker.h" #include "grpc/grpc.h" #include "grpc/grpc_security.h" @@ -64,6 +65,7 @@ using v8::Array; using v8::Boolean; using v8::Date; using v8::Exception; +using v8::External; using v8::Function; using v8::FunctionTemplate; using v8::Local; @@ -75,6 +77,8 @@ using v8::Value; Nan::Callback *Server::constructor; Persistent Server::fun_tpl; +static Callback *shutdown_callback; + class NewCallOp : public Op { public: NewCallOp() { @@ -111,6 +115,9 @@ class NewCallOp : public Op { shared_ptr resources) { return true; } + bool IsFinalOp() { + return false; + } grpc_call *call; grpc_call_details details; @@ -120,17 +127,50 @@ class NewCallOp : public Op { std::string GetTypeString() const { return "new_call"; } }; +class ServerShutdownOp : public Op { + public: + ServerShutdownOp(grpc_server *server): server(server) { + } + + ~ServerShutdownOp() { + } + + Local GetNodeValue() const { + return Nan::New(reinterpret_cast(server)); + } + + bool ParseOp(Local value, grpc_op *out, + shared_ptr resources) { + return true; + } + bool IsFinalOp() { + return false; + } + + grpc_server *server; + + protected: + std::string GetTypeString() const { return "shutdown"; } +}; + +NAN_METHOD(ServerShutdownCallback) { + if (!info[0]->IsNull()) { + return Nan::ThrowError("forceShutdown failed somehow"); + } + MaybeLocal maybe_result = Nan::To(info[1]); + Local result = maybe_result.ToLocalChecked(); + Local server_val = Nan::Get( + result, Nan::New("shutdown").ToLocalChecked()).ToLocalChecked(); + Local server_extern = server_val.As(); + grpc_server *server = reinterpret_cast(server_extern->Value()); + grpc_server_destroy(server); +} + Server::Server(grpc_server *server) : wrapped_server(server) { - shutdown_queue = grpc_completion_queue_create(NULL); - grpc_server_register_non_listening_completion_queue(server, shutdown_queue, - NULL); } Server::~Server() { this->ShutdownServer(); - grpc_completion_queue_shutdown(this->shutdown_queue); - grpc_server_destroy(this->wrapped_server); - grpc_completion_queue_destroy(this->shutdown_queue); } void Server::Init(Local exports) { @@ -147,6 +187,11 @@ void Server::Init(Local exports) { Local ctr = Nan::GetFunction(tpl).ToLocalChecked(); Nan::Set(exports, Nan::New("Server").ToLocalChecked(), ctr); constructor = new Callback(ctr); + + Localcallback_tpl = + Nan::New(ServerShutdownCallback); + shutdown_callback = new Callback( + Nan::GetFunction(callback_tpl).ToLocalChecked()); } bool Server::HasInstance(Local val) { @@ -155,11 +200,19 @@ bool Server::HasInstance(Local val) { } void Server::ShutdownServer() { - grpc_server_shutdown_and_notify(this->wrapped_server, this->shutdown_queue, - NULL); - grpc_server_cancel_all_calls(this->wrapped_server); - grpc_completion_queue_pluck(this->shutdown_queue, NULL, - gpr_inf_future(GPR_CLOCK_REALTIME), NULL); + if (this->wrapped_server != NULL) { + ServerShutdownOp *op = new ServerShutdownOp(this->wrapped_server); + unique_ptr ops(new OpVec()); + ops->push_back(unique_ptr(op)); + + grpc_server_shutdown_and_notify( + this->wrapped_server, GetCompletionQueue(), + new struct tag(new Callback(**shutdown_callback), ops.release(), + shared_ptr(nullptr), NULL)); + grpc_server_cancel_all_calls(this->wrapped_server); + CompletionQueueNext(); + this->wrapped_server = NULL; + } } NAN_METHOD(Server::New) { @@ -179,7 +232,7 @@ NAN_METHOD(Server::New) { } } grpc_server *wrapped_server; - grpc_completion_queue *queue = CompletionQueueAsyncWorker::GetQueue(); + grpc_completion_queue *queue = GetCompletionQueue(); grpc_channel_args *channel_args; if (!ParseChannelArgs(info[0], &channel_args)) { DeallocateChannelArgs(channel_args); @@ -205,14 +258,14 @@ NAN_METHOD(Server::RequestCall) { ops->push_back(unique_ptr(op)); grpc_call_error error = grpc_server_request_call( server->wrapped_server, &op->call, &op->details, &op->request_metadata, - CompletionQueueAsyncWorker::GetQueue(), - CompletionQueueAsyncWorker::GetQueue(), + GetCompletionQueue(), + GetCompletionQueue(), new struct tag(new Callback(info[0].As()), ops.release(), - shared_ptr(nullptr))); + shared_ptr(nullptr), NULL)); if (error != GRPC_CALL_OK) { return Nan::ThrowError(nanErrorWithCode("requestCall failed", error)); } - CompletionQueueAsyncWorker::Next(); + CompletionQueueNext(); } NAN_METHOD(Server::AddHttp2Port) { @@ -259,10 +312,10 @@ NAN_METHOD(Server::TryShutdown) { Server *server = ObjectWrap::Unwrap(info.This()); unique_ptr ops(new OpVec()); grpc_server_shutdown_and_notify( - server->wrapped_server, CompletionQueueAsyncWorker::GetQueue(), + server->wrapped_server, GetCompletionQueue(), new struct tag(new Nan::Callback(info[0].As()), ops.release(), - shared_ptr(nullptr))); - CompletionQueueAsyncWorker::Next(); + shared_ptr(nullptr), NULL)); + CompletionQueueNext(); } NAN_METHOD(Server::ForceShutdown) { diff --git a/src/node/ext/server.h b/src/node/ext/server.h index ab5fc210e8a..9e6a7bd1e0b 100644 --- a/src/node/ext/server.h +++ b/src/node/ext/server.h @@ -73,7 +73,6 @@ class Server : public Nan::ObjectWrap { static Nan::Persistent fun_tpl; grpc_server *wrapped_server; - grpc_completion_queue *shutdown_queue; }; } // namespace node diff --git a/src/node/ext/server_credentials.cc b/src/node/ext/server_credentials.cc index a817ade5183..0ff58bb2092 100644 --- a/src/node/ext/server_credentials.cc +++ b/src/node/ext/server_credentials.cc @@ -169,18 +169,18 @@ NAN_METHOD(ServerCredentials::CreateSsl) { for(uint32_t i = 0; i < key_cert_pair_count; i++) { Local pair_val = Nan::Get(pair_list, i).ToLocalChecked(); if (!pair_val->IsObject()) { - delete key_cert_pairs; + delete[] key_cert_pairs; return Nan::ThrowTypeError("Key/cert pairs must be objects"); } Local pair_obj = Nan::To(pair_val).ToLocalChecked(); Local maybe_key = Nan::Get(pair_obj, key_key).ToLocalChecked(); Local maybe_cert = Nan::Get(pair_obj, cert_key).ToLocalChecked(); if (!::node::Buffer::HasInstance(maybe_key)) { - delete key_cert_pairs; + delete[] key_cert_pairs; return Nan::ThrowTypeError("private_key must be a Buffer"); } if (!::node::Buffer::HasInstance(maybe_cert)) { - delete key_cert_pairs; + delete[] key_cert_pairs; return Nan::ThrowTypeError("cert_chain must be a Buffer"); } key_cert_pairs[i].private_key = ::node::Buffer::Data(maybe_key); @@ -189,7 +189,7 @@ NAN_METHOD(ServerCredentials::CreateSsl) { grpc_server_credentials *creds = grpc_ssl_server_credentials_create_ex( root_certs, key_cert_pairs, key_cert_pair_count, client_certificate_request, NULL); - delete key_cert_pairs; + delete[] key_cert_pairs; if (creds == NULL) { info.GetReturnValue().SetNull(); } else { diff --git a/src/node/index.js b/src/node/index.js index 9fb6faa5d7c..a294aad8ee6 100644 --- a/src/node/index.js +++ b/src/node/index.js @@ -219,3 +219,7 @@ exports.getClientChannel = client.getClientChannel; * @see module:src/client.waitForClientReady */ exports.waitForClientReady = client.waitForClientReady; + +exports.closeClient = function closeClient(client_obj) { + client.getClientChannel(client_obj).close(); +}; diff --git a/src/node/src/client.js b/src/node/src/client.js index f75f951eb8d..9c1562e8b8c 100644 --- a/src/node/src/client.js +++ b/src/node/src/client.js @@ -382,6 +382,7 @@ function makeUnaryRequestFunction(method, serialize, deserialize) { if (args.options) { message.grpcWriteFlags = args.options.flags; } + client_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata._getCoreRepresentation(); client_batch[grpc.opType.SEND_MESSAGE] = message; diff --git a/src/node/src/grpc_extension.js b/src/node/src/grpc_extension.js index 6a8fe2c03c9..63a281ddbcf 100644 --- a/src/node/src/grpc_extension.js +++ b/src/node/src/grpc_extension.js @@ -31,7 +31,7 @@ * */ -var binary = require('node-pre-gyp'); +var binary = require('node-pre-gyp/lib/pre-binding'); var path = require('path'); var binding_path = binary.find(path.resolve(path.join(__dirname, '../../../package.json'))); diff --git a/src/node/test/async_test.js b/src/node/test/async_test.js index c46e745116e..7b467e5475f 100644 --- a/src/node/test/async_test.js +++ b/src/node/test/async_test.js @@ -61,6 +61,7 @@ describe('Async functionality', function() { done(); }); after(function() { + grpc.closeClient(math_client); server.forceShutdown(); }); it('should not hang', function(done) { diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index ab7b4611787..9fe0ef3c007 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -104,29 +104,38 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/iocp_windows.c', 'src/core/lib/iomgr/iomgr.c', 'src/core/lib/iomgr/iomgr_posix.c', + 'src/core/lib/iomgr/iomgr_uv.c', 'src/core/lib/iomgr/iomgr_windows.c', 'src/core/lib/iomgr/load_file.c', 'src/core/lib/iomgr/network_status_tracker.c', 'src/core/lib/iomgr/polling_entity.c', + 'src/core/lib/iomgr/pollset_set_uv.c', 'src/core/lib/iomgr/pollset_set_windows.c', + 'src/core/lib/iomgr/pollset_uv.c', 'src/core/lib/iomgr/pollset_windows.c', 'src/core/lib/iomgr/resolve_address_posix.c', + 'src/core/lib/iomgr/resolve_address_uv.c', 'src/core/lib/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/sockaddr_utils.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', + 'src/core/lib/iomgr/socket_utils_uv.c', 'src/core/lib/iomgr/socket_utils_windows.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', + 'src/core/lib/iomgr/tcp_client_uv.c', 'src/core/lib/iomgr/tcp_client_windows.c', 'src/core/lib/iomgr/tcp_posix.c', 'src/core/lib/iomgr/tcp_server_posix.c', + 'src/core/lib/iomgr/tcp_server_uv.c', 'src/core/lib/iomgr/tcp_server_windows.c', + 'src/core/lib/iomgr/tcp_uv.c', 'src/core/lib/iomgr/tcp_windows.c', 'src/core/lib/iomgr/time_averaged_stats.c', - 'src/core/lib/iomgr/timer.c', + 'src/core/lib/iomgr/timer_generic.c', 'src/core/lib/iomgr/timer_heap.c', + 'src/core/lib/iomgr/timer_uv.c', 'src/core/lib/iomgr/udp_server.c', 'src/core/lib/iomgr/unix_sockets_posix.c', 'src/core/lib/iomgr/unix_sockets_posix_noop.c', @@ -135,6 +144,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/wakeup_fd_pipe.c', 'src/core/lib/iomgr/wakeup_fd_posix.c', 'src/core/lib/iomgr/workqueue_posix.c', + 'src/core/lib/iomgr/workqueue_uv.c', 'src/core/lib/iomgr/workqueue_windows.c', 'src/core/lib/json/json.c', 'src/core/lib/json/json_reader.c', diff --git a/templates/binding.gyp.template b/templates/binding.gyp.template index 40d430f7925..e6592acebbc 100644 --- a/templates/binding.gyp.template +++ b/templates/binding.gyp.template @@ -44,6 +44,9 @@ '.', 'include' ], + 'defines': [ + 'GRPC_UV' + ], 'conditions': [ ['OS == "win"', { "include_dirs": [ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 24c78091c74..fdda3c0a380 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -825,6 +825,7 @@ src/core/lib/iomgr/polling_entity.h \ src/core/lib/iomgr/pollset.h \ src/core/lib/iomgr/pollset_set.h \ src/core/lib/iomgr/pollset_set_windows.h \ +src/core/lib/iomgr/pollset_uv.h \ src/core/lib/iomgr/pollset_windows.h \ src/core/lib/iomgr/port.h \ src/core/lib/iomgr/resolve_address.h \ @@ -838,16 +839,20 @@ src/core/lib/iomgr/socket_windows.h \ src/core/lib/iomgr/tcp_client.h \ src/core/lib/iomgr/tcp_posix.h \ src/core/lib/iomgr/tcp_server.h \ +src/core/lib/iomgr/tcp_uv.h \ src/core/lib/iomgr/tcp_windows.h \ src/core/lib/iomgr/time_averaged_stats.h \ src/core/lib/iomgr/timer.h \ +src/core/lib/iomgr/timer_generic.h \ src/core/lib/iomgr/timer_heap.h \ +src/core/lib/iomgr/timer_uv.h \ src/core/lib/iomgr/udp_server.h \ src/core/lib/iomgr/unix_sockets_posix.h \ src/core/lib/iomgr/wakeup_fd_pipe.h \ src/core/lib/iomgr/wakeup_fd_posix.h \ src/core/lib/iomgr/workqueue.h \ src/core/lib/iomgr/workqueue_posix.h \ +src/core/lib/iomgr/workqueue_uv.h \ src/core/lib/iomgr/workqueue_windows.h \ src/core/lib/json/json.h \ src/core/lib/json/json_common.h \ @@ -980,29 +985,38 @@ src/core/lib/iomgr/executor.c \ src/core/lib/iomgr/iocp_windows.c \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ +src/core/lib/iomgr/iomgr_uv.c \ src/core/lib/iomgr/iomgr_windows.c \ src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/network_status_tracker.c \ src/core/lib/iomgr/polling_entity.c \ +src/core/lib/iomgr/pollset_set_uv.c \ src/core/lib/iomgr/pollset_set_windows.c \ +src/core/lib/iomgr/pollset_uv.c \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ +src/core/lib/iomgr/resolve_address_uv.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ +src/core/lib/iomgr/socket_utils_uv.c \ src/core/lib/iomgr/socket_utils_windows.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ +src/core/lib/iomgr/tcp_client_uv.c \ src/core/lib/iomgr/tcp_client_windows.c \ src/core/lib/iomgr/tcp_posix.c \ src/core/lib/iomgr/tcp_server_posix.c \ +src/core/lib/iomgr/tcp_server_uv.c \ src/core/lib/iomgr/tcp_server_windows.c \ +src/core/lib/iomgr/tcp_uv.c \ src/core/lib/iomgr/tcp_windows.c \ src/core/lib/iomgr/time_averaged_stats.c \ -src/core/lib/iomgr/timer.c \ +src/core/lib/iomgr/timer_generic.c \ src/core/lib/iomgr/timer_heap.c \ +src/core/lib/iomgr/timer_uv.c \ src/core/lib/iomgr/udp_server.c \ src/core/lib/iomgr/unix_sockets_posix.c \ src/core/lib/iomgr/unix_sockets_posix_noop.c \ @@ -1011,6 +1025,7 @@ src/core/lib/iomgr/wakeup_fd_nospecial.c \ src/core/lib/iomgr/wakeup_fd_pipe.c \ src/core/lib/iomgr/wakeup_fd_posix.c \ src/core/lib/iomgr/workqueue_posix.c \ +src/core/lib/iomgr/workqueue_uv.c \ src/core/lib/iomgr/workqueue_windows.c \ src/core/lib/json/json.c \ src/core/lib/json/json_reader.c \ diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index 4dfd01fc663..6fa3abaece5 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -343,11 +343,20 @@ class NodeLanguage: # 'node_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') + + # 50 | 90 | 95 | 99 | 99.9 + # 323834.797877769 | 432510.52549709007 | 458703.85481928807 | 507691.6539182514 | 3826148.8700816636 + # 272716.21113941644 | 307298.29139655043 | 329730.74530904385 | 413965.4319992619 | 2518204.1519497186 yield _ping_pong_scenario( 'node_protobuf_unary_ping_pong', rpc_type='UNARY', client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', categories=[SMOKETEST]) + yield _ping_pong_scenario( + 'cpp_to_node_unary_ping_pong', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='async_server', + client_language='c++') + yield _ping_pong_scenario( 'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', @@ -548,7 +557,7 @@ class JavaLanguage: async_server_threads=1, secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) - # TODO(jtattermusch): add scenarios java vs C++ + # TODO(jtattermusch): add scenarios java vs C++ def __str__(self): return 'java' @@ -572,7 +581,7 @@ class GoLanguage: smoketest_categories = [SMOKETEST] if secure else [] # ASYNC_GENERIC_SERVER for Go actually uses a sync streaming server, - # but that's mostly because of lack of better name of the enum value. + # but that's mostly because of lack of better name of the enum value. yield _ping_pong_scenario( 'go_generic_sync_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', client_type='SYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', @@ -619,7 +628,7 @@ class GoLanguage: secure=secure, categories=[SCALABLE]) - # TODO(jtattermusch): add scenarios go vs C++ + # TODO(jtattermusch): add scenarios go vs C++ def __str__(self): return 'go' diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index b3c217196ba..01cd177c3d7 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -5851,6 +5851,7 @@ "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", + "src/core/lib/iomgr/pollset_uv.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", @@ -5864,16 +5865,20 @@ "src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", + "src/core/lib/iomgr/tcp_uv.h", "src/core/lib/iomgr/tcp_windows.h", "src/core/lib/iomgr/time_averaged_stats.h", "src/core/lib/iomgr/timer.h", + "src/core/lib/iomgr/timer_generic.h", "src/core/lib/iomgr/timer_heap.h", + "src/core/lib/iomgr/timer_uv.h", "src/core/lib/iomgr/udp_server.h", "src/core/lib/iomgr/unix_sockets_posix.h", "src/core/lib/iomgr/wakeup_fd_pipe.h", "src/core/lib/iomgr/wakeup_fd_posix.h", "src/core/lib/iomgr/workqueue.h", "src/core/lib/iomgr/workqueue_posix.h", + "src/core/lib/iomgr/workqueue_uv.h", "src/core/lib/iomgr/workqueue_windows.h", "src/core/lib/json/json.h", "src/core/lib/json/json_common.h", @@ -5965,6 +5970,7 @@ "src/core/lib/iomgr/iomgr_internal.h", "src/core/lib/iomgr/iomgr_posix.c", "src/core/lib/iomgr/iomgr_posix.h", + "src/core/lib/iomgr/iomgr_uv.c", "src/core/lib/iomgr/iomgr_windows.c", "src/core/lib/iomgr/load_file.c", "src/core/lib/iomgr/load_file.h", @@ -5974,13 +5980,17 @@ "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", + "src/core/lib/iomgr/pollset_set_uv.c", "src/core/lib/iomgr/pollset_set_windows.c", "src/core/lib/iomgr/pollset_set_windows.h", + "src/core/lib/iomgr/pollset_uv.c", + "src/core/lib/iomgr/pollset_uv.h", "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/resolve_address_posix.c", + "src/core/lib/iomgr/resolve_address_uv.c", "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", @@ -5992,25 +6002,33 @@ "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", "src/core/lib/iomgr/socket_utils_posix.h", + "src/core/lib/iomgr/socket_utils_uv.c", "src/core/lib/iomgr/socket_utils_windows.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_client_posix.c", + "src/core/lib/iomgr/tcp_client_uv.c", "src/core/lib/iomgr/tcp_client_windows.c", "src/core/lib/iomgr/tcp_posix.c", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_server_posix.c", + "src/core/lib/iomgr/tcp_server_uv.c", "src/core/lib/iomgr/tcp_server_windows.c", + "src/core/lib/iomgr/tcp_uv.c", + "src/core/lib/iomgr/tcp_uv.h", "src/core/lib/iomgr/tcp_windows.c", "src/core/lib/iomgr/tcp_windows.h", "src/core/lib/iomgr/time_averaged_stats.c", "src/core/lib/iomgr/time_averaged_stats.h", - "src/core/lib/iomgr/timer.c", "src/core/lib/iomgr/timer.h", + "src/core/lib/iomgr/timer_generic.c", + "src/core/lib/iomgr/timer_generic.h", "src/core/lib/iomgr/timer_heap.c", "src/core/lib/iomgr/timer_heap.h", + "src/core/lib/iomgr/timer_uv.c", + "src/core/lib/iomgr/timer_uv.h", "src/core/lib/iomgr/udp_server.c", "src/core/lib/iomgr/udp_server.h", "src/core/lib/iomgr/unix_sockets_posix.c", @@ -6025,6 +6043,8 @@ "src/core/lib/iomgr/workqueue.h", "src/core/lib/iomgr/workqueue_posix.c", "src/core/lib/iomgr/workqueue_posix.h", + "src/core/lib/iomgr/workqueue_uv.c", + "src/core/lib/iomgr/workqueue_uv.h", "src/core/lib/iomgr/workqueue_windows.c", "src/core/lib/iomgr/workqueue_windows.h", "src/core/lib/json/json.c", diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index d09c07d0cb8..32f03824cc6 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -334,6 +334,7 @@ + @@ -347,16 +348,20 @@ + + + + @@ -520,6 +525,8 @@ + + @@ -528,12 +535,18 @@ + + + + + + @@ -544,28 +557,38 @@ + + + + + + + + - + + + @@ -582,6 +605,8 @@ + + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index d5ac3d44220..c04b13c3136 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -88,6 +88,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -100,15 +103,24 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -124,6 +136,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -133,6 +148,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -142,21 +160,30 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr src\core\lib\iomgr - + src\core\lib\iomgr src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -181,6 +208,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -770,6 +800,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -809,6 +842,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -818,9 +854,15 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -839,6 +881,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index 84e2a60d585..6a6a61e108c 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -224,6 +224,7 @@ + @@ -237,16 +238,20 @@ + + + + @@ -363,6 +368,8 @@ + + @@ -371,12 +378,18 @@ + + + + + + @@ -387,28 +400,38 @@ + + + + + + + + - + + + @@ -425,6 +448,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 1a2ecf91df6..cc114e9455a 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -136,6 +136,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -148,15 +151,24 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -172,6 +184,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -181,6 +196,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -190,21 +208,30 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr src\core\lib\iomgr - + src\core\lib\iomgr src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -229,6 +256,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -551,6 +581,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -590,6 +623,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -599,9 +635,15 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -620,6 +662,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index d053dd9a306..1ba32f28c1a 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -323,6 +323,7 @@ + @@ -336,16 +337,20 @@ + + + + @@ -487,6 +492,8 @@ + + @@ -495,12 +502,18 @@ + + + + + + @@ -511,28 +524,38 @@ + + + + + + + + - + + + @@ -549,6 +572,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 7edd0db4b60..8cb8d4ca98c 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -91,6 +91,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -103,15 +106,24 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -127,6 +139,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -136,6 +151,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -145,21 +163,30 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr src\core\lib\iomgr - + src\core\lib\iomgr src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -184,6 +211,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -680,6 +710,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -719,6 +752,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -728,9 +764,15 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -749,6 +791,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr From 232ca0275e9fb82fe7bb25b03fc2402e8c1ee815 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 16 Sep 2016 13:30:19 -0700 Subject: [PATCH 026/286] Removed unnecessary notes from scenario_config.py --- tools/run_tests/performance/scenario_config.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index 6fa3abaece5..ca3c1b0bf0c 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -343,10 +343,6 @@ class NodeLanguage: # 'node_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') - - # 50 | 90 | 95 | 99 | 99.9 - # 323834.797877769 | 432510.52549709007 | 458703.85481928807 | 507691.6539182514 | 3826148.8700816636 - # 272716.21113941644 | 307298.29139655043 | 329730.74530904385 | 413965.4319992619 | 2518204.1519497186 yield _ping_pong_scenario( 'node_protobuf_unary_ping_pong', rpc_type='UNARY', client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', From aabada97a1db3a2d722aa1bc1c48d13c90bbaea9 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Wed, 24 Aug 2016 10:01:13 -0700 Subject: [PATCH 027/286] One RPCMgr instance per CQ --- include/grpc++/server.h | 58 +++--- include/grpc++/server_builder.h | 9 + .../server/insecure/server_chttp2_posix.c | 9 + src/core/lib/surface/server.c | 6 + src/core/lib/surface/server.h | 3 + src/cpp/rpcmanager/grpc_rpc_manager.cc | 37 ++-- src/cpp/rpcmanager/grpc_rpc_manager.h | 59 ++++-- src/cpp/server/server.cc | 190 +++++++++++++++--- src/cpp/server/server_builder.cc | 72 +++++-- src/cpp/server/server_posix.cc | 3 +- test/core/end2end/fixtures/h2_fd.c | 2 +- 11 files changed, 355 insertions(+), 93 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 5b0a316a031..0c8b22184be 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -66,9 +66,7 @@ class ThreadPoolInterface; /// Models a gRPC server. /// /// Servers are configured and started via \a grpc::ServerBuilder. -class Server GRPC_FINAL : public ServerInterface, - private GrpcLibraryCodegen, - public GrpcRpcManager { +class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { public: ~Server(); @@ -100,13 +98,6 @@ class Server GRPC_FINAL : public ServerInterface, // Returns a \em raw pointer to the underlying grpc_server instance. grpc_server* c_server(); - // Returns a \em raw pointer to the underlying CompletionQueue. - CompletionQueue* completion_queue(); - - /// GRPC RPC Manager functions - void PollForWork(bool& is_work_found, void** tag) GRPC_OVERRIDE; - void DoWork(void* tag) GRPC_OVERRIDE; - private: friend class AsyncGenericService; friend class ServerBuilder; @@ -116,19 +107,37 @@ class Server GRPC_FINAL : public ServerInterface, class AsyncRequest; class ShutdownRequest; + /// SyncRequestManager is an implementation of GrpcRpcManager. This class is + /// responsible for polling for incoming RPCs and calling the RPC handlers. + /// This is only used in case of a Sync server (i.e a server exposing a sync + /// interface) + class SyncRequestManager; + class UnimplementedAsyncRequestContext; class UnimplementedAsyncRequest; class UnimplementedAsyncResponse; /// Server constructors. To be used by \a ServerBuilder only. /// - /// \param has_sync_methods Does this Server have any synchronous methods. - /// This information is useful to the server in creating some internal data - /// structures (completion queues / thread pools etc) to handle the incoming - /// RPCs corresponding to those sync methods + /// \param sync_server_cqs The completion queues to use if the server is a + /// synchronous server (or a hybrid server). The server polls for new RPCs on + /// these queues + /// /// \param max_message_size Maximum message length that the channel can /// receive. - Server(bool has_sync_methods, int max_message_size, ChannelArguments* args); + /// + /// \param args The channel args + /// + /// \param min_pollers The minimum number of polling threads per server + /// completion queue (in param sync_server_cqs) to use for listening to + /// incoming requests (used only in case of sync server) + /// + /// \param max_pollers The maximum number of polling threads per server + /// completion queue (in param sync_server_cqs) to use for listening to + /// incoming requests (used only in case of sync server) + Server(std::shared_ptr> sync_server_cqs, + int max_message_size, ChannelArguments* args, int min_pollers, + int max_pollers); /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the Server instance. @@ -181,11 +190,13 @@ class Server GRPC_FINAL : public ServerInterface, const int max_message_size_; - // The following completion queues used ONLY if the server has any services - // with sync methods. The queues are used as notification_cqs to get notified - // of the incoming RPCs - // std::vector> notification_cqs_; - CompletionQueue cq_; + /// The following completion queues are ONLY used in case of Sync API i.e if + /// the server has any services with sync methods. The server uses these + /// completion queues to poll for new RPCs + std::shared_ptr> sync_server_cqs_; + + /// List of GrpcRpcManager instances (one for each cq in the sync_server_cqs) + std::vector> sync_req_mgrs_; // Sever status grpc::mutex mu_; @@ -193,6 +204,9 @@ class Server GRPC_FINAL : public ServerInterface, bool shutdown_; bool shutdown_notified_; + /// The completion queue to use for server shutdown completion notification + CompletionQueue shutdown_cq_; + // TODO (sreek) : Remove num_running_cb_ and callback_cv_; // The number of threads which are running callbacks. // int num_running_cb_; @@ -202,12 +216,10 @@ class Server GRPC_FINAL : public ServerInterface, std::shared_ptr global_callbacks_; - std::list* sync_methods_; std::vector services_; - std::unique_ptr unknown_method_; bool has_generic_service_; - // Pointer to the c grpc server. + // Pointer to the c core's grpc server. grpc_server* server_; std::unique_ptr server_initializer_; diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index b9c49f0b192..847693d56f6 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -153,6 +153,12 @@ class ServerBuilder { private: friend class ::grpc::testing::ServerBuilderPluginTest; + // TODO (sreek) Make these configurable + // The default number of minimum and maximum number of polling threads needed + // per completion queue. These are only used in case of Sync server + const int kDefaultMinPollers = 1; + const int kDefaultMaxPollers = -1; // Unlimited + struct Port { grpc::string addr; std::shared_ptr creds; @@ -172,7 +178,10 @@ class ServerBuilder { std::vector> options_; std::vector> services_; std::vector ports_; + + /* List of completion queues added via AddCompletionQueue() method */ std::vector cqs_; + std::shared_ptr creds_; std::vector> plugins_; AsyncGenericService* generic_service_; diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c index 4350543c27a..b48b305eebd 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c @@ -65,6 +65,15 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server *server, const grpc_channel_args *server_args = grpc_server_get_channel_args(server); grpc_transport *transport = grpc_create_chttp2_transport( &exec_ctx, server_args, server_endpoint, 0 /* is_client */); + + grpc_pollset **pollsets; + size_t num_pollsets = 0; + grpc_server_get_pollsets(server, &pollsets, &num_pollsets); + + for (size_t i = 0; i < num_pollsets; i++) { + grpc_endpoint_add_to_pollset(&exec_ctx, server_endpoint, pollsets[i]); + } + grpc_endpoint_add_to_pollset(&exec_ctx, server_endpoint, grpc_cq_pollset(cq)); grpc_server_setup_transport(&exec_ctx, server, transport, NULL, server_args); grpc_chttp2_transport_start_reading(&exec_ctx, transport, NULL); diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c index 64afcecc072..8811b6e8033 100644 --- a/src/core/lib/surface/server.c +++ b/src/core/lib/surface/server.c @@ -1098,6 +1098,12 @@ void grpc_server_start(grpc_server *server) { grpc_exec_ctx_finish(&exec_ctx); } +void grpc_server_get_pollsets(grpc_server *server, grpc_pollset ***pollsets, + size_t *pollset_count) { + *pollset_count = server->cq_count; + *pollsets = server->pollsets; +} + void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s, grpc_transport *transport, grpc_pollset *accepting_pollset, diff --git a/src/core/lib/surface/server.h b/src/core/lib/surface/server.h index fb6e4d60c50..44d64a3145a 100644 --- a/src/core/lib/surface/server.h +++ b/src/core/lib/surface/server.h @@ -60,4 +60,7 @@ const grpc_channel_args *grpc_server_get_channel_args(grpc_server *server); int grpc_server_has_open_connections(grpc_server *server); +void grpc_server_get_pollsets(grpc_server *server, grpc_pollset ***pollsets, + size_t *pollset_count); + #endif /* GRPC_CORE_LIB_SURFACE_SERVER_H */ diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index f0a40578573..4236fcefafc 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -54,14 +54,12 @@ GrpcRpcManager::GrpcRpcManagerThread::~GrpcRpcManagerThread() { thd_.reset(); } -GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_pollers, - int max_threads) +GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_pollers) : shutdown_(false), num_pollers_(0), min_pollers_(min_pollers), max_pollers_(max_pollers), - num_threads_(0), - max_threads_(max_threads) {} + num_threads_(0) {} GrpcRpcManager::~GrpcRpcManager() { std::unique_lock lock(mu_); @@ -84,6 +82,11 @@ void GrpcRpcManager::ShutdownRpcManager() { shutdown_ = true; } +bool GrpcRpcManager::IsShutdown() { + std::unique_lock lock(mu_); + return shutdown_; +} + void GrpcRpcManager::MarkAsCompleted(GrpcRpcManagerThread* thd) { std::unique_lock lock(list_mu_); completed_threads_.push_back(thd); @@ -108,8 +111,7 @@ void GrpcRpcManager::Initialize() { // below the maximum threshold, we can let the current thread continue as poller bool GrpcRpcManager::MaybeContinueAsPoller() { std::unique_lock lock(mu_); - if (shutdown_ || num_pollers_ > max_pollers_ || - num_threads_ >= max_threads_) { + if (shutdown_ || num_pollers_ > max_pollers_) { return false; } @@ -122,8 +124,7 @@ bool GrpcRpcManager::MaybeContinueAsPoller() { // min_pollers_) and the total number of threads is below the maximum threshold void GrpcRpcManager::MaybeCreatePoller() { grpc::unique_lock lock(mu_); - if (!shutdown_ && num_pollers_ < min_pollers_ && - num_threads_ < max_threads_) { + if (!shutdown_ && num_pollers_ < min_pollers_) { num_pollers_++; num_threads_++; @@ -133,28 +134,38 @@ void GrpcRpcManager::MaybeCreatePoller() { } void GrpcRpcManager::MainWorkLoop() { - bool is_work_found = false; void* tag; + bool ok; /* 1. Poll for work (i.e PollForWork()) - 2. After returning from PollForWork, reduce the number of pollers by 1 + 2. After returning from PollForWork, reduce the number of pollers by 1. If + PollForWork() returned a TIMEOUT, then it may indicate that we have more + polling threads than needed. Check if the number of pollers is greater + than min_pollers and if so, terminate the thread. 3. Since we are short of one poller now, see if a new poller has to be created (i.e see MaybeCreatePoller() for more details) 4. Do the actual work (DoWork()) 5. After doing the work, see it this thread can resume polling work (i.e see MaybeContinueAsPoller() for more details) */ do { - PollForWork(is_work_found, &tag); + WorkStatus work_status = PollForWork(&tag, &ok); { grpc::unique_lock lock(mu_); num_pollers_--; + + if (work_status == TIMEOUT && num_pollers_ > min_pollers_) { + break; + } } - if (is_work_found) { + // TODO (sreek) See if we need to check for shutdown here and quit + // Note that MaybeCreatePoller does check for shutdown and creates a new + // thread only if GrpcRpcManager is not shutdown + if (work_status == WORK_FOUND) { MaybeCreatePoller(); - DoWork(tag); + DoWork(tag, ok); } } while (MaybeContinueAsPoller()); diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.h b/src/cpp/rpcmanager/grpc_rpc_manager.h index 475ce979953..d00771b9a10 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.h +++ b/src/cpp/rpcmanager/grpc_rpc_manager.h @@ -44,17 +44,56 @@ namespace grpc { class GrpcRpcManager { public: - explicit GrpcRpcManager(int min_pollers, int max_pollers, int max_threads); + explicit GrpcRpcManager(int min_pollers, int max_pollers); virtual ~GrpcRpcManager(); // This function MUST be called before using the object void Initialize(); - virtual void PollForWork(bool& is_work_found, void **tag) = 0; - virtual void DoWork(void *tag) = 0; + enum WorkStatus { WORK_FOUND, SHUTDOWN, TIMEOUT }; + + // "Polls" for new work. + // If the return value is WORK_FOUND: + // - The implementaion of PollForWork() MAY set some opaque identifier to + // (identify the work item found) via the '*tag' parameter + // - The implementaion MUST set the value of 'ok' to 'true' or 'false'. A + // value of 'false' indicates some implemenation specific error (that is + // neither SHUTDOWN nor TIMEOUT) + // - GrpcRpcManager does not interpret the values of 'tag' and 'ok' + // - GrpcRpcManager WILL call DoWork() and pass '*tag' and 'ok' as input to + // DoWork() + // + // If the return value is SHUTDOWN:, + // - GrpcManager WILL NOT call DoWork() and terminates the thead + // + // If the return value is TIMEOUT:, + // - GrpcManager WILL NOT call DoWork() + // - GrpcManager MAY terminate the thread depending on the current number of + // active poller threads and mix_pollers/max_pollers settings + // - Also, the value of timeout is specific to the derived class + // implementation + virtual WorkStatus PollForWork(void** tag, bool* ok) = 0; + + // The implementation of DoWork() is supposed to perform the work found by + // PollForWork(). The tag and ok parameters are the same as returned by + // PollForWork() + // + // The implementation of DoWork() should also do any setup needed to ensure + // that the next call to PollForWork() (not necessarily by the current thread) + // actually finds some work + virtual void DoWork(void* tag, bool ok) = 0; + + // Mark the GrpcRpcManager as shutdown and begin draining the work. + // This is a non-blocking call and the caller should call Wait(), a blocking + // call which returns only once the shutdown is complete + void ShutdownRpcManager(); + // Has ShutdownRpcManager() been called + bool IsShutdown(); + + // A blocking call that returns only after the GrpcRpcManager has shutdown and + // all the threads have drained all the outstanding work void Wait(); - void ShutdownRpcManager(); private: // Helper wrapper class around std::thread. This takes a GrpcRpcManager object @@ -63,8 +102,6 @@ class GrpcRpcManager { // The Run() function calls GrpcManager::MainWorkLoop() function and once that // completes, it marks the GrpcRpcManagerThread completed by calling // GrpcRpcManager::MarkAsCompleted() - // TODO: sreek - Consider using a separate threadpool rather than implementing - // one in this class class GrpcRpcManagerThread { public: GrpcRpcManagerThread(GrpcRpcManager* rpc_mgr); @@ -83,13 +120,11 @@ class GrpcRpcManager { void MainWorkLoop(); // Create a new poller if the number of current pollers is less than the - // minimum number of pollers needed (i.e min_pollers) and the total number of - // threads are less than the max number of threads (i.e max_threads) + // minimum number of pollers needed (i.e min_pollers). void MaybeCreatePoller(); // Returns true if the current thread can resume as a poller. i.e if the - // current number of pollers is less than the max_pollers AND the total number - // of threads is less than max_threads + // current number of pollers is less than the max_pollers. bool MaybeContinueAsPoller(); void MarkAsCompleted(GrpcRpcManagerThread* thd); @@ -113,10 +148,6 @@ class GrpcRpcManager { // currently polling i.e num_pollers_) int num_threads_; - // The maximum number of threads that can be active (This is a soft limit and - // the actual number of threads may sometimes be briefly above this number) - int max_threads_; - grpc::mutex list_mu_; std::list completed_threads_; }; diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index a436ee43e9e..28b874d9fb4 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -275,15 +275,99 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { grpc_completion_queue* cq_; }; +class Server::SyncRequestManager : public GrpcRpcManager { + public: + SyncRequestManager(Server* server, CompletionQueue* server_cq, + std::shared_ptr global_callbacks, + int min_pollers, int max_pollers) + : GrpcRpcManager(min_pollers, max_pollers), + server_(server), + server_cq_(server_cq), + global_callbacks_(global_callbacks) {} + + static const int kRpcPollingTimeoutMsec = 500; + + WorkStatus PollForWork(void** tag, bool* ok) GRPC_OVERRIDE { + *tag = nullptr; + gpr_timespec deadline = + gpr_time_from_millis(kRpcPollingTimeoutMsec, GPR_TIMESPAN); + + switch (server_cq_->AsyncNext(tag, ok, deadline)) { + case CompletionQueue::TIMEOUT: + return TIMEOUT; + case CompletionQueue::SHUTDOWN: + return SHUTDOWN; + case CompletionQueue::GOT_EVENT: + return WORK_FOUND; + } + + GPR_UNREACHABLE_CODE(return TIMEOUT); + } + + void DoWork(void* tag, bool ok) GRPC_OVERRIDE { + SyncRequest* sync_req = static_cast(tag); + if (ok && sync_req) { + SyncRequest::CallData cd(server_, sync_req); + { + sync_req->SetupRequest(); + if (!IsShutdown()) { + sync_req->Request(server_->c_server(), server_cq_->cq()); + } else { + sync_req->TeardownRequest(); + } + } + GPR_TIMER_SCOPE("cd.Run()", 0); + cd.Run(global_callbacks_); + } + + // TODO (sreek): If ok == false, log an error + } + + void AddSyncMethod(RpcServiceMethod* method, void* tag) { + sync_methods_.emplace_back(method, tag); + } + + void AddUnknownSyncMethod() { + // TODO (sreek) - Check if !sync_methods_.empty() is really needed here + if (!sync_methods_.empty()) { + unknown_method_.reset(new RpcServiceMethod( + "unknown", RpcMethod::BIDI_STREAMING, new UnknownMethodHandler)); + // Use of emplace_back with just constructor arguments is not accepted + // here by gcc-4.4 because it can't match the anonymous nullptr with a + // proper constructor implicitly. Construct the object and use push_back. + sync_methods_.push_back(SyncRequest(unknown_method_.get(), nullptr)); + } + } + + void Start() { + if (!sync_methods_.empty()) { + for (auto m = sync_methods_.begin(); m != sync_methods_.end(); m++) { + m->SetupRequest(); + m->Request(server_->c_server(), server_cq_->cq()); + } + + GrpcRpcManager::Initialize(); + } + } + + private: + Server* server_; + CompletionQueue* server_cq_; + std::vector sync_methods_; + std::unique_ptr unknown_method_; + std::shared_ptr global_callbacks_; +}; + static internal::GrpcLibraryInitializer g_gli_initializer; -Server::Server(bool has_sync_methods, int max_message_size, - ChannelArguments* args) - : GrpcRpcManager(3, 5, 8), - max_message_size_(max_message_size), +Server::Server( + std::shared_ptr> sync_server_cqs, + int max_message_size, ChannelArguments* args, int min_pollers, + int max_pollers) + : max_message_size_(max_message_size), + sync_server_cqs_(sync_server_cqs), started_(false), shutdown_(false), shutdown_notified_(false), - sync_methods_(new std::list), has_generic_service_(false), server_(nullptr), server_initializer_(new ServerInitializer(this)) { @@ -291,16 +375,17 @@ Server::Server(bool has_sync_methods, int max_message_size, gpr_once_init(&g_once_init_callbacks, InitGlobalCallbacks); global_callbacks_ = g_callbacks; global_callbacks_->UpdateArguments(args); + + for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); + it++) { + sync_req_mgrs_.emplace_back(new SyncRequestManager( + this, &(*it), global_callbacks_, min_pollers, max_pollers)); + } + grpc_channel_args channel_args; args->SetChannelArgs(&channel_args); - server_ = grpc_server_create(&channel_args, nullptr); - if (!has_sync_methods) { - grpc_server_register_non_listening_completion_queue(server_, cq_.cq(), - nullptr); - } else { - grpc_server_register_completion_queue(server_, cq_.cq(), nullptr); - } + server_ = grpc_server_create(&channel_args, nullptr); } Server::~Server() { @@ -310,15 +395,20 @@ Server::~Server() { lock.unlock(); Shutdown(); } else if (!started_) { + // TODO (sreek): Shutdown all cqs + /* cq_.Shutdown(); + */ } } + // TODO(sreek) Do thisfor all cqs ? + /* void* got_tag; bool ok; GPR_ASSERT(!cq_.Next(&got_tag, &ok)); + */ grpc_server_destroy(server_); - delete sync_methods_; } void Server::SetGlobalCallbacks(GlobalCallbacks* callbacks) { @@ -329,8 +419,6 @@ void Server::SetGlobalCallbacks(GlobalCallbacks* callbacks) { grpc_server* Server::c_server() { return server_; } -CompletionQueue* Server::completion_queue() { return &cq_; } - static grpc_server_register_method_payload_handling PayloadHandlingForMethod( RpcServiceMethod* method) { switch (method->method_type()) { @@ -351,6 +439,7 @@ bool Server::RegisterService(const grpc::string* host, Service* service) { "Can only register an asynchronous service against one server."); service->server_ = this; } + const char* method_name = nullptr; for (auto it = service->methods_.begin(); it != service->methods_.end(); ++it) { @@ -369,7 +458,9 @@ bool Server::RegisterService(const grpc::string* host, Service* service) { if (method->handler() == nullptr) { method->set_server_tag(tag); } else { - sync_methods_->emplace_back(method, tag); + for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { + (*it)->AddSyncMethod(method, tag); + } } method_name = method->name(); } @@ -405,13 +496,8 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { grpc_server_start(server_); if (!has_generic_service_) { - if (!sync_methods_->empty()) { - unknown_method_.reset(new RpcServiceMethod( - "unknown", RpcMethod::BIDI_STREAMING, new UnknownMethodHandler)); - // Use of emplace_back with just constructor arguments is not accepted - // here by gcc-4.4 because it can't match the anonymous nullptr with a - // proper constructor implicitly. Construct the object and use push_back. - sync_methods_->push_back(SyncRequest(unknown_method_.get(), nullptr)); + for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { + (*it)->AddUnknownSyncMethod(); } for (size_t i = 0; i < num_cqs; i++) { @@ -421,6 +507,12 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { } } + for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { + (*it)->Start(); + } + + /* TODO (Sreek) - Do this for all cqs */ + /* // Start processing rpcs. if (!sync_methods_->empty()) { for (auto m = sync_methods_->begin(); m != sync_methods_->end(); m++) { @@ -430,26 +522,73 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { GrpcRpcManager::Initialize(); } + */ return true; } +// TODO (sreek) - Reimplement this void Server::ShutdownInternal(gpr_timespec deadline) { grpc::unique_lock lock(mu_); if (started_ && !shutdown_) { shutdown_ = true; + + int shutdown_tag = 0; // Dummy shutdown tag + grpc_server_shutdown_and_notify(server_, shutdown_cq_.cq(), &shutdown_tag); + + // Shutdown all RpcManagers. This will try to gracefully stop all the + // threads in the RpcManagers (once they process any inflight requests) + for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { + (*it)->ShutdownRpcManager(); + } + + shutdown_cq_.Shutdown(); + + void* tag; + bool ok; + CompletionQueue::NextStatus status = + shutdown_cq_.AsyncNext(&tag, &ok, deadline); + + // If this timed out, it means we are done with the grace-period for + // a clean shutdown. We should force a shutdown now by cancelling all + // inflight calls + if (status == CompletionQueue::NextStatus::TIMEOUT) { + grpc_server_cancel_all_calls(server_); + } + // Else in case of SHUTDOWN or GOT_EVENT, it means that the server has + // successfully shutdown + + // Wait for threads in all RpcManagers to terminate + for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { + (*it)->Wait(); + } + + // Shutdown the completion queues + // TODO (sreek) Move this into SyncRequestManager + for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); + it++) { + (*it).Shutdown(); + } + + /* grpc_server_shutdown_and_notify(server_, cq_.cq(), new ShutdownRequest()); cq_.Shutdown(); lock.unlock(); + */ + // TODO (sreek) Delete this + /* GrpcRpcManager::ShutdownRpcManager(); GrpcRpcManager::Wait(); + */ // Spin, eating requests until the completion queue is completely shutdown. // If the deadline expires then cancel anything that's pending and keep // spinning forever until the work is actually drained. // Since nothing else needs to touch state guarded by mu_, holding it // through this loop is fine. + // + /* SyncRequest* request; bool ok; while (SyncRequest::AsyncWait(&cq_, &request, &ok, deadline)) { @@ -461,6 +600,7 @@ void Server::ShutdownInternal(gpr_timespec deadline) { } } lock.lock(); + */ /* TODO (sreek) - Remove this block */ // Wait for running callbacks to finish. @@ -642,6 +782,8 @@ void Server::RunRpc() { */ } +/* TODO (sreek) Move this to SyncRequestManager */ +/* void Server::PollForWork(bool& is_work_found, void** tag) { is_work_found = true; *tag = nullptr; @@ -651,6 +793,7 @@ void Server::PollForWork(bool& is_work_found, void** tag) { } } + void Server::DoWork(void* tag) { auto* mrd = static_cast(tag); if (mrd) { @@ -669,6 +812,7 @@ void Server::DoWork(void* tag) { cd.Run(global_callbacks_); } } +*/ ServerInitializer* Server::initializer() { return server_initializer_.get(); } diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 760309d911a..786195ed6cb 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -93,7 +93,7 @@ ServerBuilder& ServerBuilder::RegisterAsyncGenericService( gpr_log(GPR_ERROR, "Adding multiple AsyncGenericService is unsupported for now. " "Dropping the service %p", - service); + (void *) service); } else { generic_service_ = service; } @@ -138,7 +138,6 @@ ServerBuilder& ServerBuilder::AddListeningPort( } std::unique_ptr ServerBuilder::BuildAndStart() { - // == Determine if the server has any syncrhonous methods == bool has_sync_methods = false; for (auto it = services_.begin(); it != services_.end(); ++it) { @@ -157,6 +156,35 @@ std::unique_ptr ServerBuilder::BuildAndStart() { } } + // If this is a Sync server, i.e a server expositing sync API, then the server + // needs to create some completion queues to listen for incoming requests. + // 'sync_server_cqs' are those internal completion queues. + // + // This is different from the completion queues added to the server via + // ServerBuilder's AddCompletionQueue() method (those completion queues + // are in 'cqs_' member variable of ServerBuilder object) + std::shared_ptr> sync_server_cqs( + new std::vector()); + + if (has_sync_methods) { + // If the server has synchronous methods, it will need completion queues to + // handle those methods. Create one cq per core (or create 4 if number of + // cores is less than 4 or unavailable) + // + // TODO (sreek) - The default number 4 is just a guess. Check if a lower or + // higher number makes sense + int num_cqs = gpr_cpu_num_cores(); + num_cqs = GPR_MAX(num_cqs, 4); + + for (int i = 0; i < num_cqs; i++) { + // emplace_back() would have been ideal here but doesn't work since the + // ServerCompletionQueue's constructor is private. With emplace_back, the + // constructor is called from somewhere within the library; so making + // ServerBuilder class a friend to ServerCompletion queue won't help. + sync_server_cqs->push_back(ServerCompletionQueue()); + } + } + // == Channel args == ChannelArguments args; for (auto option = options_.begin(); option != options_.end(); ++option) { @@ -178,28 +206,38 @@ std::unique_ptr ServerBuilder::BuildAndStart() { maybe_default_compression_algorithm_.algorithm); } - std::unique_ptr server( - new Server(has_sync_methods, max_message_size_, &args)); + // TODO (sreek) Make the number of pollers configurable + std::unique_ptr server(new Server(sync_server_cqs, max_message_size_, + &args, kDefaultMinPollers, + kDefaultMaxPollers)); ServerInitializer* initializer = server->initializer(); - // If the server has atleast one sync methods, we know that this is a Sync - // server or a Hybrid server and the completion queue (server->cq_) would be - // frequently polled. - int num_frequently_polled_cqs = has_sync_methods ? 1 : 0; - - for (auto cq = cqs_.begin(); cq != cqs_.end(); ++cq) { - // A completion queue that is not polled frequently (by calling Next() or - // AsyncNext()) is not safe to use for listening to incoming channels. - // Register all such completion queues as non-listening completion queues - // with the GRPC core library. - if ((*cq)->IsFrequentlyPolled()) { - grpc_server_register_completion_queue(server->server_, (*cq)->cq(), + // Register all the completion queues with the server. i.e + // 1. sync_server_cqs: internal completion queues created IF this is a sync + // server + // 2. cqs_: Completion queues added via AddCompletionQueue() call + + // All sync cqs (if any) are frequently polled by the GrpcRpcManager + int num_frequently_polled_cqs = sync_server_cqs->size(); + + for (auto it = sync_server_cqs->begin(); it != sync_server_cqs->end(); ++it) { + grpc_server_register_completion_queue(server->server_, it->cq(), nullptr); + } + + // cqs_ contains the completion queue added by calling the ServerBuilder's + // AddCompletionQueue() API. Some of them may not be frequently polled (i.e by + // calling Next() or AsyncNext()) and hence are not safe to be used for + // listening to incoming channels. Such completion queues must be registered + // as non-listening queues + for (auto it = cqs_.begin(); it != cqs_.end(); ++it) { + if ((*it)->IsFrequentlyPolled()) { + grpc_server_register_completion_queue(server->server_, (*it)->cq(), nullptr); num_frequently_polled_cqs++; } else { grpc_server_register_non_listening_completion_queue(server->server_, - (*cq)->cq(), nullptr); + (*it)->cq(), nullptr); } } diff --git a/src/cpp/server/server_posix.cc b/src/cpp/server/server_posix.cc index c3aa2adc60e..33d42a8dc70 100644 --- a/src/cpp/server/server_posix.cc +++ b/src/cpp/server/server_posix.cc @@ -40,8 +40,7 @@ namespace grpc { #ifdef GPR_SUPPORT_CHANNELS_FROM_FD void AddInsecureChannelFromFd(Server* server, int fd) { - grpc_server_add_insecure_channel_from_fd( - server->c_server(), server->completion_queue()->cq(), fd); + grpc_server_add_insecure_channel_from_fd(server->c_server(), NULL, fd); } #endif // GPR_SUPPORT_CHANNELS_FROM_FD diff --git a/test/core/end2end/fixtures/h2_fd.c b/test/core/end2end/fixtures/h2_fd.c index 89fa02517df..8561feed703 100644 --- a/test/core/end2end/fixtures/h2_fd.c +++ b/test/core/end2end/fixtures/h2_fd.c @@ -95,7 +95,7 @@ static void chttp2_init_server_socketpair(grpc_end2end_test_fixture *f, grpc_server_register_completion_queue(f->server, f->cq, NULL); grpc_server_start(f->server); - grpc_server_add_insecure_channel_from_fd(f->server, f->cq, sfd->fd_pair[1]); + grpc_server_add_insecure_channel_from_fd(f->server, NULL, sfd->fd_pair[1]); grpc_exec_ctx_finish(&exec_ctx); } From 4306eeee397760e11b416f43e881e7dfb87f88b0 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Wed, 21 Sep 2016 09:56:29 -0700 Subject: [PATCH 028/286] Minor changes --- src/cpp/rpcmanager/grpc_rpc_manager.cc | 8 +++--- src/cpp/server/server.cc | 34 ++++++++++++++++++++------ 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index 4236fcefafc..c47f76b5afc 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -34,6 +34,7 @@ #include #include #include +#include #include "src/cpp/rpcmanager/grpc_rpc_manager.h" @@ -58,7 +59,7 @@ GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_pollers) : shutdown_(false), num_pollers_(0), min_pollers_(min_pollers), - max_pollers_(max_pollers), + max_pollers_(max_pollers == -1 ? INT_MAX: max_pollers), num_threads_(0) {} GrpcRpcManager::~GrpcRpcManager() { @@ -111,6 +112,7 @@ void GrpcRpcManager::Initialize() { // below the maximum threshold, we can let the current thread continue as poller bool GrpcRpcManager::MaybeContinueAsPoller() { std::unique_lock lock(mu_); + if (shutdown_ || num_pollers_ > max_pollers_) { return false; } @@ -169,8 +171,8 @@ void GrpcRpcManager::MainWorkLoop() { } } while (MaybeContinueAsPoller()); - // If we are here, it means that the GrpcRpcManager already has enough threads - // and that the current thread can be terminated + // If we are here, either GrpcRpcManager is shutting down or it already has + // enough threads. In both cases, current thread can be terminated { grpc::unique_lock lock(mu_); num_threads_--; diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 28b874d9fb4..21debcc7482 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -306,7 +306,14 @@ class Server::SyncRequestManager : public GrpcRpcManager { void DoWork(void* tag, bool ok) GRPC_OVERRIDE { SyncRequest* sync_req = static_cast(tag); - if (ok && sync_req) { + + if (!sync_req) { + // No tag. Nothing to work on + // TODO (sreek) - Log a warning here since this is an unlikely case + return; + } + + if (ok) { SyncRequest::CallData cd(server_, sync_req); { sync_req->SetupRequest(); @@ -318,9 +325,13 @@ class Server::SyncRequestManager : public GrpcRpcManager { } GPR_TIMER_SCOPE("cd.Run()", 0); cd.Run(global_callbacks_); + } else { + // ok is false. For some reason, the tag was returned but event was not + // successful. In this case, request again unless we are shutting down + if (!IsShutdown()) { + sync_req->Request(server_->c_server(), server_cq_->cq()); + } } - - // TODO (sreek): If ok == false, log an error } void AddSyncMethod(RpcServiceMethod* method, void* tag) { @@ -395,7 +406,15 @@ Server::~Server() { lock.unlock(); Shutdown(); } else if (!started_) { - // TODO (sreek): Shutdown all cqs + // TODO (sreek): Check if we can just do this once in ~Server() (i.e + // Do not 'shutdown' queues in Shutdown() function and do it here in the + // destructor + for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); + it++) { + (*it).Shutdown(); + } + + // TODO (sreek) Delete this /* cq_.Shutdown(); */ @@ -511,7 +530,7 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { (*it)->Start(); } - /* TODO (Sreek) - Do this for all cqs */ + /* TODO (Sreek) - No longer needed (being done in (*it)->Start above) */ /* // Start processing rpcs. if (!sync_methods_->empty()) { @@ -527,7 +546,7 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { return true; } -// TODO (sreek) - Reimplement this +/* TODO (sreek) check if started_ and shutdown_ are needed anymore */ void Server::ShutdownInternal(gpr_timespec deadline) { grpc::unique_lock lock(mu_); if (started_ && !shutdown_) { @@ -564,7 +583,8 @@ void Server::ShutdownInternal(gpr_timespec deadline) { } // Shutdown the completion queues - // TODO (sreek) Move this into SyncRequestManager + // TODO (sreek) Move this into SyncRequestManager (or move it to Server + // destructor) for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); it++) { (*it).Shutdown(); From 4028d2c11b6561ad7aea71e7bc465dc56865d40d Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Wed, 21 Sep 2016 10:45:33 -0700 Subject: [PATCH 029/286] More fixes --- include/grpc++/server.h | 6 ++++-- src/cpp/server/server.cc | 31 +++++++++++++++++++++++++------ src/cpp/server/server_builder.cc | 16 +++++++--------- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 0c8b22184be..af0a15d7bd0 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -135,7 +135,8 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { /// \param max_pollers The maximum number of polling threads per server /// completion queue (in param sync_server_cqs) to use for listening to /// incoming requests (used only in case of sync server) - Server(std::shared_ptr> sync_server_cqs, + Server(std::shared_ptr>> + sync_server_cqs, int max_message_size, ChannelArguments* args, int min_pollers, int max_pollers); @@ -193,7 +194,8 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { /// The following completion queues are ONLY used in case of Sync API i.e if /// the server has any services with sync methods. The server uses these /// completion queues to poll for new RPCs - std::shared_ptr> sync_server_cqs_; + std::shared_ptr>> + sync_server_cqs_; /// List of GrpcRpcManager instances (one for each cq in the sync_server_cqs) std::vector> sync_req_mgrs_; diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 21debcc7482..89854f9493f 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -118,6 +118,7 @@ class Server::UnimplementedAsyncResponse GRPC_FINAL UnimplementedAsyncRequest* const request_; }; +// TODO (sreek) - This might no longer be needed class Server::ShutdownRequest GRPC_FINAL : public CompletionQueueTag { public: bool FinalizeResult(void** tag, bool* status) { @@ -126,6 +127,13 @@ class Server::ShutdownRequest GRPC_FINAL : public CompletionQueueTag { } }; +class ShutdownTag : public CompletionQueueTag { + public: + bool FinalizeResult(void** tag, bool *status) { + return false; + } +}; + class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { public: SyncRequest(RpcServiceMethod* method, void* tag) @@ -147,6 +155,7 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { grpc_metadata_array_destroy(&request_metadata_); } + // TODO (Sreek) This function is probably no longer needed static SyncRequest* Wait(CompletionQueue* cq, bool* ok) { void* tag = nullptr; *ok = false; @@ -158,6 +167,7 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { return mrd; } + // TODO (sreek) - This function is probably no longer needed static bool AsyncWait(CompletionQueue* cq, SyncRequest** req, bool* ok, gpr_timespec deadline) { void* tag = nullptr; @@ -177,6 +187,8 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { GPR_UNREACHABLE_CODE(return false); } + // TODO (sreek) - Refactor this SetupRequest/TeardownRequest and ResetRequest + // functions void SetupRequest() { cq_ = grpc_completion_queue_create(nullptr); } void TeardownRequest() { @@ -184,6 +196,10 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { cq_ = nullptr; } + void ResetRequest() { + in_flight_ = false; + } + void Request(grpc_server* server, grpc_completion_queue* notify_cq) { GPR_ASSERT(cq_ && !in_flight_); in_flight_ = true; @@ -326,10 +342,12 @@ class Server::SyncRequestManager : public GrpcRpcManager { GPR_TIMER_SCOPE("cd.Run()", 0); cd.Run(global_callbacks_); } else { + sync_req->ResetRequest(); // ok is false. For some reason, the tag was returned but event was not // successful. In this case, request again unless we are shutting down if (!IsShutdown()) { - sync_req->Request(server_->c_server(), server_cq_->cq()); + // TODO (sreek) Remove this + // sync_req->Request(server_->c_server(), server_cq_->cq()); } } } @@ -371,7 +389,8 @@ class Server::SyncRequestManager : public GrpcRpcManager { static internal::GrpcLibraryInitializer g_gli_initializer; Server::Server( - std::shared_ptr> sync_server_cqs, + std::shared_ptr>> + sync_server_cqs, int max_message_size, ChannelArguments* args, int min_pollers, int max_pollers) : max_message_size_(max_message_size), @@ -390,7 +409,7 @@ Server::Server( for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); it++) { sync_req_mgrs_.emplace_back(new SyncRequestManager( - this, &(*it), global_callbacks_, min_pollers, max_pollers)); + this, (*it).get(), global_callbacks_, min_pollers, max_pollers)); } grpc_channel_args channel_args; @@ -411,7 +430,7 @@ Server::~Server() { // destructor for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); it++) { - (*it).Shutdown(); + (*it)->Shutdown(); } // TODO (sreek) Delete this @@ -552,7 +571,7 @@ void Server::ShutdownInternal(gpr_timespec deadline) { if (started_ && !shutdown_) { shutdown_ = true; - int shutdown_tag = 0; // Dummy shutdown tag + ShutdownTag shutdown_tag; // Dummy shutdown tag grpc_server_shutdown_and_notify(server_, shutdown_cq_.cq(), &shutdown_tag); // Shutdown all RpcManagers. This will try to gracefully stop all the @@ -587,7 +606,7 @@ void Server::ShutdownInternal(gpr_timespec deadline) { // destructor) for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); it++) { - (*it).Shutdown(); + (*it)->Shutdown(); } /* diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 786195ed6cb..8c70ac8f991 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -93,7 +93,7 @@ ServerBuilder& ServerBuilder::RegisterAsyncGenericService( gpr_log(GPR_ERROR, "Adding multiple AsyncGenericService is unsupported for now. " "Dropping the service %p", - (void *) service); + (void*)service); } else { generic_service_ = service; } @@ -163,8 +163,9 @@ std::unique_ptr ServerBuilder::BuildAndStart() { // This is different from the completion queues added to the server via // ServerBuilder's AddCompletionQueue() method (those completion queues // are in 'cqs_' member variable of ServerBuilder object) - std::shared_ptr> sync_server_cqs( - new std::vector()); + std::shared_ptr>> + sync_server_cqs( + new std::vector>()); if (has_sync_methods) { // If the server has synchronous methods, it will need completion queues to @@ -177,11 +178,7 @@ std::unique_ptr ServerBuilder::BuildAndStart() { num_cqs = GPR_MAX(num_cqs, 4); for (int i = 0; i < num_cqs; i++) { - // emplace_back() would have been ideal here but doesn't work since the - // ServerCompletionQueue's constructor is private. With emplace_back, the - // constructor is called from somewhere within the library; so making - // ServerBuilder class a friend to ServerCompletion queue won't help. - sync_server_cqs->push_back(ServerCompletionQueue()); + sync_server_cqs->emplace_back(new ServerCompletionQueue()); } } @@ -222,7 +219,8 @@ std::unique_ptr ServerBuilder::BuildAndStart() { int num_frequently_polled_cqs = sync_server_cqs->size(); for (auto it = sync_server_cqs->begin(); it != sync_server_cqs->end(); ++it) { - grpc_server_register_completion_queue(server->server_, it->cq(), nullptr); + grpc_server_register_completion_queue(server->server_, (*it)->cq(), + nullptr); } // cqs_ contains the completion queue added by calling the ServerBuilder's From c2ab9aee0a2aa205efe385bd8a8e1f11795d33d0 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 09:57:29 -0700 Subject: [PATCH 030/286] Add buffer pool public apis --- include/grpc/grpc.h | 16 ++++++++++++++++ include/grpc/impl/codegen/grpc_types.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h index 587d86c98fd..a893367a9c3 100644 --- a/include/grpc/grpc.h +++ b/include/grpc/grpc.h @@ -401,6 +401,22 @@ GRPCAPI int grpc_is_binary_header(const char *key, size_t length); /** Convert grpc_call_error values to a string */ GRPCAPI const char *grpc_call_error_to_string(grpc_call_error error); +/** Create a buffer pool */ +GRPCAPI grpc_buffer_pool *grpc_buffer_pool_create(void); + +/** Add a reference to a buffer pool */ +GRPCAPI void grpc_buffer_pool_ref(grpc_buffer_pool *buffer_pool); + +/** Drop a reference to a buffer pool */ +GRPCAPI void grpc_buffer_pool_unref(grpc_buffer_pool *buffer_pool); + +/** Update the size of a buffer pool */ +GRPCAPI void grpc_buffer_pool_resize(grpc_buffer_pool *buffer_pool, + size_t new_size); + +/** Fetch a vtable for a grpc_channel_arg that points to a grpc_buffer_pool */ +GRPCAPI grpc_arg_pointer_vtable *grpc_buffer_pool_arg_vtable(void); + #ifdef __cplusplus } #endif diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index a8e8ebe6ea9..f578157e416 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -196,6 +196,9 @@ typedef struct { #define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size" /** If non-zero, allow the use of SO_REUSEPORT if it's available (default 1) */ #define GRPC_ARG_ALLOW_REUSEPORT "grpc.so_reuseport" +/** If non-zero, a pointer to a buffer pool (use grpc_buffer_pool_arg_vtable to + fetch an appropriate pointer arg vtable */ +#define GRPC_ARG_BUFFER_POOL "grpc.buffer_pool" /** \} */ /** Result of a grpc call. If the caller satisfies the prerequisites of a @@ -445,6 +448,8 @@ typedef struct grpc_op { } data; } grpc_op; +typedef struct grpc_buffer_pool grpc_buffer_pool; + #ifdef __cplusplus } #endif From f6f153d02be7d30f5da646337962d4b22e6be3d3 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 22 Sep 2016 11:08:03 -0700 Subject: [PATCH 031/286] temporarily port #7833 --- include/grpc/grpc_posix.h | 10 ++++++---- .../chttp2/server/insecure/server_chttp2_posix.c | 7 ++++--- src/ruby/ext/grpc/rb_grpc_imports.generated.h | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/include/grpc/grpc_posix.h b/include/grpc/grpc_posix.h index 5e89ae3b1ee..eaecbf3b978 100644 --- a/include/grpc/grpc_posix.h +++ b/include/grpc/grpc_posix.h @@ -57,11 +57,13 @@ GRPCAPI grpc_channel *grpc_insecure_channel_create_from_fd( /** Add the connected communication channel based on file descriptor 'fd' to the 'server'. The 'fd' must be an open file descriptor corresponding to a - connected socket. The 'cq' is a completion queue that will be getting events - from that descriptor. */ + connected socket. Events from the file descriptor may come on any of the + server completion queues (i.e completion queues registered via the + grpc_server_register_completion_queue API). + + The 'reserved' pointer MUST be NULL */ GRPCAPI void grpc_server_add_insecure_channel_from_fd(grpc_server *server, - grpc_completion_queue *cq, - int fd); + void *reserved, int fd); /** GRPC Core POSIX library may internally use signals to optimize some work. The library uses (SIGRTMIN + 2) signal by default. Use this API to instruct diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c index b48b305eebd..bca589d9b1d 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c @@ -50,8 +50,10 @@ #include "src/core/lib/surface/server.h" void grpc_server_add_insecure_channel_from_fd(grpc_server *server, - grpc_completion_queue *cq, + void *reserved, int fd) { + GPR_ASSERT(reserved == NULL); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; char *name; @@ -74,7 +76,6 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server *server, grpc_endpoint_add_to_pollset(&exec_ctx, server_endpoint, pollsets[i]); } - grpc_endpoint_add_to_pollset(&exec_ctx, server_endpoint, grpc_cq_pollset(cq)); grpc_server_setup_transport(&exec_ctx, server, transport, NULL, server_args); grpc_chttp2_transport_start_reading(&exec_ctx, transport, NULL); grpc_exec_ctx_finish(&exec_ctx); @@ -83,7 +84,7 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server *server, #else // !GPR_SUPPORT_CHANNELS_FROM_FD void grpc_server_add_insecure_channel_from_fd(grpc_server *server, - grpc_completion_queue *cq, + void *cq, int fd) { GPR_ASSERT(0); } diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index b87abfd8efd..00a67b0b2cd 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -350,7 +350,7 @@ extern grpc_call_error_to_string_type grpc_call_error_to_string_import; typedef grpc_channel *(*grpc_insecure_channel_create_from_fd_type)(const char *target, int fd, const grpc_channel_args *args); extern grpc_insecure_channel_create_from_fd_type grpc_insecure_channel_create_from_fd_import; #define grpc_insecure_channel_create_from_fd grpc_insecure_channel_create_from_fd_import -typedef void(*grpc_server_add_insecure_channel_from_fd_type)(grpc_server *server, grpc_completion_queue *cq, int fd); +typedef void(*grpc_server_add_insecure_channel_from_fd_type)(grpc_server *server, void *reserved, int fd); extern grpc_server_add_insecure_channel_from_fd_type grpc_server_add_insecure_channel_from_fd_import; #define grpc_server_add_insecure_channel_from_fd grpc_server_add_insecure_channel_from_fd_import typedef void(*grpc_use_signal_type)(int signum); From 18d3ace7dbb2e4f5ff0325802708de43db2bae71 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 22 Sep 2016 13:04:41 -0700 Subject: [PATCH 032/286] fix test --- test/cpp/rpcmanager/grpc_rpc_manager_test.cc | 17 +++++++++++------ test/cpp/rpcmanager/grpc_rpc_manager_test.h | 7 ++++--- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc index 2a306e48ad6..f48ac2716b5 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc @@ -45,13 +45,16 @@ using grpc::testing::GrpcRpcManagerTest; // TODO: sreek - Rewrite this test. Find a better test case -void GrpcRpcManagerTest::PollForWork(bool& is_work_found, void **tag) { +grpc::GrpcRpcManager::WorkStatus GrpcRpcManagerTest::PollForWork(void **tag, + bool *ok) { { std::unique_lock lock(mu_); std::cout << "Poll: " << std::this_thread::get_id() << std::endl; } - is_work_found = true; - *tag = NULL; + + WorkStatus work_status = WORK_FOUND; + *tag = nullptr; + *ok = true; std::this_thread::sleep_for(std::chrono::milliseconds(10)); @@ -60,13 +63,15 @@ void GrpcRpcManagerTest::PollForWork(bool& is_work_found, void **tag) { num_calls_++; if (num_calls_ > 50) { std::cout << "poll: False" << std::endl; - is_work_found = false; + work_status = SHUTDOWN; ShutdownRpcManager(); } } + + return work_status; } -void GrpcRpcManagerTest::DoWork(void *tag) { +void GrpcRpcManagerTest::DoWork(void *tag, bool ok) { { std::unique_lock lock(mu_); std::cout << "Work: " << std::this_thread::get_id() << std::endl; @@ -74,7 +79,7 @@ void GrpcRpcManagerTest::DoWork(void *tag) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); } -int main(int argc, char** argv) { +int main(int argc, char **argv) { grpc::testing::InitTest(&argc, &argv, true); GrpcRpcManagerTest test_rpc_manager(3, 15, 20); test_rpc_manager.Initialize(); diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.h b/test/cpp/rpcmanager/grpc_rpc_manager_test.h index 42e3549ed13..186da81f2fd 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.h +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.h @@ -41,10 +41,11 @@ namespace testing { class GrpcRpcManagerTest GRPC_FINAL : public GrpcRpcManager { public: GrpcRpcManagerTest(int min_pollers, int max_pollers, int max_threads) - : GrpcRpcManager(min_pollers, max_pollers, max_threads), num_calls_(0){}; + : GrpcRpcManager(min_pollers, max_pollers), num_calls_(0){}; - void PollForWork(bool &is_work_found, void **tag) GRPC_OVERRIDE; - void DoWork(void *tag) GRPC_OVERRIDE; + grpc::GrpcRpcManager::WorkStatus PollForWork(void **tag, + bool *ok) GRPC_OVERRIDE; + void DoWork(void *tag, bool ok) GRPC_OVERRIDE; private: grpc::mutex mu_; From 7e9371b08e3a6e2e37a1cf63e5bfee6cf836ff68 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 13:47:22 -0700 Subject: [PATCH 033/286] Initial buffer pool implementation --- src/core/lib/iomgr/buffer_pool.c | 279 +++++++++++++++++++++++++++++++ src/core/lib/iomgr/buffer_pool.h | 82 +++++++++ 2 files changed, 361 insertions(+) create mode 100644 src/core/lib/iomgr/buffer_pool.c create mode 100644 src/core/lib/iomgr/buffer_pool.h diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c new file mode 100644 index 00000000000..a6604a23fc1 --- /dev/null +++ b/src/core/lib/iomgr/buffer_pool.c @@ -0,0 +1,279 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/buffer_pool.h" + +#include +#include + +#include "src/core/lib/iomgr/combiner.h" + +typedef bool (*bpstate_func)(grpc_exec_ctx *exec_ctx, + grpc_buffer_pool *buffer_pool); + +struct grpc_buffer_pool { + grpc_combiner *combiner; + int64_t size; + int64_t free_pool; + + bool step_scheduled; + bool reclaiming; + grpc_closure bpstep_closure; +}; + +/******************************************************************************* + * list management + */ + +void bulist_add(grpc_buffer_user *buffer_user, grpc_bulist list); +bool bulist_empty(grpc_buffer_pool *buffer_pool, grpc_bulist list); +grpc_buffer_user *bulist_head(grpc_buffer_pool *buffer_pool, grpc_bulist list); +grpc_buffer_user *bulist_pop(grpc_buffer_pool *buffer_pool, grpc_bulist list); +void bulist_remove(grpc_buffer_user *buffer_pool, grpc_bulist list); + +/******************************************************************************* + * buffer pool state machine + */ + +static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool); +static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool); +static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool, + bool destructive); + +static void bpstep(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { + grpc_buffer_pool *buffer_pool = bp; + buffer_pool->step_scheduled = false; + do { + if (bpalloc(exec_ctx, buffer_pool)) return; + } while (bpscavenge(exec_ctx, buffer_pool)); + bpreclaim(exec_ctx, buffer_pool, false) || + bpreclaim(exec_ctx, buffer_pool, true); +} + +static void bpstep_sched(grpc_exec_ctx *exec_ctx, + grpc_buffer_pool *buffer_pool) { + if (buffer_pool->step_scheduled) return; + buffer_pool->step_scheduled = true; + grpc_combiner_execute_finally(exec_ctx, buffer_pool->combiner, + &buffer_pool->bpstep_closure, GRPC_ERROR_NONE, + false); +} + +/* returns true if all allocations are completed */ +static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { + grpc_buffer_user *buffer_user; + while ((buffer_user = + bulist_head(buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION))) { + gpr_mu_lock(&buffer_user->mu); + if (buffer_user->free_pool < 0 && + -buffer_user->free_pool < buffer_pool->free_pool) { + buffer_pool->free_pool += buffer_user->free_pool; + buffer_user->free_pool = 0; + } + if (buffer_user->free_pool >= 0) { + buffer_user->allocating = false; + grpc_exec_ctx_enqueue_list(exec_ctx, &buffer_user->on_allocated, NULL); + bulist_remove(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); + gpr_mu_unlock(&buffer_user->mu); + } else { + gpr_mu_unlock(&buffer_user->mu); + return false; + } + } + return true; +} + +/* returns true if any memory could be reclaimed from buffers */ +static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { + grpc_buffer_user *buffer_user; + while ((buffer_user = + bulist_pop(buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL))) { + gpr_mu_lock(&buffer_user->mu); + if (buffer_pool->free_pool > 0) { + buffer_pool->free_pool += buffer_user->free_pool; + buffer_user->free_pool = 0; + gpr_mu_unlock(&buffer_user->mu); + return true; + } else { + gpr_mu_unlock(&buffer_user->mu); + } + } + return false; +} + +/* returns true if reclaimation is proceeding */ +static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool, + bool destructive) { + if (buffer_pool->reclaiming) return true; + grpc_bulist list = destructive ? GRPC_BULIST_RECLAIMER_BENIGN + : GRPC_BULIST_RECLAIMER_DESTRUCTIVE; + grpc_buffer_user *buffer_user = bulist_pop(buffer_pool, list); + if (buffer_user == NULL) return false; + buffer_pool->reclaiming = true; + grpc_exec_ctx_sched(exec_ctx, buffer_user->reclaimers[destructive], + GRPC_ERROR_NONE, NULL); + buffer_user->reclaimers[destructive] = NULL; + return true; +} + +/******************************************************************************* + * grpc_buffer_pool internal implementation + */ + +static void bu_allocate(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { + grpc_buffer_user *buffer_user = bu; + if (bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION)) { + bpstep_sched(exec_ctx, buffer_user->buffer_pool); + } + bulist_add(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); +} + +static void bu_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, + grpc_error *error) { + grpc_buffer_user *buffer_user = bu; + if (!bulist_empty(buffer_user->buffer_pool, + GRPC_BULIST_AWAITING_ALLOCATION) && + bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL)) { + bpstep_sched(exec_ctx, buffer_user->buffer_pool); + } + bulist_add(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); +} + +static void bu_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, + grpc_error *error) { + grpc_buffer_user *buffer_user = bu; + if (!bulist_empty(buffer_user->buffer_pool, + GRPC_BULIST_AWAITING_ALLOCATION) && + bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL) && + bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_RECLAIMER_BENIGN)) { + bpstep_sched(exec_ctx, buffer_user->buffer_pool); + } + bulist_add(buffer_user, GRPC_BULIST_RECLAIMER_BENIGN); +} + +static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, + grpc_error *error) { + grpc_buffer_user *buffer_user = bu; + if (!bulist_empty(buffer_user->buffer_pool, + GRPC_BULIST_AWAITING_ALLOCATION) && + bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL) && + bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_RECLAIMER_BENIGN) && + bulist_empty(buffer_user->buffer_pool, + GRPC_BULIST_RECLAIMER_DESTRUCTIVE)) { + bpstep_sched(exec_ctx, buffer_user->buffer_pool); + } + bulist_add(buffer_user, GRPC_BULIST_RECLAIMER_DESTRUCTIVE); +} + +/******************************************************************************* + * grpc_buffer_pool api + */ + +grpc_buffer_pool *grpc_buffer_pool_create(void) { + grpc_buffer_pool *buffer_pool = gpr_malloc(sizeof(*buffer_pool)); + buffer_pool->combiner = grpc_combiner_create(NULL); + buffer_pool->free_pool = INT64_MAX; + buffer_pool->size = INT64_MAX; + grpc_closure_init(&buffer_pool->bpstep_closure, bpstep, buffer_pool); + return buffer_pool; +} + +/******************************************************************************* + * grpc_buffer_user api + */ + +void grpc_buffer_user_init(grpc_buffer_user *buffer_user, + grpc_buffer_pool *buffer_pool) { + buffer_user->buffer_pool = buffer_pool; + grpc_closure_init(&buffer_user->allocate_closure, &bu_allocate, buffer_user); + grpc_closure_init(&buffer_user->add_to_free_pool_closure, + &bu_add_to_free_pool, buffer_user); + grpc_closure_init(&buffer_user->post_reclaimer_closure[0], + &bu_post_benign_reclaimer, buffer_user); + grpc_closure_init(&buffer_user->post_reclaimer_closure[1], + &bu_post_destructive_reclaimer, buffer_user); + gpr_mu_init(&buffer_user->mu); + buffer_user->allocated = 0; + buffer_user->free_pool = 0; + grpc_closure_list_init(&buffer_user->on_allocated); + buffer_user->allocating = false; + buffer_user->added_to_free_pool = false; +} + +void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, size_t size, + grpc_closure *optional_on_done) { + gpr_mu_lock(&buffer_user->mu); + buffer_user->allocated += size; + buffer_user->free_pool -= size; + if (buffer_user->free_pool < 0) { + grpc_closure_list_append(&buffer_user->on_allocated, optional_on_done, + GRPC_ERROR_NONE); + if (!buffer_user->allocating) { + buffer_user->allocating = true; + grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, + &buffer_user->allocate_closure, GRPC_ERROR_NONE); + } + } else { + grpc_exec_ctx_sched(exec_ctx, optional_on_done, GRPC_ERROR_NONE, NULL); + } + gpr_mu_unlock(&buffer_user->mu); +} + +void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, size_t size) { + gpr_mu_lock(&buffer_user->mu); + GPR_ASSERT(buffer_user->allocated >= size); + bool was_zero_or_negative = buffer_user->free_pool <= 0; + buffer_user->free_pool += size; + buffer_user->allocated -= size; + bool is_bigger_than_zero = buffer_user->free_pool > 0; + if (is_bigger_than_zero && was_zero_or_negative && + !buffer_user->added_to_free_pool) { + buffer_user->added_to_free_pool = true; + grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, + &buffer_user->add_to_free_pool_closure, + GRPC_ERROR_NONE); + } + gpr_mu_unlock(&buffer_user->mu); +} + +void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, + bool destructive, grpc_closure *closure) { + GPR_ASSERT(buffer_user->reclaimers[destructive] == NULL); + buffer_user->reclaimers[destructive] = closure; + grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, + &buffer_user->post_reclaimer_closure[destructive], + GRPC_ERROR_NONE); +} diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h new file mode 100644 index 00000000000..eec3d4c1e04 --- /dev/null +++ b/src/core/lib/iomgr/buffer_pool.h @@ -0,0 +1,82 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_BUFFER_POOL_H +#define GRPC_CORE_LIB_IOMGR_BUFFER_POOL_H + +#include + +#include "src/core/lib/iomgr/exec_ctx.h" + +typedef enum { + GRPC_BULIST_AWAITING_ALLOCATION, + GRPC_BULIST_NON_EMPTY_FREE_POOL, + GRPC_BULIST_RECLAIMER_BENIGN, + GRPC_BULIST_RECLAIMER_DESTRUCTIVE, +} grpc_bulist; + +typedef struct grpc_buffer_user { + grpc_buffer_pool *buffer_pool; + + grpc_closure allocate_closure; + grpc_closure add_to_free_pool_closure; + + gpr_mu mu; + int64_t allocated; + int64_t free_pool; + grpc_closure_list on_allocated; + bool allocating; + bool added_to_free_pool; + + grpc_closure *reclaimers[2]; + grpc_closure post_reclaimer_closure[2]; +} grpc_buffer_user; + +void grpc_buffer_user_init(grpc_buffer_user *buffer_user, + grpc_buffer_pool *buffer_pool); +void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, + grpc_closure *on_done); + +void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, size_t size, + grpc_closure *optional_on_done); +void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, size_t size); +void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, + bool destructive, grpc_closure *closure); +void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user); + +#endif /* GRPC_CORE_LIB_IOMGR_BUFFER_POOL_H */ From 7af69f34df6e09b1ab5121ad35ab2485381f18d8 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 13:48:54 -0700 Subject: [PATCH 034/286] Add buffer pools to build --- BUILD | 12 ++++++++++++ CMakeLists.txt | 5 +++++ Makefile | 6 ++++++ binding.gyp | 1 + build.yaml | 2 ++ config.m4 | 1 + gRPC-Core.podspec | 3 +++ grpc.def | 5 +++++ grpc.gemspec | 2 ++ package.xml | 2 ++ src/python/grpcio/grpc_core_dependencies.py | 1 + src/ruby/ext/grpc/rb_grpc_imports.generated.c | 10 ++++++++++ src/ruby/ext/grpc/rb_grpc_imports.generated.h | 15 +++++++++++++++ tools/doxygen/Doxyfile.c++.internal | 2 ++ tools/doxygen/Doxyfile.core.internal | 2 ++ tools/run_tests/sources_and_headers.json | 3 +++ vsprojects/vcxproj/grpc++/grpc++.vcxproj | 3 +++ vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters | 6 ++++++ .../grpc++_unsecure/grpc++_unsecure.vcxproj | 3 +++ .../grpc++_unsecure.vcxproj.filters | 6 ++++++ vsprojects/vcxproj/grpc/grpc.vcxproj | 3 +++ vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 6 ++++++ .../vcxproj/grpc_test_util/grpc_test_util.vcxproj | 3 +++ .../grpc_test_util/grpc_test_util.vcxproj.filters | 6 ++++++ .../vcxproj/grpc_unsecure/grpc_unsecure.vcxproj | 3 +++ .../grpc_unsecure/grpc_unsecure.vcxproj.filters | 6 ++++++ 26 files changed, 117 insertions(+) diff --git a/BUILD b/BUILD index a2d103210b4..a4f50230e90 100644 --- a/BUILD +++ b/BUILD @@ -178,6 +178,7 @@ cc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", + "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -336,6 +337,7 @@ cc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", + "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -575,6 +577,7 @@ cc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", + "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -718,6 +721,7 @@ cc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", + "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -927,6 +931,7 @@ cc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", + "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -1062,6 +1067,7 @@ cc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", + "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -1276,6 +1282,7 @@ cc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", + "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -1390,6 +1397,7 @@ cc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", + "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -1684,6 +1692,7 @@ cc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", + "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -1793,6 +1802,7 @@ cc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", + "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -2181,6 +2191,7 @@ objc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", + "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -2399,6 +2410,7 @@ objc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", + "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index fde52d5f8d1..3e6af4dab54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -305,6 +305,7 @@ add_library(grpc src/core/lib/http/format_request.c src/core/lib/http/httpcli.c src/core/lib/http/parser.c + src/core/lib/iomgr/buffer_pool.c src/core/lib/iomgr/closure.c src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c @@ -562,6 +563,7 @@ add_library(grpc_cronet src/core/lib/http/format_request.c src/core/lib/http/httpcli.c src/core/lib/http/parser.c + src/core/lib/iomgr/buffer_pool.c src/core/lib/iomgr/closure.c src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c @@ -791,6 +793,7 @@ add_library(grpc_unsecure src/core/lib/http/format_request.c src/core/lib/http/httpcli.c src/core/lib/http/parser.c + src/core/lib/iomgr/buffer_pool.c src/core/lib/iomgr/closure.c src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c @@ -1047,6 +1050,7 @@ add_library(grpc++ src/core/lib/http/format_request.c src/core/lib/http/httpcli.c src/core/lib/http/parser.c + src/core/lib/iomgr/buffer_pool.c src/core/lib/iomgr/closure.c src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c @@ -1400,6 +1404,7 @@ add_library(grpc++_unsecure src/core/lib/http/format_request.c src/core/lib/http/httpcli.c src/core/lib/http/parser.c + src/core/lib/iomgr/buffer_pool.c src/core/lib/iomgr/closure.c src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c diff --git a/Makefile b/Makefile index 428dd70b920..fa75a286aa3 100644 --- a/Makefile +++ b/Makefile @@ -2538,6 +2538,7 @@ LIBGRPC_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ + src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -2813,6 +2814,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ + src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -3076,6 +3078,7 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ + src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -3267,6 +3270,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ + src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -3606,6 +3610,7 @@ LIBGRPC++_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ + src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -4234,6 +4239,7 @@ LIBGRPC++_UNSECURE_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ + src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ diff --git a/binding.gyp b/binding.gyp index d87a6f4b8f5..149883eb2a0 100644 --- a/binding.gyp +++ b/binding.gyp @@ -580,6 +580,7 @@ 'src/core/lib/http/format_request.c', 'src/core/lib/http/httpcli.c', 'src/core/lib/http/parser.c', + 'src/core/lib/iomgr/buffer_pool.c', 'src/core/lib/iomgr/closure.c', 'src/core/lib/iomgr/combiner.c', 'src/core/lib/iomgr/endpoint.c', diff --git a/build.yaml b/build.yaml index b262e448f07..640f5c82edb 100644 --- a/build.yaml +++ b/build.yaml @@ -182,6 +182,7 @@ filegroups: - src/core/lib/http/format_request.h - src/core/lib/http/httpcli.h - src/core/lib/http/parser.h + - src/core/lib/iomgr/buffer_pool.h - src/core/lib/iomgr/closure.h - src/core/lib/iomgr/combiner.h - src/core/lib/iomgr/endpoint.h @@ -264,6 +265,7 @@ filegroups: - src/core/lib/http/format_request.c - src/core/lib/http/httpcli.c - src/core/lib/http/parser.c + - src/core/lib/iomgr/buffer_pool.c - src/core/lib/iomgr/closure.c - src/core/lib/iomgr/combiner.c - src/core/lib/iomgr/endpoint.c diff --git a/config.m4 b/config.m4 index bbad862538c..8c9900929c2 100644 --- a/config.m4 +++ b/config.m4 @@ -99,6 +99,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ + src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 062e5eb543c..9205376f930 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -265,6 +265,7 @@ Pod::Spec.new do |s| 'src/core/lib/http/format_request.h', 'src/core/lib/http/httpcli.h', 'src/core/lib/http/parser.h', + 'src/core/lib/iomgr/buffer_pool.h', 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/combiner.h', 'src/core/lib/iomgr/endpoint.h', @@ -427,6 +428,7 @@ Pod::Spec.new do |s| 'src/core/lib/http/format_request.c', 'src/core/lib/http/httpcli.c', 'src/core/lib/http/parser.c', + 'src/core/lib/iomgr/buffer_pool.c', 'src/core/lib/iomgr/closure.c', 'src/core/lib/iomgr/combiner.c', 'src/core/lib/iomgr/endpoint.c', @@ -634,6 +636,7 @@ Pod::Spec.new do |s| 'src/core/lib/http/format_request.h', 'src/core/lib/http/httpcli.h', 'src/core/lib/http/parser.h', + 'src/core/lib/iomgr/buffer_pool.h', 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/combiner.h', 'src/core/lib/iomgr/endpoint.h', diff --git a/grpc.def b/grpc.def index 6e905a297ed..644a5886f2e 100644 --- a/grpc.def +++ b/grpc.def @@ -94,6 +94,11 @@ EXPORTS grpc_header_nonbin_value_is_legal grpc_is_binary_header grpc_call_error_to_string + grpc_buffer_pool_create + grpc_buffer_pool_ref + grpc_buffer_pool_unref + grpc_buffer_pool_resize + grpc_buffer_pool_arg_vtable grpc_insecure_channel_create_from_fd grpc_server_add_insecure_channel_from_fd grpc_use_signal diff --git a/grpc.gemspec b/grpc.gemspec index 6ff17385eae..c7a8599e97d 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -185,6 +185,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/http/format_request.h ) s.files += %w( src/core/lib/http/httpcli.h ) s.files += %w( src/core/lib/http/parser.h ) + s.files += %w( src/core/lib/iomgr/buffer_pool.h ) s.files += %w( src/core/lib/iomgr/closure.h ) s.files += %w( src/core/lib/iomgr/combiner.h ) s.files += %w( src/core/lib/iomgr/endpoint.h ) @@ -347,6 +348,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/http/format_request.c ) s.files += %w( src/core/lib/http/httpcli.c ) s.files += %w( src/core/lib/http/parser.c ) + s.files += %w( src/core/lib/iomgr/buffer_pool.c ) s.files += %w( src/core/lib/iomgr/closure.c ) s.files += %w( src/core/lib/iomgr/combiner.c ) s.files += %w( src/core/lib/iomgr/endpoint.c ) diff --git a/package.xml b/package.xml index 1acd9b853a7..5dd621ab281 100644 --- a/package.xml +++ b/package.xml @@ -192,6 +192,7 @@ + @@ -354,6 +355,7 @@ + diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 0fdba13cf5b..5f4ac5e326b 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -93,6 +93,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/http/format_request.c', 'src/core/lib/http/httpcli.c', 'src/core/lib/http/parser.c', + 'src/core/lib/iomgr/buffer_pool.c', 'src/core/lib/iomgr/closure.c', 'src/core/lib/iomgr/combiner.c', 'src/core/lib/iomgr/endpoint.c', diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index a6cad0db1ac..6c352554f95 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c @@ -132,6 +132,11 @@ grpc_header_key_is_legal_type grpc_header_key_is_legal_import; grpc_header_nonbin_value_is_legal_type grpc_header_nonbin_value_is_legal_import; grpc_is_binary_header_type grpc_is_binary_header_import; grpc_call_error_to_string_type grpc_call_error_to_string_import; +grpc_buffer_pool_create_type grpc_buffer_pool_create_import; +grpc_buffer_pool_ref_type grpc_buffer_pool_ref_import; +grpc_buffer_pool_unref_type grpc_buffer_pool_unref_import; +grpc_buffer_pool_resize_type grpc_buffer_pool_resize_import; +grpc_buffer_pool_arg_vtable_type grpc_buffer_pool_arg_vtable_import; grpc_insecure_channel_create_from_fd_type grpc_insecure_channel_create_from_fd_import; grpc_server_add_insecure_channel_from_fd_type grpc_server_add_insecure_channel_from_fd_import; grpc_use_signal_type grpc_use_signal_import; @@ -401,6 +406,11 @@ void grpc_rb_load_imports(HMODULE library) { grpc_header_nonbin_value_is_legal_import = (grpc_header_nonbin_value_is_legal_type) GetProcAddress(library, "grpc_header_nonbin_value_is_legal"); grpc_is_binary_header_import = (grpc_is_binary_header_type) GetProcAddress(library, "grpc_is_binary_header"); grpc_call_error_to_string_import = (grpc_call_error_to_string_type) GetProcAddress(library, "grpc_call_error_to_string"); + grpc_buffer_pool_create_import = (grpc_buffer_pool_create_type) GetProcAddress(library, "grpc_buffer_pool_create"); + grpc_buffer_pool_ref_import = (grpc_buffer_pool_ref_type) GetProcAddress(library, "grpc_buffer_pool_ref"); + grpc_buffer_pool_unref_import = (grpc_buffer_pool_unref_type) GetProcAddress(library, "grpc_buffer_pool_unref"); + grpc_buffer_pool_resize_import = (grpc_buffer_pool_resize_type) GetProcAddress(library, "grpc_buffer_pool_resize"); + grpc_buffer_pool_arg_vtable_import = (grpc_buffer_pool_arg_vtable_type) GetProcAddress(library, "grpc_buffer_pool_arg_vtable"); grpc_insecure_channel_create_from_fd_import = (grpc_insecure_channel_create_from_fd_type) GetProcAddress(library, "grpc_insecure_channel_create_from_fd"); grpc_server_add_insecure_channel_from_fd_import = (grpc_server_add_insecure_channel_from_fd_type) GetProcAddress(library, "grpc_server_add_insecure_channel_from_fd"); grpc_use_signal_import = (grpc_use_signal_type) GetProcAddress(library, "grpc_use_signal"); diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index b87abfd8efd..36f96b6d6e8 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -347,6 +347,21 @@ extern grpc_is_binary_header_type grpc_is_binary_header_import; typedef const char *(*grpc_call_error_to_string_type)(grpc_call_error error); extern grpc_call_error_to_string_type grpc_call_error_to_string_import; #define grpc_call_error_to_string grpc_call_error_to_string_import +typedef grpc_buffer_pool *(*grpc_buffer_pool_create_type)(void); +extern grpc_buffer_pool_create_type grpc_buffer_pool_create_import; +#define grpc_buffer_pool_create grpc_buffer_pool_create_import +typedef void(*grpc_buffer_pool_ref_type)(grpc_buffer_pool *buffer_pool); +extern grpc_buffer_pool_ref_type grpc_buffer_pool_ref_import; +#define grpc_buffer_pool_ref grpc_buffer_pool_ref_import +typedef void(*grpc_buffer_pool_unref_type)(grpc_buffer_pool *buffer_pool); +extern grpc_buffer_pool_unref_type grpc_buffer_pool_unref_import; +#define grpc_buffer_pool_unref grpc_buffer_pool_unref_import +typedef void(*grpc_buffer_pool_resize_type)(grpc_buffer_pool *buffer_pool, size_t new_size); +extern grpc_buffer_pool_resize_type grpc_buffer_pool_resize_import; +#define grpc_buffer_pool_resize grpc_buffer_pool_resize_import +typedef grpc_arg_pointer_vtable *(*grpc_buffer_pool_arg_vtable_type)(void); +extern grpc_buffer_pool_arg_vtable_type grpc_buffer_pool_arg_vtable_import; +#define grpc_buffer_pool_arg_vtable grpc_buffer_pool_arg_vtable_import typedef grpc_channel *(*grpc_insecure_channel_create_from_fd_type)(const char *target, int fd, const grpc_channel_args *args); extern grpc_insecure_channel_create_from_fd_type grpc_insecure_channel_create_from_fd_import; #define grpc_insecure_channel_create_from_fd grpc_insecure_channel_create_from_fd_import diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index fbe82c86165..124f3c6634a 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -886,6 +886,7 @@ src/core/lib/debug/trace.h \ src/core/lib/http/format_request.h \ src/core/lib/http/httpcli.h \ src/core/lib/http/parser.h \ +src/core/lib/iomgr/buffer_pool.h \ src/core/lib/iomgr/closure.h \ src/core/lib/iomgr/combiner.h \ src/core/lib/iomgr/endpoint.h \ @@ -1000,6 +1001,7 @@ src/core/lib/debug/trace.c \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ +src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 83fc9e7affd..3d77fb856c0 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -802,6 +802,7 @@ src/core/lib/debug/trace.h \ src/core/lib/http/format_request.h \ src/core/lib/http/httpcli.h \ src/core/lib/http/parser.h \ +src/core/lib/iomgr/buffer_pool.h \ src/core/lib/iomgr/closure.h \ src/core/lib/iomgr/combiner.h \ src/core/lib/iomgr/endpoint.h \ @@ -964,6 +965,7 @@ src/core/lib/debug/trace.c \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ +src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index b5d26862d6d..bf03b761ea2 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -5951,6 +5951,7 @@ "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", + "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -6059,6 +6060,8 @@ "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.c", "src/core/lib/http/parser.h", + "src/core/lib/iomgr/buffer_pool.c", + "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.c", diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index 1e5fb9b3cf0..e5c0f824176 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -386,6 +386,7 @@ + @@ -550,6 +551,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index 8da2b766199..cb93bdeb2de 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -145,6 +145,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr @@ -758,6 +761,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index e712c48fff5..c220dbbc7f1 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -382,6 +382,7 @@ + @@ -536,6 +537,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index b2ccc64003b..0fcb50d3acc 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -130,6 +130,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr @@ -731,6 +734,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 84330e4d421..d7ab805257e 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -311,6 +311,7 @@ + @@ -491,6 +492,8 @@ + + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 9cd5fa1544f..d0f426b6381 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -49,6 +49,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr @@ -710,6 +713,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index 5718652ddea..06e10a94321 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -202,6 +202,7 @@ + @@ -334,6 +335,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index da80cac3506..68d697b3954 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -97,6 +97,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr @@ -488,6 +491,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 97198c5e350..196712f3733 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -301,6 +301,7 @@ + @@ -459,6 +460,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 0dbf3403124..7b31a20acca 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -52,6 +52,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr @@ -620,6 +623,9 @@ src\core\lib\http + + src\core\lib\iomgr + src\core\lib\iomgr From ca30eb9931aa84056382c7bd3acf7edd3eb3f5d0 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 15:04:04 -0700 Subject: [PATCH 035/286] Add (empty) buffer pool test --- Makefile | 36 ++++ build.yaml | 11 + src/core/lib/iomgr/buffer_pool.c | 2 +- test/core/iomgr/buffer_pool_test.c | 43 ++++ tools/run_tests/sources_and_headers.json | 16 ++ tools/run_tests/tests.json | 21 ++ vsprojects/buildtests_c.sln | 27 +++ .../buffer_pool_test/buffer_pool_test.vcxproj | 199 ++++++++++++++++++ .../buffer_pool_test.vcxproj.filters | 21 ++ 9 files changed, 375 insertions(+), 1 deletion(-) create mode 100644 test/core/iomgr/buffer_pool_test.c create mode 100644 vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj create mode 100644 vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj.filters diff --git a/Makefile b/Makefile index fa75a286aa3..3373b18a26f 100644 --- a/Makefile +++ b/Makefile @@ -907,6 +907,7 @@ api_fuzzer: $(BINDIR)/$(CONFIG)/api_fuzzer bad_server_response_test: $(BINDIR)/$(CONFIG)/bad_server_response_test bin_decoder_test: $(BINDIR)/$(CONFIG)/bin_decoder_test bin_encoder_test: $(BINDIR)/$(CONFIG)/bin_encoder_test +buffer_pool_test: $(BINDIR)/$(CONFIG)/buffer_pool_test census_context_test: $(BINDIR)/$(CONFIG)/census_context_test census_resource_test: $(BINDIR)/$(CONFIG)/census_resource_test census_trace_context_test: $(BINDIR)/$(CONFIG)/census_trace_context_test @@ -1236,6 +1237,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/bad_server_response_test \ $(BINDIR)/$(CONFIG)/bin_decoder_test \ $(BINDIR)/$(CONFIG)/bin_encoder_test \ + $(BINDIR)/$(CONFIG)/buffer_pool_test \ $(BINDIR)/$(CONFIG)/census_context_test \ $(BINDIR)/$(CONFIG)/census_resource_test \ $(BINDIR)/$(CONFIG)/census_trace_context_test \ @@ -1549,6 +1551,8 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/bin_decoder_test || ( echo test bin_decoder_test failed ; exit 1 ) $(E) "[RUN] Testing bin_encoder_test" $(Q) $(BINDIR)/$(CONFIG)/bin_encoder_test || ( echo test bin_encoder_test failed ; exit 1 ) + $(E) "[RUN] Testing buffer_pool_test" + $(Q) $(BINDIR)/$(CONFIG)/buffer_pool_test || ( echo test buffer_pool_test failed ; exit 1 ) $(E) "[RUN] Testing census_context_test" $(Q) $(BINDIR)/$(CONFIG)/census_context_test || ( echo test census_context_test failed ; exit 1 ) $(E) "[RUN] Testing census_resource_test" @@ -7159,6 +7163,38 @@ endif endif +BUFFER_POOL_TEST_SRC = \ + test/core/iomgr/buffer_pool_test.c \ + +BUFFER_POOL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BUFFER_POOL_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/buffer_pool_test: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/buffer_pool_test: $(BUFFER_POOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(BUFFER_POOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/buffer_pool_test + +endif + +$(OBJDIR)/$(CONFIG)/test/core/iomgr/buffer_pool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_buffer_pool_test: $(BUFFER_POOL_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(BUFFER_POOL_TEST_OBJS:.o=.dep) +endif +endif + + CENSUS_CONTEXT_TEST_SRC = \ test/core/census/context_test.c \ diff --git a/build.yaml b/build.yaml index 640f5c82edb..080f3f85688 100644 --- a/build.yaml +++ b/build.yaml @@ -1331,6 +1331,17 @@ targets: deps: - grpc_test_util - grpc +- name: buffer_pool_test + cpu_cost: 30 + build: test + language: c + src: + - test/core/iomgr/buffer_pool_test.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr - name: census_context_test build: test language: c diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index a6604a23fc1..8ba6f822f8a 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -253,7 +253,7 @@ void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, size_t size) { gpr_mu_lock(&buffer_user->mu); - GPR_ASSERT(buffer_user->allocated >= size); + GPR_ASSERT(buffer_user->allocated >= (int64_t)size); bool was_zero_or_negative = buffer_user->free_pool <= 0; buffer_user->free_pool += size; buffer_user->allocated -= size; diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c new file mode 100644 index 00000000000..306612f775d --- /dev/null +++ b/test/core/iomgr/buffer_pool_test.c @@ -0,0 +1,43 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/buffer_pool.h" + +#include "test/core/util/test_config.h" + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + grpc_init(); + grpc_shutdown(); + return 0; +} diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index bf03b761ea2..383e2035227 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -124,6 +124,22 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "language": "c", + "name": "buffer_pool_test", + "src": [ + "test/core/iomgr/buffer_pool_test.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 3e3bfd503ee..935c8304b15 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -148,6 +148,27 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 30, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c", + "name": "buffer_pool_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index c46e86d78bf..51708651ca5 100644 --- a/vsprojects/buildtests_c.sln +++ b/vsprojects/buildtests_c.sln @@ -98,6 +98,17 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bin_encoder_test", "vcxproj {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buffer_pool_test", "vcxproj\test\buffer_pool_test\buffer_pool_test.vcxproj", "{46480473-88FC-8C53-3509-FC7F4DC3A8CD}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "census_context_test", "vcxproj\test\census_context_test\census_context_test.vcxproj", "{5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}" ProjectSection(myProperties) = preProject lib = "False" @@ -1639,6 +1650,22 @@ Global {D5C70922-D68E-0E9D-9988-995E0F9A79AE}.Release-DLL|Win32.Build.0 = Release|Win32 {D5C70922-D68E-0E9D-9988-995E0F9A79AE}.Release-DLL|x64.ActiveCfg = Release|x64 {D5C70922-D68E-0E9D-9988-995E0F9A79AE}.Release-DLL|x64.Build.0 = Release|x64 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug|Win32.ActiveCfg = Debug|Win32 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug|x64.ActiveCfg = Debug|x64 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release|Win32.ActiveCfg = Release|Win32 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release|x64.ActiveCfg = Release|x64 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug|Win32.Build.0 = Debug|Win32 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug|x64.Build.0 = Debug|x64 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release|Win32.Build.0 = Release|Win32 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release|x64.Build.0 = Release|x64 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug-DLL|x64.Build.0 = Debug|x64 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release-DLL|Win32.Build.0 = Release|Win32 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release-DLL|x64.ActiveCfg = Release|x64 + {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release-DLL|x64.Build.0 = Release|x64 {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug|Win32.ActiveCfg = Debug|Win32 {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug|x64.ActiveCfg = Debug|x64 {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj b/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj new file mode 100644 index 00000000000..d11d063f9d1 --- /dev/null +++ b/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj @@ -0,0 +1,199 @@ + + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {46480473-88FC-8C53-3509-FC7F4DC3A8CD} + true + $(SolutionDir)IntDir\$(MSBuildProjectName)\ + + + + v100 + + + v110 + + + v120 + + + v140 + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + buffer_pool_test + static + Debug + static + Debug + + + buffer_pool_test + static + Release + static + Release + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + + + + + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + + + {29D16885-7228-4C31-81ED-5F9187C7F2A9} + + + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + + + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + diff --git a/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj.filters b/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj.filters new file mode 100644 index 00000000000..ecbf91ec6e9 --- /dev/null +++ b/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj.filters @@ -0,0 +1,21 @@ + + + + + test\core\iomgr + + + + + + {94e599c3-a059-4581-0cac-d15361ec8a7d} + + + {6d25d413-0043-5a1c-52f7-7d25809be372} + + + {64b38e90-4497-be2e-cee1-402590cbea8a} + + + + From 0b13fcdab2a387cdd87018d1b25aa3c1ee471acf Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 15:26:47 -0700 Subject: [PATCH 036/286] no op test passes --- src/core/lib/iomgr/buffer_pool.c | 95 ++++++++++++++++++++++++++---- src/core/lib/iomgr/buffer_pool.h | 9 ++- test/core/iomgr/buffer_pool_test.c | 8 +++ 3 files changed, 98 insertions(+), 14 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 8ba6f822f8a..31ca08cc948 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -41,7 +41,14 @@ typedef bool (*bpstate_func)(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool); +typedef struct { + grpc_buffer_user *head; + grpc_buffer_user *tail; +} grpc_buffer_user_list; + struct grpc_buffer_pool { + gpr_refcount refs; + grpc_combiner *combiner; int64_t size; int64_t free_pool; @@ -49,17 +56,57 @@ struct grpc_buffer_pool { bool step_scheduled; bool reclaiming; grpc_closure bpstep_closure; + + grpc_buffer_user_list lists[GRPC_BULIST_COUNT]; }; /******************************************************************************* * list management */ -void bulist_add(grpc_buffer_user *buffer_user, grpc_bulist list); -bool bulist_empty(grpc_buffer_pool *buffer_pool, grpc_bulist list); -grpc_buffer_user *bulist_head(grpc_buffer_pool *buffer_pool, grpc_bulist list); -grpc_buffer_user *bulist_pop(grpc_buffer_pool *buffer_pool, grpc_bulist list); -void bulist_remove(grpc_buffer_user *buffer_pool, grpc_bulist list); +static void bulist_add_tail(grpc_buffer_user *buffer_user, grpc_bulist list) { + grpc_buffer_pool *buffer_pool = buffer_user->buffer_pool; + grpc_buffer_user_list *lst = &buffer_pool->lists[list]; + if (lst->head == NULL) { + lst->head = lst->tail = buffer_user; + } else { + lst->tail->next[list] = buffer_user; + lst->tail = buffer_user; + } + buffer_user->next[list] = NULL; +} + +static void bulist_add_head(grpc_buffer_user *buffer_user, grpc_bulist list) { + grpc_buffer_pool *buffer_pool = buffer_user->buffer_pool; + grpc_buffer_user_list *lst = &buffer_pool->lists[list]; + if (lst->head == NULL) { + lst->head = lst->tail = buffer_user; + buffer_user->next[list] = NULL; + } else { + buffer_user->next[list] = lst->head; + lst->head = buffer_user; + } +} + +static bool bulist_empty(grpc_buffer_pool *buffer_pool, grpc_bulist list) { + return buffer_pool->lists[list].head == NULL; +} + +static grpc_buffer_user *bulist_pop(grpc_buffer_pool *buffer_pool, + grpc_bulist list) { + grpc_buffer_user_list *lst = &buffer_pool->lists[list]; + grpc_buffer_user *buffer_user = lst->head; + if (buffer_user == NULL) { + return NULL; + } + if (buffer_user == lst->tail) { + lst->head = lst->tail = NULL; + } else { + lst->head = buffer_user->next[list]; + } + buffer_user->next[list] = NULL; + return buffer_user; +} /******************************************************************************* * buffer pool state machine @@ -93,7 +140,7 @@ static void bpstep_sched(grpc_exec_ctx *exec_ctx, static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { grpc_buffer_user *buffer_user; while ((buffer_user = - bulist_head(buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION))) { + bulist_pop(buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION))) { gpr_mu_lock(&buffer_user->mu); if (buffer_user->free_pool < 0 && -buffer_user->free_pool < buffer_pool->free_pool) { @@ -103,9 +150,9 @@ static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { if (buffer_user->free_pool >= 0) { buffer_user->allocating = false; grpc_exec_ctx_enqueue_list(exec_ctx, &buffer_user->on_allocated, NULL); - bulist_remove(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); gpr_mu_unlock(&buffer_user->mu); } else { + bulist_add_head(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); gpr_mu_unlock(&buffer_user->mu); return false; } @@ -155,7 +202,7 @@ static void bu_allocate(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { if (bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION)) { bpstep_sched(exec_ctx, buffer_user->buffer_pool); } - bulist_add(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); + bulist_add_tail(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); } static void bu_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, @@ -166,7 +213,7 @@ static void bu_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL)) { bpstep_sched(exec_ctx, buffer_user->buffer_pool); } - bulist_add(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); + bulist_add_tail(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); } static void bu_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, @@ -178,7 +225,7 @@ static void bu_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_RECLAIMER_BENIGN)) { bpstep_sched(exec_ctx, buffer_user->buffer_pool); } - bulist_add(buffer_user, GRPC_BULIST_RECLAIMER_BENIGN); + bulist_add_tail(buffer_user, GRPC_BULIST_RECLAIMER_BENIGN); } static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, @@ -192,7 +239,7 @@ static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, GRPC_BULIST_RECLAIMER_DESTRUCTIVE)) { bpstep_sched(exec_ctx, buffer_user->buffer_pool); } - bulist_add(buffer_user, GRPC_BULIST_RECLAIMER_DESTRUCTIVE); + bulist_add_tail(buffer_user, GRPC_BULIST_RECLAIMER_DESTRUCTIVE); } /******************************************************************************* @@ -201,6 +248,7 @@ static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, grpc_buffer_pool *grpc_buffer_pool_create(void) { grpc_buffer_pool *buffer_pool = gpr_malloc(sizeof(*buffer_pool)); + gpr_ref_init(&buffer_pool->refs, 1); buffer_pool->combiner = grpc_combiner_create(NULL); buffer_pool->free_pool = INT64_MAX; buffer_pool->size = INT64_MAX; @@ -208,13 +256,36 @@ grpc_buffer_pool *grpc_buffer_pool_create(void) { return buffer_pool; } +void grpc_buffer_pool_internal_unref(grpc_exec_ctx *exec_ctx, + grpc_buffer_pool *buffer_pool) { + if (gpr_unref(&buffer_pool->refs)) { + grpc_combiner_destroy(exec_ctx, buffer_pool->combiner); + gpr_free(buffer_pool); + } +} + +void grpc_buffer_pool_unref(grpc_buffer_pool *buffer_pool) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_exec_ctx_finish(&exec_ctx); +} + +grpc_buffer_pool *grpc_buffer_pool_internal_ref(grpc_buffer_pool *buffer_pool) { + gpr_ref(&buffer_pool->refs); + return buffer_pool; +} + +void grpc_buffer_pool_ref(grpc_buffer_pool *buffer_pool) { + grpc_buffer_pool_internal_ref(buffer_pool); +} + /******************************************************************************* * grpc_buffer_user api */ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, grpc_buffer_pool *buffer_pool) { - buffer_user->buffer_pool = buffer_pool; + buffer_user->buffer_pool = grpc_buffer_pool_internal_ref(buffer_pool); grpc_closure_init(&buffer_user->allocate_closure, &bu_allocate, buffer_user); grpc_closure_init(&buffer_user->add_to_free_pool_closure, &bu_add_to_free_pool, buffer_user); diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index eec3d4c1e04..087d9a167f3 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -43,9 +43,12 @@ typedef enum { GRPC_BULIST_NON_EMPTY_FREE_POOL, GRPC_BULIST_RECLAIMER_BENIGN, GRPC_BULIST_RECLAIMER_DESTRUCTIVE, + GRPC_BULIST_COUNT } grpc_bulist; -typedef struct grpc_buffer_user { +typedef struct grpc_buffer_user grpc_buffer_user; + +struct grpc_buffer_user { grpc_buffer_pool *buffer_pool; grpc_closure allocate_closure; @@ -60,7 +63,9 @@ typedef struct grpc_buffer_user { grpc_closure *reclaimers[2]; grpc_closure post_reclaimer_closure[2]; -} grpc_buffer_user; + + grpc_buffer_user *next[GRPC_BULIST_COUNT]; +}; void grpc_buffer_user_init(grpc_buffer_user *buffer_user, grpc_buffer_pool *buffer_pool); diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 306612f775d..670ca0acfac 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -33,11 +33,19 @@ #include "src/core/lib/iomgr/buffer_pool.h" +#include + #include "test/core/util/test_config.h" +static void test_no_op(void) { + gpr_log(GPR_DEBUG, "** test_no_op **"); + grpc_buffer_pool_unref(grpc_buffer_pool_create()); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); + test_no_op(); grpc_shutdown(); return 0; } From fe4f0012c641f5d4322e7afb098a731dd81aa467 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 15:39:40 -0700 Subject: [PATCH 037/286] Add resize test --- src/core/lib/iomgr/buffer_pool.c | 34 ++++++++++++++++++++++++++++++ test/core/iomgr/buffer_pool_test.c | 8 +++++++ 2 files changed, 42 insertions(+) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 31ca08cc948..17f8893aadb 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -138,6 +138,10 @@ static void bpstep_sched(grpc_exec_ctx *exec_ctx, /* returns true if all allocations are completed */ static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { + if (buffer_pool->free_pool <= 0) { + return false; + } + grpc_buffer_user *buffer_user; while ((buffer_user = bulist_pop(buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION))) { @@ -242,6 +246,25 @@ static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, bulist_add_tail(buffer_user, GRPC_BULIST_RECLAIMER_DESTRUCTIVE); } +typedef struct { + int64_t size; + grpc_buffer_pool *buffer_pool; + grpc_closure closure; +} bp_resize_args; + +static void bp_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { + bp_resize_args *a = args; + int64_t delta = a->size - a->buffer_pool->size; + a->buffer_pool->size += delta; + a->buffer_pool->free_pool += delta; + if (delta < 0 && a->buffer_pool->free_pool < 0) { + bpstep_sched(exec_ctx, a->buffer_pool); + } else if (delta > 0 && + !bulist_empty(a->buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION)) { + bpstep_sched(exec_ctx, a->buffer_pool); + } +} + /******************************************************************************* * grpc_buffer_pool api */ @@ -279,6 +302,17 @@ void grpc_buffer_pool_ref(grpc_buffer_pool *buffer_pool) { grpc_buffer_pool_internal_ref(buffer_pool); } +void grpc_buffer_pool_resize(grpc_buffer_pool *buffer_pool, size_t size) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + bp_resize_args *a = gpr_malloc(sizeof(*a)); + a->buffer_pool = grpc_buffer_pool_internal_ref(buffer_pool); + a->size = (int64_t)size; + grpc_closure_init(&a->closure, bp_resize, a); + grpc_combiner_execute(&exec_ctx, buffer_pool->combiner, &a->closure, + GRPC_ERROR_NONE); + grpc_exec_ctx_finish(&exec_ctx); +} + /******************************************************************************* * grpc_buffer_user api */ diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 670ca0acfac..8855fe3ab3b 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -42,10 +42,18 @@ static void test_no_op(void) { grpc_buffer_pool_unref(grpc_buffer_pool_create()); } +static void test_resize_then_destroy(void) { + gpr_log(GPR_DEBUG, "** test_resize_then_destroy **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024 * 1024); + grpc_buffer_pool_unref(p); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); test_no_op(); + test_resize_then_destroy(); grpc_shutdown(); return 0; } From 6c9b53e893b01951a2c795abfd38419239ed0e2e Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 15:41:06 -0700 Subject: [PATCH 038/286] Fix leak --- src/core/lib/iomgr/buffer_pool.c | 2 ++ src/core/lib/iomgr/buffer_pool.h | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 17f8893aadb..8aabd7ab68d 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -263,6 +263,8 @@ static void bp_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { !bulist_empty(a->buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION)) { bpstep_sched(exec_ctx, a->buffer_pool); } + grpc_buffer_pool_internal_unref(exec_ctx, a->buffer_pool); + gpr_free(a); } /******************************************************************************* diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 087d9a167f3..290f328b6b3 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -38,6 +38,10 @@ #include "src/core/lib/iomgr/exec_ctx.h" +grpc_buffer_pool *grpc_buffer_pool_internal_ref(grpc_buffer_pool *buffer_pool); +void grpc_buffer_pool_internal_unref(grpc_exec_ctx *exec_ctx, + grpc_buffer_pool *buffer_pool); + typedef enum { GRPC_BULIST_AWAITING_ALLOCATION, GRPC_BULIST_NON_EMPTY_FREE_POOL, From d3cfb5ee0e72bdc4b0926a5388bb86e8db5e895b Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 16:05:07 -0700 Subject: [PATCH 039/286] Add buffer user no-op test --- src/core/lib/iomgr/buffer_pool.c | 92 +++++++++++++++++++++++------- src/core/lib/iomgr/buffer_pool.h | 10 +++- test/core/iomgr/buffer_pool_test.c | 27 ++++++++- 3 files changed, 106 insertions(+), 23 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 8aabd7ab68d..8e3cd1608e3 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -57,7 +57,7 @@ struct grpc_buffer_pool { bool reclaiming; grpc_closure bpstep_closure; - grpc_buffer_user_list lists[GRPC_BULIST_COUNT]; + grpc_buffer_user *roots[GRPC_BULIST_COUNT]; }; /******************************************************************************* @@ -66,48 +66,71 @@ struct grpc_buffer_pool { static void bulist_add_tail(grpc_buffer_user *buffer_user, grpc_bulist list) { grpc_buffer_pool *buffer_pool = buffer_user->buffer_pool; - grpc_buffer_user_list *lst = &buffer_pool->lists[list]; - if (lst->head == NULL) { - lst->head = lst->tail = buffer_user; + grpc_buffer_user **root = &buffer_pool->roots[list]; + if (*root == NULL) { + *root = buffer_user; + buffer_user->links[list].next = buffer_user->links[list].prev = buffer_user; } else { - lst->tail->next[list] = buffer_user; - lst->tail = buffer_user; + buffer_user->links[list].next = *root; + buffer_user->links[list].prev = (*root)->links[list].prev; + buffer_user->links[list].next->links[list].prev = + buffer_user->links[list].prev->links[list].next = buffer_user; } - buffer_user->next[list] = NULL; } static void bulist_add_head(grpc_buffer_user *buffer_user, grpc_bulist list) { grpc_buffer_pool *buffer_pool = buffer_user->buffer_pool; - grpc_buffer_user_list *lst = &buffer_pool->lists[list]; - if (lst->head == NULL) { - lst->head = lst->tail = buffer_user; - buffer_user->next[list] = NULL; + grpc_buffer_user **root = &buffer_pool->roots[list]; + if (*root == NULL) { + *root = buffer_user; + buffer_user->links[list].next = buffer_user->links[list].prev = buffer_user; } else { - buffer_user->next[list] = lst->head; - lst->head = buffer_user; + buffer_user->links[list].next = (*root)->links[list].next; + buffer_user->links[list].prev = *root; + buffer_user->links[list].next->links[list].prev = + buffer_user->links[list].prev->links[list].next = buffer_user; + *root = buffer_user; } } static bool bulist_empty(grpc_buffer_pool *buffer_pool, grpc_bulist list) { - return buffer_pool->lists[list].head == NULL; + return buffer_pool->roots[list] == NULL; } static grpc_buffer_user *bulist_pop(grpc_buffer_pool *buffer_pool, grpc_bulist list) { - grpc_buffer_user_list *lst = &buffer_pool->lists[list]; - grpc_buffer_user *buffer_user = lst->head; + grpc_buffer_user **root = &buffer_pool->roots[list]; + grpc_buffer_user *buffer_user = *root; if (buffer_user == NULL) { return NULL; } - if (buffer_user == lst->tail) { - lst->head = lst->tail = NULL; + if (buffer_user->links[list].next == buffer_user) { + *root = NULL; } else { - lst->head = buffer_user->next[list]; + buffer_user->links[list].next->links[list].prev = + buffer_user->links[list].prev; + buffer_user->links[list].prev->links[list].next = + buffer_user->links[list].next; } - buffer_user->next[list] = NULL; + buffer_user->links[list].next = buffer_user->links[list].prev = NULL; return buffer_user; } +static void bulist_remove(grpc_buffer_user *buffer_user, grpc_bulist list) { + if (buffer_user->links[list].next == NULL) return; + grpc_buffer_pool *buffer_pool = buffer_user->buffer_pool; + if (buffer_pool->roots[list] == buffer_user) { + buffer_pool->roots[list] = buffer_user->links[list].next; + if (buffer_pool->roots[list] == buffer_user) { + buffer_pool->roots[list] = NULL; + } + } + buffer_user->links[list].next->links[list].prev = + buffer_user->links[list].prev; + buffer_user->links[list].prev->links[list].next = + buffer_user->links[list].next; +} + /******************************************************************************* * buffer pool state machine */ @@ -246,6 +269,20 @@ static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, bulist_add_tail(buffer_user, GRPC_BULIST_RECLAIMER_DESTRUCTIVE); } +static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { + grpc_buffer_user *buffer_user = bu; + GPR_ASSERT(buffer_user->allocated == 0); + for (int i = 0; i < GRPC_BULIST_COUNT; i++) { + bulist_remove(buffer_user, (grpc_bulist)i); + } + grpc_exec_ctx_sched(exec_ctx, buffer_user->reclaimers[0], + GRPC_ERROR_CANCELLED, NULL); + grpc_exec_ctx_sched(exec_ctx, buffer_user->reclaimers[1], + GRPC_ERROR_CANCELLED, NULL); + grpc_exec_ctx_sched(exec_ctx, buffer_user->on_done_destroy, GRPC_ERROR_NONE, + NULL); +} + typedef struct { int64_t size; grpc_buffer_pool *buffer_pool; @@ -278,6 +315,9 @@ grpc_buffer_pool *grpc_buffer_pool_create(void) { buffer_pool->free_pool = INT64_MAX; buffer_pool->size = INT64_MAX; grpc_closure_init(&buffer_pool->bpstep_closure, bpstep, buffer_pool); + for (int i = 0; i < GRPC_BULIST_COUNT; i++) { + buffer_pool->roots[i] = NULL; + } return buffer_pool; } @@ -329,12 +369,24 @@ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, &bu_post_benign_reclaimer, buffer_user); grpc_closure_init(&buffer_user->post_reclaimer_closure[1], &bu_post_destructive_reclaimer, buffer_user); + grpc_closure_init(&buffer_user->destroy_closure, &bu_destroy, buffer_user); gpr_mu_init(&buffer_user->mu); buffer_user->allocated = 0; buffer_user->free_pool = 0; grpc_closure_list_init(&buffer_user->on_allocated); buffer_user->allocating = false; buffer_user->added_to_free_pool = false; + for (int i = 0; i < GRPC_BULIST_COUNT; i++) { + buffer_user->links[i].next = buffer_user->links[i].prev = NULL; + } +} + +void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, + grpc_closure *on_done) { + buffer_user->on_done_destroy = on_done; + grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, + &buffer_user->destroy_closure, GRPC_ERROR_NONE); } void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 290f328b6b3..2774a445e35 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -52,6 +52,11 @@ typedef enum { typedef struct grpc_buffer_user grpc_buffer_user; +typedef struct { + grpc_buffer_user *next; + grpc_buffer_user *prev; +} grpc_buffer_user_link; + struct grpc_buffer_user { grpc_buffer_pool *buffer_pool; @@ -68,7 +73,10 @@ struct grpc_buffer_user { grpc_closure *reclaimers[2]; grpc_closure post_reclaimer_closure[2]; - grpc_buffer_user *next[GRPC_BULIST_COUNT]; + grpc_closure destroy_closure; + grpc_closure *on_done_destroy; + + grpc_buffer_user_link links[GRPC_BULIST_COUNT]; }; void grpc_buffer_user_init(grpc_buffer_user *buffer_user, diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 8855fe3ab3b..d28b557f7d4 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -37,23 +37,46 @@ #include "test/core/util/test_config.h" +static void set_bool_cb(grpc_exec_ctx *exec_ctx, void *a, grpc_error *error) { + *(bool *)a = true; +} +grpc_closure *set_bool(bool *p) { return grpc_closure_create(set_bool_cb, p); } + +static void destroy_user(grpc_buffer_user *usr) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + bool done = false; + grpc_buffer_user_destroy(&exec_ctx, usr, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); +} + static void test_no_op(void) { - gpr_log(GPR_DEBUG, "** test_no_op **"); + gpr_log(GPR_INFO, "** test_no_op **"); grpc_buffer_pool_unref(grpc_buffer_pool_create()); } static void test_resize_then_destroy(void) { - gpr_log(GPR_DEBUG, "** test_resize_then_destroy **"); + gpr_log(GPR_INFO, "** test_resize_then_destroy **"); grpc_buffer_pool *p = grpc_buffer_pool_create(); grpc_buffer_pool_resize(p, 1024 * 1024); grpc_buffer_pool_unref(p); } +static void test_buffer_user_no_op(void) { + gpr_log(GPR_INFO, "** test_buffer_user_no_op **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + grpc_buffer_pool_unref(p); + destroy_user(&usr); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); test_no_op(); test_resize_then_destroy(); + test_buffer_user_no_op(); grpc_shutdown(); return 0; } From 1c9cae1613ef7951382e9f8a372cdb3345212475 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 16:10:03 -0700 Subject: [PATCH 040/286] Add some currently failing tests --- test/core/iomgr/buffer_pool_test.c | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index d28b557f7d4..7993d94100a 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -71,12 +71,48 @@ static void test_buffer_user_no_op(void) { destroy_user(&usr); } +static void test_instant_alloc_then_free(void) { + gpr_log(GPR_INFO, "** test_instant_alloc_then_free **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, NULL); + grpc_exec_ctx_finish(&exec_ctx); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr); +} + +static void test_instant_alloc_free_pair(void) { + gpr_log(GPR_INFO, "** test_instant_alloc_free_pair **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, NULL); + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); test_no_op(); test_resize_then_destroy(); test_buffer_user_no_op(); + test_instant_alloc_then_free(); + test_instant_alloc_free_pair(); grpc_shutdown(); return 0; } From 959d6541d15081cf758b7513ddba9bcb4711b9ea Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 16:15:27 -0700 Subject: [PATCH 041/286] Fix tests to run --- src/core/lib/iomgr/buffer_pool.c | 14 +++++++++----- test/core/iomgr/buffer_pool_test.c | 2 ++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 8e3cd1608e3..b0d617bf7e3 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -281,6 +281,7 @@ static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { GRPC_ERROR_CANCELLED, NULL); grpc_exec_ctx_sched(exec_ctx, buffer_user->on_done_destroy, GRPC_ERROR_NONE, NULL); + grpc_buffer_pool_internal_unref(exec_ctx, buffer_user->buffer_pool); } typedef struct { @@ -351,7 +352,7 @@ void grpc_buffer_pool_resize(grpc_buffer_pool *buffer_pool, size_t size) { a->size = (int64_t)size; grpc_closure_init(&a->closure, bp_resize, a); grpc_combiner_execute(&exec_ctx, buffer_pool->combiner, &a->closure, - GRPC_ERROR_NONE); + GRPC_ERROR_NONE, false); grpc_exec_ctx_finish(&exec_ctx); } @@ -376,6 +377,8 @@ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, grpc_closure_list_init(&buffer_user->on_allocated); buffer_user->allocating = false; buffer_user->added_to_free_pool = false; + buffer_user->reclaimers[0] = NULL; + buffer_user->reclaimers[1] = NULL; for (int i = 0; i < GRPC_BULIST_COUNT; i++) { buffer_user->links[i].next = buffer_user->links[i].prev = NULL; } @@ -386,7 +389,7 @@ void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, grpc_closure *on_done) { buffer_user->on_done_destroy = on_done; grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->destroy_closure, GRPC_ERROR_NONE); + &buffer_user->destroy_closure, GRPC_ERROR_NONE, false); } void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, @@ -401,7 +404,8 @@ void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, if (!buffer_user->allocating) { buffer_user->allocating = true; grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->allocate_closure, GRPC_ERROR_NONE); + &buffer_user->allocate_closure, GRPC_ERROR_NONE, + false); } } else { grpc_exec_ctx_sched(exec_ctx, optional_on_done, GRPC_ERROR_NONE, NULL); @@ -422,7 +426,7 @@ void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, buffer_user->added_to_free_pool = true; grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, &buffer_user->add_to_free_pool_closure, - GRPC_ERROR_NONE); + GRPC_ERROR_NONE, false); } gpr_mu_unlock(&buffer_user->mu); } @@ -434,5 +438,5 @@ void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, buffer_user->reclaimers[destructive] = closure; grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, &buffer_user->post_reclaimer_closure[destructive], - GRPC_ERROR_NONE); + GRPC_ERROR_NONE, false); } diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 7993d94100a..689f8c2c311 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -74,6 +74,7 @@ static void test_buffer_user_no_op(void) { static void test_instant_alloc_then_free(void) { gpr_log(GPR_INFO, "** test_instant_alloc_then_free **"); grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024 * 1024); grpc_buffer_user usr; grpc_buffer_user_init(&usr, p); { @@ -93,6 +94,7 @@ static void test_instant_alloc_then_free(void) { static void test_instant_alloc_free_pair(void) { gpr_log(GPR_INFO, "** test_instant_alloc_free_pair **"); grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024 * 1024); grpc_buffer_user usr; grpc_buffer_user_init(&usr, p); { From f57c293f56d79d760fa0cc0e07e55a28966fe4ea Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 16:20:36 -0700 Subject: [PATCH 042/286] Add initial async alloc test --- test/core/iomgr/buffer_pool_test.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 689f8c2c311..10565be3c2d 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -107,6 +107,28 @@ static void test_instant_alloc_free_pair(void) { destroy_user(&usr); } +static void test_simple_async_alloc(void) { + gpr_log(GPR_INFO, "** test_simple_async_alloc **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024 * 1024); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); @@ -115,6 +137,7 @@ int main(int argc, char **argv) { test_buffer_user_no_op(); test_instant_alloc_then_free(); test_instant_alloc_free_pair(); + test_simple_async_alloc(); grpc_shutdown(); return 0; } From b7810a14b9bdece46a05763890af199dd5426e6a Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 16:27:12 -0700 Subject: [PATCH 043/286] Add a blocked async alloc test --- src/core/lib/iomgr/buffer_pool.c | 2 +- test/core/iomgr/buffer_pool_test.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index b0d617bf7e3..98b3289af9c 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -170,7 +170,7 @@ static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { bulist_pop(buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION))) { gpr_mu_lock(&buffer_user->mu); if (buffer_user->free_pool < 0 && - -buffer_user->free_pool < buffer_pool->free_pool) { + -buffer_user->free_pool <= buffer_pool->free_pool) { buffer_pool->free_pool += buffer_user->free_pool; buffer_user->free_pool = 0; } diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 10565be3c2d..5ec15cca806 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -129,6 +129,30 @@ static void test_simple_async_alloc(void) { destroy_user(&usr); } +static void test_async_alloc_blocked_by_size(void) { + gpr_log(GPR_INFO, "** test_async_alloc_blocked_by_size **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + bool done = false; + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!done); + } + grpc_buffer_pool_resize(p, 1024); + GPR_ASSERT(done); + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); @@ -138,6 +162,7 @@ int main(int argc, char **argv) { test_instant_alloc_then_free(); test_instant_alloc_free_pair(); test_simple_async_alloc(); + test_async_alloc_blocked_by_size(); grpc_shutdown(); return 0; } From 12b925d2bb05309a54cdcb896ae53a6868b0a010 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 16:41:09 -0700 Subject: [PATCH 044/286] Made scavenging work --- src/core/lib/iomgr/buffer_pool.c | 4 ++-- test/core/iomgr/buffer_pool_test.c | 38 ++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 98b3289af9c..26578e83cc8 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -193,7 +193,7 @@ static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { while ((buffer_user = bulist_pop(buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL))) { gpr_mu_lock(&buffer_user->mu); - if (buffer_pool->free_pool > 0) { + if (buffer_user->free_pool > 0) { buffer_pool->free_pool += buffer_user->free_pool; buffer_user->free_pool = 0; gpr_mu_unlock(&buffer_user->mu); @@ -240,7 +240,7 @@ static void bu_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL)) { bpstep_sched(exec_ctx, buffer_user->buffer_pool); } - bulist_add_tail(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); + bulist_add_tail(buffer_user, GRPC_BULIST_NON_EMPTY_FREE_POOL); } static void bu_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 5ec15cca806..aec3869a94e 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -153,6 +153,43 @@ static void test_async_alloc_blocked_by_size(void) { destroy_user(&usr); } +static void test_scavenge(void) { + gpr_log(GPR_INFO, "** test_scavenge **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + grpc_buffer_user usr1; + grpc_buffer_user usr2; + grpc_buffer_user_init(&usr1, p); + grpc_buffer_user_init(&usr2, p); + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr1, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr1, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr2, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr2, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr1); + destroy_user(&usr2); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); @@ -163,6 +200,7 @@ int main(int argc, char **argv) { test_instant_alloc_free_pair(); test_simple_async_alloc(); test_async_alloc_blocked_by_size(); + test_scavenge(); grpc_shutdown(); return 0; } From 3b98b2ee33795670a1fec14a8628551c9ac988be Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 16:48:39 -0700 Subject: [PATCH 045/286] Add a test of an allocation blocked from scavenging --- test/core/iomgr/buffer_pool_test.c | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index aec3869a94e..f659c5c5b4e 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -190,6 +190,45 @@ static void test_scavenge(void) { destroy_user(&usr2); } +static void test_scavenge_blocked(void) { + gpr_log(GPR_INFO, "** test_scavenge_blocked **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + grpc_buffer_user usr1; + grpc_buffer_user usr2; + grpc_buffer_user_init(&usr1, p); + grpc_buffer_user_init(&usr2, p); + bool done; + { + done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr1, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + { + done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr2, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr1, 1024); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr2, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr1); + destroy_user(&usr2); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); @@ -201,6 +240,7 @@ int main(int argc, char **argv) { test_simple_async_alloc(); test_async_alloc_blocked_by_size(); test_scavenge(); + test_scavenge_blocked(); grpc_shutdown(); return 0; } From 3fe56b52de02079eea98590adcc852dc9e3aaffd Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 22 Sep 2016 17:04:53 -0700 Subject: [PATCH 046/286] Add a test of reclaimation --- src/core/lib/iomgr/buffer_pool.c | 15 ++++++++ test/core/iomgr/buffer_pool_test.c | 62 ++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 26578e83cc8..a6824f94322 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -56,6 +56,7 @@ struct grpc_buffer_pool { bool step_scheduled; bool reclaiming; grpc_closure bpstep_closure; + grpc_closure bpreclaimation_done_closure; grpc_buffer_user *roots[GRPC_BULIST_COUNT]; }; @@ -305,6 +306,11 @@ static void bp_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { gpr_free(a); } +static void bpreclaimation_done_closure(grpc_exec_ctx *exec_ctx, void *bp, + grpc_error *error) { + bpstep_sched(exec_ctx, bp); +} + /******************************************************************************* * grpc_buffer_pool api */ @@ -316,6 +322,8 @@ grpc_buffer_pool *grpc_buffer_pool_create(void) { buffer_pool->free_pool = INT64_MAX; buffer_pool->size = INT64_MAX; grpc_closure_init(&buffer_pool->bpstep_closure, bpstep, buffer_pool); + grpc_closure_init(&buffer_pool->bpreclaimation_done_closure, + bpreclaimation_done_closure, buffer_pool); for (int i = 0; i < GRPC_BULIST_COUNT; i++) { buffer_pool->roots[i] = NULL; } @@ -440,3 +448,10 @@ void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, &buffer_user->post_reclaimer_closure[destructive], GRPC_ERROR_NONE, false); } + +void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user) { + grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, + &buffer_user->buffer_pool->bpreclaimation_done_closure, + GRPC_ERROR_NONE, false); +} diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index f659c5c5b4e..ba44af51444 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -33,6 +33,7 @@ #include "src/core/lib/iomgr/buffer_pool.h" +#include #include #include "test/core/util/test_config.h" @@ -42,6 +43,28 @@ static void set_bool_cb(grpc_exec_ctx *exec_ctx, void *a, grpc_error *error) { } grpc_closure *set_bool(bool *p) { return grpc_closure_create(set_bool_cb, p); } +typedef struct { + size_t size; + grpc_buffer_user *buffer_user; + grpc_closure *then; +} reclaimer_args; +static void reclaimer_cb(grpc_exec_ctx *exec_ctx, void *args, + grpc_error *error) { + reclaimer_args *a = args; + grpc_buffer_user_free(exec_ctx, a->buffer_user, a->size); + grpc_buffer_user_finish_reclaimation(exec_ctx, a->buffer_user); + grpc_closure_run(exec_ctx, a->then, GRPC_ERROR_NONE); + gpr_free(a); +} +grpc_closure *make_reclaimer(grpc_buffer_user *buffer_user, size_t size, + grpc_closure *then) { + reclaimer_args *a = gpr_malloc(sizeof(*a)); + a->size = size; + a->buffer_user = buffer_user; + a->then = then; + return grpc_closure_create(reclaimer_cb, a); +} + static void destroy_user(grpc_buffer_user *usr) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; bool done = false; @@ -229,6 +252,44 @@ static void test_scavenge_blocked(void) { destroy_user(&usr2); } +static void test_blocked_until_scheduled_reclaim(void) { + gpr_log(GPR_INFO, "** test_blocked_until_scheduled_reclaim **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + bool reclaim_done = false; + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, false, + make_reclaimer(&usr, 1024, set_bool(&reclaim_done))); + grpc_exec_ctx_finish(&exec_ctx); + } + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(reclaim_done); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); @@ -241,6 +302,7 @@ int main(int argc, char **argv) { test_async_alloc_blocked_by_size(); test_scavenge(); test_scavenge_blocked(); + test_blocked_until_scheduled_reclaim(); grpc_shutdown(); return 0; } From ee70ca67c15b7b36fbd12a492d5094adc1344fb6 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 08:35:58 -0700 Subject: [PATCH 047/286] Fix list mixup --- src/core/lib/iomgr/buffer_pool.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index a6824f94322..46dd6d9ce1c 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -210,8 +210,8 @@ static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool, bool destructive) { if (buffer_pool->reclaiming) return true; - grpc_bulist list = destructive ? GRPC_BULIST_RECLAIMER_BENIGN - : GRPC_BULIST_RECLAIMER_DESTRUCTIVE; + grpc_bulist list = destructive ? GRPC_BULIST_RECLAIMER_DESTRUCTIVE + : GRPC_BULIST_RECLAIMER_BENIGN; grpc_buffer_user *buffer_user = bulist_pop(buffer_pool, list); if (buffer_user == NULL) return false; buffer_pool->reclaiming = true; From 6b72834c8aa215e90e8f4d47bbe4e4a65521b8c8 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 08:44:43 -0700 Subject: [PATCH 048/286] Compilation, initialization fixes --- src/core/lib/iomgr/buffer_pool.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 46dd6d9ce1c..d2464ff0799 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -321,6 +321,8 @@ grpc_buffer_pool *grpc_buffer_pool_create(void) { buffer_pool->combiner = grpc_combiner_create(NULL); buffer_pool->free_pool = INT64_MAX; buffer_pool->size = INT64_MAX; + buffer_pool->step_scheduled = false; + buffer_pool->reclaiming = false; grpc_closure_init(&buffer_pool->bpstep_closure, bpstep, buffer_pool); grpc_closure_init(&buffer_pool->bpreclaimation_done_closure, bpreclaimation_done_closure, buffer_pool); @@ -404,8 +406,8 @@ void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, size_t size, grpc_closure *optional_on_done) { gpr_mu_lock(&buffer_user->mu); - buffer_user->allocated += size; - buffer_user->free_pool -= size; + buffer_user->allocated += (int64_t)size; + buffer_user->free_pool -= (int64_t)size; if (buffer_user->free_pool < 0) { grpc_closure_list_append(&buffer_user->on_allocated, optional_on_done, GRPC_ERROR_NONE); @@ -426,8 +428,8 @@ void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, gpr_mu_lock(&buffer_user->mu); GPR_ASSERT(buffer_user->allocated >= (int64_t)size); bool was_zero_or_negative = buffer_user->free_pool <= 0; - buffer_user->free_pool += size; - buffer_user->allocated -= size; + buffer_user->free_pool += (int64_t)size; + buffer_user->allocated -= (int64_t)size; bool is_bigger_than_zero = buffer_user->free_pool > 0; if (is_bigger_than_zero && was_zero_or_negative && !buffer_user->added_to_free_pool) { From 9cf0cec74c81e122864a0a11109c787fe8b452cd Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 09:10:08 -0700 Subject: [PATCH 049/286] Fairly complete set of tests for buffer pools in place --- src/core/lib/iomgr/buffer_pool.c | 8 +- test/core/iomgr/buffer_pool_test.c | 213 +++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+), 5 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index d2464ff0799..c7e1fcbf4a1 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -162,10 +162,6 @@ static void bpstep_sched(grpc_exec_ctx *exec_ctx, /* returns true if all allocations are completed */ static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { - if (buffer_pool->free_pool <= 0) { - return false; - } - grpc_buffer_user *buffer_user; while ((buffer_user = bulist_pop(buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION))) { @@ -308,7 +304,9 @@ static void bp_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { static void bpreclaimation_done_closure(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { - bpstep_sched(exec_ctx, bp); + grpc_buffer_pool *buffer_pool = bp; + buffer_pool->reclaiming = false; + bpstep_sched(exec_ctx, buffer_pool); } /******************************************************************************* diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index ba44af51444..7438d088acb 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -50,6 +50,7 @@ typedef struct { } reclaimer_args; static void reclaimer_cb(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { + GPR_ASSERT(error == GRPC_ERROR_NONE); reclaimer_args *a = args; grpc_buffer_user_free(exec_ctx, a->buffer_user, a->size); grpc_buffer_user_finish_reclaimation(exec_ctx, a->buffer_user); @@ -65,6 +66,15 @@ grpc_closure *make_reclaimer(grpc_buffer_user *buffer_user, size_t size, return grpc_closure_create(reclaimer_cb, a); } +static void unused_reclaimer_cb(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + GPR_ASSERT(error == GRPC_ERROR_CANCELLED); + grpc_closure_run(exec_ctx, arg, GRPC_ERROR_NONE); +} +grpc_closure *make_unused_reclaimer(grpc_closure *then) { + return grpc_closure_create(unused_reclaimer_cb, then); +} + static void destroy_user(grpc_buffer_user *usr) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; bool done = false; @@ -290,6 +300,204 @@ static void test_blocked_until_scheduled_reclaim(void) { destroy_user(&usr); } +static void test_blocked_until_scheduled_reclaim_and_scavenge(void) { + gpr_log(GPR_INFO, "** test_blocked_until_scheduled_reclaim_and_scavenge **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + grpc_buffer_user usr1; + grpc_buffer_user usr2; + grpc_buffer_user_init(&usr1, p); + grpc_buffer_user_init(&usr2, p); + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr1, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + bool reclaim_done = false; + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr1, false, + make_reclaimer(&usr1, 1024, set_bool(&reclaim_done))); + grpc_exec_ctx_finish(&exec_ctx); + } + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr2, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(reclaim_done); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr2, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr1); + destroy_user(&usr2); +} + +static void test_blocked_until_scheduled_destructive_reclaim(void) { + gpr_log(GPR_INFO, "** test_blocked_until_scheduled_destructive_reclaim **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + bool reclaim_done = false; + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, true, + make_reclaimer(&usr, 1024, set_bool(&reclaim_done))); + grpc_exec_ctx_finish(&exec_ctx); + } + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(reclaim_done); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr); +} + +static void test_unused_reclaim_is_cancelled(void) { + gpr_log(GPR_INFO, "** test_unused_reclaim_is_cancelled **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + bool benign_done = false; + bool destructive_done = false; + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, false, make_unused_reclaimer(set_bool(&benign_done))); + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, true, + make_unused_reclaimer(set_bool(&destructive_done))); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!benign_done); + GPR_ASSERT(!destructive_done); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr); + GPR_ASSERT(benign_done); + GPR_ASSERT(destructive_done); +} + +static void test_benign_reclaim_is_preferred(void) { + gpr_log(GPR_INFO, "** test_benign_reclaim_is_preferred **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + bool benign_done = false; + bool destructive_done = false; + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, false, + make_reclaimer(&usr, 1024, set_bool(&benign_done))); + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, true, + make_unused_reclaimer(set_bool(&destructive_done))); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!benign_done); + GPR_ASSERT(!destructive_done); + } + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(benign_done); + GPR_ASSERT(!destructive_done); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr); + GPR_ASSERT(benign_done); + GPR_ASSERT(destructive_done); +} + +static void test_multiple_reclaims_can_be_triggered(void) { + gpr_log(GPR_INFO, "** test_multiple_reclaims_can_be_triggered **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + bool benign_done = false; + bool destructive_done = false; + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, false, + make_reclaimer(&usr, 512, set_bool(&benign_done))); + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, true, + make_reclaimer(&usr, 512, set_bool(&destructive_done))); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!benign_done); + GPR_ASSERT(!destructive_done); + } + { + bool done = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(benign_done); + GPR_ASSERT(destructive_done); + GPR_ASSERT(done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + grpc_buffer_pool_unref(p); + destroy_user(&usr); + GPR_ASSERT(benign_done); + GPR_ASSERT(destructive_done); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); @@ -303,6 +511,11 @@ int main(int argc, char **argv) { test_scavenge(); test_scavenge_blocked(); test_blocked_until_scheduled_reclaim(); + test_blocked_until_scheduled_reclaim_and_scavenge(); + test_blocked_until_scheduled_destructive_reclaim(); + test_unused_reclaim_is_cancelled(); + test_benign_reclaim_is_preferred(); + test_multiple_reclaims_can_be_triggered(); grpc_shutdown(); return 0; } From e34c285ac94892cb21bd6fa50d4ecdc49e85cd85 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 09:43:32 -0700 Subject: [PATCH 050/286] Buffer pool integration progress --- .../server/secure/server_secure_chttp2.c | 2 +- src/core/lib/http/httpcli.c | 20 +++++++++++----- src/core/lib/http/httpcli.h | 2 ++ src/core/lib/iomgr/endpoint.h | 4 ++++ src/core/lib/iomgr/endpoint_pair.h | 4 ++-- src/core/lib/iomgr/endpoint_pair_posix.c | 12 +++++----- src/core/lib/iomgr/tcp_client.h | 1 + src/core/lib/iomgr/tcp_client_posix.c | 20 +++++++++++----- src/core/lib/iomgr/tcp_posix.c | 13 +++++++++-- src/core/lib/iomgr/tcp_posix.h | 4 ++-- src/core/lib/iomgr/tcp_server.h | 3 ++- src/core/lib/iomgr/tcp_server_posix.c | 23 +++++++++++++++++-- .../google_default_credentials.c | 4 +++- 13 files changed, 83 insertions(+), 29 deletions(-) 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 da3e284fcf2..947e68f3f2f 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 @@ -256,7 +256,7 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, state = gpr_malloc(sizeof(*state)); memset(state, 0, sizeof(*state)); grpc_closure_init(&state->destroy_closure, destroy_done, state); - err = grpc_tcp_server_create(&state->destroy_closure, + err = grpc_tcp_server_create(&exec_ctx, &state->destroy_closure, grpc_server_get_channel_args(server), &tcp); if (err != GRPC_ERROR_NONE) { goto error; diff --git a/src/core/lib/http/httpcli.c b/src/core/lib/http/httpcli.c index 18135bcb58e..593da734f29 100644 --- a/src/core/lib/http/httpcli.c +++ b/src/core/lib/http/httpcli.c @@ -71,6 +71,7 @@ typedef struct { grpc_closure done_write; grpc_closure connected; grpc_error *overall_error; + grpc_buffer_pool *buffer_pool; } internal_request; static grpc_httpcli_get_override g_get_override = NULL; @@ -118,6 +119,7 @@ static void finish(grpc_exec_ctx *exec_ctx, internal_request *req, gpr_slice_buffer_destroy(&req->incoming); gpr_slice_buffer_destroy(&req->outgoing); GRPC_ERROR_UNREF(req->overall_error); + grpc_buffer_pool_internal_unref(exec_ctx, req->buffer_pool); gpr_free(req); } @@ -224,9 +226,10 @@ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, } addr = &req->addresses->addrs[req->next_address++]; grpc_closure_init(&req->connected, on_connected, req); - grpc_tcp_client_connect( - exec_ctx, &req->connected, &req->ep, req->context->pollset_set, - (struct sockaddr *)&addr->addr, addr->len, req->deadline); + grpc_tcp_client_connect(exec_ctx, &req->connected, &req->ep, + req->context->pollset_set, req->buffer_pool, + (struct sockaddr *)&addr->addr, addr->len, + req->deadline); } static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { @@ -242,6 +245,7 @@ static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { static void internal_request_begin(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, + grpc_buffer_pool *buffer_pool, const grpc_httpcli_request *request, gpr_timespec deadline, grpc_closure *on_done, grpc_httpcli_response *response, @@ -257,6 +261,7 @@ static void internal_request_begin(grpc_exec_ctx *exec_ctx, req->context = context; req->pollent = pollent; req->overall_error = GRPC_ERROR_NONE; + req->buffer_pool = grpc_buffer_pool_internal_ref(buffer_pool); grpc_closure_init(&req->on_read, on_read, req); grpc_closure_init(&req->done_write, done_write, req); gpr_slice_buffer_init(&req->incoming); @@ -274,6 +279,7 @@ static void internal_request_begin(grpc_exec_ctx *exec_ctx, void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, + grpc_buffer_pool *buffer_pool, const grpc_httpcli_request *request, gpr_timespec deadline, grpc_closure *on_done, grpc_httpcli_response *response) { @@ -283,14 +289,15 @@ void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, return; } gpr_asprintf(&name, "HTTP:GET:%s:%s", request->host, request->http.path); - internal_request_begin(exec_ctx, context, pollent, request, deadline, on_done, - response, name, + internal_request_begin(exec_ctx, context, pollent, buffer_pool, request, + deadline, on_done, response, name, grpc_httpcli_format_get_request(request)); gpr_free(name); } void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, + grpc_buffer_pool *buffer_pool, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, gpr_timespec deadline, grpc_closure *on_done, @@ -303,7 +310,8 @@ void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, } gpr_asprintf(&name, "HTTP:POST:%s:%s", request->host, request->http.path); internal_request_begin( - exec_ctx, context, pollent, request, deadline, on_done, response, name, + exec_ctx, context, pollent, buffer_pool, request, deadline, on_done, + response, name, grpc_httpcli_format_post_request(request, body_bytes, body_size)); gpr_free(name); } diff --git a/src/core/lib/http/httpcli.h b/src/core/lib/http/httpcli.h index 662e176f4cc..7c7b20433e7 100644 --- a/src/core/lib/http/httpcli.h +++ b/src/core/lib/http/httpcli.h @@ -97,6 +97,7 @@ void grpc_httpcli_context_destroy(grpc_httpcli_context *context); supplied pointer to pass to said call) */ void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, + grpc_buffer_pool *buffer_pool, const grpc_httpcli_request *request, gpr_timespec deadline, grpc_closure *on_complete, grpc_httpcli_response *response); @@ -118,6 +119,7 @@ void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, Does not support ?var1=val1&var2=val2 in the path. */ void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, + grpc_buffer_pool *buffer_pool, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, gpr_timespec deadline, grpc_closure *on_complete, diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h index 894efc0b238..453bfd1d560 100644 --- a/src/core/lib/iomgr/endpoint.h +++ b/src/core/lib/iomgr/endpoint.h @@ -37,6 +37,7 @@ #include #include #include +#include "src/core/lib/iomgr/buffer_pool.h" #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" @@ -58,6 +59,7 @@ struct grpc_endpoint_vtable { grpc_pollset_set *pollset); void (*shutdown)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); void (*destroy)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); + grpc_buffer_user *(*get_buffer_user)(grpc_endpoint *ep); char *(*get_peer)(grpc_endpoint *ep); }; @@ -99,6 +101,8 @@ void grpc_endpoint_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, grpc_pollset_set *pollset_set); +grpc_buffer_user *grpc_endpoint_get_buffer_user(grpc_endpoint *endpoint); + struct grpc_endpoint { const grpc_endpoint_vtable *vtable; }; diff --git a/src/core/lib/iomgr/endpoint_pair.h b/src/core/lib/iomgr/endpoint_pair.h index 5cd78051bdf..4938cf85993 100644 --- a/src/core/lib/iomgr/endpoint_pair.h +++ b/src/core/lib/iomgr/endpoint_pair.h @@ -41,7 +41,7 @@ typedef struct { grpc_endpoint *server; } grpc_endpoint_pair; -grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, - size_t read_slice_size); +grpc_endpoint_pair grpc_iomgr_create_endpoint_pair( + const char *name, grpc_buffer_pool *buffer_pool, size_t read_slice_size); #endif /* GRPC_CORE_LIB_IOMGR_ENDPOINT_PAIR_H */ diff --git a/src/core/lib/iomgr/endpoint_pair_posix.c b/src/core/lib/iomgr/endpoint_pair_posix.c index e295fb4867a..64c161675f3 100644 --- a/src/core/lib/iomgr/endpoint_pair_posix.c +++ b/src/core/lib/iomgr/endpoint_pair_posix.c @@ -62,20 +62,20 @@ static void create_sockets(int sv[2]) { GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[1]) == GRPC_ERROR_NONE); } -grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, - size_t read_slice_size) { +grpc_endpoint_pair grpc_iomgr_create_endpoint_pair( + const char *name, grpc_buffer_pool *buffer_pool, size_t read_slice_size) { int sv[2]; grpc_endpoint_pair p; char *final_name; create_sockets(sv); gpr_asprintf(&final_name, "%s:client", name); - p.client = grpc_tcp_create(grpc_fd_create(sv[1], final_name), read_slice_size, - "socketpair-server"); + p.client = grpc_tcp_create(grpc_fd_create(sv[1], final_name), buffer_pool, + read_slice_size, "socketpair-server"); gpr_free(final_name); gpr_asprintf(&final_name, "%s:server", name); - p.server = grpc_tcp_create(grpc_fd_create(sv[0], final_name), read_slice_size, - "socketpair-client"); + p.server = grpc_tcp_create(grpc_fd_create(sv[0], final_name), buffer_pool, + read_slice_size, "socketpair-client"); gpr_free(final_name); return p; } diff --git a/src/core/lib/iomgr/tcp_client.h b/src/core/lib/iomgr/tcp_client.h index a07e0b9f0cb..04e4108b35f 100644 --- a/src/core/lib/iomgr/tcp_client.h +++ b/src/core/lib/iomgr/tcp_client.h @@ -47,6 +47,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_connect, grpc_endpoint **endpoint, grpc_pollset_set *interested_parties, + grpc_buffer_pool *buffer_pool, const struct sockaddr *addr, size_t addr_len, gpr_timespec deadline); diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 80c7a3f1287..42ceb339339 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -69,6 +69,7 @@ typedef struct { char *addr_str; grpc_endpoint **ep; grpc_closure *closure; + grpc_buffer_pool *buffer_pool; } async_connect; static grpc_error *prepare_socket(const struct sockaddr *addr, int fd) { @@ -114,6 +115,7 @@ static void tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { if (done) { gpr_mu_destroy(&ac->mu); gpr_free(ac->addr_str); + grpc_buffer_pool_internal_unref(exec_ctx, ac->buffer_pool); gpr_free(ac); } } @@ -190,7 +192,8 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { } } else { grpc_pollset_set_del_fd(exec_ctx, ac->interested_parties, fd); - *ep = grpc_tcp_create(fd, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, ac->addr_str); + *ep = grpc_tcp_create(fd, ac->buffer_pool, + GRPC_TCP_DEFAULT_READ_SLICE_SIZE, ac->addr_str); fd = NULL; goto finish; } @@ -227,6 +230,7 @@ finish: static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, + grpc_buffer_pool *buffer_pool, const struct sockaddr *addr, size_t addr_len, gpr_timespec deadline) { int fd; @@ -275,7 +279,8 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, fdobj = grpc_fd_create(fd, name); if (err >= 0) { - *ep = grpc_tcp_create(fdobj, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, addr_str); + *ep = grpc_tcp_create(fdobj, buffer_pool, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, + addr_str); grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_NONE, NULL); goto done; } @@ -300,6 +305,7 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, ac->refs = 2; ac->write_closure.cb = on_writable; ac->write_closure.cb_arg = ac; + ac->buffer_pool = grpc_buffer_pool_internal_ref(buffer_pool); if (grpc_tcp_trace) { gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: asynchronously connecting", @@ -321,16 +327,18 @@ done: // overridden by api_fuzzer.c void (*grpc_tcp_client_connect_impl)( grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, const struct sockaddr *addr, - size_t addr_len, gpr_timespec deadline) = tcp_client_connect_impl; + grpc_pollset_set *interested_parties, grpc_buffer_pool *buffer_pool, + const struct sockaddr *addr, size_t addr_len, + gpr_timespec deadline) = tcp_client_connect_impl; void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, + grpc_buffer_pool *buffer_pool, const struct sockaddr *addr, size_t addr_len, gpr_timespec deadline) { - grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties, addr, - addr_len, deadline); + grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties, + buffer_pool, addr, addr_len, deadline); } #endif diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 00fd77679ad..fd8fcb05c3c 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -100,6 +100,8 @@ typedef struct { grpc_closure write_closure; char *peer_string; + + grpc_buffer_user buffer_user; } grpc_tcp; static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, @@ -469,6 +471,11 @@ static grpc_workqueue *tcp_get_workqueue(grpc_endpoint *ep) { return grpc_fd_get_workqueue(tcp->em_fd); } +static grpc_buffer_user *tcp_get_buffer_user(grpc_endpoint *ep) { + grpc_tcp *tcp = (grpc_tcp *)ep; + return &tcp->buffer_user; +} + static const grpc_endpoint_vtable vtable = {tcp_read, tcp_write, tcp_get_workqueue, @@ -476,10 +483,11 @@ static const grpc_endpoint_vtable vtable = {tcp_read, tcp_add_to_pollset_set, tcp_shutdown, tcp_destroy, + tcp_get_buffer_user, tcp_get_peer}; -grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, size_t slice_size, - const char *peer_string) { +grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, grpc_buffer_pool *buffer_pool, + size_t slice_size, const char *peer_string) { grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp)); tcp->base.vtable = &vtable; tcp->peer_string = gpr_strdup(peer_string); @@ -500,6 +508,7 @@ grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, size_t slice_size, tcp->write_closure.cb = tcp_handle_write; tcp->write_closure.cb_arg = tcp; gpr_slice_buffer_init(&tcp->last_read_buffer); + grpc_buffer_user_init(&tcp->buffer_user, buffer_pool); /* Tell network status tracker about new endpoint */ grpc_network_status_register_endpoint(&tcp->base); diff --git a/src/core/lib/iomgr/tcp_posix.h b/src/core/lib/iomgr/tcp_posix.h index 99125836d69..768355cf0c6 100644 --- a/src/core/lib/iomgr/tcp_posix.h +++ b/src/core/lib/iomgr/tcp_posix.h @@ -53,8 +53,8 @@ extern int grpc_tcp_trace; /* Create a tcp endpoint given a file desciptor and a read slice size. Takes ownership of fd. */ -grpc_endpoint *grpc_tcp_create(grpc_fd *fd, size_t read_slice_size, - const char *peer_string); +grpc_endpoint *grpc_tcp_create(grpc_fd *fd, grpc_buffer_pool *buffer_pool, + size_t read_slice_size, const char *peer_string); /* Return the tcp endpoint's fd, or -1 if this is not available. Does not release the fd. diff --git a/src/core/lib/iomgr/tcp_server.h b/src/core/lib/iomgr/tcp_server.h index 5a25d39a0c4..409d1a8e96f 100644 --- a/src/core/lib/iomgr/tcp_server.h +++ b/src/core/lib/iomgr/tcp_server.h @@ -60,7 +60,8 @@ typedef void (*grpc_tcp_server_cb)(grpc_exec_ctx *exec_ctx, void *arg, /* Create a server, initially not bound to any ports. The caller owns one ref. If shutdown_complete is not NULL, it will be used by grpc_tcp_server_unref() when the ref count reaches zero. */ -grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete, +grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, + grpc_closure *shutdown_complete, const grpc_channel_args *args, grpc_tcp_server **server); diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index 2d3f6cf9a7d..33041523859 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -137,6 +137,8 @@ struct grpc_tcp_server { /* next pollset to assign a channel to */ gpr_atm next_pollset_to_assign; + + grpc_buffer_pool *buffer_pool; }; static gpr_once check_init = GPR_ONCE_INIT; @@ -153,23 +155,37 @@ static void init(void) { #endif } -grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete, +grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, + grpc_closure *shutdown_complete, const grpc_channel_args *args, grpc_tcp_server **server) { gpr_once_init(&check_init, init); grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server)); s->so_reuseport = has_so_reuseport; + s->buffer_pool = grpc_buffer_pool_create(); for (size_t i = 0; i < (args == NULL ? 0 : args->num_args); i++) { if (0 == strcmp(GRPC_ARG_ALLOW_REUSEPORT, args->args[i].key)) { if (args->args[i].type == GRPC_ARG_INTEGER) { s->so_reuseport = has_so_reuseport && (args->args[i].value.integer != 0); } else { + grpc_buffer_pool_internal_unref(exec_ctx, s->buffer_pool); gpr_free(s); return GRPC_ERROR_CREATE(GRPC_ARG_ALLOW_REUSEPORT " must be an integer"); } + } else if (0 == strcmp(GRPC_ARG_BUFFER_POOL, args->args[i].key)) { + if (args->args[i].type == GRPC_ARG_POINTER) { + grpc_buffer_pool_internal_unref(exec_ctx, s->buffer_pool); + s->buffer_pool = + grpc_buffer_pool_internal_ref(args->args[i].value.pointer.p); + } else { + grpc_buffer_pool_internal_unref(exec_ctx, s->buffer_pool); + gpr_free(s); + return GRPC_ERROR_CREATE(GRPC_ARG_BUFFER_POOL + " must be a pointer to a buffer pool"); + } } } gpr_ref_init(&s->refs, 1); @@ -203,6 +219,8 @@ static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { gpr_free(sp); } + grpc_buffer_pool_internal_unref(exec_ctx, s->buffer_pool); + gpr_free(s); } @@ -419,7 +437,8 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) { sp->server->on_accept_cb( exec_ctx, sp->server->on_accept_cb_arg, - grpc_tcp_create(fdobj, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, addr_str), + grpc_tcp_create(fdobj, sp->server->buffer_pool, + GRPC_TCP_DEFAULT_READ_SLICE_SIZE, addr_str), read_notifier_pollset, &acceptor); gpr_free(name); diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.c b/src/core/lib/security/credentials/google_default/google_default_credentials.c index 312a3d4f90b..3bcde3da8b1 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.c +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.c @@ -124,11 +124,13 @@ static int is_stack_running_on_compute_engine(void) { grpc_httpcli_context_init(&context); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); grpc_httpcli_get( - &exec_ctx, &context, &detector.pollent, &request, + &exec_ctx, &context, &detector.pollent, buffer_pool, &request, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), max_detection_delay), grpc_closure_create(on_compute_engine_detection_http_response, &detector), &detector.response); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_exec_ctx_flush(&exec_ctx); From 45881861dc6336b4387ebd894fa7193de475e594 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 10:48:53 -0700 Subject: [PATCH 051/286] Integration progress --- .../security/credentials/jwt/jwt_verifier.c | 14 ++++++++++++-- .../credentials/oauth2/oauth2_credentials.c | 18 ++++++++++++++---- .../lib/security/transport/secure_endpoint.c | 6 ++++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.c b/src/core/lib/security/credentials/jwt/jwt_verifier.c index 73eb2e32580..c1a3eb7eab8 100644 --- a/src/core/lib/security/credentials/jwt/jwt_verifier.c +++ b/src/core/lib/security/credentials/jwt/jwt_verifier.c @@ -657,11 +657,16 @@ static void on_openid_config_retrieved(grpc_exec_ctx *exec_ctx, void *user_data, *(req.host + (req.http.path - jwks_uri)) = '\0'; } + /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host + channel. This would allow us to cancel an authentication query when under + extreme memory pressure. */ + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); grpc_httpcli_get( - exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, &req, + exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, buffer_pool, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), grpc_closure_create(on_keys_retrieved, ctx), &ctx->responses[HTTP_RESPONSE_KEYS]); + grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); grpc_json_destroy(json); gpr_free(req.host); return; @@ -764,10 +769,15 @@ static void retrieve_key_and_verify(grpc_exec_ctx *exec_ctx, rsp_idx = HTTP_RESPONSE_OPENID; } + /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host + channel. This would allow us to cancel an authentication query when under + extreme memory pressure. */ + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); grpc_httpcli_get( - exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, &req, + exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, buffer_pool, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), http_cb, &ctx->responses[rsp_idx]); + grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); gpr_free(req.host); gpr_free(req.http.path); return; diff --git a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c index c22ea5c468b..e9e83d14688 100644 --- a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +++ b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c @@ -307,9 +307,14 @@ static void compute_engine_fetch_oauth2( request.http.path = GRPC_COMPUTE_ENGINE_METADATA_TOKEN_PATH; request.http.hdr_count = 1; request.http.hdrs = &header; - grpc_httpcli_get(exec_ctx, httpcli_context, pollent, &request, deadline, - grpc_closure_create(response_cb, metadata_req), + /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host + channel. This would allow us to cancel an authentication query when under + extreme memory pressure. */ + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_httpcli_get(exec_ctx, httpcli_context, pollent, buffer_pool, &request, + deadline, grpc_closure_create(response_cb, metadata_req), &metadata_req->response); + grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); } grpc_call_credentials *grpc_google_compute_engine_credentials_create( @@ -357,10 +362,15 @@ static void refresh_token_fetch_oauth2( request.http.hdr_count = 1; request.http.hdrs = &header; request.handshaker = &grpc_httpcli_ssl; - grpc_httpcli_post(exec_ctx, httpcli_context, pollent, &request, body, - strlen(body), deadline, + /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host + channel. This would allow us to cancel an authentication query when under + extreme memory pressure. */ + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_httpcli_post(exec_ctx, httpcli_context, pollent, buffer_pool, &request, + body, strlen(body), deadline, grpc_closure_create(response_cb, metadata_req), &metadata_req->response); + grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); gpr_free(body); } diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c index acb0113ea8c..ee6b9f97e87 100644 --- a/src/core/lib/security/transport/secure_endpoint.c +++ b/src/core/lib/security/transport/secure_endpoint.c @@ -370,6 +370,11 @@ static grpc_workqueue *endpoint_get_workqueue(grpc_endpoint *secure_ep) { return grpc_endpoint_get_workqueue(ep->wrapped_ep); } +static grpc_buffer_user *endpoint_get_buffer_user(grpc_endpoint *secure_ep) { + secure_endpoint *ep = (secure_endpoint *)secure_ep; + return grpc_endpoint_get_buffer_user(ep->wrapped_ep); +} + static const grpc_endpoint_vtable vtable = {endpoint_read, endpoint_write, endpoint_get_workqueue, @@ -377,6 +382,7 @@ static const grpc_endpoint_vtable vtable = {endpoint_read, endpoint_add_to_pollset_set, endpoint_shutdown, endpoint_destroy, + endpoint_get_buffer_user, endpoint_get_peer}; grpc_endpoint *grpc_secure_endpoint_create( From 86958768b462c5428cf6607508895d3a44cd3d16 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 12:05:34 -0700 Subject: [PATCH 052/286] Buffer pools compile --- BUILD | 6 +++ build.yaml | 1 + gRPC-Core.podspec | 2 + grpc.gemspec | 1 + package.xml | 1 + .../chttp2/client/insecure/channel_create.c | 4 +- .../client/insecure/channel_create_posix.c | 6 +-- .../client/secure/secure_channel_create.c | 7 +-- .../chttp2/server/insecure/server_chttp2.c | 4 +- .../server/insecure/server_chttp2_posix.c | 2 +- src/core/lib/http/httpcli.c | 13 +++-- src/core/lib/iomgr/buffer_pool.c | 17 ++++++ src/core/lib/iomgr/buffer_pool.h | 2 + src/core/lib/iomgr/tcp_client.h | 4 +- src/core/lib/iomgr/tcp_client_posix.c | 52 ++++++++++++++----- src/core/lib/iomgr/tcp_client_posix.h | 45 ++++++++++++++++ tools/doxygen/Doxyfile.c++.internal | 1 + tools/doxygen/Doxyfile.core.internal | 1 + tools/run_tests/sources_and_headers.json | 2 + vsprojects/vcxproj/grpc++/grpc++.vcxproj | 1 + .../vcxproj/grpc++/grpc++.vcxproj.filters | 3 ++ .../grpc++_unsecure/grpc++_unsecure.vcxproj | 1 + .../grpc++_unsecure.vcxproj.filters | 3 ++ vsprojects/vcxproj/grpc/grpc.vcxproj | 1 + vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 3 ++ .../grpc_test_util/grpc_test_util.vcxproj | 1 + .../grpc_test_util.vcxproj.filters | 3 ++ .../grpc_unsecure/grpc_unsecure.vcxproj | 1 + .../grpc_unsecure.vcxproj.filters | 3 ++ 29 files changed, 163 insertions(+), 28 deletions(-) create mode 100644 src/core/lib/iomgr/tcp_client_posix.h diff --git a/BUILD b/BUILD index ceba225dd58..01aa8171166 100644 --- a/BUILD +++ b/BUILD @@ -209,6 +209,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", + "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_windows.h", @@ -606,6 +607,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", + "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_windows.h", @@ -958,6 +960,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", + "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_windows.h", @@ -1307,6 +1310,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", + "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_windows.h", @@ -1715,6 +1719,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", + "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_windows.h", @@ -2430,6 +2435,7 @@ objc_library( "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", + "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_windows.h", diff --git a/build.yaml b/build.yaml index 3088214c401..8c9906469c1 100644 --- a/build.yaml +++ b/build.yaml @@ -213,6 +213,7 @@ filegroups: - src/core/lib/iomgr/socket_utils_posix.h - src/core/lib/iomgr/socket_windows.h - src/core/lib/iomgr/tcp_client.h + - src/core/lib/iomgr/tcp_client_posix.h - src/core/lib/iomgr/tcp_posix.h - src/core/lib/iomgr/tcp_server.h - src/core/lib/iomgr/tcp_windows.h diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 40ce020aff5..23639dce38e 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -296,6 +296,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/tcp_client.h', + 'src/core/lib/iomgr/tcp_client_posix.h', 'src/core/lib/iomgr/tcp_posix.h', 'src/core/lib/iomgr/tcp_server.h', 'src/core/lib/iomgr/tcp_windows.h', @@ -665,6 +666,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/tcp_client.h', + 'src/core/lib/iomgr/tcp_client_posix.h', 'src/core/lib/iomgr/tcp_posix.h', 'src/core/lib/iomgr/tcp_server.h', 'src/core/lib/iomgr/tcp_windows.h', diff --git a/grpc.gemspec b/grpc.gemspec index 6c64dc7322d..0aefd512482 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -216,6 +216,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/socket_utils_posix.h ) s.files += %w( src/core/lib/iomgr/socket_windows.h ) s.files += %w( src/core/lib/iomgr/tcp_client.h ) + s.files += %w( src/core/lib/iomgr/tcp_client_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_server.h ) s.files += %w( src/core/lib/iomgr/tcp_windows.h ) diff --git a/package.xml b/package.xml index 7d613d7fc6b..f3a7c6a277b 100644 --- a/package.xml +++ b/package.xml @@ -223,6 +223,7 @@ + diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c index ddc00bd79f8..f8654804e4b 100644 --- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c +++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c @@ -149,8 +149,8 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, c->tcp = NULL; grpc_closure_init(&c->connected, connected, c); grpc_tcp_client_connect(exec_ctx, &c->connected, &c->tcp, - args->interested_parties, args->addr, args->addr_len, - args->deadline); + args->interested_parties, args->channel_args, + args->addr, args->addr_len, args->deadline); } static const grpc_connector_vtable connector_vtable = { diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c b/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c index b2c5e5b088c..1e5b1c22e39 100644 --- a/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +++ b/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c @@ -44,6 +44,7 @@ #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/tcp_client_posix.h" #include "src/core/lib/iomgr/tcp_posix.h" #include "src/core/lib/surface/api_trace.h" #include "src/core/lib/surface/channel.h" @@ -65,9 +66,8 @@ grpc_channel *grpc_insecure_channel_create_from_fd( int flags = fcntl(fd, F_GETFL, 0); GPR_ASSERT(fcntl(fd, F_SETFL, flags | O_NONBLOCK) == 0); - grpc_endpoint *client = - grpc_tcp_create(grpc_fd_create(fd, "client"), - GRPC_TCP_DEFAULT_READ_SLICE_SIZE, "fd-client"); + grpc_endpoint *client = grpc_tcp_client_create_from_fd( + &exec_ctx, grpc_fd_create(fd, "client"), args, "fd-client"); grpc_transport *transport = grpc_create_chttp2_transport(&exec_ctx, final_args, client, 1); diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c index f36fbbfc579..2fbe03ad242 100644 --- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c @@ -207,9 +207,10 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, GPR_ASSERT(c->connecting_endpoint == NULL); gpr_mu_unlock(&c->mu); grpc_closure_init(&c->connected_closure, connected, c); - grpc_tcp_client_connect( - exec_ctx, &c->connected_closure, &c->newly_connecting_endpoint, - args->interested_parties, args->addr, args->addr_len, args->deadline); + grpc_tcp_client_connect(exec_ctx, &c->connected_closure, + &c->newly_connecting_endpoint, + args->interested_parties, args->channel_args, + args->addr, args->addr_len, args->deadline); } static const grpc_connector_vtable connector_vtable = { 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 f0e07429faf..2c64878c0c7 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c @@ -139,8 +139,8 @@ int grpc_server_add_insecure_http2_port(grpc_server *server, const char *addr) { goto error; } - err = - grpc_tcp_server_create(NULL, grpc_server_get_channel_args(server), &tcp); + err = grpc_tcp_server_create(&exec_ctx, NULL, + grpc_server_get_channel_args(server), &tcp); if (err != GRPC_ERROR_NONE) { goto error; } diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c index 4350543c27a..020f67edd25 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c @@ -58,7 +58,7 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server *server, gpr_asprintf(&name, "fd:%d", fd); grpc_endpoint *server_endpoint = grpc_tcp_create( - grpc_fd_create(fd, name), GRPC_TCP_DEFAULT_READ_SLICE_SIZE, name); + grpc_fd_create(fd, name), NULL, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, name); gpr_free(name); diff --git a/src/core/lib/http/httpcli.c b/src/core/lib/http/httpcli.c index 593da734f29..2f6f7e37dcb 100644 --- a/src/core/lib/http/httpcli.c +++ b/src/core/lib/http/httpcli.c @@ -226,10 +226,15 @@ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, } addr = &req->addresses->addrs[req->next_address++]; grpc_closure_init(&req->connected, on_connected, req); - grpc_tcp_client_connect(exec_ctx, &req->connected, &req->ep, - req->context->pollset_set, req->buffer_pool, - (struct sockaddr *)&addr->addr, addr->len, - req->deadline); + grpc_arg arg; + arg.key = GRPC_ARG_BUFFER_POOL; + arg.type = GRPC_ARG_POINTER; + arg.value.pointer.p = req->buffer_pool; + arg.value.pointer.vtable = grpc_buffer_pool_arg_vtable(); + grpc_channel_args args = {1, &arg}; + grpc_tcp_client_connect( + exec_ctx, &req->connected, &req->ep, req->context->pollset_set, &args, + (struct sockaddr *)&addr->addr, addr->len, req->deadline); } static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index c7e1fcbf4a1..0153bce2038 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -33,6 +33,8 @@ #include "src/core/lib/iomgr/buffer_pool.h" +#include + #include #include @@ -364,6 +366,21 @@ void grpc_buffer_pool_resize(grpc_buffer_pool *buffer_pool, size_t size) { grpc_exec_ctx_finish(&exec_ctx); } +grpc_buffer_pool *grpc_buffer_pool_from_channel_args( + grpc_channel_args *channel_args) { + for (size_t i = 0; i < channel_args->num_args; i++) { + if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_BUFFER_POOL)) { + if (channel_args->args[i].type == GRPC_ARG_POINTER) { + return grpc_buffer_pool_internal_ref( + channel_args->args[i].value.pointer.p); + } else { + gpr_log(GPR_DEBUG, GRPC_ARG_BUFFER_POOL " should be a pointer"); + } + } + } + return grpc_buffer_pool_create(); +} + /******************************************************************************* * grpc_buffer_user api */ diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 2774a445e35..2ffc5b6b75b 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -41,6 +41,8 @@ grpc_buffer_pool *grpc_buffer_pool_internal_ref(grpc_buffer_pool *buffer_pool); void grpc_buffer_pool_internal_unref(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool); +grpc_buffer_pool *grpc_buffer_pool_from_channel_args( + grpc_channel_args *channel_args); typedef enum { GRPC_BULIST_AWAITING_ALLOCATION, diff --git a/src/core/lib/iomgr/tcp_client.h b/src/core/lib/iomgr/tcp_client.h index 04e4108b35f..b854e5aadc6 100644 --- a/src/core/lib/iomgr/tcp_client.h +++ b/src/core/lib/iomgr/tcp_client.h @@ -39,6 +39,8 @@ #include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/iomgr/sockaddr.h" +#define GRPC_ARG_TCP_READ_CHUNK_SIZE "grpc.experimental.tcp_read_chunk_size" + /* Asynchronously connect to an address (specified as (addr, len)), and call cb with arg and the completed connection when done (or call cb with arg and NULL on failure). @@ -47,7 +49,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_connect, grpc_endpoint **endpoint, grpc_pollset_set *interested_parties, - grpc_buffer_pool *buffer_pool, + const grpc_channel_args *channel_args, const struct sockaddr *addr, size_t addr_len, gpr_timespec deadline); diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 42ceb339339..860a4f84363 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -35,7 +35,7 @@ #ifdef GPR_POSIX_SOCKET -#include "src/core/lib/iomgr/tcp_client.h" +#include "src/core/lib/iomgr/tcp_client_posix.h" #include #include @@ -47,6 +47,7 @@ #include #include +#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/iomgr/ev_posix.h" #include "src/core/lib/iomgr/iomgr_posix.h" #include "src/core/lib/iomgr/sockaddr_utils.h" @@ -69,7 +70,7 @@ typedef struct { char *addr_str; grpc_endpoint **ep; grpc_closure *closure; - grpc_buffer_pool *buffer_pool; + grpc_channel_args *channel_args; } async_connect; static grpc_error *prepare_socket(const struct sockaddr *addr, int fd) { @@ -115,11 +116,38 @@ static void tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { if (done) { gpr_mu_destroy(&ac->mu); gpr_free(ac->addr_str); - grpc_buffer_pool_internal_unref(exec_ctx, ac->buffer_pool); + grpc_channel_args_destroy(ac->channel_args); gpr_free(ac); } } +grpc_endpoint *grpc_tcp_client_create_from_fd( + grpc_exec_ctx *exec_ctx, grpc_fd *fd, const grpc_channel_args *channel_args, + const char *addr_str) { + size_t tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE; + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + if (channel_args != NULL) { + for (size_t i = 0; i < channel_args->num_args; i++) { + if (0 == + strcmp(channel_args->args[i].key, GRPC_ARG_TCP_READ_CHUNK_SIZE)) { + grpc_integer_options options = {(int)tcp_read_chunk_size, 1, + 8 * 1024 * 1024}; + tcp_read_chunk_size = (size_t)grpc_channel_arg_get_integer( + &channel_args->args[i], options); + } else if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_BUFFER_POOL)) { + grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); + buffer_pool = grpc_buffer_pool_internal_ref( + channel_args->args[i].value.pointer.p); + } + } + } + + grpc_endpoint *ep = + grpc_tcp_create(fd, buffer_pool, tcp_read_chunk_size, addr_str); + grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); + return ep; +} + static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { async_connect *ac = acp; int so_error = 0; @@ -192,8 +220,8 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { } } else { grpc_pollset_set_del_fd(exec_ctx, ac->interested_parties, fd); - *ep = grpc_tcp_create(fd, ac->buffer_pool, - GRPC_TCP_DEFAULT_READ_SLICE_SIZE, ac->addr_str); + *ep = grpc_tcp_client_create_from_fd(exec_ctx, fd, ac->channel_args, + ac->addr_str); fd = NULL; goto finish; } @@ -230,7 +258,7 @@ finish: static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, - grpc_buffer_pool *buffer_pool, + const grpc_channel_args *channel_args, const struct sockaddr *addr, size_t addr_len, gpr_timespec deadline) { int fd; @@ -279,8 +307,8 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, fdobj = grpc_fd_create(fd, name); if (err >= 0) { - *ep = grpc_tcp_create(fdobj, buffer_pool, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, - addr_str); + *ep = + grpc_tcp_client_create_from_fd(exec_ctx, fdobj, channel_args, addr_str); grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_NONE, NULL); goto done; } @@ -305,7 +333,7 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, ac->refs = 2; ac->write_closure.cb = on_writable; ac->write_closure.cb_arg = ac; - ac->buffer_pool = grpc_buffer_pool_internal_ref(buffer_pool); + ac->channel_args = grpc_channel_args_copy(channel_args); if (grpc_tcp_trace) { gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: asynchronously connecting", @@ -327,18 +355,18 @@ done: // overridden by api_fuzzer.c void (*grpc_tcp_client_connect_impl)( grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, grpc_buffer_pool *buffer_pool, + grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args, const struct sockaddr *addr, size_t addr_len, gpr_timespec deadline) = tcp_client_connect_impl; void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, - grpc_buffer_pool *buffer_pool, + const grpc_channel_args *channel_args, const struct sockaddr *addr, size_t addr_len, gpr_timespec deadline) { grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties, - buffer_pool, addr, addr_len, deadline); + channel_args, addr, addr_len, deadline); } #endif diff --git a/src/core/lib/iomgr/tcp_client_posix.h b/src/core/lib/iomgr/tcp_client_posix.h new file mode 100644 index 00000000000..d8108b83599 --- /dev/null +++ b/src/core/lib/iomgr/tcp_client_posix.h @@ -0,0 +1,45 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_TCP_CLIENT_POSIX_H +#define GRPC_CORE_LIB_IOMGR_TCP_CLIENT_POSIX_H + +#include "src/core/lib/iomgr/endpoint.h" +#include "src/core/lib/iomgr/ev_posix.h" +#include "src/core/lib/iomgr/tcp_client.h" + +grpc_endpoint *grpc_tcp_client_create_from_fd( + grpc_exec_ctx *exec_ctx, grpc_fd *fd, const grpc_channel_args *channel_args, + const char *addr_str); + +#endif diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index b14ca649200..19ceb163754 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -917,6 +917,7 @@ src/core/lib/iomgr/sockaddr_windows.h \ src/core/lib/iomgr/socket_utils_posix.h \ src/core/lib/iomgr/socket_windows.h \ src/core/lib/iomgr/tcp_client.h \ +src/core/lib/iomgr/tcp_client_posix.h \ src/core/lib/iomgr/tcp_posix.h \ src/core/lib/iomgr/tcp_server.h \ src/core/lib/iomgr/tcp_windows.h \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 9d53f4d5607..8ed3c02776e 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -833,6 +833,7 @@ src/core/lib/iomgr/sockaddr_windows.h \ src/core/lib/iomgr/socket_utils_posix.h \ src/core/lib/iomgr/socket_windows.h \ src/core/lib/iomgr/tcp_client.h \ +src/core/lib/iomgr/tcp_client_posix.h \ src/core/lib/iomgr/tcp_posix.h \ src/core/lib/iomgr/tcp_server.h \ src/core/lib/iomgr/tcp_windows.h \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 681e2f5f97e..6f7b48dd877 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -5998,6 +5998,7 @@ "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", + "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_windows.h", @@ -6136,6 +6137,7 @@ "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_client_posix.c", + "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_client_windows.c", "src/core/lib/iomgr/tcp_posix.c", "src/core/lib/iomgr/tcp_posix.h", diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index d9587cbea28..497e370a5e5 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -417,6 +417,7 @@ + diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index 54f47d41bb4..e26f3853cbd 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -851,6 +851,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index d8a31f9755d..19e8438f28a 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -413,6 +413,7 @@ + diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index d88c7c54d8c..5b978fcb0b1 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -824,6 +824,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 8a6f2f23892..e8776df2558 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -342,6 +342,7 @@ + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index ce0e8a6ae08..7ba7f337834 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -803,6 +803,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index 29feafa8ef4..296cd507f74 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -233,6 +233,7 @@ + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 1ab09ae4925..9abbaef1dc3 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -581,6 +581,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 02738560a72..c843306241b 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -332,6 +332,7 @@ + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index a4cdabcc7b0..3dda160f538 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -713,6 +713,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr From 7871f736ce62e74559602f928b25bea7389f57fb Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 23 Sep 2016 13:49:05 -0700 Subject: [PATCH 053/286] Remove sockaddr type structs and socklen_t from internal core APIs, update POSIX tests --- .../ext/client_config/client_config_plugin.c | 5 - src/core/ext/client_config/connector.h | 9 +- .../default_initial_connect_string.c | 5 +- .../client_config/initial_connect_string.c | 7 +- .../client_config/initial_connect_string.h | 8 +- src/core/ext/client_config/parse_address.c | 31 ++-- src/core/ext/client_config/parse_address.h | 10 +- src/core/ext/client_config/subchannel.c | 12 +- src/core/ext/client_config/subchannel.h | 3 +- src/core/ext/client_config/subchannel_index.c | 14 +- src/core/ext/lb_policy/grpclb/grpclb.c | 14 +- .../ext/lb_policy/pick_first/pick_first.c | 9 +- .../ext/lb_policy/round_robin/round_robin.c | 8 +- .../ext/resolver/dns/native/dns_resolver.c | 5 - .../ext/resolver/sockaddr/sockaddr_resolver.c | 11 +- .../chttp2/client/insecure/channel_create.c | 2 +- .../client/secure/secure_channel_create.c | 2 +- .../chttp2/server/insecure/server_chttp2.c | 4 +- .../server/secure/server_secure_chttp2.c | 4 +- src/core/lib/http/httpcli.c | 5 +- src/core/lib/http/httpcli.h | 5 - src/core/lib/iomgr/port.h | 2 +- src/core/lib/iomgr/resolve_address_posix.c | 4 +- src/core/lib/iomgr/resolve_address_uv.c | 4 +- src/core/lib/iomgr/resolve_address_windows.c | 6 +- src/core/lib/iomgr/sockaddr.h | 3 + src/core/lib/iomgr/sockaddr_utils.c | 86 ++++++---- src/core/lib/iomgr/sockaddr_utils.h | 28 ++-- src/core/lib/iomgr/socket_utils.h | 12 +- .../lib/iomgr/socket_utils_common_posix.c | 17 +- src/core/lib/iomgr/socket_utils_linux.c | 9 +- src/core/lib/iomgr/socket_utils_posix.c | 8 +- src/core/lib/iomgr/socket_utils_posix.h | 6 +- src/core/lib/iomgr/socket_utils_uv.c | 5 +- src/core/lib/iomgr/socket_utils_windows.c | 6 +- src/core/lib/iomgr/tcp_client.h | 3 +- src/core/lib/iomgr/tcp_client_posix.c | 28 ++-- src/core/lib/iomgr/tcp_client_uv.c | 9 +- src/core/lib/iomgr/tcp_client_windows.c | 13 +- src/core/lib/iomgr/tcp_server.h | 6 +- src/core/lib/iomgr/tcp_server_posix.c | 108 ++++++------ src/core/lib/iomgr/tcp_server_uv.c | 64 ++++---- src/core/lib/iomgr/timer_uv.c | 12 +- src/core/lib/iomgr/timer_uv.h | 6 +- src/core/lib/iomgr/unix_sockets_posix.c | 16 +- src/core/lib/iomgr/unix_sockets_posix.h | 7 +- src/core/lib/iomgr/unix_sockets_posix_noop.c | 6 +- .../lib/security/context/security_context.c | 5 - .../lib/security/context/security_context.h | 5 - .../lib/security/credentials/credentials.h | 5 - .../credentials/oauth2/oauth2_credentials.c | 5 - .../security/transport/server_auth_filter.c | 5 - src/core/lib/surface/call.c | 5 - src/core/lib/surface/init_secure.c | 5 - src/core/lib/tsi/ssl_transport_security.c | 5 +- .../set_initial_connect_string_test.c | 13 +- test/core/end2end/fixtures/h2_full+trace.c | 1 + .../core/end2end/fixtures/h2_sockpair+trace.c | 1 + test/core/iomgr/sockaddr_utils_test.c | 155 +++++++++--------- test/core/iomgr/tcp_client_posix_test.c | 32 ++-- test/core/iomgr/tcp_server_posix_test.c | 55 ++++--- .../surface/concurrent_connectivity_test.c | 13 +- test/core/util/test_tcp_server.c | 15 +- 63 files changed, 464 insertions(+), 508 deletions(-) diff --git a/src/core/ext/client_config/client_config_plugin.c b/src/core/ext/client_config/client_config_plugin.c index e065d06be96..5e316134205 100644 --- a/src/core/ext/client_config/client_config_plugin.c +++ b/src/core/ext/client_config/client_config_plugin.c @@ -31,11 +31,6 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include #include diff --git a/src/core/ext/client_config/connector.h b/src/core/ext/client_config/connector.h index 5cf8f14721c..18e660586f7 100644 --- a/src/core/ext/client_config/connector.h +++ b/src/core/ext/client_config/connector.h @@ -34,13 +34,8 @@ #ifndef GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H #define GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include "src/core/lib/channel/channel_stack.h" -#include "src/core/lib/iomgr/sockaddr.h" +#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/transport/transport.h" typedef struct grpc_connector grpc_connector; @@ -54,7 +49,7 @@ typedef struct { /** set of pollsets interested in this connection */ grpc_pollset_set *interested_parties; /** address to connect to */ - const struct sockaddr *addr; + const grpc_resolved_address *addr; size_t addr_len; /** initial connect string to send */ gpr_slice initial_connect_string; diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/ext/client_config/default_initial_connect_string.c index a70da4a84af..0b251372fd3 100644 --- a/src/core/ext/client_config/default_initial_connect_string.c +++ b/src/core/ext/client_config/default_initial_connect_string.c @@ -32,8 +32,7 @@ */ #include -#include "src/core/lib/iomgr/sockaddr.h" +#include "src/core/lib/iomgr/resolve_address.h" -void grpc_set_default_initial_connect_string(struct sockaddr **addr, - size_t *addr_len, +void grpc_set_default_initial_connect_string(grpc_resolved_address **addr, gpr_slice *initial_str) {} diff --git a/src/core/ext/client_config/initial_connect_string.c b/src/core/ext/client_config/initial_connect_string.c index 41580d2106c..61683dd635b 100644 --- a/src/core/ext/client_config/initial_connect_string.c +++ b/src/core/ext/client_config/initial_connect_string.c @@ -35,8 +35,7 @@ #include -extern void grpc_set_default_initial_connect_string(struct sockaddr **addr, - size_t *addr_len, +extern void grpc_set_default_initial_connect_string(grpc_resolved_address **addr, gpr_slice *initial_str); static grpc_set_initial_connect_string_func g_set_initial_connect_string_func = @@ -47,7 +46,7 @@ void grpc_test_set_initial_connect_string_function( g_set_initial_connect_string_func = func; } -void grpc_set_initial_connect_string(struct sockaddr **addr, size_t *addr_len, +void grpc_set_initial_connect_string(grpc_resolved_address **addr, gpr_slice *initial_str) { - g_set_initial_connect_string_func(addr, addr_len, initial_str); + g_set_initial_connect_string_func(addr, initial_str); } diff --git a/src/core/ext/client_config/initial_connect_string.h b/src/core/ext/client_config/initial_connect_string.h index 06f0767832a..6d5301fde52 100644 --- a/src/core/ext/client_config/initial_connect_string.h +++ b/src/core/ext/client_config/initial_connect_string.h @@ -35,16 +35,16 @@ #define GRPC_CORE_EXT_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H #include -#include "src/core/lib/iomgr/sockaddr.h" -typedef void (*grpc_set_initial_connect_string_func)(struct sockaddr **addr, - size_t *addr_len, +#include "src/core/lib/iomgr/resolve_address.h" + +typedef void (*grpc_set_initial_connect_string_func)(grpc_resolved_address **addr, gpr_slice *initial_str); void grpc_test_set_initial_connect_string_function( grpc_set_initial_connect_string_func func); /** Set a string to be sent once connected. Optionally reset addr. */ -void grpc_set_initial_connect_string(struct sockaddr **addr, size_t *addr_len, +void grpc_set_initial_connect_string(grpc_resolved_address **addr, gpr_slice *connect_string); #endif /* GRPC_CORE_EXT_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H */ diff --git a/src/core/ext/client_config/parse_address.c b/src/core/ext/client_config/parse_address.c index 7c548b15adb..13f1f4da977 100644 --- a/src/core/ext/client_config/parse_address.c +++ b/src/core/ext/client_config/parse_address.c @@ -31,6 +31,7 @@ * */ +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/ext/client_config/parse_address.h" #include @@ -45,32 +46,40 @@ #include #ifdef GRPC_HAVE_UNIX_SOCKET -int parse_unix(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len) { - struct sockaddr_un *un = (struct sockaddr_un *)addr; + +int parse_unix(grpc_uri *uri, grpc_resolved_address *resolved_addr) { + struct sockaddr_un *un = (struct sockaddr_un *)resolved_addr->addr; un->sun_family = AF_UNIX; strcpy(un->sun_path, uri->path); - *len = strlen(un->sun_path) + sizeof(un->sun_family) + 1; + resolved_addr->len = strlen(un->sun_path) + sizeof(un->sun_family) + 1; return 1; } -#endif -int parse_ipv4(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len) { +#else /* GRPC_HAVE_UNIX_SOCKET */ + +int parse_unix(grpc_uri *uri, grpc_resolved_address *resolved_addr) { + abort(); +} + +#endif /* GRPC_HAVE_UNIX_SOCKET */ + +int parse_ipv4(grpc_uri *uri, grpc_resolved_address *resolved_addr) { const char *host_port = uri->path; char *host; char *port; int port_num; int result = 0; - struct sockaddr_in *in = (struct sockaddr_in *)addr; + struct sockaddr_in *in = (struct sockaddr_in *)resolved_addr->addr; if (*host_port == '/') ++host_port; if (!gpr_split_host_port(host_port, &host, &port)) { return 0; } - memset(in, 0, sizeof(*in)); - *len = sizeof(*in); + memset(resolved_addr, 0, sizeof(grpc_resolved_address)); + resolved_addr->len = sizeof(struct sockaddr_in); in->sin_family = AF_INET; if (inet_pton(AF_INET, host, &in->sin_addr) == 0) { gpr_log(GPR_ERROR, "invalid ipv4 address: '%s'", host); @@ -96,13 +105,13 @@ done: return result; } -int parse_ipv6(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len) { +int parse_ipv6(grpc_uri *uri, grpc_resolved_address *resolved_addr) { const char *host_port = uri->path; char *host; char *port; int port_num; int result = 0; - struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)addr; + struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)resolved_addr->addr; if (*host_port == '/') ++host_port; if (!gpr_split_host_port(host_port, &host, &port)) { @@ -110,7 +119,7 @@ int parse_ipv6(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len) { } memset(in6, 0, sizeof(*in6)); - *len = sizeof(*in6); + resolved_addr->len = sizeof(*in6); in6->sin6_family = AF_INET6; if (inet_pton(AF_INET6, host, &in6->sin6_addr) == 0) { gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host); diff --git a/src/core/ext/client_config/parse_address.h b/src/core/ext/client_config/parse_address.h index 16300de2087..a309c030deb 100644 --- a/src/core/ext/client_config/parse_address.h +++ b/src/core/ext/client_config/parse_address.h @@ -37,20 +37,18 @@ #include #include "src/core/ext/client_config/uri_parser.h" -#include "src/core/lib/iomgr/sockaddr.h" +#include "src/core/lib/iomgr/resolve_address.h" -#ifdef GRPC_HAVE_UNIX_SOCKET /** Populate \a addr and \a len from \a uri, whose path is expected to contain a * unix socket path. Returns true upon success. */ -int parse_unix(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len); -#endif +int parse_unix(grpc_uri *uri, grpc_resolved_address *resolved_addr); /** Populate /a addr and \a len from \a uri, whose path is expected to contain a * host:port pair. Returns true upon success. */ -int parse_ipv4(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len); +int parse_ipv4(grpc_uri *uri, grpc_resolved_address *resolved_addr); /** Populate /a addr and \a len from \a uri, whose path is expected to contain a * host:port pair. Returns true upon success. */ -int parse_ipv6(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len); +int parse_ipv6(grpc_uri *uri, grpc_resolved_address *resolved_addr); #endif /* GRPC_CORE_EXT_CLIENT_CONFIG_PARSE_ADDRESS_H */ diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_config/subchannel.c index 2c4364b259f..4acc750fac7 100644 --- a/src/core/ext/client_config/subchannel.c +++ b/src/core/ext/client_config/subchannel.c @@ -94,8 +94,7 @@ struct grpc_subchannel { /** channel arguments */ grpc_channel_args *args; /** address to connect to */ - struct sockaddr *addr; - size_t addr_len; + grpc_resolved_address *addr; grpc_subchannel_key *key; @@ -319,12 +318,10 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx, } else { c->filters = NULL; } - c->addr = gpr_malloc(args->addr_len); - if (args->addr_len) memcpy(c->addr, args->addr, args->addr_len); + c->addr = gpr_malloc(sizeof(grpc_resolved_address)); + if (args->addr->len) memcpy(c->addr, args->addr, sizeof(grpc_resolved_address)); c->pollset_set = grpc_pollset_set_create(); - c->addr_len = args->addr_len; - grpc_set_initial_connect_string(&c->addr, &c->addr_len, - &c->initial_connect_string); + grpc_set_initial_connect_string(&c->addr, &c->initial_connect_string); c->args = grpc_channel_args_copy(args->args); c->root_external_state_watcher.next = c->root_external_state_watcher.prev = &c->root_external_state_watcher; @@ -376,7 +373,6 @@ static void continue_connect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) { args.interested_parties = c->pollset_set; args.addr = c->addr; - args.addr_len = c->addr_len; args.deadline = c->next_attempt; args.channel_args = c->args; args.initial_connect_string = c->initial_connect_string; diff --git a/src/core/ext/client_config/subchannel.h b/src/core/ext/client_config/subchannel.h index ae1d96e6400..c51e96bc6be 100644 --- a/src/core/ext/client_config/subchannel.h +++ b/src/core/ext/client_config/subchannel.h @@ -163,8 +163,7 @@ struct grpc_subchannel_args { /** Channel arguments to be supplied to the newly created channel */ const grpc_channel_args *args; /** Address to connect to */ - struct sockaddr *addr; - size_t addr_len; + grpc_resolved_address *addr; }; /** create a subchannel given a connector */ diff --git a/src/core/ext/client_config/subchannel_index.c b/src/core/ext/client_config/subchannel_index.c index 690cb16b96f..0ec83fb0ada 100644 --- a/src/core/ext/client_config/subchannel_index.c +++ b/src/core/ext/client_config/subchannel_index.c @@ -85,10 +85,10 @@ static grpc_subchannel_key *create_key( } else { k->args.filters = NULL; } - k->args.addr_len = args->addr_len; - k->args.addr = gpr_malloc(args->addr_len); - if (k->args.addr_len > 0) { - memcpy(k->args.addr, args->addr, k->args.addr_len); + k->args.addr = gpr_malloc(sizeof(grpc_resolved_address)); + k->args.addr->len = args->addr->len; + if (k->args.addr->len > 0) { + memcpy(k->args.addr, args->addr, sizeof(grpc_resolved_address)); } k->args.args = copy_channel_args(args->args); return k; @@ -107,12 +107,12 @@ static int subchannel_key_compare(grpc_subchannel_key *a, grpc_subchannel_key *b) { int c = GPR_ICMP(a->connector, b->connector); if (c != 0) return c; - c = GPR_ICMP(a->args.addr_len, b->args.addr_len); + c = GPR_ICMP(a->args.addr->len, b->args.addr->len); if (c != 0) return c; c = GPR_ICMP(a->args.filter_count, b->args.filter_count); if (c != 0) return c; - if (a->args.addr_len) { - c = memcmp(a->args.addr, b->args.addr, a->args.addr_len); + if (a->args.addr->len) { + c = memcmp(a->args.addr->addr, b->args.addr->addr, a->args.addr->len); if (c != 0) return c; } if (a->args.filter_count > 0) { diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index a5ab42ba888..7f3c4613c66 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -96,10 +96,8 @@ * - Implement LB service forwarding (point 2c. in the doc's diagram). */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" +#include "src/core/lib/iomgr/sockaddr.h" + #include #include @@ -115,7 +113,6 @@ #include "src/core/ext/client_config/parse_address.h" #include "src/core/ext/lb_policy/grpclb/grpclb.h" #include "src/core/ext/lb_policy/grpclb/load_balancer_api.h" -#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/support/string.h" #include "src/core/lib/surface/call.h" @@ -445,7 +442,7 @@ static size_t process_serverlist(const grpc_grpclb_serverlist *serverlist, gpr_log(GPR_ERROR, "Missing LB token for backend address '%s'. The empty token will " "be used instead", - grpc_sockaddr_to_uri((struct sockaddr *)sa)); + grpc_sockaddr_to_uri(lb_addr->resolved_address)); lb_addr->user_data = GRPC_MDELEM_LOAD_REPORTING_INITIAL_EMPTY; } ++addr_idx; @@ -593,8 +590,7 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, * ipvX://ip1:port1,ip2:port2,... * TODO(dgq): support mixed ip version */ char **addr_strs = gpr_malloc(sizeof(char *) * args->num_addresses); - addr_strs[0] = grpc_sockaddr_to_uri( - (const struct sockaddr *)&args->addresses[0].resolved_address->addr); + addr_strs[0] = grpc_sockaddr_to_uri(args->addresses[0].resolved_address); for (size_t i = 1; i < args->num_addresses; i++) { if (args->addresses[i].user_data != NULL) { gpr_log(GPR_ERROR, @@ -604,7 +600,7 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, GPR_ASSERT( grpc_sockaddr_to_string( &addr_strs[i], - (const struct sockaddr *)&args->addresses[i].resolved_address->addr, + args->addresses[i].resolved_address, true) == 0); } size_t uri_path_len; diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c index e847464581a..00b96600497 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -31,11 +31,6 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include @@ -462,9 +457,7 @@ static grpc_lb_policy *create_pick_first(grpc_exec_ctx *exec_ctx, } memset(&sc_args, 0, sizeof(grpc_subchannel_args)); - sc_args.addr = - (struct sockaddr *)(args->addresses[i].resolved_address->addr); - sc_args.addr_len = (size_t)args->addresses[i].resolved_address->len; + sc_args.addr = args->addresses[i].resolved_address; grpc_subchannel *subchannel = grpc_client_channel_factory_create_subchannel( exec_ctx, args->client_channel_factory, &sc_args); diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c index b81df97c7f1..eee3dce249f 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -59,11 +59,6 @@ * the subchannel by the caller. */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include @@ -631,8 +626,7 @@ static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx, size_t subchannel_idx = 0; for (size_t i = 0; i < p->num_addresses; i++) { memset(&sc_args, 0, sizeof(grpc_subchannel_args)); - sc_args.addr = (struct sockaddr *)args->addresses[i].resolved_address->addr; - sc_args.addr_len = args->addresses[i].resolved_address->len; + sc_args.addr = args->addresses[i].resolved_address; p->user_data_pointers[i] = args->addresses[i].user_data; diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index 462f78d696c..32e9de69a6c 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -31,11 +31,6 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index 23ad1ce4778..8229c29a923 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -31,11 +31,6 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include #include @@ -187,7 +182,7 @@ static void do_nothing(void *ignored) {} static grpc_resolver *sockaddr_create( grpc_resolver_args *args, const char *default_lb_policy_name, - int parse(grpc_uri *uri, struct sockaddr_storage *dst, size_t *len)) { + int parse(grpc_uri *uri, grpc_resolved_address *dst)) { int errors_found = 0; /* GPR_FALSE */ sockaddr_resolver *r; gpr_slice path_slice; @@ -238,9 +233,7 @@ static grpc_resolver *sockaddr_create( grpc_uri ith_uri = *args->uri; char *part_str = gpr_dump_slice(path_parts.slices[i], GPR_DUMP_ASCII); ith_uri.path = part_str; - if (!parse(&ith_uri, - (struct sockaddr_storage *)(&r->addresses->addrs[i].addr), - &r->addresses->addrs[i].len)) { + if (!parse(&ith_uri, &r->addresses->addrs[i])) { errors_found = 1; /* GPR_TRUE */ } gpr_free(part_str); diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c index cbaa75a90af..acbc81370da 100644 --- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c +++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c @@ -149,7 +149,7 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, c->tcp = NULL; grpc_closure_init(&c->connected, connected, c); grpc_tcp_client_connect(exec_ctx, &c->connected, &c->tcp, - args->interested_parties, args->addr, args->addr_len, + args->interested_parties, args->addr, args->deadline); } diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c index 9e2bdd758f9..344d56ff866 100644 --- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c @@ -209,7 +209,7 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, grpc_closure_init(&c->connected_closure, connected, c); grpc_tcp_client_connect( exec_ctx, &c->connected_closure, &c->newly_connecting_endpoint, - args->interested_parties, args->addr, args->addr_len, args->deadline); + args->interested_parties, args->addr, args->deadline); } static const grpc_connector_vtable connector_vtable = { 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 f0e07429faf..e4967c2f08b 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c @@ -148,9 +148,7 @@ int grpc_server_add_insecure_http2_port(grpc_server *server, const char *addr) { const size_t naddrs = resolved->naddrs; errors = gpr_malloc(sizeof(*errors) * naddrs); for (i = 0; i < naddrs; i++) { - errors[i] = grpc_tcp_server_add_port( - tcp, (struct sockaddr *)&resolved->addrs[i].addr, - resolved->addrs[i].len, &port_temp); + errors[i] = grpc_tcp_server_add_port(tcp, &resolved->addrs[i], &port_temp); if (errors[i] == GRPC_ERROR_NONE) { if (port_num == -1) { port_num = port_temp; 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 da3e284fcf2..3b0e9c18118 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 @@ -272,9 +272,7 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, errors = gpr_malloc(sizeof(*errors) * resolved->naddrs); for (i = 0; i < resolved->naddrs; i++) { - errors[i] = grpc_tcp_server_add_port( - tcp, (struct sockaddr *)&resolved->addrs[i].addr, - resolved->addrs[i].len, &port_temp); + errors[i] = grpc_tcp_server_add_port(tcp, &resolved->addrs[i], &port_temp); if (errors[i] == GRPC_ERROR_NONE) { if (port_num == -1) { port_num = port_temp; diff --git a/src/core/lib/http/httpcli.c b/src/core/lib/http/httpcli.c index 18135bcb58e..09bdc2e3d91 100644 --- a/src/core/lib/http/httpcli.c +++ b/src/core/lib/http/httpcli.c @@ -32,7 +32,6 @@ */ #include "src/core/lib/http/httpcli.h" -#include "src/core/lib/iomgr/sockaddr.h" #include @@ -126,7 +125,7 @@ static void append_error(internal_request *req, grpc_error *error) { req->overall_error = GRPC_ERROR_CREATE("Failed HTTP/1 client request"); } grpc_resolved_address *addr = &req->addresses->addrs[req->next_address - 1]; - char *addr_text = grpc_sockaddr_to_uri((struct sockaddr *)addr->addr); + char *addr_text = grpc_sockaddr_to_uri(addr); req->overall_error = grpc_error_add_child( req->overall_error, grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, addr_text)); @@ -226,7 +225,7 @@ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, grpc_closure_init(&req->connected, on_connected, req); grpc_tcp_client_connect( exec_ctx, &req->connected, &req->ep, req->context->pollset_set, - (struct sockaddr *)&addr->addr, addr->len, req->deadline); + addr, req->deadline); } static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { diff --git a/src/core/lib/http/httpcli.h b/src/core/lib/http/httpcli.h index eba6ecb9ab7..662e176f4cc 100644 --- a/src/core/lib/http/httpcli.h +++ b/src/core/lib/http/httpcli.h @@ -34,11 +34,6 @@ #ifndef GRPC_CORE_LIB_HTTP_HTTPCLI_H #define GRPC_CORE_LIB_HTTP_HTTPCLI_H -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h index 60bb16a4235..fd300082d75 100644 --- a/src/core/lib/iomgr/port.h +++ b/src/core/lib/iomgr/port.h @@ -37,7 +37,7 @@ #define GRPC_CORE_LIB_IOMGR_PORT_H #if defined(GRPC_UV) -#include +// Do nothing #elif defined(GPR_MANYLINUX1) #define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_IP_PKTINFO 1 diff --git a/src/core/lib/iomgr/resolve_address_posix.c b/src/core/lib/iomgr/resolve_address_posix.c index 9bc46901b11..de791b2b67c 100644 --- a/src/core/lib/iomgr/resolve_address_posix.c +++ b/src/core/lib/iomgr/resolve_address_posix.c @@ -34,9 +34,10 @@ #include "src/core/lib/iomgr/port.h" #ifdef GRPC_POSIX_SOCKET -#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/sockaddr.h" +#include "src/core/lib/iomgr/resolve_address.h" + #include #include @@ -49,7 +50,6 @@ #include #include "src/core/lib/iomgr/executor.h" #include "src/core/lib/iomgr/iomgr_internal.h" -#include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/unix_sockets_posix.h" #include "src/core/lib/support/block_annotate.h" #include "src/core/lib/support/string.h" diff --git a/src/core/lib/iomgr/resolve_address_uv.c b/src/core/lib/iomgr/resolve_address_uv.c index 550047b4d24..f206c63d79a 100644 --- a/src/core/lib/iomgr/resolve_address_uv.c +++ b/src/core/lib/iomgr/resolve_address_uv.c @@ -45,6 +45,7 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/resolve_address.h" +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr_utils.h" #include @@ -86,8 +87,7 @@ static grpc_error *handle_addrinfo_result(int status, { for (i = 0; i < (*addresses)->naddrs; i++) { char *buf; - grpc_sockaddr_to_string( - &buf, (struct sockaddr *)&(*addresses)->addrs[i].addr, 0); + grpc_sockaddr_to_string(&buf, &(*addresses)->addrs[i], 0); gpr_free(buf); } } diff --git a/src/core/lib/iomgr/resolve_address_windows.c b/src/core/lib/iomgr/resolve_address_windows.c index 460bd1f2ee3..6e94269d281 100644 --- a/src/core/lib/iomgr/resolve_address_windows.c +++ b/src/core/lib/iomgr/resolve_address_windows.c @@ -34,9 +34,10 @@ #include "src/core/lib/iomgr/port.h" #ifdef GRPC_WINSOCK_SOCKET -#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/sockaddr.h" +#include "src/core/lib/iomgr/resolve_address.h" + #include #include @@ -124,8 +125,7 @@ static grpc_error *blocking_resolve_address_impl( { for (i = 0; i < (*addresses)->naddrs; i++) { char *buf; - grpc_sockaddr_to_string( - &buf, (struct sockaddr *)&(*addresses)->addrs[i].addr, 0); + grpc_sockaddr_to_string(&buf, (*addresses)->addrs[i], 0); gpr_free(buf); } } diff --git a/src/core/lib/iomgr/sockaddr.h b/src/core/lib/iomgr/sockaddr.h index 418488a0ea5..75dc532d6c7 100644 --- a/src/core/lib/iomgr/sockaddr.h +++ b/src/core/lib/iomgr/sockaddr.h @@ -31,6 +31,9 @@ * */ +/* This header transitively includes other headers that care about include + * order, so it should be included first */ + #ifndef GRPC_CORE_LIB_IOMGR_SOCKADDR_H #define GRPC_CORE_LIB_IOMGR_SOCKADDR_H diff --git a/src/core/lib/iomgr/sockaddr_utils.c b/src/core/lib/iomgr/sockaddr_utils.c index ed1dac56222..0333e7aaf5d 100644 --- a/src/core/lib/iomgr/sockaddr_utils.c +++ b/src/core/lib/iomgr/sockaddr_utils.c @@ -42,6 +42,7 @@ #include #include +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/socket_utils.h" #include "src/core/lib/iomgr/unix_sockets_posix.h" #include "src/core/lib/support/string.h" @@ -49,20 +50,23 @@ static const uint8_t kV4MappedPrefix[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff}; -int grpc_sockaddr_is_v4mapped(const struct sockaddr *addr, - struct sockaddr_in *addr4_out) { - GPR_ASSERT(addr != (struct sockaddr *)addr4_out); +int grpc_sockaddr_is_v4mapped(const grpc_resolved_address *resolved_addr, + grpc_resolved_address *resolved_addr4_out) { + GPR_ASSERT(resolved_addr != resolved_addr4_out); + const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; + struct sockaddr_in *addr4_out = (struct sockaddr_in *)resolved_addr4_out->addr; if (addr->sa_family == AF_INET6) { const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)addr; if (memcmp(addr6->sin6_addr.s6_addr, kV4MappedPrefix, sizeof(kV4MappedPrefix)) == 0) { - if (addr4_out != NULL) { + if (resolved_addr4_out != NULL) { /* Normalize ::ffff:0.0.0.0/96 to IPv4. */ - memset(addr4_out, 0, sizeof(*addr4_out)); + memset(resolved_addr4_out, 0, sizeof(*resolved_addr4_out)); addr4_out->sin_family = AF_INET; /* s6_addr32 would be nice, but it's non-standard. */ memcpy(&addr4_out->sin_addr, &addr6->sin6_addr.s6_addr[12], 4); addr4_out->sin_port = addr6->sin6_port; + resolved_addr4_out->len = sizeof(struct sockaddr_in); } return 1; } @@ -70,26 +74,31 @@ int grpc_sockaddr_is_v4mapped(const struct sockaddr *addr, return 0; } -int grpc_sockaddr_to_v4mapped(const struct sockaddr *addr, - struct sockaddr_in6 *addr6_out) { - GPR_ASSERT(addr != (struct sockaddr *)addr6_out); +int grpc_sockaddr_to_v4mapped(const grpc_resolved_address *resolved_addr, + grpc_resolved_address *resolved_addr6_out) { + GPR_ASSERT(resolved_addr != resolved_addr6_out); + const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; + struct sockaddr_in6 *addr6_out = (struct sockaddr_in6 *)resolved_addr6_out->addr; if (addr->sa_family == AF_INET) { const struct sockaddr_in *addr4 = (const struct sockaddr_in *)addr; - memset(addr6_out, 0, sizeof(*addr6_out)); + memset(resolved_addr6_out, 0, sizeof(*resolved_addr6_out)); addr6_out->sin6_family = AF_INET6; memcpy(&addr6_out->sin6_addr.s6_addr[0], kV4MappedPrefix, 12); memcpy(&addr6_out->sin6_addr.s6_addr[12], &addr4->sin_addr, 4); addr6_out->sin6_port = addr4->sin_port; + resolved_addr6_out->len = sizeof(struct sockaddr_in6); return 1; } return 0; } -int grpc_sockaddr_is_wildcard(const struct sockaddr *addr, int *port_out) { - struct sockaddr_in addr4_normalized; - if (grpc_sockaddr_is_v4mapped(addr, &addr4_normalized)) { - addr = (struct sockaddr *)&addr4_normalized; +int grpc_sockaddr_is_wildcard(const grpc_resolved_address *resolved_addr, int *port_out) { + const struct sockaddr *addr; + grpc_resolved_address addr4_normalized; + if (grpc_sockaddr_is_v4mapped(resolved_addr, &addr4_normalized)) { + resolved_addr = &addr4_normalized; } + addr = (const struct sockaddr *)resolved_addr->addr; if (addr->sa_family == AF_INET) { /* Check for 0.0.0.0 */ const struct sockaddr_in *addr4 = (const struct sockaddr_in *)addr; @@ -114,39 +123,45 @@ int grpc_sockaddr_is_wildcard(const struct sockaddr *addr, int *port_out) { } } -void grpc_sockaddr_make_wildcards(int port, struct sockaddr_in *wild4_out, - struct sockaddr_in6 *wild6_out) { +void grpc_sockaddr_make_wildcards(int port, grpc_resolved_address *wild4_out, + grpc_resolved_address *wild6_out) { grpc_sockaddr_make_wildcard4(port, wild4_out); grpc_sockaddr_make_wildcard6(port, wild6_out); } -void grpc_sockaddr_make_wildcard4(int port, struct sockaddr_in *wild_out) { +void grpc_sockaddr_make_wildcard4(int port, grpc_resolved_address *resolved_wild_out) { + struct sockaddr_in *wild_out = (struct sockaddr_in *)resolved_wild_out->addr; GPR_ASSERT(port >= 0 && port < 65536); - memset(wild_out, 0, sizeof(*wild_out)); + memset(resolved_wild_out, 0, sizeof(*resolved_wild_out)); wild_out->sin_family = AF_INET; wild_out->sin_port = htons((uint16_t)port); + resolved_wild_out->len = sizeof(struct sockaddr_in); } -void grpc_sockaddr_make_wildcard6(int port, struct sockaddr_in6 *wild_out) { +void grpc_sockaddr_make_wildcard6(int port, grpc_resolved_address *resolved_wild_out) { + struct sockaddr_in6 *wild_out = (struct sockaddr_in6 *)resolved_wild_out->addr; GPR_ASSERT(port >= 0 && port < 65536); - memset(wild_out, 0, sizeof(*wild_out)); + memset(resolved_wild_out, 0, sizeof(*resolved_wild_out)); wild_out->sin6_family = AF_INET6; wild_out->sin6_port = htons((uint16_t)port); + resolved_wild_out->len = sizeof(struct sockaddr_in6); } -int grpc_sockaddr_to_string(char **out, const struct sockaddr *addr, +int grpc_sockaddr_to_string(char **out, const grpc_resolved_address *resolved_addr, int normalize) { + const struct sockaddr *addr; const int save_errno = errno; - struct sockaddr_in addr_normalized; + grpc_resolved_address addr_normalized; char ntop_buf[INET6_ADDRSTRLEN]; const void *ip = NULL; int port; int ret; *out = NULL; - if (normalize && grpc_sockaddr_is_v4mapped(addr, &addr_normalized)) { - addr = (const struct sockaddr *)&addr_normalized; + if (normalize && grpc_sockaddr_is_v4mapped(resolved_addr, &addr_normalized)) { + resolved_addr = &addr_normalized; } + addr = (const struct sockaddr *)resolved_addr->addr; if (addr->sa_family == AF_INET) { const struct sockaddr_in *addr4 = (const struct sockaddr_in *)addr; ip = &addr4->sin_addr; @@ -167,39 +182,43 @@ int grpc_sockaddr_to_string(char **out, const struct sockaddr *addr, return ret; } -char *grpc_sockaddr_to_uri(const struct sockaddr *addr) { +char *grpc_sockaddr_to_uri(const grpc_resolved_address *resolved_addr) { char *temp; char *result; - struct sockaddr_in addr_normalized; + grpc_resolved_address addr_normalized; + const struct sockaddr *addr; - if (grpc_sockaddr_is_v4mapped(addr, &addr_normalized)) { - addr = (const struct sockaddr *)&addr_normalized; + if (grpc_sockaddr_is_v4mapped(resolved_addr, &addr_normalized)) { + resolved_addr = &addr_normalized; } + addr = (const struct sockaddr *)resolved_addr->addr; + switch (addr->sa_family) { case AF_INET: - grpc_sockaddr_to_string(&temp, addr, 0); + grpc_sockaddr_to_string(&temp, resolved_addr, 0); gpr_asprintf(&result, "ipv4:%s", temp); gpr_free(temp); return result; case AF_INET6: - grpc_sockaddr_to_string(&temp, addr, 0); + grpc_sockaddr_to_string(&temp, resolved_addr, 0); gpr_asprintf(&result, "ipv6:%s", temp); gpr_free(temp); return result; default: - return grpc_sockaddr_to_uri_unix_if_possible(addr); + return grpc_sockaddr_to_uri_unix_if_possible(resolved_addr); } } -int grpc_sockaddr_get_port(const struct sockaddr *addr) { +int grpc_sockaddr_get_port(const grpc_resolved_address *resolved_addr) { + const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; switch (addr->sa_family) { case AF_INET: return ntohs(((struct sockaddr_in *)addr)->sin_port); case AF_INET6: return ntohs(((struct sockaddr_in6 *)addr)->sin6_port); default: - if (grpc_is_unix_socket(addr)) { + if (grpc_is_unix_socket(resolved_addr)) { return 1; } gpr_log(GPR_ERROR, "Unknown socket family %d in grpc_sockaddr_get_port", @@ -208,7 +227,8 @@ int grpc_sockaddr_get_port(const struct sockaddr *addr) { } } -int grpc_sockaddr_set_port(const struct sockaddr *addr, int port) { +int grpc_sockaddr_set_port(const grpc_resolved_address *resolved_addr, int port) { + const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; switch (addr->sa_family) { case AF_INET: GPR_ASSERT(port >= 0 && port < 65536); diff --git a/src/core/lib/iomgr/sockaddr_utils.h b/src/core/lib/iomgr/sockaddr_utils.h index 9f81992e6be..5371e360c59 100644 --- a/src/core/lib/iomgr/sockaddr_utils.h +++ b/src/core/lib/iomgr/sockaddr_utils.h @@ -34,40 +34,40 @@ #ifndef GRPC_CORE_LIB_IOMGR_SOCKADDR_UTILS_H #define GRPC_CORE_LIB_IOMGR_SOCKADDR_UTILS_H -#include "src/core/lib/iomgr/sockaddr.h" +#include "src/core/lib/iomgr/resolve_address.h" /* Returns true if addr is an IPv4-mapped IPv6 address within the ::ffff:0.0.0.0/96 range, or false otherwise. If addr4_out is non-NULL, the inner IPv4 address will be copied here when returning true. */ -int grpc_sockaddr_is_v4mapped(const struct sockaddr *addr, - struct sockaddr_in *addr4_out); +int grpc_sockaddr_is_v4mapped(const grpc_resolved_address *addr, + grpc_resolved_address *addr4_out); /* If addr is an AF_INET address, writes the corresponding ::ffff:0.0.0.0/96 address to addr6_out and returns true. Otherwise returns false. */ -int grpc_sockaddr_to_v4mapped(const struct sockaddr *addr, - struct sockaddr_in6 *addr6_out); +int grpc_sockaddr_to_v4mapped(const grpc_resolved_address *addr, + grpc_resolved_address *addr6_out); /* If addr is ::, 0.0.0.0, or ::ffff:0.0.0.0, writes the port number to *port_out (if not NULL) and returns true, otherwise returns false. */ -int grpc_sockaddr_is_wildcard(const struct sockaddr *addr, int *port_out); +int grpc_sockaddr_is_wildcard(const grpc_resolved_address *addr, int *port_out); /* Writes 0.0.0.0:port and [::]:port to separate sockaddrs. */ -void grpc_sockaddr_make_wildcards(int port, struct sockaddr_in *wild4_out, - struct sockaddr_in6 *wild6_out); +void grpc_sockaddr_make_wildcards(int port, grpc_resolved_address *wild4_out, + grpc_resolved_address *wild6_out); /* Writes 0.0.0.0:port. */ -void grpc_sockaddr_make_wildcard4(int port, struct sockaddr_in *wild_out); +void grpc_sockaddr_make_wildcard4(int port, grpc_resolved_address *wild_out); /* Writes [::]:port. */ -void grpc_sockaddr_make_wildcard6(int port, struct sockaddr_in6 *wild_out); +void grpc_sockaddr_make_wildcard6(int port, grpc_resolved_address *wild_out); /* Return the IP port number of a sockaddr */ -int grpc_sockaddr_get_port(const struct sockaddr *addr); +int grpc_sockaddr_get_port(const grpc_resolved_address *addr); /* Set IP port number of a sockaddr */ -int grpc_sockaddr_set_port(const struct sockaddr *addr, int port); +int grpc_sockaddr_set_port(const grpc_resolved_address *addr, int port); /* Converts a sockaddr into a newly-allocated human-readable string. @@ -81,9 +81,9 @@ int grpc_sockaddr_set_port(const struct sockaddr *addr, int port); In the unlikely event of an error, returns -1 and sets *out to NULL. The existing value of errno is always preserved. */ -int grpc_sockaddr_to_string(char **out, const struct sockaddr *addr, +int grpc_sockaddr_to_string(char **out, const grpc_resolved_address *addr, int normalize); -char *grpc_sockaddr_to_uri(const struct sockaddr *addr); +char *grpc_sockaddr_to_uri(const grpc_resolved_address *addr); #endif /* GRPC_CORE_LIB_IOMGR_SOCKADDR_UTILS_H */ diff --git a/src/core/lib/iomgr/socket_utils.h b/src/core/lib/iomgr/socket_utils.h index b01197ad18c..cc3ee2e30cd 100644 --- a/src/core/lib/iomgr/socket_utils.h +++ b/src/core/lib/iomgr/socket_utils.h @@ -34,17 +34,9 @@ #ifndef GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H #define GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H -#include "src/core/lib/iomgr/port.h" - -#if defined(GRPC_WINSOCK_SOCKET) -#include "src/core/lib/iomgr/sockaddr_windows.h" -#elif defined(GRPC_POSIX_SOCKET) -#include "src/core/lib/iomgr/sockaddr_posix.h" -#elif defined(GRPC_UV) -#include -#endif +#include /* A wrapper for inet_ntop on POSIX systems and InetNtop on Windows systems */ -const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size); +const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size); #endif /* GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H */ diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index aa844da0784..239b9b8876e 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -254,7 +254,7 @@ static int set_socket_dualstack(int fd) { } } -static grpc_error *error_for_fd(int fd, const struct sockaddr *addr) { +static grpc_error *error_for_fd(int fd, const grpc_resolved_address *addr) { if (fd >= 0) return GRPC_ERROR_NONE; char *addr_str; grpc_sockaddr_to_string(&addr_str, addr, 0); @@ -264,10 +264,12 @@ static grpc_error *error_for_fd(int fd, const struct sockaddr *addr) { return err; } -grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, +grpc_error *grpc_create_dualstack_socket(const grpc_resolved_address *resolved_addr, + int type, int protocol, grpc_dualstack_mode *dsmode, int *newfd) { + const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; int family = addr->sa_family; if (family == AF_INET6) { if (grpc_ipv6_loopback_available()) { @@ -282,9 +284,9 @@ grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, return GRPC_ERROR_NONE; } /* If this isn't an IPv4 address, then return whatever we've got. */ - if (!grpc_sockaddr_is_v4mapped(addr, NULL)) { + if (!grpc_sockaddr_is_v4mapped(resolved_addr, NULL)) { *dsmode = GRPC_DSMODE_IPV6; - return error_for_fd(*newfd, addr); + return error_for_fd(*newfd, resolved_addr); } /* Fall back to AF_INET. */ if (*newfd >= 0) { @@ -294,11 +296,12 @@ grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, } *dsmode = family == AF_INET ? GRPC_DSMODE_IPV4 : GRPC_DSMODE_NONE; *newfd = socket(family, type, protocol); - return error_for_fd(*newfd, addr); + return error_for_fd(*newfd, resolved_addr); } -const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size) { - return inet_ntop(af, src, dst, size); +const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size) { + GPR_ASSERT(size <= (socklen_t)-1); + return inet_ntop(af, src, dst, (socklen_t)size); } #endif diff --git a/src/core/lib/iomgr/socket_utils_linux.c b/src/core/lib/iomgr/socket_utils_linux.c index 3ebc3f1ac1c..627b9d6f9c1 100644 --- a/src/core/lib/iomgr/socket_utils_linux.c +++ b/src/core/lib/iomgr/socket_utils_linux.c @@ -35,17 +35,22 @@ #ifdef GRPC_LINUX_SOCKETUTILS +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/socket_utils_posix.h" +#include + #include #include -int grpc_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, +int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock, int cloexec) { int flags = 0; + GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); + GPR_ASSERT(resolved_addr->len <= (socklen_t)-1); flags |= nonblock ? SOCK_NONBLOCK : 0; flags |= cloexec ? SOCK_CLOEXEC : 0; - return accept4(sockfd, addr, addrlen, flags); + return accept4(sockfd, (struct sockaddr *)resolved_addr->addr, (socklen_t *)&resolved_addr->len, flags); } #endif diff --git a/src/core/lib/iomgr/socket_utils_posix.c b/src/core/lib/iomgr/socket_utils_posix.c index 4f26773342a..0f2622eed6d 100644 --- a/src/core/lib/iomgr/socket_utils_posix.c +++ b/src/core/lib/iomgr/socket_utils_posix.c @@ -42,12 +42,14 @@ #include #include +#include "src/core/lib/iomgr/sockaddr.h" -int grpc_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, +int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock, int cloexec) { int fd, flags; - - fd = accept(sockfd, addr, addrlen); + GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); + GPR_ASSERT(resolved_addr->len <= (socklen_t)-1); + fd = accept(sockfd, (struct sockaddr *)resolved_addr->addr, (socklen_t)resolved_addr->len); if (fd >= 0) { if (nonblock) { flags = fcntl(fd, F_GETFL, 0); diff --git a/src/core/lib/iomgr/socket_utils_posix.h b/src/core/lib/iomgr/socket_utils_posix.h index 7bcc2219aea..432cba452da 100644 --- a/src/core/lib/iomgr/socket_utils_posix.h +++ b/src/core/lib/iomgr/socket_utils_posix.h @@ -34,13 +34,15 @@ #ifndef GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_POSIX_H #define GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_POSIX_H +#include "src/core/lib/iomgr/resolve_address.h" + #include #include #include "src/core/lib/iomgr/error.h" /* a wrapper for accept or accept4 */ -int grpc_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, +int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock, int cloexec); /* set a socket to non blocking mode */ @@ -125,7 +127,7 @@ extern int grpc_forbid_dualstack_sockets_for_testing; IPv4, so that bind() or connect() see the correct family. Also, it's important to distinguish between DUALSTACK and IPV6 when listening on the [::] wildcard address. */ -grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, +grpc_error *grpc_create_dualstack_socket(const grpc_resolved_address *addr, int type, int protocol, grpc_dualstack_mode *dsmode, int *newfd); diff --git a/src/core/lib/iomgr/socket_utils_uv.c b/src/core/lib/iomgr/socket_utils_uv.c index 7f61384e741..741bf28969d 100644 --- a/src/core/lib/iomgr/socket_utils_uv.c +++ b/src/core/lib/iomgr/socket_utils_uv.c @@ -41,9 +41,8 @@ #include -const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size) { - GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); - uv_inet_ntop(af, src, dst, (size_t)size); +const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size) { + uv_inet_ntop(af, src, dst, size); return dst; } diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c index 09dabd7a730..628ad4a45be 100644 --- a/src/core/lib/iomgr/socket_utils_windows.c +++ b/src/core/lib/iomgr/socket_utils_windows.c @@ -35,14 +35,14 @@ #ifdef GRPC_WINDOWS_SOCKETUTILS +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/socket_utils.h" #include -const char *grpc_inet_ntop(int af, const void *src, char *dst, socklen_t size) { - GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); +const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size) { /* Windows InetNtopA wants a mutable ip pointer */ - return InetNtopA(af, (void *)src, dst, (size_t)size); + return InetNtopA(af, (void *)src, dst, size); } #endif /* GRPC_WINDOWS_SOCKETUTILS */ diff --git a/src/core/lib/iomgr/tcp_client.h b/src/core/lib/iomgr/tcp_client.h index a07e0b9f0cb..83e69003f55 100644 --- a/src/core/lib/iomgr/tcp_client.h +++ b/src/core/lib/iomgr/tcp_client.h @@ -37,6 +37,7 @@ #include #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/pollset_set.h" +#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/sockaddr.h" /* Asynchronously connect to an address (specified as (addr, len)), and call @@ -47,7 +48,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_connect, grpc_endpoint **endpoint, grpc_pollset_set *interested_parties, - const struct sockaddr *addr, size_t addr_len, + const grpc_resolved_address *addr, gpr_timespec deadline); #endif /* GRPC_CORE_LIB_IOMGR_TCP_CLIENT_H */ diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 4c1dcd671fa..eda3279659d 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -71,7 +71,7 @@ typedef struct { grpc_closure *closure; } async_connect; -static grpc_error *prepare_socket(const struct sockaddr *addr, int fd) { +static grpc_error *prepare_socket(const grpc_resolved_address *addr, int fd) { grpc_error *err = GRPC_ERROR_NONE; GPR_ASSERT(fd >= 0); @@ -227,14 +227,14 @@ finish: static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, - const struct sockaddr *addr, - size_t addr_len, gpr_timespec deadline) { + const grpc_resolved_address *addr, + gpr_timespec deadline) { int fd; grpc_dualstack_mode dsmode; int err; async_connect *ac; - struct sockaddr_in6 addr6_v4mapped; - struct sockaddr_in addr4_copy; + grpc_resolved_address addr6_v4mapped; + grpc_resolved_address addr4_copy; grpc_fd *fdobj; char *name; char *addr_str; @@ -244,8 +244,7 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, /* Use dualstack sockets where available. */ if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) { - addr = (const struct sockaddr *)&addr6_v4mapped; - addr_len = sizeof(addr6_v4mapped); + addr = &addr6_v4mapped; } error = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd); @@ -256,8 +255,7 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, if (dsmode == GRPC_DSMODE_IPV4) { /* If we got an AF_INET socket, map the address back to IPv4. */ GPR_ASSERT(grpc_sockaddr_is_v4mapped(addr, &addr4_copy)); - addr = (struct sockaddr *)&addr4_copy; - addr_len = sizeof(addr4_copy); + addr = &addr4_copy; } if ((error = prepare_socket(addr, fd)) != GRPC_ERROR_NONE) { grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); @@ -265,8 +263,8 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, } do { - GPR_ASSERT(addr_len < ~(socklen_t)0); - err = connect(fd, addr, (socklen_t)addr_len); + GPR_ASSERT(addr->len < ~(socklen_t)0); + err = connect(fd, (const struct sockaddr *)addr->addr, (socklen_t)addr->len); } while (err < 0 && errno == EINTR); addr_str = grpc_sockaddr_to_uri(addr); @@ -321,16 +319,16 @@ done: // overridden by api_fuzzer.c void (*grpc_tcp_client_connect_impl)( grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, const struct sockaddr *addr, - size_t addr_len, gpr_timespec deadline) = tcp_client_connect_impl; + grpc_pollset_set *interested_parties, const grpc_resolved_address *addr, + gpr_timespec deadline) = tcp_client_connect_impl; void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, - const struct sockaddr *addr, size_t addr_len, + const grpc_resolved_address *addr, gpr_timespec deadline) { grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties, addr, - addr_len, deadline); + deadline); } #endif diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c index 7823a1d873b..bed64ebe0b0 100644 --- a/src/core/lib/iomgr/tcp_client_uv.c +++ b/src/core/lib/iomgr/tcp_client_uv.c @@ -118,8 +118,8 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) { void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, - const struct sockaddr *addr, - size_t addr_len, gpr_timespec deadline) { + const grpc_resolved_address *resolved_addr, + gpr_timespec deadline) { grpc_uv_tcp_connect *connect; (void)interested_parties; connect = gpr_malloc(sizeof(grpc_uv_tcp_connect)); @@ -128,11 +128,12 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, connect->endpoint = ep; connect->tcp_handle = gpr_malloc(sizeof(uv_tcp_t)); gpr_log(GPR_DEBUG, "Allocated uv_tcp_t handle %p", connect->tcp_handle); - connect->addr_name = grpc_sockaddr_to_uri(addr); + connect->addr_name = grpc_sockaddr_to_uri(resolved_addr); uv_tcp_init(uv_default_loop(), connect->tcp_handle); connect->connect_req.data = connect; // TODO(murgatroid99): figure out what the return value here means - uv_tcp_connect(&connect->connect_req, connect->tcp_handle, addr, + uv_tcp_connect(&connect->connect_req, connect->tcp_handle, + (const struct sockaddr *)resolved_addr->addr, uv_tc_on_connect); grpc_timer_init(exec_ctx, &connect->alarm, gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC), diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index 29775cce215..c987a3c0c50 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -129,13 +129,13 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_endpoint **endpoint, grpc_pollset_set *interested_parties, - const struct sockaddr *addr, size_t addr_len, + const grpc_resolved_address *addr, gpr_timespec deadline) { SOCKET sock = INVALID_SOCKET; BOOL success; int status; - struct sockaddr_in6 addr6_v4mapped; - struct sockaddr_in6 local_address; + grpc_resolved_address addr6_v4mapped; + grpc_resolved_address local_address; async_connect *ac; grpc_winsocket *socket = NULL; LPFN_CONNECTEX ConnectEx; @@ -148,8 +148,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, /* Use dualstack sockets where available. */ if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) { - addr = (const struct sockaddr *)&addr6_v4mapped; - addr_len = sizeof(addr6_v4mapped); + addr = &addr6_v4mapped; } sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0, @@ -178,7 +177,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_sockaddr_make_wildcard6(0, &local_address); - status = bind(sock, (struct sockaddr *)&local_address, sizeof(local_address)); + status = bind(sock, (struct sockaddr *)&local_address.addr, local_address.len); if (status != 0) { error = GRPC_WSA_ERROR(WSAGetLastError(), "bind"); goto failure; @@ -187,7 +186,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, socket = grpc_winsocket_create(sock, "client"); info = &socket->write_info; success = - ConnectEx(sock, addr, (int)addr_len, NULL, 0, NULL, &info->overlapped); + ConnectEx(sock, (struct sockaddr *)&addr->addr, (int)addr->len, NULL, 0, NULL, &info->overlapped); /* It wouldn't be unusual to get a success immediately. But we'll still get an IOCP notification, so let's ignore it. */ diff --git a/src/core/lib/iomgr/tcp_server.h b/src/core/lib/iomgr/tcp_server.h index 5a25d39a0c4..20495e8a77b 100644 --- a/src/core/lib/iomgr/tcp_server.h +++ b/src/core/lib/iomgr/tcp_server.h @@ -38,6 +38,7 @@ #include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/endpoint.h" +#include "src/core/lib/iomgr/resolve_address.h" /* Forward decl of grpc_tcp_server */ typedef struct grpc_tcp_server grpc_tcp_server; @@ -78,8 +79,9 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *server, but not dualstack sockets. */ /* TODO(ctiller): deprecate this, and make grpc_tcp_server_add_ports to handle all of the multiple socket port matching logic in one place */ -grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, - size_t addr_len, int *out_port); +grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, + const grpc_resolved_address *addr, + int *out_port); /* Number of fds at the given port_index, or 0 if port_index is out of bounds. */ diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index c1254d49d30..6ef7a719c42 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -62,6 +62,7 @@ #include #include "src/core/lib/iomgr/resolve_address.h" +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/socket_utils_posix.h" #include "src/core/lib/iomgr/tcp_posix.h" @@ -79,11 +80,14 @@ struct grpc_tcp_listener { int fd; grpc_fd *emfd; grpc_tcp_server *server; + grpc_resolved_address addr; + /* union { uint8_t untyped[GRPC_MAX_SOCKADDR_SIZE]; struct sockaddr sockaddr; } addr; size_t addr_len; + */ int port; unsigned port_index; unsigned fd_index; @@ -235,7 +239,7 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { if (s->head) { grpc_tcp_listener *sp; for (sp = s->head; sp; sp = sp->next) { - grpc_unlink_if_unix_domain_socket(&sp->addr.sockaddr); + grpc_unlink_if_unix_domain_socket(&sp->addr); sp->destroyed_closure.cb = destroyed_port; sp->destroyed_closure.cb_arg = s; grpc_fd_orphan(exec_ctx, sp->emfd, &sp->destroyed_closure, NULL, @@ -301,11 +305,9 @@ static int get_max_accept_queue_size(void) { } /* Prepare a recently-created socket for listening. */ -static grpc_error *prepare_socket(int fd, const struct sockaddr *addr, - size_t addr_len, bool so_reuseport, - int *port) { - struct sockaddr_storage sockname_temp; - socklen_t sockname_len; +static grpc_error *prepare_socket(int fd, const grpc_resolved_address *addr, + bool so_reuseport, int *port) { + grpc_resolved_address sockname_temp; grpc_error *err = GRPC_ERROR_NONE; GPR_ASSERT(fd >= 0); @@ -328,8 +330,8 @@ static grpc_error *prepare_socket(int fd, const struct sockaddr *addr, err = grpc_set_socket_no_sigpipe_if_possible(fd); if (err != GRPC_ERROR_NONE) goto error; - GPR_ASSERT(addr_len < ~(socklen_t)0); - if (bind(fd, addr, (socklen_t)addr_len) < 0) { + GPR_ASSERT(addr->len < ~(socklen_t)0); + if (bind(fd, (struct sockaddr *)addr->addr, (socklen_t)addr->len) < 0) { err = GRPC_OS_ERROR(errno, "bind"); goto error; } @@ -339,13 +341,14 @@ static grpc_error *prepare_socket(int fd, const struct sockaddr *addr, goto error; } - sockname_len = sizeof(sockname_temp); - if (getsockname(fd, (struct sockaddr *)&sockname_temp, &sockname_len) < 0) { + sockname_temp.len = sizeof(struct sockaddr_storage); + + if (getsockname(fd, (struct sockaddr *)sockname_temp.addr, (socklen_t *)&sockname_temp.len) < 0) { err = GRPC_OS_ERROR(errno, "getsockname"); goto error; } - *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + *port = grpc_sockaddr_get_port(&sockname_temp); return GRPC_ERROR_NONE; error: @@ -379,13 +382,13 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) { /* loop until accept4 returns EAGAIN, and then re-arm notification */ for (;;) { - struct sockaddr_storage addr; - socklen_t addrlen = sizeof(addr); + grpc_resolved_address addr; char *addr_str; char *name; + addr.len = sizeof(struct sockaddr_storage); /* Note: If we ever decide to return this address to the user, remember to strip off the ::ffff:0.0.0.0/96 prefix first. */ - int fd = grpc_accept4(sp->fd, (struct sockaddr *)&addr, &addrlen, 1, 1); + int fd = grpc_accept4(sp->fd, &addr, 1, 1); if (fd < 0) { switch (errno) { case EINTR: @@ -401,7 +404,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) { grpc_set_socket_no_sigpipe_if_possible(fd); - addr_str = grpc_sockaddr_to_uri((struct sockaddr *)&addr); + addr_str = grpc_sockaddr_to_uri(&addr); gpr_asprintf(&name, "tcp-server-connection:%s", addr_str); if (grpc_tcp_trace) { @@ -439,8 +442,8 @@ error: } static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd, - const struct sockaddr *addr, - size_t addr_len, unsigned port_index, + const grpc_resolved_address *addr, + unsigned port_index, unsigned fd_index, grpc_tcp_listener **listener) { grpc_tcp_listener *sp = NULL; @@ -448,10 +451,10 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd, char *addr_str; char *name; - grpc_error *err = prepare_socket(fd, addr, addr_len, s->so_reuseport, &port); + grpc_error *err = prepare_socket(fd, addr, s->so_reuseport, &port); if (err == GRPC_ERROR_NONE) { GPR_ASSERT(port > 0); - grpc_sockaddr_to_string(&addr_str, (struct sockaddr *)&addr, 1); + grpc_sockaddr_to_string(&addr_str, addr, 1); gpr_asprintf(&name, "tcp-server-listener:%s", addr_str); gpr_mu_lock(&s->mu); s->nports++; @@ -467,8 +470,7 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd, sp->server = s; sp->fd = fd; sp->emfd = grpc_fd_create(fd, name); - memcpy(sp->addr.untyped, addr, addr_len); - sp->addr_len = addr_len; + memcpy(&sp->addr, addr, sizeof(grpc_resolved_address)); sp->port = port; sp->port_index = port_index; sp->fd_index = fd_index; @@ -501,14 +503,13 @@ static grpc_error *clone_port(grpc_tcp_listener *listener, unsigned count) { int fd = -1; int port = -1; grpc_dualstack_mode dsmode; - err = grpc_create_dualstack_socket(&listener->addr.sockaddr, SOCK_STREAM, 0, + err = grpc_create_dualstack_socket(&listener->addr, SOCK_STREAM, 0, &dsmode, &fd); if (err != GRPC_ERROR_NONE) return err; - err = prepare_socket(fd, &listener->addr.sockaddr, listener->addr_len, true, - &port); + err = prepare_socket(fd, &listener->addr, true, &port); if (err != GRPC_ERROR_NONE) return err; listener->server->nports++; - grpc_sockaddr_to_string(&addr_str, &listener->addr.sockaddr, 1); + grpc_sockaddr_to_string(&addr_str, &listener->addr, 1); gpr_asprintf(&name, "tcp-server-listener:%s/clone-%d", addr_str, i); sp = gpr_malloc(sizeof(grpc_tcp_listener)); sp->next = listener->next; @@ -521,8 +522,7 @@ static grpc_error *clone_port(grpc_tcp_listener *listener, unsigned count) { sp->server = listener->server; sp->fd = fd; sp->emfd = grpc_fd_create(fd, name); - memcpy(sp->addr.untyped, listener->addr.untyped, listener->addr_len); - sp->addr_len = listener->addr_len; + memcpy(&sp->addr, &listener->addr, sizeof(grpc_resolved_address)); sp->port = port; sp->port_index = listener->port_index; sp->fd_index = listener->fd_index + count - i; @@ -537,19 +537,19 @@ static grpc_error *clone_port(grpc_tcp_listener *listener, unsigned count) { return GRPC_ERROR_NONE; } -grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, - size_t addr_len, int *out_port) { +grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, + const grpc_resolved_address *addr, + int *out_port) { grpc_tcp_listener *sp; grpc_tcp_listener *sp2 = NULL; int fd; grpc_dualstack_mode dsmode; - struct sockaddr_in6 addr6_v4mapped; - struct sockaddr_in wild4; - struct sockaddr_in6 wild6; - struct sockaddr_in addr4_copy; - struct sockaddr *allocated_addr = NULL; - struct sockaddr_storage sockname_temp; - socklen_t sockname_len; + grpc_resolved_address addr6_v4mapped; + grpc_resolved_address wild4; + grpc_resolved_address wild6; + grpc_resolved_address addr4_copy; + grpc_resolved_address *allocated_addr = NULL; + grpc_resolved_address sockname_temp; int port; unsigned port_index = 0; unsigned fd_index = 0; @@ -557,19 +557,19 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, if (s->tail != NULL) { port_index = s->tail->port_index + 1; } - grpc_unlink_if_unix_domain_socket((struct sockaddr *)addr); + grpc_unlink_if_unix_domain_socket(addr); /* Check if this is a wildcard port, and if so, try to keep the port the same as some previously created listener. */ if (grpc_sockaddr_get_port(addr) == 0) { for (sp = s->head; sp; sp = sp->next) { - sockname_len = sizeof(sockname_temp); - if (0 == getsockname(sp->fd, (struct sockaddr *)&sockname_temp, - &sockname_len)) { - port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + sockname_temp.len = sizeof(struct sockaddr_storage); + if (0 == getsockname(sp->fd, (struct sockaddr *)sockname_temp.addr, + (socklen_t *)&sockname_temp.len)) { + port = grpc_sockaddr_get_port(&sockname_temp); if (port > 0) { - allocated_addr = gpr_malloc(addr_len); - memcpy(allocated_addr, addr, addr_len); + allocated_addr = gpr_malloc(sizeof(grpc_resolved_address)); + memcpy(allocated_addr, addr, addr->len); grpc_sockaddr_set_port(allocated_addr, port); addr = allocated_addr; break; @@ -581,8 +581,7 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, sp = NULL; if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) { - addr = (const struct sockaddr *)&addr6_v4mapped; - addr_len = sizeof(addr6_v4mapped); + addr = &addr6_v4mapped; } /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */ @@ -590,12 +589,10 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, grpc_sockaddr_make_wildcards(port, &wild4, &wild6); /* Try listening on IPv6 first. */ - addr = (struct sockaddr *)&wild6; - addr_len = sizeof(wild6); + addr = &wild6; errs[0] = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd); if (errs[0] == GRPC_ERROR_NONE) { - errs[0] = add_socket_to_server(s, fd, addr, addr_len, port_index, - fd_index, &sp); + errs[0] = add_socket_to_server(s, fd, addr, port_index, fd_index, &sp); if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) { goto done; } @@ -604,23 +601,20 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, } /* If we didn't get a dualstack socket, also listen on 0.0.0.0. */ if (port == 0 && sp != NULL) { - grpc_sockaddr_set_port((struct sockaddr *)&wild4, sp->port); + grpc_sockaddr_set_port(&wild4, sp->port); } } - addr = (struct sockaddr *)&wild4; - addr_len = sizeof(wild4); + addr = &wild4; } errs[1] = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd); if (errs[1] == GRPC_ERROR_NONE) { if (dsmode == GRPC_DSMODE_IPV4 && grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) { - addr = (struct sockaddr *)&addr4_copy; - addr_len = sizeof(addr4_copy); + addr = &addr4_copy; } sp2 = sp; - errs[1] = - add_socket_to_server(s, fd, addr, addr_len, port_index, fd_index, &sp); + errs[1] = add_socket_to_server(s, fd, addr, port_index, fd_index, &sp); if (sp2 != NULL && sp != NULL) { sp2->sibling = sp; sp->is_sibling = 1; @@ -695,7 +689,7 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s, s->pollset_count = pollset_count; sp = s->head; while (sp != NULL) { - if (s->so_reuseport && !grpc_is_unix_socket(&sp->addr.sockaddr) && + if (s->so_reuseport && !grpc_is_unix_socket(&sp->addr) && pollset_count > 1) { GPR_ASSERT(GRPC_LOG_IF_ERROR( "clone_port", clone_port(sp, (unsigned)(pollset_count - 1)))); diff --git a/src/core/lib/iomgr/tcp_server_uv.c b/src/core/lib/iomgr/tcp_server_uv.c index b69e70881f6..2d57715ba28 100644 --- a/src/core/lib/iomgr/tcp_server_uv.c +++ b/src/core/lib/iomgr/tcp_server_uv.c @@ -42,6 +42,7 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/tcp_server.h" #include "src/core/lib/iomgr/tcp_uv.h" @@ -171,8 +172,7 @@ static void on_connect(uv_stream_t *server, int status) { uv_tcp_t *client; grpc_endpoint *ep = NULL; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - struct sockaddr_storage peer_name; - int peer_name_len = sizeof(peer_name); + grpc_resolved_address peer_name; char *peer_name_string; int err; @@ -189,10 +189,12 @@ static void on_connect(uv_stream_t *server, int status) { // UV documentation says this is guaranteed to succeed uv_accept((uv_stream_t *)server, (uv_stream_t *)client); peer_name_string = NULL; - err = uv_tcp_getpeername(client, (struct sockaddr *)&peer_name, - &peer_name_len); + memset(&peer_name, 0, sizeof(grpc_resolved_address)); + peer_name.len = sizeof(struct sockaddr_storage); + err = uv_tcp_getpeername(client, (struct sockaddr *)&peer_name.addr, + (int*)&peer_name.len); if (err == 0) { - peer_name_string = grpc_sockaddr_to_uri((struct sockaddr *)&peer_name); + peer_name_string = grpc_sockaddr_to_uri(&peer_name); } else { gpr_log(GPR_INFO, "uv_tcp_getpeername error: %s", uv_strerror(status)); @@ -206,18 +208,17 @@ static void on_connect(uv_stream_t *server, int status) { static grpc_error *add_socket_to_server(grpc_tcp_server *s, uv_tcp_t *handle, - struct sockaddr *addr, - size_t addr_len, unsigned port_index, + const grpc_resolved_address *addr, + unsigned port_index, grpc_tcp_listener **listener) { grpc_tcp_listener *sp = NULL; int port = -1; int status; grpc_error *error; - struct sockaddr_storage sockname_temp; - int sockname_len; + grpc_resolved_address sockname_temp; // The last argument to uv_tcp_bind is flags - status = uv_tcp_bind(handle, addr, 0); + status = uv_tcp_bind(handle, (struct sockaddr *)addr->addr, 0); if (status != 0) { error = GRPC_ERROR_CREATE("Failed to bind to port"); error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, @@ -225,9 +226,9 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, return error; } - sockname_len = (int)sizeof(sockname_temp); - status = uv_tcp_getsockname(handle, (struct sockaddr *)&sockname_temp, - &sockname_len); + sockname_temp.len = (int)sizeof(struct sockaddr_storage); + status = uv_tcp_getsockname(handle, (struct sockaddr *)&sockname_temp.addr, + (int *)&sockname_temp.len); if (status != 0) { error = GRPC_ERROR_CREATE("getsockname failed"); error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, @@ -235,7 +236,7 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, return error; } - port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + port = grpc_sockaddr_get_port(&sockname_temp); GPR_ASSERT(port >= 0); GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server"); @@ -259,16 +260,16 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, return GRPC_ERROR_NONE; } -grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, - size_t addr_len, int *port) { +grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, + const grpc_resolved_address *addr, + int *port) { // This function is mostly copied from tcp_server_windows.c grpc_tcp_listener *sp = NULL; uv_tcp_t *handle; - struct sockaddr_in6 addr6_v4mapped; - struct sockaddr_in6 wildcard; - struct sockaddr *allocated_addr = NULL; - struct sockaddr_storage sockname_temp; - int sockname_len; + grpc_resolved_address addr6_v4mapped; + grpc_resolved_address wildcard; + grpc_resolved_address *allocated_addr = NULL; + grpc_resolved_address sockname_temp; unsigned port_index = 0; int status; grpc_error *error = GRPC_ERROR_NONE; @@ -281,13 +282,13 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, as some previously created listener. */ if (grpc_sockaddr_get_port(addr) == 0) { for (sp = s->head; sp; sp = sp->next) { - sockname_len = sizeof(sockname_temp); - if (0 == uv_tcp_getsockname(sp->handle, (struct sockaddr *)&sockname_temp, - &sockname_len)) { - *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + sockname_temp.len = sizeof(struct sockaddr_storage); + if (0 == uv_tcp_getsockname(sp->handle, (struct sockaddr *)&sockname_temp.addr, + (int *)&sockname_temp.len)) { + *port = grpc_sockaddr_get_port(&sockname_temp); if (*port > 0) { - allocated_addr = gpr_malloc(addr_len); - memcpy(allocated_addr, addr, addr_len); + allocated_addr = gpr_malloc(sizeof(grpc_resolved_address)); + memcpy(allocated_addr, addr, sizeof(grpc_resolved_address)); grpc_sockaddr_set_port(allocated_addr, *port); addr = allocated_addr; break; @@ -297,24 +298,21 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, } if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) { - addr = (const struct sockaddr *)&addr6_v4mapped; - addr_len = sizeof(addr6_v4mapped); + addr = &addr6_v4mapped; } /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */ if (grpc_sockaddr_is_wildcard(addr, port)) { grpc_sockaddr_make_wildcard6(*port, &wildcard); - addr = (struct sockaddr *)&wildcard; - addr_len = sizeof(wildcard); + addr = &wildcard; } handle = gpr_malloc(sizeof(uv_tcp_t)); gpr_log(GPR_DEBUG, "Allocating uv_tcp_t handle %p", handle); status = uv_tcp_init(uv_default_loop(), handle); if (status == 0) { - error = add_socket_to_server(s, handle, (struct sockaddr *)addr, addr_len, - port_index, &sp); + error = add_socket_to_server(s, handle, addr, port_index, &sp); } else { error = GRPC_ERROR_CREATE("Failed to initialize UV tcp handle"); error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, diff --git a/src/core/lib/iomgr/timer_uv.c b/src/core/lib/iomgr/timer_uv.c index ffeb08cb79e..d280c8b2c87 100644 --- a/src/core/lib/iomgr/timer_uv.c +++ b/src/core/lib/iomgr/timer_uv.c @@ -68,6 +68,7 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer, gpr_timespec deadline, grpc_iomgr_cb_func timer_cb, void *timer_cb_arg, gpr_timespec now) { uint64_t timeout; + uv_timer_t *uv_timer; grpc_closure_init(&timer->closure, timer_cb, timer_cb_arg); if (gpr_time_cmp(deadline, now) <= 0) { timer->triggered = 1; @@ -77,10 +78,11 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer, timer->triggered = 0; timeout = (uint64_t)gpr_time_to_millis(gpr_time_sub(deadline, now)); gpr_log(GPR_DEBUG, "Setting timer %p: %lu", timer, timeout); - timer->uv_timer = gpr_malloc(sizeof(uv_timer_t)); - uv_timer_init(uv_default_loop(), timer->uv_timer); - timer->uv_timer->data = timer; - uv_timer_start(timer->uv_timer, run_expired_timer, timeout, 0); + uv_timer = gpr_malloc(sizeof(uv_timer_t)); + uv_timer_init(uv_default_loop(), uv_timer); + uv_timer->data = timer; + timer->uv_timer = uv_timer; + uv_timer_start(uv_timer, run_expired_timer, timeout, 0); } void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) { @@ -88,7 +90,7 @@ void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) { gpr_log(GPR_DEBUG, "Running cancelled timer callback"); timer->triggered = 1; grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_CANCELLED, NULL); - stop_uv_timer(timer->uv_timer); + stop_uv_timer((uv_timer_t*)timer->uv_timer); } } diff --git a/src/core/lib/iomgr/timer_uv.h b/src/core/lib/iomgr/timer_uv.h index d78d6a6ca2f..b64291b036d 100644 --- a/src/core/lib/iomgr/timer_uv.h +++ b/src/core/lib/iomgr/timer_uv.h @@ -34,13 +34,13 @@ #ifndef GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H #define GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H -#include - #include "src/core/lib/iomgr/exec_ctx.h" struct grpc_timer { grpc_closure closure; - uv_timer_t *uv_timer; + /* This is actually a uv_timer_t*, but we want to keep platform-specific + types out of headers */ + void *uv_timer; int triggered; }; diff --git a/src/core/lib/iomgr/unix_sockets_posix.c b/src/core/lib/iomgr/unix_sockets_posix.c index 33082a2e998..830a0c96ffe 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.c +++ b/src/core/lib/iomgr/unix_sockets_posix.c @@ -34,6 +34,8 @@ #ifdef GRPC_HAVE_UNIX_SOCKET +#include "src/core/lib/iomgr/sockaddr.h" + #include #include #include @@ -62,15 +64,17 @@ grpc_error *grpc_resolve_unix_domain_address(const char *name, return GRPC_ERROR_NONE; } -int grpc_is_unix_socket(const struct sockaddr *addr) { +int grpc_is_unix_socket(const grpc_resolved_address *resolved_addr) { + const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; return addr->sa_family == AF_UNIX; } -void grpc_unlink_if_unix_domain_socket(const struct sockaddr *addr) { +void grpc_unlink_if_unix_domain_socket(const grpc_resolved_address *resolved_addr) { + const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; if (addr->sa_family != AF_UNIX) { return; } - struct sockaddr_un *un = (struct sockaddr_un *)addr; + struct sockaddr_un *un = (struct sockaddr_un *)resolved_addr->addr; struct stat st; if (stat(un->sun_path, &st) == 0 && (st.st_mode & S_IFMT) == S_IFSOCK) { @@ -78,13 +82,15 @@ void grpc_unlink_if_unix_domain_socket(const struct sockaddr *addr) { } } -char *grpc_sockaddr_to_uri_unix_if_possible(const struct sockaddr *addr) { +char *grpc_sockaddr_to_uri_unix_if_possible(const grpc_resolved_address *resolved_addr) { + const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; if (addr->sa_family != AF_UNIX) { return NULL; } char *result; - gpr_asprintf(&result, "unix:%s", ((struct sockaddr_un *)addr)->sun_path); + gpr_asprintf(&result, "unix:%s", + ((struct sockaddr_un *)addr)->sun_path); return result; } diff --git a/src/core/lib/iomgr/unix_sockets_posix.h b/src/core/lib/iomgr/unix_sockets_posix.h index 5458f6ab4fa..0ce483119c3 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.h +++ b/src/core/lib/iomgr/unix_sockets_posix.h @@ -39,17 +39,16 @@ #include #include "src/core/lib/iomgr/resolve_address.h" -#include "src/core/lib/iomgr/sockaddr.h" void grpc_create_socketpair_if_unix(int sv[2]); grpc_error *grpc_resolve_unix_domain_address( const char *name, grpc_resolved_addresses **addresses); -int grpc_is_unix_socket(const struct sockaddr *addr); +int grpc_is_unix_socket(const grpc_resolved_address *resolved_addr); -void grpc_unlink_if_unix_domain_socket(const struct sockaddr *addr); +void grpc_unlink_if_unix_domain_socket(const grpc_resolved_address *resolved_addr); -char *grpc_sockaddr_to_uri_unix_if_possible(const struct sockaddr *addr); +char *grpc_sockaddr_to_uri_unix_if_possible(const grpc_resolved_address *resolved_addr); #endif /* GRPC_CORE_LIB_IOMGR_UNIX_SOCKETS_POSIX_H */ diff --git a/src/core/lib/iomgr/unix_sockets_posix_noop.c b/src/core/lib/iomgr/unix_sockets_posix_noop.c index 82f008d599a..1daf5152c17 100644 --- a/src/core/lib/iomgr/unix_sockets_posix_noop.c +++ b/src/core/lib/iomgr/unix_sockets_posix_noop.c @@ -50,11 +50,11 @@ grpc_error *grpc_resolve_unix_domain_address( return GRPC_ERROR_CREATE("Unix domain sockets are not supported on Windows"); } -int grpc_is_unix_socket(const struct sockaddr *addr) { return false; } +int grpc_is_unix_socket(const grpc_resolved_address *addr) { return false; } -void grpc_unlink_if_unix_domain_socket(const struct sockaddr *addr) {} +void grpc_unlink_if_unix_domain_socket(const grpc_resolved_address *addr) {} -char *grpc_sockaddr_to_uri_unix_if_possible(const struct sockaddr *addr) { +char *grpc_sockaddr_to_uri_unix_if_possible(const grpc_resolved_address *addr) { return NULL; } diff --git a/src/core/lib/security/context/security_context.c b/src/core/lib/security/context/security_context.c index 45e259e0ca5..2204fadf54c 100644 --- a/src/core/lib/security/context/security_context.c +++ b/src/core/lib/security/context/security_context.c @@ -31,11 +31,6 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include "src/core/lib/security/context/security_context.h" diff --git a/src/core/lib/security/context/security_context.h b/src/core/lib/security/context/security_context.h index a55153b28c7..1e131a0c230 100644 --- a/src/core/lib/security/context/security_context.h +++ b/src/core/lib/security/context/security_context.h @@ -34,11 +34,6 @@ #ifndef GRPC_CORE_LIB_SECURITY_CONTEXT_SECURITY_CONTEXT_H #define GRPC_CORE_LIB_SECURITY_CONTEXT_SECURITY_CONTEXT_H -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/security/credentials/credentials.h" diff --git a/src/core/lib/security/credentials/credentials.h b/src/core/lib/security/credentials/credentials.h index bfdfcb67611..8e9d842eadd 100644 --- a/src/core/lib/security/credentials/credentials.h +++ b/src/core/lib/security/credentials/credentials.h @@ -34,11 +34,6 @@ #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_CREDENTIALS_H #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_CREDENTIALS_H -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include #include diff --git a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c index e9638c5a229..c22ea5c468b 100644 --- a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +++ b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c @@ -31,11 +31,6 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include "src/core/lib/security/credentials/oauth2/oauth2_credentials.h" #include diff --git a/src/core/lib/security/transport/server_auth_filter.c b/src/core/lib/security/transport/server_auth_filter.c index 34d8a132c51..b2c6815af81 100644 --- a/src/core/lib/security/transport/server_auth_filter.c +++ b/src/core/lib/security/transport/server_auth_filter.c @@ -31,11 +31,6 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include "src/core/lib/security/context/security_context.h" diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c index 65a982266a5..3f093598f9c 100644 --- a/src/core/lib/surface/call.c +++ b/src/core/lib/surface/call.c @@ -31,11 +31,6 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include #include #include diff --git a/src/core/lib/surface/init_secure.c b/src/core/lib/surface/init_secure.c index 9a9342ff2c9..7ee7b51568e 100644 --- a/src/core/lib/surface/init_secure.c +++ b/src/core/lib/surface/init_secure.c @@ -31,11 +31,6 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" - #include "src/core/lib/surface/init.h" #include diff --git a/src/core/lib/tsi/ssl_transport_security.c b/src/core/lib/tsi/ssl_transport_security.c index 116b66a1790..e59b661fa79 100644 --- a/src/core/lib/tsi/ssl_transport_security.c +++ b/src/core/lib/tsi/ssl_transport_security.c @@ -31,10 +31,7 @@ * */ -/* We currently need this at the top of the file if we import some iomgr - headers because if we are building with libuv, those headers will include - uv.h, which needs to be included before other system headers */ -#include "src/core/lib/iomgr/port.h" +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/tsi/ssl_transport_security.h" #include "src/core/lib/iomgr/socket_utils.h" diff --git a/test/core/client_config/set_initial_connect_string_test.c b/test/core/client_config/set_initial_connect_string_test.c index 1b51424f7ed..dcff859e4bb 100644 --- a/test/core/client_config/set_initial_connect_string_test.c +++ b/test/core/client_config/set_initial_connect_string_test.c @@ -93,15 +93,14 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp, grpc_endpoint_read(exec_ctx, tcp, &state.temp_incoming_buffer, &on_read); } -static void set_magic_initial_string(struct sockaddr **addr, size_t *addr_len, +static void set_magic_initial_string(grpc_resolved_address **addr, gpr_slice *connect_string) { GPR_ASSERT(addr); - GPR_ASSERT(addr_len); + GPR_ASSERT((*addr)->len); *connect_string = gpr_slice_from_copied_string(magic_connect_string); } -static void reset_addr_and_set_magic_string(struct sockaddr **addr, - size_t *addr_len, +static void reset_addr_and_set_magic_string(grpc_resolved_address **addr, gpr_slice *connect_string) { struct sockaddr_in target; *connect_string = gpr_slice_from_copied_string(magic_connect_string); @@ -109,9 +108,9 @@ static void reset_addr_and_set_magic_string(struct sockaddr **addr, target.sin_family = AF_INET; target.sin_addr.s_addr = htonl(INADDR_LOOPBACK); target.sin_port = htons((uint16_t)server_port); - *addr_len = sizeof(target); - *addr = (struct sockaddr *)gpr_malloc(sizeof(target)); - memcpy(*addr, &target, sizeof(target)); + (*addr)->len = sizeof(target); + *addr = (grpc_resolved_address *)gpr_malloc(sizeof(grpc_resolved_address)); + memcpy((*addr)->addr, &target, sizeof(target)); } static gpr_timespec n_sec_deadline(int seconds) { diff --git a/test/core/end2end/fixtures/h2_full+trace.c b/test/core/end2end/fixtures/h2_full+trace.c index e25b5e33470..46582e3190d 100644 --- a/test/core/end2end/fixtures/h2_full+trace.c +++ b/test/core/end2end/fixtures/h2_full+trace.c @@ -34,6 +34,7 @@ #include "test/core/end2end/end2end_tests.h" #include +#include #include #include diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c index d0925e51099..356a359784b 100644 --- a/test/core/end2end/fixtures/h2_sockpair+trace.c +++ b/test/core/end2end/fixtures/h2_sockpair+trace.c @@ -34,6 +34,7 @@ #include "test/core/end2end/end2end_tests.h" #include +#include #include #include diff --git a/test/core/iomgr/sockaddr_utils_test.c b/test/core/iomgr/sockaddr_utils_test.c index a330314443a..1f89f59ef23 100644 --- a/test/core/iomgr/sockaddr_utils_test.c +++ b/test/core/iomgr/sockaddr_utils_test.c @@ -31,6 +31,7 @@ * */ +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr_utils.h" #include @@ -41,24 +42,28 @@ #include #include "test/core/util/test_config.h" -static struct sockaddr_in make_addr4(const uint8_t *data, size_t data_len) { - struct sockaddr_in addr4; - memset(&addr4, 0, sizeof(addr4)); - addr4.sin_family = AF_INET; - GPR_ASSERT(data_len == sizeof(addr4.sin_addr.s_addr)); - memcpy(&addr4.sin_addr.s_addr, data, data_len); - addr4.sin_port = htons(12345); - return addr4; +static grpc_resolved_address make_addr4(const uint8_t *data, size_t data_len) { + grpc_resolved_address resolved_addr4; + struct sockaddr_in *addr4 = (struct sockaddr_in *)resolved_addr4.addr; + memset(&resolved_addr4, 0, sizeof(resolved_addr4)); + addr4->sin_family = AF_INET; + GPR_ASSERT(data_len == sizeof(addr4->sin_addr.s_addr)); + memcpy(&addr4->sin_addr.s_addr, data, data_len); + addr4->sin_port = htons(12345); + resolved_addr4.len = sizeof(struct sockaddr_in); + return resolved_addr4; } -static struct sockaddr_in6 make_addr6(const uint8_t *data, size_t data_len) { - struct sockaddr_in6 addr6; - memset(&addr6, 0, sizeof(addr6)); - addr6.sin6_family = AF_INET6; - GPR_ASSERT(data_len == sizeof(addr6.sin6_addr.s6_addr)); - memcpy(&addr6.sin6_addr.s6_addr, data, data_len); - addr6.sin6_port = htons(12345); - return addr6; +static grpc_resolved_address make_addr6(const uint8_t *data, size_t data_len) { + grpc_resolved_address resolved_addr6; + struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)resolved_addr6.addr; + memset(&resolved_addr6, 0, sizeof(resolved_addr6)); + addr6->sin6_family = AF_INET6; + GPR_ASSERT(data_len == sizeof(addr6->sin6_addr.s6_addr)); + memcpy(&addr6->sin6_addr.s6_addr, data, data_len); + addr6->sin6_port = htons(12345); + resolved_addr6.len = sizeof(struct sockaddr_in6); + return resolved_addr6; } static const uint8_t kMapped[] = {0, 0, 0, 0, 0, 0, 0, 0, @@ -72,102 +77,96 @@ static const uint8_t kIPv6[] = {0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; static void test_sockaddr_is_v4mapped(void) { - struct sockaddr_in input4; - struct sockaddr_in6 input6; - struct sockaddr_in output4; - struct sockaddr_in expect4; + grpc_resolved_address input4; + grpc_resolved_address input6; + grpc_resolved_address output4; + grpc_resolved_address expect4; gpr_log(GPR_INFO, "%s", "test_sockaddr_is_v4mapped"); /* v4mapped input should succeed. */ input6 = make_addr6(kMapped, sizeof(kMapped)); - GPR_ASSERT(grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input6, NULL)); - GPR_ASSERT( - grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input6, &output4)); + GPR_ASSERT(grpc_sockaddr_is_v4mapped(&input6, NULL)); + GPR_ASSERT(grpc_sockaddr_is_v4mapped(&input6, &output4)); expect4 = make_addr4(kIPv4, sizeof(kIPv4)); GPR_ASSERT(memcmp(&expect4, &output4, sizeof(expect4)) == 0); /* Non-v4mapped input should fail. */ input6 = make_addr6(kNotQuiteMapped, sizeof(kNotQuiteMapped)); - GPR_ASSERT( - !grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input6, NULL)); - GPR_ASSERT( - !grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input6, &output4)); + GPR_ASSERT(!grpc_sockaddr_is_v4mapped(&input6, NULL)); + GPR_ASSERT(!grpc_sockaddr_is_v4mapped(&input6, &output4)); /* Output is unchanged. */ GPR_ASSERT(memcmp(&expect4, &output4, sizeof(expect4)) == 0); /* Plain IPv4 input should also fail. */ input4 = make_addr4(kIPv4, sizeof(kIPv4)); - GPR_ASSERT( - !grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input4, NULL)); + GPR_ASSERT(!grpc_sockaddr_is_v4mapped(&input4, NULL)); } static void test_sockaddr_to_v4mapped(void) { - struct sockaddr_in input4; - struct sockaddr_in6 input6; - struct sockaddr_in6 output6; - struct sockaddr_in6 expect6; + grpc_resolved_address input4; + grpc_resolved_address input6; + grpc_resolved_address output6; + grpc_resolved_address expect6; gpr_log(GPR_INFO, "%s", "test_sockaddr_to_v4mapped"); /* IPv4 input should succeed. */ input4 = make_addr4(kIPv4, sizeof(kIPv4)); - GPR_ASSERT( - grpc_sockaddr_to_v4mapped((const struct sockaddr *)&input4, &output6)); + GPR_ASSERT(grpc_sockaddr_to_v4mapped(&input4, &output6)); expect6 = make_addr6(kMapped, sizeof(kMapped)); GPR_ASSERT(memcmp(&expect6, &output6, sizeof(output6)) == 0); /* IPv6 input should fail. */ input6 = make_addr6(kIPv6, sizeof(kIPv6)); - GPR_ASSERT( - !grpc_sockaddr_to_v4mapped((const struct sockaddr *)&input6, &output6)); + GPR_ASSERT(!grpc_sockaddr_to_v4mapped(&input6, &output6)); /* Output is unchanged. */ GPR_ASSERT(memcmp(&expect6, &output6, sizeof(output6)) == 0); /* Already-v4mapped input should also fail. */ input6 = make_addr6(kMapped, sizeof(kMapped)); - GPR_ASSERT( - !grpc_sockaddr_to_v4mapped((const struct sockaddr *)&input6, &output6)); + GPR_ASSERT(!grpc_sockaddr_to_v4mapped(&input6, &output6)); } static void test_sockaddr_is_wildcard(void) { - struct sockaddr_in wild4; - struct sockaddr_in6 wild6; - struct sockaddr_in6 wild_mapped; - struct sockaddr dummy; + grpc_resolved_address wild4; + grpc_resolved_address wild6; + grpc_resolved_address wild_mapped; + grpc_resolved_address dummy; + struct sockaddr_in *wild4_addr; + struct sockaddr_in6 *wild6_addr; + struct sockaddr_in6 *wild_mapped_addr; int port; gpr_log(GPR_INFO, "%s", "test_sockaddr_is_wildcard"); /* Generate wildcards. */ grpc_sockaddr_make_wildcards(555, &wild4, &wild6); - GPR_ASSERT( - grpc_sockaddr_to_v4mapped((const struct sockaddr *)&wild4, &wild_mapped)); + GPR_ASSERT(grpc_sockaddr_to_v4mapped(&wild4, &wild_mapped)); /* Test 0.0.0.0:555 */ port = -1; - GPR_ASSERT(grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild4, &port)); + GPR_ASSERT(grpc_sockaddr_is_wildcard(&wild4, &port)); GPR_ASSERT(port == 555); - memset(&wild4.sin_addr.s_addr, 0xbd, 1); - GPR_ASSERT( - !grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild4, &port)); + wild4_addr = (struct sockaddr_in *)&wild4.addr; + memset(&wild4_addr->sin_addr.s_addr, 0xbd, 1); + GPR_ASSERT(!grpc_sockaddr_is_wildcard(&wild4, &port)); /* Test [::]:555 */ port = -1; - GPR_ASSERT(grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild6, &port)); + GPR_ASSERT(grpc_sockaddr_is_wildcard(&wild6, &port)); GPR_ASSERT(port == 555); - memset(&wild6.sin6_addr.s6_addr, 0xbd, 1); - GPR_ASSERT( - !grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild6, &port)); + wild6_addr = (struct sockaddr_in6 *)&wild6.addr; + memset(&wild6_addr->sin6_addr.s6_addr, 0xbd, 1); + GPR_ASSERT(!grpc_sockaddr_is_wildcard(&wild6, &port)); /* Test [::ffff:0.0.0.0]:555 */ port = -1; - GPR_ASSERT( - grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild_mapped, &port)); + GPR_ASSERT(grpc_sockaddr_is_wildcard(&wild_mapped, &port)); GPR_ASSERT(port == 555); - memset(&wild_mapped.sin6_addr.s6_addr, 0xbd, 1); - GPR_ASSERT( - !grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild_mapped, &port)); + wild_mapped_addr = (struct sockaddr_in6 *)&wild_mapped.addr; + memset(&wild_mapped_addr->sin6_addr.s6_addr, 0xbd, 1); + GPR_ASSERT(!grpc_sockaddr_is_wildcard(&wild_mapped, &port)); /* Test AF_UNSPEC. */ port = -1; @@ -176,12 +175,12 @@ static void test_sockaddr_is_wildcard(void) { GPR_ASSERT(port == -1); } -static void expect_sockaddr_str(const char *expected, void *addr, +static void expect_sockaddr_str(const char *expected, grpc_resolved_address *addr, int normalize) { int result; char *str; gpr_log(GPR_INFO, " expect_sockaddr_str(%s)", expected); - result = grpc_sockaddr_to_string(&str, (struct sockaddr *)addr, normalize); + result = grpc_sockaddr_to_string(&str, addr, normalize); GPR_ASSERT(str != NULL); GPR_ASSERT(result >= 0); GPR_ASSERT((size_t)result == strlen(str)); @@ -189,19 +188,20 @@ static void expect_sockaddr_str(const char *expected, void *addr, gpr_free(str); } -static void expect_sockaddr_uri(const char *expected, void *addr) { +static void expect_sockaddr_uri(const char *expected, grpc_resolved_address *addr) { char *str; gpr_log(GPR_INFO, " expect_sockaddr_uri(%s)", expected); - str = grpc_sockaddr_to_uri((struct sockaddr *)addr); + str = grpc_sockaddr_to_uri(addr); GPR_ASSERT(str != NULL); GPR_ASSERT(strcmp(expected, str) == 0); gpr_free(str); } static void test_sockaddr_to_string(void) { - struct sockaddr_in input4; - struct sockaddr_in6 input6; - struct sockaddr dummy; + grpc_resolved_address input4; + grpc_resolved_address input6; + grpc_resolved_address dummy; + struct sockaddr *dummy_addr; gpr_log(GPR_INFO, "%s", "test_sockaddr_to_string"); @@ -228,7 +228,8 @@ static void test_sockaddr_to_string(void) { expect_sockaddr_uri("ipv6:[::fffe:c000:263]:12345", &input6); memset(&dummy, 0, sizeof(dummy)); - dummy.sa_family = 123; + dummy_addr = (struct sockaddr *)dummy.addr; + dummy_addr->sa_family = 123; expect_sockaddr_str("(sockaddr family=123)", &dummy, 0); expect_sockaddr_str("(sockaddr family=123)", &dummy, 1); GPR_ASSERT(grpc_sockaddr_to_uri(&dummy) == NULL); @@ -237,24 +238,26 @@ static void test_sockaddr_to_string(void) { } static void test_sockaddr_set_get_port(void) { - struct sockaddr_in input4; - struct sockaddr_in6 input6; - struct sockaddr dummy; + grpc_resolved_address input4; + grpc_resolved_address input6; + grpc_resolved_address dummy; + struct sockaddr *dummy_addr; gpr_log(GPR_DEBUG, "test_sockaddr_set_get_port"); input4 = make_addr4(kIPv4, sizeof(kIPv4)); - GPR_ASSERT(grpc_sockaddr_get_port((struct sockaddr *)&input4) == 12345); - GPR_ASSERT(grpc_sockaddr_set_port((struct sockaddr *)&input4, 54321)); - GPR_ASSERT(grpc_sockaddr_get_port((struct sockaddr *)&input4) == 54321); + GPR_ASSERT(grpc_sockaddr_get_port(&input4) == 12345); + GPR_ASSERT(grpc_sockaddr_set_port(&input4, 54321)); + GPR_ASSERT(grpc_sockaddr_get_port(&input4) == 54321); input6 = make_addr6(kIPv6, sizeof(kIPv6)); - GPR_ASSERT(grpc_sockaddr_get_port((struct sockaddr *)&input6) == 12345); - GPR_ASSERT(grpc_sockaddr_set_port((struct sockaddr *)&input6, 54321)); - GPR_ASSERT(grpc_sockaddr_get_port((struct sockaddr *)&input6) == 54321); + GPR_ASSERT(grpc_sockaddr_get_port(&input6) == 12345); + GPR_ASSERT(grpc_sockaddr_set_port(&input6, 54321)); + GPR_ASSERT(grpc_sockaddr_get_port(&input6) == 54321); memset(&dummy, 0, sizeof(dummy)); - dummy.sa_family = 123; + dummy_addr = (struct sockaddr *)dummy.addr; + dummy_addr->sa_family = 123; GPR_ASSERT(grpc_sockaddr_get_port(&dummy) == 0); GPR_ASSERT(grpc_sockaddr_set_port(&dummy, 1234) == 0); } diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c index d0c10474239..07aa55b1456 100644 --- a/test/core/iomgr/tcp_client_posix_test.c +++ b/test/core/iomgr/tcp_client_posix_test.c @@ -85,8 +85,8 @@ static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { } void test_succeeds(void) { - struct sockaddr_in addr; - socklen_t addr_len = sizeof(addr); + grpc_resolved_address resolved_addr; + struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr; int svr_fd; int r; int connections_complete_before; @@ -95,13 +95,14 @@ void test_succeeds(void) { gpr_log(GPR_DEBUG, "test_succeeds"); - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; + memset(&resolved_addr, 0, sizeof(resolved_addr)); + resolved_addr.len = sizeof(struct sockaddr_in); + addr->sin_family = AF_INET; /* create a dummy server */ svr_fd = socket(AF_INET, SOCK_STREAM, 0); GPR_ASSERT(svr_fd >= 0); - GPR_ASSERT(0 == bind(svr_fd, (struct sockaddr *)&addr, addr_len)); + GPR_ASSERT(0 == bind(svr_fd, (struct sockaddr *)addr, (socklen_t)resolved_addr.len)); GPR_ASSERT(0 == listen(svr_fd, 1)); gpr_mu_lock(g_mu); @@ -109,16 +110,15 @@ void test_succeeds(void) { gpr_mu_unlock(g_mu); /* connect to it */ - GPR_ASSERT(getsockname(svr_fd, (struct sockaddr *)&addr, &addr_len) == 0); + GPR_ASSERT(getsockname(svr_fd, (struct sockaddr *)addr, (socklen_t *)&resolved_addr.len) == 0); grpc_closure_init(&done, must_succeed, NULL); grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set, - (struct sockaddr *)&addr, addr_len, - gpr_inf_future(GPR_CLOCK_REALTIME)); + &resolved_addr, gpr_inf_future(GPR_CLOCK_REALTIME)); /* await the connection */ do { - addr_len = sizeof(addr); - r = accept(svr_fd, (struct sockaddr *)&addr, &addr_len); + resolved_addr.len = sizeof(addr); + r = accept(svr_fd, addr, (socklen_t *)&resolved_addr.len); } while (r == -1 && errno == EINTR); GPR_ASSERT(r >= 0); close(r); @@ -143,16 +143,17 @@ void test_succeeds(void) { } void test_fails(void) { - struct sockaddr_in addr; - socklen_t addr_len = sizeof(addr); + grpc_resolved_address resolved_addr; + struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr; int connections_complete_before; grpc_closure done; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; gpr_log(GPR_DEBUG, "test_fails"); - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; + memset(&resolved_addr, 0, sizeof(resolved_addr)); + resolved_addr.len = sizeof(struct sockaddr_in); + addr->sin_family = AF_INET; gpr_mu_lock(g_mu); connections_complete_before = g_connections_complete; @@ -161,8 +162,7 @@ void test_fails(void) { /* connect to a broken address */ grpc_closure_init(&done, must_fail, NULL); grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set, - (struct sockaddr *)&addr, addr_len, - gpr_inf_future(GPR_CLOCK_REALTIME)); + &resolved_addr, gpr_inf_future(GPR_CLOCK_REALTIME)); gpr_mu_lock(g_mu); diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c index 6e2d1d0fc9e..9e8dff61ff0 100644 --- a/test/core/iomgr/tcp_server_posix_test.c +++ b/test/core/iomgr/tcp_server_posix_test.c @@ -46,6 +46,7 @@ #include #include "src/core/lib/iomgr/iomgr.h" +#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/sockaddr_utils.h" #include "test/core/util/port.h" #include "test/core/util/test_config.h" @@ -146,15 +147,17 @@ static void test_no_op_with_start(void) { static void test_no_op_with_port(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - struct sockaddr_in addr; + grpc_resolved_address resolved_addr; + struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr; grpc_tcp_server *s; GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, NULL, &s)); LOG_TEST("test_no_op_with_port"); - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; + memset(&resolved_addr, 0, sizeof(resolved_addr)); + resolved_addr.len = sizeof(struct sockaddr_in); + addr->sin_family = AF_INET; int port; - GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr), + GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr, &port) == GRPC_ERROR_NONE && port > 0); @@ -164,15 +167,17 @@ static void test_no_op_with_port(void) { static void test_no_op_with_port_and_start(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - struct sockaddr_in addr; + grpc_resolved_address resolved_addr; + struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr; grpc_tcp_server *s; GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, NULL, &s)); LOG_TEST("test_no_op_with_port_and_start"); int port; - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr), + memset(&resolved_addr, 0, sizeof(resolved_addr)); + resolved_addr.len = sizeof(struct sockaddr_in); + addr->sin_family = AF_INET; + GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr, &port) == GRPC_ERROR_NONE && port > 0); @@ -218,9 +223,10 @@ static void tcp_connect(grpc_exec_ctx *exec_ctx, const struct sockaddr *remote, the same port should be tested. */ static void test_connect(unsigned n) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - struct sockaddr_storage addr; - struct sockaddr_storage addr1; - socklen_t addr_len = sizeof(addr); + grpc_resolved_address resolved_addr; + grpc_resolved_address resolved_addr1; + struct sockaddr_storage *addr = (struct sockaddr_storage *)resolved_addr.addr; + struct sockaddr_storage *addr1 = (struct sockaddr_storage *)resolved_addr1.addr; unsigned svr_fd_count; int svr_port; unsigned svr1_fd_count; @@ -232,18 +238,19 @@ static void test_connect(unsigned n) { server_weak_ref_init(&weak_ref); LOG_TEST("test_connect"); gpr_log(GPR_INFO, "clients=%d", n); - memset(&addr, 0, sizeof(addr)); - memset(&addr1, 0, sizeof(addr1)); - addr.ss_family = addr1.ss_family = AF_INET; + memset(&resolved_addr, 0, sizeof(resolved_addr)); + memset(&resolved_addr1, 0, sizeof(resolved_addr1)); + resolved_addr.len = sizeof(struct sockaddr_storage); + resolved_addr1.len = sizeof(struct sockaddr_storage); + addr->ss_family = addr1->ss_family = AF_INET; GPR_ASSERT(GRPC_ERROR_NONE == - grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len, - &svr_port)); + grpc_tcp_server_add_port(s, &resolved_addr, &svr_port)); GPR_ASSERT(svr_port > 0); /* Cannot use wildcard (port==0), because add_port() will try to reuse the same port as a previous add_port(). */ svr1_port = grpc_pick_unused_port_or_die(); - grpc_sockaddr_set_port((struct sockaddr *)&addr1, svr1_port); - GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr1, addr_len, + grpc_sockaddr_set_port(&resolved_addr1, svr1_port); + GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr1, &svr_port) == GRPC_ERROR_NONE && svr_port == svr1_port); @@ -265,16 +272,16 @@ static void test_connect(unsigned n) { int fd = grpc_tcp_server_port_fd(s, 0, i); GPR_ASSERT(fd >= 0); if (i == 0) { - GPR_ASSERT(getsockname(fd, (struct sockaddr *)&addr, &addr_len) == 0); - GPR_ASSERT(addr_len <= sizeof(addr)); + GPR_ASSERT(getsockname(fd, (struct sockaddr *)addr, (socklen_t *)&resolved_addr.len) == 0); + GPR_ASSERT(resolved_addr.len <= sizeof(*addr)); } } for (i = 0; i < svr1_fd_count; ++i) { int fd = grpc_tcp_server_port_fd(s, 1, i); GPR_ASSERT(fd >= 0); if (i == 0) { - GPR_ASSERT(getsockname(fd, (struct sockaddr *)&addr1, &addr_len) == 0); - GPR_ASSERT(addr_len <= sizeof(addr1)); + GPR_ASSERT(getsockname(fd, (struct sockaddr *)addr1, (socklen_t *)&resolved_addr1.len) == 0); + GPR_ASSERT(resolved_addr1.len <= sizeof(*addr1)); } } @@ -284,7 +291,7 @@ static void test_connect(unsigned n) { on_connect_result result; int svr_fd; on_connect_result_init(&result); - tcp_connect(&exec_ctx, (struct sockaddr *)&addr, addr_len, &result); + tcp_connect(&exec_ctx, (struct sockaddr *)addr, (socklen_t)resolved_addr.len, &result); GPR_ASSERT(result.server_fd >= 0); svr_fd = result.server_fd; GPR_ASSERT(grpc_tcp_server_port_fd(s, result.port_index, result.fd_index) == @@ -298,7 +305,7 @@ static void test_connect(unsigned n) { grpc_tcp_server_unref(&exec_ctx, result.server); on_connect_result_init(&result); - tcp_connect(&exec_ctx, (struct sockaddr *)&addr1, addr_len, &result); + tcp_connect(&exec_ctx, (struct sockaddr *)addr1, (socklen_t)resolved_addr1.len, &result); GPR_ASSERT(result.server_fd >= 0); GPR_ASSERT(result.server_fd != svr_fd); GPR_ASSERT(grpc_tcp_server_port_fd(s, result.port_index, result.fd_index) == diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c index f7567f350d7..537fdf71a1f 100644 --- a/test/core/surface/concurrent_connectivity_test.c +++ b/test/core/surface/concurrent_connectivity_test.c @@ -31,6 +31,8 @@ * */ +#include "src/core/lib/iomgr/sockaddr.h" + #include #include @@ -42,6 +44,7 @@ #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr.h" +#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/tcp_server.h" @@ -109,16 +112,16 @@ void bad_server_thread(void *vargs) { struct server_thread_args *args = (struct server_thread_args *)vargs; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); + grpc_resolved_address resolved_addr; + struct sockaddr_storage *addr = (struct sockaddr_storage *)resolved_addr.addr; int port; grpc_tcp_server *s; grpc_error *error = grpc_tcp_server_create(NULL, NULL, &s); GPR_ASSERT(error == GRPC_ERROR_NONE); - memset(&addr, 0, sizeof(addr)); - addr.ss_family = AF_INET; + memset(&resolved_addr, 0, sizeof(resolved_addr)); + addr->ss_family = AF_INET; error = - grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len, &port); + grpc_tcp_server_add_port(s, &resolved_addr, &port); GPR_ASSERT(GRPC_LOG_IF_ERROR("grpc_tcp_server_add_port", error)); GPR_ASSERT(port > 0); gpr_asprintf(&args->addr, "localhost:%d", port); diff --git a/test/core/util/test_tcp_server.c b/test/core/util/test_tcp_server.c index 8a0b3932d86..ee2de563e86 100644 --- a/test/core/util/test_tcp_server.c +++ b/test/core/util/test_tcp_server.c @@ -31,6 +31,8 @@ * */ +#include "src/core/lib/iomgr/sockaddr.h" + #include "test/core/util/test_tcp_server.h" #include @@ -41,7 +43,7 @@ #include #include #include "src/core/lib/iomgr/endpoint.h" -#include "src/core/lib/iomgr/sockaddr.h" +#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/tcp_server.h" #include "test/core/util/port.h" @@ -64,18 +66,19 @@ void test_tcp_server_init(test_tcp_server *server, } void test_tcp_server_start(test_tcp_server *server, int port) { - struct sockaddr_in addr; + grpc_resolved_address resolved_addr; + struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr; int port_added; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - addr.sin_family = AF_INET; - addr.sin_port = htons((uint16_t)port); - memset(&addr.sin_addr, 0, sizeof(addr.sin_addr)); + addr->sin_family = AF_INET; + addr->sin_port = htons((uint16_t)port); + memset(&addr->sin_addr, 0, sizeof(addr->sin_addr)); grpc_error *error = grpc_tcp_server_create(&server->shutdown_complete, NULL, &server->tcp_server); GPR_ASSERT(error == GRPC_ERROR_NONE); - error = grpc_tcp_server_add_port(server->tcp_server, &addr, sizeof(addr), + error = grpc_tcp_server_add_port(server->tcp_server, &resolved_addr, &port_added); GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(port_added == port); From d4673484c73c68f956c1bd6b9583048a124fe925 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 13:50:04 -0700 Subject: [PATCH 054/286] Update tests --- include/grpc/grpc.h | 2 +- src/core/lib/iomgr/buffer_pool.c | 19 +++++++++++++ src/core/lib/iomgr/endpoint.c | 4 +++ test/core/bad_client/bad_client.c | 4 ++- test/core/http/httpcli_test.c | 11 +++++--- test/core/http/httpscli_test.c | 11 +++++--- test/core/internal_api_canaries/iomgr.c | 1 + test/core/iomgr/endpoint_pair_test.c | 5 +++- test/core/iomgr/fd_conservation_posix_test.c | 5 +++- .../surface/concurrent_connectivity_test.c | 2 +- test/core/util/mock_endpoint.c | 22 ++++++++++++--- test/core/util/mock_endpoint.h | 3 ++- test/core/util/passthru_endpoint.c | 27 +++++++++++++++---- test/core/util/passthru_endpoint.h | 3 ++- test/core/util/port_server_client.c | 17 ++++++++---- test/core/util/test_tcp_server.c | 4 +-- 16 files changed, 112 insertions(+), 28 deletions(-) diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h index a893367a9c3..a6e02cd0722 100644 --- a/include/grpc/grpc.h +++ b/include/grpc/grpc.h @@ -415,7 +415,7 @@ GRPCAPI void grpc_buffer_pool_resize(grpc_buffer_pool *buffer_pool, size_t new_size); /** Fetch a vtable for a grpc_channel_arg that points to a grpc_buffer_pool */ -GRPCAPI grpc_arg_pointer_vtable *grpc_buffer_pool_arg_vtable(void); +GRPCAPI const grpc_arg_pointer_vtable *grpc_buffer_pool_arg_vtable(void); #ifdef __cplusplus } diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 0153bce2038..78a98027f57 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -37,6 +37,7 @@ #include #include +#include #include "src/core/lib/iomgr/combiner.h" @@ -366,6 +367,10 @@ void grpc_buffer_pool_resize(grpc_buffer_pool *buffer_pool, size_t size) { grpc_exec_ctx_finish(&exec_ctx); } +/******************************************************************************* + * grpc_buffer_user channel args api + */ + grpc_buffer_pool *grpc_buffer_pool_from_channel_args( grpc_channel_args *channel_args) { for (size_t i = 0; i < channel_args->num_args; i++) { @@ -381,6 +386,20 @@ grpc_buffer_pool *grpc_buffer_pool_from_channel_args( return grpc_buffer_pool_create(); } +static void *bp_copy(void *bp) { + grpc_buffer_pool_ref(bp); + return bp; +} + +static void bp_destroy(void *bp) { grpc_buffer_pool_unref(bp); } + +static int bp_cmp(void *a, void *b) { return GPR_ICMP(a, b); } + +const grpc_arg_pointer_vtable *grpc_buffer_pool_arg_vtable(void) { + static const grpc_arg_pointer_vtable vtable = {bp_copy, bp_destroy, bp_cmp}; + return &vtable; +} + /******************************************************************************* * grpc_buffer_user api */ diff --git a/src/core/lib/iomgr/endpoint.c b/src/core/lib/iomgr/endpoint.c index f901fcf9622..f3548a1d74b 100644 --- a/src/core/lib/iomgr/endpoint.c +++ b/src/core/lib/iomgr/endpoint.c @@ -69,3 +69,7 @@ char* grpc_endpoint_get_peer(grpc_endpoint* ep) { grpc_workqueue* grpc_endpoint_get_workqueue(grpc_endpoint* ep) { return ep->vtable->get_workqueue(ep); } + +grpc_buffer_user* grpc_endpoint_get_buffer_user(grpc_endpoint* ep) { + return ep->vtable->get_buffer_user(ep); +} diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c index be88d4a69a9..06692fe969d 100644 --- a/test/core/bad_client/bad_client.c +++ b/test/core/bad_client/bad_client.c @@ -114,7 +114,9 @@ void grpc_run_bad_client_test( grpc_init(); /* Create endpoints */ - sfd = grpc_iomgr_create_endpoint_pair("fixture", 65536); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 65536); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); /* Create server, completion events */ a.server = grpc_server_create(NULL, NULL); diff --git a/test/core/http/httpcli_test.c b/test/core/http/httpcli_test.c index 38b32a3867f..d1c6805b033 100644 --- a/test/core/http/httpcli_test.c +++ b/test/core/http/httpcli_test.c @@ -89,8 +89,11 @@ static void test_get(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, &req, n_seconds_time(15), + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, + n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; @@ -126,9 +129,11 @@ static void test_post(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, &req, "hello", 5, - n_seconds_time(15), + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, "hello", + 5, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; diff --git a/test/core/http/httpscli_test.c b/test/core/http/httpscli_test.c index 359e5576894..09ceec72081 100644 --- a/test/core/http/httpscli_test.c +++ b/test/core/http/httpscli_test.c @@ -90,8 +90,11 @@ static void test_get(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, &req, n_seconds_time(15), + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, + n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; @@ -128,9 +131,11 @@ static void test_post(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, &req, "hello", 5, - n_seconds_time(15), + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, "hello", + 5, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; diff --git a/test/core/internal_api_canaries/iomgr.c b/test/core/internal_api_canaries/iomgr.c index 27d630623ed..4f967ce7512 100644 --- a/test/core/internal_api_canaries/iomgr.c +++ b/test/core/internal_api_canaries/iomgr.c @@ -84,6 +84,7 @@ static void test_code(void) { grpc_endpoint_add_to_pollset_set, grpc_endpoint_shutdown, grpc_endpoint_destroy, + grpc_endpoint_get_buffer_user, grpc_endpoint_get_peer}; endpoint.vtable = &vtable; diff --git a/test/core/iomgr/endpoint_pair_test.c b/test/core/iomgr/endpoint_pair_test.c index 99b86b62134..a7f00230c2b 100644 --- a/test/core/iomgr/endpoint_pair_test.c +++ b/test/core/iomgr/endpoint_pair_test.c @@ -49,7 +49,10 @@ static grpc_endpoint_test_fixture create_fixture_endpoint_pair( size_t slice_size) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_endpoint_test_fixture f; - grpc_endpoint_pair p = grpc_iomgr_create_endpoint_pair("test", slice_size); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_endpoint_pair p = + grpc_iomgr_create_endpoint_pair("test", buffer_pool, slice_size); + grpc_buffer_pool_unref(buffer_pool); f.client_ep = p.client; f.server_ep = p.server; diff --git a/test/core/iomgr/fd_conservation_posix_test.c b/test/core/iomgr/fd_conservation_posix_test.c index bbb3f46497f..4612ff7dc4a 100644 --- a/test/core/iomgr/fd_conservation_posix_test.c +++ b/test/core/iomgr/fd_conservation_posix_test.c @@ -52,15 +52,18 @@ int main(int argc, char **argv) { of descriptors */ rlim.rlim_cur = rlim.rlim_max = 10; GPR_ASSERT(0 == setrlimit(RLIMIT_NOFILE, &rlim)); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); for (i = 0; i < 100; i++) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - p = grpc_iomgr_create_endpoint_pair("test", 1); + p = grpc_iomgr_create_endpoint_pair("test", buffer_pool, 1); grpc_endpoint_destroy(&exec_ctx, p.client); grpc_endpoint_destroy(&exec_ctx, p.server); grpc_exec_ctx_finish(&exec_ctx); } + grpc_buffer_pool_unref(buffer_pool); + grpc_iomgr_shutdown(); return 0; } diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c index f7567f350d7..c34ea2c8cbc 100644 --- a/test/core/surface/concurrent_connectivity_test.c +++ b/test/core/surface/concurrent_connectivity_test.c @@ -113,7 +113,7 @@ void bad_server_thread(void *vargs) { socklen_t addr_len = sizeof(addr); int port; grpc_tcp_server *s; - grpc_error *error = grpc_tcp_server_create(NULL, NULL, &s); + grpc_error *error = grpc_tcp_server_create(&exec_ctx, NULL, NULL, &s); GPR_ASSERT(error == GRPC_ERROR_NONE); memset(&addr, 0, sizeof(addr)); addr.ss_family = AF_INET; diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index 13e0e918fbe..173a2d89630 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -43,6 +43,7 @@ typedef struct grpc_mock_endpoint { gpr_slice_buffer read_buffer; gpr_slice_buffer *on_read_out; grpc_closure *on_read; + grpc_buffer_user buffer_user; } grpc_mock_endpoint; static void me_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, @@ -85,16 +86,28 @@ static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { gpr_mu_unlock(&m->mu); } -static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { - grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; +static void me_really_destroy(grpc_exec_ctx *exec_ctx, void *mp, + grpc_error *error) { + grpc_mock_endpoint *m = mp; gpr_slice_buffer_destroy(&m->read_buffer); gpr_free(m); } +static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { + grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; + grpc_buffer_user_destroy(exec_ctx, &m->buffer_user, + grpc_closure_create(me_really_destroy, m)); +} + static char *me_get_peer(grpc_endpoint *ep) { return gpr_strdup("fake:mock_endpoint"); } +static grpc_buffer_user *me_get_buffer_user(grpc_endpoint *ep) { + grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; + return &m->buffer_user; +} + static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } static const grpc_endpoint_vtable vtable = { @@ -105,12 +118,15 @@ static const grpc_endpoint_vtable vtable = { me_add_to_pollset_set, me_shutdown, me_destroy, + me_get_buffer_user, me_get_peer, }; -grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice)) { +grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice), + grpc_buffer_pool *buffer_pool) { grpc_mock_endpoint *m = gpr_malloc(sizeof(*m)); m->base.vtable = &vtable; + grpc_buffer_user_init(&m->buffer_user, buffer_pool); gpr_slice_buffer_init(&m->read_buffer); gpr_mu_init(&m->mu); m->on_write = on_write; diff --git a/test/core/util/mock_endpoint.h b/test/core/util/mock_endpoint.h index 051af9866b6..bb59a16f7a1 100644 --- a/test/core/util/mock_endpoint.h +++ b/test/core/util/mock_endpoint.h @@ -36,7 +36,8 @@ #include "src/core/lib/iomgr/endpoint.h" -grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice)); +grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice), + grpc_buffer_pool *buffer_pool); void grpc_mock_endpoint_put_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *mock_endpoint, gpr_slice slice); diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index 7ed9e97bd6a..239cd3e2759 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -44,6 +44,7 @@ typedef struct { gpr_slice_buffer read_buffer; gpr_slice_buffer *on_read_out; grpc_closure *on_read; + grpc_buffer_user buffer_user; } half; struct passthru_endpoint { @@ -122,7 +123,8 @@ static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { gpr_mu_unlock(&m->parent->mu); } -static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { +static void me_really_destroy(grpc_exec_ctx *exec_ctx, void *ep, + grpc_error *error) { passthru_endpoint *p = ((half *)ep)->parent; gpr_mu_lock(&p->mu); if (0 == --p->halves) { @@ -136,12 +138,23 @@ static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { } } +static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { + half *m = (half *)ep; + grpc_buffer_user_destroy(exec_ctx, &m->buffer_user, + grpc_closure_create(me_really_destroy, m)); +} + static char *me_get_peer(grpc_endpoint *ep) { return gpr_strdup("fake:mock_endpoint"); } static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } +static grpc_buffer_user *me_get_buffer_user(grpc_endpoint *ep) { + half *m = (half *)ep; + return &m->buffer_user; +} + static const grpc_endpoint_vtable vtable = { me_read, me_write, @@ -150,23 +163,27 @@ static const grpc_endpoint_vtable vtable = { me_add_to_pollset_set, me_shutdown, me_destroy, + me_get_buffer_user, me_get_peer, }; -static void half_init(half *m, passthru_endpoint *parent) { +static void half_init(half *m, passthru_endpoint *parent, + grpc_buffer_pool *buffer_pool) { m->base.vtable = &vtable; m->parent = parent; gpr_slice_buffer_init(&m->read_buffer); m->on_read = NULL; + grpc_buffer_user_init(&m->buffer_user, buffer_pool); } void grpc_passthru_endpoint_create(grpc_endpoint **client, - grpc_endpoint **server) { + grpc_endpoint **server, + grpc_buffer_pool *buffer_pool) { passthru_endpoint *m = gpr_malloc(sizeof(*m)); m->halves = 2; m->shutdown = 0; - half_init(&m->client, m); - half_init(&m->server, m); + half_init(&m->client, m, buffer_pool); + half_init(&m->server, m, buffer_pool); gpr_mu_init(&m->mu); *client = &m->client.base; *server = &m->server.base; diff --git a/test/core/util/passthru_endpoint.h b/test/core/util/passthru_endpoint.h index aa1d3a17637..97563150843 100644 --- a/test/core/util/passthru_endpoint.h +++ b/test/core/util/passthru_endpoint.h @@ -37,6 +37,7 @@ #include "src/core/lib/iomgr/endpoint.h" void grpc_passthru_endpoint_create(grpc_endpoint **client, - grpc_endpoint **server); + grpc_endpoint **server, + grpc_buffer_pool *buffer_pool); #endif diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c index a5c8c496502..dd444236e97 100644 --- a/test/core/util/port_server_client.c +++ b/test/core/util/port_server_client.c @@ -99,9 +99,11 @@ void grpc_free_port_using_server(char *server, int port) { req.http.path = path; grpc_httpcli_context_init(&context); - grpc_httpcli_get(&exec_ctx, &context, &pr.pops, &req, + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_httpcli_get(&exec_ctx, &context, &pr.pops, buffer_pool, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), grpc_closure_create(freed_port_from_server, &pr), &rsp); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); gpr_mu_lock(pr.mu); while (!pr.done) { grpc_pollset_worker *worker = NULL; @@ -167,10 +169,12 @@ static void got_port_from_server(grpc_exec_ctx *exec_ctx, void *arg, req.http.path = "/get"; grpc_http_response_destroy(&pr->response); memset(&pr->response, 0, sizeof(pr->response)); - grpc_httpcli_get(exec_ctx, pr->ctx, &pr->pops, &req, + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_httpcli_get(exec_ctx, pr->ctx, &pr->pops, buffer_pool, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), grpc_closure_create(got_port_from_server, pr), &pr->response); + grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); return; } GPR_ASSERT(response); @@ -211,9 +215,12 @@ int grpc_pick_port_using_server(char *server) { req.http.path = "/get"; grpc_httpcli_context_init(&context); - grpc_httpcli_get( - &exec_ctx, &context, &pr.pops, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), - grpc_closure_create(got_port_from_server, &pr), &pr.response); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_httpcli_get(&exec_ctx, &context, &pr.pops, buffer_pool, &req, + GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), + grpc_closure_create(got_port_from_server, &pr), + &pr.response); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(pr.mu); while (pr.port == -1) { diff --git a/test/core/util/test_tcp_server.c b/test/core/util/test_tcp_server.c index 8a0b3932d86..6890da47306 100644 --- a/test/core/util/test_tcp_server.c +++ b/test/core/util/test_tcp_server.c @@ -72,8 +72,8 @@ void test_tcp_server_start(test_tcp_server *server, int port) { addr.sin_port = htons((uint16_t)port); memset(&addr.sin_addr, 0, sizeof(addr.sin_addr)); - grpc_error *error = grpc_tcp_server_create(&server->shutdown_complete, NULL, - &server->tcp_server); + grpc_error *error = grpc_tcp_server_create( + &exec_ctx, &server->shutdown_complete, NULL, &server->tcp_server); GPR_ASSERT(error == GRPC_ERROR_NONE); error = grpc_tcp_server_add_port(server->tcp_server, &addr, sizeof(addr), &port_added); From 30ff60ec369e5c92bed0ce4f64643614117e24a9 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 14:54:27 -0700 Subject: [PATCH 055/286] Tests compile --- .../core/end2end/fixtures/h2_sockpair+trace.c | 4 ++- test/core/end2end/fixtures/h2_sockpair.c | 4 ++- .../core/end2end/fixtures/h2_sockpair_1byte.c | 4 ++- test/core/end2end/fixtures/http_proxy.c | 10 +++---- test/core/end2end/fuzzers/api_fuzzer.c | 11 +++++++- test/core/end2end/fuzzers/client_fuzzer.c | 5 +++- test/core/end2end/fuzzers/server_fuzzer.c | 5 +++- test/core/iomgr/tcp_client_posix_test.c | 4 +-- test/core/iomgr/tcp_posix_test.c | 26 ++++++++++++++----- test/core/iomgr/tcp_server_posix_test.c | 15 +++++++---- test/core/security/secure_endpoint_test.c | 4 ++- 11 files changed, 66 insertions(+), 26 deletions(-) diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c index b8a5257ab2a..fe16d056513 100644 --- a/test/core/end2end/fixtures/h2_sockpair+trace.c +++ b/test/core/end2end/fixtures/h2_sockpair+trace.c @@ -91,7 +91,9 @@ static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( f.fixture_data = sfd; f.cq = grpc_completion_queue_create(NULL); - *sfd = grpc_iomgr_create_endpoint_pair("fixture", 65536); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + *sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 65536); + grpc_buffer_pool_unref(buffer_pool); return f; } diff --git a/test/core/end2end/fixtures/h2_sockpair.c b/test/core/end2end/fixtures/h2_sockpair.c index a57990d6e73..77847adb9c7 100644 --- a/test/core/end2end/fixtures/h2_sockpair.c +++ b/test/core/end2end/fixtures/h2_sockpair.c @@ -90,7 +90,9 @@ static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( f.fixture_data = sfd; f.cq = grpc_completion_queue_create(NULL); - *sfd = grpc_iomgr_create_endpoint_pair("fixture", 65536); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + *sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 65536); + grpc_buffer_pool_unref(buffer_pool); return f; } diff --git a/test/core/end2end/fixtures/h2_sockpair_1byte.c b/test/core/end2end/fixtures/h2_sockpair_1byte.c index 50aac8045a9..04678f168a7 100644 --- a/test/core/end2end/fixtures/h2_sockpair_1byte.c +++ b/test/core/end2end/fixtures/h2_sockpair_1byte.c @@ -90,7 +90,9 @@ static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( f.fixture_data = sfd; f.cq = grpc_completion_queue_create(NULL); - *sfd = grpc_iomgr_create_endpoint_pair("fixture", 1); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + *sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 1); + grpc_buffer_pool_unref(buffer_pool); return f; } diff --git a/test/core/end2end/fixtures/http_proxy.c b/test/core/end2end/fixtures/http_proxy.c index 22533b9694c..bc24cb33cf6 100644 --- a/test/core/end2end/fixtures/http_proxy.c +++ b/test/core/end2end/fixtures/http_proxy.c @@ -357,7 +357,7 @@ static void on_read_request_done(grpc_exec_ctx* exec_ctx, void* arg, const gpr_timespec deadline = gpr_time_add( gpr_now(GPR_CLOCK_MONOTONIC), gpr_time_from_seconds(10, GPR_TIMESPAN)); grpc_tcp_client_connect(exec_ctx, &conn->on_server_connect_done, - &conn->server_endpoint, conn->pollset_set, + &conn->server_endpoint, conn->pollset_set, NULL, (struct sockaddr*)&resolved_addresses->addrs[0].addr, resolved_addresses->addrs[0].len, deadline); grpc_resolved_addresses_destroy(resolved_addresses); @@ -417,7 +417,8 @@ static void thread_main(void* arg) { grpc_exec_ctx_finish(&exec_ctx); } -grpc_end2end_http_proxy* grpc_end2end_http_proxy_create() { +grpc_end2end_http_proxy* grpc_end2end_http_proxy_create(void) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_end2end_http_proxy* proxy = gpr_malloc(sizeof(*proxy)); memset(proxy, 0, sizeof(*proxy)); // Construct proxy address. @@ -426,8 +427,8 @@ grpc_end2end_http_proxy* grpc_end2end_http_proxy_create() { gpr_log(GPR_INFO, "Proxy address: %s", proxy->proxy_name); // Create TCP server. proxy->channel_args = grpc_channel_args_copy(NULL); - grpc_error* error = - grpc_tcp_server_create(NULL, proxy->channel_args, &proxy->server); + grpc_error* error = grpc_tcp_server_create( + &exec_ctx, NULL, proxy->channel_args, &proxy->server); GPR_ASSERT(error == GRPC_ERROR_NONE); // Bind to port. struct sockaddr_in addr; @@ -442,7 +443,6 @@ grpc_end2end_http_proxy* grpc_end2end_http_proxy_create() { // Start server. proxy->pollset = gpr_malloc(grpc_pollset_size()); grpc_pollset_init(proxy->pollset, &proxy->mu); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_tcp_server_start(&exec_ctx, proxy->server, &proxy->pollset, 1, on_accept, proxy); grpc_exec_ctx_finish(&exec_ctx); diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index 96ea82d95ea..6d676dd02e6 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -173,6 +173,7 @@ static bool is_eof(input_stream *inp) { return inp->cur == inp->end; } static gpr_timespec g_now; static grpc_server *g_server; static grpc_channel *g_channel; +static grpc_buffer_pool *g_buffer_pool; extern gpr_timespec (*gpr_now_impl)(gpr_clock_type clock_type); @@ -252,7 +253,7 @@ static void do_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { } else if (g_server != NULL) { grpc_endpoint *client; grpc_endpoint *server; - grpc_passthru_endpoint_create(&client, &server); + grpc_passthru_endpoint_create(&client, &server, g_buffer_pool); *fc->ep = client; grpc_transport *transport = @@ -520,6 +521,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int pending_pings = 0; g_active_call = new_call(NULL, ROOT); + g_buffer_pool = grpc_buffer_pool_create(); grpc_completion_queue *cq = grpc_completion_queue_create(NULL); @@ -939,6 +941,11 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { } break; } + // resize the buffer pool + case 21: { + grpc_buffer_pool_resize(g_buffer_pool, read_uint22(&inp)); + break; + } } } @@ -954,6 +961,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { .type == GRPC_QUEUE_SHUTDOWN); grpc_completion_queue_destroy(cq); + grpc_buffer_pool_unref(g_buffer_pool); + grpc_shutdown(); return 0; } diff --git a/test/core/end2end/fuzzers/client_fuzzer.c b/test/core/end2end/fuzzers/client_fuzzer.c index 00e650a30b9..90c35e6ad90 100644 --- a/test/core/end2end/fuzzers/client_fuzzer.c +++ b/test/core/end2end/fuzzers/client_fuzzer.c @@ -58,7 +58,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_init(); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_endpoint *mock_endpoint = grpc_mock_endpoint_create(discard_write); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_endpoint *mock_endpoint = + grpc_mock_endpoint_create(discard_write, buffer_pool); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_completion_queue *cq = grpc_completion_queue_create(NULL); grpc_transport *transport = diff --git a/test/core/end2end/fuzzers/server_fuzzer.c b/test/core/end2end/fuzzers/server_fuzzer.c index 79eaad70c5d..cb34927c966 100644 --- a/test/core/end2end/fuzzers/server_fuzzer.c +++ b/test/core/end2end/fuzzers/server_fuzzer.c @@ -56,7 +56,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_init(); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_endpoint *mock_endpoint = grpc_mock_endpoint_create(discard_write); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_endpoint *mock_endpoint = + grpc_mock_endpoint_create(discard_write, buffer_pool); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_mock_endpoint_put_read( &exec_ctx, mock_endpoint, gpr_slice_from_copied_buffer((const char *)data, size)); diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c index d0c10474239..a8ba0a17e48 100644 --- a/test/core/iomgr/tcp_client_posix_test.c +++ b/test/core/iomgr/tcp_client_posix_test.c @@ -111,7 +111,7 @@ void test_succeeds(void) { /* connect to it */ GPR_ASSERT(getsockname(svr_fd, (struct sockaddr *)&addr, &addr_len) == 0); grpc_closure_init(&done, must_succeed, NULL); - grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set, + grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set, NULL, (struct sockaddr *)&addr, addr_len, gpr_inf_future(GPR_CLOCK_REALTIME)); @@ -160,7 +160,7 @@ void test_fails(void) { /* connect to a broken address */ grpc_closure_init(&done, must_fail, NULL); - grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set, + grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set, NULL, (struct sockaddr *)&addr, addr_len, gpr_inf_future(GPR_CLOCK_REALTIME)); diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c index 42614567ca9..c2f857020aa 100644 --- a/test/core/iomgr/tcp_posix_test.c +++ b/test/core/iomgr/tcp_posix_test.c @@ -176,7 +176,10 @@ static void read_test(size_t num_bytes, size_t slice_size) { create_sockets(sv); - ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), slice_size, "test"); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), buffer_pool, + slice_size, "test"); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_endpoint_add_to_pollset(&exec_ctx, ep, g_pollset); written_bytes = fill_socket_partial(sv[0], num_bytes); @@ -223,8 +226,10 @@ static void large_read_test(size_t slice_size) { create_sockets(sv); - ep = grpc_tcp_create(grpc_fd_create(sv[1], "large_read_test"), slice_size, - "test"); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + ep = grpc_tcp_create(grpc_fd_create(sv[1], "large_read_test"), buffer_pool, + slice_size, "test"); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_endpoint_add_to_pollset(&exec_ctx, ep, g_pollset); written_bytes = fill_socket(sv[0]); @@ -359,8 +364,10 @@ static void write_test(size_t num_bytes, size_t slice_size) { create_sockets(sv); - ep = grpc_tcp_create(grpc_fd_create(sv[1], "write_test"), + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + ep = grpc_tcp_create(grpc_fd_create(sv[1], "write_test"), buffer_pool, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, "test"); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_endpoint_add_to_pollset(&exec_ctx, ep, g_pollset); state.ep = ep; @@ -423,8 +430,11 @@ static void release_fd_test(size_t num_bytes, size_t slice_size) { create_sockets(sv); - ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), slice_size, "test"); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), buffer_pool, + slice_size, "test"); GPR_ASSERT(grpc_tcp_fd(ep) == sv[1] && sv[1] >= 0); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_endpoint_add_to_pollset(&exec_ctx, ep, g_pollset); written_bytes = fill_socket_partial(sv[0], num_bytes); @@ -506,10 +516,12 @@ static grpc_endpoint_test_fixture create_fixture_tcp_socketpair( grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; create_sockets(sv); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); f.client_ep = grpc_tcp_create(grpc_fd_create(sv[0], "fixture:client"), - slice_size, "test"); + buffer_pool, slice_size, "test"); f.server_ep = grpc_tcp_create(grpc_fd_create(sv[1], "fixture:server"), - slice_size, "test"); + buffer_pool, slice_size, "test"); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_endpoint_add_to_pollset(&exec_ctx, f.client_ep, g_pollset); grpc_endpoint_add_to_pollset(&exec_ctx, f.server_ep, g_pollset); diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c index 6e2d1d0fc9e..f747dbc6e39 100644 --- a/test/core/iomgr/tcp_server_posix_test.c +++ b/test/core/iomgr/tcp_server_posix_test.c @@ -129,7 +129,8 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp, static void test_no_op(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_tcp_server *s; - GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, NULL, &s)); + GPR_ASSERT(GRPC_ERROR_NONE == + grpc_tcp_server_create(&exec_ctx, NULL, NULL, &s)); grpc_tcp_server_unref(&exec_ctx, s); grpc_exec_ctx_finish(&exec_ctx); } @@ -137,7 +138,8 @@ static void test_no_op(void) { static void test_no_op_with_start(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_tcp_server *s; - GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, NULL, &s)); + GPR_ASSERT(GRPC_ERROR_NONE == + grpc_tcp_server_create(&exec_ctx, NULL, NULL, &s)); LOG_TEST("test_no_op_with_start"); grpc_tcp_server_start(&exec_ctx, s, NULL, 0, on_connect, NULL); grpc_tcp_server_unref(&exec_ctx, s); @@ -148,7 +150,8 @@ static void test_no_op_with_port(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; struct sockaddr_in addr; grpc_tcp_server *s; - GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, NULL, &s)); + GPR_ASSERT(GRPC_ERROR_NONE == + grpc_tcp_server_create(&exec_ctx, NULL, NULL, &s)); LOG_TEST("test_no_op_with_port"); memset(&addr, 0, sizeof(addr)); @@ -166,7 +169,8 @@ static void test_no_op_with_port_and_start(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; struct sockaddr_in addr; grpc_tcp_server *s; - GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, NULL, &s)); + GPR_ASSERT(GRPC_ERROR_NONE == + grpc_tcp_server_create(&exec_ctx, NULL, NULL, &s)); LOG_TEST("test_no_op_with_port_and_start"); int port; @@ -226,7 +230,8 @@ static void test_connect(unsigned n) { unsigned svr1_fd_count; int svr1_port; grpc_tcp_server *s; - GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, NULL, &s)); + GPR_ASSERT(GRPC_ERROR_NONE == + grpc_tcp_server_create(&exec_ctx, NULL, NULL, &s)); unsigned i; server_weak_ref weak_ref; server_weak_ref_init(&weak_ref); diff --git a/test/core/security/secure_endpoint_test.c b/test/core/security/secure_endpoint_test.c index 1d2bf73bb1d..abc59f0b3d6 100644 --- a/test/core/security/secure_endpoint_test.c +++ b/test/core/security/secure_endpoint_test.c @@ -56,7 +56,9 @@ static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair( grpc_endpoint_test_fixture f; grpc_endpoint_pair tcp; - tcp = grpc_iomgr_create_endpoint_pair("fixture", slice_size); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + tcp = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, slice_size); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_endpoint_add_to_pollset(&exec_ctx, tcp.client, g_pollset); grpc_endpoint_add_to_pollset(&exec_ctx, tcp.server, g_pollset); From d1253a3ae4e093c02001120af1a50d8d68800aad Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 15:45:05 -0700 Subject: [PATCH 056/286] Tests pass with buffer pools plumbed in --- .../chttp2/server/insecure/server_chttp2_posix.c | 8 ++++++-- src/core/lib/iomgr/buffer_pool.c | 2 +- src/core/lib/iomgr/buffer_pool.h | 2 +- test/core/end2end/fuzzers/api_fuzzer.c | 5 +++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c index 020f67edd25..f120e7cf8d6 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c @@ -57,8 +57,12 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server *server, char *name; gpr_asprintf(&name, "fd:%d", fd); - grpc_endpoint *server_endpoint = grpc_tcp_create( - grpc_fd_create(fd, name), NULL, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, name); + grpc_buffer_pool *buffer_pool = + grpc_buffer_pool_from_channel_args(grpc_server_get_channel_args(server)); + grpc_endpoint *server_endpoint = + grpc_tcp_create(grpc_fd_create(fd, name), buffer_pool, + GRPC_TCP_DEFAULT_READ_SLICE_SIZE, name); + grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); gpr_free(name); diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 78a98027f57..766de44bf47 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -372,7 +372,7 @@ void grpc_buffer_pool_resize(grpc_buffer_pool *buffer_pool, size_t size) { */ grpc_buffer_pool *grpc_buffer_pool_from_channel_args( - grpc_channel_args *channel_args) { + const grpc_channel_args *channel_args) { for (size_t i = 0; i < channel_args->num_args; i++) { if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_BUFFER_POOL)) { if (channel_args->args[i].type == GRPC_ARG_POINTER) { diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 2ffc5b6b75b..8b202de5cd3 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -42,7 +42,7 @@ grpc_buffer_pool *grpc_buffer_pool_internal_ref(grpc_buffer_pool *buffer_pool); void grpc_buffer_pool_internal_unref(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool); grpc_buffer_pool *grpc_buffer_pool_from_channel_args( - grpc_channel_args *channel_args); + const grpc_channel_args *channel_args); typedef enum { GRPC_BULIST_AWAITING_ALLOCATION, diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index 6d676dd02e6..2d46989d116 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -232,8 +232,8 @@ void my_resolve_address(grpc_exec_ctx *exec_ctx, const char *addr, // defined in tcp_client_posix.c extern void (*grpc_tcp_client_connect_impl)( grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, const struct sockaddr *addr, - size_t addr_len, gpr_timespec deadline); + grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args, + const struct sockaddr *addr, size_t addr_len, gpr_timespec deadline); static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, gpr_timespec deadline); @@ -290,6 +290,7 @@ static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, static void my_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, + const grpc_channel_args *channel_args, const struct sockaddr *addr, size_t addr_len, gpr_timespec deadline) { sched_connect(exec_ctx, closure, ep, deadline); From 287928c69c72cdce84dc987369d38d2f0b064a77 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Sep 2016 16:04:30 -0700 Subject: [PATCH 057/286] Fix memory leaks --- src/core/lib/iomgr/tcp_client_posix.c | 1 + src/core/lib/iomgr/tcp_posix.c | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 860a4f84363..cf01623f097 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -250,6 +250,7 @@ finish: if (done) { gpr_mu_destroy(&ac->mu); gpr_free(ac->addr_str); + grpc_channel_args_destroy(ac->channel_args); gpr_free(ac); } grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index fd8fcb05c3c..b4c53ee070b 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -114,12 +114,18 @@ static void tcp_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_fd_shutdown(exec_ctx, tcp->em_fd); } -static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { +static void tcp_end_free(grpc_exec_ctx *exec_ctx, void *tcp, + grpc_error *error) { + gpr_free(tcp); +} + +static void tcp_begin_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { grpc_fd_orphan(exec_ctx, tcp->em_fd, tcp->release_fd_cb, tcp->release_fd, "tcp_unref_orphan"); gpr_slice_buffer_destroy(&tcp->last_read_buffer); gpr_free(tcp->peer_string); - gpr_free(tcp); + grpc_buffer_user_destroy(exec_ctx, &tcp->buffer_user, + grpc_closure_create(tcp_end_free, tcp)); } /*#define GRPC_TCP_REFCOUNT_DEBUG*/ @@ -132,7 +138,7 @@ static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp, reason, tcp->refcount.count, tcp->refcount.count - 1); if (gpr_unref(&tcp->refcount)) { - tcp_free(exec_ctx, tcp); + tcp_begin_free(exec_ctx, tcp); } } @@ -147,7 +153,7 @@ static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file, #define TCP_REF(tcp, reason) tcp_ref((tcp)) static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { if (gpr_unref(&tcp->refcount)) { - tcp_free(exec_ctx, tcp); + tcp_begin_free(exec_ctx, tcp); } } From b635c61e04843261729c121343cdca38fd03b3a5 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Sep 2016 08:42:04 -0700 Subject: [PATCH 058/286] Add a slice allocation scheme --- src/core/lib/iomgr/buffer_pool.c | 75 ++++++++++++++++++++++++++++++++ src/core/lib/iomgr/buffer_pool.h | 14 ++++++ 2 files changed, 89 insertions(+) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 766de44bf47..bd6559ad4b6 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -220,6 +220,52 @@ static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool, return true; } +/******************************************************************************* + * bu_slice: a slice implementation that is backed by a grpc_buffer_user + */ + +typedef struct { + gpr_slice_refcount base; + gpr_refcount refs; + grpc_buffer_user *buffer_user; + size_t size; +} bu_slice_refcount; + +static void bu_slice_ref(void *p) { + bu_slice_refcount *rc = p; + gpr_ref(&rc->refs); +} + +static void bu_slice_unref(void *p) { + bu_slice_refcount *rc = p; + if (gpr_unref(&rc->refs)) { + /* TODO(ctiller): this is dangerous, but I think safe for now: + we have no guarantee here that we're at a safe point for creating an + execution context, but we have no way of writing this code otherwise. + In the future: consider lifting gpr_slice to grpc, and offering an + internal_{ref,unref} pair that is execution context aware. Alternatively, + make exec_ctx be thread local and 'do the right thing' (whatever that is) + if NULL */ + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, rc->buffer_user, rc->size); + grpc_exec_ctx_finish(&exec_ctx); + } +} + +static gpr_slice bu_slice_create(grpc_buffer_user *buffer_user, size_t size) { + bu_slice_refcount *rc = gpr_malloc(sizeof(bu_slice_refcount) + size); + rc->base.ref = bu_slice_ref; + rc->base.unref = bu_slice_unref; + gpr_ref_init(&rc->refs, 1); + rc->buffer_user = buffer_user; + rc->size = size; + gpr_slice slice; + slice.refcount = &rc->base; + slice.data.refcounted.bytes = (uint8_t *)(rc + 1); + slice.data.refcounted.length = size; + return slice; +} + /******************************************************************************* * grpc_buffer_pool internal implementation */ @@ -284,6 +330,20 @@ static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { grpc_buffer_pool_internal_unref(exec_ctx, buffer_user->buffer_pool); } +static void bu_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, + grpc_error *error) { + grpc_buffer_user_slice_allocator *alloc_temp_storage = ts; + if (error == GRPC_ERROR_NONE) { + for (size_t i = 0; i < alloc_temp_storage->count; i++) { + gpr_slice_buffer_add(alloc_temp_storage->dest, + bu_slice_create(alloc_temp_storage->buffer_user, + alloc_temp_storage->length)); + } + } + grpc_closure_run(exec_ctx, alloc_temp_storage->on_done, + GRPC_ERROR_REF(error)); +} + typedef struct { int64_t size; grpc_buffer_pool *buffer_pool; @@ -491,3 +551,18 @@ void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, &buffer_user->buffer_pool->bpreclaimation_done_closure, GRPC_ERROR_NONE, false); } + +void grpc_buffer_user_alloc_slices( + grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, + grpc_buffer_user_slice_allocator *alloc_temp_storage, size_t length, + size_t count, gpr_slice_buffer *dest, grpc_closure *on_done) { + grpc_closure_init(&alloc_temp_storage->on_allocated, bu_allocated_slices, + alloc_temp_storage); + alloc_temp_storage->on_done = on_done; + alloc_temp_storage->length = length; + alloc_temp_storage->count = count; + alloc_temp_storage->dest = dest; + alloc_temp_storage->buffer_user = buffer_user; + grpc_buffer_user_alloc(exec_ctx, buffer_user, count * length, + &alloc_temp_storage->on_allocated); +} diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 8b202de5cd3..1ac9b62906b 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -98,4 +98,18 @@ void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user); +typedef struct grpc_buffer_user_slice_allocator { + grpc_closure on_allocated; + grpc_closure *on_done; + size_t length; + size_t count; + gpr_slice_buffer *dest; + grpc_buffer_user *buffer_user; +} grpc_buffer_user_slice_allocator; + +void grpc_buffer_user_alloc_slices( + grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, + grpc_buffer_user_slice_allocator *alloc_temp_storage, size_t length, + size_t count, gpr_slice_buffer *dest, grpc_closure *on_done); + #endif /* GRPC_CORE_LIB_IOMGR_BUFFER_POOL_H */ From 862acb9f3a42cf4bacf75ba9dd831a539c93a4f1 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 26 Sep 2016 09:48:48 -0700 Subject: [PATCH 059/286] fix shutdown crash --- include/grpc++/server.h | 3 -- src/cpp/rpcmanager/grpc_rpc_manager.cc | 2 - src/cpp/server/server_cc.cc | 61 +++++++++++++------------- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 6bbc265bc49..5b4cb6f2147 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -208,9 +208,6 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { bool shutdown_; bool shutdown_notified_; - /// The completion queue to use for server shutdown completion notification - CompletionQueue shutdown_cq_; - // TODO (sreek) : Remove num_running_cb_ and callback_cv_; // The number of threads which are running callbacks. // int num_running_cb_; diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index c47f76b5afc..58b337da634 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -64,8 +64,6 @@ GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_pollers) GrpcRpcManager::~GrpcRpcManager() { std::unique_lock lock(mu_); - // ShutdownRpcManager() and Wait() must be called before destroying the object - GPR_ASSERT(shutdown_); GPR_ASSERT(num_threads_ == 0); CleanupCompletedThreads(); diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 4ab531df42b..54ac25d76b9 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -129,9 +129,7 @@ class Server::ShutdownRequest GRPC_FINAL : public CompletionQueueTag { class ShutdownTag : public CompletionQueueTag { public: - bool FinalizeResult(void** tag, bool *status) { - return false; - } + bool FinalizeResult(void** tag, bool* status) { return false; } }; class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { @@ -196,9 +194,7 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { cq_ = nullptr; } - void ResetRequest() { - in_flight_ = false; - } + void ResetRequest() { in_flight_ = false; } void Request(grpc_server* server, grpc_completion_queue* notify_cq) { GPR_ASSERT(cq_ && !in_flight_); @@ -301,7 +297,7 @@ class Server::SyncRequestManager : public GrpcRpcManager { server_cq_(server_cq), global_callbacks_(global_callbacks) {} - static const int kRpcPollingTimeoutMsec = 500; + static const int kRpcPollingTimeoutMsec = 10; WorkStatus PollForWork(void** tag, bool* ok) GRPC_OVERRIDE { *tag = nullptr; @@ -368,6 +364,17 @@ class Server::SyncRequestManager : public GrpcRpcManager { } } + void ShutdownAndDrainCompletionQueue() { + server_cq_->Shutdown(); + + // Drain any pending items from the queue + void* tag; + bool ok; + while (server_cq_->Next(&tag, &ok)) { + // Nothing to be done here + } + } + void Start() { if (!sync_methods_.empty()) { for (auto m = sync_methods_.begin(); m != sync_methods_.end(); m++) { @@ -420,23 +427,17 @@ Server::Server( Server::~Server() { { + // TODO (sreek) Check if we can just call Shutdown() even in case where + // started_ == false. This will make things much simpler grpc::unique_lock lock(mu_); if (started_ && !shutdown_) { lock.unlock(); Shutdown(); } else if (!started_) { - // TODO (sreek): Check if we can just do this once in ~Server() (i.e - // Do not 'shutdown' queues in Shutdown() function and do it here in the - // destructor - for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); - it++) { - (*it)->Shutdown(); + // Shutdown the completion queues + for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { + (*it)->ShutdownAndDrainCompletionQueue(); } - - // TODO (sreek) Delete this - /* - cq_.Shutdown(); - */ } } @@ -571,8 +572,10 @@ void Server::ShutdownInternal(gpr_timespec deadline) { if (started_ && !shutdown_) { shutdown_ = true; + /// The completion queue to use for server shutdown completion notification + CompletionQueue shutdown_cq; ShutdownTag shutdown_tag; // Dummy shutdown tag - grpc_server_shutdown_and_notify(server_, shutdown_cq_.cq(), &shutdown_tag); + grpc_server_shutdown_and_notify(server_, shutdown_cq.cq(), &shutdown_tag); // Shutdown all RpcManagers. This will try to gracefully stop all the // threads in the RpcManagers (once they process any inflight requests) @@ -580,16 +583,15 @@ void Server::ShutdownInternal(gpr_timespec deadline) { (*it)->ShutdownRpcManager(); } - shutdown_cq_.Shutdown(); + shutdown_cq.Shutdown(); void* tag; bool ok; CompletionQueue::NextStatus status = - shutdown_cq_.AsyncNext(&tag, &ok, deadline); + shutdown_cq.AsyncNext(&tag, &ok, deadline); - // If this timed out, it means we are done with the grace-period for - // a clean shutdown. We should force a shutdown now by cancelling all - // inflight calls + // If this timed out, it means we are done with the grace period for a clean + // shutdown. We should force a shutdown now by cancelling all inflight calls if (status == CompletionQueue::NextStatus::TIMEOUT) { grpc_server_cancel_all_calls(server_); } @@ -599,14 +601,13 @@ void Server::ShutdownInternal(gpr_timespec deadline) { // Wait for threads in all RpcManagers to terminate for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { (*it)->Wait(); + (*it)->ShutdownAndDrainCompletionQueue(); } - // Shutdown the completion queues - // TODO (sreek) Move this into SyncRequestManager (or move it to Server - // destructor) - for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); - it++) { - (*it)->Shutdown(); + // Drain the shutdown queue (if the previous call to AsyncNext() timed out + // and we didn't remove the tag from the queue yet) + while(shutdown_cq.Next(&tag, &ok)) { + // Nothing to be done here } /* From 1f8d1d5afde35c05bb20f024c4af932a6199e362 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Sep 2016 10:16:14 -0700 Subject: [PATCH 060/286] Fixes --- src/core/lib/iomgr/buffer_pool.c | 42 +++++++++++++++++--------------- src/core/lib/iomgr/buffer_pool.h | 11 ++++++--- src/core/lib/iomgr/tcp_posix.c | 25 +++++++++++++++---- 3 files changed, 50 insertions(+), 28 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index bd6559ad4b6..837642f3bc8 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -249,6 +249,7 @@ static void bu_slice_unref(void *p) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_buffer_user_free(&exec_ctx, rc->buffer_user, rc->size); grpc_exec_ctx_finish(&exec_ctx); + gpr_free(rc); } } @@ -332,16 +333,15 @@ static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { static void bu_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, grpc_error *error) { - grpc_buffer_user_slice_allocator *alloc_temp_storage = ts; + grpc_buffer_user_slice_allocator *slice_allocator = ts; if (error == GRPC_ERROR_NONE) { - for (size_t i = 0; i < alloc_temp_storage->count; i++) { - gpr_slice_buffer_add(alloc_temp_storage->dest, - bu_slice_create(alloc_temp_storage->buffer_user, - alloc_temp_storage->length)); + for (size_t i = 0; i < slice_allocator->count; i++) { + gpr_slice_buffer_add_indexed(slice_allocator->dest, + bu_slice_create(slice_allocator->buffer_user, + slice_allocator->length)); } } - grpc_closure_run(exec_ctx, alloc_temp_storage->on_done, - GRPC_ERROR_REF(error)); + grpc_closure_run(exec_ctx, &slice_allocator->on_done, GRPC_ERROR_REF(error)); } typedef struct { @@ -552,17 +552,21 @@ void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, GRPC_ERROR_NONE, false); } +void grpc_buffer_user_slice_allocator_init( + grpc_buffer_user_slice_allocator *slice_allocator, + grpc_buffer_user *buffer_user, grpc_iomgr_cb_func cb, void *p) { + grpc_closure_init(&slice_allocator->on_allocated, bu_allocated_slices, + slice_allocator); + grpc_closure_init(&slice_allocator->on_done, cb, p); + slice_allocator->buffer_user = buffer_user; +} + void grpc_buffer_user_alloc_slices( - grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, - grpc_buffer_user_slice_allocator *alloc_temp_storage, size_t length, - size_t count, gpr_slice_buffer *dest, grpc_closure *on_done) { - grpc_closure_init(&alloc_temp_storage->on_allocated, bu_allocated_slices, - alloc_temp_storage); - alloc_temp_storage->on_done = on_done; - alloc_temp_storage->length = length; - alloc_temp_storage->count = count; - alloc_temp_storage->dest = dest; - alloc_temp_storage->buffer_user = buffer_user; - grpc_buffer_user_alloc(exec_ctx, buffer_user, count * length, - &alloc_temp_storage->on_allocated); + grpc_exec_ctx *exec_ctx, grpc_buffer_user_slice_allocator *slice_allocator, + size_t length, size_t count, gpr_slice_buffer *dest) { + slice_allocator->length = length; + slice_allocator->count = count; + slice_allocator->dest = dest; + grpc_buffer_user_alloc(exec_ctx, slice_allocator->buffer_user, count * length, + &slice_allocator->on_allocated); } diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 1ac9b62906b..968454ec949 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -100,16 +100,19 @@ void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, typedef struct grpc_buffer_user_slice_allocator { grpc_closure on_allocated; - grpc_closure *on_done; + grpc_closure on_done; size_t length; size_t count; gpr_slice_buffer *dest; grpc_buffer_user *buffer_user; } grpc_buffer_user_slice_allocator; +void grpc_buffer_user_slice_allocator_init( + grpc_buffer_user_slice_allocator *slice_allocator, + grpc_buffer_user *buffer_user, grpc_iomgr_cb_func cb, void *p); + void grpc_buffer_user_alloc_slices( - grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, - grpc_buffer_user_slice_allocator *alloc_temp_storage, size_t length, - size_t count, gpr_slice_buffer *dest, grpc_closure *on_done); + grpc_exec_ctx *exec_ctx, grpc_buffer_user_slice_allocator *slice_allocator, + size_t length, size_t count, gpr_slice_buffer *dest); #endif /* GRPC_CORE_LIB_IOMGR_BUFFER_POOL_H */ diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index b4c53ee070b..27a7f83b4d0 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -102,6 +102,7 @@ typedef struct { char *peer_string; grpc_buffer_user buffer_user; + grpc_buffer_user_slice_allocator slice_allocator; } grpc_tcp; static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, @@ -189,7 +190,7 @@ static void call_read_cb(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, } #define MAX_READ_IOVEC 4 -static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { +static void tcp_do_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { struct msghdr msg; struct iovec iov[MAX_READ_IOVEC]; ssize_t read_bytes; @@ -200,10 +201,6 @@ static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { GPR_ASSERT(tcp->incoming_buffer->count <= MAX_READ_IOVEC); GPR_TIMER_BEGIN("tcp_continue_read", 0); - while (tcp->incoming_buffer->count < (size_t)tcp->iov_size) { - gpr_slice_buffer_add_indexed(tcp->incoming_buffer, - gpr_slice_malloc(tcp->slice_size)); - } for (i = 0; i < tcp->incoming_buffer->count; i++) { iov[i].iov_base = GPR_SLICE_START_PTR(tcp->incoming_buffer->slices[i]); iov[i].iov_len = GPR_SLICE_LENGTH(tcp->incoming_buffer->slices[i]); @@ -260,6 +257,22 @@ static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { GPR_TIMER_END("tcp_continue_read", 0); } +static void tcp_read_allocation_done(grpc_exec_ctx *exec_ctx, void *tcp, + grpc_error *error) { + tcp_do_read(exec_ctx, tcp); +} + +static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { + if (tcp->incoming_buffer->count < (size_t)tcp->iov_size) { + grpc_buffer_user_alloc_slices( + exec_ctx, &tcp->slice_allocator, tcp->slice_size, + (size_t)tcp->iov_size - tcp->incoming_buffer->count, + tcp->incoming_buffer); + } else { + tcp_do_read(exec_ctx, tcp); + } +} + static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, grpc_error *error) { grpc_tcp *tcp = (grpc_tcp *)arg; @@ -515,6 +528,8 @@ grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, grpc_buffer_pool *buffer_pool, tcp->write_closure.cb_arg = tcp; gpr_slice_buffer_init(&tcp->last_read_buffer); grpc_buffer_user_init(&tcp->buffer_user, buffer_pool); + grpc_buffer_user_slice_allocator_init( + &tcp->slice_allocator, &tcp->buffer_user, tcp_read_allocation_done, tcp); /* Tell network status tracker about new endpoint */ grpc_network_status_register_endpoint(&tcp->base); From 61ecb9259b0a9e09d1b4f29ea8ee9ba57af0e7c7 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Sep 2016 13:22:12 -0700 Subject: [PATCH 061/286] TCP buffer pool integration done --- src/core/lib/iomgr/buffer_pool.c | 30 +++++++++++++++++++++-------- src/core/lib/iomgr/buffer_pool.h | 6 +++--- src/core/lib/iomgr/tcp_posix.c | 4 ++-- test/core/iomgr/buffer_pool_test.c | 31 +++++++++++++++++++++++++++++- test/core/util/mock_endpoint.c | 2 +- test/core/util/passthru_endpoint.c | 2 +- 6 files changed, 59 insertions(+), 16 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 837642f3bc8..16445a42653 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -115,6 +115,7 @@ static grpc_buffer_user *bulist_pop(grpc_buffer_pool *buffer_pool, buffer_user->links[list].prev; buffer_user->links[list].prev->links[list].next = buffer_user->links[list].next; + *root = buffer_user->links[list].next; } buffer_user->links[list].next = buffer_user->links[list].prev = NULL; return buffer_user; @@ -365,8 +366,8 @@ static void bp_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { gpr_free(a); } -static void bpreclaimation_done_closure(grpc_exec_ctx *exec_ctx, void *bp, - grpc_error *error) { +static void bp_reclaimation_done(grpc_exec_ctx *exec_ctx, void *bp, + grpc_error *error) { grpc_buffer_pool *buffer_pool = bp; buffer_pool->reclaiming = false; bpstep_sched(exec_ctx, buffer_pool); @@ -386,7 +387,7 @@ grpc_buffer_pool *grpc_buffer_pool_create(void) { buffer_pool->reclaiming = false; grpc_closure_init(&buffer_pool->bpstep_closure, bpstep, buffer_pool); grpc_closure_init(&buffer_pool->bpreclaimation_done_closure, - bpreclaimation_done_closure, buffer_pool); + bp_reclaimation_done, buffer_pool); for (int i = 0; i < GRPC_BULIST_COUNT; i++) { buffer_pool->roots[i] = NULL; } @@ -481,6 +482,7 @@ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, grpc_closure_list_init(&buffer_user->on_allocated); buffer_user->allocating = false; buffer_user->added_to_free_pool = false; + buffer_user->on_done_destroy = NULL; buffer_user->reclaimers[0] = NULL; buffer_user->reclaimers[1] = NULL; for (int i = 0; i < GRPC_BULIST_COUNT; i++) { @@ -488,18 +490,25 @@ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, } } -void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, - grpc_closure *on_done) { +void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, + grpc_closure *on_done) { + gpr_mu_lock(&buffer_user->mu); + GPR_ASSERT(buffer_user->on_done_destroy == NULL); buffer_user->on_done_destroy = on_done; - grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->destroy_closure, GRPC_ERROR_NONE, false); + if (buffer_user->allocated == 0) { + grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, + &buffer_user->destroy_closure, GRPC_ERROR_NONE, + false); + } + gpr_mu_unlock(&buffer_user->mu); } void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, size_t size, grpc_closure *optional_on_done) { gpr_mu_lock(&buffer_user->mu); + GPR_ASSERT(buffer_user->on_done_destroy == NULL); buffer_user->allocated += (int64_t)size; buffer_user->free_pool -= (int64_t)size; if (buffer_user->free_pool < 0) { @@ -532,6 +541,11 @@ void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, &buffer_user->add_to_free_pool_closure, GRPC_ERROR_NONE, false); } + if (buffer_user->on_done_destroy != NULL && buffer_user->allocated == 0) { + grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, + &buffer_user->destroy_closure, GRPC_ERROR_NONE, + false); + } gpr_mu_unlock(&buffer_user->mu); } diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 968454ec949..317eb6b458f 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -83,9 +83,9 @@ struct grpc_buffer_user { void grpc_buffer_user_init(grpc_buffer_user *buffer_user, grpc_buffer_pool *buffer_pool); -void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, - grpc_closure *on_done); +void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user, + grpc_closure *on_done); void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, size_t size, diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 27a7f83b4d0..8b0841cacc3 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -125,8 +125,8 @@ static void tcp_begin_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { "tcp_unref_orphan"); gpr_slice_buffer_destroy(&tcp->last_read_buffer); gpr_free(tcp->peer_string); - grpc_buffer_user_destroy(exec_ctx, &tcp->buffer_user, - grpc_closure_create(tcp_end_free, tcp)); + grpc_buffer_user_shutdown(exec_ctx, &tcp->buffer_user, + grpc_closure_create(tcp_end_free, tcp)); } /*#define GRPC_TCP_REFCOUNT_DEBUG*/ diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 7438d088acb..265ece72acd 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -78,7 +78,7 @@ grpc_closure *make_unused_reclaimer(grpc_closure *then) { static void destroy_user(grpc_buffer_user *usr) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; bool done = false; - grpc_buffer_user_destroy(&exec_ctx, usr, set_bool(&done)); + grpc_buffer_user_shutdown(&exec_ctx, usr, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } @@ -498,6 +498,34 @@ static void test_multiple_reclaims_can_be_triggered(void) { GPR_ASSERT(destructive_done); } +static void test_buffer_user_stays_allocated_until_memory_released(void) { + gpr_log(GPR_INFO, + "** test_buffer_user_stays_allocated_until_memory_released **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024 * 1024); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + bool done = false; + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, NULL); + grpc_exec_ctx_finish(&exec_ctx); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_pool_unref(p); + grpc_buffer_user_shutdown(&exec_ctx, &usr, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!done); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + } +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); @@ -516,6 +544,7 @@ int main(int argc, char **argv) { test_unused_reclaim_is_cancelled(); test_benign_reclaim_is_preferred(); test_multiple_reclaims_can_be_triggered(); + test_buffer_user_stays_allocated_until_memory_released(); grpc_shutdown(); return 0; } diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index 173a2d89630..e4c478281f5 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -95,7 +95,7 @@ static void me_really_destroy(grpc_exec_ctx *exec_ctx, void *mp, static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; - grpc_buffer_user_destroy(exec_ctx, &m->buffer_user, + grpc_buffer_user_shutdown(exec_ctx, &m->buffer_user, grpc_closure_create(me_really_destroy, m)); } diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index 239cd3e2759..bdf75ce5877 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -140,7 +140,7 @@ static void me_really_destroy(grpc_exec_ctx *exec_ctx, void *ep, static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { half *m = (half *)ep; - grpc_buffer_user_destroy(exec_ctx, &m->buffer_user, + grpc_buffer_user_shutdown(exec_ctx, &m->buffer_user, grpc_closure_create(me_really_destroy, m)); } From 579acc351b3329da7d23b05cc87d979551c08689 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Sep 2016 13:31:26 -0700 Subject: [PATCH 062/286] Ensure all memory is released back to the buffer pool --- src/core/lib/iomgr/buffer_pool.c | 6 ++++ test/core/iomgr/buffer_pool_test.c | 46 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 16445a42653..699e7078db6 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -153,12 +153,14 @@ static void bpstep(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { } while (bpscavenge(exec_ctx, buffer_pool)); bpreclaim(exec_ctx, buffer_pool, false) || bpreclaim(exec_ctx, buffer_pool, true); + grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); } static void bpstep_sched(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { if (buffer_pool->step_scheduled) return; buffer_pool->step_scheduled = true; + grpc_buffer_pool_internal_ref(buffer_pool); grpc_combiner_execute_finally(exec_ctx, buffer_pool->combiner, &buffer_pool->bpstep_closure, GRPC_ERROR_NONE, false); @@ -329,6 +331,10 @@ static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { GRPC_ERROR_CANCELLED, NULL); grpc_exec_ctx_sched(exec_ctx, buffer_user->on_done_destroy, GRPC_ERROR_NONE, NULL); + if (buffer_user->free_pool != 0) { + buffer_user->buffer_pool->free_pool += buffer_user->free_pool; + bpstep_sched(exec_ctx, buffer_user->buffer_pool); + } grpc_buffer_pool_internal_unref(exec_ctx, buffer_user->buffer_pool); } diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 265ece72acd..9d30781c312 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -524,6 +524,51 @@ static void test_buffer_user_stays_allocated_until_memory_released(void) { grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } + grpc_buffer_pool_unref(p); +} + +static void test_pools_merged_on_buffer_user_deletion(void) { + gpr_log(GPR_INFO, "** test_pools_merged_on_buffer_user_deletion **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + for (int i = 0; i < 10; i++) { + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + bool done = false; + bool reclaimer_cancelled = false; + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, false, + make_unused_reclaimer(set_bool(&reclaimer_cancelled))); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!reclaimer_cancelled); + } + { + bool allocated = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&allocated)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(allocated); + GPR_ASSERT(!reclaimer_cancelled); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_pool_unref(p); + grpc_buffer_user_shutdown(&exec_ctx, &usr, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!done); + GPR_ASSERT(!reclaimer_cancelled); + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(done); + GPR_ASSERT(reclaimer_cancelled); + } + } + grpc_buffer_pool_unref(p); } int main(int argc, char **argv) { @@ -545,6 +590,7 @@ int main(int argc, char **argv) { test_benign_reclaim_is_preferred(); test_multiple_reclaims_can_be_triggered(); test_buffer_user_stays_allocated_until_memory_released(); + test_pools_merged_on_buffer_user_deletion(); grpc_shutdown(); return 0; } From 77c6ccef18b43812fd15ebe21e942fefe6b17f08 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Mon, 26 Sep 2016 13:51:57 -0700 Subject: [PATCH 063/286] Updated changes for Windows, removed unistd.h from test files --- src/core/lib/iomgr/resolve_address_windows.c | 2 +- src/core/lib/iomgr/tcp_server_windows.c | 69 ++++++++++--------- test/core/end2end/fixtures/h2_full+trace.c | 1 - .../core/end2end/fixtures/h2_sockpair+trace.c | 1 - test/core/util/port_windows.c | 2 + 5 files changed, 38 insertions(+), 37 deletions(-) diff --git a/src/core/lib/iomgr/resolve_address_windows.c b/src/core/lib/iomgr/resolve_address_windows.c index 6e94269d281..e139293c035 100644 --- a/src/core/lib/iomgr/resolve_address_windows.c +++ b/src/core/lib/iomgr/resolve_address_windows.c @@ -125,7 +125,7 @@ static grpc_error *blocking_resolve_address_impl( { for (i = 0; i < (*addresses)->naddrs; i++) { char *buf; - grpc_sockaddr_to_string(&buf, (*addresses)->addrs[i], 0); + grpc_sockaddr_to_string(&buf, &(*addresses)->addrs[i], 0); gpr_free(buf); } } diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index b84a1095371..0e2a52bdfc8 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -35,9 +35,9 @@ #ifdef GRPC_WINSOCK_SOCKET -#include +#include "src/core/lib/iomgr/sockaddr.h" -#include "src/core/lib/iomgr/sockaddr_utils.h" +#include #include #include @@ -48,6 +48,8 @@ #include "src/core/lib/iomgr/iocp_windows.h" #include "src/core/lib/iomgr/pollset_windows.h" +#include "src/core/lib/iomgr/resolve_address.h" +#include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/socket_windows.h" #include "src/core/lib/iomgr/tcp_server.h" #include "src/core/lib/iomgr/tcp_windows.h" @@ -191,10 +193,10 @@ void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { } /* Prepare (bind) a recently-created socket for listening. */ -static grpc_error *prepare_socket(SOCKET sock, const struct sockaddr *addr, - size_t addr_len, int *port) { - struct sockaddr_storage sockname_temp; - socklen_t sockname_len; +static grpc_error *prepare_socket(SOCKET sock, const grpc_resolved_address *addr, + int *port) { + + grpc_resolved_address sockname_temp; grpc_error *error = GRPC_ERROR_NONE; error = grpc_tcp_prepare_socket(sock); @@ -202,7 +204,7 @@ static grpc_error *prepare_socket(SOCKET sock, const struct sockaddr *addr, goto failure; } - if (bind(sock, addr, (int)addr_len) == SOCKET_ERROR) { + if (bind(sock, (const struct sockaddr *)addr->addr, (int)addr->len) == SOCKET_ERROR) { error = GRPC_WSA_ERROR(WSAGetLastError(), "bind"); goto failure; } @@ -212,14 +214,14 @@ static grpc_error *prepare_socket(SOCKET sock, const struct sockaddr *addr, goto failure; } - sockname_len = sizeof(sockname_temp); - if (getsockname(sock, (struct sockaddr *)&sockname_temp, &sockname_len) == + sockname_temp.len = sizeof(struct sockaddr_storage); + if (getsockname(sock, (struct sockaddr *)sockname_temp.addr, &sockname_temp.len) == SOCKET_ERROR) { error = GRPC_WSA_ERROR(WSAGetLastError(), "getsockname"); goto failure; } - *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + *port = grpc_sockaddr_get_port(&sockname_temp); return GRPC_ERROR_NONE; failure: @@ -315,15 +317,16 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { SOCKET sock = sp->new_socket; grpc_winsocket_callback_info *info = &sp->socket->read_info; grpc_endpoint *ep = NULL; - struct sockaddr_storage peer_name; + grpc_resolved_address peer_name; char *peer_name_string; char *fd_name; - int peer_name_len = sizeof(peer_name); DWORD transfered_bytes; DWORD flags; BOOL wsa_success; int err; + peer_name.len = sizeof(struct sockaddr_storage); + /* The general mechanism for shutting down is to queue abortion calls. While this is necessary in the read/write case, it's useless for the accept case. We only need to adjust the pending callback count */ @@ -361,9 +364,9 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { gpr_log(GPR_ERROR, "setsockopt error: %s", utf8_message); gpr_free(utf8_message); } - err = getpeername(sock, (struct sockaddr *)&peer_name, &peer_name_len); + err = getpeername(sock, (struct sockaddr *)peer_name.addr, &peer_name.len); if (!err) { - peer_name_string = grpc_sockaddr_to_uri((struct sockaddr *)&peer_name); + peer_name_string = grpc_sockaddr_to_uri(&peer_name); } else { char *utf8_message = gpr_format_message(WSAGetLastError()); gpr_log(GPR_ERROR, "getpeername error: %s", utf8_message); @@ -393,8 +396,8 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { } static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock, - const struct sockaddr *addr, - size_t addr_len, unsigned port_index, + const grpc_resolved_address *addr, + unsigned port_index, grpc_tcp_listener **listener) { grpc_tcp_listener *sp = NULL; int port = -1; @@ -418,7 +421,7 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock, return NULL; } - error = prepare_socket(sock, addr, addr_len, &port); + error = prepare_socket(sock, addr, &port); if (error != GRPC_ERROR_NONE) { return error; } @@ -449,15 +452,15 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock, return GRPC_ERROR_NONE; } -grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, - size_t addr_len, int *port) { +grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, + const grpc_resolved_address *addr, + int *port) { grpc_tcp_listener *sp = NULL; SOCKET sock; - struct sockaddr_in6 addr6_v4mapped; - struct sockaddr_in6 wildcard; - struct sockaddr *allocated_addr = NULL; - struct sockaddr_storage sockname_temp; - socklen_t sockname_len; + grpc_resolved_address addr6_v4mapped; + grpc_resolved_address wildcard; + grpc_resolved_address *allocated_addr = NULL; + grpc_resolved_address sockname_temp; unsigned port_index = 0; grpc_error *error = GRPC_ERROR_NONE; @@ -469,13 +472,13 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, as some previously created listener. */ if (grpc_sockaddr_get_port(addr) == 0) { for (sp = s->head; sp; sp = sp->next) { - sockname_len = sizeof(sockname_temp); + sockname_temp.len = sizeof(struct sockaddr_storage); if (0 == getsockname(sp->socket->socket, - (struct sockaddr *)&sockname_temp, &sockname_len)) { - *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + (struct sockaddr *)sockname_temp.addr, &sockname_temp.len)) { + *port = grpc_sockaddr_get_port(&sockname_temp); if (*port > 0) { - allocated_addr = gpr_malloc(addr_len); - memcpy(allocated_addr, addr, addr_len); + allocated_addr = gpr_malloc(sizeof(grpc_resolved_address)); + memcpy(allocated_addr, addr, sizeof(grpc_resolved_address)); grpc_sockaddr_set_port(allocated_addr, *port); addr = allocated_addr; break; @@ -485,16 +488,14 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, } if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) { - addr = (const struct sockaddr *)&addr6_v4mapped; - addr_len = sizeof(addr6_v4mapped); + addr = &addr6_v4mapped; } /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */ if (grpc_sockaddr_is_wildcard(addr, port)) { grpc_sockaddr_make_wildcard6(*port, &wildcard); - addr = (struct sockaddr *)&wildcard; - addr_len = sizeof(wildcard); + addr = &wildcard; } sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0, @@ -504,7 +505,7 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, goto done; } - error = add_socket_to_server(s, sock, addr, addr_len, port_index, &sp); + error = add_socket_to_server(s, sock, addr, port_index, &sp); done: gpr_free(allocated_addr); diff --git a/test/core/end2end/fixtures/h2_full+trace.c b/test/core/end2end/fixtures/h2_full+trace.c index 46582e3190d..e25b5e33470 100644 --- a/test/core/end2end/fixtures/h2_full+trace.c +++ b/test/core/end2end/fixtures/h2_full+trace.c @@ -34,7 +34,6 @@ #include "test/core/end2end/end2end_tests.h" #include -#include #include #include diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c index 356a359784b..d0925e51099 100644 --- a/test/core/end2end/fixtures/h2_sockpair+trace.c +++ b/test/core/end2end/fixtures/h2_sockpair+trace.c @@ -34,7 +34,6 @@ #include "test/core/end2end/end2end_tests.h" #include -#include #include #include diff --git a/test/core/util/port_windows.c b/test/core/util/port_windows.c index db9787dec6d..0c50a466441 100644 --- a/test/core/util/port_windows.c +++ b/test/core/util/port_windows.c @@ -35,6 +35,8 @@ #include "test/core/util/test_config.h" #if defined(GRPC_WINSOCK_SOCKET) && defined(GRPC_TEST_PICK_PORT) +#include "src/core/lib/iomgr/sockaddr.h" + #include "test/core/util/port.h" #include From dedb923b6e8c5dc01cf711df4901b7bceb427789 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 26 Sep 2016 13:54:04 -0700 Subject: [PATCH 064/286] Clang format --- .../client_config/initial_connect_string.c | 4 +- .../client_config/initial_connect_string.h | 4 +- src/core/ext/client_config/parse_address.c | 6 +-- src/core/ext/client_config/subchannel.c | 3 +- src/core/ext/lb_policy/grpclb/grpclb.c | 7 ++- .../ext/resolver/sockaddr/sockaddr_resolver.c | 7 +-- .../chttp2/client/insecure/channel_create.c | 3 +- .../client/secure/secure_channel_create.c | 6 +-- src/core/lib/http/httpcli.c | 5 +- src/core/lib/iomgr/iomgr_uv.c | 4 +- src/core/lib/iomgr/pollset_set_windows.c | 2 +- src/core/lib/iomgr/pollset_uv.c | 10 ++-- src/core/lib/iomgr/port.h | 2 +- src/core/lib/iomgr/resolve_address_uv.c | 13 ++--- src/core/lib/iomgr/sockaddr_utils.c | 24 ++++++---- .../lib/iomgr/socket_utils_common_posix.c | 8 ++-- src/core/lib/iomgr/socket_utils_linux.c | 7 +-- src/core/lib/iomgr/socket_utils_posix.c | 7 +-- src/core/lib/iomgr/socket_utils_posix.h | 8 ++-- src/core/lib/iomgr/tcp_client_posix.c | 3 +- src/core/lib/iomgr/tcp_client_uv.c | 15 +++--- src/core/lib/iomgr/tcp_client_windows.c | 7 +-- src/core/lib/iomgr/tcp_server_posix.c | 10 ++-- src/core/lib/iomgr/tcp_server_uv.c | 31 ++++++------ src/core/lib/iomgr/tcp_server_windows.c | 19 ++++---- src/core/lib/iomgr/tcp_uv.c | 47 +++++++++---------- src/core/lib/iomgr/timer_uv.c | 12 ++--- src/core/lib/iomgr/unix_sockets_posix.c | 9 ++-- src/core/lib/iomgr/unix_sockets_posix.h | 6 ++- src/core/lib/tsi/ssl_transport_security.c | 2 +- test/core/end2end/fixtures/http_proxy.c | 2 +- test/core/iomgr/sockaddr_utils_test.c | 7 +-- test/core/iomgr/tcp_client_posix_test.c | 6 ++- test/core/iomgr/tcp_server_posix_test.c | 27 ++++++----- .../surface/concurrent_connectivity_test.c | 3 +- test/core/util/test_tcp_server.c | 4 +- 36 files changed, 173 insertions(+), 167 deletions(-) diff --git a/src/core/ext/client_config/initial_connect_string.c b/src/core/ext/client_config/initial_connect_string.c index 61683dd635b..ae54e2d0162 100644 --- a/src/core/ext/client_config/initial_connect_string.c +++ b/src/core/ext/client_config/initial_connect_string.c @@ -35,8 +35,8 @@ #include -extern void grpc_set_default_initial_connect_string(grpc_resolved_address **addr, - gpr_slice *initial_str); +extern void grpc_set_default_initial_connect_string( + grpc_resolved_address **addr, gpr_slice *initial_str); static grpc_set_initial_connect_string_func g_set_initial_connect_string_func = grpc_set_default_initial_connect_string; diff --git a/src/core/ext/client_config/initial_connect_string.h b/src/core/ext/client_config/initial_connect_string.h index 6d5301fde52..44ddc3af9de 100644 --- a/src/core/ext/client_config/initial_connect_string.h +++ b/src/core/ext/client_config/initial_connect_string.h @@ -38,8 +38,8 @@ #include "src/core/lib/iomgr/resolve_address.h" -typedef void (*grpc_set_initial_connect_string_func)(grpc_resolved_address **addr, - gpr_slice *initial_str); +typedef void (*grpc_set_initial_connect_string_func)( + grpc_resolved_address **addr, gpr_slice *initial_str); void grpc_test_set_initial_connect_string_function( grpc_set_initial_connect_string_func func); diff --git a/src/core/ext/client_config/parse_address.c b/src/core/ext/client_config/parse_address.c index 13f1f4da977..785e6bec51e 100644 --- a/src/core/ext/client_config/parse_address.c +++ b/src/core/ext/client_config/parse_address.c @@ -31,8 +31,8 @@ * */ -#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/ext/client_config/parse_address.h" +#include "src/core/lib/iomgr/sockaddr.h" #include #include @@ -59,9 +59,7 @@ int parse_unix(grpc_uri *uri, grpc_resolved_address *resolved_addr) { #else /* GRPC_HAVE_UNIX_SOCKET */ -int parse_unix(grpc_uri *uri, grpc_resolved_address *resolved_addr) { - abort(); -} +int parse_unix(grpc_uri *uri, grpc_resolved_address *resolved_addr) { abort(); } #endif /* GRPC_HAVE_UNIX_SOCKET */ diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_config/subchannel.c index 66feac65c35..6818e92404e 100644 --- a/src/core/ext/client_config/subchannel.c +++ b/src/core/ext/client_config/subchannel.c @@ -320,7 +320,8 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx, c->filters = NULL; } c->addr = gpr_malloc(sizeof(grpc_resolved_address)); - if (args->addr->len) memcpy(c->addr, args->addr, sizeof(grpc_resolved_address)); + if (args->addr->len) + memcpy(c->addr, args->addr, sizeof(grpc_resolved_address)); c->pollset_set = grpc_pollset_set_create(); grpc_set_initial_connect_string(&c->addr, &c->initial_connect_string); c->args = grpc_channel_args_copy(args->args); diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index 8a2fe6d72e9..8f8eaffcb48 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -582,13 +582,12 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, } if (args->addresses->addresses[i].is_balancer) { if (addr_index == 0) { - addr_strs[addr_index++] = grpc_sockaddr_to_uri( - &args->addresses->addresses[i].address); + addr_strs[addr_index++] = + grpc_sockaddr_to_uri(&args->addresses->addresses[i].address); } else { GPR_ASSERT(grpc_sockaddr_to_string( &addr_strs[addr_index++], - &args->addresses->addresses[i].address, - true) == 0); + &args->addresses->addresses[i].address, true) == 0); } } } diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index 446586e33bf..a58dab10fc9 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -161,9 +161,10 @@ char *unix_get_default_authority(grpc_resolver_factory *factory, static void do_nothing(void *ignored) {} -static grpc_resolver *sockaddr_create( - grpc_resolver_args *args, const char *default_lb_policy_name, - int parse(grpc_uri *uri, grpc_resolved_address *dst)) { +static grpc_resolver *sockaddr_create(grpc_resolver_args *args, + const char *default_lb_policy_name, + int parse(grpc_uri *uri, + grpc_resolved_address *dst)) { bool errors_found = false; sockaddr_resolver *r; gpr_slice path_slice; diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c index 0d34247ae39..e3c68f6c003 100644 --- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c +++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c @@ -150,8 +150,7 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, c->tcp = NULL; grpc_closure_init(&c->connected, connected, c); grpc_tcp_client_connect(exec_ctx, &c->connected, &c->tcp, - args->interested_parties, args->addr, - args->deadline); + args->interested_parties, args->addr, args->deadline); } static const grpc_connector_vtable connector_vtable = { diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c index 4240827c298..1285eb3f8ba 100644 --- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c @@ -208,9 +208,9 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, GPR_ASSERT(c->connecting_endpoint == NULL); gpr_mu_unlock(&c->mu); grpc_closure_init(&c->connected_closure, connected, c); - grpc_tcp_client_connect( - exec_ctx, &c->connected_closure, &c->newly_connecting_endpoint, - args->interested_parties, args->addr, args->deadline); + grpc_tcp_client_connect(exec_ctx, &c->connected_closure, + &c->newly_connecting_endpoint, + args->interested_parties, args->addr, args->deadline); } static const grpc_connector_vtable connector_vtable = { diff --git a/src/core/lib/http/httpcli.c b/src/core/lib/http/httpcli.c index a7c70e2091d..55de1b59905 100644 --- a/src/core/lib/http/httpcli.c +++ b/src/core/lib/http/httpcli.c @@ -223,9 +223,8 @@ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, } addr = &req->addresses->addrs[req->next_address++]; grpc_closure_init(&req->connected, on_connected, req); - grpc_tcp_client_connect( - exec_ctx, &req->connected, &req->ep, req->context->pollset_set, - addr, req->deadline); + grpc_tcp_client_connect(exec_ctx, &req->connected, &req->ep, + req->context->pollset_set, addr, req->deadline); } static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { diff --git a/src/core/lib/iomgr/iomgr_uv.c b/src/core/lib/iomgr/iomgr_uv.c index 4c8acfbd96e..96516ff1670 100644 --- a/src/core/lib/iomgr/iomgr_uv.c +++ b/src/core/lib/iomgr/iomgr_uv.c @@ -44,8 +44,6 @@ void grpc_iomgr_platform_init(void) { grpc_register_tracer("tcp", &grpc_tcp_trace); } void grpc_iomgr_platform_flush(void) {} -void grpc_iomgr_platform_shutdown(void) { - grpc_pollset_global_shutdown(); -} +void grpc_iomgr_platform_shutdown(void) { grpc_pollset_global_shutdown(); } #endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/pollset_set_windows.c b/src/core/lib/iomgr/pollset_set_windows.c index 293893f18eb..645650db9be 100644 --- a/src/core/lib/iomgr/pollset_set_windows.c +++ b/src/core/lib/iomgr/pollset_set_windows.c @@ -31,8 +31,8 @@ * */ -#include "src/core/lib/iomgr/port.h" #include +#include "src/core/lib/iomgr/port.h" #ifdef GRPC_WINSOCK_SOCKET diff --git a/src/core/lib/iomgr/pollset_uv.c b/src/core/lib/iomgr/pollset_uv.c index 2c41a58c309..b304eb64dea 100644 --- a/src/core/lib/iomgr/pollset_uv.c +++ b/src/core/lib/iomgr/pollset_uv.c @@ -42,13 +42,9 @@ gpr_mu grpc_polling_mu; -size_t grpc_pollset_size() { - return 1; -} +size_t grpc_pollset_size() { return 1; } -void grpc_pollset_global_init(void) { - gpr_mu_init(&grpc_polling_mu); -} +void grpc_pollset_global_init(void) { gpr_mu_init(&grpc_polling_mu); } void grpc_pollset_global_shutdown(void) { gpr_mu_destroy(&grpc_polling_mu); } @@ -57,7 +53,7 @@ void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu) { } void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_closure *closure) { + grpc_closure *closure) { grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_NONE, NULL); } diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h index fd300082d75..c0bb3b5a23e 100644 --- a/src/core/lib/iomgr/port.h +++ b/src/core/lib/iomgr/port.h @@ -123,7 +123,7 @@ #endif #if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \ - defined(GRPC_CUSTOM_SOCKET) + defined(GRPC_UV) != \ + defined(GRPC_CUSTOM_SOCKET) + defined(GRPC_UV) != \ 1 #error Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET #endif diff --git a/src/core/lib/iomgr/resolve_address_uv.c b/src/core/lib/iomgr/resolve_address_uv.c index f206c63d79a..76170722f2e 100644 --- a/src/core/lib/iomgr/resolve_address_uv.c +++ b/src/core/lib/iomgr/resolve_address_uv.c @@ -56,18 +56,16 @@ typedef struct request { struct addrinfo *hints; } request; -static grpc_error *handle_addrinfo_result(int status, - struct addrinfo *result, +static grpc_error *handle_addrinfo_result(int status, struct addrinfo *result, grpc_resolved_addresses **addresses) { - struct addrinfo *resp; size_t i; if (status != 0) { grpc_error *error; *addresses = NULL; error = GRPC_ERROR_CREATE("getaddrinfo failed"); - error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, - uv_strerror(status)); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); return error; } (*addresses) = gpr_malloc(sizeof(grpc_resolved_addresses)); @@ -168,8 +166,6 @@ done: return err; } - - grpc_error *(*grpc_blocking_resolve_address)( const char *name, const char *default_port, grpc_resolved_addresses **addresses) = blocking_resolve_address_impl; @@ -217,8 +213,7 @@ static void resolve_address_impl(grpc_exec_ctx *exec_ctx, const char *name, if (s != 0) { *addrs = NULL; err = GRPC_ERROR_CREATE("getaddrinfo failed"); - err = grpc_error_set_str(err, GRPC_ERROR_STR_OS_ERROR, - uv_strerror(s)); + err = grpc_error_set_str(err, GRPC_ERROR_STR_OS_ERROR, uv_strerror(s)); grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL); gpr_free(r); gpr_free(req); diff --git a/src/core/lib/iomgr/sockaddr_utils.c b/src/core/lib/iomgr/sockaddr_utils.c index 0333e7aaf5d..44bc2f968be 100644 --- a/src/core/lib/iomgr/sockaddr_utils.c +++ b/src/core/lib/iomgr/sockaddr_utils.c @@ -54,7 +54,8 @@ int grpc_sockaddr_is_v4mapped(const grpc_resolved_address *resolved_addr, grpc_resolved_address *resolved_addr4_out) { GPR_ASSERT(resolved_addr != resolved_addr4_out); const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; - struct sockaddr_in *addr4_out = (struct sockaddr_in *)resolved_addr4_out->addr; + struct sockaddr_in *addr4_out = + (struct sockaddr_in *)resolved_addr4_out->addr; if (addr->sa_family == AF_INET6) { const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)addr; if (memcmp(addr6->sin6_addr.s6_addr, kV4MappedPrefix, @@ -78,7 +79,8 @@ int grpc_sockaddr_to_v4mapped(const grpc_resolved_address *resolved_addr, grpc_resolved_address *resolved_addr6_out) { GPR_ASSERT(resolved_addr != resolved_addr6_out); const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; - struct sockaddr_in6 *addr6_out = (struct sockaddr_in6 *)resolved_addr6_out->addr; + struct sockaddr_in6 *addr6_out = + (struct sockaddr_in6 *)resolved_addr6_out->addr; if (addr->sa_family == AF_INET) { const struct sockaddr_in *addr4 = (const struct sockaddr_in *)addr; memset(resolved_addr6_out, 0, sizeof(*resolved_addr6_out)); @@ -92,7 +94,8 @@ int grpc_sockaddr_to_v4mapped(const grpc_resolved_address *resolved_addr, return 0; } -int grpc_sockaddr_is_wildcard(const grpc_resolved_address *resolved_addr, int *port_out) { +int grpc_sockaddr_is_wildcard(const grpc_resolved_address *resolved_addr, + int *port_out) { const struct sockaddr *addr; grpc_resolved_address addr4_normalized; if (grpc_sockaddr_is_v4mapped(resolved_addr, &addr4_normalized)) { @@ -129,7 +132,8 @@ void grpc_sockaddr_make_wildcards(int port, grpc_resolved_address *wild4_out, grpc_sockaddr_make_wildcard6(port, wild6_out); } -void grpc_sockaddr_make_wildcard4(int port, grpc_resolved_address *resolved_wild_out) { +void grpc_sockaddr_make_wildcard4(int port, + grpc_resolved_address *resolved_wild_out) { struct sockaddr_in *wild_out = (struct sockaddr_in *)resolved_wild_out->addr; GPR_ASSERT(port >= 0 && port < 65536); memset(resolved_wild_out, 0, sizeof(*resolved_wild_out)); @@ -138,8 +142,10 @@ void grpc_sockaddr_make_wildcard4(int port, grpc_resolved_address *resolved_wild resolved_wild_out->len = sizeof(struct sockaddr_in); } -void grpc_sockaddr_make_wildcard6(int port, grpc_resolved_address *resolved_wild_out) { - struct sockaddr_in6 *wild_out = (struct sockaddr_in6 *)resolved_wild_out->addr; +void grpc_sockaddr_make_wildcard6(int port, + grpc_resolved_address *resolved_wild_out) { + struct sockaddr_in6 *wild_out = + (struct sockaddr_in6 *)resolved_wild_out->addr; GPR_ASSERT(port >= 0 && port < 65536); memset(resolved_wild_out, 0, sizeof(*resolved_wild_out)); wild_out->sin6_family = AF_INET6; @@ -147,7 +153,8 @@ void grpc_sockaddr_make_wildcard6(int port, grpc_resolved_address *resolved_wild resolved_wild_out->len = sizeof(struct sockaddr_in6); } -int grpc_sockaddr_to_string(char **out, const grpc_resolved_address *resolved_addr, +int grpc_sockaddr_to_string(char **out, + const grpc_resolved_address *resolved_addr, int normalize) { const struct sockaddr *addr; const int save_errno = errno; @@ -227,7 +234,8 @@ int grpc_sockaddr_get_port(const grpc_resolved_address *resolved_addr) { } } -int grpc_sockaddr_set_port(const grpc_resolved_address *resolved_addr, int port) { +int grpc_sockaddr_set_port(const grpc_resolved_address *resolved_addr, + int port) { const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; switch (addr->sa_family) { case AF_INET: diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index 239b9b8876e..bc28bbe3166 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -264,11 +264,9 @@ static grpc_error *error_for_fd(int fd, const grpc_resolved_address *addr) { return err; } -grpc_error *grpc_create_dualstack_socket(const grpc_resolved_address *resolved_addr, - int type, - int protocol, - grpc_dualstack_mode *dsmode, - int *newfd) { +grpc_error *grpc_create_dualstack_socket( + const grpc_resolved_address *resolved_addr, int type, int protocol, + grpc_dualstack_mode *dsmode, int *newfd) { const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; int family = addr->sa_family; if (family == AF_INET6) { diff --git a/src/core/lib/iomgr/socket_utils_linux.c b/src/core/lib/iomgr/socket_utils_linux.c index 627b9d6f9c1..bf6e9e4f55f 100644 --- a/src/core/lib/iomgr/socket_utils_linux.c +++ b/src/core/lib/iomgr/socket_utils_linux.c @@ -43,14 +43,15 @@ #include #include -int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, - int nonblock, int cloexec) { +int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock, + int cloexec) { int flags = 0; GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); GPR_ASSERT(resolved_addr->len <= (socklen_t)-1); flags |= nonblock ? SOCK_NONBLOCK : 0; flags |= cloexec ? SOCK_CLOEXEC : 0; - return accept4(sockfd, (struct sockaddr *)resolved_addr->addr, (socklen_t *)&resolved_addr->len, flags); + return accept4(sockfd, (struct sockaddr *)resolved_addr->addr, + (socklen_t *)&resolved_addr->len, flags); } #endif diff --git a/src/core/lib/iomgr/socket_utils_posix.c b/src/core/lib/iomgr/socket_utils_posix.c index 0f2622eed6d..9e95c276daf 100644 --- a/src/core/lib/iomgr/socket_utils_posix.c +++ b/src/core/lib/iomgr/socket_utils_posix.c @@ -44,12 +44,13 @@ #include #include "src/core/lib/iomgr/sockaddr.h" -int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, - int nonblock, int cloexec) { +int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock, + int cloexec) { int fd, flags; GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); GPR_ASSERT(resolved_addr->len <= (socklen_t)-1); - fd = accept(sockfd, (struct sockaddr *)resolved_addr->addr, (socklen_t)resolved_addr->len); + fd = accept(sockfd, (struct sockaddr *)resolved_addr->addr, + (socklen_t)resolved_addr->len); if (fd >= 0) { if (nonblock) { flags = fcntl(fd, F_GETFL, 0); diff --git a/src/core/lib/iomgr/socket_utils_posix.h b/src/core/lib/iomgr/socket_utils_posix.h index 432cba452da..175fb2b7174 100644 --- a/src/core/lib/iomgr/socket_utils_posix.h +++ b/src/core/lib/iomgr/socket_utils_posix.h @@ -42,8 +42,8 @@ #include "src/core/lib/iomgr/error.h" /* a wrapper for accept or accept4 */ -int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, - int nonblock, int cloexec); +int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock, + int cloexec); /* set a socket to non blocking mode */ grpc_error *grpc_set_socket_nonblocking(int fd, int non_blocking); @@ -127,8 +127,8 @@ extern int grpc_forbid_dualstack_sockets_for_testing; IPv4, so that bind() or connect() see the correct family. Also, it's important to distinguish between DUALSTACK and IPV6 when listening on the [::] wildcard address. */ -grpc_error *grpc_create_dualstack_socket(const grpc_resolved_address *addr, int type, - int protocol, +grpc_error *grpc_create_dualstack_socket(const grpc_resolved_address *addr, + int type, int protocol, grpc_dualstack_mode *dsmode, int *newfd); diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index eda3279659d..0c04e23bcad 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -264,7 +264,8 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, do { GPR_ASSERT(addr->len < ~(socklen_t)0); - err = connect(fd, (const struct sockaddr *)addr->addr, (socklen_t)addr->len); + err = + connect(fd, (const struct sockaddr *)addr->addr, (socklen_t)addr->len); } while (err < 0 && errno == EINTR); addr_str = grpc_sockaddr_to_uri(addr); diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c index bed64ebe0b0..3a2cca5392a 100644 --- a/src/core/lib/iomgr/tcp_client_uv.c +++ b/src/core/lib/iomgr/tcp_client_uv.c @@ -65,7 +65,8 @@ static void tcp_close_callback(uv_handle_t *handle) { gpr_free(handle); } -static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { +static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, + grpc_error *error) { int done; grpc_uv_tcp_connect *connect = acp; if (error == GRPC_ERROR_NONE) { @@ -89,13 +90,13 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) { grpc_closure *closure = connect->closure; grpc_timer_cancel(&exec_ctx, &connect->alarm); if (status == 0) { - *connect->endpoint = grpc_tcp_create(connect->tcp_handle, - connect->addr_name); + *connect->endpoint = + grpc_tcp_create(connect->tcp_handle, connect->addr_name); } else { error = GRPC_ERROR_CREATE("Failed to connect to remote host"); error = grpc_error_set_int(error, GRPC_ERROR_INT_ERRNO, -status); - error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, - uv_strerror(status)); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); if (status == UV_ECANCELED) { error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, "Timeout occurred"); @@ -115,8 +116,8 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) { grpc_exec_ctx_finish(&exec_ctx); } -void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, - grpc_closure *closure, grpc_endpoint **ep, +void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, + grpc_endpoint **ep, grpc_pollset_set *interested_parties, const grpc_resolved_address *resolved_addr, gpr_timespec deadline) { diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index c987a3c0c50..fdd8c1a1f81 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -177,7 +177,8 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_sockaddr_make_wildcard6(0, &local_address); - status = bind(sock, (struct sockaddr *)&local_address.addr, local_address.len); + status = + bind(sock, (struct sockaddr *)&local_address.addr, local_address.len); if (status != 0) { error = GRPC_WSA_ERROR(WSAGetLastError(), "bind"); goto failure; @@ -185,8 +186,8 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, socket = grpc_winsocket_create(sock, "client"); info = &socket->write_info; - success = - ConnectEx(sock, (struct sockaddr *)&addr->addr, (int)addr->len, NULL, 0, NULL, &info->overlapped); + success = ConnectEx(sock, (struct sockaddr *)&addr->addr, (int)addr->len, + NULL, 0, NULL, &info->overlapped); /* It wouldn't be unusual to get a success immediately. But we'll still get an IOCP notification, so let's ignore it. */ diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index 6ef7a719c42..3be70726b7a 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -343,7 +343,8 @@ static grpc_error *prepare_socket(int fd, const grpc_resolved_address *addr, sockname_temp.len = sizeof(struct sockaddr_storage); - if (getsockname(fd, (struct sockaddr *)sockname_temp.addr, (socklen_t *)&sockname_temp.len) < 0) { + if (getsockname(fd, (struct sockaddr *)sockname_temp.addr, + (socklen_t *)&sockname_temp.len) < 0) { err = GRPC_OS_ERROR(errno, "getsockname"); goto error; } @@ -443,8 +444,7 @@ error: static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd, const grpc_resolved_address *addr, - unsigned port_index, - unsigned fd_index, + unsigned port_index, unsigned fd_index, grpc_tcp_listener **listener) { grpc_tcp_listener *sp = NULL; int port = -1; @@ -503,8 +503,8 @@ static grpc_error *clone_port(grpc_tcp_listener *listener, unsigned count) { int fd = -1; int port = -1; grpc_dualstack_mode dsmode; - err = grpc_create_dualstack_socket(&listener->addr, SOCK_STREAM, 0, - &dsmode, &fd); + err = grpc_create_dualstack_socket(&listener->addr, SOCK_STREAM, 0, &dsmode, + &fd); if (err != GRPC_ERROR_NONE) return err; err = prepare_socket(fd, &listener->addr, true, &port); if (err != GRPC_ERROR_NONE) return err; diff --git a/src/core/lib/iomgr/tcp_server_uv.c b/src/core/lib/iomgr/tcp_server_uv.c index 2d57715ba28..a9eaf206d04 100644 --- a/src/core/lib/iomgr/tcp_server_uv.c +++ b/src/core/lib/iomgr/tcp_server_uv.c @@ -140,7 +140,7 @@ static void tcp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { if (s->open_ports == 0) { immediately_done = 1; } - for (sp = s->head; sp; sp = sp->next){ + for (sp = s->head; sp; sp = sp->next) { gpr_log(GPR_DEBUG, "Closing uv_tcp_t handle %p", sp->handle); uv_close((uv_handle_t *)sp->handle, handle_close_callback); } @@ -192,12 +192,11 @@ static void on_connect(uv_stream_t *server, int status) { memset(&peer_name, 0, sizeof(grpc_resolved_address)); peer_name.len = sizeof(struct sockaddr_storage); err = uv_tcp_getpeername(client, (struct sockaddr *)&peer_name.addr, - (int*)&peer_name.len); + (int *)&peer_name.len); if (err == 0) { peer_name_string = grpc_sockaddr_to_uri(&peer_name); } else { - gpr_log(GPR_INFO, "uv_tcp_getpeername error: %s", - uv_strerror(status)); + gpr_log(GPR_INFO, "uv_tcp_getpeername error: %s", uv_strerror(status)); } ep = grpc_tcp_create(client, peer_name_string); gpr_log(GPR_DEBUG, "Calling on_accept_cb for server %p", sp->server); @@ -206,8 +205,7 @@ static void on_connect(uv_stream_t *server, int status) { grpc_exec_ctx_finish(&exec_ctx); } -static grpc_error *add_socket_to_server(grpc_tcp_server *s, - uv_tcp_t *handle, +static grpc_error *add_socket_to_server(grpc_tcp_server *s, uv_tcp_t *handle, const grpc_resolved_address *addr, unsigned port_index, grpc_tcp_listener **listener) { @@ -221,8 +219,8 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, status = uv_tcp_bind(handle, (struct sockaddr *)addr->addr, 0); if (status != 0) { error = GRPC_ERROR_CREATE("Failed to bind to port"); - error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, - uv_strerror(status)); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); return error; } @@ -231,8 +229,8 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, (int *)&sockname_temp.len); if (status != 0) { error = GRPC_ERROR_CREATE("getsockname failed"); - error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, - uv_strerror(status)); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); return error; } @@ -283,7 +281,8 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, if (grpc_sockaddr_get_port(addr) == 0) { for (sp = s->head; sp; sp = sp->next) { sockname_temp.len = sizeof(struct sockaddr_storage); - if (0 == uv_tcp_getsockname(sp->handle, (struct sockaddr *)&sockname_temp.addr, + if (0 == uv_tcp_getsockname(sp->handle, + (struct sockaddr *)&sockname_temp.addr, (int *)&sockname_temp.len)) { *port = grpc_sockaddr_get_port(&sockname_temp); if (*port > 0) { @@ -315,8 +314,8 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, error = add_socket_to_server(s, handle, addr, port_index, &sp); } else { error = GRPC_ERROR_CREATE("Failed to initialize UV tcp handle"); - error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, - uv_strerror(status)); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); } gpr_free(allocated_addr); @@ -344,13 +343,13 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *server, GPR_ASSERT(!server->on_accept_cb); server->on_accept_cb = on_accept_cb; server->on_accept_cb_arg = cb_arg; - for(sp = server->head; sp; sp = sp->next) { - GPR_ASSERT(uv_listen((uv_stream_t *) sp->handle, SOMAXCONN, on_connect) == 0); + for (sp = server->head; sp; sp = sp->next) { + GPR_ASSERT(uv_listen((uv_stream_t *)sp->handle, SOMAXCONN, on_connect) == + 0); } } void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {} - #endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index 0e2a52bdfc8..3de720168b7 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -193,9 +193,9 @@ void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { } /* Prepare (bind) a recently-created socket for listening. */ -static grpc_error *prepare_socket(SOCKET sock, const grpc_resolved_address *addr, +static grpc_error *prepare_socket(SOCKET sock, + const grpc_resolved_address *addr, int *port) { - grpc_resolved_address sockname_temp; grpc_error *error = GRPC_ERROR_NONE; @@ -204,7 +204,8 @@ static grpc_error *prepare_socket(SOCKET sock, const grpc_resolved_address *addr goto failure; } - if (bind(sock, (const struct sockaddr *)addr->addr, (int)addr->len) == SOCKET_ERROR) { + if (bind(sock, (const struct sockaddr *)addr->addr, (int)addr->len) == + SOCKET_ERROR) { error = GRPC_WSA_ERROR(WSAGetLastError(), "bind"); goto failure; } @@ -215,8 +216,8 @@ static grpc_error *prepare_socket(SOCKET sock, const grpc_resolved_address *addr } sockname_temp.len = sizeof(struct sockaddr_storage); - if (getsockname(sock, (struct sockaddr *)sockname_temp.addr, &sockname_temp.len) == - SOCKET_ERROR) { + if (getsockname(sock, (struct sockaddr *)sockname_temp.addr, + &sockname_temp.len) == SOCKET_ERROR) { error = GRPC_WSA_ERROR(WSAGetLastError(), "getsockname"); goto failure; } @@ -364,7 +365,8 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { gpr_log(GPR_ERROR, "setsockopt error: %s", utf8_message); gpr_free(utf8_message); } - err = getpeername(sock, (struct sockaddr *)peer_name.addr, &peer_name.len); + err = + getpeername(sock, (struct sockaddr *)peer_name.addr, &peer_name.len); if (!err) { peer_name_string = grpc_sockaddr_to_uri(&peer_name); } else { @@ -453,7 +455,7 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock, } grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, - const grpc_resolved_address *addr, + const grpc_resolved_address *addr, int *port) { grpc_tcp_listener *sp = NULL; SOCKET sock; @@ -474,7 +476,8 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, for (sp = s->head; sp; sp = sp->next) { sockname_temp.len = sizeof(struct sockaddr_storage); if (0 == getsockname(sp->socket->socket, - (struct sockaddr *)sockname_temp.addr, &sockname_temp.len)) { + (struct sockaddr *)sockname_temp.addr, + &sockname_temp.len)) { *port = grpc_sockaddr_get_port(&sockname_temp); if (*port > 0) { allocated_addr = gpr_malloc(sizeof(grpc_resolved_address)); diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index fa198fd8e1c..270708bd29a 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -74,14 +74,11 @@ static void uv_close_callback(uv_handle_t *handle) { gpr_free(handle); } -static void tcp_free(grpc_tcp *tcp) { - gpr_free(tcp); -} +static void tcp_free(grpc_tcp *tcp) { gpr_free(tcp); } /*#define GRPC_TCP_REFCOUNT_DEBUG*/ #ifdef GRPC_TCP_REFCOUNT_DEBUG -#define TCP_UNREF(tcp, reason) \ - tcp_unref((tcp), (reason), __FILE__, __LINE__) +#define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), __FILE__, __LINE__) #define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__) static void tcp_unref(grpc_tcp *tcp, const char *reason, const char *file, int line) { @@ -110,7 +107,8 @@ static void tcp_unref(grpc_tcp *tcp) { static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); } #endif -static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { +static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size, + uv_buf_t *buf) { grpc_tcp *tcp = handle->data; (void)suggested_size; tcp->read_slice = gpr_slice_malloc(GRPC_TCP_DEFAULT_READ_SLICE_SIZE); @@ -118,7 +116,8 @@ static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size, uv_buf_t *b buf->len = GPR_SLICE_LENGTH(tcp->read_slice); } -static void read_callback(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) { +static void read_callback(uv_stream_t *stream, ssize_t nread, + const uv_buf_t *buf) { gpr_slice sub; grpc_error *error; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -147,7 +146,8 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, const uv_buf_t *bu for (i = 0; i < tcp->read_slices->count; i++) { char *dump = gpr_dump_slice(tcp->read_slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII); - gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump); + gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, + dump); gpr_free(dump); } } @@ -170,11 +170,12 @@ static void uv_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, gpr_slice_buffer_reset_and_unref(read_slices); TCP_REF(tcp, "read"); // TODO(murgatroid99): figure out what the return value here means - status = uv_read_start((uv_stream_t *)tcp->handle, alloc_uv_buf, read_callback); + status = + uv_read_start((uv_stream_t *)tcp->handle, alloc_uv_buf, read_callback); if (status != 0) { error = GRPC_ERROR_CREATE("TCP Read failed at start"); - error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, - uv_strerror(status)); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); grpc_exec_ctx_sched(exec_ctx, cb, error, NULL); } if (grpc_tcp_trace) { @@ -219,8 +220,8 @@ static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, size_t i; for (i = 0; i < write_slices->count; i++) { - char *data = - gpr_dump_slice(write_slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII); + char *data = gpr_dump_slice(write_slices->slices[i], + GPR_DUMP_HEX | GPR_DUMP_ASCII); gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data); gpr_free(data); } @@ -261,24 +262,22 @@ static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, static void uv_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, grpc_pollset *pollset) { // No-op. We're ignoring pollsets currently - (void) exec_ctx; - (void) ep; - (void) pollset; - grpc_tcp *tcp = (grpc_tcp *) ep; + (void)exec_ctx; + (void)ep; + (void)pollset; + grpc_tcp *tcp = (grpc_tcp *)ep; tcp->pollset = pollset; } static void uv_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, grpc_pollset_set *pollset) { // No-op. We're ignoring pollsets currently - (void) exec_ctx; - (void) ep; - (void) pollset; + (void)exec_ctx; + (void)ep; + (void)pollset; } -static void shutdown_callback(uv_shutdown_t *req, int status) { - gpr_free(req); -} +static void shutdown_callback(uv_shutdown_t *req, int status) { gpr_free(req); } static void uv_endpoint_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; @@ -299,7 +298,7 @@ static char *uv_get_peer(grpc_endpoint *ep) { return gpr_strdup(tcp->peer_string); } -static grpc_workqueue *uv_get_workqueue(grpc_endpoint *ep) {return NULL; } +static grpc_workqueue *uv_get_workqueue(grpc_endpoint *ep) { return NULL; } static grpc_endpoint_vtable vtable = {uv_endpoint_read, uv_endpoint_write, diff --git a/src/core/lib/iomgr/timer_uv.c b/src/core/lib/iomgr/timer_uv.c index d280c8b2c87..222f1554a3f 100644 --- a/src/core/lib/iomgr/timer_uv.c +++ b/src/core/lib/iomgr/timer_uv.c @@ -42,19 +42,17 @@ #include -static void timer_close_callback(uv_handle_t *handle) { - gpr_free(handle); -} +static void timer_close_callback(uv_handle_t *handle) { gpr_free(handle); } static void stop_uv_timer(uv_timer_t *handle) { uv_timer_stop(handle); - uv_unref((uv_handle_t*) handle); + uv_unref((uv_handle_t *)handle); gpr_log(GPR_DEBUG, "Closing uv_timer_t handle %p", handle); - uv_close((uv_handle_t*) handle, timer_close_callback); + uv_close((uv_handle_t *)handle, timer_close_callback); } void run_expired_timer(uv_timer_t *handle) { - grpc_timer *timer = (grpc_timer*)handle->data; + grpc_timer *timer = (grpc_timer *)handle->data; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; gpr_log(GPR_DEBUG, "Timer callback: %p", timer); GPR_ASSERT(!timer->triggered); @@ -90,7 +88,7 @@ void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) { gpr_log(GPR_DEBUG, "Running cancelled timer callback"); timer->triggered = 1; grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_CANCELLED, NULL); - stop_uv_timer((uv_timer_t*)timer->uv_timer); + stop_uv_timer((uv_timer_t *)timer->uv_timer); } } diff --git a/src/core/lib/iomgr/unix_sockets_posix.c b/src/core/lib/iomgr/unix_sockets_posix.c index 830a0c96ffe..030acd98119 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.c +++ b/src/core/lib/iomgr/unix_sockets_posix.c @@ -69,7 +69,8 @@ int grpc_is_unix_socket(const grpc_resolved_address *resolved_addr) { return addr->sa_family == AF_UNIX; } -void grpc_unlink_if_unix_domain_socket(const grpc_resolved_address *resolved_addr) { +void grpc_unlink_if_unix_domain_socket( + const grpc_resolved_address *resolved_addr) { const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; if (addr->sa_family != AF_UNIX) { return; @@ -82,15 +83,15 @@ void grpc_unlink_if_unix_domain_socket(const grpc_resolved_address *resolved_add } } -char *grpc_sockaddr_to_uri_unix_if_possible(const grpc_resolved_address *resolved_addr) { +char *grpc_sockaddr_to_uri_unix_if_possible( + const grpc_resolved_address *resolved_addr) { const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr; if (addr->sa_family != AF_UNIX) { return NULL; } char *result; - gpr_asprintf(&result, "unix:%s", - ((struct sockaddr_un *)addr)->sun_path); + gpr_asprintf(&result, "unix:%s", ((struct sockaddr_un *)addr)->sun_path); return result; } diff --git a/src/core/lib/iomgr/unix_sockets_posix.h b/src/core/lib/iomgr/unix_sockets_posix.h index 0ce483119c3..21afd3aa158 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.h +++ b/src/core/lib/iomgr/unix_sockets_posix.h @@ -47,8 +47,10 @@ grpc_error *grpc_resolve_unix_domain_address( int grpc_is_unix_socket(const grpc_resolved_address *resolved_addr); -void grpc_unlink_if_unix_domain_socket(const grpc_resolved_address *resolved_addr); +void grpc_unlink_if_unix_domain_socket( + const grpc_resolved_address *resolved_addr); -char *grpc_sockaddr_to_uri_unix_if_possible(const grpc_resolved_address *resolved_addr); +char *grpc_sockaddr_to_uri_unix_if_possible( + const grpc_resolved_address *resolved_addr); #endif /* GRPC_CORE_LIB_IOMGR_UNIX_SOCKETS_POSIX_H */ diff --git a/src/core/lib/tsi/ssl_transport_security.c b/src/core/lib/tsi/ssl_transport_security.c index e59b661fa79..749b46e19f4 100644 --- a/src/core/lib/tsi/ssl_transport_security.c +++ b/src/core/lib/tsi/ssl_transport_security.c @@ -33,8 +33,8 @@ #include "src/core/lib/iomgr/sockaddr.h" -#include "src/core/lib/tsi/ssl_transport_security.h" #include "src/core/lib/iomgr/socket_utils.h" +#include "src/core/lib/tsi/ssl_transport_security.h" #include diff --git a/test/core/end2end/fixtures/http_proxy.c b/test/core/end2end/fixtures/http_proxy.c index 8dd4d7fc181..eeaafe49f22 100644 --- a/test/core/end2end/fixtures/http_proxy.c +++ b/test/core/end2end/fixtures/http_proxy.c @@ -430,7 +430,7 @@ grpc_end2end_http_proxy* grpc_end2end_http_proxy_create() { GPR_ASSERT(error == GRPC_ERROR_NONE); // Bind to port. grpc_resolved_address resolved_addr; - struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr; + struct sockaddr_in* addr = (struct sockaddr_in*)resolved_addr.addr; memset(&resolved_addr, 0, sizeof(resolved_addr)); addr->sin_family = AF_INET; grpc_sockaddr_set_port(&resolved_addr, proxy_port); diff --git a/test/core/iomgr/sockaddr_utils_test.c b/test/core/iomgr/sockaddr_utils_test.c index 1f89f59ef23..bb81ebe575d 100644 --- a/test/core/iomgr/sockaddr_utils_test.c +++ b/test/core/iomgr/sockaddr_utils_test.c @@ -175,8 +175,8 @@ static void test_sockaddr_is_wildcard(void) { GPR_ASSERT(port == -1); } -static void expect_sockaddr_str(const char *expected, grpc_resolved_address *addr, - int normalize) { +static void expect_sockaddr_str(const char *expected, + grpc_resolved_address *addr, int normalize) { int result; char *str; gpr_log(GPR_INFO, " expect_sockaddr_str(%s)", expected); @@ -188,7 +188,8 @@ static void expect_sockaddr_str(const char *expected, grpc_resolved_address *add gpr_free(str); } -static void expect_sockaddr_uri(const char *expected, grpc_resolved_address *addr) { +static void expect_sockaddr_uri(const char *expected, + grpc_resolved_address *addr) { char *str; gpr_log(GPR_INFO, " expect_sockaddr_uri(%s)", expected); str = grpc_sockaddr_to_uri(addr); diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c index 07aa55b1456..b544f5b21b9 100644 --- a/test/core/iomgr/tcp_client_posix_test.c +++ b/test/core/iomgr/tcp_client_posix_test.c @@ -102,7 +102,8 @@ void test_succeeds(void) { /* create a dummy server */ svr_fd = socket(AF_INET, SOCK_STREAM, 0); GPR_ASSERT(svr_fd >= 0); - GPR_ASSERT(0 == bind(svr_fd, (struct sockaddr *)addr, (socklen_t)resolved_addr.len)); + GPR_ASSERT( + 0 == bind(svr_fd, (struct sockaddr *)addr, (socklen_t)resolved_addr.len)); GPR_ASSERT(0 == listen(svr_fd, 1)); gpr_mu_lock(g_mu); @@ -110,7 +111,8 @@ void test_succeeds(void) { gpr_mu_unlock(g_mu); /* connect to it */ - GPR_ASSERT(getsockname(svr_fd, (struct sockaddr *)addr, (socklen_t *)&resolved_addr.len) == 0); + GPR_ASSERT(getsockname(svr_fd, (struct sockaddr *)addr, + (socklen_t *)&resolved_addr.len) == 0); grpc_closure_init(&done, must_succeed, NULL); grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set, &resolved_addr, gpr_inf_future(GPR_CLOCK_REALTIME)); diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c index 9e8dff61ff0..b44ab897756 100644 --- a/test/core/iomgr/tcp_server_posix_test.c +++ b/test/core/iomgr/tcp_server_posix_test.c @@ -157,8 +157,8 @@ static void test_no_op_with_port(void) { resolved_addr.len = sizeof(struct sockaddr_in); addr->sin_family = AF_INET; int port; - GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr, - &port) == GRPC_ERROR_NONE && + GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr, &port) == + GRPC_ERROR_NONE && port > 0); grpc_tcp_server_unref(&exec_ctx, s); @@ -177,8 +177,8 @@ static void test_no_op_with_port_and_start(void) { memset(&resolved_addr, 0, sizeof(resolved_addr)); resolved_addr.len = sizeof(struct sockaddr_in); addr->sin_family = AF_INET; - GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr, - &port) == GRPC_ERROR_NONE && + GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr, &port) == + GRPC_ERROR_NONE && port > 0); grpc_tcp_server_start(&exec_ctx, s, NULL, 0, on_connect, NULL); @@ -226,7 +226,8 @@ static void test_connect(unsigned n) { grpc_resolved_address resolved_addr; grpc_resolved_address resolved_addr1; struct sockaddr_storage *addr = (struct sockaddr_storage *)resolved_addr.addr; - struct sockaddr_storage *addr1 = (struct sockaddr_storage *)resolved_addr1.addr; + struct sockaddr_storage *addr1 = + (struct sockaddr_storage *)resolved_addr1.addr; unsigned svr_fd_count; int svr_port; unsigned svr1_fd_count; @@ -250,8 +251,8 @@ static void test_connect(unsigned n) { same port as a previous add_port(). */ svr1_port = grpc_pick_unused_port_or_die(); grpc_sockaddr_set_port(&resolved_addr1, svr1_port); - GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr1, - &svr_port) == GRPC_ERROR_NONE && + GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr1, &svr_port) == + GRPC_ERROR_NONE && svr_port == svr1_port); /* Bad port_index. */ @@ -272,7 +273,8 @@ static void test_connect(unsigned n) { int fd = grpc_tcp_server_port_fd(s, 0, i); GPR_ASSERT(fd >= 0); if (i == 0) { - GPR_ASSERT(getsockname(fd, (struct sockaddr *)addr, (socklen_t *)&resolved_addr.len) == 0); + GPR_ASSERT(getsockname(fd, (struct sockaddr *)addr, + (socklen_t *)&resolved_addr.len) == 0); GPR_ASSERT(resolved_addr.len <= sizeof(*addr)); } } @@ -280,7 +282,8 @@ static void test_connect(unsigned n) { int fd = grpc_tcp_server_port_fd(s, 1, i); GPR_ASSERT(fd >= 0); if (i == 0) { - GPR_ASSERT(getsockname(fd, (struct sockaddr *)addr1, (socklen_t *)&resolved_addr1.len) == 0); + GPR_ASSERT(getsockname(fd, (struct sockaddr *)addr1, + (socklen_t *)&resolved_addr1.len) == 0); GPR_ASSERT(resolved_addr1.len <= sizeof(*addr1)); } } @@ -291,7 +294,8 @@ static void test_connect(unsigned n) { on_connect_result result; int svr_fd; on_connect_result_init(&result); - tcp_connect(&exec_ctx, (struct sockaddr *)addr, (socklen_t)resolved_addr.len, &result); + tcp_connect(&exec_ctx, (struct sockaddr *)addr, + (socklen_t)resolved_addr.len, &result); GPR_ASSERT(result.server_fd >= 0); svr_fd = result.server_fd; GPR_ASSERT(grpc_tcp_server_port_fd(s, result.port_index, result.fd_index) == @@ -305,7 +309,8 @@ static void test_connect(unsigned n) { grpc_tcp_server_unref(&exec_ctx, result.server); on_connect_result_init(&result); - tcp_connect(&exec_ctx, (struct sockaddr *)addr1, (socklen_t)resolved_addr1.len, &result); + tcp_connect(&exec_ctx, (struct sockaddr *)addr1, + (socklen_t)resolved_addr1.len, &result); GPR_ASSERT(result.server_fd >= 0); GPR_ASSERT(result.server_fd != svr_fd); GPR_ASSERT(grpc_tcp_server_port_fd(s, result.port_index, result.fd_index) == diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c index 537fdf71a1f..a2470a5a57b 100644 --- a/test/core/surface/concurrent_connectivity_test.c +++ b/test/core/surface/concurrent_connectivity_test.c @@ -120,8 +120,7 @@ void bad_server_thread(void *vargs) { GPR_ASSERT(error == GRPC_ERROR_NONE); memset(&resolved_addr, 0, sizeof(resolved_addr)); addr->ss_family = AF_INET; - error = - grpc_tcp_server_add_port(s, &resolved_addr, &port); + error = grpc_tcp_server_add_port(s, &resolved_addr, &port); GPR_ASSERT(GRPC_LOG_IF_ERROR("grpc_tcp_server_add_port", error)); GPR_ASSERT(port > 0); gpr_asprintf(&args->addr, "localhost:%d", port); diff --git a/test/core/util/test_tcp_server.c b/test/core/util/test_tcp_server.c index ee2de563e86..9ac97413d45 100644 --- a/test/core/util/test_tcp_server.c +++ b/test/core/util/test_tcp_server.c @@ -78,8 +78,8 @@ void test_tcp_server_start(test_tcp_server *server, int port) { grpc_error *error = grpc_tcp_server_create(&server->shutdown_complete, NULL, &server->tcp_server); GPR_ASSERT(error == GRPC_ERROR_NONE); - error = grpc_tcp_server_add_port(server->tcp_server, &resolved_addr, - &port_added); + error = + grpc_tcp_server_add_port(server->tcp_server, &resolved_addr, &port_added); GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(port_added == port); From e9f385acdfa719bfe5c4b543c6dbfec2b9f8f552 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Sep 2016 14:54:43 -0700 Subject: [PATCH 065/286] Fixes, more tests --- src/core/lib/iomgr/buffer_pool.c | 18 +++++++- src/core/lib/iomgr/buffer_pool.h | 4 ++ src/core/lib/iomgr/tcp_posix.c | 38 ++++++++++----- test/core/iomgr/buffer_pool_test.c | 74 +++++++++++++++++++++++++++++- 4 files changed, 118 insertions(+), 16 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 699e7078db6..cb9a76b3dca 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -149,10 +149,11 @@ static void bpstep(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { grpc_buffer_pool *buffer_pool = bp; buffer_pool->step_scheduled = false; do { - if (bpalloc(exec_ctx, buffer_pool)) return; + if (bpalloc(exec_ctx, buffer_pool)) goto done; } while (bpscavenge(exec_ctx, buffer_pool)); bpreclaim(exec_ctx, buffer_pool, false) || bpreclaim(exec_ctx, buffer_pool, true); +done: grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); } @@ -335,6 +336,9 @@ static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { buffer_user->buffer_pool->free_pool += buffer_user->free_pool; bpstep_sched(exec_ctx, buffer_user->buffer_pool); } +#ifndef NDEBUG + gpr_free(buffer_user->asan_canary); +#endif grpc_buffer_pool_internal_unref(exec_ctx, buffer_user->buffer_pool); } @@ -494,6 +498,9 @@ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, for (int i = 0; i < GRPC_BULIST_COUNT; i++) { buffer_user->links[i].next = buffer_user->links[i].prev = NULL; } +#ifndef NDEBUG + buffer_user->asan_canary = gpr_malloc(1); +#endif } void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, @@ -514,7 +521,14 @@ void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, size_t size, grpc_closure *optional_on_done) { gpr_mu_lock(&buffer_user->mu); - GPR_ASSERT(buffer_user->on_done_destroy == NULL); + if (buffer_user->on_done_destroy != NULL) { + /* already shutdown */ + grpc_exec_ctx_sched( + exec_ctx, optional_on_done, + GRPC_ERROR_CREATE("Buffer pool user is already shutdown"), NULL); + gpr_mu_unlock(&buffer_user->mu); + return; + } buffer_user->allocated += (int64_t)size; buffer_user->free_pool -= (int64_t)size; if (buffer_user->free_pool < 0) { diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 317eb6b458f..2095be05d8c 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -65,6 +65,10 @@ struct grpc_buffer_user { grpc_closure allocate_closure; grpc_closure add_to_free_pool_closure; +#ifndef NDEBUG + void *asan_canary; +#endif + gpr_mu mu; int64_t allocated; int64_t free_pool; diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 8b0841cacc3..de12215bb26 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -80,6 +80,7 @@ typedef struct { msg_iovlen_type iov_size; /* Number of slices to allocate per read attempt */ size_t slice_size; gpr_refcount refcount; + gpr_atm shutdown_count; /* garbage after the last read */ gpr_slice_buffer last_read_buffer; @@ -109,24 +110,29 @@ static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, grpc_error *error); static void tcp_handle_write(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, grpc_error *error); +static void tcp_unref_closure(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, + grpc_error *error); + +static void tcp_maybe_shutdown_buffer_user(grpc_exec_ctx *exec_ctx, + grpc_tcp *tcp) { + if (gpr_atm_full_fetch_add(&tcp->shutdown_count, 1) == 0) { + grpc_buffer_user_shutdown(exec_ctx, &tcp->buffer_user, + grpc_closure_create(tcp_unref_closure, tcp)); + } +} static void tcp_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; + tcp_maybe_shutdown_buffer_user(exec_ctx, tcp); grpc_fd_shutdown(exec_ctx, tcp->em_fd); } -static void tcp_end_free(grpc_exec_ctx *exec_ctx, void *tcp, - grpc_error *error) { - gpr_free(tcp); -} - -static void tcp_begin_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { +static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { grpc_fd_orphan(exec_ctx, tcp->em_fd, tcp->release_fd_cb, tcp->release_fd, "tcp_unref_orphan"); gpr_slice_buffer_destroy(&tcp->last_read_buffer); gpr_free(tcp->peer_string); - grpc_buffer_user_shutdown(exec_ctx, &tcp->buffer_user, - grpc_closure_create(tcp_end_free, tcp)); + gpr_free(tcp); } /*#define GRPC_TCP_REFCOUNT_DEBUG*/ @@ -139,7 +145,7 @@ static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp, reason, tcp->refcount.count, tcp->refcount.count - 1); if (gpr_unref(&tcp->refcount)) { - tcp_begin_free(exec_ctx, tcp); + tcp_free(exec_ctx, tcp); } } @@ -154,16 +160,22 @@ static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file, #define TCP_REF(tcp, reason) tcp_ref((tcp)) static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { if (gpr_unref(&tcp->refcount)) { - tcp_begin_free(exec_ctx, tcp); + tcp_free(exec_ctx, tcp); } } static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); } #endif +static void tcp_unref_closure(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + TCP_UNREF(exec_ctx, arg, "buffer_user"); +} + static void tcp_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_network_status_unregister_endpoint(ep); grpc_tcp *tcp = (grpc_tcp *)ep; + tcp_maybe_shutdown_buffer_user(exec_ctx, tcp); TCP_UNREF(exec_ctx, tcp, "destroy"); } @@ -519,8 +531,10 @@ grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, grpc_buffer_pool *buffer_pool, tcp->slice_size = slice_size; tcp->iov_size = 1; tcp->finished_edge = true; - /* paired with unref in grpc_tcp_destroy */ - gpr_ref_init(&tcp->refcount, 1); + /* paired with unref in grpc_tcp_destroy, and with the shutdown for our + * buffer_user */ + gpr_ref_init(&tcp->refcount, 2); + gpr_atm_no_barrier_store(&tcp->shutdown_count, 0); tcp->em_fd = em_fd; tcp->read_closure.cb = tcp_handle_read; tcp->read_closure.cb_arg = tcp; diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 9d30781c312..23fac2f70db 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -38,6 +38,10 @@ #include "test/core/util/test_config.h" +static void inc_int_cb(grpc_exec_ctx *exec_ctx, void *a, grpc_error *error) { + ++*(int *)a; +} + static void set_bool_cb(grpc_exec_ctx *exec_ctx, void *a, grpc_error *error) { *(bool *)a = true; } @@ -524,7 +528,6 @@ static void test_buffer_user_stays_allocated_until_memory_released(void) { grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } - grpc_buffer_pool_unref(p); } static void test_pools_merged_on_buffer_user_deletion(void) { @@ -554,7 +557,6 @@ static void test_pools_merged_on_buffer_user_deletion(void) { } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_pool_unref(p); grpc_buffer_user_shutdown(&exec_ctx, &usr, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(!done); @@ -571,6 +573,72 @@ static void test_pools_merged_on_buffer_user_deletion(void) { grpc_buffer_pool_unref(p); } +static void test_one_slice(void) { + gpr_log(GPR_INFO, "** test_one_slice **"); + + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + + grpc_buffer_user_slice_allocator alloc; + int num_allocs = 0; + grpc_buffer_user_slice_allocator_init(&alloc, &usr, inc_int_cb, &num_allocs); + + gpr_slice_buffer buffer; + gpr_slice_buffer_init(&buffer); + + { + const int start_allocs = num_allocs; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc_slices(&exec_ctx, &alloc, 1024, 1, &buffer); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(num_allocs == start_allocs + 1); + } + + gpr_slice_buffer_destroy(&buffer); + destroy_user(&usr); + grpc_buffer_pool_unref(p); +} + +static void test_one_slice_deleted_late(void) { + gpr_log(GPR_INFO, "** test_one_slice_deleted_late **"); + + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + + grpc_buffer_user_slice_allocator alloc; + int num_allocs = 0; + grpc_buffer_user_slice_allocator_init(&alloc, &usr, inc_int_cb, &num_allocs); + + gpr_slice_buffer buffer; + gpr_slice_buffer_init(&buffer); + + { + const int start_allocs = num_allocs; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc_slices(&exec_ctx, &alloc, 1024, 1, &buffer); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(num_allocs == start_allocs + 1); + } + + bool done = false; + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_shutdown(&exec_ctx, &usr, set_bool(&done)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!done); + } + + grpc_buffer_pool_unref(p); + gpr_slice_buffer_destroy(&buffer); + GPR_ASSERT(done); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); @@ -591,6 +659,8 @@ int main(int argc, char **argv) { test_multiple_reclaims_can_be_triggered(); test_buffer_user_stays_allocated_until_memory_released(); test_pools_merged_on_buffer_user_deletion(); + test_one_slice(); + test_one_slice_deleted_late(); grpc_shutdown(); return 0; } From ce2ff3c0719d242fd00411f0526fe38df0282c38 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Sep 2016 15:34:20 -0700 Subject: [PATCH 066/286] Fixes --- src/core/lib/iomgr/tcp_posix.c | 5 +++++ test/core/iomgr/tcp_posix_test.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index de12215bb26..4397890c93f 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -176,6 +176,7 @@ static void tcp_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_network_status_unregister_endpoint(ep); grpc_tcp *tcp = (grpc_tcp *)ep; tcp_maybe_shutdown_buffer_user(exec_ctx, tcp); + gpr_slice_buffer_reset_and_unref(&tcp->last_read_buffer); TCP_UNREF(exec_ctx, tcp, "destroy"); } @@ -292,6 +293,7 @@ static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, if (error != GRPC_ERROR_NONE) { gpr_slice_buffer_reset_and_unref(tcp->incoming_buffer); + gpr_slice_buffer_reset_and_unref(&tcp->last_read_buffer); call_read_cb(exec_ctx, tcp, GRPC_ERROR_REF(error)); TCP_UNREF(exec_ctx, tcp, "read"); } else { @@ -558,10 +560,13 @@ int grpc_tcp_fd(grpc_endpoint *ep) { void grpc_tcp_destroy_and_release_fd(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, int *fd, grpc_closure *done) { + grpc_network_status_unregister_endpoint(ep); grpc_tcp *tcp = (grpc_tcp *)ep; GPR_ASSERT(ep->vtable == &vtable); tcp->release_fd = fd; tcp->release_fd_cb = done; + tcp_maybe_shutdown_buffer_user(exec_ctx, tcp); + gpr_slice_buffer_reset_and_unref(&tcp->last_read_buffer); TCP_UNREF(exec_ctx, tcp, "destroy"); } diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c index c2f857020aa..1c56ed05077 100644 --- a/test/core/iomgr/tcp_posix_test.c +++ b/test/core/iomgr/tcp_posix_test.c @@ -455,8 +455,10 @@ static void release_fd_test(size_t num_bytes, size_t slice_size) { "pollset_work", grpc_pollset_work(&exec_ctx, g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC), deadline))); + gpr_log(GPR_DEBUG, "wakeup: read=%" PRIdPTR " target=%" PRIdPTR, + state.read_bytes, state.target_read_bytes); gpr_mu_unlock(g_mu); - grpc_exec_ctx_finish(&exec_ctx); + grpc_exec_ctx_flush(&exec_ctx); gpr_mu_lock(g_mu); } GPR_ASSERT(state.read_bytes == state.target_read_bytes); @@ -464,6 +466,7 @@ static void release_fd_test(size_t num_bytes, size_t slice_size) { gpr_slice_buffer_destroy(&state.incoming); grpc_tcp_destroy_and_release_fd(&exec_ctx, ep, &fd, &fd_released_cb); + grpc_exec_ctx_flush(&exec_ctx); gpr_mu_lock(g_mu); while (!fd_released_done) { grpc_pollset_worker *worker = NULL; @@ -471,6 +474,7 @@ static void release_fd_test(size_t num_bytes, size_t slice_size) { "pollset_work", grpc_pollset_work(&exec_ctx, g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC), deadline))); + gpr_log(GPR_DEBUG, "wakeup: fd_released_done=%d", fd_released_done); } gpr_mu_unlock(g_mu); GPR_ASSERT(fd_released_done == 1); From 2d08f5bc8d8938445bf3b03d2da897898c4096d0 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 26 Sep 2016 16:11:02 -0700 Subject: [PATCH 067/286] fix the plugin initialization order in ServerBuilder --- src/cpp/server/server_builder.cc | 59 ++++++++++++++++---------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index e28ba5af112..eab57b4ac32 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -140,6 +140,35 @@ ServerBuilder& ServerBuilder::AddListeningPort( } std::unique_ptr ServerBuilder::BuildAndStart() { + ChannelArguments args; + for (auto option = options_.begin(); option != options_.end(); ++option) { + (*option)->UpdateArguments(&args); + (*option)->UpdatePlugins(&plugins_); + } + + for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { + (*plugin)->UpdateChannelArguments(&args); + } + + if (max_receive_message_size_ >= 0) { + args.SetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH, max_receive_message_size_); + } + + if (max_send_message_size_ >= 0) { + args.SetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH, max_send_message_size_); + } + + args.SetInt(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET, + enabled_compression_algorithms_bitset_); + if (maybe_default_compression_level_.is_set) { + args.SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL, + maybe_default_compression_level_.level); + } + if (maybe_default_compression_algorithm_.is_set) { + args.SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, + maybe_default_compression_algorithm_.algorithm); + } + // == Determine if the server has any syncrhonous methods == bool has_sync_methods = false; for (auto it = services_.begin(); it != services_.end(); ++it) { @@ -184,36 +213,6 @@ std::unique_ptr ServerBuilder::BuildAndStart() { } } - // == Channel args == - ChannelArguments args; - for (auto option = options_.begin(); option != options_.end(); ++option) { - (*option)->UpdateArguments(&args); - (*option)->UpdatePlugins(&plugins_); - } - - for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { - (*plugin)->UpdateChannelArguments(&args); - } - - if (max_receive_message_size_ >= 0) { - args.SetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH, max_receive_message_size_); - } - - if (max_send_message_size_ >= 0) { - args.SetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH, max_send_message_size_); - } - - args.SetInt(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET, - enabled_compression_algorithms_bitset_); - if (maybe_default_compression_level_.is_set) { - args.SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL, - maybe_default_compression_level_.level); - } - if (maybe_default_compression_algorithm_.is_set) { - args.SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, - maybe_default_compression_algorithm_.algorithm); - } - // TODO (sreek) Make the number of pollers configurable std::unique_ptr server( new Server(sync_server_cqs, max_receive_message_size_, &args, From 25f29afa8488b6c714d15ca46ff8d17df420233b Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Sep 2016 16:31:00 -0700 Subject: [PATCH 068/286] Beginning integration of buffer pools && chttp2 --- .../chttp2/transport/chttp2_transport.c | 108 +++++++++++++++--- .../ext/transport/chttp2/transport/internal.h | 20 +++- .../transport/chttp2/transport/stream_map.h | 3 + 3 files changed, 117 insertions(+), 14 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 77ae890c066..fcfe6e2955e 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -118,6 +118,15 @@ static void fail_pending_writes(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s, grpc_error *error); +static void benign_reclaimer(grpc_exec_ctx *exec_ctx, void *t, + grpc_error *error); +static void benign_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *t, + grpc_error *error); +static void destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *t, + grpc_error *error); +static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *t, + grpc_error *error); + /******************************************************************************* * CONSTRUCTION/DESTRUCTION/REFCOUNTING */ @@ -240,6 +249,10 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_closure_init(&t->write_action_end_locked, write_action_end_locked, t); grpc_closure_init(&t->read_action_begin, read_action_begin, t); grpc_closure_init(&t->read_action_locked, read_action_locked, t); + grpc_closure_init(&t->benign_reclaimer, benign_reclaimer, t); + grpc_closure_init(&t->destructive_reclaimer, destructive_reclaimer, t); + grpc_closure_init(&t->benign_reclaimer, benign_reclaimer_locked, t); + grpc_closure_init(&t->destructive_reclaimer, destructive_reclaimer_locked, t); grpc_chttp2_goaway_parser_init(&t->goaway_parser); grpc_chttp2_hpack_parser_init(&t->hpack_parser); @@ -645,6 +658,13 @@ static void write_action_end_locked(grpc_exec_ctx *exec_ctx, void *tp, drop_connection(exec_ctx, t, GRPC_ERROR_REF(error)); } + if (t->sent_goaway_state == GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED) { + t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SENT; + if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) { + close_transport_locked(exec_ctx, t, GRPC_ERROR_CREATE("goaway sent")); + } + } + grpc_chttp2_end_write(exec_ctx, t, GRPC_ERROR_REF(error)); switch (t->write_state) { @@ -1155,6 +1175,14 @@ void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, gpr_free(msg); } +static void send_goaway(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, + grpc_chttp2_error_code error, gpr_slice data) { + t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED; + grpc_chttp2_goaway_append(t->last_new_stream_id, (uint32_t)error, data, + &t->qbuf); + grpc_chttp2_initiate_write(exec_ctx, t, false, "goaway_sent"); +} + static void perform_transport_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op, grpc_error *error_ignored) { @@ -1169,15 +1197,9 @@ static void perform_transport_op_locked(grpc_exec_ctx *exec_ctx, } if (op->send_goaway) { - t->sent_goaway = 1; - grpc_chttp2_goaway_append( - t->last_new_stream_id, - (uint32_t)grpc_chttp2_grpc_status_to_http2_error(op->goaway_status), - gpr_slice_ref(*op->goaway_message), &t->qbuf); - close_transport = grpc_chttp2_stream_map_size(&t->stream_map) == 0 - ? GRPC_ERROR_CREATE("GOAWAY sent") - : GRPC_ERROR_NONE; - grpc_chttp2_initiate_write(exec_ctx, t, false, "goaway_sent"); + send_goaway(exec_ctx, t, + grpc_chttp2_grpc_status_to_http2_error(op->goaway_status), + gpr_slice_ref(*op->goaway_message)); } if (op->set_accept_stream) { @@ -1314,10 +1336,19 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, s->data_parser.parsing_frame = NULL; } - if (grpc_chttp2_stream_map_size(&t->stream_map) == 0 && t->sent_goaway) { - close_transport_locked( - exec_ctx, t, GRPC_ERROR_CREATE_REFERENCING( - "Last stream closed after sending GOAWAY", &error, 1)); + if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) { + if (!t->benign_reclaimer_registered) { + t->benign_reclaimer_registered = true; + grpc_buffer_user_post_reclaimer(exec_ctx, + grpc_endpoint_get_buffer_user(t->ep), + false, &t->benign_reclaimer); + } + if (t->sent_goaway_state == GRPC_CHTTP2_GOAWAY_SENT) { + close_transport_locked( + exec_ctx, t, + GRPC_ERROR_CREATE_REFERENCING( + "Last stream closed after sending GOAWAY", &error, 1)); + } } if (grpc_chttp2_list_remove_writable_stream(t, s)) { GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:remove_stream"); @@ -2045,6 +2076,57 @@ grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create( return incoming_byte_stream; } +/******************************************************************************* + * BUFFER POOLS + */ + +static void benign_reclaimer(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + grpc_chttp2_transport *t = arg; + grpc_combiner_execute(exec_ctx, t->combiner, &t->benign_reclaimer_locked, + GRPC_ERROR_REF(error), false); +} + +static void destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + grpc_chttp2_transport *t = arg; + grpc_combiner_execute(exec_ctx, t->combiner, &t->destructive_reclaimer_locked, + GRPC_ERROR_REF(error), false); +} + +static void benign_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + grpc_chttp2_transport *t = arg; + if (error == GRPC_ERROR_NONE && + grpc_chttp2_stream_map_size(&t->stream_map) == 0) { + send_goaway(exec_ctx, t, GRPC_CHTTP2_ENHANCE_YOUR_CALM, + gpr_slice_from_static_string("Buffers full")); + } + t->benign_reclaimer_registered = false; + GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "benign_reclaimer"); +} + +static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + grpc_chttp2_transport *t = arg; + size_t n = grpc_chttp2_stream_map_size(&t->stream_map); + t->destructive_reclaimer_registered = false; + if (error == GRPC_ERROR_NONE && n > 0) { + grpc_chttp2_stream *s = grpc_chttp2_stream_map_rand(&t->stream_map); + grpc_chttp2_cancel_stream( + exec_ctx, t, s, grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"), + GRPC_ERROR_INT_HTTP2_ERROR, + GRPC_CHTTP2_ENHANCE_YOUR_CALM)); + if (n > 1) { + t->destructive_reclaimer_registered = true; + grpc_buffer_user_post_reclaimer(exec_ctx, + grpc_endpoint_get_buffer_user(t->ep), + true, &t->destructive_reclaimer); + } + } + GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "destructive_reclaimer"); +} + /******************************************************************************* * TRACING */ diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h index 3263c99bde5..42e05a2b2ba 100644 --- a/src/core/ext/transport/chttp2/transport/internal.h +++ b/src/core/ext/transport/chttp2/transport/internal.h @@ -138,6 +138,12 @@ typedef enum { GRPC_NUM_SETTING_SETS } grpc_chttp2_setting_set; +typedef enum { + GRPC_CHTTP2_NO_GOAWAY_SEND, + GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED, + GRPC_CHTTP2_GOAWAY_SENT, +} grpc_chttp2_sent_goaway_state; + /* Outstanding ping request data */ typedef struct grpc_chttp2_outstanding_ping { uint8_t id[8]; @@ -249,7 +255,7 @@ struct grpc_chttp2_transport { /** have we seen a goaway */ uint8_t seen_goaway; /** have we sent a goaway */ - uint8_t sent_goaway; + grpc_chttp2_sent_goaway_state sent_goaway_state; /** are the local settings dirty and need to be sent? */ uint8_t dirtied_local_settings; @@ -316,6 +322,18 @@ struct grpc_chttp2_transport { gpr_slice goaway_text; grpc_chttp2_write_cb *write_cb_pool; + + /* buffer pool state */ + /** have we scheduled a benign cleanup? */ + bool benign_reclaimer_registered; + /** have we scheduled a destructive cleanup? */ + bool destructive_reclaimer_registered; + /** benign cleanup closure */ + grpc_closure benign_reclaimer; + grpc_closure benign_reclaimer_locked; + /** destructive cleanup closure */ + grpc_closure destructive_reclaimer; + grpc_closure destructive_reclaimer_locked; }; typedef enum { diff --git a/src/core/ext/transport/chttp2/transport/stream_map.h b/src/core/ext/transport/chttp2/transport/stream_map.h index e76312dd1a0..203f6406802 100644 --- a/src/core/ext/transport/chttp2/transport/stream_map.h +++ b/src/core/ext/transport/chttp2/transport/stream_map.h @@ -68,6 +68,9 @@ void *grpc_chttp2_stream_map_delete(grpc_chttp2_stream_map *map, uint32_t key); /* Return an existing key, or NULL if it does not exist */ void *grpc_chttp2_stream_map_find(grpc_chttp2_stream_map *map, uint32_t key); +/* Return a random entry */ +void *grpc_chttp2_stream_map_rand(grpc_chttp2_stream_map *map); + /* How many (populated) entries are in the stream map? */ size_t grpc_chttp2_stream_map_size(grpc_chttp2_stream_map *map); From 7f58f5d1cbac621c6514d76f672b086918a8cdd8 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Sep 2016 17:18:08 -0700 Subject: [PATCH 069/286] Progress on chttp2 integration --- .../ext/transport/chttp2/transport/chttp2_transport.c | 1 + src/core/ext/transport/chttp2/transport/stream_map.c | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index fcfe6e2955e..7a9a13de6bd 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -1339,6 +1339,7 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) { if (!t->benign_reclaimer_registered) { t->benign_reclaimer_registered = true; + GRPC_CHTTP2_REF_TRANSPORT(t, "benign_reclaimer"); grpc_buffer_user_post_reclaimer(exec_ctx, grpc_endpoint_get_buffer_user(t->ep), false, &t->benign_reclaimer); diff --git a/src/core/ext/transport/chttp2/transport/stream_map.c b/src/core/ext/transport/chttp2/transport/stream_map.c index 59b3a14e0a0..5f5a28446d2 100644 --- a/src/core/ext/transport/chttp2/transport/stream_map.c +++ b/src/core/ext/transport/chttp2/transport/stream_map.c @@ -151,6 +151,17 @@ size_t grpc_chttp2_stream_map_size(grpc_chttp2_stream_map *map) { return map->count - map->free; } +void *grpc_chttp2_stream_map_rand(grpc_chttp2_stream_map *map) { + if (map->count == map->free) { + return NULL; + } + if (map->free != 0) { + map->count = compact(map->keys, map->values, map->count); + map->free = 0; + } + return map->values[((size_t)rand()) % map->count]; +} + void grpc_chttp2_stream_map_for_each(grpc_chttp2_stream_map *map, void (*f)(void *user_data, uint32_t key, void *value), From 81b2bc323b79a62258c72696caa6508c4d8bed09 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 26 Sep 2016 18:00:06 -0700 Subject: [PATCH 070/286] add async client sync server scenario --- .../run_tests/performance/scenario_config.py | 503 +++++++++++------- 1 file changed, 319 insertions(+), 184 deletions(-) diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index fa401fdaafe..8166fbd4198 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -31,52 +31,49 @@ import math -WARMUP_SECONDS=5 -JAVA_WARMUP_SECONDS=15 # Java needs more warmup time for JIT to kick in. -BENCHMARK_SECONDS=30 +WARMUP_SECONDS = 5 +JAVA_WARMUP_SECONDS = 15 # Java needs more warmup time for JIT to kick in. +BENCHMARK_SECONDS = 30 -SMOKETEST='smoketest' -SCALABLE='scalable' -SWEEP='sweep' -DEFAULT_CATEGORIES=[SCALABLE, SMOKETEST] +SMOKETEST = 'smoketest' +SCALABLE = 'scalable' +SWEEP = 'sweep' +DEFAULT_CATEGORIES = [SCALABLE, SMOKETEST] SECURE_SECARGS = {'use_test_ca': True, 'server_host_override': 'foo.test.google.fr'} HISTOGRAM_PARAMS = { - 'resolution': 0.01, - 'max_possible': 60e9, + 'resolution': 0.01, + 'max_possible': 60e9, } EMPTY_GENERIC_PAYLOAD = { - 'bytebuf_params': { - 'req_size': 0, - 'resp_size': 0, - } + 'bytebuf_params': { + 'req_size': 0, + 'resp_size': 0, + } } EMPTY_PROTO_PAYLOAD = { - 'simple_params': { - 'req_size': 0, - 'resp_size': 0, - } + 'simple_params': { + 'req_size': 0, + 'resp_size': 0, + } } BIG_GENERIC_PAYLOAD = { - 'bytebuf_params': { - 'req_size': 65536, - 'resp_size': 65536, - } + 'bytebuf_params': { + 'req_size': 65536, + 'resp_size': 65536, + } } # target number of RPCs outstanding on across all client channels in # non-ping-pong tests (since we can only specify per-channel numbers, the # actual target will be slightly higher) -OUTSTANDING_REQUESTS={ - 'async': 6400, - 'sync': 1000 -} +OUTSTANDING_REQUESTS = {'async': 6400, 'sync': 1000} # wide is the number of client channels in multi-channel tests (1 otherwise) -WIDE=64 +WIDE = 64 def _get_secargs(is_secure): @@ -102,8 +99,10 @@ def geometric_progression(start, stop, step): n *= step -def _ping_pong_scenario(name, rpc_type, - client_type, server_type, +def _ping_pong_scenario(name, + rpc_type, + client_type, + server_type, secure=True, use_generic_payload=False, unconstrained_client=None, @@ -117,29 +116,29 @@ def _ping_pong_scenario(name, rpc_type, outstanding=None): """Creates a basic ping pong scenario.""" scenario = { - 'name': name, - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': client_type, - 'security_params': _get_secargs(secure), - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': rpc_type, - 'load_params': { - 'closed_loop': {} + 'name': name, + 'num_servers': 1, + 'num_clients': 1, + 'client_config': { + 'client_type': client_type, + 'security_params': _get_secargs(secure), + 'outstanding_rpcs_per_channel': 1, + 'client_channels': 1, + 'async_client_threads': 1, + 'rpc_type': rpc_type, + 'load_params': { + 'closed_loop': {} + }, + 'histogram_params': HISTOGRAM_PARAMS, }, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': server_type, - 'security_params': _get_secargs(secure), - 'core_limit': server_core_limit, - 'async_server_threads': async_server_threads, - }, - 'warmup_seconds': warmup_seconds, - 'benchmark_seconds': BENCHMARK_SECONDS + 'server_config': { + 'server_type': server_type, + 'security_params': _get_secargs(secure), + 'core_limit': server_core_limit, + 'async_server_threads': async_server_threads, + }, + 'warmup_seconds': warmup_seconds, + 'benchmark_seconds': BENCHMARK_SECONDS } if use_generic_payload: if server_type != 'ASYNC_GENERIC_SERVER': @@ -151,7 +150,8 @@ def _ping_pong_scenario(name, rpc_type, scenario['client_config']['payload_config'] = EMPTY_PROTO_PAYLOAD if unconstrained_client: - outstanding_calls = outstanding if outstanding is not None else OUTSTANDING_REQUESTS[unconstrained_client] + outstanding_calls = outstanding if outstanding is not None else OUTSTANDING_REQUESTS[ + unconstrained_client] wide = channels if channels is not None else WIDE deep = int(math.ceil(1.0 * outstanding_calls / wide)) @@ -197,7 +197,9 @@ class CXXLanguage: rpc_type='STREAMING', client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - use_generic_payload=True, server_core_limit=1, async_server_threads=1, + use_generic_payload=True, + server_core_limit=1, + async_server_threads=1, secure=secure, categories=smoketest_categories) @@ -206,49 +208,71 @@ class CXXLanguage: rpc_type='STREAMING', client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - unconstrained_client='async', use_generic_payload=True, + unconstrained_client='async', + use_generic_payload=True, secure=secure, - categories=smoketest_categories+[SCALABLE]) + categories=smoketest_categories + [SCALABLE]) yield _ping_pong_scenario( 'cpp_generic_async_streaming_qps_one_server_core_%s' % secstr, rpc_type='STREAMING', client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - unconstrained_client='async', use_generic_payload=True, - server_core_limit=1, async_server_threads=1, + unconstrained_client='async', + use_generic_payload=True, + server_core_limit=1, + async_server_threads=1, secure=secure) + yield _ping_pong_scenario( + 'cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_%s' % + (secstr), + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='SYNC_SERVER', + unconstrained_client='async', + secure=secure, + categories=smoketest_categories + [SCALABLE]) + for rpc_type in ['unary', 'streaming']: for synchronicity in ['sync', 'async']: yield _ping_pong_scenario( - 'cpp_protobuf_%s_%s_ping_pong_%s' % (synchronicity, rpc_type, secstr), + 'cpp_protobuf_%s_%s_ping_pong_%s' % + (synchronicity, rpc_type, secstr), rpc_type=rpc_type.upper(), client_type='%s_CLIENT' % synchronicity.upper(), server_type='%s_SERVER' % synchronicity.upper(), - server_core_limit=1, async_server_threads=1, + server_core_limit=1, + async_server_threads=1, secure=secure) yield _ping_pong_scenario( - 'cpp_protobuf_%s_%s_qps_unconstrained_%s' % (synchronicity, rpc_type, secstr), + 'cpp_protobuf_%s_%s_qps_unconstrained_%s' % + (synchronicity, rpc_type, secstr), rpc_type=rpc_type.upper(), client_type='%s_CLIENT' % synchronicity.upper(), server_type='%s_SERVER' % synchronicity.upper(), unconstrained_client=synchronicity, secure=secure, - categories=smoketest_categories+[SCALABLE]) + categories=smoketest_categories + [SCALABLE]) for channels in geometric_progression(1, 20000, math.sqrt(10)): for outstanding in geometric_progression(1, 200000, math.sqrt(10)): - if synchronicity == 'sync' and outstanding > 1200: continue - if outstanding < channels: continue - yield _ping_pong_scenario( - 'cpp_protobuf_%s_%s_qps_unconstrained_%s_%d_channels_%d_outstanding' % (synchronicity, rpc_type, secstr, channels, outstanding), - rpc_type=rpc_type.upper(), - client_type='%s_CLIENT' % synchronicity.upper(), - server_type='%s_SERVER' % synchronicity.upper(), - unconstrained_client=synchronicity, secure=secure, - categories=[SWEEP], channels=channels, outstanding=outstanding) + if synchronicity == 'sync' and outstanding > 1200: + continue + if outstanding < channels: + continue + yield _ping_pong_scenario( + 'cpp_protobuf_%s_%s_qps_unconstrained_%s_%d_channels_%d_outstanding' + % (synchronicity, rpc_type, secstr, channels, outstanding), + rpc_type=rpc_type.upper(), + client_type='%s_CLIENT' % synchronicity.upper(), + server_type='%s_SERVER' % synchronicity.upper(), + unconstrained_client=synchronicity, + secure=secure, + categories=[SWEEP], + channels=channels, + outstanding=outstanding) def __str__(self): return 'c++' @@ -267,66 +291,94 @@ class CSharpLanguage: def scenarios(self): yield _ping_pong_scenario( - 'csharp_generic_async_streaming_ping_pong', rpc_type='STREAMING', - client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + 'csharp_generic_async_streaming_ping_pong', + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='ASYNC_GENERIC_SERVER', use_generic_payload=True, categories=[SMOKETEST]) yield _ping_pong_scenario( - 'csharp_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') + 'csharp_protobuf_async_streaming_ping_pong', + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER') yield _ping_pong_scenario( - 'csharp_protobuf_async_unary_ping_pong', rpc_type='UNARY', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + 'csharp_protobuf_async_unary_ping_pong', + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', categories=[SMOKETEST]) yield _ping_pong_scenario( - 'csharp_protobuf_sync_to_async_unary_ping_pong', rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='ASYNC_SERVER') + 'csharp_protobuf_sync_to_async_unary_ping_pong', + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='ASYNC_SERVER') yield _ping_pong_scenario( - 'csharp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + 'csharp_protobuf_async_unary_qps_unconstrained', + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', unconstrained_client='async', - categories=[SMOKETEST,SCALABLE]) + categories=[SMOKETEST, SCALABLE]) yield _ping_pong_scenario( - 'csharp_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + 'csharp_protobuf_async_streaming_qps_unconstrained', + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', unconstrained_client='async', categories=[SCALABLE]) yield _ping_pong_scenario( - 'csharp_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', - server_language='c++', server_core_limit=1, async_server_threads=1, + 'csharp_to_cpp_protobuf_sync_unary_ping_pong', + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', + server_language='c++', + server_core_limit=1, + async_server_threads=1, categories=[SMOKETEST]) yield _ping_pong_scenario( - 'csharp_to_cpp_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', - server_language='c++', server_core_limit=1, async_server_threads=1) + 'csharp_to_cpp_protobuf_async_streaming_ping_pong', + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', + server_language='c++', + server_core_limit=1, + async_server_threads=1) yield _ping_pong_scenario( - 'csharp_to_cpp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', - unconstrained_client='async', server_language='c++', + 'csharp_to_cpp_protobuf_async_unary_qps_unconstrained', + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', + unconstrained_client='async', + server_language='c++', categories=[SCALABLE]) yield _ping_pong_scenario( - 'csharp_to_cpp_protobuf_sync_to_async_unary_qps_unconstrained', rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='ASYNC_SERVER', - unconstrained_client='sync', server_language='c++', + 'csharp_to_cpp_protobuf_sync_to_async_unary_qps_unconstrained', + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='ASYNC_SERVER', + unconstrained_client='sync', + server_language='c++', categories=[SCALABLE]) yield _ping_pong_scenario( - 'cpp_to_csharp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', - unconstrained_client='async', client_language='c++', + 'cpp_to_csharp_protobuf_async_unary_qps_unconstrained', + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', + unconstrained_client='async', + client_language='c++', categories=[SCALABLE]) - def __str__(self): return 'csharp' @@ -356,13 +408,17 @@ class NodeLanguage: # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') yield _ping_pong_scenario( - 'node_protobuf_unary_ping_pong', rpc_type='UNARY', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + 'node_protobuf_unary_ping_pong', + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', categories=[SMOKETEST]) yield _ping_pong_scenario( - 'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + 'node_protobuf_async_unary_qps_unconstrained', + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', unconstrained_client='async', categories=[SMOKETEST]) @@ -387,6 +443,7 @@ class NodeLanguage: def __str__(self): return 'node' + class PythonLanguage: def __init__(self): @@ -400,48 +457,69 @@ class PythonLanguage: def scenarios(self): yield _ping_pong_scenario( - 'python_generic_sync_streaming_ping_pong', rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + 'python_generic_sync_streaming_ping_pong', + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='ASYNC_GENERIC_SERVER', use_generic_payload=True, categories=[SMOKETEST]) yield _ping_pong_scenario( - 'python_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='ASYNC_SERVER') + 'python_protobuf_sync_streaming_ping_pong', + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='ASYNC_SERVER') yield _ping_pong_scenario( - 'python_protobuf_async_unary_ping_pong', rpc_type='UNARY', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') + 'python_protobuf_async_unary_ping_pong', + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER') yield _ping_pong_scenario( - 'python_protobuf_sync_unary_ping_pong', rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='ASYNC_SERVER', + 'python_protobuf_sync_unary_ping_pong', + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='ASYNC_SERVER', categories=[SMOKETEST]) yield _ping_pong_scenario( - 'python_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='ASYNC_SERVER', + 'python_protobuf_sync_unary_qps_unconstrained', + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='ASYNC_SERVER', unconstrained_client='sync') yield _ping_pong_scenario( - 'python_protobuf_sync_streaming_qps_unconstrained', rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='ASYNC_SERVER', + 'python_protobuf_sync_streaming_qps_unconstrained', + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='ASYNC_SERVER', unconstrained_client='sync') yield _ping_pong_scenario( - 'python_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='ASYNC_SERVER', - server_language='c++', server_core_limit=1, async_server_threads=1, + 'python_to_cpp_protobuf_sync_unary_ping_pong', + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='ASYNC_SERVER', + server_language='c++', + server_core_limit=1, + async_server_threads=1, categories=[SMOKETEST]) yield _ping_pong_scenario( - 'python_to_cpp_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='ASYNC_SERVER', - server_language='c++', server_core_limit=1, async_server_threads=1) + 'python_to_cpp_protobuf_sync_streaming_ping_pong', + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='ASYNC_SERVER', + server_language='c++', + server_core_limit=1, + async_server_threads=1) def __str__(self): return 'python' + class RubyLanguage: def __init__(self): @@ -456,34 +534,50 @@ class RubyLanguage: def scenarios(self): yield _ping_pong_scenario( - 'ruby_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + 'ruby_protobuf_sync_streaming_ping_pong', + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', categories=[SMOKETEST]) yield _ping_pong_scenario( - 'ruby_protobuf_unary_ping_pong', rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + 'ruby_protobuf_unary_ping_pong', + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', categories=[SMOKETEST]) yield _ping_pong_scenario( - 'ruby_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + 'ruby_protobuf_sync_unary_qps_unconstrained', + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', unconstrained_client='sync') yield _ping_pong_scenario( - 'ruby_protobuf_sync_streaming_qps_unconstrained', rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + 'ruby_protobuf_sync_streaming_qps_unconstrained', + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', unconstrained_client='sync') yield _ping_pong_scenario( - 'ruby_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', - server_language='c++', server_core_limit=1, async_server_threads=1) + 'ruby_to_cpp_protobuf_sync_unary_ping_pong', + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', + server_language='c++', + server_core_limit=1, + async_server_threads=1) yield _ping_pong_scenario( - 'ruby_to_cpp_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', - server_language='c++', server_core_limit=1, async_server_threads=1) + 'ruby_to_cpp_protobuf_sync_streaming_ping_pong', + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', + server_language='c++', + server_core_limit=1, + async_server_threads=1) def __str__(self): return 'ruby' @@ -507,58 +601,85 @@ class JavaLanguage: smoketest_categories = [SMOKETEST] if secure else [] yield _ping_pong_scenario( - 'java_generic_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', - client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - use_generic_payload=True, async_server_threads=1, - secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS, + 'java_generic_async_streaming_ping_pong_%s' % secstr, + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='ASYNC_GENERIC_SERVER', + use_generic_payload=True, + async_server_threads=1, + secure=secure, + warmup_seconds=JAVA_WARMUP_SECONDS, categories=smoketest_categories) yield _ping_pong_scenario( - 'java_protobuf_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + 'java_protobuf_async_streaming_ping_pong_%s' % secstr, + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', async_server_threads=1, - secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) + secure=secure, + warmup_seconds=JAVA_WARMUP_SECONDS) yield _ping_pong_scenario( - 'java_protobuf_async_unary_ping_pong_%s' % secstr, rpc_type='UNARY', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + 'java_protobuf_async_unary_ping_pong_%s' % secstr, + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', async_server_threads=1, - secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS, + secure=secure, + warmup_seconds=JAVA_WARMUP_SECONDS, categories=smoketest_categories) yield _ping_pong_scenario( - 'java_protobuf_unary_ping_pong_%s' % secstr, rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + 'java_protobuf_unary_ping_pong_%s' % secstr, + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', async_server_threads=1, - secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) + secure=secure, + warmup_seconds=JAVA_WARMUP_SECONDS) yield _ping_pong_scenario( - 'java_protobuf_async_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + 'java_protobuf_async_unary_qps_unconstrained_%s' % secstr, + rpc_type='UNARY', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', unconstrained_client='async', - secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS, - categories=smoketest_categories+[SCALABLE]) + secure=secure, + warmup_seconds=JAVA_WARMUP_SECONDS, + categories=smoketest_categories + [SCALABLE]) yield _ping_pong_scenario( - 'java_protobuf_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', - client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + 'java_protobuf_async_streaming_qps_unconstrained_%s' % secstr, + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='ASYNC_SERVER', unconstrained_client='async', - secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS, + secure=secure, + warmup_seconds=JAVA_WARMUP_SECONDS, categories=[SCALABLE]) yield _ping_pong_scenario( - 'java_generic_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', - client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - unconstrained_client='async', use_generic_payload=True, - secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS, + 'java_generic_async_streaming_qps_unconstrained_%s' % secstr, + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='ASYNC_GENERIC_SERVER', + unconstrained_client='async', + use_generic_payload=True, + secure=secure, + warmup_seconds=JAVA_WARMUP_SECONDS, categories=[SCALABLE]) yield _ping_pong_scenario( - 'java_generic_async_streaming_qps_one_server_core_%s' % secstr, rpc_type='STREAMING', - client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - unconstrained_client='async', use_generic_payload=True, + 'java_generic_async_streaming_qps_one_server_core_%s' % secstr, + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='ASYNC_GENERIC_SERVER', + unconstrained_client='async', + use_generic_payload=True, async_server_threads=1, - secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) + secure=secure, + warmup_seconds=JAVA_WARMUP_SECONDS) # TODO(jtattermusch): add scenarios java vs C++ @@ -586,37 +707,48 @@ class GoLanguage: # ASYNC_GENERIC_SERVER for Go actually uses a sync streaming server, # but that's mostly because of lack of better name of the enum value. yield _ping_pong_scenario( - 'go_generic_sync_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - use_generic_payload=True, async_server_threads=1, + 'go_generic_sync_streaming_ping_pong_%s' % secstr, + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='ASYNC_GENERIC_SERVER', + use_generic_payload=True, + async_server_threads=1, secure=secure, categories=smoketest_categories) yield _ping_pong_scenario( - 'go_protobuf_sync_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + 'go_protobuf_sync_streaming_ping_pong_%s' % secstr, + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', async_server_threads=1, secure=secure) yield _ping_pong_scenario( - 'go_protobuf_sync_unary_ping_pong_%s' % secstr, rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + 'go_protobuf_sync_unary_ping_pong_%s' % secstr, + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', async_server_threads=1, secure=secure, categories=smoketest_categories) # unconstrained_client='async' is intended (client uses goroutines) yield _ping_pong_scenario( - 'go_protobuf_sync_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + 'go_protobuf_sync_unary_qps_unconstrained_%s' % secstr, + rpc_type='UNARY', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', unconstrained_client='async', secure=secure, - categories=smoketest_categories+[SCALABLE]) + categories=smoketest_categories + [SCALABLE]) # unconstrained_client='async' is intended (client uses goroutines) yield _ping_pong_scenario( - 'go_protobuf_sync_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + 'go_protobuf_sync_streaming_qps_unconstrained_%s' % secstr, + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='SYNC_SERVER', unconstrained_client='async', secure=secure, categories=[SCALABLE]) @@ -625,9 +757,12 @@ class GoLanguage: # ASYNC_GENERIC_SERVER for Go actually uses a sync streaming server, # but that's mostly because of lack of better name of the enum value. yield _ping_pong_scenario( - 'go_generic_sync_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', - client_type='SYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - unconstrained_client='async', use_generic_payload=True, + 'go_generic_sync_streaming_qps_unconstrained_%s' % secstr, + rpc_type='STREAMING', + client_type='SYNC_CLIENT', + server_type='ASYNC_GENERIC_SERVER', + unconstrained_client='async', + use_generic_payload=True, secure=secure, categories=[SCALABLE]) @@ -638,11 +773,11 @@ class GoLanguage: LANGUAGES = { - 'c++' : CXXLanguage(), - 'csharp' : CSharpLanguage(), - 'node' : NodeLanguage(), - 'ruby' : RubyLanguage(), - 'java' : JavaLanguage(), - 'python' : PythonLanguage(), - 'go' : GoLanguage(), + 'c++': CXXLanguage(), + 'csharp': CSharpLanguage(), + 'node': NodeLanguage(), + 'ruby': RubyLanguage(), + 'java': JavaLanguage(), + 'python': PythonLanguage(), + 'go': GoLanguage(), } From f4c6e43ff210c483a439f60625ebe3f15a7eb018 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 26 Sep 2016 19:05:28 -0700 Subject: [PATCH 071/286] fine tune the cq deadline value (temporarily) --- src/cpp/server/server_cc.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 54ac25d76b9..f70bdb71ba6 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -297,7 +297,7 @@ class Server::SyncRequestManager : public GrpcRpcManager { server_cq_(server_cq), global_callbacks_(global_callbacks) {} - static const int kRpcPollingTimeoutMsec = 10; + static const int kRpcPollingTimeoutMsec = 500; WorkStatus PollForWork(void** tag, bool* ok) GRPC_OVERRIDE { *tag = nullptr; From e2ac10627df63b2252e62c1795ef9ffbe283bf24 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 26 Sep 2016 19:12:52 -0700 Subject: [PATCH 072/286] new value --- src/cpp/server/server_cc.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index f70bdb71ba6..e9f3c997886 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -297,7 +297,7 @@ class Server::SyncRequestManager : public GrpcRpcManager { server_cq_(server_cq), global_callbacks_(global_callbacks) {} - static const int kRpcPollingTimeoutMsec = 500; + static const int kRpcPollingTimeoutMsec = 3000; WorkStatus PollForWork(void** tag, bool* ok) GRPC_OVERRIDE { *tag = nullptr; From 795451f329e6086d786521ce4eafa68d0a7ef431 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 27 Sep 2016 08:47:28 -0700 Subject: [PATCH 073/286] Hooking more things up --- .../chttp2/transport/chttp2_transport.c | 38 +++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 7a9a13de6bd..e5bc89c0301 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -127,6 +127,11 @@ static void destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *t, static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *t, grpc_error *error); +static void post_benign_reclaimer(grpc_exec_ctx *exec_ctx, + grpc_chttp2_transport *t); +static void post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, + grpc_chttp2_transport *t); + /******************************************************************************* * CONSTRUCTION/DESTRUCTION/REFCOUNTING */ @@ -462,6 +467,7 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt, [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]; *t->accepting_stream = s; grpc_chttp2_stream_map_add(&t->stream_map, s->id, s); + post_destructive_reclaimer(exec_ctx, t); } GPR_TIMER_END("init_stream", 0); @@ -769,6 +775,7 @@ static void maybe_start_some_streams(grpc_exec_ctx *exec_ctx, [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]; s->max_recv_bytes = GPR_MAX(stream_incoming_window, s->max_recv_bytes); grpc_chttp2_stream_map_add(&t->stream_map, s->id, s); + post_destructive_reclaimer(exec_ctx, t); grpc_chttp2_become_writable(exec_ctx, t, s, true, "new_stream"); } /* cancel out streams that will never be started */ @@ -1337,13 +1344,7 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, } if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) { - if (!t->benign_reclaimer_registered) { - t->benign_reclaimer_registered = true; - GRPC_CHTTP2_REF_TRANSPORT(t, "benign_reclaimer"); - grpc_buffer_user_post_reclaimer(exec_ctx, - grpc_endpoint_get_buffer_user(t->ep), - false, &t->benign_reclaimer); - } + post_benign_reclaimer(exec_ctx, t); if (t->sent_goaway_state == GRPC_CHTTP2_GOAWAY_SENT) { close_transport_locked( exec_ctx, t, @@ -2081,6 +2082,28 @@ grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create( * BUFFER POOLS */ +static void post_benign_reclaimer(grpc_exec_ctx *exec_ctx, + grpc_chttp2_transport *t) { + if (!t->benign_reclaimer_registered) { + t->benign_reclaimer_registered = true; + GRPC_CHTTP2_REF_TRANSPORT(t, "benign_reclaimer"); + grpc_buffer_user_post_reclaimer(exec_ctx, + grpc_endpoint_get_buffer_user(t->ep), false, + &t->benign_reclaimer); + } +} + +static void post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, + grpc_chttp2_transport *t) { + if (!t->destructive_reclaimer_registered) { + t->destructive_reclaimer_registered = true; + GRPC_CHTTP2_REF_TRANSPORT(t, "destructive_reclaimer"); + grpc_buffer_user_post_reclaimer(exec_ctx, + grpc_endpoint_get_buffer_user(t->ep), true, + &t->destructive_reclaimer); + } +} + static void benign_reclaimer(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { grpc_chttp2_transport *t = arg; @@ -2119,6 +2142,7 @@ static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, GRPC_ERROR_INT_HTTP2_ERROR, GRPC_CHTTP2_ENHANCE_YOUR_CALM)); if (n > 1) { + post_destructive_reclaimer(exec_ctx, t); t->destructive_reclaimer_registered = true; grpc_buffer_user_post_reclaimer(exec_ctx, grpc_endpoint_get_buffer_user(t->ep), From dd339ea915ca62950659aa1e9924077f127a75b6 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 27 Sep 2016 13:21:31 -0700 Subject: [PATCH 074/286] Cleanup of some buffer pool implementation --- .../chttp2/transport/chttp2_transport.c | 5 ++- src/core/lib/iomgr/buffer_pool.c | 40 +++++++++++------- src/core/lib/iomgr/buffer_pool.h | 2 +- test/core/iomgr/buffer_pool_test.c | 42 +++++++++++++++++++ 4 files changed, 72 insertions(+), 17 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index e5bc89c0301..3ebb4673327 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -256,8 +256,8 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_closure_init(&t->read_action_locked, read_action_locked, t); grpc_closure_init(&t->benign_reclaimer, benign_reclaimer, t); grpc_closure_init(&t->destructive_reclaimer, destructive_reclaimer, t); - grpc_closure_init(&t->benign_reclaimer, benign_reclaimer_locked, t); - grpc_closure_init(&t->destructive_reclaimer, destructive_reclaimer_locked, t); + grpc_closure_init(&t->benign_reclaimer_locked, benign_reclaimer_locked, t); + grpc_closure_init(&t->destructive_reclaimer_locked, destructive_reclaimer_locked, t); grpc_chttp2_goaway_parser_init(&t->goaway_parser); grpc_chttp2_hpack_parser_init(&t->hpack_parser); @@ -379,6 +379,7 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, } grpc_chttp2_initiate_write(exec_ctx, t, false, "init"); + post_benign_reclaimer(exec_ctx, t); } static void destroy_transport_locked(grpc_exec_ctx *exec_ctx, void *tp, diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index cb9a76b3dca..c0fd7cc45f3 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -218,9 +218,9 @@ static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool, grpc_buffer_user *buffer_user = bulist_pop(buffer_pool, list); if (buffer_user == NULL) return false; buffer_pool->reclaiming = true; - grpc_exec_ctx_sched(exec_ctx, buffer_user->reclaimers[destructive], - GRPC_ERROR_NONE, NULL); + grpc_closure *c = buffer_user->reclaimers[destructive]; buffer_user->reclaimers[destructive] = NULL; + grpc_closure_run(exec_ctx, c, GRPC_ERROR_NONE); return true; } @@ -330,8 +330,9 @@ static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { GRPC_ERROR_CANCELLED, NULL); grpc_exec_ctx_sched(exec_ctx, buffer_user->reclaimers[1], GRPC_ERROR_CANCELLED, NULL); - grpc_exec_ctx_sched(exec_ctx, buffer_user->on_done_destroy, GRPC_ERROR_NONE, - NULL); + grpc_exec_ctx_sched(exec_ctx, (grpc_closure *)gpr_atm_no_barrier_load( + &buffer_user->on_done_destroy_closure), + GRPC_ERROR_NONE, NULL); if (buffer_user->free_pool != 0) { buffer_user->buffer_pool->free_pool += buffer_user->free_pool; bpstep_sched(exec_ctx, buffer_user->buffer_pool); @@ -340,6 +341,7 @@ static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { gpr_free(buffer_user->asan_canary); #endif grpc_buffer_pool_internal_unref(exec_ctx, buffer_user->buffer_pool); + gpr_mu_destroy(&buffer_user->mu); } static void bu_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, @@ -492,7 +494,7 @@ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, grpc_closure_list_init(&buffer_user->on_allocated); buffer_user->allocating = false; buffer_user->added_to_free_pool = false; - buffer_user->on_done_destroy = NULL; + gpr_atm_no_barrier_store(&buffer_user->on_done_destroy_closure, 0); buffer_user->reclaimers[0] = NULL; buffer_user->reclaimers[1] = NULL; for (int i = 0; i < GRPC_BULIST_COUNT; i++) { @@ -507,8 +509,10 @@ void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, grpc_closure *on_done) { gpr_mu_lock(&buffer_user->mu); - GPR_ASSERT(buffer_user->on_done_destroy == NULL); - buffer_user->on_done_destroy = on_done; + GPR_ASSERT(gpr_atm_no_barrier_load(&buffer_user->on_done_destroy_closure) == + 0); + gpr_atm_no_barrier_store(&buffer_user->on_done_destroy_closure, + (gpr_atm)on_done); if (buffer_user->allocated == 0) { grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, &buffer_user->destroy_closure, GRPC_ERROR_NONE, @@ -521,7 +525,9 @@ void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, size_t size, grpc_closure *optional_on_done) { gpr_mu_lock(&buffer_user->mu); - if (buffer_user->on_done_destroy != NULL) { + grpc_closure *on_done_destroy = (grpc_closure *)gpr_atm_no_barrier_load( + &buffer_user->on_done_destroy_closure); + if (on_done_destroy != NULL) { /* already shutdown */ grpc_exec_ctx_sched( exec_ctx, optional_on_done, @@ -561,7 +567,9 @@ void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, &buffer_user->add_to_free_pool_closure, GRPC_ERROR_NONE, false); } - if (buffer_user->on_done_destroy != NULL && buffer_user->allocated == 0) { + grpc_closure *on_done_destroy = (grpc_closure *)gpr_atm_no_barrier_load( + &buffer_user->on_done_destroy_closure); + if (on_done_destroy != NULL && buffer_user->allocated == 0) { grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, &buffer_user->destroy_closure, GRPC_ERROR_NONE, false); @@ -572,11 +580,15 @@ void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, bool destructive, grpc_closure *closure) { - GPR_ASSERT(buffer_user->reclaimers[destructive] == NULL); - buffer_user->reclaimers[destructive] = closure; - grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->post_reclaimer_closure[destructive], - GRPC_ERROR_NONE, false); + if (gpr_atm_acq_load(&buffer_user->on_done_destroy_closure) != 0) { + GPR_ASSERT(buffer_user->reclaimers[destructive] == NULL); + buffer_user->reclaimers[destructive] = closure; + grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, + &buffer_user->post_reclaimer_closure[destructive], + GRPC_ERROR_NONE, false); + } else { + grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_CANCELLED, NULL); + } } void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 2095be05d8c..ca4c39f76d2 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -80,7 +80,7 @@ struct grpc_buffer_user { grpc_closure post_reclaimer_closure[2]; grpc_closure destroy_closure; - grpc_closure *on_done_destroy; + gpr_atm on_done_destroy_closure; grpc_buffer_user_link links[GRPC_BULIST_COUNT]; }; diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 23fac2f70db..a15e02e3c61 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -573,6 +573,47 @@ static void test_pools_merged_on_buffer_user_deletion(void) { grpc_buffer_pool_unref(p); } +static void test_reclaimers_can_be_posted_repeatedly(void) { + gpr_log(GPR_INFO, "** test_reclaimers_can_be_posted_repeatedly **"); + grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool_resize(p, 1024); + grpc_buffer_user usr; + grpc_buffer_user_init(&usr, p); + { + bool allocated = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&allocated)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(allocated); + } + for (int i = 0; i < 10; i++) { + bool reclaimer_done = false; + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_post_reclaimer( + &exec_ctx, &usr, false, + make_reclaimer(&usr, 1024, set_bool(&reclaimer_done))); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(!reclaimer_done); + } + { + bool allocated = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&allocated)); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(allocated); + GPR_ASSERT(reclaimer_done); + } + } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_exec_ctx_finish(&exec_ctx); + } + destroy_user(&usr); + grpc_buffer_pool_unref(p); +} + static void test_one_slice(void) { gpr_log(GPR_INFO, "** test_one_slice **"); @@ -659,6 +700,7 @@ int main(int argc, char **argv) { test_multiple_reclaims_can_be_triggered(); test_buffer_user_stays_allocated_until_memory_released(); test_pools_merged_on_buffer_user_deletion(); + test_reclaimers_can_be_posted_repeatedly(); test_one_slice(); test_one_slice_deleted_late(); grpc_shutdown(); From 32c804e6a76d37460f34dc7154431b2c38d86c99 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 27 Sep 2016 13:40:03 -0700 Subject: [PATCH 075/286] Fix a conditional that got flipped --- src/core/lib/iomgr/buffer_pool.c | 16 ++++++++++------ src/core/lib/iomgr/buffer_pool.h | 2 ++ test/core/iomgr/buffer_pool_test.c | 19 ++++++++++++++++++- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index c0fd7cc45f3..88f37c9fc1c 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -337,11 +337,6 @@ static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { buffer_user->buffer_pool->free_pool += buffer_user->free_pool; bpstep_sched(exec_ctx, buffer_user->buffer_pool); } -#ifndef NDEBUG - gpr_free(buffer_user->asan_canary); -#endif - grpc_buffer_pool_internal_unref(exec_ctx, buffer_user->buffer_pool); - gpr_mu_destroy(&buffer_user->mu); } static void bu_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, @@ -521,6 +516,15 @@ void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, gpr_mu_unlock(&buffer_user->mu); } +void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user) { +#ifndef NDEBUG + gpr_free(buffer_user->asan_canary); +#endif + grpc_buffer_pool_internal_unref(exec_ctx, buffer_user->buffer_pool); + gpr_mu_destroy(&buffer_user->mu); +} + void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, size_t size, grpc_closure *optional_on_done) { @@ -580,7 +584,7 @@ void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, bool destructive, grpc_closure *closure) { - if (gpr_atm_acq_load(&buffer_user->on_done_destroy_closure) != 0) { + if (gpr_atm_acq_load(&buffer_user->on_done_destroy_closure) == 0) { GPR_ASSERT(buffer_user->reclaimers[destructive] == NULL); buffer_user->reclaimers[destructive] = closure; grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index ca4c39f76d2..301e059c186 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -90,6 +90,8 @@ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, grpc_closure *on_done); +void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, + grpc_buffer_user *buffer_user); void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, size_t size, diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index a15e02e3c61..5bc619b478b 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -83,8 +83,10 @@ static void destroy_user(grpc_buffer_user *usr) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; bool done = false; grpc_buffer_user_shutdown(&exec_ctx, usr, set_bool(&done)); - grpc_exec_ctx_finish(&exec_ctx); + grpc_exec_ctx_flush(&exec_ctx); GPR_ASSERT(done); + grpc_buffer_user_destroy(&exec_ctx, usr); + grpc_exec_ctx_finish(&exec_ctx); } static void test_no_op(void) { @@ -528,6 +530,11 @@ static void test_buffer_user_stays_allocated_until_memory_released(void) { grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_destroy(&exec_ctx, &usr); + grpc_exec_ctx_finish(&exec_ctx); + } } static void test_pools_merged_on_buffer_user_deletion(void) { @@ -569,6 +576,11 @@ static void test_pools_merged_on_buffer_user_deletion(void) { GPR_ASSERT(done); GPR_ASSERT(reclaimer_cancelled); } + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_destroy(&exec_ctx, &usr); + grpc_exec_ctx_finish(&exec_ctx); + } } grpc_buffer_pool_unref(p); } @@ -678,6 +690,11 @@ static void test_one_slice_deleted_late(void) { grpc_buffer_pool_unref(p); gpr_slice_buffer_destroy(&buffer); GPR_ASSERT(done); + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_buffer_user_destroy(&exec_ctx, &usr); + grpc_exec_ctx_finish(&exec_ctx); + } } int main(int argc, char **argv) { From 4b3b5d0e82e883c8632e50604f2cde30e4e056d0 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 27 Sep 2016 13:55:24 -0700 Subject: [PATCH 076/286] Fixes for destruction --- src/core/lib/iomgr/tcp_posix.c | 1 + test/core/util/mock_endpoint.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 4397890c93f..812c39235bc 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -131,6 +131,7 @@ static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { grpc_fd_orphan(exec_ctx, tcp->em_fd, tcp->release_fd_cb, tcp->release_fd, "tcp_unref_orphan"); gpr_slice_buffer_destroy(&tcp->last_read_buffer); + grpc_buffer_user_destroy(exec_ctx, &tcp->buffer_user); gpr_free(tcp->peer_string); gpr_free(tcp); } diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index e4c478281f5..29428ff3907 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -90,13 +90,14 @@ static void me_really_destroy(grpc_exec_ctx *exec_ctx, void *mp, grpc_error *error) { grpc_mock_endpoint *m = mp; gpr_slice_buffer_destroy(&m->read_buffer); + grpc_buffer_user_destroy(exec_ctx, &m->buffer_user); gpr_free(m); } static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; grpc_buffer_user_shutdown(exec_ctx, &m->buffer_user, - grpc_closure_create(me_really_destroy, m)); + grpc_closure_create(me_really_destroy, m)); } static char *me_get_peer(grpc_endpoint *ep) { From 06bc28289af92279defee4669baa578a17e8e7ef Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 27 Sep 2016 14:33:06 -0700 Subject: [PATCH 077/286] Remove deprecated V8 function call in Node library --- src/node/ext/call.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/node/ext/call.cc b/src/node/ext/call.cc index 9f023b58831..b585282d329 100644 --- a/src/node/ext/call.cc +++ b/src/node/ext/call.cc @@ -613,8 +613,8 @@ NAN_METHOD(Call::New) { return Nan::ThrowTypeError("Call's fourth argument must be a string"); } call = new Call(wrapped_call); - info.This()->SetHiddenValue(Nan::New("channel_").ToLocalChecked(), - channel_object); + Nan::Set(info.This(), Nan::New("channel_").ToLocalChecked(), + channel_object); } call->Wrap(info.This()); info.GetReturnValue().Set(info.This()); From ed9dc8d956e37bdc39af47b75d0d660be8dd56d6 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 27 Sep 2016 14:49:49 -0700 Subject: [PATCH 078/286] Fix leaks --- test/core/util/mock_endpoint.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index 29428ff3907..dcb4e5896f7 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -39,6 +39,7 @@ typedef struct grpc_mock_endpoint { grpc_endpoint base; gpr_mu mu; + int refs; void (*on_write)(gpr_slice slice); gpr_slice_buffer read_buffer; gpr_slice_buffer *on_read_out; @@ -75,6 +76,23 @@ static void me_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, static void me_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, grpc_pollset_set *pollset) {} +static void unref(grpc_exec_ctx *exec_ctx, grpc_mock_endpoint *m) { + gpr_mu_lock(&m->mu); + if (0 == --m->refs) { + gpr_mu_unlock(&m->mu); + gpr_slice_buffer_destroy(&m->read_buffer); + grpc_buffer_user_destroy(exec_ctx, &m->buffer_user); + gpr_free(m); + } else { + gpr_mu_unlock(&m->mu); + } +} + +static void me_finish_shutdown(grpc_exec_ctx *exec_ctx, void *me, grpc_error *error) { + grpc_mock_endpoint *m = me; + unref(exec_ctx, m); +} + static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; gpr_mu_lock(&m->mu); @@ -83,21 +101,14 @@ static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { GRPC_ERROR_CREATE("Endpoint Shutdown"), NULL); m->on_read = NULL; } + grpc_buffer_user_shutdown(exec_ctx, &m->buffer_user, + grpc_closure_create(me_finish_shutdown, m)); gpr_mu_unlock(&m->mu); } -static void me_really_destroy(grpc_exec_ctx *exec_ctx, void *mp, - grpc_error *error) { - grpc_mock_endpoint *m = mp; - gpr_slice_buffer_destroy(&m->read_buffer); - grpc_buffer_user_destroy(exec_ctx, &m->buffer_user); - gpr_free(m); -} - static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; - grpc_buffer_user_shutdown(exec_ctx, &m->buffer_user, - grpc_closure_create(me_really_destroy, m)); + unref(exec_ctx,m); } static char *me_get_peer(grpc_endpoint *ep) { @@ -127,6 +138,7 @@ grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice), grpc_buffer_pool *buffer_pool) { grpc_mock_endpoint *m = gpr_malloc(sizeof(*m)); m->base.vtable = &vtable; + m->refs = 2; grpc_buffer_user_init(&m->buffer_user, buffer_pool); gpr_slice_buffer_init(&m->read_buffer); gpr_mu_init(&m->mu); From 82509936ae1de5620825e8a5b27c34b47d9f1af8 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 27 Sep 2016 15:49:15 -0700 Subject: [PATCH 079/286] Stub out end2end tests --- Makefile | 4 + src/ruby/ext/grpc/rb_grpc_imports.generated.h | 2 +- test/core/end2end/end2end_nosec_tests.c | 16 + test/core/end2end/end2end_tests.c | 16 + test/core/end2end/gen_build_yaml.py | 2 + test/core/end2end/tests/buffer_pool_client.c | 105 ++ test/core/end2end/tests/buffer_pool_server.c | 105 ++ tools/run_tests/sources_and_headers.json | 4 + tools/run_tests/tests.json | 1372 ++++++++++++++++- .../end2end_nosec_tests.vcxproj | 4 + .../end2end_nosec_tests.vcxproj.filters | 6 + .../tests/end2end_tests/end2end_tests.vcxproj | 4 + .../end2end_tests.vcxproj.filters | 6 + 13 files changed, 1610 insertions(+), 36 deletions(-) create mode 100644 test/core/end2end/tests/buffer_pool_client.c create mode 100644 test/core/end2end/tests/buffer_pool_server.c diff --git a/Makefile b/Makefile index 995a8eebee0..92bcc104ee2 100644 --- a/Makefile +++ b/Makefile @@ -6760,6 +6760,8 @@ LIBEND2END_TESTS_SRC = \ test/core/end2end/end2end_tests.c \ test/core/end2end/tests/bad_hostname.c \ test/core/end2end/tests/binary_metadata.c \ + test/core/end2end/tests/buffer_pool_client.c \ + test/core/end2end/tests/buffer_pool_server.c \ test/core/end2end/tests/call_creds.c \ test/core/end2end/tests/cancel_after_accept.c \ test/core/end2end/tests/cancel_after_client_done.c \ @@ -6843,6 +6845,8 @@ LIBEND2END_NOSEC_TESTS_SRC = \ test/core/end2end/end2end_nosec_tests.c \ test/core/end2end/tests/bad_hostname.c \ test/core/end2end/tests/binary_metadata.c \ + test/core/end2end/tests/buffer_pool_client.c \ + test/core/end2end/tests/buffer_pool_server.c \ test/core/end2end/tests/cancel_after_accept.c \ test/core/end2end/tests/cancel_after_client_done.c \ test/core/end2end/tests/cancel_after_invoke.c \ diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index 36f96b6d6e8..4926275fa2e 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -359,7 +359,7 @@ extern grpc_buffer_pool_unref_type grpc_buffer_pool_unref_import; typedef void(*grpc_buffer_pool_resize_type)(grpc_buffer_pool *buffer_pool, size_t new_size); extern grpc_buffer_pool_resize_type grpc_buffer_pool_resize_import; #define grpc_buffer_pool_resize grpc_buffer_pool_resize_import -typedef grpc_arg_pointer_vtable *(*grpc_buffer_pool_arg_vtable_type)(void); +typedef const grpc_arg_pointer_vtable *(*grpc_buffer_pool_arg_vtable_type)(void); extern grpc_buffer_pool_arg_vtable_type grpc_buffer_pool_arg_vtable_import; #define grpc_buffer_pool_arg_vtable grpc_buffer_pool_arg_vtable_import typedef grpc_channel *(*grpc_insecure_channel_create_from_fd_type)(const char *target, int fd, const grpc_channel_args *args); diff --git a/test/core/end2end/end2end_nosec_tests.c b/test/core/end2end/end2end_nosec_tests.c index a6302621970..aa38641a849 100644 --- a/test/core/end2end/end2end_nosec_tests.c +++ b/test/core/end2end/end2end_nosec_tests.c @@ -47,6 +47,10 @@ extern void bad_hostname(grpc_end2end_test_config config); extern void bad_hostname_pre_init(void); extern void binary_metadata(grpc_end2end_test_config config); extern void binary_metadata_pre_init(void); +extern void buffer_pool_client(grpc_end2end_test_config config); +extern void buffer_pool_client_pre_init(void); +extern void buffer_pool_server(grpc_end2end_test_config config); +extern void buffer_pool_server_pre_init(void); extern void cancel_after_accept(grpc_end2end_test_config config); extern void cancel_after_accept_pre_init(void); extern void cancel_after_client_done(grpc_end2end_test_config config); @@ -135,6 +139,8 @@ void grpc_end2end_tests_pre_init(void) { g_pre_init_called = true; bad_hostname_pre_init(); binary_metadata_pre_init(); + buffer_pool_client_pre_init(); + buffer_pool_server_pre_init(); cancel_after_accept_pre_init(); cancel_after_client_done_pre_init(); cancel_after_invoke_pre_init(); @@ -187,6 +193,8 @@ void grpc_end2end_tests(int argc, char **argv, if (argc <= 1) { bad_hostname(config); binary_metadata(config); + buffer_pool_client(config); + buffer_pool_server(config); cancel_after_accept(config); cancel_after_client_done(config); cancel_after_invoke(config); @@ -240,6 +248,14 @@ void grpc_end2end_tests(int argc, char **argv, binary_metadata(config); continue; } + if (0 == strcmp("buffer_pool_client", argv[i])) { + buffer_pool_client(config); + continue; + } + if (0 == strcmp("buffer_pool_server", argv[i])) { + buffer_pool_server(config); + continue; + } if (0 == strcmp("cancel_after_accept", argv[i])) { cancel_after_accept(config); continue; diff --git a/test/core/end2end/end2end_tests.c b/test/core/end2end/end2end_tests.c index 925872a71ff..cbd194dee18 100644 --- a/test/core/end2end/end2end_tests.c +++ b/test/core/end2end/end2end_tests.c @@ -47,6 +47,10 @@ extern void bad_hostname(grpc_end2end_test_config config); extern void bad_hostname_pre_init(void); extern void binary_metadata(grpc_end2end_test_config config); extern void binary_metadata_pre_init(void); +extern void buffer_pool_client(grpc_end2end_test_config config); +extern void buffer_pool_client_pre_init(void); +extern void buffer_pool_server(grpc_end2end_test_config config); +extern void buffer_pool_server_pre_init(void); extern void call_creds(grpc_end2end_test_config config); extern void call_creds_pre_init(void); extern void cancel_after_accept(grpc_end2end_test_config config); @@ -137,6 +141,8 @@ void grpc_end2end_tests_pre_init(void) { g_pre_init_called = true; bad_hostname_pre_init(); binary_metadata_pre_init(); + buffer_pool_client_pre_init(); + buffer_pool_server_pre_init(); call_creds_pre_init(); cancel_after_accept_pre_init(); cancel_after_client_done_pre_init(); @@ -190,6 +196,8 @@ void grpc_end2end_tests(int argc, char **argv, if (argc <= 1) { bad_hostname(config); binary_metadata(config); + buffer_pool_client(config); + buffer_pool_server(config); call_creds(config); cancel_after_accept(config); cancel_after_client_done(config); @@ -244,6 +252,14 @@ void grpc_end2end_tests(int argc, char **argv, binary_metadata(config); continue; } + if (0 == strcmp("buffer_pool_client", argv[i])) { + buffer_pool_client(config); + continue; + } + if (0 == strcmp("buffer_pool_server", argv[i])) { + buffer_pool_server(config); + continue; + } if (0 == strcmp("call_creds", argv[i])) { call_creds(config); continue; diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index 78b37efd372..4675b02edb5 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -88,6 +88,8 @@ LOWCPU = 0.1 END2END_TESTS = { 'bad_hostname': default_test_options, 'binary_metadata': default_test_options, + 'buffer_pool_client': default_test_options, + 'buffer_pool_server': default_test_options, 'call_creds': default_test_options._replace(secure=True), 'cancel_after_accept': default_test_options._replace(cpu_cost=LOWCPU), 'cancel_after_client_done': default_test_options, diff --git a/test/core/end2end/tests/buffer_pool_client.c b/test/core/end2end/tests/buffer_pool_client.c new file mode 100644 index 00000000000..27753d7d566 --- /dev/null +++ b/test/core/end2end/tests/buffer_pool_client.c @@ -0,0 +1,105 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "test/core/end2end/end2end_tests.h" + +#include +#include + +#include +#include +#include +#include +#include +#include "test/core/end2end/cq_verifier.h" + +static void *tag(intptr_t t) { return (void *)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, "%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_time(int n) { + return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(n); +} + +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } + +static void drain_cq(grpc_completion_queue *cq) { + grpc_event ev; + do { + ev = grpc_completion_queue_next(cq, five_seconds_time(), NULL); + } 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)); + GPR_ASSERT(grpc_completion_queue_pluck( + f->cq, tag(1000), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5), NULL) + .type == GRPC_OP_COMPLETE); + grpc_server_destroy(f->server); + f->server = NULL; +} + +static void shutdown_client(grpc_end2end_test_fixture *f) { + if (!f->client) return; + grpc_channel_destroy(f->client); + f->client = NULL; +} + +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); +} + +void buffer_pool_client(grpc_end2end_test_config config) { + grpc_end2end_test_fixture f = + begin_test(config, "buffer_pool_client", NULL, NULL); + end_test(&f); + config.tear_down_data(&f); +} + +void buffer_pool_client_pre_init(void) {} diff --git a/test/core/end2end/tests/buffer_pool_server.c b/test/core/end2end/tests/buffer_pool_server.c new file mode 100644 index 00000000000..0b06efd02e8 --- /dev/null +++ b/test/core/end2end/tests/buffer_pool_server.c @@ -0,0 +1,105 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "test/core/end2end/end2end_tests.h" + +#include +#include + +#include +#include +#include +#include +#include +#include "test/core/end2end/cq_verifier.h" + +static void *tag(intptr_t t) { return (void *)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, "%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_time(int n) { + return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(n); +} + +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } + +static void drain_cq(grpc_completion_queue *cq) { + grpc_event ev; + do { + ev = grpc_completion_queue_next(cq, five_seconds_time(), NULL); + } 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)); + GPR_ASSERT(grpc_completion_queue_pluck( + f->cq, tag(1000), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5), NULL) + .type == GRPC_OP_COMPLETE); + grpc_server_destroy(f->server); + f->server = NULL; +} + +static void shutdown_client(grpc_end2end_test_fixture *f) { + if (!f->client) return; + grpc_channel_destroy(f->client); + f->client = NULL; +} + +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); +} + +void buffer_pool_server(grpc_end2end_test_config config) { + grpc_end2end_test_fixture f = + begin_test(config, "buffer_pool_server", NULL, NULL); + end_test(&f); + config.tear_down_data(&f); +} + +void buffer_pool_server_pre_init(void) {} diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 45cec30fbb7..99d6e0bcd22 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -5636,6 +5636,8 @@ "test/core/end2end/end2end_tests.h", "test/core/end2end/tests/bad_hostname.c", "test/core/end2end/tests/binary_metadata.c", + "test/core/end2end/tests/buffer_pool_client.c", + "test/core/end2end/tests/buffer_pool_server.c", "test/core/end2end/tests/call_creds.c", "test/core/end2end/tests/cancel_after_accept.c", "test/core/end2end/tests/cancel_after_client_done.c", @@ -5701,6 +5703,8 @@ "test/core/end2end/end2end_tests.h", "test/core/end2end/tests/bad_hostname.c", "test/core/end2end/tests/binary_metadata.c", + "test/core/end2end/tests/buffer_pool_client.c", + "test/core/end2end/tests/buffer_pool_server.c", "test/core/end2end/tests/cancel_after_accept.c", "test/core/end2end/tests/cancel_after_client_done.c", "test/core/end2end/tests/cancel_after_invoke.c", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index c0eec6b3146..cc7b98168a7 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -4582,6 +4582,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_census_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_census_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -5550,6 +5594,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_compress_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_compress_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -6516,6 +6604,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_fakesec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_fakesec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -7438,6 +7568,46 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_fd_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_fd_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -8222,6 +8392,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -9178,6 +9392,38 @@ "linux" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_test", + "platforms": [ + "linux" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_test", + "platforms": [ + "linux" + ] + }, { "args": [ "call_creds" @@ -9896,7 +10142,7 @@ }, { "args": [ - "call_creds" + "buffer_pool_client" ], "ci_platforms": [ "windows", @@ -9918,7 +10164,7 @@ }, { "args": [ - "cancel_after_accept" + "buffer_pool_server" ], "ci_platforms": [ "windows", @@ -9926,7 +10172,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -9940,7 +10186,7 @@ }, { "args": [ - "cancel_after_client_done" + "call_creds" ], "ci_platforms": [ "windows", @@ -9962,7 +10208,7 @@ }, { "args": [ - "cancel_after_invoke" + "cancel_after_accept" ], "ci_platforms": [ "windows", @@ -9984,7 +10230,7 @@ }, { "args": [ - "cancel_before_invoke" + "cancel_after_client_done" ], "ci_platforms": [ "windows", @@ -9992,7 +10238,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -10006,7 +10252,7 @@ }, { "args": [ - "cancel_in_a_vacuum" + "cancel_after_invoke" ], "ci_platforms": [ "windows", @@ -10028,7 +10274,7 @@ }, { "args": [ - "cancel_with_status" + "cancel_before_invoke" ], "ci_platforms": [ "windows", @@ -10050,7 +10296,7 @@ }, { "args": [ - "compressed_payload" + "cancel_in_a_vacuum" ], "ci_platforms": [ "windows", @@ -10058,7 +10304,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -10072,7 +10318,51 @@ }, { "args": [ - "connectivity" + "cancel_with_status" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "compressed_payload" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "connectivity" ], "ci_platforms": [ "windows", @@ -10816,6 +11106,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_http_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_http_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -11742,6 +12074,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_load_reporting_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_load_reporting_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -12708,6 +13084,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_oauth2_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_oauth2_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -13632,6 +14050,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -14430,6 +14890,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -15251,7 +15753,7 @@ }, { "args": [ - "call_creds" + "buffer_pool_client" ], "ci_platforms": [ "windows", @@ -15272,14 +15774,14 @@ }, { "args": [ - "cancel_after_accept" + "buffer_pool_server" ], "ci_platforms": [ "windows", "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -15293,7 +15795,7 @@ }, { "args": [ - "cancel_after_client_done" + "call_creds" ], "ci_platforms": [ "windows", @@ -15314,7 +15816,7 @@ }, { "args": [ - "cancel_after_invoke" + "cancel_after_accept" ], "ci_platforms": [ "windows", @@ -15335,7 +15837,49 @@ }, { "args": [ - "cancel_before_invoke" + "cancel_after_client_done" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "cancel_after_invoke" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "cancel_before_invoke" ], "ci_platforms": [ "windows", @@ -16026,6 +16570,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -16847,6 +17433,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -17815,6 +18445,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_cert_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_cert_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -18781,6 +19455,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -19577,6 +20293,46 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_uds_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_uds_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, { "args": [ "call_creds" @@ -20443,7 +21199,7 @@ }, { "args": [ - "cancel_after_accept" + "buffer_pool_client" ], "ci_platforms": [ "windows", @@ -20451,7 +21207,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -20465,7 +21221,7 @@ }, { "args": [ - "cancel_after_client_done" + "buffer_pool_server" ], "ci_platforms": [ "windows", @@ -20487,7 +21243,7 @@ }, { "args": [ - "cancel_after_invoke" + "cancel_after_accept" ], "ci_platforms": [ "windows", @@ -20509,7 +21265,7 @@ }, { "args": [ - "cancel_before_invoke" + "cancel_after_client_done" ], "ci_platforms": [ "windows", @@ -20517,7 +21273,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -20531,7 +21287,51 @@ }, { "args": [ - "cancel_in_a_vacuum" + "cancel_after_invoke" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_census_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "cancel_before_invoke" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_census_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "cancel_in_a_vacuum" ], "ci_platforms": [ "windows", @@ -21387,6 +22187,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_compress_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_compress_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" @@ -22329,6 +23173,46 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_fd_nosec_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_fd_nosec_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" @@ -23093,6 +23977,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" @@ -24027,6 +24955,38 @@ "linux" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_nosec_test", + "platforms": [ + "linux" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_nosec_test", + "platforms": [ + "linux" + ] + }, { "args": [ "cancel_after_accept" @@ -24727,6 +25687,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" @@ -25629,14 +26633,14 @@ }, { "args": [ - "cancel_after_accept" + "buffer_pool_client" ], "ci_platforms": [ "windows", "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -25650,7 +26654,7 @@ }, { "args": [ - "cancel_after_client_done" + "buffer_pool_server" ], "ci_platforms": [ "windows", @@ -25671,7 +26675,7 @@ }, { "args": [ - "cancel_after_invoke" + "cancel_after_accept" ], "ci_platforms": [ "windows", @@ -25692,14 +26696,14 @@ }, { "args": [ - "cancel_before_invoke" + "cancel_after_client_done" ], "ci_platforms": [ "windows", "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -25713,7 +26717,7 @@ }, { "args": [ - "cancel_in_a_vacuum" + "cancel_after_invoke" ], "ci_platforms": [ "windows", @@ -25734,7 +26738,7 @@ }, { "args": [ - "cancel_with_status" + "cancel_before_invoke" ], "ci_platforms": [ "windows", @@ -25755,14 +26759,56 @@ }, { "args": [ - "compressed_payload" + "cancel_in_a_vacuum" ], "ci_platforms": [ "windows", "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_http_proxy_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "cancel_with_status" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_http_proxy_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "compressed_payload" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -26532,6 +27578,50 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_load_reporting_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_load_reporting_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" @@ -27476,6 +28566,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_proxy_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_proxy_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" @@ -28253,6 +29385,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" @@ -29051,6 +30225,48 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" @@ -29811,6 +31027,52 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [ + "msan" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [ + "msan" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" @@ -30679,6 +31941,46 @@ "posix" ] }, + { + "args": [ + "buffer_pool_client" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_uds_nosec_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "buffer_pool_server" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_uds_nosec_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, { "args": [ "cancel_after_accept" diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj index d6ec36962fc..c9b6c359009 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj @@ -157,6 +157,10 @@ + + + + diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters index a6c24a895a4..828a4a7f813 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters @@ -10,6 +10,12 @@ test\core\end2end\tests + + test\core\end2end\tests + + + test\core\end2end\tests + test\core\end2end\tests diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj index 085b14700c0..5ab1d84132b 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj @@ -157,6 +157,10 @@ + + + + diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters index d224a9ced96..34abc5e7fca 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters @@ -10,6 +10,12 @@ test\core\end2end\tests + + test\core\end2end\tests + + + test\core\end2end\tests + test\core\end2end\tests From 892dbf4d95c0694fb569c6faa611546352871f11 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 27 Sep 2016 19:42:27 -0700 Subject: [PATCH 080/286] Make settings configurable --- include/grpc++/server.h | 5 ++++- include/grpc++/server_builder.h | 33 +++++++++++++++++++++++++------ src/cpp/server/server_builder.cc | 34 +++++++++++++++++++++----------- src/cpp/server/server_cc.cc | 17 ++++++++-------- test/cpp/end2end/end2end_test.cc | 11 +++++++++++ 5 files changed, 73 insertions(+), 27 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 5b4cb6f2147..bae83eee3f5 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -135,10 +135,13 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { /// \param max_pollers The maximum number of polling threads per server /// completion queue (in param sync_server_cqs) to use for listening to /// incoming requests (used only in case of sync server) + /// + /// \param sync_cq_timeout_msec The timeout to use when calling AsyncNext() on + /// server completion queues passed via sync_server_cqs param. Server(std::shared_ptr>> sync_server_cqs, int max_message_size, ChannelArguments* args, int min_pollers, - int max_pollers); + int max_pollers, int sync_cq_timeout_msec); /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the Server instance. diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index d9a68783177..8fac168ff7e 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -62,6 +62,22 @@ class ServerBuilder { public: ServerBuilder(); + struct SyncServerSettings { + // Number of server completion queues to create to listen to incoming RPCs. + int num_cqs; + + // Minimum number of threads per completion queue that should be listening + // to incoming RPCs. + int min_pollers; + + // Maximum number of threads per completion queue that can be listening to + // incoming RPCs. + int max_pollers; + + // The timeout for server completion queue's AsyncNext call. + int cq_timeout_msec; + }; + /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the \a Server instance returned /// by \a BuildAndStart(). @@ -115,6 +131,9 @@ class ServerBuilder { ServerBuilder& SetOption(std::unique_ptr option); + /// Note: Only useful if this is a Synchronous server. + void SetSyncServerSettings(SyncServerSettings settings); + /// Tries to bind \a server to the given \a addr. /// /// It can be invoked multiple times. @@ -164,18 +183,20 @@ class ServerBuilder { private: friend class ::grpc::testing::ServerBuilderPluginTest; - // TODO (sreek) Make these configurable - // The default number of minimum and maximum number of polling threads needed - // per completion queue. These are only used in case of Sync server - const int kDefaultMinPollers = 1; - const int kDefaultMaxPollers = -1; // Unlimited - struct Port { grpc::string addr; std::shared_ptr creds; int* selected_port; }; + // Sync server settings. If this is not set via SetSyncServerSettings(), the + // following default values are used: + // sync_server_settings_.num_cqs = Number of CPUs + // sync_server_settings_.min_pollers = 1 + // sync_server_settings_.max_pollers = INT_MAX + // sync_server_settings_.cq_timeout_msec = 1000 + struct SyncServerSettings sync_server_settings_; + typedef std::unique_ptr HostString; struct NamedService { explicit NamedService(Service* s) : service(s) {} diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index eab57b4ac32..1a27100be5f 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -62,6 +62,7 @@ ServerBuilder::ServerBuilder() auto& factory = *it; plugins_.emplace_back(factory()); } + // all compression algorithms enabled by default. enabled_compression_algorithms_bitset_ = (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1; @@ -69,6 +70,17 @@ ServerBuilder::ServerBuilder() sizeof(maybe_default_compression_level_)); memset(&maybe_default_compression_algorithm_, 0, sizeof(maybe_default_compression_algorithm_)); + + + // Sync server setting defaults + sync_server_settings_.min_pollers = 1; + sync_server_settings_.max_pollers = INT_MAX; + + int num_cpus = gpr_cpu_num_cores(); + num_cpus = GPR_MAX(num_cpus, 4); + sync_server_settings_.num_cqs = num_cpus; + + sync_server_settings_.cq_timeout_msec = 1000; } std::unique_ptr ServerBuilder::AddCompletionQueue( @@ -131,6 +143,10 @@ ServerBuilder& ServerBuilder::SetDefaultCompressionAlgorithm( return *this; } +void ServerBuilder:: SetSyncServerSettings(SyncServerSettings settings) { + sync_server_settings_ = settings; // copy the settings +} + ServerBuilder& ServerBuilder::AddListeningPort( const grpc::string& addr, std::shared_ptr creds, int* selected_port) { @@ -200,23 +216,17 @@ std::unique_ptr ServerBuilder::BuildAndStart() { if (has_sync_methods) { // If the server has synchronous methods, it will need completion queues to - // handle those methods. Create one cq per core (or create 4 if number of - // cores is less than 4 or unavailable) - // - // TODO (sreek) - The default number 4 is just a guess. Check if a lower or - // higher number makes sense - int num_cqs = gpr_cpu_num_cores(); - num_cqs = GPR_MAX(num_cqs, 4); - - for (int i = 0; i < num_cqs; i++) { + // handle those methods. + for (int i = 0; i < sync_server_settings_.num_cqs; i++) { sync_server_cqs->emplace_back(new ServerCompletionQueue()); } } // TODO (sreek) Make the number of pollers configurable - std::unique_ptr server( - new Server(sync_server_cqs, max_receive_message_size_, &args, - kDefaultMinPollers, kDefaultMaxPollers)); + std::unique_ptr server(new Server( + sync_server_cqs, max_receive_message_size_, &args, + sync_server_settings_.min_pollers, sync_server_settings_.max_pollers, + sync_server_settings_.cq_timeout_msec)); ServerInitializer* initializer = server->initializer(); diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index e9f3c997886..36bc61fdf1b 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -291,18 +291,17 @@ class Server::SyncRequestManager : public GrpcRpcManager { public: SyncRequestManager(Server* server, CompletionQueue* server_cq, std::shared_ptr global_callbacks, - int min_pollers, int max_pollers) + int min_pollers, int max_pollers, int cq_timeout_msec) : GrpcRpcManager(min_pollers, max_pollers), server_(server), server_cq_(server_cq), + cq_timeout_msec_(cq_timeout_msec), global_callbacks_(global_callbacks) {} - static const int kRpcPollingTimeoutMsec = 3000; - WorkStatus PollForWork(void** tag, bool* ok) GRPC_OVERRIDE { *tag = nullptr; gpr_timespec deadline = - gpr_time_from_millis(kRpcPollingTimeoutMsec, GPR_TIMESPAN); + gpr_time_from_millis(cq_timeout_msec_, GPR_TIMESPAN); switch (server_cq_->AsyncNext(tag, ok, deadline)) { case CompletionQueue::TIMEOUT: @@ -389,6 +388,7 @@ class Server::SyncRequestManager : public GrpcRpcManager { private: Server* server_; CompletionQueue* server_cq_; + int cq_timeout_msec_; std::vector sync_methods_; std::unique_ptr unknown_method_; std::shared_ptr global_callbacks_; @@ -399,7 +399,7 @@ Server::Server( std::shared_ptr>> sync_server_cqs, int max_receive_message_size, ChannelArguments* args, int min_pollers, - int max_pollers) + int max_pollers, int sync_cq_timeout_msec) : max_receive_message_size_(max_receive_message_size), sync_server_cqs_(sync_server_cqs), started_(false), @@ -415,8 +415,9 @@ Server::Server( for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); it++) { - sync_req_mgrs_.emplace_back(new SyncRequestManager( - this, (*it).get(), global_callbacks_, min_pollers, max_pollers)); + sync_req_mgrs_.emplace_back( + new SyncRequestManager(this, (*it).get(), global_callbacks_, + min_pollers, max_pollers, sync_cq_timeout_msec)); } grpc_channel_args channel_args; @@ -606,7 +607,7 @@ void Server::ShutdownInternal(gpr_timespec deadline) { // Drain the shutdown queue (if the previous call to AsyncNext() timed out // and we didn't remove the tag from the queue yet) - while(shutdown_cq.Next(&tag, &ok)) { + while (shutdown_cq.Next(&tag, &ok)) { // Nothing to be done here } diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index b1d3ce92f6a..a46f9f268bc 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -226,6 +226,11 @@ class End2endTest : public ::testing::TestWithParam { kMaxMessageSize_(8192), special_service_("special") { GetParam().Log(); + + sync_server_settings_.max_pollers = INT_MAX; + sync_server_settings_.min_pollers = 1; + sync_server_settings_.cq_timeout_msec = 10; + sync_server_settings_.num_cqs = 4; } void TearDown() GRPC_OVERRIDE { @@ -250,6 +255,9 @@ class End2endTest : public ::testing::TestWithParam { builder.SetMaxMessageSize( kMaxMessageSize_); // For testing max message size. builder.RegisterService(&dup_pkg_service_); + + builder.SetSyncServerSettings(sync_server_settings_); + server_ = builder.BuildAndStart(); is_server_started_ = true; } @@ -279,6 +287,8 @@ class End2endTest : public ::testing::TestWithParam { ServerBuilder builder; builder.AddListeningPort(proxyaddr.str(), InsecureServerCredentials()); builder.RegisterService(proxy_service_.get()); + builder.SetSyncServerSettings(sync_server_settings_); + proxy_server_ = builder.BuildAndStart(); channel_ = CreateChannel(proxyaddr.str(), InsecureChannelCredentials()); @@ -299,6 +309,7 @@ class End2endTest : public ::testing::TestWithParam { TestServiceImpl special_service_; TestServiceImplDupPkg dup_pkg_service_; grpc::string user_agent_prefix_; + ServerBuilder::SyncServerSettings sync_server_settings_; }; static void SendRpc(grpc::testing::EchoTestService::Stub* stub, int num_rpcs, From ef6b97659edb575a002d574db89d90f7ebf4b979 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 08:37:51 -0700 Subject: [PATCH 081/286] Add tracing, fix some transport bugs wrt buffer_pools --- include/grpc/grpc.h | 2 +- .../chttp2/transport/chttp2_transport.c | 24 +- src/core/lib/iomgr/buffer_pool.c | 66 ++++- src/core/lib/iomgr/buffer_pool.h | 6 +- src/core/lib/iomgr/tcp_client_posix.c | 2 +- src/core/lib/iomgr/tcp_posix.c | 2 +- src/core/lib/iomgr/tcp_server_posix.c | 2 +- .../google_default_credentials.c | 3 +- .../security/credentials/jwt/jwt_verifier.c | 4 +- .../credentials/oauth2/oauth2_credentials.c | 5 +- src/core/lib/surface/init.c | 2 + src/ruby/ext/grpc/rb_grpc_imports.generated.h | 2 +- test/core/end2end/tests/buffer_pool_server.c | 228 +++++++++++++++++- test/core/util/mock_endpoint.c | 12 +- test/core/util/passthru_endpoint.c | 16 +- test/core/util/port_server_client.c | 11 +- 16 files changed, 354 insertions(+), 33 deletions(-) diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h index a6e02cd0722..4bdf744d911 100644 --- a/include/grpc/grpc.h +++ b/include/grpc/grpc.h @@ -402,7 +402,7 @@ GRPCAPI int grpc_is_binary_header(const char *key, size_t length); GRPCAPI const char *grpc_call_error_to_string(grpc_call_error error); /** Create a buffer pool */ -GRPCAPI grpc_buffer_pool *grpc_buffer_pool_create(void); +GRPCAPI grpc_buffer_pool *grpc_buffer_pool_create(const char *trace_name); /** Add a reference to a buffer pool */ GRPCAPI void grpc_buffer_pool_ref(grpc_buffer_pool *buffer_pool); diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 3ebb4673327..13241f6abe2 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -257,7 +257,8 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_closure_init(&t->benign_reclaimer, benign_reclaimer, t); grpc_closure_init(&t->destructive_reclaimer, destructive_reclaimer, t); grpc_closure_init(&t->benign_reclaimer_locked, benign_reclaimer_locked, t); - grpc_closure_init(&t->destructive_reclaimer_locked, destructive_reclaimer_locked, t); + grpc_closure_init(&t->destructive_reclaimer_locked, + destructive_reclaimer_locked, t); grpc_chttp2_goaway_parser_init(&t->goaway_parser); grpc_chttp2_hpack_parser_init(&t->hpack_parser); @@ -2124,10 +2125,21 @@ static void benign_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, grpc_chttp2_transport *t = arg; if (error == GRPC_ERROR_NONE && grpc_chttp2_stream_map_size(&t->stream_map) == 0) { + if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, "HTTP2: %s - send goaway to free memory", + t->peer_string); + } send_goaway(exec_ctx, t, GRPC_CHTTP2_ENHANCE_YOUR_CALM, gpr_slice_from_static_string("Buffers full")); + } else if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, + "HTTP2: %s - skip benign reclaimation, there are still %" PRIdPTR + " streams", + t->peer_string, grpc_chttp2_stream_map_size(&t->stream_map)); } t->benign_reclaimer_registered = false; + grpc_buffer_user_finish_reclaimation(exec_ctx, + grpc_endpoint_get_buffer_user(t->ep)); GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "benign_reclaimer"); } @@ -2138,18 +2150,20 @@ static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, t->destructive_reclaimer_registered = false; if (error == GRPC_ERROR_NONE && n > 0) { grpc_chttp2_stream *s = grpc_chttp2_stream_map_rand(&t->stream_map); + if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, "HTTP2: %s - abandon stream id %d", t->peer_string, + s->id); + } grpc_chttp2_cancel_stream( exec_ctx, t, s, grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"), GRPC_ERROR_INT_HTTP2_ERROR, GRPC_CHTTP2_ENHANCE_YOUR_CALM)); if (n > 1) { post_destructive_reclaimer(exec_ctx, t); - t->destructive_reclaimer_registered = true; - grpc_buffer_user_post_reclaimer(exec_ctx, - grpc_endpoint_get_buffer_user(t->ep), - true, &t->destructive_reclaimer); } } + grpc_buffer_user_finish_reclaimation(exec_ctx, + grpc_endpoint_get_buffer_user(t->ep)); GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "destructive_reclaimer"); } diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 88f37c9fc1c..cfa171684b8 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -37,6 +37,7 @@ #include #include +#include #include #include "src/core/lib/iomgr/combiner.h" @@ -62,6 +63,8 @@ struct grpc_buffer_pool { grpc_closure bpreclaimation_done_closure; grpc_buffer_user *roots[GRPC_BULIST_COUNT]; + + char *name; }; /******************************************************************************* @@ -175,8 +178,18 @@ static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { gpr_mu_lock(&buffer_user->mu); if (buffer_user->free_pool < 0 && -buffer_user->free_pool <= buffer_pool->free_pool) { - buffer_pool->free_pool += buffer_user->free_pool; + int64_t amt = -buffer_user->free_pool; buffer_user->free_pool = 0; + buffer_pool->free_pool -= amt; + if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: grant alloc %" PRId64 + " bytes; bp_free_pool -> %" PRId64, + buffer_pool->name, buffer_user->name, amt, + buffer_pool->free_pool); + } + } else if (grpc_buffer_pool_trace && buffer_user->free_pool >= 0) { + gpr_log(GPR_DEBUG, "BP %s %s: discard already satisfied alloc request", + buffer_pool->name, buffer_user->name); } if (buffer_user->free_pool >= 0) { buffer_user->allocating = false; @@ -198,8 +211,15 @@ static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { bulist_pop(buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL))) { gpr_mu_lock(&buffer_user->mu); if (buffer_user->free_pool > 0) { - buffer_pool->free_pool += buffer_user->free_pool; + int64_t amt = buffer_user->free_pool; buffer_user->free_pool = 0; + buffer_pool->free_pool += amt; + if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: scavenge %" PRId64 + " bytes; bp_free_pool -> %" PRId64, + buffer_pool->name, buffer_user->name, amt, + buffer_pool->free_pool); + } gpr_mu_unlock(&buffer_user->mu); return true; } else { @@ -217,6 +237,10 @@ static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool, : GRPC_BULIST_RECLAIMER_BENIGN; grpc_buffer_user *buffer_user = bulist_pop(buffer_pool, list); if (buffer_user == NULL) return false; + if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: initiate %s reclaimation", buffer_pool->name, + buffer_user->name, destructive ? "destructive" : "benign"); + } buffer_pool->reclaiming = true; grpc_closure *c = buffer_user->reclaimers[destructive]; buffer_user->reclaimers[destructive] = NULL; @@ -384,7 +408,7 @@ static void bp_reclaimation_done(grpc_exec_ctx *exec_ctx, void *bp, * grpc_buffer_pool api */ -grpc_buffer_pool *grpc_buffer_pool_create(void) { +grpc_buffer_pool *grpc_buffer_pool_create(const char *name) { grpc_buffer_pool *buffer_pool = gpr_malloc(sizeof(*buffer_pool)); gpr_ref_init(&buffer_pool->refs, 1); buffer_pool->combiner = grpc_combiner_create(NULL); @@ -392,6 +416,12 @@ grpc_buffer_pool *grpc_buffer_pool_create(void) { buffer_pool->size = INT64_MAX; buffer_pool->step_scheduled = false; buffer_pool->reclaiming = false; + if (name != NULL) { + buffer_pool->name = gpr_strdup(name); + } else { + gpr_asprintf(&buffer_pool->name, "anonymous_pool_%" PRIxPTR, + (intptr_t)buffer_pool); + } grpc_closure_init(&buffer_pool->bpstep_closure, bpstep, buffer_pool); grpc_closure_init(&buffer_pool->bpreclaimation_done_closure, bp_reclaimation_done, buffer_pool); @@ -451,7 +481,7 @@ grpc_buffer_pool *grpc_buffer_pool_from_channel_args( } } } - return grpc_buffer_pool_create(); + return grpc_buffer_pool_create(NULL); } static void *bp_copy(void *bp) { @@ -473,7 +503,7 @@ const grpc_arg_pointer_vtable *grpc_buffer_pool_arg_vtable(void) { */ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, - grpc_buffer_pool *buffer_pool) { + grpc_buffer_pool *buffer_pool, const char *name) { buffer_user->buffer_pool = grpc_buffer_pool_internal_ref(buffer_pool); grpc_closure_init(&buffer_user->allocate_closure, &bu_allocate, buffer_user); grpc_closure_init(&buffer_user->add_to_free_pool_closure, @@ -498,6 +528,12 @@ void grpc_buffer_user_init(grpc_buffer_user *buffer_user, #ifndef NDEBUG buffer_user->asan_canary = gpr_malloc(1); #endif + if (name != NULL) { + buffer_user->name = gpr_strdup(name); + } else { + gpr_asprintf(&buffer_user->name, "anonymous_buffer_user_%" PRIxPTR, + (intptr_t)buffer_user); + } } void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, @@ -533,6 +569,10 @@ void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, &buffer_user->on_done_destroy_closure); if (on_done_destroy != NULL) { /* already shutdown */ + if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: alloc %" PRIdPTR " after shutdown", + buffer_user->buffer_pool->name, buffer_user->name, size); + } grpc_exec_ctx_sched( exec_ctx, optional_on_done, GRPC_ERROR_CREATE("Buffer pool user is already shutdown"), NULL); @@ -541,6 +581,12 @@ void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, } buffer_user->allocated += (int64_t)size; buffer_user->free_pool -= (int64_t)size; + if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: alloc %" PRIdPTR "; allocated -> %" PRId64 + ", free_pool -> %" PRId64, + buffer_user->buffer_pool->name, buffer_user->name, size, + buffer_user->allocated, buffer_user->free_pool); + } if (buffer_user->free_pool < 0) { grpc_closure_list_append(&buffer_user->on_allocated, optional_on_done, GRPC_ERROR_NONE); @@ -563,6 +609,12 @@ void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, bool was_zero_or_negative = buffer_user->free_pool <= 0; buffer_user->free_pool += (int64_t)size; buffer_user->allocated -= (int64_t)size; + if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: free %" PRIdPTR "; allocated -> %" PRId64 + ", free_pool -> %" PRId64, + buffer_user->buffer_pool->name, buffer_user->name, size, + buffer_user->allocated, buffer_user->free_pool); + } bool is_bigger_than_zero = buffer_user->free_pool > 0; if (is_bigger_than_zero && was_zero_or_negative && !buffer_user->added_to_free_pool) { @@ -597,6 +649,10 @@ void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user) { + if (grpc_buffer_pool_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: reclaimation complete", + buffer_user->buffer_pool->name, buffer_user->name); + } grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, &buffer_user->buffer_pool->bpreclaimation_done_closure, GRPC_ERROR_NONE, false); diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/buffer_pool.h index 301e059c186..1564872b5d6 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/buffer_pool.h @@ -38,6 +38,8 @@ #include "src/core/lib/iomgr/exec_ctx.h" +extern int grpc_buffer_pool_trace; + grpc_buffer_pool *grpc_buffer_pool_internal_ref(grpc_buffer_pool *buffer_pool); void grpc_buffer_pool_internal_unref(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool); @@ -83,10 +85,12 @@ struct grpc_buffer_user { gpr_atm on_done_destroy_closure; grpc_buffer_user_link links[GRPC_BULIST_COUNT]; + + char *name; }; void grpc_buffer_user_init(grpc_buffer_user *buffer_user, - grpc_buffer_pool *buffer_pool); + grpc_buffer_pool *buffer_pool, const char *name); void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, grpc_buffer_user *buffer_user, grpc_closure *on_done); diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index cf01623f097..4e8f9e53bb8 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -125,7 +125,7 @@ grpc_endpoint *grpc_tcp_client_create_from_fd( grpc_exec_ctx *exec_ctx, grpc_fd *fd, const grpc_channel_args *channel_args, const char *addr_str) { size_t tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE; - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(NULL); if (channel_args != NULL) { for (size_t i = 0; i < channel_args->num_args; i++) { if (0 == diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 812c39235bc..120622e817c 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -544,7 +544,7 @@ grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, grpc_buffer_pool *buffer_pool, tcp->write_closure.cb = tcp_handle_write; tcp->write_closure.cb_arg = tcp; gpr_slice_buffer_init(&tcp->last_read_buffer); - grpc_buffer_user_init(&tcp->buffer_user, buffer_pool); + grpc_buffer_user_init(&tcp->buffer_user, buffer_pool, peer_string); grpc_buffer_user_slice_allocator_init( &tcp->slice_allocator, &tcp->buffer_user, tcp_read_allocation_done, tcp); /* Tell network status tracker about new endpoint */ diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index 33041523859..4d36fd4cafe 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -163,7 +163,7 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server)); s->so_reuseport = has_so_reuseport; - s->buffer_pool = grpc_buffer_pool_create(); + s->buffer_pool = grpc_buffer_pool_create(NULL); for (size_t i = 0; i < (args == NULL ? 0 : args->num_args); i++) { if (0 == strcmp(GRPC_ARG_ALLOW_REUSEPORT, args->args[i].key)) { if (args->args[i].type == GRPC_ARG_INTEGER) { diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.c b/src/core/lib/security/credentials/google_default/google_default_credentials.c index 3bcde3da8b1..4e703aa9f40 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.c +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.c @@ -124,7 +124,8 @@ static int is_stack_running_on_compute_engine(void) { grpc_httpcli_context_init(&context); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = + grpc_buffer_pool_create("google_default_credentials"); grpc_httpcli_get( &exec_ctx, &context, &detector.pollent, buffer_pool, &request, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), max_detection_delay), diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.c b/src/core/lib/security/credentials/jwt/jwt_verifier.c index c1a3eb7eab8..ffcd0b3910d 100644 --- a/src/core/lib/security/credentials/jwt/jwt_verifier.c +++ b/src/core/lib/security/credentials/jwt/jwt_verifier.c @@ -660,7 +660,7 @@ static void on_openid_config_retrieved(grpc_exec_ctx *exec_ctx, void *user_data, /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("jwt_verifier"); grpc_httpcli_get( exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, buffer_pool, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), @@ -772,7 +772,7 @@ static void retrieve_key_and_verify(grpc_exec_ctx *exec_ctx, /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("jwt_verifier"); grpc_httpcli_get( exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, buffer_pool, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), diff --git a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c index e9e83d14688..61c0815b2ad 100644 --- a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +++ b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c @@ -310,7 +310,7 @@ static void compute_engine_fetch_oauth2( /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("oauth2_credentials"); grpc_httpcli_get(exec_ctx, httpcli_context, pollent, buffer_pool, &request, deadline, grpc_closure_create(response_cb, metadata_req), &metadata_req->response); @@ -365,7 +365,8 @@ static void refresh_token_fetch_oauth2( /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = + grpc_buffer_pool_create("oauth2_credentials_refresh"); grpc_httpcli_post(exec_ctx, httpcli_context, pollent, buffer_pool, &request, body, strlen(body), deadline, grpc_closure_create(response_cb, metadata_req), diff --git a/src/core/lib/surface/init.c b/src/core/lib/surface/init.c index 3cbbaa7b0ce..de913af4ee5 100644 --- a/src/core/lib/surface/init.c +++ b/src/core/lib/surface/init.c @@ -48,6 +48,7 @@ #include "src/core/lib/channel/message_size_filter.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/http/parser.h" +#include "src/core/lib/iomgr/buffer_pool.h" #include "src/core/lib/iomgr/combiner.h" #include "src/core/lib/iomgr/executor.h" #include "src/core/lib/iomgr/iomgr.h" @@ -184,6 +185,7 @@ void grpc_init(void) { // Default timeout trace to 1 grpc_cq_event_timeout_trace = 1; grpc_register_tracer("op_failure", &grpc_trace_operation_failures); + grpc_register_tracer("buffer_pool", &grpc_buffer_pool_trace); #ifndef NDEBUG grpc_register_tracer("pending_tags", &grpc_trace_pending_tags); #endif diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index 4926275fa2e..703ea59e6e6 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -347,7 +347,7 @@ extern grpc_is_binary_header_type grpc_is_binary_header_import; typedef const char *(*grpc_call_error_to_string_type)(grpc_call_error error); extern grpc_call_error_to_string_type grpc_call_error_to_string_import; #define grpc_call_error_to_string grpc_call_error_to_string_import -typedef grpc_buffer_pool *(*grpc_buffer_pool_create_type)(void); +typedef grpc_buffer_pool *(*grpc_buffer_pool_create_type)(const char *trace_name); extern grpc_buffer_pool_create_type grpc_buffer_pool_create_import; #define grpc_buffer_pool_create grpc_buffer_pool_create_import typedef void(*grpc_buffer_pool_ref_type)(grpc_buffer_pool *buffer_pool); diff --git a/test/core/end2end/tests/buffer_pool_server.c b/test/core/end2end/tests/buffer_pool_server.c index 0b06efd02e8..7f07ec79d5e 100644 --- a/test/core/end2end/tests/buffer_pool_server.c +++ b/test/core/end2end/tests/buffer_pool_server.c @@ -95,9 +95,235 @@ static void end_test(grpc_end2end_test_fixture *f) { grpc_completion_queue_destroy(f->cq); } +/* Creates and returns a gpr_slice containing random alphanumeric characters. */ +static gpr_slice generate_random_slice() { + size_t i; + static const char chars[] = "abcdefghijklmnopqrstuvwxyz1234567890"; + char output[1024 * 1024]; + for (i = 0; i < GPR_ARRAY_SIZE(output) - 1; ++i) { + output[i] = chars[rand() % (int)(sizeof(chars) - 1)]; + } + output[GPR_ARRAY_SIZE(output) - 1] = '\0'; + return gpr_slice_from_copied_string(output); +} + void buffer_pool_server(grpc_end2end_test_config config) { + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_server"); + grpc_buffer_pool_resize(buffer_pool, 5 * 1024 * 1024); + +#define NUM_CALLS 100 +#define CLIENT_BASE_TAG 1000 +#define SERVER_START_BASE_TAG 2000 +#define SERVER_RECV_BASE_TAG 3000 +#define SERVER_END_BASE_TAG 4000 + + grpc_arg arg; + arg.key = GRPC_ARG_BUFFER_POOL; + arg.type = GRPC_ARG_POINTER; + arg.value.pointer.p = buffer_pool; + arg.value.pointer.vtable = grpc_buffer_pool_arg_vtable(); + grpc_channel_args args = {1, &arg}; + grpc_end2end_test_fixture f = - begin_test(config, "buffer_pool_server", NULL, NULL); + begin_test(config, "buffer_pool_server", NULL, &args); + + /* Create large request and response bodies. These are big enough to require + * 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_call *client_calls[NUM_CALLS]; + grpc_call *server_calls[NUM_CALLS]; + grpc_metadata_array initial_metadata_recv[NUM_CALLS]; + grpc_metadata_array trailing_metadata_recv[NUM_CALLS]; + grpc_metadata_array request_metadata_recv[NUM_CALLS]; + grpc_call_details call_details[NUM_CALLS]; + grpc_status_code status[NUM_CALLS]; + char *details[NUM_CALLS]; + size_t details_capacity[NUM_CALLS]; + grpc_byte_buffer *request_payload_recv[NUM_CALLS]; + int was_cancelled[NUM_CALLS]; + grpc_call_error error; + int pending_client_calls = 0; + int pending_server_start_calls = 0; + int pending_server_recv_calls = 0; + 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); + + grpc_op ops[6]; + grpc_op *op; + + for (int i = 0; i < NUM_CALLS; i++) { + grpc_metadata_array_init(&initial_metadata_recv[i]); + grpc_metadata_array_init(&trailing_metadata_recv[i]); + grpc_metadata_array_init(&request_metadata_recv[i]); + grpc_call_details_init(&call_details[i]); + details[i] = NULL; + details_capacity[i] = 0; + request_payload_recv[i] = NULL; + was_cancelled[i] = 0; + } + + 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)); + GPR_ASSERT(GRPC_CALL_OK == error); + + pending_server_start_calls++; + } + + for (int i = 0; i < NUM_CALLS; i++) { + client_calls[i] = grpc_channel_create_call( + f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq, "/foo", + "foo.test.google.fr", n_seconds_time(60), NULL); + + 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_SEND_MESSAGE; + op->data.send_message = request_payload; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_INITIAL_METADATA; + op->data.recv_initial_metadata = &initial_metadata_recv[i]; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; + op->data.recv_status_on_client.trailing_metadata = + &trailing_metadata_recv[i]; + op->data.recv_status_on_client.status = &status[i]; + op->data.recv_status_on_client.status_details = &details[i]; + op->data.recv_status_on_client.status_details_capacity = + &details_capacity[i]; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(client_calls[i], ops, (size_t)(op - ops), + tag(CLIENT_BASE_TAG + i), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + pending_client_calls++; + } + + while (pending_client_calls + pending_server_recv_calls + + pending_server_end_calls > + 0) { + gpr_log(GPR_DEBUG, + "pending: client_calls=%d server_start_calls=%d " + "server_recv_calls=%d server_end_calls=%d", + pending_client_calls, pending_server_start_calls, + pending_server_recv_calls, pending_server_end_calls); + + 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; + if (ev_tag < CLIENT_BASE_TAG) { + abort(); /* illegal tag */ + } else if (ev_tag < SERVER_START_BASE_TAG) { + /* client call finished */ + int call_id = ev_tag - CLIENT_BASE_TAG; + GPR_ASSERT(call_id >= 0); + GPR_ASSERT(call_id < NUM_CALLS); + switch (status[call_id]) { + case GRPC_STATUS_RESOURCE_EXHAUSTED: + cancelled_calls_on_client++; + break; + case GRPC_STATUS_OK: + break; + default: + gpr_log(GPR_ERROR, "Unexpected status code: %d", status[call_id]); + abort(); + } + GPR_ASSERT(pending_client_calls > 0); + pending_client_calls--; + } else if (ev_tag < SERVER_RECV_BASE_TAG) { + /* new incoming call to the server */ + int call_id = ev_tag - SERVER_START_BASE_TAG; + 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); + + GPR_ASSERT(pending_server_start_calls > 0); + pending_server_start_calls--; + pending_server_recv_calls++; + } else if (ev_tag < SERVER_END_BASE_TAG) { + /* finished read on the server */ + int call_id = ev_tag - SERVER_RECV_BASE_TAG; + GPR_ASSERT(call_id >= 0); + GPR_ASSERT(call_id < NUM_CALLS); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; + op->data.recv_close_on_server.cancelled = &was_cancelled[call_id]; + op->flags = 0; + op->reserved = NULL; + 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 = "xyz"; + op->flags = 0; + op->reserved = NULL; + op++; + 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++; + } else { + int call_id = ev_tag - SERVER_END_BASE_TAG; + GPR_ASSERT(call_id >= 0); + GPR_ASSERT(call_id < NUM_CALLS); + + if (was_cancelled[call_id]) { + cancelled_calls_on_server++; + } + GPR_ASSERT(pending_server_end_calls > 0); + pending_server_end_calls--; + } + } + + gpr_log( + GPR_INFO, + "Done. %d total calls: %d cancelled at server, %d cancelled at client.", + NUM_CALLS, cancelled_calls_on_server, cancelled_calls_on_client); + end_test(&f); config.tear_down_data(&f); } diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index dcb4e5896f7..a70de7678c5 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -33,6 +33,8 @@ #include "test/core/util/mock_endpoint.h" +#include + #include #include @@ -88,7 +90,8 @@ static void unref(grpc_exec_ctx *exec_ctx, grpc_mock_endpoint *m) { } } -static void me_finish_shutdown(grpc_exec_ctx *exec_ctx, void *me, grpc_error *error) { +static void me_finish_shutdown(grpc_exec_ctx *exec_ctx, void *me, + grpc_error *error) { grpc_mock_endpoint *m = me; unref(exec_ctx, m); } @@ -108,7 +111,7 @@ static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; - unref(exec_ctx,m); + unref(exec_ctx, m); } static char *me_get_peer(grpc_endpoint *ep) { @@ -139,7 +142,10 @@ grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice), grpc_mock_endpoint *m = gpr_malloc(sizeof(*m)); m->base.vtable = &vtable; m->refs = 2; - grpc_buffer_user_init(&m->buffer_user, buffer_pool); + char *name; + gpr_asprintf(&name, "mock_endpoint_%" PRIxPTR, (intptr_t)m); + grpc_buffer_user_init(&m->buffer_user, buffer_pool, name); + gpr_free(name); gpr_slice_buffer_init(&m->read_buffer); gpr_mu_init(&m->mu); m->on_write = on_write; diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index bdf75ce5877..a1aaeda9162 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -33,6 +33,8 @@ #include "test/core/util/passthru_endpoint.h" +#include + #include #include @@ -141,7 +143,7 @@ static void me_really_destroy(grpc_exec_ctx *exec_ctx, void *ep, static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { half *m = (half *)ep; grpc_buffer_user_shutdown(exec_ctx, &m->buffer_user, - grpc_closure_create(me_really_destroy, m)); + grpc_closure_create(me_really_destroy, m)); } static char *me_get_peer(grpc_endpoint *ep) { @@ -168,12 +170,16 @@ static const grpc_endpoint_vtable vtable = { }; static void half_init(half *m, passthru_endpoint *parent, - grpc_buffer_pool *buffer_pool) { + grpc_buffer_pool *buffer_pool, const char *half_name) { m->base.vtable = &vtable; m->parent = parent; gpr_slice_buffer_init(&m->read_buffer); m->on_read = NULL; - grpc_buffer_user_init(&m->buffer_user, buffer_pool); + char *name; + gpr_asprintf(&name, "passthru_endpoint_%s_%" PRIxPTR, half_name, + (intptr_t)parent); + grpc_buffer_user_init(&m->buffer_user, buffer_pool, name); + gpr_free(name); } void grpc_passthru_endpoint_create(grpc_endpoint **client, @@ -182,8 +188,8 @@ void grpc_passthru_endpoint_create(grpc_endpoint **client, passthru_endpoint *m = gpr_malloc(sizeof(*m)); m->halves = 2; m->shutdown = 0; - half_init(&m->client, m, buffer_pool); - half_init(&m->server, m, buffer_pool); + half_init(&m->client, m, buffer_pool, "client"); + half_init(&m->server, m, buffer_pool, "server"); gpr_mu_init(&m->mu); *client = &m->client.base; *server = &m->server.base; diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c index dd444236e97..9bd34677cbc 100644 --- a/test/core/util/port_server_client.c +++ b/test/core/util/port_server_client.c @@ -49,6 +49,8 @@ #include "src/core/lib/http/httpcli.h" +int grpc_buffer_pool_trace = 0; + typedef struct freereq { gpr_mu *mu; grpc_polling_entity pops; @@ -99,7 +101,8 @@ void grpc_free_port_using_server(char *server, int port) { req.http.path = path; grpc_httpcli_context_init(&context); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = + grpc_buffer_pool_create("port_server_client/free"); grpc_httpcli_get(&exec_ctx, &context, &pr.pops, buffer_pool, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), grpc_closure_create(freed_port_from_server, &pr), &rsp); @@ -169,7 +172,8 @@ static void got_port_from_server(grpc_exec_ctx *exec_ctx, void *arg, req.http.path = "/get"; grpc_http_response_destroy(&pr->response); memset(&pr->response, 0, sizeof(pr->response)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = + grpc_buffer_pool_create("port_server_client/pick_retry"); grpc_httpcli_get(exec_ctx, pr->ctx, &pr->pops, buffer_pool, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), grpc_closure_create(got_port_from_server, pr), @@ -215,7 +219,8 @@ int grpc_pick_port_using_server(char *server) { req.http.path = "/get"; grpc_httpcli_context_init(&context); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = + grpc_buffer_pool_create("port_server_client/pick"); grpc_httpcli_get(&exec_ctx, &context, &pr.pops, buffer_pool, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), grpc_closure_create(got_port_from_server, &pr), From c1acca2c01cc93ef4d543ebf36c5e8aebd6c342c Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 09:21:35 -0700 Subject: [PATCH 082/286] Fix flow control of cancelled streams --- .../ext/transport/chttp2/transport/parsing.c | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c index bc12515b0c3..8005350ae7a 100644 --- a/src/core/ext/transport/chttp2/transport/parsing.c +++ b/src/core/ext/transport/chttp2/transport/parsing.c @@ -375,22 +375,26 @@ static grpc_error *update_incoming_window(grpc_exec_ctx *exec_ctx, return err; } - if (incoming_frame_size > s->incoming_window) { - char *msg; - gpr_asprintf(&msg, "frame of size %d overflows incoming window of %" PRId64, - t->incoming_frame_size, s->incoming_window); - grpc_error *err = GRPC_ERROR_CREATE(msg); - gpr_free(msg); - return err; - } - GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("parse", t, incoming_window, incoming_frame_size); - GRPC_CHTTP2_FLOW_DEBIT_STREAM("parse", t, s, incoming_window, - incoming_frame_size); - s->received_bytes += incoming_frame_size; - s->max_recv_bytes -= - (uint32_t)GPR_MIN(s->max_recv_bytes, incoming_frame_size); + + if (s != NULL) { + if (incoming_frame_size > s->incoming_window) { + char *msg; + gpr_asprintf(&msg, + "frame of size %d overflows incoming window of %" PRId64, + t->incoming_frame_size, s->incoming_window); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; + } + + GRPC_CHTTP2_FLOW_DEBIT_STREAM("parse", t, s, incoming_window, + incoming_frame_size); + s->received_bytes += incoming_frame_size; + s->max_recv_bytes -= + (uint32_t)GPR_MIN(s->max_recv_bytes, incoming_frame_size); + } return GRPC_ERROR_NONE; } @@ -400,20 +404,22 @@ static grpc_error *init_data_frame_parser(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s = grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id); grpc_error *err = GRPC_ERROR_NONE; + err = update_incoming_window(exec_ctx, t, s); + if (err != GRPC_ERROR_NONE) { + goto error_handler; + } if (s == NULL) { return init_skip_frame_parser(exec_ctx, t, 0); } s->stats.incoming.framing_bytes += 9; - if (s->read_closed) { + if (err == GRPC_ERROR_NONE && s->read_closed) { return init_skip_frame_parser(exec_ctx, t, 0); } - if (err == GRPC_ERROR_NONE) { - err = update_incoming_window(exec_ctx, t, s); - } if (err == GRPC_ERROR_NONE) { err = grpc_chttp2_data_parser_begin_frame(&s->data_parser, t->incoming_frame_flags, s->id); } +error_handler: if (err == GRPC_ERROR_NONE) { t->incoming_stream = s; t->parser = grpc_chttp2_data_parser_parse; @@ -421,7 +427,9 @@ static grpc_error *init_data_frame_parser(grpc_exec_ctx *exec_ctx, return GRPC_ERROR_NONE; } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, NULL)) { /* handle stream errors by closing the stream */ - grpc_chttp2_mark_stream_closed(exec_ctx, t, s, true, false, err); + if (s != NULL) { + grpc_chttp2_mark_stream_closed(exec_ctx, t, s, true, false, err); + } gpr_slice_buffer_add( &t->qbuf, grpc_chttp2_rst_stream_create(t->incoming_stream_id, GRPC_CHTTP2_PROTOCOL_ERROR, From bb1d72d570892ee7d8e433b2b8a4d2c8e261c4d0 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 09:21:43 -0700 Subject: [PATCH 083/286] Better debugging --- test/core/end2end/tests/buffer_pool_server.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/core/end2end/tests/buffer_pool_server.c b/test/core/end2end/tests/buffer_pool_server.c index 7f07ec79d5e..70e42d28f44 100644 --- a/test/core/end2end/tests/buffer_pool_server.c +++ b/test/core/end2end/tests/buffer_pool_server.c @@ -225,9 +225,11 @@ void buffer_pool_server(grpc_end2end_test_config config) { 0) { gpr_log(GPR_DEBUG, "pending: client_calls=%d server_start_calls=%d " - "server_recv_calls=%d server_end_calls=%d", + "server_recv_calls=%d server_end_calls=%d; cancelled client=%d " + "server=%d", pending_client_calls, pending_server_start_calls, - pending_server_recv_calls, pending_server_end_calls); + pending_server_recv_calls, pending_server_end_calls, + cancelled_calls_on_client, cancelled_calls_on_server); grpc_event ev = grpc_completion_queue_next(f.cq, n_seconds_time(10), NULL); GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); From 69a1f6600534bda7d7d9f35222740e49746aed11 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 10:24:21 -0700 Subject: [PATCH 084/286] Complete integration test for buffer pools --- Makefile | 2 - .../chttp2/transport/chttp2_transport.c | 14 +- src/core/lib/iomgr/buffer_pool.c | 2 + src/core/lib/surface/call.c | 6 +- test/core/end2end/end2end_nosec_tests.c | 8 - test/core/end2end/end2end_tests.c | 8 - test/core/end2end/gen_build_yaml.py | 1 - test/core/end2end/tests/buffer_pool_client.c | 105 --- test/core/end2end/tests/buffer_pool_server.c | 20 + tools/run_tests/sources_and_headers.json | 2 - tools/run_tests/tests.json | 669 +----------------- .../end2end_nosec_tests.vcxproj | 2 - .../end2end_nosec_tests.vcxproj.filters | 3 - .../tests/end2end_tests/end2end_tests.vcxproj | 2 - .../end2end_tests.vcxproj.filters | 3 - 15 files changed, 44 insertions(+), 803 deletions(-) delete mode 100644 test/core/end2end/tests/buffer_pool_client.c diff --git a/Makefile b/Makefile index 92bcc104ee2..305066816e4 100644 --- a/Makefile +++ b/Makefile @@ -6760,7 +6760,6 @@ LIBEND2END_TESTS_SRC = \ test/core/end2end/end2end_tests.c \ test/core/end2end/tests/bad_hostname.c \ test/core/end2end/tests/binary_metadata.c \ - test/core/end2end/tests/buffer_pool_client.c \ test/core/end2end/tests/buffer_pool_server.c \ test/core/end2end/tests/call_creds.c \ test/core/end2end/tests/cancel_after_accept.c \ @@ -6845,7 +6844,6 @@ LIBEND2END_NOSEC_TESTS_SRC = \ test/core/end2end/end2end_nosec_tests.c \ test/core/end2end/tests/bad_hostname.c \ test/core/end2end/tests/binary_metadata.c \ - test/core/end2end/tests/buffer_pool_client.c \ test/core/end2end/tests/buffer_pool_server.c \ test/core/end2end/tests/cancel_after_accept.c \ test/core/end2end/tests/cancel_after_client_done.c \ diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 13241f6abe2..74dab8b5888 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -2131,15 +2131,17 @@ static void benign_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, } send_goaway(exec_ctx, t, GRPC_CHTTP2_ENHANCE_YOUR_CALM, gpr_slice_from_static_string("Buffers full")); - } else if (grpc_buffer_pool_trace) { + } else if (error == GRPC_ERROR_NONE && grpc_buffer_pool_trace) { gpr_log(GPR_DEBUG, "HTTP2: %s - skip benign reclaimation, there are still %" PRIdPTR " streams", t->peer_string, grpc_chttp2_stream_map_size(&t->stream_map)); } t->benign_reclaimer_registered = false; - grpc_buffer_user_finish_reclaimation(exec_ctx, - grpc_endpoint_get_buffer_user(t->ep)); + if (error != GRPC_ERROR_CANCELLED) { + grpc_buffer_user_finish_reclaimation(exec_ctx, + grpc_endpoint_get_buffer_user(t->ep)); + } GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "benign_reclaimer"); } @@ -2162,8 +2164,10 @@ static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, post_destructive_reclaimer(exec_ctx, t); } } - grpc_buffer_user_finish_reclaimation(exec_ctx, - grpc_endpoint_get_buffer_user(t->ep)); + if (error != GRPC_ERROR_CANCELLED) { + grpc_buffer_user_finish_reclaimation(exec_ctx, + grpc_endpoint_get_buffer_user(t->ep)); + } GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "destructive_reclaimer"); } diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index cfa171684b8..1809d2120e8 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -242,6 +242,7 @@ static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool, buffer_user->name, destructive ? "destructive" : "benign"); } buffer_pool->reclaiming = true; + grpc_buffer_pool_internal_ref(buffer_pool); grpc_closure *c = buffer_user->reclaimers[destructive]; buffer_user->reclaimers[destructive] = NULL; grpc_closure_run(exec_ctx, c, GRPC_ERROR_NONE); @@ -402,6 +403,7 @@ static void bp_reclaimation_done(grpc_exec_ctx *exec_ctx, void *bp, grpc_buffer_pool *buffer_pool = bp; buffer_pool->reclaiming = false; bpstep_sched(exec_ctx, buffer_pool); + grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); } /******************************************************************************* diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c index 6b2badf71bd..ed5546270b6 100644 --- a/src/core/lib/surface/call.c +++ b/src/core/lib/surface/call.c @@ -1553,8 +1553,10 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx, call, STATUS_FROM_API_OVERRIDE, GRPC_MDSTR_REF(call->send_extra_metadata[1].md->value)); } - set_status_code(call, STATUS_FROM_API_OVERRIDE, - (uint32_t)op->data.send_status_from_server.status); + if (op->data.send_status_from_server.status != GRPC_STATUS_OK) { + set_status_code(call, STATUS_FROM_API_OVERRIDE, + (uint32_t)op->data.send_status_from_server.status); + } if (!prepare_application_metadata( call, (int)op->data.send_status_from_server.trailing_metadata_count, diff --git a/test/core/end2end/end2end_nosec_tests.c b/test/core/end2end/end2end_nosec_tests.c index aa38641a849..1c9332acc17 100644 --- a/test/core/end2end/end2end_nosec_tests.c +++ b/test/core/end2end/end2end_nosec_tests.c @@ -47,8 +47,6 @@ extern void bad_hostname(grpc_end2end_test_config config); extern void bad_hostname_pre_init(void); extern void binary_metadata(grpc_end2end_test_config config); extern void binary_metadata_pre_init(void); -extern void buffer_pool_client(grpc_end2end_test_config config); -extern void buffer_pool_client_pre_init(void); extern void buffer_pool_server(grpc_end2end_test_config config); extern void buffer_pool_server_pre_init(void); extern void cancel_after_accept(grpc_end2end_test_config config); @@ -139,7 +137,6 @@ void grpc_end2end_tests_pre_init(void) { g_pre_init_called = true; bad_hostname_pre_init(); binary_metadata_pre_init(); - buffer_pool_client_pre_init(); buffer_pool_server_pre_init(); cancel_after_accept_pre_init(); cancel_after_client_done_pre_init(); @@ -193,7 +190,6 @@ void grpc_end2end_tests(int argc, char **argv, if (argc <= 1) { bad_hostname(config); binary_metadata(config); - buffer_pool_client(config); buffer_pool_server(config); cancel_after_accept(config); cancel_after_client_done(config); @@ -248,10 +244,6 @@ void grpc_end2end_tests(int argc, char **argv, binary_metadata(config); continue; } - if (0 == strcmp("buffer_pool_client", argv[i])) { - buffer_pool_client(config); - continue; - } if (0 == strcmp("buffer_pool_server", argv[i])) { buffer_pool_server(config); continue; diff --git a/test/core/end2end/end2end_tests.c b/test/core/end2end/end2end_tests.c index cbd194dee18..cf0e4c8316d 100644 --- a/test/core/end2end/end2end_tests.c +++ b/test/core/end2end/end2end_tests.c @@ -47,8 +47,6 @@ extern void bad_hostname(grpc_end2end_test_config config); extern void bad_hostname_pre_init(void); extern void binary_metadata(grpc_end2end_test_config config); extern void binary_metadata_pre_init(void); -extern void buffer_pool_client(grpc_end2end_test_config config); -extern void buffer_pool_client_pre_init(void); extern void buffer_pool_server(grpc_end2end_test_config config); extern void buffer_pool_server_pre_init(void); extern void call_creds(grpc_end2end_test_config config); @@ -141,7 +139,6 @@ void grpc_end2end_tests_pre_init(void) { g_pre_init_called = true; bad_hostname_pre_init(); binary_metadata_pre_init(); - buffer_pool_client_pre_init(); buffer_pool_server_pre_init(); call_creds_pre_init(); cancel_after_accept_pre_init(); @@ -196,7 +193,6 @@ void grpc_end2end_tests(int argc, char **argv, if (argc <= 1) { bad_hostname(config); binary_metadata(config); - buffer_pool_client(config); buffer_pool_server(config); call_creds(config); cancel_after_accept(config); @@ -252,10 +248,6 @@ void grpc_end2end_tests(int argc, char **argv, binary_metadata(config); continue; } - if (0 == strcmp("buffer_pool_client", argv[i])) { - buffer_pool_client(config); - continue; - } if (0 == strcmp("buffer_pool_server", argv[i])) { buffer_pool_server(config); continue; diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index 4675b02edb5..fef82a16193 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -88,7 +88,6 @@ LOWCPU = 0.1 END2END_TESTS = { 'bad_hostname': default_test_options, 'binary_metadata': default_test_options, - 'buffer_pool_client': default_test_options, 'buffer_pool_server': default_test_options, 'call_creds': default_test_options._replace(secure=True), 'cancel_after_accept': default_test_options._replace(cpu_cost=LOWCPU), diff --git a/test/core/end2end/tests/buffer_pool_client.c b/test/core/end2end/tests/buffer_pool_client.c deleted file mode 100644 index 27753d7d566..00000000000 --- a/test/core/end2end/tests/buffer_pool_client.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - * - * Copyright 2016, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include "test/core/end2end/end2end_tests.h" - -#include -#include - -#include -#include -#include -#include -#include -#include "test/core/end2end/cq_verifier.h" - -static void *tag(intptr_t t) { return (void *)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, "%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_time(int n) { - return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(n); -} - -static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } - -static void drain_cq(grpc_completion_queue *cq) { - grpc_event ev; - do { - ev = grpc_completion_queue_next(cq, five_seconds_time(), NULL); - } 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)); - GPR_ASSERT(grpc_completion_queue_pluck( - f->cq, tag(1000), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5), NULL) - .type == GRPC_OP_COMPLETE); - grpc_server_destroy(f->server); - f->server = NULL; -} - -static void shutdown_client(grpc_end2end_test_fixture *f) { - if (!f->client) return; - grpc_channel_destroy(f->client); - f->client = NULL; -} - -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); -} - -void buffer_pool_client(grpc_end2end_test_config config) { - grpc_end2end_test_fixture f = - begin_test(config, "buffer_pool_client", NULL, NULL); - end_test(&f); - config.tear_down_data(&f); -} - -void buffer_pool_client_pre_init(void) {} diff --git a/test/core/end2end/tests/buffer_pool_server.c b/test/core/end2end/tests/buffer_pool_server.c index 70e42d28f44..40117c99b16 100644 --- a/test/core/end2end/tests/buffer_pool_server.c +++ b/test/core/end2end/tests/buffer_pool_server.c @@ -253,6 +253,11 @@ void buffer_pool_server(grpc_end2end_test_config config) { abort(); } GPR_ASSERT(pending_client_calls > 0); + + grpc_metadata_array_destroy(&initial_metadata_recv[call_id]); + grpc_metadata_array_destroy(&trailing_metadata_recv[call_id]); + grpc_call_destroy(client_calls[call_id]); + pending_client_calls--; } else if (ev_tag < SERVER_RECV_BASE_TAG) { /* new incoming call to the server */ @@ -280,12 +285,23 @@ void buffer_pool_server(grpc_end2end_test_config config) { GPR_ASSERT(pending_server_start_calls > 0); pending_server_start_calls--; pending_server_recv_calls++; + + grpc_call_details_destroy(&call_details[call_id]); } else if (ev_tag < SERVER_END_BASE_TAG) { /* finished read on the server */ int call_id = ev_tag - SERVER_RECV_BASE_TAG; GPR_ASSERT(call_id >= 0); GPR_ASSERT(call_id < NUM_CALLS); + if (ev.success) { + if (request_payload_recv[call_id] != NULL) { + grpc_byte_buffer_destroy(request_payload_recv[call_id]); + request_payload_recv[call_id] = NULL; + } + } else { + GPR_ASSERT(request_payload_recv[call_id] == NULL); + } + memset(ops, 0, sizeof(ops)); op = ops; op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; @@ -318,6 +334,8 @@ void buffer_pool_server(grpc_end2end_test_config config) { } GPR_ASSERT(pending_server_end_calls > 0); pending_server_end_calls--; + + grpc_call_destroy(server_calls[call_id]); } } @@ -326,6 +344,8 @@ void buffer_pool_server(grpc_end2end_test_config config) { "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); + end_test(&f); config.tear_down_data(&f); } diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 99d6e0bcd22..fd888f9abba 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -5636,7 +5636,6 @@ "test/core/end2end/end2end_tests.h", "test/core/end2end/tests/bad_hostname.c", "test/core/end2end/tests/binary_metadata.c", - "test/core/end2end/tests/buffer_pool_client.c", "test/core/end2end/tests/buffer_pool_server.c", "test/core/end2end/tests/call_creds.c", "test/core/end2end/tests/cancel_after_accept.c", @@ -5703,7 +5702,6 @@ "test/core/end2end/end2end_tests.h", "test/core/end2end/tests/bad_hostname.c", "test/core/end2end/tests/binary_metadata.c", - "test/core/end2end/tests/buffer_pool_client.c", "test/core/end2end/tests/buffer_pool_server.c", "test/core/end2end/tests/cancel_after_accept.c", "test/core/end2end/tests/cancel_after_client_done.c", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index cc7b98168a7..b68966eac78 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -4582,28 +4582,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_census_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -5594,28 +5572,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_compress_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -6604,27 +6560,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_fakesec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -7568,26 +7503,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_fd_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -8392,28 +8307,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -9392,22 +9285,6 @@ "linux" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full+pipe_test", - "platforms": [ - "linux" - ] - }, { "args": [ "buffer_pool_server" @@ -10140,28 +10017,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full+trace_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -11106,27 +10961,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_http_proxy_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -12074,28 +11908,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_load_reporting_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -13084,27 +12896,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_oauth2_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -14050,27 +13841,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_proxy_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -14890,27 +14660,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -15753,7 +15502,7 @@ }, { "args": [ - "buffer_pool_client" + "buffer_pool_server" ], "ci_platforms": [ "windows", @@ -15774,7 +15523,7 @@ }, { "args": [ - "buffer_pool_server" + "call_creds" ], "ci_platforms": [ "windows", @@ -15795,14 +15544,14 @@ }, { "args": [ - "call_creds" + "cancel_after_accept" ], "ci_platforms": [ "windows", "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -15816,14 +15565,14 @@ }, { "args": [ - "cancel_after_accept" + "cancel_after_client_done" ], "ci_platforms": [ "windows", "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -15837,14 +15586,14 @@ }, { "args": [ - "cancel_after_client_done" + "cancel_after_invoke" ], "ci_platforms": [ "windows", "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -15858,28 +15607,7 @@ }, { "args": [ - "cancel_after_invoke" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair+trace_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, - { - "args": [ - "cancel_before_invoke" + "cancel_before_invoke" ], "ci_platforms": [ "windows", @@ -16570,27 +16298,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair_1byte_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -17433,28 +17140,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_ssl_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -18445,28 +18130,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_ssl_cert_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -19455,27 +19118,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_ssl_proxy_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -20293,26 +19935,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_uds_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -21197,28 +20819,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_census_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -22187,28 +21787,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_compress_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -23173,26 +22751,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_fd_nosec_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -23977,28 +23535,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -24955,22 +24491,6 @@ "linux" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full+pipe_nosec_test", - "platforms": [ - "linux" - ] - }, { "args": [ "buffer_pool_server" @@ -25687,28 +25207,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full+trace_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -26631,27 +26129,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_http_proxy_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -27578,28 +27055,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_load_reporting_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -28566,27 +28021,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_proxy_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -29385,27 +28819,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -30225,27 +29638,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair+trace_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -31027,29 +30419,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], - "flaky": false, - "language": "c", - "name": "h2_sockpair_1byte_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" @@ -31941,26 +31310,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_client" - ], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_uds_nosec_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, { "args": [ "buffer_pool_server" diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj index c9b6c359009..f2665cc39f6 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj @@ -157,8 +157,6 @@ - - diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters index 828a4a7f813..a1ea12173d8 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters @@ -10,9 +10,6 @@ test\core\end2end\tests - - test\core\end2end\tests - test\core\end2end\tests diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj index 5ab1d84132b..0b8c1666aea 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj @@ -157,8 +157,6 @@ - - diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters index 34abc5e7fca..8577b1652ab 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters @@ -10,9 +10,6 @@ test\core\end2end\tests - - test\core\end2end\tests - test\core\end2end\tests From 08d297e375dc207e1b90285dc859907c5a36b277 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 10:35:53 -0700 Subject: [PATCH 085/286] Make all tests build again --- src/core/lib/iomgr/buffer_pool.c | 2 + test/core/bad_client/bad_client.c | 2 +- .../core/end2end/fixtures/h2_sockpair+trace.c | 2 +- test/core/end2end/fixtures/h2_sockpair.c | 2 +- .../core/end2end/fixtures/h2_sockpair_1byte.c | 2 +- test/core/end2end/fuzzers/api_fuzzer.c | 2 +- test/core/end2end/fuzzers/client_fuzzer.c | 2 +- test/core/end2end/fuzzers/server_fuzzer.c | 2 +- test/core/http/httpcli_test.c | 4 +- test/core/http/httpscli_test.c | 4 +- test/core/iomgr/buffer_pool_test.c | 92 ++++++++++--------- test/core/iomgr/endpoint_pair_test.c | 2 +- test/core/iomgr/fd_conservation_posix_test.c | 3 +- test/core/iomgr/tcp_posix_test.c | 11 ++- test/core/security/secure_endpoint_test.c | 3 +- test/core/util/port_server_client.c | 2 - 16 files changed, 75 insertions(+), 62 deletions(-) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index 1809d2120e8..f8e9e8ed6e8 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -42,6 +42,8 @@ #include "src/core/lib/iomgr/combiner.h" +int grpc_buffer_pool_trace = 0; + typedef bool (*bpstate_func)(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool); diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c index 06692fe969d..60f0ab2106d 100644 --- a/test/core/bad_client/bad_client.c +++ b/test/core/bad_client/bad_client.c @@ -114,7 +114,7 @@ void grpc_run_bad_client_test( grpc_init(); /* Create endpoints */ - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("bad_client_test"); sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 65536); grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c index fe16d056513..4a546e710e1 100644 --- a/test/core/end2end/fixtures/h2_sockpair+trace.c +++ b/test/core/end2end/fixtures/h2_sockpair+trace.c @@ -91,7 +91,7 @@ static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( f.fixture_data = sfd; f.cq = grpc_completion_queue_create(NULL); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("fixture"); *sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 65536); grpc_buffer_pool_unref(buffer_pool); diff --git a/test/core/end2end/fixtures/h2_sockpair.c b/test/core/end2end/fixtures/h2_sockpair.c index 77847adb9c7..f528f0b0b22 100644 --- a/test/core/end2end/fixtures/h2_sockpair.c +++ b/test/core/end2end/fixtures/h2_sockpair.c @@ -90,7 +90,7 @@ static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( f.fixture_data = sfd; f.cq = grpc_completion_queue_create(NULL); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("fixture"); *sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 65536); grpc_buffer_pool_unref(buffer_pool); diff --git a/test/core/end2end/fixtures/h2_sockpair_1byte.c b/test/core/end2end/fixtures/h2_sockpair_1byte.c index 04678f168a7..293cdf278e0 100644 --- a/test/core/end2end/fixtures/h2_sockpair_1byte.c +++ b/test/core/end2end/fixtures/h2_sockpair_1byte.c @@ -90,7 +90,7 @@ static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( f.fixture_data = sfd; f.cq = grpc_completion_queue_create(NULL); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("fixture"); *sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 1); grpc_buffer_pool_unref(buffer_pool); diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index 2d46989d116..f39a79ca191 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -522,7 +522,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int pending_pings = 0; g_active_call = new_call(NULL, ROOT); - g_buffer_pool = grpc_buffer_pool_create(); + g_buffer_pool = grpc_buffer_pool_create("api_fuzzer"); grpc_completion_queue *cq = grpc_completion_queue_create(NULL); diff --git a/test/core/end2end/fuzzers/client_fuzzer.c b/test/core/end2end/fuzzers/client_fuzzer.c index 90c35e6ad90..55d04ec28ac 100644 --- a/test/core/end2end/fuzzers/client_fuzzer.c +++ b/test/core/end2end/fuzzers/client_fuzzer.c @@ -58,7 +58,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_init(); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("client_fuzzer"); grpc_endpoint *mock_endpoint = grpc_mock_endpoint_create(discard_write, buffer_pool); grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); diff --git a/test/core/end2end/fuzzers/server_fuzzer.c b/test/core/end2end/fuzzers/server_fuzzer.c index cb34927c966..dd093e51ec4 100644 --- a/test/core/end2end/fuzzers/server_fuzzer.c +++ b/test/core/end2end/fuzzers/server_fuzzer.c @@ -56,7 +56,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_init(); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("server_fuzzer"); grpc_endpoint *mock_endpoint = grpc_mock_endpoint_create(discard_write, buffer_pool); grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); diff --git a/test/core/http/httpcli_test.c b/test/core/http/httpcli_test.c index d1c6805b033..1ecfe219d49 100644 --- a/test/core/http/httpcli_test.c +++ b/test/core/http/httpcli_test.c @@ -89,7 +89,7 @@ static void test_get(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_get"); grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); @@ -129,7 +129,7 @@ static void test_post(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_post"); grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, "hello", 5, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); diff --git a/test/core/http/httpscli_test.c b/test/core/http/httpscli_test.c index 09ceec72081..51ca73fdc69 100644 --- a/test/core/http/httpscli_test.c +++ b/test/core/http/httpscli_test.c @@ -90,7 +90,7 @@ static void test_get(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_get"); grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); @@ -131,7 +131,7 @@ static void test_post(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_post"); grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, "hello", 5, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/buffer_pool_test.c index 5bc619b478b..3a58fc73ae1 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/buffer_pool_test.c @@ -91,31 +91,31 @@ static void destroy_user(grpc_buffer_user *usr) { static void test_no_op(void) { gpr_log(GPR_INFO, "** test_no_op **"); - grpc_buffer_pool_unref(grpc_buffer_pool_create()); + grpc_buffer_pool_unref(grpc_buffer_pool_create("test_no_op")); } static void test_resize_then_destroy(void) { gpr_log(GPR_INFO, "** test_resize_then_destroy **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create("test_resize_then_destroy"); grpc_buffer_pool_resize(p, 1024 * 1024); grpc_buffer_pool_unref(p); } static void test_buffer_user_no_op(void) { gpr_log(GPR_INFO, "** test_buffer_user_no_op **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create("test_buffer_user_no_op"); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); grpc_buffer_pool_unref(p); destroy_user(&usr); } static void test_instant_alloc_then_free(void) { gpr_log(GPR_INFO, "** test_instant_alloc_then_free **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create("test_instant_alloc_then_free"); grpc_buffer_pool_resize(p, 1024 * 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, NULL); @@ -132,10 +132,10 @@ static void test_instant_alloc_then_free(void) { static void test_instant_alloc_free_pair(void) { gpr_log(GPR_INFO, "** test_instant_alloc_free_pair **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create("test_instant_alloc_free_pair"); grpc_buffer_pool_resize(p, 1024 * 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, NULL); @@ -148,10 +148,10 @@ static void test_instant_alloc_free_pair(void) { static void test_simple_async_alloc(void) { gpr_log(GPR_INFO, "** test_simple_async_alloc **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create("test_simple_async_alloc"); grpc_buffer_pool_resize(p, 1024 * 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -170,10 +170,11 @@ static void test_simple_async_alloc(void) { static void test_async_alloc_blocked_by_size(void) { gpr_log(GPR_INFO, "** test_async_alloc_blocked_by_size **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = + grpc_buffer_pool_create("test_async_alloc_blocked_by_size"); grpc_buffer_pool_resize(p, 1); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); bool done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -194,12 +195,12 @@ static void test_async_alloc_blocked_by_size(void) { static void test_scavenge(void) { gpr_log(GPR_INFO, "** test_scavenge **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create("test_scavenge"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr1; grpc_buffer_user usr2; - grpc_buffer_user_init(&usr1, p); - grpc_buffer_user_init(&usr2, p); + grpc_buffer_user_init(&usr1, p, "usr1"); + grpc_buffer_user_init(&usr2, p, "usr2"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -231,12 +232,12 @@ static void test_scavenge(void) { static void test_scavenge_blocked(void) { gpr_log(GPR_INFO, "** test_scavenge_blocked **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create("test_scavenge_blocked"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr1; grpc_buffer_user usr2; - grpc_buffer_user_init(&usr1, p); - grpc_buffer_user_init(&usr2, p); + grpc_buffer_user_init(&usr1, p, "usr1"); + grpc_buffer_user_init(&usr2, p, "usr2"); bool done; { done = false; @@ -270,10 +271,11 @@ static void test_scavenge_blocked(void) { static void test_blocked_until_scheduled_reclaim(void) { gpr_log(GPR_INFO, "** test_blocked_until_scheduled_reclaim **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = + grpc_buffer_pool_create("test_blocked_until_scheduled_reclaim"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -308,12 +310,13 @@ static void test_blocked_until_scheduled_reclaim(void) { static void test_blocked_until_scheduled_reclaim_and_scavenge(void) { gpr_log(GPR_INFO, "** test_blocked_until_scheduled_reclaim_and_scavenge **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create( + "test_blocked_until_scheduled_reclaim_and_scavenge"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr1; grpc_buffer_user usr2; - grpc_buffer_user_init(&usr1, p); - grpc_buffer_user_init(&usr2, p); + grpc_buffer_user_init(&usr1, p, "usr1"); + grpc_buffer_user_init(&usr2, p, "usr2"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -349,10 +352,11 @@ static void test_blocked_until_scheduled_reclaim_and_scavenge(void) { static void test_blocked_until_scheduled_destructive_reclaim(void) { gpr_log(GPR_INFO, "** test_blocked_until_scheduled_destructive_reclaim **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create( + "test_blocked_until_scheduled_destructive_reclaim"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -387,10 +391,11 @@ static void test_blocked_until_scheduled_destructive_reclaim(void) { static void test_unused_reclaim_is_cancelled(void) { gpr_log(GPR_INFO, "** test_unused_reclaim_is_cancelled **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = + grpc_buffer_pool_create("test_unused_reclaim_is_cancelled"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); bool benign_done = false; bool destructive_done = false; { @@ -412,10 +417,11 @@ static void test_unused_reclaim_is_cancelled(void) { static void test_benign_reclaim_is_preferred(void) { gpr_log(GPR_INFO, "** test_benign_reclaim_is_preferred **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = + grpc_buffer_pool_create("test_benign_reclaim_is_preferred"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); bool benign_done = false; bool destructive_done = false; { @@ -459,10 +465,11 @@ static void test_benign_reclaim_is_preferred(void) { static void test_multiple_reclaims_can_be_triggered(void) { gpr_log(GPR_INFO, "** test_multiple_reclaims_can_be_triggered **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = + grpc_buffer_pool_create("test_multiple_reclaims_can_be_triggered"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); bool benign_done = false; bool destructive_done = false; { @@ -507,10 +514,11 @@ static void test_multiple_reclaims_can_be_triggered(void) { static void test_buffer_user_stays_allocated_until_memory_released(void) { gpr_log(GPR_INFO, "** test_buffer_user_stays_allocated_until_memory_released **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create( + "test_buffer_user_stays_allocated_until_memory_released"); grpc_buffer_pool_resize(p, 1024 * 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); bool done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -539,11 +547,12 @@ static void test_buffer_user_stays_allocated_until_memory_released(void) { static void test_pools_merged_on_buffer_user_deletion(void) { gpr_log(GPR_INFO, "** test_pools_merged_on_buffer_user_deletion **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = + grpc_buffer_pool_create("test_pools_merged_on_buffer_user_deletion"); grpc_buffer_pool_resize(p, 1024); for (int i = 0; i < 10; i++) { grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); bool done = false; bool reclaimer_cancelled = false; { @@ -587,10 +596,11 @@ static void test_pools_merged_on_buffer_user_deletion(void) { static void test_reclaimers_can_be_posted_repeatedly(void) { gpr_log(GPR_INFO, "** test_reclaimers_can_be_posted_repeatedly **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = + grpc_buffer_pool_create("test_reclaimers_can_be_posted_repeatedly"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); { bool allocated = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -629,11 +639,11 @@ static void test_reclaimers_can_be_posted_repeatedly(void) { static void test_one_slice(void) { gpr_log(GPR_INFO, "** test_one_slice **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create("test_one_slice"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); grpc_buffer_user_slice_allocator alloc; int num_allocs = 0; @@ -658,11 +668,11 @@ static void test_one_slice(void) { static void test_one_slice_deleted_late(void) { gpr_log(GPR_INFO, "** test_one_slice_deleted_late **"); - grpc_buffer_pool *p = grpc_buffer_pool_create(); + grpc_buffer_pool *p = grpc_buffer_pool_create("test_one_slice_deleted_late"); grpc_buffer_pool_resize(p, 1024); grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p); + grpc_buffer_user_init(&usr, p, "usr"); grpc_buffer_user_slice_allocator alloc; int num_allocs = 0; diff --git a/test/core/iomgr/endpoint_pair_test.c b/test/core/iomgr/endpoint_pair_test.c index a7f00230c2b..4f8aab83235 100644 --- a/test/core/iomgr/endpoint_pair_test.c +++ b/test/core/iomgr/endpoint_pair_test.c @@ -49,7 +49,7 @@ static grpc_endpoint_test_fixture create_fixture_endpoint_pair( size_t slice_size) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_endpoint_test_fixture f; - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("endpoint_pair_test"); grpc_endpoint_pair p = grpc_iomgr_create_endpoint_pair("test", buffer_pool, slice_size); grpc_buffer_pool_unref(buffer_pool); diff --git a/test/core/iomgr/fd_conservation_posix_test.c b/test/core/iomgr/fd_conservation_posix_test.c index 4612ff7dc4a..f3a36c78e4a 100644 --- a/test/core/iomgr/fd_conservation_posix_test.c +++ b/test/core/iomgr/fd_conservation_posix_test.c @@ -52,7 +52,8 @@ int main(int argc, char **argv) { of descriptors */ rlim.rlim_cur = rlim.rlim_max = 10; GPR_ASSERT(0 == setrlimit(RLIMIT_NOFILE, &rlim)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = + grpc_buffer_pool_create("fd_conservation_posix_test"); for (i = 0; i < 100; i++) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c index 1c56ed05077..04522b8ddf8 100644 --- a/test/core/iomgr/tcp_posix_test.c +++ b/test/core/iomgr/tcp_posix_test.c @@ -176,7 +176,7 @@ static void read_test(size_t num_bytes, size_t slice_size) { create_sockets(sv); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("read_test"); ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), buffer_pool, slice_size, "test"); grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); @@ -226,7 +226,7 @@ static void large_read_test(size_t slice_size) { create_sockets(sv); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("large_read_test"); ep = grpc_tcp_create(grpc_fd_create(sv[1], "large_read_test"), buffer_pool, slice_size, "test"); grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); @@ -364,7 +364,7 @@ static void write_test(size_t num_bytes, size_t slice_size) { create_sockets(sv); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("write_test"); ep = grpc_tcp_create(grpc_fd_create(sv[1], "write_test"), buffer_pool, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, "test"); grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); @@ -430,7 +430,7 @@ static void release_fd_test(size_t num_bytes, size_t slice_size) { create_sockets(sv); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("release_fd_test"); ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), buffer_pool, slice_size, "test"); GPR_ASSERT(grpc_tcp_fd(ep) == sv[1] && sv[1] >= 0); @@ -520,7 +520,8 @@ static grpc_endpoint_test_fixture create_fixture_tcp_socketpair( grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; create_sockets(sv); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = + grpc_buffer_pool_create("tcp_posix_test_socketpair"); f.client_ep = grpc_tcp_create(grpc_fd_create(sv[0], "fixture:client"), buffer_pool, slice_size, "test"); f.server_ep = grpc_tcp_create(grpc_fd_create(sv[1], "fixture:server"), diff --git a/test/core/security/secure_endpoint_test.c b/test/core/security/secure_endpoint_test.c index abc59f0b3d6..3397c9563e5 100644 --- a/test/core/security/secure_endpoint_test.c +++ b/test/core/security/secure_endpoint_test.c @@ -56,7 +56,8 @@ static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair( grpc_endpoint_test_fixture f; grpc_endpoint_pair tcp; - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(); + grpc_buffer_pool *buffer_pool = + grpc_buffer_pool_create("secure_endpoint_test"); tcp = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, slice_size); grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); grpc_endpoint_add_to_pollset(&exec_ctx, tcp.client, g_pollset); diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c index 9bd34677cbc..f9e16ca407f 100644 --- a/test/core/util/port_server_client.c +++ b/test/core/util/port_server_client.c @@ -49,8 +49,6 @@ #include "src/core/lib/http/httpcli.h" -int grpc_buffer_pool_trace = 0; - typedef struct freereq { gpr_mu *mu; grpc_polling_entity pops; From e035cadaa4bc3313d4658c2994eadd00ef242fed Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 10:50:04 -0700 Subject: [PATCH 086/286] Fix memory leak --- src/core/lib/iomgr/buffer_pool.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c index f8e9e8ed6e8..8fbf75cbe48 100644 --- a/src/core/lib/iomgr/buffer_pool.c +++ b/src/core/lib/iomgr/buffer_pool.c @@ -439,6 +439,7 @@ void grpc_buffer_pool_internal_unref(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { if (gpr_unref(&buffer_pool->refs)) { grpc_combiner_destroy(exec_ctx, buffer_pool->combiner); + gpr_free(buffer_pool->name); gpr_free(buffer_pool); } } @@ -563,6 +564,7 @@ void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, #endif grpc_buffer_pool_internal_unref(exec_ctx, buffer_user->buffer_pool); gpr_mu_destroy(&buffer_user->mu); + gpr_free(buffer_user->name); } void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, From 5d882637e81277cbaf912a375321670e5c8ca01a Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 12:31:07 -0700 Subject: [PATCH 087/286] Fix memory leaks --- test/core/end2end/tests/buffer_pool_server.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/core/end2end/tests/buffer_pool_server.c b/test/core/end2end/tests/buffer_pool_server.c index 40117c99b16..923ebb94fc7 100644 --- a/test/core/end2end/tests/buffer_pool_server.c +++ b/test/core/end2end/tests/buffer_pool_server.c @@ -257,6 +257,7 @@ void buffer_pool_server(grpc_end2end_test_config config) { grpc_metadata_array_destroy(&initial_metadata_recv[call_id]); grpc_metadata_array_destroy(&trailing_metadata_recv[call_id]); grpc_call_destroy(client_calls[call_id]); + gpr_free(details[call_id]); pending_client_calls--; } else if (ev_tag < SERVER_RECV_BASE_TAG) { @@ -287,6 +288,7 @@ void buffer_pool_server(grpc_end2end_test_config config) { pending_server_recv_calls++; grpc_call_details_destroy(&call_details[call_id]); + grpc_metadata_array_destroy(&request_metadata_recv[call_id]); } else if (ev_tag < SERVER_END_BASE_TAG) { /* finished read on the server */ int call_id = ev_tag - SERVER_RECV_BASE_TAG; @@ -346,6 +348,10 @@ void buffer_pool_server(grpc_end2end_test_config config) { GPR_ASSERT(cancelled_calls_on_client == cancelled_calls_on_server); + grpc_byte_buffer_destroy(request_payload); + gpr_slice_unref(request_payload_slice); + grpc_buffer_pool_unref(buffer_pool); + end_test(&f); config.tear_down_data(&f); } From a7a21d2049095e957e5b01ad493ae28346954410 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Wed, 28 Sep 2016 12:38:01 -0700 Subject: [PATCH 088/286] Make sync server settings configurable --- src/cpp/server/server_builder.cc | 17 +++++++++++------ test/cpp/rpcmanager/grpc_rpc_manager_test.cc | 2 +- test/cpp/rpcmanager/grpc_rpc_manager_test.h | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 1a27100be5f..59c40dedaf1 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -71,7 +71,6 @@ ServerBuilder::ServerBuilder() memset(&maybe_default_compression_algorithm_, 0, sizeof(maybe_default_compression_algorithm_)); - // Sync server setting defaults sync_server_settings_.min_pollers = 1; sync_server_settings_.max_pollers = INT_MAX; @@ -143,8 +142,8 @@ ServerBuilder& ServerBuilder::SetDefaultCompressionAlgorithm( return *this; } -void ServerBuilder:: SetSyncServerSettings(SyncServerSettings settings) { - sync_server_settings_ = settings; // copy the settings +void ServerBuilder::SetSyncServerSettings(SyncServerSettings settings) { + sync_server_settings_ = settings; // copy the settings } ServerBuilder& ServerBuilder::AddListeningPort( @@ -215,14 +214,20 @@ std::unique_ptr ServerBuilder::BuildAndStart() { new std::vector>()); if (has_sync_methods) { - // If the server has synchronous methods, it will need completion queues to - // handle those methods. + // This is a Sync server + gpr_log(GPR_INFO, + "Synchronous server. Num CQs: %d, Min pollers: %d, Max Pollers: " + "%d, CQ timeout (msec): %d", + sync_server_settings_.num_cqs, sync_server_settings_.min_pollers, + sync_server_settings_.max_pollers, + sync_server_settings_.cq_timeout_msec); + + // Create completion queues to listen to incoming rpc requests for (int i = 0; i < sync_server_settings_.num_cqs; i++) { sync_server_cqs->emplace_back(new ServerCompletionQueue()); } } - // TODO (sreek) Make the number of pollers configurable std::unique_ptr server(new Server( sync_server_cqs, max_receive_message_size_, &args, sync_server_settings_.min_pollers, sync_server_settings_.max_pollers, diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc index f48ac2716b5..ce43b278560 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc @@ -81,7 +81,7 @@ void GrpcRpcManagerTest::DoWork(void *tag, bool ok) { int main(int argc, char **argv) { grpc::testing::InitTest(&argc, &argv, true); - GrpcRpcManagerTest test_rpc_manager(3, 15, 20); + GrpcRpcManagerTest test_rpc_manager(3, 15); test_rpc_manager.Initialize(); test_rpc_manager.Wait(); diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.h b/test/cpp/rpcmanager/grpc_rpc_manager_test.h index 186da81f2fd..0f1d3b3ed2a 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.h +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.h @@ -40,7 +40,7 @@ namespace testing { class GrpcRpcManagerTest GRPC_FINAL : public GrpcRpcManager { public: - GrpcRpcManagerTest(int min_pollers, int max_pollers, int max_threads) + GrpcRpcManagerTest(int min_pollers, int max_pollers) : GrpcRpcManager(min_pollers, max_pollers), num_calls_(0){}; grpc::GrpcRpcManager::WorkStatus PollForWork(void **tag, From 42ee4d86b9fb3d47f6aa59fca5a2e2b0da1f092d Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 13:19:43 -0700 Subject: [PATCH 089/286] Refine test scenario list for buffer pools --- test/core/end2end/gen_build_yaml.py | 18 ++- test/core/end2end/tests/buffer_pool_server.c | 11 +- tools/run_tests/tests.json | 149 ------------------- 3 files changed, 13 insertions(+), 165 deletions(-) diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index fef82a16193..3fc827fc7d1 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -39,9 +39,9 @@ import hashlib FixtureOptions = collections.namedtuple( 'FixtureOptions', - 'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing exclude_configs') + 'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing exclude_configs large_writes') default_unsecure_fixture_options = FixtureOptions( - True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False, []) + True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False, [], True) socketpair_unsecure_fixture_options = default_unsecure_fixture_options._replace(fullstack=False, dns_resolver=False) default_secure_fixture_options = default_unsecure_fixture_options._replace(secure=True) uds_fixture_options = default_unsecure_fixture_options._replace(dns_resolver=False, platforms=['linux', 'mac', 'posix']) @@ -65,10 +65,10 @@ END2END_FIXTURES = { 'h2_proxy': default_unsecure_fixture_options._replace(includes_proxy=True, ci_mac=False), 'h2_sockpair_1byte': socketpair_unsecure_fixture_options._replace( - ci_mac=False, exclude_configs=['msan']), + ci_mac=False, exclude_configs=['msan'], large_writes=False), 'h2_sockpair': socketpair_unsecure_fixture_options._replace(ci_mac=False), 'h2_sockpair+trace': socketpair_unsecure_fixture_options._replace( - ci_mac=False, tracing=True), + ci_mac=False, tracing=True, large_writes=False), 'h2_ssl': default_secure_fixture_options, 'h2_ssl_cert': default_secure_fixture_options, 'h2_ssl_proxy': default_secure_fixture_options._replace(includes_proxy=True, @@ -78,8 +78,8 @@ END2END_FIXTURES = { TestOptions = collections.namedtuple( 'TestOptions', - 'needs_fullstack needs_dns proxyable secure traceable cpu_cost') -default_test_options = TestOptions(False, False, True, False, True, 1.0) + 'needs_fullstack needs_dns proxyable secure traceable cpu_cost large_writes') +default_test_options = TestOptions(False, False, True, False, True, 1.0, False) connectivity_test_options = default_test_options._replace(needs_fullstack=True) LOWCPU = 0.1 @@ -88,7 +88,8 @@ LOWCPU = 0.1 END2END_TESTS = { 'bad_hostname': default_test_options, 'binary_metadata': default_test_options, - 'buffer_pool_server': default_test_options, + 'buffer_pool_server': default_test_options._replace(large_writes=True, + proxyable=False), 'call_creds': default_test_options._replace(secure=True), 'cancel_after_accept': default_test_options._replace(cpu_cost=LOWCPU), 'cancel_after_client_done': default_test_options, @@ -151,6 +152,9 @@ def compatible(f, t): if not END2END_TESTS[t].traceable: if END2END_FIXTURES[f].tracing: return False + if END2END_TESTS[t].large_writes: + if not END2END_FIXTURES[f].large_writes: + return False return True diff --git a/test/core/end2end/tests/buffer_pool_server.c b/test/core/end2end/tests/buffer_pool_server.c index 923ebb94fc7..daa971ccfc4 100644 --- a/test/core/end2end/tests/buffer_pool_server.c +++ b/test/core/end2end/tests/buffer_pool_server.c @@ -223,14 +223,6 @@ void buffer_pool_server(grpc_end2end_test_config config) { while (pending_client_calls + pending_server_recv_calls + pending_server_end_calls > 0) { - gpr_log(GPR_DEBUG, - "pending: client_calls=%d server_start_calls=%d " - "server_recv_calls=%d server_end_calls=%d; cancelled client=%d " - "server=%d", - pending_client_calls, pending_server_start_calls, - pending_server_recv_calls, pending_server_end_calls, - cancelled_calls_on_client, cancelled_calls_on_server); - grpc_event ev = grpc_completion_queue_next(f.cq, n_seconds_time(10), NULL); GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); @@ -346,7 +338,8 @@ void buffer_pool_server(grpc_end2end_test_config config) { "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_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); diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index f28cbcc2159..d63b8f14039 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -13841,27 +13841,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_proxy_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "call_creds" @@ -15500,27 +15479,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair+trace_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "call_creds" @@ -16298,27 +16256,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair_1byte_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "call_creds" @@ -19118,27 +19055,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_ssl_proxy_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "call_creds" @@ -28021,27 +27937,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_proxy_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "cancel_after_accept" @@ -29638,27 +29533,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair+trace_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "cancel_after_accept" @@ -30419,29 +30293,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], - "flaky": false, - "language": "c", - "name": "h2_sockpair_1byte_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "cancel_after_accept" From db1a5cce471cb038953f4221401142da85c2412a Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 14:22:12 -0700 Subject: [PATCH 090/286] Buffer pool C++ wrapper --- BUILD | 4 ++ CMakeLists.txt | 4 ++ Makefile | 4 ++ build.yaml | 2 + include/grpc++/buffer_pool.h | 70 +++++++++++++++++++ include/grpc++/server_builder.h | 8 +++ include/grpc++/support/channel_arguments.h | 8 +++ src/cpp/common/buffer_pool.cc | 50 +++++++++++++ src/cpp/common/channel_arguments.cc | 14 +++- src/cpp/server/server_builder.cc | 22 ++++++ test/cpp/end2end/end2end_test.cc | 38 +++++++++- tools/doxygen/Doxyfile.c++ | 1 + tools/doxygen/Doxyfile.c++.internal | 2 + tools/run_tests/sources_and_headers.json | 3 + vsprojects/vcxproj/grpc++/grpc++.vcxproj | 3 + .../vcxproj/grpc++/grpc++.vcxproj.filters | 6 ++ .../grpc++_unsecure/grpc++_unsecure.vcxproj | 3 + .../grpc++_unsecure.vcxproj.filters | 6 ++ 18 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 include/grpc++/buffer_pool.h create mode 100644 src/cpp/common/buffer_pool.cc diff --git a/BUILD b/BUILD index 69a40f9601e..b82f546989c 100644 --- a/BUILD +++ b/BUILD @@ -1367,6 +1367,7 @@ cc_library( "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/generic_stub.cc", + "src/cpp/common/buffer_pool.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/completion_queue_cc.cc", @@ -1480,6 +1481,7 @@ cc_library( ], hdrs = [ "include/grpc++/alarm.h", + "include/grpc++/buffer_pool.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", @@ -1771,6 +1773,7 @@ cc_library( "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/generic_stub.cc", + "src/cpp/common/buffer_pool.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/completion_queue_cc.cc", @@ -1884,6 +1887,7 @@ cc_library( ], hdrs = [ "include/grpc++/alarm.h", + "include/grpc++/buffer_pool.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index e56ed00fe6d..04683f148af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1017,6 +1017,7 @@ add_library(grpc++ src/cpp/client/create_channel_posix.cc src/cpp/client/credentials_cc.cc src/cpp/client/generic_stub.cc + src/cpp/common/buffer_pool.cc src/cpp/common/channel_arguments.cc src/cpp/common/channel_filter.cc src/cpp/common/completion_queue_cc.cc @@ -1148,6 +1149,7 @@ target_link_libraries(grpc++ foreach(_hdr include/grpc++/alarm.h + include/grpc++/buffer_pool.h include/grpc++/channel.h include/grpc++/client_context.h include/grpc++/completion_queue.h @@ -1370,6 +1372,7 @@ add_library(grpc++_unsecure src/cpp/client/create_channel_posix.cc src/cpp/client/credentials_cc.cc src/cpp/client/generic_stub.cc + src/cpp/common/buffer_pool.cc src/cpp/common/channel_arguments.cc src/cpp/common/channel_filter.cc src/cpp/common/completion_queue_cc.cc @@ -1500,6 +1503,7 @@ target_link_libraries(grpc++_unsecure foreach(_hdr include/grpc++/alarm.h + include/grpc++/buffer_pool.h include/grpc++/channel.h include/grpc++/client_context.h include/grpc++/completion_queue.h diff --git a/Makefile b/Makefile index 305066816e4..8f9d301a091 100644 --- a/Makefile +++ b/Makefile @@ -3586,6 +3586,7 @@ LIBGRPC++_SRC = \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/generic_stub.cc \ + src/cpp/common/buffer_pool.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ @@ -3699,6 +3700,7 @@ LIBGRPC++_SRC = \ PUBLIC_HEADERS_CXX += \ include/grpc++/alarm.h \ + include/grpc++/buffer_pool.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ @@ -4214,6 +4216,7 @@ LIBGRPC++_UNSECURE_SRC = \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/generic_stub.cc \ + src/cpp/common/buffer_pool.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ @@ -4327,6 +4330,7 @@ LIBGRPC++_UNSECURE_SRC = \ PUBLIC_HEADERS_CXX += \ include/grpc++/alarm.h \ + include/grpc++/buffer_pool.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ diff --git a/build.yaml b/build.yaml index fda6eaaa292..b9567042497 100644 --- a/build.yaml +++ b/build.yaml @@ -661,6 +661,7 @@ filegroups: language: c++ public_headers: - include/grpc++/alarm.h + - include/grpc++/buffer_pool.h - include/grpc++/channel.h - include/grpc++/client_context.h - include/grpc++/completion_queue.h @@ -720,6 +721,7 @@ filegroups: - src/cpp/client/create_channel_posix.cc - src/cpp/client/credentials_cc.cc - src/cpp/client/generic_stub.cc + - src/cpp/common/buffer_pool.cc - src/cpp/common/channel_arguments.cc - src/cpp/common/channel_filter.cc - src/cpp/common/completion_queue_cc.cc diff --git a/include/grpc++/buffer_pool.h b/include/grpc++/buffer_pool.h new file mode 100644 index 00000000000..3494cdffd9e --- /dev/null +++ b/include/grpc++/buffer_pool.h @@ -0,0 +1,70 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPCXX_BUFFER_POOL_H +#define GRPCXX_BUFFER_POOL_H + +struct grpc_buffer_pool; + +#include + +namespace grpc { + +/// BufferPool represents a bound on memory usage by the gRPC library. +/// A BufferPool can be attached to a server (via ServerBuilder), or a client +/// channel (via ChannelArguments). gRPC will attempt to keep memory used by +/// all attached entities below the BufferPool bound. +class BufferPool GRPC_FINAL { + public: + explicit BufferPool(const grpc::string& name); + BufferPool(); + ~BufferPool(); + + /// Resize this BufferPool to a new size. If new_size is smaller than the + /// current size of the pool, memory usage will be monotonically decreased + /// until it falls under new_size. No time bound is given for this to occur + /// however. + void Resize(size_t new_size); + + grpc_buffer_pool* c_buffer_pool() const { return impl_; } + + private: + BufferPool(const BufferPool& rhs); + BufferPool& operator=(const BufferPool& rhs); + + grpc_buffer_pool* const impl_; +}; + +} // namespace grpc + +#endif diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index 37f1f8cb803..282d49c643e 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -43,9 +43,12 @@ #include #include +struct grpc_buffer_pool; + namespace grpc { class AsyncGenericService; +class BufferPool; class CompletionQueue; class RpcService; class Server; @@ -61,6 +64,7 @@ class ServerBuilderPluginTest; class ServerBuilder { public: ServerBuilder(); + ~ServerBuilder(); /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the \a Server instance returned @@ -113,6 +117,9 @@ class ServerBuilder { ServerBuilder& SetDefaultCompressionAlgorithm( grpc_compression_algorithm algorithm); + /// Set the attached buffer pool for this server + ServerBuilder& SetBufferPool(const BufferPool& buffer_pool); + ServerBuilder& SetOption(std::unique_ptr option); /// Tries to bind \a server to the given \a addr. @@ -187,6 +194,7 @@ class ServerBuilder { std::vector cqs_; std::shared_ptr creds_; std::vector> plugins_; + grpc_buffer_pool* buffer_pool_; AsyncGenericService* generic_service_; struct { bool is_set; diff --git a/include/grpc++/support/channel_arguments.h b/include/grpc++/support/channel_arguments.h index ae243939e9a..e6fdc3bf17f 100644 --- a/include/grpc++/support/channel_arguments.h +++ b/include/grpc++/support/channel_arguments.h @@ -46,6 +46,8 @@ namespace testing { class ChannelArgumentsTest; } // namespace testing +class BufferPool; + /// Options for channel creation. The user can use generic setters to pass /// key value pairs down to c channel creation code. For grpc related options, /// concrete setters are provided. @@ -80,6 +82,9 @@ class ChannelArguments { /// The given string will be sent at the front of the user agent string. void SetUserAgentPrefix(const grpc::string& user_agent_prefix); + /// The given buffer pool will be attached to the constructed channel + void SetBufferPool(const BufferPool& buffer_pool); + // Generic channel argument setters. Only for advanced use cases. /// Set an integer argument \a value under \a key. void SetInt(const grpc::string& key, int value); @@ -88,6 +93,9 @@ class ChannelArguments { /// Set a pointer argument \a value under \a key. Owership is not transferred. void SetPointer(const grpc::string& key, void* value); + void SetPointerWithVtable(const grpc::string& key, void* value, + const grpc_arg_pointer_vtable* vtable); + /// Set a textual argument \a value under \a key. void SetString(const grpc::string& key, const grpc::string& value); diff --git a/src/cpp/common/buffer_pool.cc b/src/cpp/common/buffer_pool.cc new file mode 100644 index 00000000000..9d65bd74319 --- /dev/null +++ b/src/cpp/common/buffer_pool.cc @@ -0,0 +1,50 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include + +namespace grpc { + +BufferPool::BufferPool() : impl_(grpc_buffer_pool_create(nullptr)) {} + +BufferPool::BufferPool(const grpc::string& name) + : impl_(grpc_buffer_pool_create(name.c_str())) {} + +BufferPool::~BufferPool() { grpc_buffer_pool_unref(impl_); } + +void BufferPool::Resize(size_t new_size) { + grpc_buffer_pool_resize(impl_, new_size); +} + +} // namespace grpc diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc index f297ae85870..afde513e1e8 100644 --- a/src/cpp/common/channel_arguments.cc +++ b/src/cpp/common/channel_arguments.cc @@ -34,6 +34,7 @@ #include +#include #include #include #include "src/core/lib/channel/channel_args.h" @@ -113,6 +114,11 @@ void ChannelArguments::SetUserAgentPrefix( } } +void ChannelArguments::SetBufferPool(const grpc::BufferPool& buffer_pool) { + SetPointerWithVtable(GRPC_ARG_BUFFER_POOL, buffer_pool.c_buffer_pool(), + grpc_buffer_pool_arg_vtable()); +} + void ChannelArguments::SetInt(const grpc::string& key, int value) { grpc_arg arg; arg.type = GRPC_ARG_INTEGER; @@ -127,12 +133,18 @@ void ChannelArguments::SetPointer(const grpc::string& key, void* value) { static const grpc_arg_pointer_vtable vtable = { &PointerVtableMembers::Copy, &PointerVtableMembers::Destroy, &PointerVtableMembers::Compare}; + SetPointerWithVtable(key, value, &vtable); +} + +void ChannelArguments::SetPointerWithVtable( + const grpc::string& key, void* value, + const grpc_arg_pointer_vtable* vtable) { grpc_arg arg; arg.type = GRPC_ARG_POINTER; strings_.push_back(key); arg.key = const_cast(strings_.back().c_str()); arg.value.pointer.p = value; - arg.value.pointer.vtable = &vtable; + arg.value.pointer.vtable = vtable; args_.push_back(arg); } diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 2980b16c56c..be5b97846af 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -33,6 +33,7 @@ #include +#include #include #include #include @@ -54,6 +55,7 @@ static void do_plugin_list_init(void) { ServerBuilder::ServerBuilder() : max_receive_message_size_(-1), max_send_message_size_(-1), + buffer_pool_(nullptr), generic_service_(nullptr) { gpr_once_init(&once_init_plugin_list, do_plugin_list_init); for (auto it = g_plugin_factory_list->begin(); @@ -70,6 +72,12 @@ ServerBuilder::ServerBuilder() sizeof(maybe_default_compression_algorithm_)); } +ServerBuilder::~ServerBuilder() { + if (buffer_pool_ != nullptr) { + grpc_buffer_pool_unref(buffer_pool_); + } +} + std::unique_ptr ServerBuilder::AddCompletionQueue( bool is_frequently_polled) { ServerCompletionQueue* cq = new ServerCompletionQueue(is_frequently_polled); @@ -130,6 +138,16 @@ ServerBuilder& ServerBuilder::SetDefaultCompressionAlgorithm( return *this; } +ServerBuilder& ServerBuilder::SetBufferPool( + const grpc::BufferPool& buffer_pool) { + if (buffer_pool_ != nullptr) { + grpc_buffer_pool_unref(buffer_pool_); + } + buffer_pool_ = buffer_pool.c_buffer_pool(); + grpc_buffer_pool_ref(buffer_pool_); + return *this; +} + ServerBuilder& ServerBuilder::AddListeningPort( const grpc::string& addr, std::shared_ptr creds, int* selected_port) { @@ -178,6 +196,10 @@ std::unique_ptr ServerBuilder::BuildAndStart() { args.SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, maybe_default_compression_algorithm_.algorithm); } + if (buffer_pool_ != nullptr) { + args.SetPointerWithVtable(GRPC_ARG_BUFFER_POOL, buffer_pool_, + grpc_buffer_pool_arg_vtable()); + } std::unique_ptr server(new Server(thread_pool.release(), true, max_receive_message_size_, &args)); ServerInitializer* initializer = server->initializer(); diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index b1d3ce92f6a..17e6d248b59 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -240,6 +241,7 @@ class End2endTest : public ::testing::TestWithParam { server_address_ << "127.0.0.1:" << port; // Setup server ServerBuilder builder; + ConfigureServerBuilder(&builder); auto server_creds = GetServerCredentials(GetParam().credentials_type); if (GetParam().credentials_type != kInsecureCredentialsType) { server_creds->SetAuthMetadataProcessor(processor); @@ -247,13 +249,16 @@ class End2endTest : public ::testing::TestWithParam { builder.AddListeningPort(server_address_.str(), server_creds); builder.RegisterService(&service_); builder.RegisterService("foo.test.youtube.com", &special_service_); - builder.SetMaxMessageSize( - kMaxMessageSize_); // For testing max message size. builder.RegisterService(&dup_pkg_service_); server_ = builder.BuildAndStart(); is_server_started_ = true; } + virtual void ConfigureServerBuilder(ServerBuilder* builder) { + builder->SetMaxMessageSize( + kMaxMessageSize_); // For testing max message size. + } + void ResetChannel() { if (!is_server_started_) { StartServer(std::shared_ptr()); @@ -1476,6 +1481,31 @@ TEST_P(SecureEnd2endTest, ClientAuthContext) { } } +class BufferPoolEnd2endTest : public End2endTest { + public: + BufferPoolEnd2endTest() : server_buffer_pool_("server_buffer_pool") {} + + virtual void ConfigureServerBuilder(ServerBuilder* builder) GRPC_OVERRIDE { + builder->SetBufferPool(server_buffer_pool_); + } + + private: + BufferPool server_buffer_pool_; +}; + +TEST_P(BufferPoolEnd2endTest, SimpleRequest) { + ResetStub(); + + EchoRequest request; + EchoResponse response; + request.set_message("Hello"); + + ClientContext context; + Status s = stub_->Echo(&context, request, &response); + EXPECT_EQ(response.message(), request.message()); + EXPECT_TRUE(s.ok()); +} + std::vector CreateTestScenarios(bool use_proxy, bool test_insecure, bool test_secure) { @@ -1513,6 +1543,10 @@ INSTANTIATE_TEST_CASE_P(SecureEnd2end, SecureEnd2endTest, ::testing::ValuesIn(CreateTestScenarios(false, false, true))); +INSTANTIATE_TEST_CASE_P(BufferPoolEnd2end, BufferPoolEnd2endTest, + ::testing::ValuesIn(CreateTestScenarios(false, true, + true))); + } // namespace } // namespace testing } // namespace grpc diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++ index 2a56d40c63b..2136013a76f 100644 --- a/tools/doxygen/Doxyfile.c++ +++ b/tools/doxygen/Doxyfile.c++ @@ -761,6 +761,7 @@ WARN_LOGFILE = # Note: If this tag is empty the current directory is searched. INPUT = include/grpc++/alarm.h \ +include/grpc++/buffer_pool.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 19ceb163754..3f8df1d4ad5 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -761,6 +761,7 @@ WARN_LOGFILE = # Note: If this tag is empty the current directory is searched. INPUT = include/grpc++/alarm.h \ +include/grpc++/buffer_pool.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ @@ -968,6 +969,7 @@ src/cpp/client/create_channel_internal.cc \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/generic_stub.cc \ +src/cpp/common/buffer_pool.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index fd888f9abba..79a894a8007 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6819,6 +6819,7 @@ ], "headers": [ "include/grpc++/alarm.h", + "include/grpc++/buffer_pool.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", @@ -6874,6 +6875,7 @@ "name": "grpc++_base", "src": [ "include/grpc++/alarm.h", + "include/grpc++/buffer_pool.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", @@ -6928,6 +6930,7 @@ "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/generic_stub.cc", + "src/cpp/common/buffer_pool.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/channel_filter.h", diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index 497e370a5e5..9339a26893b 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -259,6 +259,7 @@ + @@ -485,6 +486,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index e26f3853cbd..1c39f52f847 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -46,6 +46,9 @@ src\cpp\client + + src\cpp\common + src\cpp\common @@ -381,6 +384,9 @@ include\grpc++ + + include\grpc++ + include\grpc++ diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index 19e8438f28a..c9c10ec75f9 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -259,6 +259,7 @@ + @@ -471,6 +472,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index 5b978fcb0b1..e410c95a2db 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -31,6 +31,9 @@ src\cpp\client + + src\cpp\common + src\cpp\common @@ -366,6 +369,9 @@ include\grpc++ + + include\grpc++ + include\grpc++ From 0c80c7d12c7affaea272c127bb6cad10c5f07a44 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 16:30:55 -0700 Subject: [PATCH 091/286] Collecting failure status progress --- include/grpc++/buffer_pool.h | 2 +- src/cpp/common/buffer_pool.cc | 3 +- src/proto/grpc/testing/control.proto | 10 ++ src/proto/grpc/testing/stats.proto | 8 + test/cpp/qps/client.h | 36 +++- test/cpp/qps/driver.cc | 24 +++ test/cpp/qps/server_async.cc | 6 + test/cpp/qps/server_sync.cc | 6 + .../run_tests/performance/scenario_config.py | 15 +- tools/run_tests/tests.json | 168 ++++++++++++++++++ 10 files changed, 268 insertions(+), 10 deletions(-) diff --git a/include/grpc++/buffer_pool.h b/include/grpc++/buffer_pool.h index 3494cdffd9e..900213ca6d1 100644 --- a/include/grpc++/buffer_pool.h +++ b/include/grpc++/buffer_pool.h @@ -54,7 +54,7 @@ class BufferPool GRPC_FINAL { /// current size of the pool, memory usage will be monotonically decreased /// until it falls under new_size. No time bound is given for this to occur /// however. - void Resize(size_t new_size); + BufferPool& Resize(size_t new_size); grpc_buffer_pool* c_buffer_pool() const { return impl_; } diff --git a/src/cpp/common/buffer_pool.cc b/src/cpp/common/buffer_pool.cc index 9d65bd74319..fe5704d6617 100644 --- a/src/cpp/common/buffer_pool.cc +++ b/src/cpp/common/buffer_pool.cc @@ -43,8 +43,9 @@ BufferPool::BufferPool(const grpc::string& name) BufferPool::~BufferPool() { grpc_buffer_pool_unref(impl_); } -void BufferPool::Resize(size_t new_size) { +BufferPool& BufferPool::Resize(size_t new_size) { grpc_buffer_pool_resize(impl_, new_size); + return *this; } } // namespace grpc diff --git a/src/proto/grpc/testing/control.proto b/src/proto/grpc/testing/control.proto index ece69108158..8cffca5f2c8 100644 --- a/src/proto/grpc/testing/control.proto +++ b/src/proto/grpc/testing/control.proto @@ -137,6 +137,11 @@ message ServerConfig { // If we use an OTHER_SERVER client_type, this string gives more detail string other_server_api = 11; + + // c++-only options (for now) -------------------------------- + + // Buffer pool size (no buffer pool specified if unset) + int32 buffer_pool_size = 1001; } message ServerArgs { @@ -213,6 +218,9 @@ message ScenarioResultSummary double latency_95 = 9; double latency_99 = 10; double latency_999 = 11; + + int64 successful_requests = 12; + int64 failed_requests = 13; } // Results of a single benchmark scenario. @@ -232,4 +240,6 @@ message ScenarioResult { // Information on success or failure of each worker repeated bool client_success = 7; repeated bool server_success = 8; + // Number of failed requests (one row per status code seen) + repeated RequestResultCount request_results = 9; } diff --git a/src/proto/grpc/testing/stats.proto b/src/proto/grpc/testing/stats.proto index f9d116110b0..d40d7148016 100644 --- a/src/proto/grpc/testing/stats.proto +++ b/src/proto/grpc/testing/stats.proto @@ -59,6 +59,11 @@ message HistogramData { double count = 6; } +message RequestResultCount { + int32 status_code = 1; + int64 count = 2; +} + message ClientStats { // Latency histogram. Data points are in nanoseconds. HistogramData latencies = 1; @@ -67,4 +72,7 @@ message ClientStats { double time_elapsed = 2; double time_user = 3; double time_system = 4; + + // Number of failed requests (one row per status code seen) + repeated RequestResultCount request_results = 5; } diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index 5fb87b27825..833bb2bad56 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -36,6 +36,7 @@ #include #include +#include #include #include @@ -127,6 +128,16 @@ class HistogramEntry GRPC_FINAL { double value_; }; +typedef std::unordered_map StatusHistogram; + +inline void MergeStatusHistogram(const StatusHistogram& from, + StatusHistogram* to) { + for (StatusHistogram::const_iterator it = from.begin(); it != from.end(); + ++it) { + (*to)[it->first] += it->second; + } +} + class Client { public: Client() @@ -139,6 +150,7 @@ class Client { ClientStats Mark(bool reset) { Histogram latencies; + StatusHistogram statuses; UsageTimer::Result timer_result; MaybeStartRequests(); @@ -146,27 +158,36 @@ class Client { // avoid std::vector for old compilers that expect a copy constructor if (reset) { Histogram* to_merge = new Histogram[threads_.size()]; + StatusHistogram* to_merge_status = new StatusHistogram[threads_.size()]; + for (size_t i = 0; i < threads_.size(); i++) { - threads_[i]->BeginSwap(&to_merge[i]); + threads_[i]->BeginSwap(&to_merge[i], &to_merge_status[i]); } std::unique_ptr timer(new UsageTimer); timer_.swap(timer); for (size_t i = 0; i < threads_.size(); i++) { - threads_[i]->EndSwap(); latencies.Merge(to_merge[i]); + MergeStatusHistogram(to_merge_status[i], &statuses); } delete[] to_merge; + delete[] to_merge_status; timer_result = timer->Mark(); } else { // merge snapshots of each thread histogram for (size_t i = 0; i < threads_.size(); i++) { - threads_[i]->MergeStatsInto(&latencies); + threads_[i]->MergeStatsInto(&latencies, &statuses); } timer_result = timer_->Mark(); } ClientStats stats; latencies.FillProto(stats.mutable_latencies()); + for (StatusHistogram::const_iterator it = statuses.begin(); + it != statuses.end(); ++it) { + RequestResultCount* rrc = stats.add_request_results(); + rrc->set_status_code(it->first); + rrc->set_count(it->second); + } stats.set_time_elapsed(timer_result.wall); stats.set_time_system(timer_result.system); stats.set_time_user(timer_result.user); @@ -258,16 +279,16 @@ class Client { ~Thread() { impl_.join(); } - void BeginSwap(Histogram* n) { + void BeginSwap(Histogram* n, StatusHistogram* s) { std::lock_guard g(mu_); n->Swap(&histogram_); + s->swap(statuses_); } - void EndSwap() {} - - void MergeStatsInto(Histogram* hist) { + void MergeStatsInto(Histogram* hist, StatusHistogram* s) { std::unique_lock g(mu_); hist->Merge(histogram_); + MergeStatusHistogram(statuses_, s); } private: @@ -304,6 +325,7 @@ class Client { std::mutex mu_; Histogram histogram_; + StatusHistogram statuses_; Client* client_; const size_t idx_; std::thread impl_; diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index 69654952065..fea94a3cb25 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -157,6 +157,19 @@ static void postprocess_scenario_result(ScenarioResult* result) { result->mutable_summary()->set_server_user_time(server_user_time); result->mutable_summary()->set_client_system_time(client_system_time); result->mutable_summary()->set_client_user_time(client_user_time); + + if (result->request_results_size() > 0) { + int64_t successes = 0; + int64_t failures = 0; + for (int i = 0; i < result->request_results_size(); i++) { + RequestResultCount rrc = result->request_results(i); + if (rrc.status_code() == 0) { + successes += rrc.count(); + } else { + failures += rrc.count(); + } + } + } } // Namespace for classes and functions used only in RunScenario @@ -444,6 +457,7 @@ std::unique_ptr RunScenario( // Finish a run std::unique_ptr result(new ScenarioResult); Histogram merged_latencies; + std::unordered_map merged_statuses; gpr_log(GPR_INFO, "Finishing clients"); for (size_t i = 0; i < num_clients; i++) { @@ -462,6 +476,10 @@ std::unique_ptr RunScenario( gpr_log(GPR_INFO, "Received final status from client %zu", i); const auto& stats = client_status.stats(); merged_latencies.MergeProto(stats.latencies()); + for (int i = 0; i < stats.request_results_size(); i++) { + merged_statuses[stats.request_results(i).status_code()] += + stats.request_results(i).count(); + } result->add_client_stats()->CopyFrom(stats); // That final status should be the last message on the client stream GPR_ASSERT(!client->stream->Read(&client_status)); @@ -481,6 +499,12 @@ std::unique_ptr RunScenario( delete[] clients; merged_latencies.FillProto(result->mutable_latencies()); + for (std::unordered_map::iterator it = merged_statuses.begin(); + it != merged_statuses.end(); ++it) { + RequestResultCount* rrc = result->add_request_results(); + rrc->set_status_code(it->first); + rrc->set_count(it->second); + } gpr_log(GPR_INFO, "Finishing servers"); for (size_t i = 0; i < num_servers; i++) { diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc index 082b4bc72fe..1163b765e3c 100644 --- a/test/cpp/qps/server_async.cc +++ b/test/cpp/qps/server_async.cc @@ -37,6 +37,7 @@ #include #include +#include #include #include #include @@ -95,6 +96,11 @@ class AsyncQpsServerTest : public Server { srv_cqs_.emplace_back(builder.AddCompletionQueue()); } + if (config.buffer_pool_size() > 0) { + builder.SetBufferPool( + BufferPool("AsyncQpsServerTest").Resize(config.buffer_pool_size())); + } + server_ = builder.BuildAndStart(); using namespace std::placeholders; diff --git a/test/cpp/qps/server_sync.cc b/test/cpp/qps/server_sync.cc index c774985bfa9..97f709b714d 100644 --- a/test/cpp/qps/server_sync.cc +++ b/test/cpp/qps/server_sync.cc @@ -33,6 +33,7 @@ #include +#include #include #include #include @@ -93,6 +94,11 @@ class SynchronousServer GRPC_FINAL : public grpc::testing::Server { Server::CreateServerCredentials(config)); gpr_free(server_address); + if (config.buffer_pool_size() > 0) { + builder.SetBufferPool( + BufferPool("AsyncQpsServerTest").Resize(config.buffer_pool_size())); + } + builder.RegisterService(&service_); impl_ = builder.BuildAndStart(); diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index fa401fdaafe..36fc3cb6c39 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -114,7 +114,8 @@ def _ping_pong_scenario(name, rpc_type, warmup_seconds=WARMUP_SECONDS, categories=DEFAULT_CATEGORIES, channels=None, - outstanding=None): + outstanding=None, + buffer_pool_size=None): """Creates a basic ping pong scenario.""" scenario = { 'name': name, @@ -141,6 +142,8 @@ def _ping_pong_scenario(name, rpc_type, 'warmup_seconds': warmup_seconds, 'benchmark_seconds': BENCHMARK_SECONDS } + if buffer_pool_size: + scenario['server_config']['buffer_pool_size'] = buffer_pool_size if use_generic_payload: if server_type != 'ASYNC_GENERIC_SERVER': raise Exception('Use ASYNC_GENERIC_SERVER for generic payload.') @@ -238,6 +241,16 @@ class CXXLanguage: secure=secure, categories=smoketest_categories+[SCALABLE]) + yield _ping_pong_scenario( + 'cpp_protobuf_%s_%s_qps_unconstrained_%s_500kib_buffer_pool' % (synchronicity, rpc_type, secstr), + rpc_type=rpc_type.upper(), + client_type='%s_CLIENT' % synchronicity.upper(), + server_type='%s_SERVER' % synchronicity.upper(), + unconstrained_client=synchronicity, + secure=secure, + categories=smoketest_categories+[SCALABLE], + buffer_pool_size=500*1024) + for channels in geometric_progression(1, 20000, math.sqrt(10)): for outstanding in geometric_progression(1, 200000, math.sqrt(10)): if synchronicity == 'sync' and outstanding > 1200: continue diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index d63b8f14039..1a5ddb7b3f9 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -32065,6 +32065,27 @@ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"buffer_pool_size\": 512000, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_buffer_pool", + "timeout_seconds": 180 + }, { "args": [ "--scenarios_json", @@ -32107,6 +32128,27 @@ "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"buffer_pool_size\": 512000, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_buffer_pool", + "timeout_seconds": 180 + }, { "args": [ "--scenarios_json", @@ -32149,6 +32191,27 @@ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"buffer_pool_size\": 512000, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_buffer_pool", + "timeout_seconds": 180 + }, { "args": [ "--scenarios_json", @@ -32191,6 +32254,27 @@ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"buffer_pool_size\": 512000, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_buffer_pool", + "timeout_seconds": 180 + }, { "args": [ "--scenarios_json", @@ -32275,6 +32359,27 @@ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"buffer_pool_size\": 512000, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_buffer_pool", + "timeout_seconds": 180 + }, { "args": [ "--scenarios_json", @@ -32317,6 +32422,27 @@ "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"buffer_pool_size\": 512000, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_buffer_pool", + "timeout_seconds": 180 + }, { "args": [ "--scenarios_json", @@ -32359,6 +32485,27 @@ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"buffer_pool_size\": 512000, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_buffer_pool", + "timeout_seconds": 180 + }, { "args": [ "--scenarios_json", @@ -32401,6 +32548,27 @@ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"buffer_pool_size\": 512000, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_buffer_pool", + "timeout_seconds": 180 + }, { "args": [ "test/core/end2end/fuzzers/api_fuzzer_corpus/00.bin" From 1a8c52e47910bc32ed963fd8f56efb00c91883c7 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 17:28:04 -0700 Subject: [PATCH 092/286] Collect stats on # failed requests --- src/proto/grpc/testing/control.proto | 1 + test/cpp/qps/driver.cc | 2 ++ test/cpp/qps/qps_json_driver.cc | 5 +++++ 3 files changed, 8 insertions(+) diff --git a/src/proto/grpc/testing/control.proto b/src/proto/grpc/testing/control.proto index 8cffca5f2c8..83c41508a7a 100644 --- a/src/proto/grpc/testing/control.proto +++ b/src/proto/grpc/testing/control.proto @@ -219,6 +219,7 @@ message ScenarioResultSummary double latency_99 = 10; double latency_999 = 11; + // Number of requests that succeeded/failed int64 successful_requests = 12; int64 failed_requests = 13; } diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index fea94a3cb25..29e53f383dd 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -169,6 +169,8 @@ static void postprocess_scenario_result(ScenarioResult* result) { failures += rrc.count(); } } + result->mutable_summary()->set_successful_requests(successes); + result->mutable_summary()->set_failed_requests(successes); } } diff --git a/test/cpp/qps/qps_json_driver.cc b/test/cpp/qps/qps_json_driver.cc index 1524ebbc389..4a9745c66e1 100644 --- a/test/cpp/qps/qps_json_driver.cc +++ b/test/cpp/qps/qps_json_driver.cc @@ -110,6 +110,11 @@ static bool QpsDriver() { GetReporter()->ReportLatency(*result); GetReporter()->ReportTimes(*result); + if (result->mutable_summary()->failed_requests()) { + std::cerr << "# failed requests: " + << result->mutable_summary()->failed_requests() << "\n"; + } + for (int i = 0; success && i < result->client_success_size(); i++) { success = result->client_success(i); } From af541d82328e01af0d1cb99097491e48a6d2a601 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 17:32:09 -0700 Subject: [PATCH 093/286] Fix conflicting filename --- BUILD | 4 ++-- CMakeLists.txt | 4 ++-- Makefile | 4 ++-- build.yaml | 2 +- src/cpp/common/{buffer_pool.cc => buffer_pool_cc.cc} | 0 tools/doxygen/Doxyfile.c++.internal | 2 +- tools/run_tests/sources_and_headers.json | 2 +- vsprojects/vcxproj/grpc++/grpc++.vcxproj | 2 +- vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters | 2 +- vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj | 2 +- .../vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) rename src/cpp/common/{buffer_pool.cc => buffer_pool_cc.cc} (100%) diff --git a/BUILD b/BUILD index b82f546989c..c541eb78c12 100644 --- a/BUILD +++ b/BUILD @@ -1367,7 +1367,7 @@ cc_library( "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/generic_stub.cc", - "src/cpp/common/buffer_pool.cc", + "src/cpp/common/buffer_pool_cc.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/completion_queue_cc.cc", @@ -1773,7 +1773,7 @@ cc_library( "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/generic_stub.cc", - "src/cpp/common/buffer_pool.cc", + "src/cpp/common/buffer_pool_cc.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/completion_queue_cc.cc", diff --git a/CMakeLists.txt b/CMakeLists.txt index 04683f148af..b6e1f9c1298 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1017,7 +1017,7 @@ add_library(grpc++ src/cpp/client/create_channel_posix.cc src/cpp/client/credentials_cc.cc src/cpp/client/generic_stub.cc - src/cpp/common/buffer_pool.cc + src/cpp/common/buffer_pool_cc.cc src/cpp/common/channel_arguments.cc src/cpp/common/channel_filter.cc src/cpp/common/completion_queue_cc.cc @@ -1372,7 +1372,7 @@ add_library(grpc++_unsecure src/cpp/client/create_channel_posix.cc src/cpp/client/credentials_cc.cc src/cpp/client/generic_stub.cc - src/cpp/common/buffer_pool.cc + src/cpp/common/buffer_pool_cc.cc src/cpp/common/channel_arguments.cc src/cpp/common/channel_filter.cc src/cpp/common/completion_queue_cc.cc diff --git a/Makefile b/Makefile index 8f9d301a091..3de79afb359 100644 --- a/Makefile +++ b/Makefile @@ -3586,7 +3586,7 @@ LIBGRPC++_SRC = \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/generic_stub.cc \ - src/cpp/common/buffer_pool.cc \ + src/cpp/common/buffer_pool_cc.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ @@ -4216,7 +4216,7 @@ LIBGRPC++_UNSECURE_SRC = \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/generic_stub.cc \ - src/cpp/common/buffer_pool.cc \ + src/cpp/common/buffer_pool_cc.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ diff --git a/build.yaml b/build.yaml index b9567042497..2128852f2ba 100644 --- a/build.yaml +++ b/build.yaml @@ -721,7 +721,7 @@ filegroups: - src/cpp/client/create_channel_posix.cc - src/cpp/client/credentials_cc.cc - src/cpp/client/generic_stub.cc - - src/cpp/common/buffer_pool.cc + - src/cpp/common/buffer_pool_cc.cc - src/cpp/common/channel_arguments.cc - src/cpp/common/channel_filter.cc - src/cpp/common/completion_queue_cc.cc diff --git a/src/cpp/common/buffer_pool.cc b/src/cpp/common/buffer_pool_cc.cc similarity index 100% rename from src/cpp/common/buffer_pool.cc rename to src/cpp/common/buffer_pool_cc.cc diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 3f8df1d4ad5..02826d1e65a 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -969,7 +969,7 @@ src/cpp/client/create_channel_internal.cc \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/generic_stub.cc \ -src/cpp/common/buffer_pool.cc \ +src/cpp/common/buffer_pool_cc.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 79a894a8007..16a5e9811bc 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6930,7 +6930,7 @@ "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/generic_stub.cc", - "src/cpp/common/buffer_pool.cc", + "src/cpp/common/buffer_pool_cc.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/channel_filter.h", diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index 9339a26893b..6823d60008a 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -486,7 +486,7 @@ - + diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index 1c39f52f847..0b313dd7078 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -46,7 +46,7 @@ src\cpp\client - + src\cpp\common diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index c9c10ec75f9..1f8e2d79ea8 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -472,7 +472,7 @@ - + diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index e410c95a2db..9a417e6ded4 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -31,7 +31,7 @@ src\cpp\client - + src\cpp\common From 14d4b9c5457508e435daa6e96c6b2f6d361725a3 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 29 Sep 2016 09:44:51 -0700 Subject: [PATCH 094/286] Fix memory leak --- src/core/ext/transport/chttp2/transport/writing.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/ext/transport/chttp2/transport/writing.c b/src/core/ext/transport/chttp2/transport/writing.c index bc490569b7c..ebdbce1bfde 100644 --- a/src/core/ext/transport/chttp2/transport/writing.c +++ b/src/core/ext/transport/chttp2/transport/writing.c @@ -70,6 +70,7 @@ static void update_list(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, } cb = next; } + GRPC_ERROR_UNREF(error); } bool grpc_chttp2_begin_write(grpc_exec_ctx *exec_ctx, From 091e4f0ef83cdd1115f0a799a5c0dccfae03316c Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 29 Sep 2016 09:57:35 -0700 Subject: [PATCH 095/286] Handle failed allocations --- src/core/lib/iomgr/tcp_posix.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 120622e817c..648ca52818b 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -251,7 +251,7 @@ static void tcp_do_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { } else if (read_bytes == 0) { /* 0 read size ==> end of stream */ gpr_slice_buffer_reset_and_unref(tcp->incoming_buffer); - call_read_cb(exec_ctx, tcp, GRPC_ERROR_CREATE("EOF")); + call_read_cb(exec_ctx, tcp, GRPC_ERROR_CREATE("Socket closed")); TCP_UNREF(exec_ctx, tcp, "read"); } else { GPR_ASSERT((size_t)read_bytes <= tcp->incoming_buffer->length); @@ -271,9 +271,17 @@ static void tcp_do_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { GPR_TIMER_END("tcp_continue_read", 0); } -static void tcp_read_allocation_done(grpc_exec_ctx *exec_ctx, void *tcp, +static void tcp_read_allocation_done(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) { - tcp_do_read(exec_ctx, tcp); + grpc_tcp *tcp = tcpp; + if (error != GRPC_ERROR_NONE) { + gpr_slice_buffer_reset_and_unref(tcp->incoming_buffer); + gpr_slice_buffer_reset_and_unref(&tcp->last_read_buffer); + call_read_cb(exec_ctx, tcp, GRPC_ERROR_REF(error)); + TCP_UNREF(exec_ctx, tcp, "read"); + } else { + tcp_do_read(exec_ctx, tcp); + } } static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { From 032f9bfb584f006841a051305f16b53550cf7ca3 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 29 Sep 2016 10:10:00 -0700 Subject: [PATCH 096/286] Start to log errors from benchmark --- test/cpp/qps/client.h | 21 ++++++++++++++++----- test/cpp/qps/client_async.cc | 11 +++++++---- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index 833bb2bad56..100d038ff29 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -115,17 +115,25 @@ class ClientRequestCreator { class HistogramEntry GRPC_FINAL { public: - HistogramEntry() : used_(false) {} - bool used() const { return used_; } + HistogramEntry() : value_used_(false), status_used_(false) {} + bool value_used() const { return value_used_; } double value() const { return value_; } void set_value(double v) { - used_ = true; + value_used_ = true; value_ = v; } + bool status_used() const { return status_used_; } + int status() const { return status_; } + void set_status(int status) { + status_used_ = true; + status_ = status; + } private: - bool used_; + bool value_used_; double value_; + bool status_used_; + int status_; }; typedef std::unordered_map StatusHistogram; @@ -309,9 +317,12 @@ class Client { const bool thread_still_ok = client_->ThreadFunc(&entry, idx_); // lock, update histogram if needed and see if we're done std::lock_guard g(mu_); - if (entry.used()) { + if (entry.value_used()) { histogram_.Add(entry.value()); } + if (entry.status_used()) { + statuses_[entry.value()]++; + } if (!thread_still_ok) { gpr_log(GPR_ERROR, "Finishing client thread due to RPC error"); } diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc index 5d9cb4bd0cf..572a85e58e5 100644 --- a/test/cpp/qps/client_async.cc +++ b/test/cpp/qps/client_async.cc @@ -83,7 +83,7 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext { BenchmarkService::Stub*, grpc::ClientContext*, const RequestType&, CompletionQueue*)> start_req, - std::function on_done) + std::function on_done) : context_(), stub_(stub), cq_(nullptr), @@ -113,7 +113,7 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext { return true; case State::RESP_DONE: entry->set_value((UsageTimer::Now() - start_) * 1e9); - callback_(status_, &response_); + callback_(status_, &response_, entry); next_state_ = State::INVALID; return false; default: @@ -135,7 +135,7 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext { ResponseType response_; enum State { INVALID, READY, RESP_DONE }; State next_state_; - std::function callback_; + std::function callback_; std::function next_issue_; std::function>( BenchmarkService::Stub*, grpc::ClientContext*, const RequestType&, @@ -289,7 +289,10 @@ class AsyncUnaryClient GRPC_FINAL ~AsyncUnaryClient() GRPC_OVERRIDE {} private: - static void CheckDone(grpc::Status s, SimpleResponse* response) {} + static void CheckDone(grpc::Status s, SimpleResponse* response, + HistogramEntry* entry) { + entry->set_status(s.error_code()); + } static std::unique_ptr> StartReq(BenchmarkService::Stub* stub, grpc::ClientContext* ctx, const SimpleRequest& request, CompletionQueue* cq) { From 9c7f4f7028130058ef9dc690f56554f91832ba41 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 29 Sep 2016 10:36:20 -0700 Subject: [PATCH 097/286] Fix merge error --- src/core/lib/iomgr/tcp_client_posix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 6c82f47d719..dadd4cc2eb2 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -196,7 +196,7 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { case 0: grpc_pollset_set_del_fd(exec_ctx, ac->interested_parties, fd); *ep = grpc_tcp_client_create_from_fd(exec_ctx, fd, ac->channel_args, - +ac->addr_str); + ac->addr_str); fd = NULL; break; case ENOBUFS: From 0895545a587e8e1f986eb813580277d88a7de55f Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 29 Sep 2016 11:01:14 -0700 Subject: [PATCH 098/286] Complete reporting for failure rates --- src/proto/grpc/testing/control.proto | 4 ++-- test/cpp/qps/client.h | 2 +- test/cpp/qps/driver.cc | 7 ++++--- test/cpp/qps/qps_json_driver.cc | 5 ----- test/cpp/qps/report.cc | 6 ++++++ 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/proto/grpc/testing/control.proto b/src/proto/grpc/testing/control.proto index 83c41508a7a..4adf235f617 100644 --- a/src/proto/grpc/testing/control.proto +++ b/src/proto/grpc/testing/control.proto @@ -220,8 +220,8 @@ message ScenarioResultSummary double latency_999 = 11; // Number of requests that succeeded/failed - int64 successful_requests = 12; - int64 failed_requests = 13; + double successful_requests_per_second = 12; + double failed_requests_per_second = 13; } // Results of a single benchmark scenario. diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index 100d038ff29..9983c8a7b08 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -321,7 +321,7 @@ class Client { histogram_.Add(entry.value()); } if (entry.status_used()) { - statuses_[entry.value()]++; + statuses_[entry.status()]++; } if (!thread_still_ok) { gpr_log(GPR_ERROR, "Finishing client thread due to RPC error"); diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index 29e53f383dd..0168a525ceb 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -132,7 +132,8 @@ static void postprocess_scenario_result(ScenarioResult* result) { Histogram histogram; histogram.MergeProto(result->latencies()); - auto qps = histogram.Count() / average(result->client_stats(), WallTime); + auto time_estimate = average(result->client_stats(), WallTime); + auto qps = histogram.Count() / time_estimate; auto qps_per_server_core = qps / sum(result->server_cores(), Cores); result->mutable_summary()->set_qps(qps); @@ -169,8 +170,8 @@ static void postprocess_scenario_result(ScenarioResult* result) { failures += rrc.count(); } } - result->mutable_summary()->set_successful_requests(successes); - result->mutable_summary()->set_failed_requests(successes); + result->mutable_summary()->set_successful_requests_per_second(successes / time_estimate); + result->mutable_summary()->set_failed_requests_per_second(failures / time_estimate); } } diff --git a/test/cpp/qps/qps_json_driver.cc b/test/cpp/qps/qps_json_driver.cc index 4a9745c66e1..1524ebbc389 100644 --- a/test/cpp/qps/qps_json_driver.cc +++ b/test/cpp/qps/qps_json_driver.cc @@ -110,11 +110,6 @@ static bool QpsDriver() { GetReporter()->ReportLatency(*result); GetReporter()->ReportTimes(*result); - if (result->mutable_summary()->failed_requests()) { - std::cerr << "# failed requests: " - << result->mutable_summary()->failed_requests() << "\n"; - } - for (int i = 0; success && i < result->client_success_size(); i++) { success = result->client_success(i); } diff --git a/test/cpp/qps/report.cc b/test/cpp/qps/report.cc index 2ec7d8676c2..41617e968a5 100644 --- a/test/cpp/qps/report.cc +++ b/test/cpp/qps/report.cc @@ -73,6 +73,12 @@ void CompositeReporter::ReportTimes(const ScenarioResult& result) { void GprLogReporter::ReportQPS(const ScenarioResult& result) { gpr_log(GPR_INFO, "QPS: %.1f", result.summary().qps()); + if (result.summary().failed_requests_per_second() > 0) { + gpr_log(GPR_INFO, "failed requests/second: %.1f", + result.summary().failed_requests_per_second()); + gpr_log(GPR_INFO, "successful requests/second: %.1f", + result.summary().successful_requests_per_second()); + } } void GprLogReporter::ReportQPSPerCore(const ScenarioResult& result) { From 3a32f98653b7f626c4417f3f44a623e0e5e4a51d Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 29 Sep 2016 11:37:06 -0700 Subject: [PATCH 099/286] Fix double-free --- src/core/lib/surface/server.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c index cec3e3ce979..87364a8a051 100644 --- a/src/core/lib/surface/server.c +++ b/src/core/lib/surface/server.c @@ -842,7 +842,6 @@ static void accept_stream(grpc_exec_ctx *exec_ctx, void *cd, grpc_call_stack_element(grpc_call_get_call_stack(call), 0); if (error != GRPC_ERROR_NONE) { got_initial_metadata(exec_ctx, elem, error); - GRPC_ERROR_UNREF(error); return; } call_data *calld = elem->call_data; From 3b2bc2deb1a249fd6d260adb50c39064ef5f9c2c Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 29 Sep 2016 17:53:29 -0700 Subject: [PATCH 100/286] tsan failures --- src/cpp/rpcmanager/grpc_rpc_manager.cc | 33 ++++++++++++++------------ 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index 58b337da634..2299dbdcd38 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -59,12 +59,14 @@ GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_pollers) : shutdown_(false), num_pollers_(0), min_pollers_(min_pollers), - max_pollers_(max_pollers == -1 ? INT_MAX: max_pollers), + max_pollers_(max_pollers == -1 ? INT_MAX : max_pollers), num_threads_(0) {} GrpcRpcManager::~GrpcRpcManager() { - std::unique_lock lock(mu_); - GPR_ASSERT(num_threads_ == 0); + { + std::unique_lock lock(mu_); + GPR_ASSERT(num_threads_ == 0); + } CleanupCompletedThreads(); } @@ -87,8 +89,16 @@ bool GrpcRpcManager::IsShutdown() { } void GrpcRpcManager::MarkAsCompleted(GrpcRpcManagerThread* thd) { - std::unique_lock lock(list_mu_); - completed_threads_.push_back(thd); + { + std::unique_lock list_lock(list_mu_); + completed_threads_.push_back(thd); + } + + grpc::unique_lock lock(mu_); + num_threads_--; + if (num_threads_ == 0) { + shutdown_cv_.notify_one(); + } } void GrpcRpcManager::CleanupCompletedThreads() { @@ -169,17 +179,10 @@ void GrpcRpcManager::MainWorkLoop() { } } while (MaybeContinueAsPoller()); - // If we are here, either GrpcRpcManager is shutting down or it already has - // enough threads. In both cases, current thread can be terminated - { - grpc::unique_lock lock(mu_); - num_threads_--; - if (num_threads_ == 0) { - shutdown_cv_.notify_one(); - } - } - CleanupCompletedThreads(); + + // If we are here, either GrpcRpcManager is shutting down or it already has + // enough threads. } } // namespace grpc From c36f6ea7457e05a55f282c06f565c289750c0768 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 3 Oct 2016 09:24:09 -0700 Subject: [PATCH 101/286] Compile and link core tests with libuv --- BUILD | 6 + CMakeLists.txt | 5 + Makefile | 24 ++- binding.gyp | 1 + build.yaml | 17 ++ config.m4 | 1 + gRPC-Core.podspec | 1 + grpc.gemspec | 1 + package.xml | 1 + src/boringssl/gen_build_yaml.py | 2 +- src/core/lib/iomgr/endpoint_pair_uv.c | 50 ++++++ src/core/lib/iomgr/sockaddr.h | 3 +- src/core/lib/iomgr/tcp_client.h | 1 - src/core/lib/iomgr/tcp_client_uv.c | 25 ++- src/core/lib/iomgr/tcp_uv.c | 8 +- src/python/grpcio/grpc_core_dependencies.py | 1 + templates/Makefile.template | 9 +- templates/tools/run_tests/tests.json.template | 1 + .../set_initial_connect_string_test.c | 3 +- test/core/end2end/bad_server_response_test.c | 3 +- test/core/end2end/cq_verifier.c | 46 ++---- test/core/end2end/cq_verifier_internal.h | 47 ++++++ test/core/end2end/cq_verifier_native.c | 73 ++++++++ test/core/end2end/cq_verifier_uv.c | 108 ++++++++++++ test/core/end2end/dualstack_socket_test.c | 13 ++ test/core/end2end/fixtures/h2_fd.c | 13 ++ test/core/end2end/fixtures/h2_full+pipe.c | 13 ++ test/core/end2end/fixtures/http_proxy.c | 2 + test/core/end2end/fuzzers/api_fuzzer.c | 6 +- test/core/end2end/gen_build_yaml.py | 8 +- test/core/iomgr/fd_posix_test.c | 13 ++ test/core/iomgr/socket_utils_test.c | 14 +- test/core/iomgr/tcp_posix_test.c | 13 ++ test/core/iomgr/tcp_server_posix_test.c | 13 ++ test/core/iomgr/timer_heap_test.c | 13 ++ test/core/util/port_server_client.c | 2 +- test/core/util/port_uv.c | 58 +++++++ tools/doxygen/Doxyfile.c++.internal | 1 + tools/doxygen/Doxyfile.core.internal | 1 + tools/run_tests/run_tests.py | 21 ++- tools/run_tests/sources_and_headers.json | 6 + tools/run_tests/tests.json | 156 ++++++++++++++++++ vsprojects/vcxproj/grpc++/grpc++.vcxproj | 2 + .../vcxproj/grpc++/grpc++.vcxproj.filters | 3 + .../grpc++_unsecure/grpc++_unsecure.vcxproj | 2 + .../grpc++_unsecure.vcxproj.filters | 3 + vsprojects/vcxproj/grpc/grpc.vcxproj | 2 + vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 3 + .../grpc_test_util/grpc_test_util.vcxproj | 9 + .../grpc_test_util.vcxproj.filters | 15 ++ .../grpc_test_util_unsecure.vcxproj | 7 + .../grpc_test_util_unsecure.vcxproj.filters | 12 ++ .../grpc_unsecure/grpc_unsecure.vcxproj | 2 + .../grpc_unsecure.vcxproj.filters | 3 + 54 files changed, 800 insertions(+), 66 deletions(-) create mode 100644 src/core/lib/iomgr/endpoint_pair_uv.c create mode 100644 test/core/end2end/cq_verifier_internal.h create mode 100644 test/core/end2end/cq_verifier_native.c create mode 100644 test/core/end2end/cq_verifier_uv.c create mode 100644 test/core/util/port_uv.c diff --git a/BUILD b/BUILD index 0a0af3491ca..e4a79b29fca 100644 --- a/BUILD +++ b/BUILD @@ -348,6 +348,7 @@ cc_library( "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", + "src/core/lib/iomgr/endpoint_pair_uv.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", @@ -749,6 +750,7 @@ cc_library( "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", + "src/core/lib/iomgr/endpoint_pair_uv.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", @@ -1112,6 +1114,7 @@ cc_library( "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", + "src/core/lib/iomgr/endpoint_pair_uv.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", @@ -1459,6 +1462,7 @@ cc_library( "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", + "src/core/lib/iomgr/endpoint_pair_uv.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", @@ -1880,6 +1884,7 @@ cc_library( "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", + "src/core/lib/iomgr/endpoint_pair_uv.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", @@ -2279,6 +2284,7 @@ objc_library( "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", + "src/core/lib/iomgr/endpoint_pair_uv.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", diff --git a/CMakeLists.txt b/CMakeLists.txt index 916c83f6fb0..7dec554f68a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -309,6 +309,7 @@ add_library(grpc src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c src/core/lib/iomgr/endpoint_pair_posix.c + src/core/lib/iomgr/endpoint_pair_uv.c src/core/lib/iomgr/endpoint_pair_windows.c src/core/lib/iomgr/error.c src/core/lib/iomgr/ev_epoll_linux.c @@ -577,6 +578,7 @@ add_library(grpc_cronet src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c src/core/lib/iomgr/endpoint_pair_posix.c + src/core/lib/iomgr/endpoint_pair_uv.c src/core/lib/iomgr/endpoint_pair_windows.c src/core/lib/iomgr/error.c src/core/lib/iomgr/ev_epoll_linux.c @@ -817,6 +819,7 @@ add_library(grpc_unsecure src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c src/core/lib/iomgr/endpoint_pair_posix.c + src/core/lib/iomgr/endpoint_pair_uv.c src/core/lib/iomgr/endpoint_pair_windows.c src/core/lib/iomgr/error.c src/core/lib/iomgr/ev_epoll_linux.c @@ -1085,6 +1088,7 @@ add_library(grpc++ src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c src/core/lib/iomgr/endpoint_pair_posix.c + src/core/lib/iomgr/endpoint_pair_uv.c src/core/lib/iomgr/endpoint_pair_windows.c src/core/lib/iomgr/error.c src/core/lib/iomgr/ev_epoll_linux.c @@ -1449,6 +1453,7 @@ add_library(grpc++_unsecure src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c src/core/lib/iomgr/endpoint_pair_posix.c + src/core/lib/iomgr/endpoint_pair_uv.c src/core/lib/iomgr/endpoint_pair_windows.c src/core/lib/iomgr/error.c src/core/lib/iomgr/ev_epoll_linux.c diff --git a/Makefile b/Makefile index 6929046ee58..66a74503769 100644 --- a/Makefile +++ b/Makefile @@ -345,10 +345,6 @@ HOST_CXX ?= $(CXX) HOST_LD ?= $(LD) HOST_LDXX ?= $(LDXX) -ifdef EXTRA_DEFINES -DEFINES += $(EXTRA_DEFINES) -endif - CFLAGS += -std=c99 -Wsign-conversion -Wconversion $(W_SHADOW) $(W_EXTRA_SEMI) ifeq ($(HAS_CXX11),true) CXXFLAGS += -std=c++11 @@ -447,6 +443,14 @@ LDFLAGS += $(ARCH_FLAGS) LDLIBS += $(addprefix -l, $(LIBS)) LDLIBSXX += $(addprefix -l, $(LIBSXX)) + +CFLAGS += $(EXTRA_CFLAGS) +CXXFLAGS += $(EXTRA_CXXFLAGS) +CPPFLAGS += $(EXTRA_CPPFLAGS) +LDFLAGS += $(EXTRA_LDFLAGS) +DEFINES += $(EXTRA_DEFINES) +LDLIBS += $(EXTRA_LDLIBS) + HOST_CPPFLAGS = $(CPPFLAGS) HOST_CFLAGS = $(CFLAGS) HOST_CXXFLAGS = $(CXXFLAGS) @@ -2546,6 +2550,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ + src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ @@ -2832,6 +2837,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ + src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ @@ -3076,6 +3082,8 @@ LIBGRPC_TEST_UTIL_SRC = \ test/core/end2end/data/test_root_cert.c \ test/core/security/oauth2_utils.c \ test/core/end2end/cq_verifier.c \ + test/core/end2end/cq_verifier_native.c \ + test/core/end2end/cq_verifier_uv.c \ test/core/end2end/fixtures/http_proxy.c \ test/core/end2end/fixtures/proxy.c \ test/core/iomgr/endpoint_tests.c \ @@ -3086,6 +3094,7 @@ LIBGRPC_TEST_UTIL_SRC = \ test/core/util/passthru_endpoint.c \ test/core/util/port_posix.c \ test/core/util/port_server_client.c \ + test/core/util/port_uv.c \ test/core/util/port_windows.c \ test/core/util/slice_splitter.c \ src/core/lib/channel/channel_args.c \ @@ -3107,6 +3116,7 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ + src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ @@ -3253,6 +3263,8 @@ endif LIBGRPC_TEST_UTIL_UNSECURE_SRC = \ test/core/end2end/cq_verifier.c \ + test/core/end2end/cq_verifier_native.c \ + test/core/end2end/cq_verifier_uv.c \ test/core/end2end/fixtures/http_proxy.c \ test/core/end2end/fixtures/proxy.c \ test/core/iomgr/endpoint_tests.c \ @@ -3263,6 +3275,7 @@ LIBGRPC_TEST_UTIL_UNSECURE_SRC = \ test/core/util/passthru_endpoint.c \ test/core/util/port_posix.c \ test/core/util/port_server_client.c \ + test/core/util/port_uv.c \ test/core/util/port_windows.c \ test/core/util/slice_splitter.c \ @@ -3310,6 +3323,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ + src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ @@ -3661,6 +3675,7 @@ LIBGRPC++_SRC = \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ + src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ @@ -4300,6 +4315,7 @@ LIBGRPC++_UNSECURE_SRC = \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ + src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ diff --git a/binding.gyp b/binding.gyp index 3e63f73095a..82ab51b71da 100644 --- a/binding.gyp +++ b/binding.gyp @@ -587,6 +587,7 @@ 'src/core/lib/iomgr/combiner.c', 'src/core/lib/iomgr/endpoint.c', 'src/core/lib/iomgr/endpoint_pair_posix.c', + 'src/core/lib/iomgr/endpoint_pair_uv.c', 'src/core/lib/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/error.c', 'src/core/lib/iomgr/ev_epoll_linux.c', diff --git a/build.yaml b/build.yaml index 86ede36fff9..042b48fc9be 100644 --- a/build.yaml +++ b/build.yaml @@ -275,6 +275,7 @@ filegroups: - src/core/lib/iomgr/combiner.c - src/core/lib/iomgr/endpoint.c - src/core/lib/iomgr/endpoint_pair_posix.c + - src/core/lib/iomgr/endpoint_pair_uv.c - src/core/lib/iomgr/endpoint_pair_windows.c - src/core/lib/iomgr/error.c - src/core/lib/iomgr/ev_epoll_linux.c @@ -522,6 +523,7 @@ filegroups: build: test headers: - test/core/end2end/cq_verifier.h + - test/core/end2end/cq_verifier_internal.h - test/core/end2end/fixtures/http_proxy.h - test/core/end2end/fixtures/proxy.h - test/core/iomgr/endpoint_tests.h @@ -535,6 +537,8 @@ filegroups: - test/core/util/slice_splitter.h src: - test/core/end2end/cq_verifier.c + - test/core/end2end/cq_verifier_native.c + - test/core/end2end/cq_verifier_uv.c - test/core/end2end/fixtures/http_proxy.c - test/core/end2end/fixtures/proxy.c - test/core/iomgr/endpoint_tests.c @@ -545,6 +549,7 @@ filegroups: - test/core/util/passthru_endpoint.c - test/core/util/port_posix.c - test/core/util/port_server_client.c + - test/core/util/port_uv.c - test/core/util/port_windows.c - test/core/util/slice_splitter.c deps: @@ -1511,6 +1516,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux @@ -2451,6 +2458,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux @@ -2466,6 +2475,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux @@ -2480,6 +2491,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux @@ -2514,6 +2527,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: timer_list_test build: test language: c @@ -2524,6 +2539,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: transport_connectivity_state_test build: test language: c diff --git a/config.m4 b/config.m4 index 915c1782892..275f176cbc1 100644 --- a/config.m4 +++ b/config.m4 @@ -103,6 +103,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ + src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 479045d930a..7ce0a0de23f 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -439,6 +439,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/combiner.c', 'src/core/lib/iomgr/endpoint.c', 'src/core/lib/iomgr/endpoint_pair_posix.c', + 'src/core/lib/iomgr/endpoint_pair_uv.c', 'src/core/lib/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/error.c', 'src/core/lib/iomgr/ev_epoll_linux.c', diff --git a/grpc.gemspec b/grpc.gemspec index ae4c3926e78..a2907513224 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -359,6 +359,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/combiner.c ) s.files += %w( src/core/lib/iomgr/endpoint.c ) s.files += %w( src/core/lib/iomgr/endpoint_pair_posix.c ) + s.files += %w( src/core/lib/iomgr/endpoint_pair_uv.c ) s.files += %w( src/core/lib/iomgr/endpoint_pair_windows.c ) s.files += %w( src/core/lib/iomgr/error.c ) s.files += %w( src/core/lib/iomgr/ev_epoll_linux.c ) diff --git a/package.xml b/package.xml index 55b5933f624..4e0dad9b3bf 100644 --- a/package.xml +++ b/package.xml @@ -366,6 +366,7 @@ + diff --git a/src/boringssl/gen_build_yaml.py b/src/boringssl/gen_build_yaml.py index 20f6413adfc..c53beb0da5f 100755 --- a/src/boringssl/gen_build_yaml.py +++ b/src/boringssl/gen_build_yaml.py @@ -36,7 +36,7 @@ import yaml sys.dont_write_bytecode = True boring_ssl_root = os.path.abspath(os.path.join( - os.path.dirname(sys.argv[0]), + os.path.dirname(sys.argv[0]), '../../third_party/boringssl')) sys.path.append(os.path.join(boring_ssl_root, 'util')) diff --git a/src/core/lib/iomgr/endpoint_pair_uv.c b/src/core/lib/iomgr/endpoint_pair_uv.c new file mode 100644 index 00000000000..eeca8070b5f --- /dev/null +++ b/src/core/lib/iomgr/endpoint_pair_uv.c @@ -0,0 +1,50 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_UV + +#include + +#include "src/core/lib/iomgr/endpoint_pair.h" + +grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, + size_t read_slice_size) { + grpc_endpoint_pair endpoint_pair; + // TODO(mlumish): implement this properly under libuv + abort(); + return endpoint_pair; +} + +#endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/sockaddr.h b/src/core/lib/iomgr/sockaddr.h index 75dc532d6c7..52b504390d9 100644 --- a/src/core/lib/iomgr/sockaddr.h +++ b/src/core/lib/iomgr/sockaddr.h @@ -32,7 +32,8 @@ */ /* This header transitively includes other headers that care about include - * order, so it should be included first */ + * order, so it should be included first. As a consequence, it should not be + * included in any other header. */ #ifndef GRPC_CORE_LIB_IOMGR_SOCKADDR_H #define GRPC_CORE_LIB_IOMGR_SOCKADDR_H diff --git a/src/core/lib/iomgr/tcp_client.h b/src/core/lib/iomgr/tcp_client.h index 83e69003f55..fe1e7f4d3ec 100644 --- a/src/core/lib/iomgr/tcp_client.h +++ b/src/core/lib/iomgr/tcp_client.h @@ -38,7 +38,6 @@ #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/iomgr/resolve_address.h" -#include "src/core/lib/iomgr/sockaddr.h" /* Asynchronously connect to an address (specified as (addr, len)), and call cb with arg and the completed connection when done (or call cb with arg and diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c index 3a2cca5392a..50e3615aadd 100644 --- a/src/core/lib/iomgr/tcp_client_uv.c +++ b/src/core/lib/iomgr/tcp_client_uv.c @@ -116,11 +116,11 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) { grpc_exec_ctx_finish(&exec_ctx); } -void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, - grpc_endpoint **ep, - grpc_pollset_set *interested_parties, - const grpc_resolved_address *resolved_addr, - gpr_timespec deadline) { +static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, + grpc_closure *closure, grpc_endpoint **ep, + grpc_pollset_set *interested_parties, + const grpc_resolved_address *resolved_addr, + gpr_timespec deadline) { grpc_uv_tcp_connect *connect; (void)interested_parties; connect = gpr_malloc(sizeof(grpc_uv_tcp_connect)); @@ -141,4 +141,19 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, uv_tc_on_alarm, connect, gpr_now(GPR_CLOCK_MONOTONIC)); } +// overridden by api_fuzzer.c +void (*grpc_tcp_client_connect_impl)( + grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, + grpc_pollset_set *interested_parties, const grpc_resolved_address *addr, + gpr_timespec deadline) = tcp_client_connect_impl; + +void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, + grpc_endpoint **ep, + grpc_pollset_set *interested_parties, + const grpc_resolved_address *addr, + gpr_timespec deadline) { + grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties, addr, + deadline); +} + #endif /* GRPC_UV */ diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index 270708bd29a..88c4195c2b4 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -135,7 +135,7 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, error = GRPC_ERROR_CREATE("EOF"); } else if (nread > 0) { // Successful read - sub = gpr_slice_sub_no_ref(tcp->read_slice, 0, nread); + sub = gpr_slice_sub_no_ref(tcp->read_slice, 0, (size_t)nread); gpr_slice_buffer_add(tcp->read_slices, sub); error = GRPC_ERROR_NONE; if (grpc_tcp_trace) { @@ -217,10 +217,10 @@ static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, uv_write_t *write_req; if (grpc_tcp_trace) { - size_t i; + size_t j; - for (i = 0; i < write_slices->count; i++) { - char *data = gpr_dump_slice(write_slices->slices[i], + for (j = 0; j < write_slices->count; j++) { + char *data = gpr_dump_slice(write_slices->slices[j], GPR_DUMP_HEX | GPR_DUMP_ASCII); gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data); gpr_free(data); diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 997efe6b842..dd142c5a2ec 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -97,6 +97,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/combiner.c', 'src/core/lib/iomgr/endpoint.c', 'src/core/lib/iomgr/endpoint_pair_posix.c', + 'src/core/lib/iomgr/endpoint_pair_uv.c', 'src/core/lib/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/error.c', 'src/core/lib/iomgr/ev_epoll_linux.c', diff --git a/templates/Makefile.template b/templates/Makefile.template index e6a28d16bce..3b76ded95db 100644 --- a/templates/Makefile.template +++ b/templates/Makefile.template @@ -219,10 +219,6 @@ HOST_LD ?= $(LD) HOST_LDXX ?= $(LDXX) - ifdef EXTRA_DEFINES - DEFINES += $(EXTRA_DEFINES) - endif - CFLAGS += -std=c99 -Wsign-conversion -Wconversion ${' '.join(warning_var('$(W_%s)', warning) for warning in PREFERRED_WARNINGS)} ifeq ($(HAS_CXX11),true) CXXFLAGS += -std=c++11 @@ -324,6 +320,11 @@ LDLIBS += $(addprefix -l, $(LIBS)) LDLIBSXX += $(addprefix -l, $(LIBSXX)) + + % for arg in ['CFLAGS', 'CXXFLAGS', 'CPPFLAGS', 'LDFLAGS', 'DEFINES', 'LDLIBS']: + ${arg} += $(EXTRA_${arg}) + % endfor + HOST_CPPFLAGS = $(CPPFLAGS) HOST_CFLAGS = $(CFLAGS) HOST_CXXFLAGS = $(CXXFLAGS) diff --git a/templates/tools/run_tests/tests.json.template b/templates/tools/run_tests/tests.json.template index 5690874415a..1e21465dd29 100644 --- a/templates/tools/run_tests/tests.json.template +++ b/templates/tools/run_tests/tests.json.template @@ -10,6 +10,7 @@ "ci_platforms": tgt.ci_platforms, "gtest": tgt.gtest, "exclude_configs": tgt.get("exclude_configs", []), + "exclude_iomgrs": tgt.get("exclude_iomgrs", []), "args": [], "flaky": tgt.flaky, "cpu_cost": tgt.get("cpu_cost", 1.0)} diff --git a/test/core/client_config/set_initial_connect_string_test.c b/test/core/client_config/set_initial_connect_string_test.c index dcff859e4bb..d79579aa71e 100644 --- a/test/core/client_config/set_initial_connect_string_test.c +++ b/test/core/client_config/set_initial_connect_string_test.c @@ -30,6 +30,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ +#include "src/core/lib/iomgr/sockaddr.h" + #include #include @@ -40,7 +42,6 @@ #include #include "src/core/ext/client_config/initial_connect_string.h" -#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/security/credentials/fake/fake_credentials.h" #include "src/core/lib/support/string.h" #include "test/core/util/port.h" diff --git a/test/core/end2end/bad_server_response_test.c b/test/core/end2end/bad_server_response_test.c index 5ed0eb64d26..2fe3963b40f 100644 --- a/test/core/end2end/bad_server_response_test.c +++ b/test/core/end2end/bad_server_response_test.c @@ -30,6 +30,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ +#include "src/core/lib/iomgr/sockaddr.h" + #include #include @@ -40,7 +42,6 @@ #include // #include "src/core/ext/transport/chttp2/transport/internal.h" -#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/support/string.h" #include "test/core/end2end/cq_verifier.h" #include "test/core/util/port.h" diff --git a/test/core/end2end/cq_verifier.c b/test/core/end2end/cq_verifier.c index 1f42d3457e8..9e6c0a4f4cc 100644 --- a/test/core/end2end/cq_verifier.c +++ b/test/core/end2end/cq_verifier.c @@ -32,6 +32,7 @@ */ #include "test/core/end2end/cq_verifier.h" +#include "test/core/end2end/cq_verifier_internal.h" #include #include @@ -59,35 +60,15 @@ typedef struct metadata { /* details what we expect to find on a single event - and forms a linked list to detail other expectations */ -typedef struct expectation { +struct expectation { struct expectation *next; const char *file; int line; grpc_completion_type type; void *tag; int success; -} expectation; - -/* the verifier itself */ -struct cq_verifier { - /* bound completion queue */ - grpc_completion_queue *cq; - /* start of expectation list */ - expectation *first_expectation; }; -cq_verifier *cq_verifier_create(grpc_completion_queue *cq) { - cq_verifier *v = gpr_malloc(sizeof(cq_verifier)); - v->cq = cq; - v->first_expectation = NULL; - return v; -} - -void cq_verifier_destroy(cq_verifier *v) { - cq_verify(v); - gpr_free(v); -} - static int has_metadata(const grpc_metadata *md, size_t count, const char *key, const char *value) { size_t i; @@ -197,7 +178,7 @@ static void expectation_to_strvec(gpr_strvec *buf, expectation *e) { static void expectations_to_strvec(gpr_strvec *buf, cq_verifier *v) { expectation *e; - for (e = v->first_expectation; e != NULL; e = e->next) { + for (e = cq_verifier_get_first_expectation(v); e != NULL; e = e->next) { expectation_to_strvec(buf, e); gpr_strvec_add(buf, gpr_strdup("\n")); } @@ -217,19 +198,19 @@ static void fail_no_event_received(cq_verifier *v) { } void cq_verify(cq_verifier *v) { - const gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10); - while (v->first_expectation != NULL) { - grpc_event ev = grpc_completion_queue_next(v->cq, deadline, NULL); + int timeout_seconds = 10; + while (cq_verifier_get_first_expectation(v) != NULL) { + grpc_event ev = cq_verifier_next_event(v, timeout_seconds); if (ev.type == GRPC_QUEUE_TIMEOUT) { fail_no_event_received(v); break; } expectation *e; expectation *prev = NULL; - for (e = v->first_expectation; e != NULL; e = e->next) { + for (e = cq_verifier_get_first_expectation(v); e != NULL; e = e->next) { if (e->tag == ev.tag) { verify_matches(e, &ev); - if (e == v->first_expectation) v->first_expectation = e->next; + if (e == cq_verifier_get_first_expectation(v)) cq_verifier_set_first_expectation(v, e->next); if (prev != NULL) prev->next = e->next; gpr_free(e); break; @@ -253,14 +234,11 @@ void cq_verify(cq_verifier *v) { } void cq_verify_empty_timeout(cq_verifier *v, int timeout_sec) { - gpr_timespec deadline = - gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), - gpr_time_from_seconds(timeout_sec, GPR_TIMESPAN)); grpc_event ev; - GPR_ASSERT(v->first_expectation == NULL && "expectation queue must be empty"); + GPR_ASSERT(cq_verifier_get_first_expectation(v) == NULL && "expectation queue must be empty"); - ev = grpc_completion_queue_next(v->cq, deadline, NULL); + ev = cq_verifier_next_event(v, timeout_sec); if (ev.type != GRPC_QUEUE_TIMEOUT) { char *s = grpc_event_string(&ev); gpr_log(GPR_ERROR, "unexpected event (expected nothing): %s", s); @@ -279,8 +257,8 @@ static void add(cq_verifier *v, const char *file, int line, e->line = line; e->tag = tag; e->success = success; - e->next = v->first_expectation; - v->first_expectation = e; + e->next = cq_verifier_get_first_expectation(v); + cq_verifier_set_first_expectation(v, e); } void cq_expect_completion(cq_verifier *v, const char *file, int line, void *tag, diff --git a/test/core/end2end/cq_verifier_internal.h b/test/core/end2end/cq_verifier_internal.h new file mode 100644 index 00000000000..15496084692 --- /dev/null +++ b/test/core/end2end/cq_verifier_internal.h @@ -0,0 +1,47 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_TEST_CORE_END2END_CQ_VERIFIER_INTERNAL_H +#define GRPC_TEST_CORE_END2END_CQ_VERIFIER_INTERNAL_H + +#include "test/core/end2end/cq_verifier.h" + +typedef struct expectation expectation; + +expectation *cq_verifier_get_first_expectation(cq_verifier *v); + +void cq_verifier_set_first_expectation(cq_verifier *v, expectation *e); + +grpc_event cq_verifier_next_event(cq_verifier *v, int timeout_seconds); + +#endif /* GRPC_TEST_CORE_END2END_CQ_VERIFIER_INTERNAL_H */ diff --git a/test/core/end2end/cq_verifier_native.c b/test/core/end2end/cq_verifier_native.c new file mode 100644 index 00000000000..fa9a87d6e40 --- /dev/null +++ b/test/core/end2end/cq_verifier_native.c @@ -0,0 +1,73 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* This check is for testing only. */ +#ifndef GRPC_UV + +#include "test/core/end2end/cq_verifier_internal.h" + +/* the verifier itself */ +struct cq_verifier { + /* bound completion queue */ + grpc_completion_queue *cq; + /* start of expectation list */ + expectation *first_expectation; + uv_timer_t timer; +}; + +cq_verifier *cq_verifier_create(grpc_completion_queue *cq) { + cq_verifier *v = gpr_malloc(sizeof(cq_verifier)); + v->cq = cq; + cq_verifier_set_first_expectation(v,NULL); + return v; +} + +void cq_verifier_destroy(cq_verifier *v) { + cq_verify(v); + gpr_free(v); +} + +expectation *cq_verifier_get_first_expectation(cq_verifier *v) { + return v->first_expectation; +} + +void cq_verifier_set_first_expectation(cq_verifier *v, expectation *e) { + v->first_expectation = e; +} + +grpc_event cq_verifier_next_event(cq_verifier *v, int timeout_seconds) { + const gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(timeout_seconds); + return grpc_completion_queue_next(v->cq, deadline, NULL); +} + +#endif /* GRPC_UV */ diff --git a/test/core/end2end/cq_verifier_uv.c b/test/core/end2end/cq_verifier_uv.c new file mode 100644 index 00000000000..329dacf97ef --- /dev/null +++ b/test/core/end2end/cq_verifier_uv.c @@ -0,0 +1,108 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include + +#ifdef GRPC_UV + +#include + +#include + +#include "test/core/end2end/cq_verifier_internal.h" + +typedef enum timer_state { + TIMER_STARTED, + TIMER_TRIGGERED, + TIMER_CLOSED +} timer_state; + +/* the verifier itself */ +struct cq_verifier { + /* bound completion queue */ + grpc_completion_queue *cq; + /* start of expectation list */ + expectation *first_expectation; + uv_timer_t timer; +}; + +cq_verifier *cq_verifier_create(grpc_completion_queue *cq) { + cq_verifier *v = gpr_malloc(sizeof(cq_verifier)); + v->cq = cq; + v->first_expectation = NULL; + uv_timer_init(uv_default_loop(), &v->timer); + v->timer.data = (void *)TIMER_STARTED; + return v; +} + +void timer_close_cb(uv_handle_t *handle) { + handle->data = (void *)TIMER_CLOSED; +} + +void cq_verifier_destroy(cq_verifier *v) { + cq_verify(v); + uv_close((uv_handle_t *)&v->timer, timer_close_cb); + while ((timer_state)v->timer.data != TIMER_CLOSED) { + uv_run(uv_default_loop(), UV_RUN_NOWAIT); + } + gpr_free(v); +} + +expectation *cq_verifier_get_first_expectation(cq_verifier *v) { + return v->first_expectation; +} + +void cq_verifier_set_first_expectation(cq_verifier *v, expectation *e) { + v->first_expectation = e; +} + +void timer_run_cb(uv_timer_t *timer) { + timer->data = (void *)TIMER_TRIGGERED; +} + +grpc_event cq_verifier_next_event(cq_verifier *v, int timeout_seconds) { +uint64_t timeout_ms = timeout_seconds < 0 ? 0 : (uint64_t)timeout_seconds * 1000; + grpc_event ev; + v->timer.data = (void *)TIMER_STARTED; + uv_timer_start(&v->timer, timer_run_cb, timeout_ms, 0); + ev = grpc_completion_queue_next(v->cq, gpr_inf_past(GPR_CLOCK_MONOTONIC), NULL); + // Stop the loop if the timer goes off or we get a non-timeout event + while (((timer_state)v->timer.data != TIMER_TRIGGERED) && + ev.type == GRPC_QUEUE_TIMEOUT){ + uv_run(uv_default_loop(), UV_RUN_ONCE); + ev = grpc_completion_queue_next(v->cq, gpr_inf_past(GPR_CLOCK_MONOTONIC), NULL); + } + return ev; +} + +#endif /* GRPC_UV */ diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c index 8abb81c803a..e66c52132be 100644 --- a/test/core/end2end/dualstack_socket_test.c +++ b/test/core/end2end/dualstack_socket_test.c @@ -31,6 +31,11 @@ * */ +#include "src/core/lib/iomgr/port.h" + +// This test won't work except with posix sockets enabled +#ifdef GRPC_POSIX_SOCKET + #include #include @@ -353,3 +358,11 @@ int main(int argc, char **argv) { return 0; } + +#else /* GRPC_POSIX_SOCKET */ + +int main(int argc, char **argv) { + return 1; +} + +#endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/end2end/fixtures/h2_fd.c b/test/core/end2end/fixtures/h2_fd.c index 89fa02517df..85be079062a 100644 --- a/test/core/end2end/fixtures/h2_fd.c +++ b/test/core/end2end/fixtures/h2_fd.c @@ -31,6 +31,11 @@ * */ +#include "src/core/lib/iomgr/port.h" + +// This test won't work except with posix sockets enabled +#ifdef GRPC_POSIX_SOCKET + #include "test/core/end2end/end2end_tests.h" #include @@ -126,3 +131,11 @@ int main(int argc, char **argv) { return 0; } + +#else /* GRPC_POSIX_SOCKET */ + +int main(int argc, char **argv) { + return 1; +} + +#endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/end2end/fixtures/h2_full+pipe.c b/test/core/end2end/fixtures/h2_full+pipe.c index e7dfc561a1d..11619b099e8 100644 --- a/test/core/end2end/fixtures/h2_full+pipe.c +++ b/test/core/end2end/fixtures/h2_full+pipe.c @@ -31,6 +31,11 @@ * */ +#include "src/core/lib/iomgr/port.h" + +// This test requires posix wakeup fds +#ifdef GRPC_POSIX_WAKEUP_FD + #include "test/core/end2end/end2end_tests.h" #include @@ -119,3 +124,11 @@ int main(int argc, char **argv) { return 0; } + +#else /* GRPC_POSIX_WAKEUP_FD */ + +int main(int argc, char **argv) { + return 1; +} + +#endif /* GRPC_POSIX_WAKEUP_FD */ diff --git a/test/core/end2end/fixtures/http_proxy.c b/test/core/end2end/fixtures/http_proxy.c index eeaafe49f22..b8f046c7dfc 100644 --- a/test/core/end2end/fixtures/http_proxy.c +++ b/test/core/end2end/fixtures/http_proxy.c @@ -33,6 +33,8 @@ #include "test/core/end2end/fixtures/http_proxy.h" +#include "src/core/lib/iomgr/sockaddr.h" + #include #include diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index 96ea82d95ea..4e19b760141 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -231,8 +231,8 @@ void my_resolve_address(grpc_exec_ctx *exec_ctx, const char *addr, // defined in tcp_client_posix.c extern void (*grpc_tcp_client_connect_impl)( grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, const struct sockaddr *addr, - size_t addr_len, gpr_timespec deadline); + grpc_pollset_set *interested_parties, const grpc_resolved_address *addr, + gpr_timespec deadline); static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, gpr_timespec deadline); @@ -289,7 +289,7 @@ static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, static void my_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, grpc_pollset_set *interested_parties, - const struct sockaddr *addr, size_t addr_len, + const grpc_resolved_address *addr, gpr_timespec deadline) { sched_connect(exec_ctx, closure, ep, deadline); } diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index 78b37efd372..71fe18453cd 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -39,9 +39,9 @@ import hashlib FixtureOptions = collections.namedtuple( 'FixtureOptions', - 'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing exclude_configs') + 'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing exclude_configs exclude_iomgrs') default_unsecure_fixture_options = FixtureOptions( - True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False, []) + True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False, [], []) socketpair_unsecure_fixture_options = default_unsecure_fixture_options._replace(fullstack=False, dns_resolver=False) default_secure_fixture_options = default_unsecure_fixture_options._replace(secure=True) uds_fixture_options = default_unsecure_fixture_options._replace(dns_resolver=False, platforms=['linux', 'mac', 'posix']) @@ -58,7 +58,7 @@ END2END_FIXTURES = { 'h2_fd': fd_unsecure_fixture_options, 'h2_full': default_unsecure_fixture_options, 'h2_full+pipe': default_unsecure_fixture_options._replace( - platforms=['linux']), + platforms=['linux'], exclude_iomgrs=['uv']), 'h2_full+trace': default_unsecure_fixture_options._replace(tracing=True), 'h2_http_proxy': default_unsecure_fixture_options._replace(ci_mac=False), 'h2_oauth2': default_secure_fixture_options._replace(ci_mac=False), @@ -280,7 +280,7 @@ def main(): ) } print yaml.dump(json) - +p if __name__ == '__main__': main() diff --git a/test/core/iomgr/fd_posix_test.c b/test/core/iomgr/fd_posix_test.c index 62dc24d85a7..bf6d5377a6c 100644 --- a/test/core/iomgr/fd_posix_test.c +++ b/test/core/iomgr/fd_posix_test.c @@ -31,6 +31,11 @@ * */ +#include "src/core/lib/iomgr/port.h" + +// This test won't work except with posix sockets enabled +#ifdef GRPC_POSIX_SOCKET + #include "src/core/lib/iomgr/ev_posix.h" #include @@ -548,3 +553,11 @@ int main(int argc, char **argv) { grpc_iomgr_shutdown(); return 0; } + +#else /* GRPC_POSIX_SOCKET */ + +int main(int argc, char **argv) { + return 1; +} + +#endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c index 297531c44d2..bb789e4c5a5 100644 --- a/test/core/iomgr/socket_utils_test.c +++ b/test/core/iomgr/socket_utils_test.c @@ -31,7 +31,11 @@ * */ -#include +#include "src/core/lib/iomgr/port.h" + +// This test won't work except with posix sockets enabled +#ifdef GRPC_POSIX_SOCKET + #include "src/core/lib/iomgr/socket_utils_posix.h" #include @@ -68,3 +72,11 @@ int main(int argc, char **argv) { return 0; } + +#else /* GRPC_POSIX_SOCKET */ + +int main(int argc, char **argv) { + return 1; +} + +#endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c index 42614567ca9..495e648090b 100644 --- a/test/core/iomgr/tcp_posix_test.c +++ b/test/core/iomgr/tcp_posix_test.c @@ -31,6 +31,11 @@ * */ +#include "src/core/lib/iomgr/port.h" + +// This test won't work except with posix sockets enabled +#ifdef GRPC_POSIX_SOCKET + #include "src/core/lib/iomgr/tcp_posix.h" #include @@ -544,3 +549,11 @@ int main(int argc, char **argv) { return 0; } + +#else /* GRPC_POSIX_SOCKET */ + +int main(int argc, char **argv) { + return 1; +} + +#endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c index b44ab897756..d1c0af55fec 100644 --- a/test/core/iomgr/tcp_server_posix_test.c +++ b/test/core/iomgr/tcp_server_posix_test.c @@ -31,6 +31,11 @@ * */ +#include "src/core/lib/iomgr/port.h" + +// This test won't work except with posix sockets enabled +#ifdef GRPC_POSIX_SOCKET + #include "src/core/lib/iomgr/tcp_server.h" #include @@ -360,3 +365,11 @@ int main(int argc, char **argv) { gpr_free(g_pollset); return 0; } + +#else /* GRPC_POSIX_SOCKET */ + +int main(int argc, char **argv) { + return 1; +} + +#endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/iomgr/timer_heap_test.c b/test/core/iomgr/timer_heap_test.c index d1cb0047f26..a68988df77b 100644 --- a/test/core/iomgr/timer_heap_test.c +++ b/test/core/iomgr/timer_heap_test.c @@ -31,6 +31,11 @@ * */ +#include "src/core/lib/iomgr/port.h" + +// This test only works with the generic timer implementation +#ifdef GRPC_TIMER_USE_GENERIC + #include "src/core/lib/iomgr/timer_heap.h" #include @@ -315,3 +320,11 @@ int main(int argc, char **argv) { return 0; } + +#else /* GRPC_TIMER_USE_GENERIC */ + +int main(int argc, char **argv) { + return 1; +} + +#endif /* GRPC_TIMER_USE_GENERIC */ diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c index a5c8c496502..d4a11c1e93d 100644 --- a/test/core/util/port_server_client.c +++ b/test/core/util/port_server_client.c @@ -80,7 +80,7 @@ void grpc_free_port_using_server(char *server, int port) { grpc_httpcli_response rsp; freereq pr; char *path; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_RUN_INNER_LOOP; grpc_closure *shutdown_closure; grpc_init(); diff --git a/test/core/util/port_uv.c b/test/core/util/port_uv.c new file mode 100644 index 00000000000..e6d37caf982 --- /dev/null +++ b/test/core/util/port_uv.c @@ -0,0 +1,58 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" +#include "test/core/util/test_config.h" +#if defined(GRPC_UV) && defined(GRPC_TEST_PICK_PORT) + +#include + +#include "test/core/util/port.h" + +int grpc_pick_unused_port(void) { + // Temporary implementation + return 4242; +} + +int grpc_pick_unused_port_or_die(void) { + int port = grpc_pick_unused_port(); + GPR_ASSERT(port > 0); + return port; +} + +void grpc_recycle_unused_port(int port) { + // Temporary implementation + (void)port; +} + +#endif /* GRPC_UV && GRPC_TEST_PICK_PORT */ diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 645985d8e1a..6ef586f5a53 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -1011,6 +1011,7 @@ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ +src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index f63ff9eb3b0..19d01cd3259 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -976,6 +976,7 @@ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ +src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 19931246ccf..87325d244d3 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -83,7 +83,7 @@ _DEFAULT_TIMEOUT_SECONDS = 5 * 60 # SimpleConfig: just compile with CONFIG=config, and run the binary to test class Config(object): - def __init__(self, config, environ=None, timeout_multiplier=1, tool_prefix=[]): + def __init__(self, config, environ=None, timeout_multiplier=1, tool_prefix=[], iomgr_platform='native'): if environ is None: environ = {} self.build_config = config @@ -91,6 +91,7 @@ class Config(object): self.environ['CONFIG'] = config self.tool_prefix = tool_prefix self.timeout_multiplier = timeout_multiplier + self.iomgr_platform = iomgr_platform def job_spec(self, cmdline, timeout_seconds=_DEFAULT_TIMEOUT_SECONDS, shortname=None, environ={}, cpu_cost=1.0, flaky=False): @@ -202,6 +203,18 @@ class CLanguage(object): else: self._docker_distro, self._make_options = self._compiler_options(self.args.use_docker, self.args.compiler) + if args.iomgr_platform == "uv": + cflags = '-DGRPC_UV ' + try: + cflags += subprocess.check_output(['pkg-config', '--cflags', 'libuv']).strip() + ' ' + except subprocess.CalledProcessError: + pass + try: + ldflags = subprocess.check_output(['pkg-config', '--libs', 'libuv']).strip() + ' ' + except subprocess.CalledProcessError: + ldflags = '-luv ' + self._make_options += ['EXTRA_CPPFLAGS={}'.format(cflags), + 'EXTRA_LDLIBS={}'.format(ldflags)] def test_specs(self): out = [] @@ -218,6 +231,8 @@ class CLanguage(object): shortname_ext = '' if polling_strategy=='all' else ' GRPC_POLL_STRATEGY=%s' % polling_strategy if self.config.build_config in target['exclude_configs']: continue + if self.args.iomgr_platform in target.get('exclude_iomgrs', []): + continue if self.platform == 'windows': binary = 'vsprojects/%s%s/%s.exe' % ( 'x64/' if self.args.arch == 'x64' else '', @@ -1003,6 +1018,10 @@ argp.add_argument('--compiler', 'coreclr'], default='default', help='Selects compiler to use. Allowed values depend on the platform and language.') +argp.add_argument('--iomgr_platform', + choices=['native', 'uv'], + default='native', + help='Selects iomgr platform to build on') argp.add_argument('--build_only', default=False, action='store_const', diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index c2689719373..8fe94409921 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6111,6 +6111,7 @@ "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/endpoint_pair_posix.c", + "src/core/lib/iomgr/endpoint_pair_uv.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/error.h", @@ -6549,6 +6550,7 @@ ], "headers": [ "test/core/end2end/cq_verifier.h", + "test/core/end2end/cq_verifier_internal.h", "test/core/end2end/fixtures/http_proxy.h", "test/core/end2end/fixtures/proxy.h", "test/core/iomgr/endpoint_tests.h", @@ -6566,6 +6568,9 @@ "src": [ "test/core/end2end/cq_verifier.c", "test/core/end2end/cq_verifier.h", + "test/core/end2end/cq_verifier_internal.h", + "test/core/end2end/cq_verifier_native.c", + "test/core/end2end/cq_verifier_uv.c", "test/core/end2end/fixtures/http_proxy.c", "test/core/end2end/fixtures/http_proxy.h", "test/core/end2end/fixtures/proxy.c", @@ -6586,6 +6591,7 @@ "test/core/util/port_posix.c", "test/core/util/port_server_client.c", "test/core/util/port_server_client.h", + "test/core/util/port_uv.c", "test/core/util/port_windows.c", "test/core/util/slice_splitter.c", "test/core/util/slice_splitter.h" diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 6500c4aac31..3d80d013ca3 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -11,6 +11,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -32,6 +33,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -53,6 +55,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -74,6 +77,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -95,6 +99,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -116,6 +121,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -137,6 +143,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -158,6 +165,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -179,6 +187,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -200,6 +209,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -221,6 +231,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -242,6 +253,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -263,6 +275,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -284,6 +297,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -305,6 +319,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -326,6 +341,7 @@ ], "cpu_cost": 30, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -347,6 +363,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -368,6 +385,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -389,6 +407,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -410,6 +429,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -430,6 +450,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -450,6 +473,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -468,6 +492,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -485,6 +510,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -504,6 +530,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -523,6 +550,7 @@ ], "cpu_cost": 1.5, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -542,6 +570,7 @@ ], "cpu_cost": 1.5, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -561,6 +590,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -581,6 +611,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -602,6 +633,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -623,6 +655,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -644,6 +677,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -665,6 +699,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -686,6 +721,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -707,6 +743,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -728,6 +765,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -749,6 +787,7 @@ ], "cpu_cost": 30, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -770,6 +809,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -791,6 +831,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -812,6 +853,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -833,6 +875,7 @@ ], "cpu_cost": 7, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -854,6 +897,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -875,6 +919,7 @@ ], "cpu_cost": 10, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -896,6 +941,7 @@ ], "cpu_cost": 10, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -917,6 +963,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -938,6 +985,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -959,6 +1007,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -980,6 +1029,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1001,6 +1051,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1022,6 +1073,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1043,6 +1095,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1064,6 +1117,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1085,6 +1139,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1106,6 +1161,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1127,6 +1183,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1147,6 +1204,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1167,6 +1225,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1188,6 +1247,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1209,6 +1269,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1230,6 +1291,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1251,6 +1313,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1272,6 +1335,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1292,6 +1356,7 @@ ], "cpu_cost": 0.5, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1309,6 +1374,7 @@ ], "cpu_cost": 0.5, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1327,6 +1393,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1348,6 +1415,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1369,6 +1437,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1390,6 +1459,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1411,6 +1481,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1432,6 +1503,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1453,6 +1525,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": true, "gtest": false, "language": "c", @@ -1474,6 +1547,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1495,6 +1569,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1516,6 +1591,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": true, "gtest": false, "language": "c", @@ -1537,6 +1613,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1558,6 +1635,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1579,6 +1657,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1600,6 +1679,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1621,6 +1701,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1642,6 +1723,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1663,6 +1745,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1684,6 +1767,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1705,6 +1789,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1726,6 +1811,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1747,6 +1833,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1768,6 +1855,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1788,6 +1876,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1807,6 +1896,9 @@ ], "cpu_cost": 0.5, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1826,6 +1918,9 @@ ], "cpu_cost": 0.2, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1845,6 +1940,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1865,6 +1963,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1886,6 +1985,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1907,6 +2007,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1928,6 +2031,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1949,6 +2055,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1970,6 +2077,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1990,6 +2098,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2009,6 +2118,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2029,6 +2139,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2050,6 +2161,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2071,6 +2183,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2092,6 +2205,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2113,6 +2227,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2134,6 +2249,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2154,6 +2270,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2174,6 +2291,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2195,6 +2313,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2216,6 +2335,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2237,6 +2357,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2258,6 +2379,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2279,6 +2401,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2300,6 +2423,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2321,6 +2445,7 @@ ], "cpu_cost": 0.5, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2342,6 +2467,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2363,6 +2489,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2384,6 +2511,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2405,6 +2533,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2426,6 +2555,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2447,6 +2577,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c++", @@ -2468,6 +2599,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2488,6 +2620,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c++", @@ -2508,6 +2641,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2529,6 +2663,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2549,6 +2684,7 @@ ], "cpu_cost": 0.5, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c++", @@ -2569,6 +2705,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2589,6 +2726,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c++", @@ -2609,6 +2747,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2629,6 +2768,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2649,6 +2789,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2670,6 +2811,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c++", @@ -2690,6 +2832,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2710,6 +2853,7 @@ ], "cpu_cost": 100, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", @@ -2731,6 +2875,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c89", @@ -2752,6 +2897,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2773,6 +2919,7 @@ ], "cpu_cost": 0.2, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2794,6 +2941,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2815,6 +2963,7 @@ ], "cpu_cost": 0.2, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2836,6 +2985,7 @@ ], "cpu_cost": 0.2, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2857,6 +3007,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2878,6 +3029,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2899,6 +3051,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2920,6 +3073,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2941,6 +3095,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -2961,6 +3116,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index 9a70cd4bb27..b62d50e6e08 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -565,6 +565,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index 0d2f0cc600f..85520c090f3 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -157,6 +157,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index 3f9eb3530e9..fca3bbf5a3d 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -551,6 +551,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index dbcfba91b99..587eb38ee9e 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -142,6 +142,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 927e2028b6f..8b62411204f 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -507,6 +507,8 @@ + + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 1c05f6b3f11..e2b52e1ae16 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -61,6 +61,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index d58264654d9..8397b3b16f5 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -176,6 +176,7 @@ + @@ -290,6 +291,10 @@ + + + + @@ -310,6 +315,8 @@ + + @@ -352,6 +359,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index baa37f91b9a..8eb177911e5 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -19,6 +19,12 @@ test\core\end2end + + test\core\end2end + + + test\core\end2end + test\core\end2end\fixtures @@ -49,6 +55,9 @@ test\core\util + + test\core\util + test\core\util @@ -112,6 +121,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -446,6 +458,9 @@ test\core\end2end + + test\core\end2end + test\core\end2end\fixtures diff --git a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj index 04d1e584b5c..d38045db918 100644 --- a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj @@ -148,6 +148,7 @@ + @@ -163,6 +164,10 @@ + + + + @@ -183,6 +188,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters index 0f7072aa61d..00615fbf9e8 100644 --- a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters @@ -4,6 +4,12 @@ test\core\end2end + + test\core\end2end + + + test\core\end2end + test\core\end2end\fixtures @@ -34,6 +40,9 @@ test\core\util + + test\core\util + test\core\util @@ -45,6 +54,9 @@ test\core\end2end + + test\core\end2end + test\core\end2end\fixtures diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 5d8b99013f7..d3b3f1895d8 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -475,6 +475,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index dfe01382c0e..422833190c5 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -64,6 +64,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr From 7e405b19328dd4ebe9bc8ddf91ef0d1dc3dd5632 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 3 Oct 2016 09:31:52 -0700 Subject: [PATCH 102/286] Remove nanopb submodule --- .gitmodules | 3 --- third_party/nanopb | 1 - 2 files changed, 4 deletions(-) delete mode 160000 third_party/nanopb diff --git a/.gitmodules b/.gitmodules index fb79d5cbd5b..3665cde63f4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -14,9 +14,6 @@ [submodule "third_party/boringssl"] path = third_party/boringssl url = https://github.com/google/boringssl.git -[submodule "third_party/nanopb"] - path = third_party/nanopb - url = https://github.com/nanopb/nanopb.git [submodule "third_party/thrift"] path = third_party/thrift url = https://github.com/apache/thrift.git diff --git a/third_party/nanopb b/third_party/nanopb deleted file mode 160000 index f8ac4637662..00000000000 --- a/third_party/nanopb +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f8ac463766281625ad710900479130c7fcb4d63b From d69c0d34da555e8a953bbf949b324e4ada633899 Mon Sep 17 00:00:00 2001 From: Alexander Polcyn Date: Mon, 3 Oct 2016 10:33:02 -0700 Subject: [PATCH 103/286] convert snake case protos package names to camel case in ruby modules --- src/compiler/ruby_generator.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index 1501c3f3e01..6e5419cb47b 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -115,6 +115,16 @@ void PrintService(const ServiceDescriptor *service, const grpc::string &package, } // namespace +grpc::string SnakeCaseToCamelCase(grpc::string input) { + grpc::string output; + std::vector words = Split(input, '_'); + for(size_t i = 0; i < words.size(); i++) { + output.append(CapitalizeFirst(words[i])); + } + return output; +} + + grpc::string GetServices(const FileDescriptor *file) { grpc::string output; { @@ -156,7 +166,7 @@ grpc::string GetServices(const FileDescriptor *file) { std::vector modules = Split(file->package(), '.'); for (size_t i = 0; i < modules.size(); ++i) { std::map module_vars = - ListToDict({"module.name", CapitalizeFirst(modules[i]), }); + ListToDict({"module.name", SnakeCaseToCamelCase(modules[i]), }); out.Print(module_vars, "module $module.name$\n"); out.Indent(); } From c429d7830f2a5a32c9543ee3c362f4061c9f0129 Mon Sep 17 00:00:00 2001 From: Alexander Polcyn Date: Mon, 3 Oct 2016 11:23:20 -0700 Subject: [PATCH 104/286] change ruby proto plugin to copy package name conversion from protoc --- src/compiler/ruby_generator.cc | 36 +++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index 6e5419cb47b..3a7b89bf69e 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -124,6 +124,40 @@ grpc::string SnakeCaseToCamelCase(grpc::string input) { return output; } +// The following functions are copied directly from the source for the protoc ruby generator +// to ensure compatibility ('int i' changed to 'uint i' is the only change). +// See https://github.com/google/protobuf/blob/master/src/google/protobuf/compiler/ruby/ruby_generator.cc#L250 +// TODO: keep up to date with protoc code generation, though this behavior isn't expected to change +bool IsLower(char ch) { return ch >= 'a' && ch <= 'z'; } + +char ToUpper(char ch) { return IsLower(ch) ? (ch - 'a' + 'A') : ch; } + + +// Package names in protobuf are snake_case by convention, but Ruby module +// names must be PascalCased. +// +// foo_bar_baz -> FooBarBaz +std::string PackageToModule(const std::string& name) { + bool next_upper = true; + std::string result; + result.reserve(name.size()); + + for (uint i = 0; i < name.size(); i++) { + if (name[i] == '_') { + next_upper = true; + } else { + if (next_upper) { + result.push_back(ToUpper(name[i])); + } else { + result.push_back(name[i]); + } + next_upper = false; + } + } + + return result; +} +// end copying of protoc generator for ruby code grpc::string GetServices(const FileDescriptor *file) { grpc::string output; @@ -166,7 +200,7 @@ grpc::string GetServices(const FileDescriptor *file) { std::vector modules = Split(file->package(), '.'); for (size_t i = 0; i < modules.size(); ++i) { std::map module_vars = - ListToDict({"module.name", SnakeCaseToCamelCase(modules[i]), }); + ListToDict({"module.name", PackageToModule(modules[i]), }); out.Print(module_vars, "module $module.name$\n"); out.Indent(); } From acd64db4d97ce7db3aba34105da756576b2d6a7d Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 3 Oct 2016 14:29:47 -0700 Subject: [PATCH 105/286] Minor changes --- src/cpp/rpcmanager/grpc_rpc_manager.cc | 2 -- src/cpp/rpcmanager/grpc_rpc_manager.h | 1 + test/cpp/rpcmanager/grpc_rpc_manager_test.cc | 26 ++++++++++++++------ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index 2299dbdcd38..2d791bb159b 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -120,7 +120,6 @@ void GrpcRpcManager::Initialize() { // below the maximum threshold, we can let the current thread continue as poller bool GrpcRpcManager::MaybeContinueAsPoller() { std::unique_lock lock(mu_); - if (shutdown_ || num_pollers_ > max_pollers_) { return false; } @@ -170,7 +169,6 @@ void GrpcRpcManager::MainWorkLoop() { } } - // TODO (sreek) See if we need to check for shutdown here and quit // Note that MaybeCreatePoller does check for shutdown and creates a new // thread only if GrpcRpcManager is not shutdown if (work_status == WORK_FOUND) { diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.h b/src/cpp/rpcmanager/grpc_rpc_manager.h index d00771b9a10..3a94fb791c5 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.h +++ b/src/cpp/rpcmanager/grpc_rpc_manager.h @@ -50,6 +50,7 @@ class GrpcRpcManager { // This function MUST be called before using the object void Initialize(); + // The return type of PollForWork() function enum WorkStatus { WORK_FOUND, SHUTDOWN, TIMEOUT }; // "Polls" for new work. diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc index ce43b278560..85ced00d46d 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc @@ -37,32 +37,40 @@ #include #include +#include #include "test/cpp/rpcmanager/grpc_rpc_manager_test.h" #include "test/cpp/util/test_config.h" using grpc::testing::GrpcRpcManagerTest; -// TODO: sreek - Rewrite this test. Find a better test case +static const int kMinPollers = 2; +static const int kMaxPollers = 10; + +static const int kPollingTimeoutMsec = 10; +static const int kDoWorkDurationMsec = 1; + +static const int kNumDoWorkIterations = 10; grpc::GrpcRpcManager::WorkStatus GrpcRpcManagerTest::PollForWork(void **tag, bool *ok) { { std::unique_lock lock(mu_); - std::cout << "Poll: " << std::this_thread::get_id() << std::endl; + gpr_log(GPR_INFO, "PollForWork: Entered"); } WorkStatus work_status = WORK_FOUND; *tag = nullptr; *ok = true; - std::this_thread::sleep_for(std::chrono::milliseconds(10)); + // Simulate "polling for work" by sleeping for sometime + std::this_thread::sleep_for(std::chrono::milliseconds(kPollingTimeoutMsec)); { std::unique_lock lock(mu_); num_calls_++; - if (num_calls_ > 50) { - std::cout << "poll: False" << std::endl; + if (num_calls_ > kNumDoWorkIterations) { + gpr_log(GPR_DEBUG, "PollForWork: Returning shutdown"); work_status = SHUTDOWN; ShutdownRpcManager(); } @@ -74,14 +82,16 @@ grpc::GrpcRpcManager::WorkStatus GrpcRpcManagerTest::PollForWork(void **tag, void GrpcRpcManagerTest::DoWork(void *tag, bool ok) { { std::unique_lock lock(mu_); - std::cout << "Work: " << std::this_thread::get_id() << std::endl; + gpr_log(GPR_DEBUG, "DoWork()"); } - std::this_thread::sleep_for(std::chrono::milliseconds(1)); + + // Simulate "doing work" by sleeping + std::this_thread::sleep_for(std::chrono::milliseconds(kDoWorkDurationMsec)); } int main(int argc, char **argv) { grpc::testing::InitTest(&argc, &argv, true); - GrpcRpcManagerTest test_rpc_manager(3, 15); + GrpcRpcManagerTest test_rpc_manager(kMinPollers, kMaxPollers); test_rpc_manager.Initialize(); test_rpc_manager.Wait(); From b6b6c1f4ef02998e914dc74b8c24fae21f09e024 Mon Sep 17 00:00:00 2001 From: Masood Malekghassemi Date: Mon, 3 Oct 2016 13:22:26 -0700 Subject: [PATCH 106/286] Fix dangling reference in docstring --- src/proto/grpc/reflection/v1alpha/reflection.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/proto/grpc/reflection/v1alpha/reflection.proto b/src/proto/grpc/reflection/v1alpha/reflection.proto index 276ff0e255d..01e582cc8a6 100644 --- a/src/proto/grpc/reflection/v1alpha/reflection.proto +++ b/src/proto/grpc/reflection/v1alpha/reflection.proto @@ -59,8 +59,8 @@ message ServerReflectionRequest { // message type with the given field number. ExtensionRequest file_containing_extension = 5; - // Finds the tag numbers used by all known extensions of extendee_type, and - // appends them to ExtensionNumberResponse in an undefined order. + // Finds the tag numbers used by all known extensions of the given message + // type, and appends them to ExtensionNumberResponse in an undefined order. // Its corresponding method is best-effort: it's not guaranteed that the // reflection service will implement this method, and it's not guaranteed // that this method will provide all extensions. Returns From 33382d0f537c5c793b46742089ebeb42d764ac45 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 3 Oct 2016 15:08:48 -0700 Subject: [PATCH 107/286] Cleanup server_cc.cc --- .../grpc++/impl/codegen/server_interface.h | 6 - include/grpc++/server.h | 6 - src/cpp/rpcmanager/grpc_rpc_manager.h | 2 +- src/cpp/server/server_cc.cc | 212 +----------------- 4 files changed, 12 insertions(+), 214 deletions(-) diff --git a/include/grpc++/impl/codegen/server_interface.h b/include/grpc++/impl/codegen/server_interface.h index 4a00d7a3a13..5c41ca51b45 100644 --- a/include/grpc++/impl/codegen/server_interface.h +++ b/include/grpc++/impl/codegen/server_interface.h @@ -126,12 +126,6 @@ class ServerInterface : public CallHook { /// \return true on a successful shutdown. virtual bool Start(ServerCompletionQueue** cqs, size_t num_cqs) = 0; - /// Process one or more incoming calls. - virtual void RunRpc() = 0; - - /// Schedule \a RunRpc to run in the threadpool. - virtual void ScheduleCallback() = 0; - virtual void ShutdownInternal(gpr_timespec deadline) = 0; virtual int max_receive_message_size() const = 0; diff --git a/include/grpc++/server.h b/include/grpc++/server.h index bae83eee3f5..7753013c394 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -176,12 +176,6 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { /// \return true on a successful shutdown. bool Start(ServerCompletionQueue** cqs, size_t num_cqs) GRPC_OVERRIDE; - /// Process one or more incoming calls. - void RunRpc() GRPC_OVERRIDE; - - /// Schedule \a RunRpc to run in the threadpool. - void ScheduleCallback() GRPC_OVERRIDE; - void PerformOpsOnCall(CallOpSetInterface* ops, Call* call) GRPC_OVERRIDE; void ShutdownInternal(gpr_timespec deadline) GRPC_OVERRIDE; diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.h b/src/cpp/rpcmanager/grpc_rpc_manager.h index 3a94fb791c5..77715c52fde 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.h +++ b/src/cpp/rpcmanager/grpc_rpc_manager.h @@ -47,7 +47,7 @@ class GrpcRpcManager { explicit GrpcRpcManager(int min_pollers, int max_pollers); virtual ~GrpcRpcManager(); - // This function MUST be called before using the object + // Initializes and Starts the Rpc Manager threads void Initialize(); // The return type of PollForWork() function diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 36bc61fdf1b..761f76fa12a 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -118,15 +118,6 @@ class Server::UnimplementedAsyncResponse GRPC_FINAL UnimplementedAsyncRequest* const request_; }; -// TODO (sreek) - This might no longer be needed -class Server::ShutdownRequest GRPC_FINAL : public CompletionQueueTag { - public: - bool FinalizeResult(void** tag, bool* status) { - delete this; - return false; - } -}; - class ShutdownTag : public CompletionQueueTag { public: bool FinalizeResult(void** tag, bool* status) { return false; } @@ -153,40 +144,6 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { grpc_metadata_array_destroy(&request_metadata_); } - // TODO (Sreek) This function is probably no longer needed - static SyncRequest* Wait(CompletionQueue* cq, bool* ok) { - void* tag = nullptr; - *ok = false; - if (!cq->Next(&tag, ok)) { - return nullptr; - } - auto* mrd = static_cast(tag); - GPR_ASSERT(mrd->in_flight_); - return mrd; - } - - // TODO (sreek) - This function is probably no longer needed - static bool AsyncWait(CompletionQueue* cq, SyncRequest** req, bool* ok, - gpr_timespec deadline) { - void* tag = nullptr; - *ok = false; - switch (cq->AsyncNext(&tag, ok, deadline)) { - case CompletionQueue::TIMEOUT: - *req = nullptr; - return true; - case CompletionQueue::SHUTDOWN: - *req = nullptr; - return false; - case CompletionQueue::GOT_EVENT: - *req = static_cast(tag); - GPR_ASSERT((*req)->in_flight_); - return true; - } - GPR_UNREACHABLE_CODE(return false); - } - - // TODO (sreek) - Refactor this SetupRequest/TeardownRequest and ResetRequest - // functions void SetupRequest() { cq_ = grpc_completion_queue_create(nullptr); } void TeardownRequest() { @@ -194,8 +151,6 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { cq_ = nullptr; } - void ResetRequest() { in_flight_ = false; } - void Request(grpc_server* server, grpc_completion_queue* notify_cq) { GPR_ASSERT(cq_ && !in_flight_); in_flight_ = true; @@ -319,32 +274,29 @@ class Server::SyncRequestManager : public GrpcRpcManager { SyncRequest* sync_req = static_cast(tag); if (!sync_req) { - // No tag. Nothing to work on - // TODO (sreek) - Log a warning here since this is an unlikely case + // No tag. Nothing to work on. This is an unlikley scenario and possibly a + // bug in RPC Manager implementation. + gpr_log(GPR_ERROR, "Sync server. DoWork() was called with NULL tag"); return; } if (ok) { + // Calldata takes ownership of the completion queue inside sync_req SyncRequest::CallData cd(server_, sync_req); { - sync_req->SetupRequest(); + // Prepare for the next request if (!IsShutdown()) { + sync_req->SetupRequest(); // Create new completion queue for sync_req sync_req->Request(server_->c_server(), server_cq_->cq()); - } else { - sync_req->TeardownRequest(); } } + GPR_TIMER_SCOPE("cd.Run()", 0); cd.Run(global_callbacks_); - } else { - sync_req->ResetRequest(); - // ok is false. For some reason, the tag was returned but event was not - // successful. In this case, request again unless we are shutting down - if (!IsShutdown()) { - // TODO (sreek) Remove this - // sync_req->Request(server_->c_server(), server_cq_->cq()); - } } + // TODO (sreek) If ok is false here (which it isn't in case of + // grpc_request_registered_call), we should still re-queue the request + // object } void AddSyncMethod(RpcServiceMethod* method, void* tag) { @@ -428,8 +380,6 @@ Server::Server( Server::~Server() { { - // TODO (sreek) Check if we can just call Shutdown() even in case where - // started_ == false. This will make things much simpler grpc::unique_lock lock(mu_); if (started_ && !shutdown_) { lock.unlock(); @@ -442,12 +392,6 @@ Server::~Server() { } } - // TODO(sreek) Do thisfor all cqs ? - /* - void* got_tag; - bool ok; - GPR_ASSERT(!cq_.Next(&got_tag, &ok)); - */ grpc_server_destroy(server_); } @@ -551,19 +495,6 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { (*it)->Start(); } - /* TODO (Sreek) - No longer needed (being done in (*it)->Start above) */ - /* - // Start processing rpcs. - if (!sync_methods_->empty()) { - for (auto m = sync_methods_->begin(); m != sync_methods_->end(); m++) { - m->SetupRequest(); - m->Request(server_, cq_.cq()); - } - - GrpcRpcManager::Initialize(); - } - */ - return true; } @@ -608,48 +539,8 @@ void Server::ShutdownInternal(gpr_timespec deadline) { // Drain the shutdown queue (if the previous call to AsyncNext() timed out // and we didn't remove the tag from the queue yet) while (shutdown_cq.Next(&tag, &ok)) { - // Nothing to be done here - } - - /* - grpc_server_shutdown_and_notify(server_, cq_.cq(), new ShutdownRequest()); - cq_.Shutdown(); - lock.unlock(); - */ - - // TODO (sreek) Delete this - /* - GrpcRpcManager::ShutdownRpcManager(); - GrpcRpcManager::Wait(); - */ - - // Spin, eating requests until the completion queue is completely shutdown. - // If the deadline expires then cancel anything that's pending and keep - // spinning forever until the work is actually drained. - // Since nothing else needs to touch state guarded by mu_, holding it - // through this loop is fine. - // - /* - SyncRequest* request; - bool ok; - while (SyncRequest::AsyncWait(&cq_, &request, &ok, deadline)) { - if (request == NULL) { // deadline expired - grpc_server_cancel_all_calls(server_); - deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); - } else if (ok) { - SyncRequest::CallData call_data(this, request); - } + // Nothing to be done here. Just ignore ok and tag values } - lock.lock(); - */ - - /* TODO (sreek) - Remove this block */ - // Wait for running callbacks to finish. - /* - while (num_running_cb_ != 0) { - callback_cv_.wait(lock); - } - */ shutdown_notified_ = true; shutdown_cv_.notify_all(); @@ -774,87 +665,6 @@ Server::UnimplementedAsyncResponse::UnimplementedAsyncResponse( request_->stream()->call_.PerformOps(this); } -// TODO: sreek - Remove this function -void Server::ScheduleCallback() { - GPR_ASSERT(false); - /* - { - grpc::unique_lock lock(mu_); - num_running_cb_++; - } - thread_pool_->Add(std::bind(&Server::RunRpc, this)); - */ -} - -// TODO: sreek - Remove this function -void Server::RunRpc() { - GPR_ASSERT(false); - /* - // Wait for one more incoming rpc. - bool ok; - GPR_TIMER_SCOPE("Server::RunRpc", 0); - auto* mrd = SyncRequest::Wait(&cq_, &ok); - if (mrd) { - ScheduleCallback(); - if (ok) { - SyncRequest::CallData cd(this, mrd); - { - mrd->SetupRequest(); - grpc::unique_lock lock(mu_); - if (!shutdown_) { - mrd->Request(server_, cq_.cq()); - } else { - // destroy the structure that was created - mrd->TeardownRequest(); - } - } - GPR_TIMER_SCOPE("cd.Run()", 0); - cd.Run(global_callbacks_); - } - } - - { - grpc::unique_lock lock(mu_); - num_running_cb_--; - if (shutdown_) { - callback_cv_.notify_all(); - } - } - */ -} - -/* TODO (sreek) Move this to SyncRequestManager */ -/* -void Server::PollForWork(bool& is_work_found, void** tag) { - is_work_found = true; - *tag = nullptr; - auto* mrd = SyncRequest::Wait(&cq_, &is_work_found); - if (is_work_found) { - *tag = mrd; - } -} - - -void Server::DoWork(void* tag) { - auto* mrd = static_cast(tag); - if (mrd) { - SyncRequest::CallData cd(this, mrd); - { - mrd->SetupRequest(); - grpc::unique_lock lock(mu_); - if (!shutdown_) { - mrd->Request(server_, cq_.cq()); - } else { - // destroy the structure that was created - mrd->TeardownRequest(); - } - } - GPR_TIMER_SCOPE("cd.Run()", 0); - cd.Run(global_callbacks_); - } -} -*/ - ServerInitializer* Server::initializer() { return server_initializer_.get(); } } // namespace grpc From 5ba82e5d9205d024c249e41581e3c7fc61c5ae32 Mon Sep 17 00:00:00 2001 From: Alexander Polcyn Date: Mon, 3 Oct 2016 16:31:14 -0700 Subject: [PATCH 108/286] remove unused function and switch std::string to grpc::string --- src/compiler/ruby_generator.cc | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index 3a7b89bf69e..ee2502e150a 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -115,17 +115,8 @@ void PrintService(const ServiceDescriptor *service, const grpc::string &package, } // namespace -grpc::string SnakeCaseToCamelCase(grpc::string input) { - grpc::string output; - std::vector words = Split(input, '_'); - for(size_t i = 0; i < words.size(); i++) { - output.append(CapitalizeFirst(words[i])); - } - return output; -} - // The following functions are copied directly from the source for the protoc ruby generator -// to ensure compatibility ('int i' changed to 'uint i' is the only change). +// to ensure compatibility (with the exception of int and string type changes). // See https://github.com/google/protobuf/blob/master/src/google/protobuf/compiler/ruby/ruby_generator.cc#L250 // TODO: keep up to date with protoc code generation, though this behavior isn't expected to change bool IsLower(char ch) { return ch >= 'a' && ch <= 'z'; } @@ -137,9 +128,9 @@ char ToUpper(char ch) { return IsLower(ch) ? (ch - 'a' + 'A') : ch; } // names must be PascalCased. // // foo_bar_baz -> FooBarBaz -std::string PackageToModule(const std::string& name) { +grpc::string PackageToModule(const grpc::string& name) { bool next_upper = true; - std::string result; + grpc::string result; result.reserve(name.size()); for (uint i = 0; i < name.size(); i++) { From 2c287ca750c114c7230e57a1231d7e22863ab53d Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 7 Oct 2016 09:55:35 -0700 Subject: [PATCH 109/286] UV tests pass on linux --- Makefile | 4 - build.yaml | 31 +- src/core/lib/iomgr/endpoint_pair_uv.c | 4 +- src/core/lib/iomgr/pollset_uv.c | 77 +- src/core/lib/iomgr/pollset_uv.h | 2 + src/core/lib/iomgr/resolve_address_uv.c | 2 + src/core/lib/iomgr/tcp_client_uv.c | 4 - src/core/lib/iomgr/tcp_server_uv.c | 47 +- src/core/lib/iomgr/tcp_uv.c | 12 +- src/core/lib/iomgr/timer_uv.c | 4 - src/node/ext/node_grpc.cc | 7 + test/core/bad_client/gen_build_yaml.py | 1 + test/core/end2end/cq_verifier.c | 46 +- test/core/end2end/cq_verifier_uv.c | 7 +- test/core/end2end/gen_build_yaml.py | 38 +- test/core/util/port_server_client.c | 2 +- test/core/util/port_uv.c | 69 +- tools/buildgen/plugins/make_fuzzer_tests.py | 1 + tools/run_tests/run_tests.py | 2 + tools/run_tests/sources_and_headers.json | 4 - tools/run_tests/tests.json | 13719 +++++++++++++++- .../grpc_test_util/grpc_test_util.vcxproj | 5 - .../grpc_test_util.vcxproj.filters | 9 - .../grpc_test_util_unsecure.vcxproj | 5 - .../grpc_test_util_unsecure.vcxproj.filters | 9 - 25 files changed, 13641 insertions(+), 470 deletions(-) diff --git a/Makefile b/Makefile index 18dc6151cb8..ea5d346c92c 100644 --- a/Makefile +++ b/Makefile @@ -3084,8 +3084,6 @@ LIBGRPC_TEST_UTIL_SRC = \ test/core/end2end/data/test_root_cert.c \ test/core/security/oauth2_utils.c \ test/core/end2end/cq_verifier.c \ - test/core/end2end/cq_verifier_native.c \ - test/core/end2end/cq_verifier_uv.c \ test/core/end2end/fixtures/http_proxy.c \ test/core/end2end/fixtures/proxy.c \ test/core/iomgr/endpoint_tests.c \ @@ -3266,8 +3264,6 @@ endif LIBGRPC_TEST_UTIL_UNSECURE_SRC = \ test/core/end2end/cq_verifier.c \ - test/core/end2end/cq_verifier_native.c \ - test/core/end2end/cq_verifier_uv.c \ test/core/end2end/fixtures/http_proxy.c \ test/core/end2end/fixtures/proxy.c \ test/core/iomgr/endpoint_tests.c \ diff --git a/build.yaml b/build.yaml index f539ddba0b8..913ce7f8e5b 100644 --- a/build.yaml +++ b/build.yaml @@ -525,7 +525,6 @@ filegroups: build: test headers: - test/core/end2end/cq_verifier.h - - test/core/end2end/cq_verifier_internal.h - test/core/end2end/fixtures/http_proxy.h - test/core/end2end/fixtures/proxy.h - test/core/iomgr/endpoint_tests.h @@ -539,8 +538,6 @@ filegroups: - test/core/util/slice_splitter.h src: - test/core/end2end/cq_verifier.c - - test/core/end2end/cq_verifier_native.c - - test/core/end2end/cq_verifier_uv.c - test/core/end2end/fixtures/http_proxy.c - test/core/end2end/fixtures/proxy.c - test/core/iomgr/endpoint_tests.c @@ -1344,6 +1341,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: bin_decoder_test build: test language: c @@ -1485,6 +1484,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: dns_resolver_connectivity_test cpu_cost: 0.1 build: test @@ -1496,6 +1497,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: dns_resolver_test build: test language: c @@ -1533,6 +1536,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: ev_epoll_linux_test build: test language: c @@ -1543,6 +1548,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - linux - name: fd_conservation_posix_test @@ -1555,6 +1562,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux @@ -1569,6 +1578,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux @@ -1656,6 +1667,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux @@ -1876,6 +1889,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: grpc_create_jwt build: tool language: c @@ -2338,6 +2353,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: secure_channel_create_test build: test language: c @@ -2358,6 +2375,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: sequential_connectivity_test build: test language: c @@ -2368,6 +2387,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: server_chttp2_test build: test language: c @@ -2414,6 +2435,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv - name: sockaddr_resolver_test build: test language: c @@ -2444,6 +2467,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux diff --git a/src/core/lib/iomgr/endpoint_pair_uv.c b/src/core/lib/iomgr/endpoint_pair_uv.c index eeca8070b5f..4f769901ae2 100644 --- a/src/core/lib/iomgr/endpoint_pair_uv.c +++ b/src/core/lib/iomgr/endpoint_pair_uv.c @@ -37,13 +37,15 @@ #include +#include + #include "src/core/lib/iomgr/endpoint_pair.h" grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, size_t read_slice_size) { grpc_endpoint_pair endpoint_pair; // TODO(mlumish): implement this properly under libuv - abort(); + GPR_ASSERT(false && "grpc_iomgr_create_endpoint_pair is not suppoted with libuv"); return endpoint_pair; } diff --git a/src/core/lib/iomgr/pollset_uv.c b/src/core/lib/iomgr/pollset_uv.c index b304eb64dea..8f4e20f2963 100644 --- a/src/core/lib/iomgr/pollset_uv.c +++ b/src/core/lib/iomgr/pollset_uv.c @@ -35,40 +35,105 @@ #ifdef GRPC_UV +#include + +#include + +#include #include #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_uv.h" +struct grpc_pollset { + uv_timer_t timer; + int shutting_down; +}; + +/* Indicates that grpc_pollset_work should run an iteration of the UV loop + before running callbacks. This defaults to 1, and should be disabled if + grpc_pollset_work will be called within the callstack of uv_run */ +int grpc_pollset_work_run_loop; + gpr_mu grpc_polling_mu; -size_t grpc_pollset_size() { return 1; } +size_t grpc_pollset_size() { return sizeof(grpc_pollset); } -void grpc_pollset_global_init(void) { gpr_mu_init(&grpc_polling_mu); } +void grpc_pollset_global_init(void) { + gpr_mu_init(&grpc_polling_mu); + grpc_pollset_work_run_loop = 1; +} void grpc_pollset_global_shutdown(void) { gpr_mu_destroy(&grpc_polling_mu); } void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu) { *mu = &grpc_polling_mu; + memset(pollset, 0, sizeof(grpc_pollset)); + uv_timer_init(uv_default_loop(), &pollset->timer); + pollset->shutting_down = 0; +} + +static void timer_close_cb(uv_handle_t *handle) { + handle->data = (void *)1; } void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_closure *closure) { + GPR_ASSERT(!pollset->shutting_down); + pollset->shutting_down = 1; + if (grpc_pollset_work_run_loop) { + // Drain any pending UV callbacks without blocking + uv_run(uv_default_loop(), UV_RUN_NOWAIT); + } grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_NONE, NULL); } -void grpc_pollset_destroy(grpc_pollset *pollset) {} +void grpc_pollset_destroy(grpc_pollset *pollset) { + uv_close((uv_handle_t*)&pollset->timer, timer_close_cb); + // timer.data is a boolean indicating that the timer has finished closing + pollset->timer.data = (void *)0; + if (grpc_pollset_work_run_loop) { + while (!pollset->timer.data) { + uv_run(uv_default_loop(), UV_RUN_NOWAIT); + } + } +} -void grpc_pollset_reset(grpc_pollset *pollset) {} +void grpc_pollset_reset(grpc_pollset *pollset) { + GPR_ASSERT(pollset->shutting_down); + pollset->shutting_down = 0; +} + +static void timer_run_cb(uv_timer_t *timer) { +} grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_pollset_worker **worker_hdl, gpr_timespec now, gpr_timespec deadline) { + uint64_t timeout; + gpr_mu_unlock(&grpc_polling_mu); + if (grpc_pollset_work_run_loop) { + if (gpr_time_cmp(deadline, now) >= 0) { + timeout = (uint64_t)gpr_time_to_millis(gpr_time_sub(deadline, now)); + } else { + timeout = 0; + } + /* We special-case timeout=0 so that we don't bother with the timer when + the loop won't block anyway */ + if (timeout > 0) { + uv_timer_start(&pollset->timer, timer_run_cb, timeout, 0); + /* Run until there is some I/O activity or the timer triggers. It doesn't + matter which happens */ + uv_run(uv_default_loop(), UV_RUN_ONCE); + uv_timer_stop(&pollset->timer); + } else { + uv_run(uv_default_loop(), UV_RUN_NOWAIT); + } + } if (!grpc_closure_list_empty(exec_ctx->closure_list)) { - gpr_mu_unlock(&grpc_polling_mu); grpc_exec_ctx_flush(exec_ctx); - gpr_mu_lock(&grpc_polling_mu); } + gpr_mu_lock(&grpc_polling_mu); return GRPC_ERROR_NONE; } diff --git a/src/core/lib/iomgr/pollset_uv.h b/src/core/lib/iomgr/pollset_uv.h index 5cbc83e9910..9f1d1442b20 100644 --- a/src/core/lib/iomgr/pollset_uv.h +++ b/src/core/lib/iomgr/pollset_uv.h @@ -31,5 +31,7 @@ * */ +extern int grpc_pollset_work_run_loop; + void grpc_pollset_global_init(void); void grpc_pollset_global_shutdown(void); diff --git a/src/core/lib/iomgr/resolve_address_uv.c b/src/core/lib/iomgr/resolve_address_uv.c index 76170722f2e..b8295acfa14 100644 --- a/src/core/lib/iomgr/resolve_address_uv.c +++ b/src/core/lib/iomgr/resolve_address_uv.c @@ -143,6 +143,8 @@ static grpc_error *blocking_resolve_address_impl( int s; grpc_error *err; + req.addrinfo = NULL; + err = try_split_host_port(name, default_port, &host, &port); if (err != GRPC_ERROR_NONE) { goto done; diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c index 50e3615aadd..d48147ce6e1 100644 --- a/src/core/lib/iomgr/tcp_client_uv.c +++ b/src/core/lib/iomgr/tcp_client_uv.c @@ -61,7 +61,6 @@ static void uv_tcp_connect_cleanup(grpc_uv_tcp_connect *connect) { } static void tcp_close_callback(uv_handle_t *handle) { - gpr_log(GPR_DEBUG, "Freeing uv_tcp_t handle %p", handle); gpr_free(handle); } @@ -73,7 +72,6 @@ static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, /* error == NONE implies that the timer ran out, and wasn't cancelled. If it was cancelled, then the handler that cancelled it also should close the handle, if applicable */ - gpr_log(GPR_DEBUG, "Closing uv_tcp_t handle %p", connect->tcp_handle); uv_close((uv_handle_t *)connect->tcp_handle, tcp_close_callback); } done = (--connect->refs == 0); @@ -104,7 +102,6 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) { } else { error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); - gpr_log(GPR_DEBUG, "Closing uv_tcp_t handle %p", connect->tcp_handle); uv_close((uv_handle_t *)connect->tcp_handle, tcp_close_callback); } } @@ -128,7 +125,6 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, connect->closure = closure; connect->endpoint = ep; connect->tcp_handle = gpr_malloc(sizeof(uv_tcp_t)); - gpr_log(GPR_DEBUG, "Allocated uv_tcp_t handle %p", connect->tcp_handle); connect->addr_name = grpc_sockaddr_to_uri(resolved_addr); uv_tcp_init(uv_default_loop(), connect->tcp_handle); connect->connect_req.data = connect; diff --git a/src/core/lib/iomgr/tcp_server_uv.c b/src/core/lib/iomgr/tcp_server_uv.c index a9eaf206d04..e1eee2d460f 100644 --- a/src/core/lib/iomgr/tcp_server_uv.c +++ b/src/core/lib/iomgr/tcp_server_uv.c @@ -116,7 +116,6 @@ static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { grpc_tcp_listener *sp = s->head; s->head = sp->next; sp->next = NULL; - gpr_log(GPR_DEBUG, "Freeing uv_tcp_t handle %p", sp->handle); gpr_free(sp->handle); gpr_free(sp); } @@ -141,7 +140,6 @@ static void tcp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { immediately_done = 1; } for (sp = s->head; sp; sp = sp->next) { - gpr_log(GPR_DEBUG, "Closing uv_tcp_t handle %p", sp->handle); uv_close((uv_handle_t *)sp->handle, handle_close_callback); } @@ -166,6 +164,10 @@ void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { } } +static void accepted_connection_close_cb(uv_handle_t *handle) { + gpr_free(handle); +} + static void on_connect(uv_stream_t *server, int status) { grpc_tcp_listener *sp = (grpc_tcp_listener *)server->data; grpc_tcp_server_acceptor acceptor = {sp->server, sp->port_index, 0}; @@ -176,7 +178,6 @@ static void on_connect(uv_stream_t *server, int status) { char *peer_name_string; int err; - gpr_log(GPR_DEBUG, "Server %p received a connection", sp->server); if (status < 0) { gpr_log(GPR_INFO, "Skipping on_accept due to error: %s", @@ -184,25 +185,28 @@ static void on_connect(uv_stream_t *server, int status) { return; } client = gpr_malloc(sizeof(uv_tcp_t)); - gpr_log(GPR_DEBUG, "Allocated uv_tcp_t handle %p", client); uv_tcp_init(uv_default_loop(), client); // UV documentation says this is guaranteed to succeed uv_accept((uv_stream_t *)server, (uv_stream_t *)client); - peer_name_string = NULL; - memset(&peer_name, 0, sizeof(grpc_resolved_address)); - peer_name.len = sizeof(struct sockaddr_storage); - err = uv_tcp_getpeername(client, (struct sockaddr *)&peer_name.addr, - (int *)&peer_name.len); - if (err == 0) { - peer_name_string = grpc_sockaddr_to_uri(&peer_name); + // If the server has not been started, we discard incoming connections + if (sp->server->on_accept_cb == NULL) { + uv_close((uv_handle_t *)client, accepted_connection_close_cb); } else { - gpr_log(GPR_INFO, "uv_tcp_getpeername error: %s", uv_strerror(status)); + peer_name_string = NULL; + memset(&peer_name, 0, sizeof(grpc_resolved_address)); + peer_name.len = sizeof(struct sockaddr_storage); + err = uv_tcp_getpeername(client, (struct sockaddr *)&peer_name.addr, + (int *)&peer_name.len); + if (err == 0) { + peer_name_string = grpc_sockaddr_to_uri(&peer_name); + } else { + gpr_log(GPR_INFO, "uv_tcp_getpeername error: %s", uv_strerror(status)); + } + ep = grpc_tcp_create(client, peer_name_string); + sp->server->on_accept_cb(&exec_ctx, sp->server->on_accept_cb_arg, ep, NULL, + &acceptor); + grpc_exec_ctx_finish(&exec_ctx); } - ep = grpc_tcp_create(client, peer_name_string); - gpr_log(GPR_DEBUG, "Calling on_accept_cb for server %p", sp->server); - sp->server->on_accept_cb(&exec_ctx, sp->server->on_accept_cb_arg, ep, NULL, - &acceptor); - grpc_exec_ctx_finish(&exec_ctx); } static grpc_error *add_socket_to_server(grpc_tcp_server *s, uv_tcp_t *handle, @@ -224,6 +228,14 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, uv_tcp_t *handle, return error; } + status = uv_listen((uv_stream_t *)handle, SOMAXCONN, on_connect); + if (status != 0) { + error = GRPC_ERROR_CREATE("Failed to listen to port"); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); + return error; + } + sockname_temp.len = (int)sizeof(struct sockaddr_storage); status = uv_tcp_getsockname(handle, (struct sockaddr *)&sockname_temp.addr, (int *)&sockname_temp.len); @@ -308,7 +320,6 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, } handle = gpr_malloc(sizeof(uv_tcp_t)); - gpr_log(GPR_DEBUG, "Allocating uv_tcp_t handle %p", handle); status = uv_tcp_init(uv_default_loop(), handle); if (status == 0) { error = add_socket_to_server(s, handle, addr, port_index, &sp); diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index 88c4195c2b4..a78a40d261e 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -64,13 +64,12 @@ typedef struct { gpr_slice_buffer *write_slices; uv_buf_t *write_buffers; - int shutting_down; + bool shutting_down; char *peer_string; grpc_pollset *pollset; } grpc_tcp; static void uv_close_callback(uv_handle_t *handle) { - gpr_log(GPR_DEBUG, "Freeing uv_tcp_t handle %p", handle); gpr_free(handle); } @@ -281,14 +280,16 @@ static void shutdown_callback(uv_shutdown_t *req, int status) { gpr_free(req); } static void uv_endpoint_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; - uv_shutdown_t *req = gpr_malloc(sizeof(uv_shutdown_t)); - uv_shutdown(req, (uv_stream_t *)tcp->handle, shutdown_callback); + if (!tcp->shutting_down) { + tcp->shutting_down = true; + uv_shutdown_t *req = gpr_malloc(sizeof(uv_shutdown_t)); + uv_shutdown(req, (uv_stream_t *)tcp->handle, shutdown_callback); + } } static void uv_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_network_status_unregister_endpoint(ep); grpc_tcp *tcp = (grpc_tcp *)ep; - gpr_log(GPR_DEBUG, "Closing uv_tcp_t handle %p", tcp->handle); uv_close((uv_handle_t *)tcp->handle, uv_close_callback); TCP_UNREF(tcp, "destroy"); } @@ -322,6 +323,7 @@ grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, char *peer_string) { handle->data = tcp; gpr_ref_init(&tcp->refcount, 1); tcp->peer_string = gpr_strdup(peer_string); + tcp->shutting_down = false; /* Tell network status tracking code about the new endpoint */ grpc_network_status_register_endpoint(&tcp->base); diff --git a/src/core/lib/iomgr/timer_uv.c b/src/core/lib/iomgr/timer_uv.c index 222f1554a3f..cfcb89268b1 100644 --- a/src/core/lib/iomgr/timer_uv.c +++ b/src/core/lib/iomgr/timer_uv.c @@ -47,14 +47,12 @@ static void timer_close_callback(uv_handle_t *handle) { gpr_free(handle); } static void stop_uv_timer(uv_timer_t *handle) { uv_timer_stop(handle); uv_unref((uv_handle_t *)handle); - gpr_log(GPR_DEBUG, "Closing uv_timer_t handle %p", handle); uv_close((uv_handle_t *)handle, timer_close_callback); } void run_expired_timer(uv_timer_t *handle) { grpc_timer *timer = (grpc_timer *)handle->data; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - gpr_log(GPR_DEBUG, "Timer callback: %p", timer); GPR_ASSERT(!timer->triggered); timer->triggered = 1; grpc_exec_ctx_sched(&exec_ctx, &timer->closure, GRPC_ERROR_NONE, NULL); @@ -75,7 +73,6 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer, } timer->triggered = 0; timeout = (uint64_t)gpr_time_to_millis(gpr_time_sub(deadline, now)); - gpr_log(GPR_DEBUG, "Setting timer %p: %lu", timer, timeout); uv_timer = gpr_malloc(sizeof(uv_timer_t)); uv_timer_init(uv_default_loop(), uv_timer); uv_timer->data = timer; @@ -85,7 +82,6 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer, void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) { if (!timer->triggered) { - gpr_log(GPR_DEBUG, "Running cancelled timer callback"); timer->triggered = 1; grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_CANCELLED, NULL); stop_uv_timer((uv_timer_t *)timer->uv_timer); diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc index a246a8c678b..b8013c41938 100644 --- a/src/node/ext/node_grpc.cc +++ b/src/node/ext/node_grpc.cc @@ -42,6 +42,10 @@ #include "grpc/support/log.h" #include "grpc/support/time.h" +#ifdef GRPC_UV +#include "src/core/lib/iomgr/pollset_uv.h" +#endif + #include "call.h" #include "call_credentials.h" #include "channel.h" @@ -439,6 +443,9 @@ void init(Local exports) { uv_signal_start(&signal_handle, signal_callback, SIGUSR2); uv_unref((uv_handle_t *)&signal_handle); +#ifdef GRPC_UV + grpc_pollset_work_run_loop = 0; +#endif grpc::node::Call::Init(exports); grpc::node::CallCredentials::Init(exports); diff --git a/test/core/bad_client/gen_build_yaml.py b/test/core/bad_client/gen_build_yaml.py index fb86525b1a1..32ab3f2137a 100755 --- a/test/core/bad_client/gen_build_yaml.py +++ b/test/core/bad_client/gen_build_yaml.py @@ -83,6 +83,7 @@ def main(): 'secure': 'no', 'src': ['test/core/bad_client/tests/%s.c' % t], 'vs_proj_dir': 'test', + 'exclude_iomgrs': ['uv'], 'deps': [ 'bad_client_test', 'grpc_test_util_unsecure', diff --git a/test/core/end2end/cq_verifier.c b/test/core/end2end/cq_verifier.c index 9e6c0a4f4cc..1f42d3457e8 100644 --- a/test/core/end2end/cq_verifier.c +++ b/test/core/end2end/cq_verifier.c @@ -32,7 +32,6 @@ */ #include "test/core/end2end/cq_verifier.h" -#include "test/core/end2end/cq_verifier_internal.h" #include #include @@ -60,15 +59,35 @@ typedef struct metadata { /* details what we expect to find on a single event - and forms a linked list to detail other expectations */ -struct expectation { +typedef struct expectation { struct expectation *next; const char *file; int line; grpc_completion_type type; void *tag; int success; +} expectation; + +/* the verifier itself */ +struct cq_verifier { + /* bound completion queue */ + grpc_completion_queue *cq; + /* start of expectation list */ + expectation *first_expectation; }; +cq_verifier *cq_verifier_create(grpc_completion_queue *cq) { + cq_verifier *v = gpr_malloc(sizeof(cq_verifier)); + v->cq = cq; + v->first_expectation = NULL; + return v; +} + +void cq_verifier_destroy(cq_verifier *v) { + cq_verify(v); + gpr_free(v); +} + static int has_metadata(const grpc_metadata *md, size_t count, const char *key, const char *value) { size_t i; @@ -178,7 +197,7 @@ static void expectation_to_strvec(gpr_strvec *buf, expectation *e) { static void expectations_to_strvec(gpr_strvec *buf, cq_verifier *v) { expectation *e; - for (e = cq_verifier_get_first_expectation(v); e != NULL; e = e->next) { + for (e = v->first_expectation; e != NULL; e = e->next) { expectation_to_strvec(buf, e); gpr_strvec_add(buf, gpr_strdup("\n")); } @@ -198,19 +217,19 @@ static void fail_no_event_received(cq_verifier *v) { } void cq_verify(cq_verifier *v) { - int timeout_seconds = 10; - while (cq_verifier_get_first_expectation(v) != NULL) { - grpc_event ev = cq_verifier_next_event(v, timeout_seconds); + const gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10); + while (v->first_expectation != NULL) { + grpc_event ev = grpc_completion_queue_next(v->cq, deadline, NULL); if (ev.type == GRPC_QUEUE_TIMEOUT) { fail_no_event_received(v); break; } expectation *e; expectation *prev = NULL; - for (e = cq_verifier_get_first_expectation(v); e != NULL; e = e->next) { + for (e = v->first_expectation; e != NULL; e = e->next) { if (e->tag == ev.tag) { verify_matches(e, &ev); - if (e == cq_verifier_get_first_expectation(v)) cq_verifier_set_first_expectation(v, e->next); + if (e == v->first_expectation) v->first_expectation = e->next; if (prev != NULL) prev->next = e->next; gpr_free(e); break; @@ -234,11 +253,14 @@ void cq_verify(cq_verifier *v) { } void cq_verify_empty_timeout(cq_verifier *v, int timeout_sec) { + gpr_timespec deadline = + gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), + gpr_time_from_seconds(timeout_sec, GPR_TIMESPAN)); grpc_event ev; - GPR_ASSERT(cq_verifier_get_first_expectation(v) == NULL && "expectation queue must be empty"); + GPR_ASSERT(v->first_expectation == NULL && "expectation queue must be empty"); - ev = cq_verifier_next_event(v, timeout_sec); + ev = grpc_completion_queue_next(v->cq, deadline, NULL); if (ev.type != GRPC_QUEUE_TIMEOUT) { char *s = grpc_event_string(&ev); gpr_log(GPR_ERROR, "unexpected event (expected nothing): %s", s); @@ -257,8 +279,8 @@ static void add(cq_verifier *v, const char *file, int line, e->line = line; e->tag = tag; e->success = success; - e->next = cq_verifier_get_first_expectation(v); - cq_verifier_set_first_expectation(v, e); + e->next = v->first_expectation; + v->first_expectation = e; } void cq_expect_completion(cq_verifier *v, const char *file, int line, void *tag, diff --git a/test/core/end2end/cq_verifier_uv.c b/test/core/end2end/cq_verifier_uv.c index 329dacf97ef..74ac673f204 100644 --- a/test/core/end2end/cq_verifier_uv.c +++ b/test/core/end2end/cq_verifier_uv.c @@ -38,6 +38,7 @@ #include #include +#include #include "test/core/end2end/cq_verifier_internal.h" @@ -65,7 +66,7 @@ cq_verifier *cq_verifier_create(grpc_completion_queue *cq) { return v; } -void timer_close_cb(uv_handle_t *handle) { +static void timer_close_cb(uv_handle_t *handle) { handle->data = (void *)TIMER_CLOSED; } @@ -86,12 +87,12 @@ void cq_verifier_set_first_expectation(cq_verifier *v, expectation *e) { v->first_expectation = e; } -void timer_run_cb(uv_timer_t *timer) { +static void timer_run_cb(uv_timer_t *timer) { timer->data = (void *)TIMER_TRIGGERED; } grpc_event cq_verifier_next_event(cq_verifier *v, int timeout_seconds) { -uint64_t timeout_ms = timeout_seconds < 0 ? 0 : (uint64_t)timeout_seconds * 1000; + uint64_t timeout_ms = timeout_seconds < 0 ? 0 : (uint64_t)timeout_seconds * 1000; grpc_event ev; v->timer.data = (void *)TIMER_STARTED; uv_timer_start(&v->timer, timer_run_cb, timeout_ms, 0); diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index c2040c00d8c..3ea827f67eb 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -44,14 +44,15 @@ default_unsecure_fixture_options = FixtureOptions( True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False, [], []) socketpair_unsecure_fixture_options = default_unsecure_fixture_options._replace(fullstack=False, dns_resolver=False) default_secure_fixture_options = default_unsecure_fixture_options._replace(secure=True) -uds_fixture_options = default_unsecure_fixture_options._replace(dns_resolver=False, platforms=['linux', 'mac', 'posix']) +uds_fixture_options = default_unsecure_fixture_options._replace(dns_resolver=False, platforms=['linux', 'mac', 'posix'], exclude_iomgrs=['uv']) fd_unsecure_fixture_options = default_unsecure_fixture_options._replace( - dns_resolver=False, fullstack=False, platforms=['linux', 'mac', 'posix']) + dns_resolver=False, fullstack=False, platforms=['linux', 'mac', 'posix'], exclude_iomgrs=['uv']) # maps fixture name to whether it requires the security library END2END_FIXTURES = { 'h2_compress': default_unsecure_fixture_options, + 'h2_census': default_unsecure_fixture_options, 'h2_load_reporting': default_unsecure_fixture_options, 'h2_fakesec': default_secure_fixture_options._replace(ci_mac=False), @@ -60,26 +61,29 @@ END2END_FIXTURES = { 'h2_full+pipe': default_unsecure_fixture_options._replace( platforms=['linux'], exclude_iomgrs=['uv']), 'h2_full+trace': default_unsecure_fixture_options._replace(tracing=True), - 'h2_http_proxy': default_unsecure_fixture_options._replace(ci_mac=False), - 'h2_oauth2': default_secure_fixture_options._replace(ci_mac=False), - 'h2_proxy': default_unsecure_fixture_options._replace(includes_proxy=True, - ci_mac=False), + 'h2_http_proxy': default_unsecure_fixture_options._replace( + ci_mac=False, exclude_iomgrs=['uv']), + 'h2_oauth2': default_secure_fixture_options._replace( + ci_mac=False, exclude_iomgrs=['uv']), + 'h2_proxy': default_unsecure_fixture_options._replace( + includes_proxy=True, ci_mac=False, exclude_iomgrs=['uv']), 'h2_sockpair_1byte': socketpair_unsecure_fixture_options._replace( - ci_mac=False, exclude_configs=['msan']), - 'h2_sockpair': socketpair_unsecure_fixture_options._replace(ci_mac=False), + ci_mac=False, exclude_configs=['msan'], exclude_iomgrs=['uv']), + 'h2_sockpair': socketpair_unsecure_fixture_options._replace( + ci_mac=False, exclude_iomgrs=['uv']), 'h2_sockpair+trace': socketpair_unsecure_fixture_options._replace( - ci_mac=False, tracing=True), + ci_mac=False, tracing=True, exclude_iomgrs=['uv']), 'h2_ssl': default_secure_fixture_options, 'h2_ssl_cert': default_secure_fixture_options, - 'h2_ssl_proxy': default_secure_fixture_options._replace(includes_proxy=True, - ci_mac=False), + 'h2_ssl_proxy': default_secure_fixture_options._replace( + includes_proxy=True, ci_mac=False, exclude_iomgrs=['uv']), 'h2_uds': uds_fixture_options, } TestOptions = collections.namedtuple( 'TestOptions', - 'needs_fullstack needs_dns proxyable secure traceable cpu_cost') -default_test_options = TestOptions(False, False, True, False, True, 1.0) + 'needs_fullstack needs_dns proxyable secure traceable cpu_cost exclude_iomgrs') +default_test_options = TestOptions(False, False, True, False, True, 1.0, []) connectivity_test_options = default_test_options._replace(needs_fullstack=True) LOWCPU = 0.1 @@ -96,8 +100,8 @@ END2END_TESTS = { 'cancel_in_a_vacuum': default_test_options._replace(cpu_cost=LOWCPU), 'cancel_with_status': default_test_options._replace(cpu_cost=LOWCPU), 'compressed_payload': default_test_options._replace(proxyable=False), - 'connectivity': connectivity_test_options._replace(proxyable=False, - cpu_cost=LOWCPU), + 'connectivity': connectivity_test_options._replace( + proxyable=False, cpu_cost=LOWCPU, exclude_iomgrs=['uv']), 'default_host': default_test_options._replace(needs_fullstack=True, needs_dns=True), 'disappearing_server': connectivity_test_options, @@ -246,6 +250,8 @@ def main(): 'name': '%s_test' % f, 'args': [t], 'exclude_configs': [], + 'exclude_iomgrs': list(set(END2END_FIXTURES[f].exclude_iomgrs) | + set(END2END_TESTS[t].exclude_iomgrs)), 'platforms': END2END_FIXTURES[f].platforms, 'ci_platforms': (END2END_FIXTURES[f].platforms if END2END_FIXTURES[f].ci_mac else without( @@ -261,6 +267,8 @@ def main(): 'name': '%s_nosec_test' % f, 'args': [t], 'exclude_configs': END2END_FIXTURES[f].exclude_configs, + 'exclude_iomgrs': list(set(END2END_FIXTURES[f].exclude_iomgrs) | + set(END2END_TESTS[t].exclude_iomgrs)), 'platforms': END2END_FIXTURES[f].platforms, 'ci_platforms': (END2END_FIXTURES[f].platforms if END2END_FIXTURES[f].ci_mac else without( diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c index d4a11c1e93d..a5c8c496502 100644 --- a/test/core/util/port_server_client.c +++ b/test/core/util/port_server_client.c @@ -80,7 +80,7 @@ void grpc_free_port_using_server(char *server, int port) { grpc_httpcli_response rsp; freereq pr; char *path; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_RUN_INNER_LOOP; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_closure *shutdown_closure; grpc_init(); diff --git a/test/core/util/port_uv.c b/test/core/util/port_uv.c index e6d37caf982..cab31b3f4ec 100644 --- a/test/core/util/port_uv.c +++ b/test/core/util/port_uv.c @@ -35,13 +35,75 @@ #include "test/core/util/test_config.h" #if defined(GRPC_UV) && defined(GRPC_TEST_PICK_PORT) +#include #include +#include "src/core/lib/support/env.h" #include "test/core/util/port.h" +#include "test/core/util/port_server_client.h" + +// Almost everything in this file has been copied from port_posix.c + +static int *chosen_ports = NULL; +static size_t num_chosen_ports = 0; + +static int free_chosen_port(int port) { + size_t i; + int found = 0; + size_t found_at = 0; + char *env = gpr_getenv("GRPC_TEST_PORT_SERVER"); + /* Find the port and erase it from the list, then tell the server it can be + freed. */ + for (i = 0; i < num_chosen_ports; i++) { + if (chosen_ports[i] == port) { + GPR_ASSERT(found == 0); + found = 1; + found_at = i; + } + } + if (found) { + chosen_ports[found_at] = chosen_ports[num_chosen_ports - 1]; + num_chosen_ports--; + if (env) { + grpc_free_port_using_server(env, port); + } + } + gpr_free(env); + return found; +} + +static void free_chosen_ports(void) { + char *env = gpr_getenv("GRPC_TEST_PORT_SERVER"); + if (env != NULL) { + size_t i; + for (i = 0; i < num_chosen_ports; i++) { + grpc_free_port_using_server(env, chosen_ports[i]); + } + gpr_free(env); + } + + gpr_free(chosen_ports); +} + +static void chose_port(int port) { + if (chosen_ports == NULL) { + atexit(free_chosen_ports); + } + num_chosen_ports++; + chosen_ports = gpr_realloc(chosen_ports, sizeof(int) * num_chosen_ports); + chosen_ports[num_chosen_ports - 1] = port; +} int grpc_pick_unused_port(void) { - // Temporary implementation - return 4242; + // Currently only works with the port server + char *env = gpr_getenv("GRPC_TEST_PORT_SERVER"); + GPR_ASSERT(env); + int port = grpc_pick_port_using_server(env); + gpr_free(env); + if (port != 0) { + chose_port(port); + } + return port; } int grpc_pick_unused_port_or_die(void) { @@ -51,8 +113,7 @@ int grpc_pick_unused_port_or_die(void) { } void grpc_recycle_unused_port(int port) { - // Temporary implementation - (void)port; + GPR_ASSERT(free_chosen_port(port)); } #endif /* GRPC_UV && GRPC_TEST_PICK_PORT */ diff --git a/tools/buildgen/plugins/make_fuzzer_tests.py b/tools/buildgen/plugins/make_fuzzer_tests.py index 1d215e9fe0f..ba9825acb91 100644 --- a/tools/buildgen/plugins/make_fuzzer_tests.py +++ b/tools/buildgen/plugins/make_fuzzer_tests.py @@ -49,6 +49,7 @@ def mako_plugin(dictionary): tests.append({ 'name': new_target['name'], 'args': [fn], + 'exclude_iomgrs': ['uv'], 'exclude_configs': ['tsan'], 'uses_polling': False, 'platforms': ['linux'], diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 56aa7bbb654..cebff5f537d 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -223,6 +223,8 @@ class CLanguage(object): polling_strategies = (_POLLING_STRATEGIES.get(self.platform, ['all']) if target.get('uses_polling', True) else ['all']) + if self.args.iomgr_platform == 'uv': + polling_strategies = ['all'] for polling_strategy in polling_strategies: env={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH': _ROOT + '/src/core/lib/tsi/test_creds/ca.pem', diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index f02967e676e..8128807299c 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6906,7 +6906,6 @@ ], "headers": [ "test/core/end2end/cq_verifier.h", - "test/core/end2end/cq_verifier_internal.h", "test/core/end2end/fixtures/http_proxy.h", "test/core/end2end/fixtures/proxy.h", "test/core/iomgr/endpoint_tests.h", @@ -6925,9 +6924,6 @@ "src": [ "test/core/end2end/cq_verifier.c", "test/core/end2end/cq_verifier.h", - "test/core/end2end/cq_verifier_internal.h", - "test/core/end2end/cq_verifier_native.c", - "test/core/end2end/cq_verifier_uv.c", "test/core/end2end/fixtures/http_proxy.c", "test/core/end2end/fixtures/http_proxy.h", "test/core/end2end/fixtures/proxy.c", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 41af421b265..6e7226a50ad 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -99,7 +99,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -385,7 +387,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -407,7 +411,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -473,7 +479,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -492,7 +500,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -510,7 +520,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -530,7 +542,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -590,7 +604,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1139,7 +1155,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1679,7 +1697,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1723,273 +1743,13 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "secure_endpoint_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "sequential_connectivity_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "server_chttp2_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "server_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "set_initial_connect_string_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "sockaddr_resolver_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "sockaddr_utils_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "socket_utils_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 0.5, - "exclude_configs": [], "exclude_iomgrs": [ "uv" ], "flaky": false, "gtest": false, "language": "c", - "name": "tcp_client_posix_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 0.2, - "exclude_configs": [], - "exclude_iomgrs": [ - "uv" - ], - "flaky": false, - "gtest": false, - "language": "c", - "name": "tcp_posix_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [ - "uv" - ], - "flaky": false, - "gtest": false, - "language": "c", - "name": "tcp_server_posix_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "time_averaged_stats_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "timeout_encoding_test", + "name": "secure_endpoint_test", "platforms": [ "linux", "mac", @@ -2013,7 +1773,7 @@ "flaky": false, "gtest": false, "language": "c", - "name": "timer_heap_test", + "name": "sequential_connectivity_test", "platforms": [ "linux", "mac", @@ -2031,13 +1791,11 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [ - "uv" - ], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", - "name": "timer_list_test", + "name": "server_chttp2_test", "platforms": [ "linux", "mac", @@ -2059,7 +1817,31 @@ "flaky": false, "gtest": false, "language": "c", - "name": "transport_connectivity_state_test", + "name": "server_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "gtest": false, + "language": "c", + "name": "set_initial_connect_string_test", "platforms": [ "linux", "mac", @@ -2081,7 +1863,7 @@ "flaky": false, "gtest": false, "language": "c", - "name": "transport_metadata_test", + "name": "sockaddr_resolver_test", "platforms": [ "linux", "mac", @@ -2094,7 +1876,8 @@ "ci_platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ], "cpu_cost": 1.0, "exclude_configs": [], @@ -2102,7 +1885,74 @@ "flaky": false, "gtest": false, "language": "c", - "name": "transport_security_test", + "name": "sockaddr_utils_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "gtest": false, + "language": "c", + "name": "socket_utils_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 0.5, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "gtest": false, + "language": "c", + "name": "tcp_client_posix_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 0.2, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "gtest": false, + "language": "c", + "name": "tcp_posix_test", "platforms": [ "linux", "mac", @@ -2118,11 +1968,13 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", - "name": "udp_server_test", + "name": "tcp_server_posix_test", "platforms": [ "linux", "mac", @@ -2143,7 +1995,7 @@ "flaky": false, "gtest": false, "language": "c", - "name": "uri_parser_test", + "name": "time_averaged_stats_test", "platforms": [ "linux", "mac", @@ -2163,9 +2015,9 @@ "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": true, - "language": "c++", - "name": "alarm_cpp_test", + "gtest": false, + "language": "c", + "name": "timeout_encoding_test", "platforms": [ "linux", "mac", @@ -2183,11 +2035,13 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, - "gtest": true, - "language": "c++", - "name": "async_end2end_test", + "gtest": false, + "language": "c", + "name": "timer_heap_test", "platforms": [ "linux", "mac", @@ -2205,11 +2059,13 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, - "gtest": true, - "language": "c++", - "name": "auth_property_iterator_test", + "gtest": false, + "language": "c", + "name": "timer_list_test", "platforms": [ "linux", "mac", @@ -2229,9 +2085,9 @@ "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": true, - "language": "c++", - "name": "channel_arguments_test", + "gtest": false, + "language": "c", + "name": "transport_connectivity_state_test", "platforms": [ "linux", "mac", @@ -2251,9 +2107,9 @@ "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": true, - "language": "c++", - "name": "cli_call_test", + "gtest": false, + "language": "c", + "name": "transport_metadata_test", "platforms": [ "linux", "mac", @@ -2268,13 +2124,33 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": true, - "language": "c++", - "name": "client_crash_test", + "gtest": false, + "language": "c", + "name": "transport_security_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": false, + "language": "c", + "name": "udp_server_test", "platforms": [ "linux", "mac", @@ -2293,9 +2169,9 @@ "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": true, - "language": "c++", - "name": "codegen_test_full", + "gtest": false, + "language": "c", + "name": "uri_parser_test", "platforms": [ "linux", "mac", @@ -2317,7 +2193,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "codegen_test_minimal", + "name": "alarm_cpp_test", "platforms": [ "linux", "mac", @@ -2339,7 +2215,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "credentials_test", + "name": "async_end2end_test", "platforms": [ "linux", "mac", @@ -2361,7 +2237,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "cxx_byte_buffer_test", + "name": "auth_property_iterator_test", "platforms": [ "linux", "mac", @@ -2383,7 +2259,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "cxx_slice_test", + "name": "channel_arguments_test", "platforms": [ "linux", "mac", @@ -2405,7 +2281,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "cxx_string_ref_test", + "name": "cli_call_test", "platforms": [ "linux", "mac", @@ -2418,21 +2294,19 @@ "ci_platforms": [ "linux", "mac", - "posix", - "windows" + "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", - "name": "cxx_time_test", + "name": "client_crash_test", "platforms": [ "linux", "mac", - "posix", - "windows" + "posix" ] }, { @@ -2443,13 +2317,13 @@ "posix", "windows" ], - "cpu_cost": 0.5, + "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", - "name": "end2end_test", + "name": "codegen_test_full", "platforms": [ "linux", "mac", @@ -2471,7 +2345,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "filter_end2end_test", + "name": "codegen_test_minimal", "platforms": [ "linux", "mac", @@ -2493,7 +2367,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "generic_end2end_test", + "name": "credentials_test", "platforms": [ "linux", "mac", @@ -2515,7 +2389,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "golden_file_test", + "name": "cxx_byte_buffer_test", "platforms": [ "linux", "mac", @@ -2537,7 +2411,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "grpc_tool_test", + "name": "cxx_slice_test", "platforms": [ "linux", "mac", @@ -2559,7 +2433,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "grpclb_api_test", + "name": "cxx_string_ref_test", "platforms": [ "linux", "mac", @@ -2579,9 +2453,9 @@ "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": false, + "gtest": true, "language": "c++", - "name": "grpclb_test", + "name": "cxx_time_test", "platforms": [ "linux", "mac", @@ -2597,13 +2471,13 @@ "posix", "windows" ], - "cpu_cost": 1.0, + "cpu_cost": 0.5, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", - "name": "hybrid_end2end_test", + "name": "end2end_test", "platforms": [ "linux", "mac", @@ -2616,19 +2490,21 @@ "ci_platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": false, + "gtest": true, "language": "c++", - "name": "interop_test", + "name": "filter_end2end_test", "platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ] }, { @@ -2645,7 +2521,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "mock_test", + "name": "generic_end2end_test", "platforms": [ "linux", "mac", @@ -2667,7 +2543,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "proto_server_reflection_test", + "name": "golden_file_test", "platforms": [ "linux", "mac", @@ -2680,19 +2556,21 @@ "ci_platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ], - "cpu_cost": 0.5, + "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": false, + "gtest": true, "language": "c++", - "name": "qps_openloop_test", + "name": "grpc_tool_test", "platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ] }, { @@ -2709,7 +2587,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "secure_auth_context_test", + "name": "grpclb_api_test", "platforms": [ "linux", "mac", @@ -2722,7 +2600,8 @@ "ci_platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ], "cpu_cost": 1.0, "exclude_configs": [], @@ -2730,11 +2609,12 @@ "flaky": false, "gtest": false, "language": "c++", - "name": "secure_sync_unary_ping_pong_test", + "name": "grpclb_test", "platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ] }, { @@ -2751,7 +2631,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "server_builder_plugin_test", + "name": "hybrid_end2end_test", "platforms": [ "linux", "mac", @@ -2770,9 +2650,157 @@ "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": true, + "gtest": false, "language": "c++", - "name": "server_crash_test", + "name": "interop_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "mock_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "proto_server_reflection_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 0.5, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": false, + "language": "c++", + "name": "qps_openloop_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "secure_auth_context_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": false, + "language": "c++", + "name": "secure_sync_unary_ping_pong_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "server_builder_plugin_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "server_crash_test", "platforms": [ "linux", "mac", @@ -2897,7 +2925,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -2919,7 +2949,9 @@ ], "cpu_cost": 0.2, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -2941,7 +2973,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -2963,7 +2997,9 @@ ], "cpu_cost": 0.2, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -2985,7 +3021,9 @@ ], "cpu_cost": 0.2, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -3007,7 +3045,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -3029,7 +3069,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -3051,7 +3093,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -3073,7 +3117,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -3095,7 +3141,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -4685,6 +4733,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4707,6 +4756,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4729,6 +4779,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4751,6 +4802,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4773,6 +4825,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4795,6 +4848,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4817,6 +4871,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4839,6 +4894,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4861,6 +4917,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4883,6 +4940,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4905,6 +4963,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4927,6 +4988,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4949,6 +5011,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4971,6 +5034,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -4993,6 +5057,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5015,6 +5080,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5037,6 +5103,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5059,6 +5126,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5081,6 +5149,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5103,6 +5172,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5125,6 +5195,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5147,6 +5218,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5169,6 +5241,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5191,6 +5264,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5213,6 +5287,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5235,6 +5310,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5257,6 +5333,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5279,6 +5356,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5301,6 +5379,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5323,6 +5402,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5345,6 +5425,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5367,6 +5448,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5389,6 +5471,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5411,6 +5494,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5433,6 +5517,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5455,6 +5540,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5477,6 +5563,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5499,6 +5586,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5521,6 +5609,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5543,6 +5632,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5565,6 +5655,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5587,6 +5678,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5609,6 +5701,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5631,6 +5724,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_test", @@ -5653,6 +5747,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5675,6 +5770,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5697,6 +5793,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5719,6 +5816,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5741,6 +5839,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5763,6 +5862,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5785,6 +5885,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5807,6 +5908,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5829,6 +5931,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5851,6 +5954,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5873,6 +5977,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5895,6 +6002,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5917,6 +6025,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5939,6 +6048,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5961,6 +6071,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -5983,6 +6094,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6005,6 +6117,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6027,6 +6140,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6049,6 +6163,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6071,6 +6186,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6093,6 +6209,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6115,6 +6232,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6137,6 +6255,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6159,6 +6278,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6181,6 +6301,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6203,6 +6324,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6225,6 +6347,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6247,6 +6370,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6269,6 +6393,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6291,6 +6416,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6313,6 +6439,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6335,6 +6462,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6357,6 +6485,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6379,6 +6508,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6401,6 +6531,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6423,6 +6554,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6445,6 +6577,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6467,6 +6600,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6489,6 +6623,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6511,6 +6646,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6533,6 +6669,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6555,6 +6692,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6577,6 +6715,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6599,6 +6738,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_test", @@ -6620,6 +6760,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6641,6 +6782,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6662,6 +6804,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6683,6 +6826,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6704,6 +6848,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6725,6 +6870,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6746,6 +6892,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6767,6 +6914,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6788,6 +6936,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6809,6 +6958,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6830,6 +6980,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6851,6 +7004,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6872,6 +7026,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6893,6 +7048,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6914,6 +7070,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6935,6 +7092,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6956,6 +7114,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6977,6 +7136,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -6998,6 +7158,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7019,6 +7180,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7040,6 +7202,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7061,6 +7224,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7082,6 +7246,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7103,6 +7268,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7124,6 +7290,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7145,6 +7312,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7166,6 +7334,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7187,6 +7356,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7208,6 +7378,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7229,6 +7400,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7250,6 +7422,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7271,6 +7444,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7292,6 +7466,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7313,6 +7488,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7334,6 +7510,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7355,6 +7532,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7376,6 +7554,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7397,6 +7576,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7418,6 +7598,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7439,6 +7620,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7460,6 +7642,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7481,6 +7664,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7502,6 +7686,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7523,6 +7708,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_fakesec_test", @@ -7544,6 +7730,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7564,6 +7753,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7584,6 +7776,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7604,6 +7799,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7624,6 +7822,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7644,6 +7845,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7664,6 +7868,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7684,6 +7891,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7704,6 +7914,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7724,6 +7937,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7744,6 +7960,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7764,6 +7983,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7784,6 +8006,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7804,6 +8029,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7824,6 +8052,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7844,6 +8075,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7864,6 +8098,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7884,6 +8121,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7904,6 +8144,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7924,6 +8167,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7944,6 +8190,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7964,6 +8213,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -7984,6 +8236,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8004,6 +8259,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8024,6 +8282,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8044,6 +8305,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8064,6 +8328,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8084,6 +8351,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8104,6 +8374,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8124,6 +8397,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8144,6 +8420,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8164,6 +8443,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8184,6 +8466,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8204,6 +8489,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8224,6 +8512,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8244,6 +8535,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8264,6 +8558,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8284,6 +8581,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8304,6 +8604,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_test", @@ -8325,6 +8628,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8347,6 +8651,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8369,6 +8674,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8391,6 +8697,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8413,6 +8720,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8435,6 +8743,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8457,6 +8766,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8479,6 +8789,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8501,6 +8812,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8523,6 +8835,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8545,6 +8858,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8567,6 +8883,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8589,6 +8906,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8611,6 +8929,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8633,6 +8952,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8655,6 +8975,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8677,6 +8998,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8699,6 +9021,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8721,6 +9044,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8743,6 +9067,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8765,6 +9090,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8787,6 +9113,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8809,6 +9136,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8831,6 +9159,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8853,6 +9182,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8875,6 +9205,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8897,6 +9228,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8919,6 +9251,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8941,6 +9274,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8963,6 +9297,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -8985,6 +9320,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9007,6 +9343,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9029,6 +9366,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9051,6 +9389,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9073,6 +9412,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9095,6 +9435,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9117,6 +9458,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9139,6 +9481,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9161,6 +9504,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9183,6 +9527,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9205,6 +9550,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9227,6 +9573,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9249,6 +9596,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9271,6 +9619,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_test", @@ -9290,6 +9639,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9306,6 +9658,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9322,6 +9677,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9338,6 +9696,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9354,6 +9715,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9370,6 +9734,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9386,6 +9753,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9402,6 +9772,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9418,6 +9791,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9434,6 +9810,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9450,6 +9829,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9466,6 +9848,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9482,6 +9867,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9498,6 +9886,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9514,6 +9905,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9530,6 +9924,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9546,6 +9943,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9562,6 +9962,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9578,6 +9981,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9594,6 +10000,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9610,6 +10019,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9626,6 +10038,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9642,6 +10057,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9658,6 +10076,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9674,6 +10095,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9690,6 +10114,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9706,6 +10133,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9722,6 +10152,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9738,6 +10171,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9754,6 +10190,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9770,6 +10209,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9786,6 +10228,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9802,6 +10247,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9818,6 +10266,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9834,6 +10285,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9850,6 +10304,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9866,6 +10323,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9882,6 +10342,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9898,6 +10361,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9914,6 +10380,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9930,6 +10399,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9946,6 +10418,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9962,6 +10437,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9978,6 +10456,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_test", @@ -9997,6 +10478,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10019,6 +10501,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10041,6 +10524,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10063,6 +10547,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10085,6 +10570,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10107,6 +10593,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10129,6 +10616,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10151,6 +10639,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10173,6 +10662,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10195,6 +10685,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10217,6 +10708,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10239,6 +10733,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10261,6 +10756,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10283,6 +10779,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10305,6 +10802,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10327,6 +10825,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10349,6 +10848,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10371,6 +10871,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10393,6 +10894,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10415,6 +10917,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10437,6 +10940,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10459,6 +10963,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10481,6 +10986,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10503,6 +11009,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10525,6 +11032,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10547,6 +11055,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10569,6 +11078,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10591,6 +11101,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10613,6 +11124,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10635,6 +11147,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10657,6 +11170,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10679,6 +11193,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10701,6 +11216,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10723,6 +11239,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10745,6 +11262,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10767,6 +11285,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10789,6 +11308,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10811,6 +11331,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10833,6 +11354,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10855,6 +11377,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10877,6 +11400,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10899,6 +11423,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_test", @@ -10920,6 +11445,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -10941,6 +11469,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -10962,6 +11493,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -10983,6 +11517,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11004,6 +11541,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11025,6 +11565,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11046,6 +11589,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11067,6 +11613,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11088,6 +11637,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11109,6 +11661,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11130,6 +11685,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11151,6 +11709,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11172,6 +11733,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11193,6 +11757,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11214,6 +11781,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11235,6 +11805,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11256,6 +11829,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11277,6 +11853,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11298,6 +11877,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11319,6 +11901,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11340,6 +11925,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11361,6 +11949,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11382,6 +11973,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11403,6 +11997,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11424,6 +12021,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11445,6 +12045,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11466,6 +12069,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11487,6 +12093,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11508,6 +12117,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11529,6 +12141,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11550,6 +12165,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11571,6 +12189,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11592,6 +12213,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11613,6 +12237,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11634,6 +12261,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11655,6 +12285,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11676,6 +12309,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11697,6 +12333,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11718,6 +12357,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11739,6 +12381,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11760,6 +12405,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11781,6 +12429,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11802,6 +12453,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11823,6 +12477,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_test", @@ -11845,6 +12502,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -11867,6 +12525,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -11889,6 +12548,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -11911,6 +12571,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -11933,6 +12594,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -11955,6 +12617,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -11977,6 +12640,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -11999,6 +12663,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12021,6 +12686,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12043,6 +12709,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12065,6 +12732,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12087,6 +12757,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12109,6 +12780,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12131,6 +12803,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12153,6 +12826,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12175,6 +12849,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12197,6 +12872,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12219,6 +12895,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12241,6 +12918,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12263,6 +12941,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12285,6 +12964,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12307,6 +12987,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12329,6 +13010,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12351,6 +13033,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12373,6 +13056,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12395,6 +13079,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12417,6 +13102,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12439,6 +13125,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12461,6 +13148,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12483,6 +13171,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12505,6 +13194,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12527,6 +13217,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12549,6 +13240,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12571,6 +13263,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12593,6 +13286,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12615,6 +13309,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12637,6 +13332,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12659,6 +13355,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12681,6 +13378,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12703,6 +13401,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12725,6 +13424,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12747,6 +13447,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12769,6 +13470,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12791,6 +13493,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_test", @@ -12812,6 +13515,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -12833,6 +13539,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -12854,6 +13563,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -12875,6 +13587,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -12896,6 +13611,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -12917,6 +13635,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -12938,6 +13659,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -12959,6 +13683,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -12980,6 +13707,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13001,6 +13731,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13022,6 +13755,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13043,6 +13779,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13064,6 +13803,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13085,6 +13827,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13106,6 +13851,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13127,6 +13875,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13148,6 +13899,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13169,6 +13923,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13190,6 +13947,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13211,6 +13971,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13232,6 +13995,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13253,6 +14019,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13274,6 +14043,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13295,6 +14067,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13316,6 +14091,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13337,6 +14115,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13358,6 +14139,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13379,6 +14163,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13400,6 +14187,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13421,6 +14211,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13442,6 +14235,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13463,6 +14259,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13484,6 +14283,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13505,6 +14307,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13526,6 +14331,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13547,6 +14355,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13568,6 +14379,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13589,6 +14403,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13610,6 +14427,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13631,6 +14451,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13652,6 +14475,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13673,6 +14499,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13694,6 +14523,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13715,6 +14547,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_oauth2_test", @@ -13736,6 +14571,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13757,6 +14595,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13778,6 +14619,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13799,6 +14643,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13820,6 +14667,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13841,6 +14691,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13862,6 +14715,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13883,6 +14739,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13904,6 +14763,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13925,6 +14787,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13946,6 +14811,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13967,6 +14835,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -13988,6 +14859,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14009,6 +14883,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14030,6 +14907,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14051,6 +14931,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14072,6 +14955,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14093,6 +14979,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14114,6 +15003,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14135,6 +15027,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14156,6 +15051,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14177,6 +15075,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14198,6 +15099,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14219,6 +15123,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14240,6 +15147,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14261,6 +15171,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14282,6 +15195,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14303,6 +15219,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14324,6 +15243,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14345,6 +15267,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14366,6 +15291,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14387,6 +15315,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14408,6 +15339,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14429,6 +15363,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14450,6 +15387,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14471,6 +15411,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14492,6 +15435,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14513,6 +15459,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_test", @@ -14534,6 +15483,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14555,6 +15507,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14576,6 +15531,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14597,6 +15555,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14618,6 +15579,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14639,6 +15603,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14660,6 +15627,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14681,6 +15651,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14702,6 +15675,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14723,6 +15699,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14744,6 +15723,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14765,6 +15747,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14786,6 +15771,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14807,6 +15795,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14828,6 +15819,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14849,6 +15843,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14870,6 +15867,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14891,6 +15891,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14912,6 +15915,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14933,6 +15939,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14954,6 +15963,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14975,6 +15987,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -14996,6 +16011,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15017,6 +16035,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15038,6 +16059,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15059,6 +16083,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15080,6 +16107,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15101,6 +16131,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15122,6 +16155,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15143,6 +16179,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15164,6 +16203,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15185,6 +16227,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15206,6 +16251,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15227,6 +16275,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15248,6 +16299,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15269,6 +16323,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15290,6 +16347,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15311,6 +16371,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15332,6 +16395,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_test", @@ -15353,6 +16419,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15374,6 +16443,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15395,6 +16467,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15416,6 +16491,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15437,6 +16515,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15458,6 +16539,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15479,6 +16563,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15500,6 +16587,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15521,6 +16611,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15542,6 +16635,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15563,6 +16659,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15584,6 +16683,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15605,6 +16707,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15626,6 +16731,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15647,6 +16755,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15668,6 +16779,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15689,6 +16803,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15710,6 +16827,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15731,6 +16851,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15752,6 +16875,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15773,6 +16899,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15794,6 +16923,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15815,6 +16947,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15836,6 +16971,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15857,6 +16995,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15878,6 +17019,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15899,6 +17043,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15920,6 +17067,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15941,6 +17091,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15962,6 +17115,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -15983,6 +17139,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -16004,6 +17163,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -16025,6 +17187,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -16046,6 +17211,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -16067,6 +17235,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -16088,6 +17259,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -16109,6 +17283,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_test", @@ -16130,6 +17307,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16151,6 +17331,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16172,6 +17355,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16193,6 +17379,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16214,6 +17403,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16235,6 +17427,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16256,6 +17451,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16277,6 +17475,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16298,6 +17499,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16319,6 +17523,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16340,6 +17547,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16361,6 +17571,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16382,6 +17595,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16403,6 +17619,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16424,6 +17643,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16445,6 +17667,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16466,6 +17691,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16487,6 +17715,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16508,6 +17739,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16529,6 +17763,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16550,6 +17787,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16571,6 +17811,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16592,6 +17835,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16613,6 +17859,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16634,6 +17883,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16655,6 +17907,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16676,6 +17931,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16697,6 +17955,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16718,6 +17979,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16739,6 +18003,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16760,6 +18027,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16781,6 +18051,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16802,6 +18075,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16823,6 +18099,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16844,6 +18123,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16865,6 +18147,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16886,6 +18171,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16907,6 +18195,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16928,6 +18219,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -16950,6 +18244,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -16972,6 +18267,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -16994,6 +18290,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17016,6 +18313,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17038,6 +18336,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17060,6 +18359,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17082,6 +18382,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17104,6 +18405,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17126,6 +18428,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17148,6 +18451,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17170,6 +18474,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17192,6 +18499,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17214,6 +18522,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17236,6 +18545,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17258,6 +18568,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17280,6 +18591,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17302,6 +18614,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17324,6 +18637,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17346,6 +18660,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17368,6 +18683,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17390,6 +18706,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17412,6 +18729,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17434,6 +18752,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17456,6 +18775,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17478,6 +18798,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17500,6 +18821,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17522,6 +18844,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17544,6 +18867,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17566,6 +18890,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17588,6 +18913,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17610,6 +18936,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17632,6 +18959,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17654,6 +18982,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17676,6 +19005,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17698,6 +19028,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17720,6 +19051,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17742,6 +19074,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17764,6 +19097,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17786,6 +19120,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17808,6 +19143,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17830,6 +19166,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17852,6 +19189,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17874,6 +19212,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17896,6 +19235,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17918,6 +19258,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -17940,6 +19281,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -17962,6 +19304,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -17984,6 +19327,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18006,6 +19350,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18028,6 +19373,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18050,6 +19396,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18072,6 +19419,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18094,6 +19442,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18116,6 +19465,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18138,6 +19488,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18160,6 +19513,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18182,6 +19536,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18204,6 +19559,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18226,6 +19582,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18248,6 +19605,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18270,6 +19628,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18292,6 +19651,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18314,6 +19674,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18336,6 +19697,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18358,6 +19720,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18380,6 +19743,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18402,6 +19766,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18424,6 +19789,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18446,6 +19812,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18468,6 +19835,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18490,6 +19858,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18512,6 +19881,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18534,6 +19904,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18556,6 +19927,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18578,6 +19950,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18600,6 +19973,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18622,6 +19996,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18644,6 +20019,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18666,6 +20042,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18688,6 +20065,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18710,6 +20088,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18732,6 +20111,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18754,6 +20134,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18776,6 +20157,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18798,6 +20180,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18820,6 +20203,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18842,6 +20226,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18864,6 +20249,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_ssl_cert_test", @@ -18885,6 +20271,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -18906,6 +20295,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -18927,6 +20319,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -18948,6 +20343,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -18969,6 +20367,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -18990,6 +20391,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19011,6 +20415,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19032,6 +20439,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19053,6 +20463,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19074,6 +20487,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19095,6 +20511,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19116,6 +20535,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19137,6 +20559,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19158,6 +20583,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19179,6 +20607,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19200,6 +20631,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19221,6 +20655,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19242,6 +20679,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19263,6 +20703,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19284,6 +20727,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19305,6 +20751,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19326,6 +20775,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19347,6 +20799,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19368,6 +20823,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19389,6 +20847,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19410,6 +20871,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19431,6 +20895,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19452,6 +20919,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19473,6 +20943,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19494,6 +20967,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19515,6 +20991,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19536,6 +21015,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19557,6 +21039,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19578,6 +21063,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19599,6 +21087,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19620,6 +21111,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19641,6 +21135,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19662,6 +21159,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_ssl_proxy_test", @@ -19683,6 +21183,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19703,6 +21206,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19723,6 +21229,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19743,6 +21252,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19763,6 +21275,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19783,6 +21298,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19803,6 +21321,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19823,6 +21344,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19843,6 +21367,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19863,6 +21390,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19883,6 +21413,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19903,6 +21436,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19923,6 +21459,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19943,6 +21482,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19963,6 +21505,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -19983,6 +21528,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20003,6 +21551,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20023,6 +21574,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20043,6 +21597,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20063,6 +21620,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20083,6 +21643,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20103,6 +21666,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20123,6 +21689,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20143,6 +21712,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20163,6 +21735,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20183,6 +21758,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20203,6 +21781,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20223,6 +21804,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20243,6 +21827,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20263,6 +21850,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20283,6 +21873,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20303,6 +21896,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20323,6 +21919,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20343,6 +21942,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20363,6 +21965,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20383,6 +21988,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20403,6 +22011,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20423,6 +22034,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20443,6 +22057,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20463,6 +22080,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20483,6 +22103,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20503,6 +22126,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20523,6 +22149,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_test", @@ -20544,6 +22173,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20566,6 +22196,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20588,6 +22219,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20610,6 +22242,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20632,6 +22265,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20654,6 +22288,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20676,6 +22311,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20698,6 +22334,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20720,6 +22357,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20742,6 +22380,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20764,6 +22405,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20786,6 +22428,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20808,6 +22451,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20830,6 +22474,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20852,6 +22497,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20874,6 +22520,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20896,6 +22543,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20918,6 +22566,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20940,6 +22589,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20962,6 +22612,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -20984,6 +22635,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21006,6 +22658,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21028,6 +22681,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21050,6 +22704,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21072,6 +22727,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21094,6 +22750,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21116,6 +22773,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21138,6 +22796,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21160,6 +22819,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21182,6 +22842,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21204,6 +22865,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21226,6 +22888,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21248,6 +22911,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21270,6 +22934,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21292,6 +22957,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21314,6 +22980,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21336,6 +23003,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21358,6 +23026,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21380,6 +23049,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21402,6 +23072,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21424,6 +23095,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21446,6 +23118,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21468,6 +23141,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_census_nosec_test", @@ -21490,6 +23164,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21512,6 +23187,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21534,6 +23210,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21556,6 +23233,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21578,6 +23256,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21600,6 +23279,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21622,6 +23302,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21644,6 +23325,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21666,6 +23348,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21688,6 +23371,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21710,6 +23396,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21732,6 +23419,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21754,6 +23442,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21776,6 +23465,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21798,6 +23488,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21820,6 +23511,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21842,6 +23534,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21864,6 +23557,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21886,6 +23580,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21908,6 +23603,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21930,6 +23626,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21952,6 +23649,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21974,6 +23672,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -21996,6 +23695,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22018,6 +23718,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22040,6 +23741,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22062,6 +23764,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22084,6 +23787,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22106,6 +23810,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22128,6 +23833,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22150,6 +23856,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22172,6 +23879,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22194,6 +23902,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22216,6 +23925,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22238,6 +23948,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22260,6 +23971,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22282,6 +23994,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22304,6 +24017,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22326,6 +24040,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22348,6 +24063,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22370,6 +24086,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22392,6 +24109,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22414,6 +24132,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_compress_nosec_test", @@ -22435,6 +24154,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22455,6 +24177,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22475,6 +24200,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22495,6 +24223,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22515,6 +24246,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22535,6 +24269,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22555,6 +24292,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22575,6 +24315,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22595,6 +24338,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22615,6 +24361,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22635,6 +24384,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22655,6 +24407,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22675,6 +24430,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22695,6 +24453,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22715,6 +24476,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22735,6 +24499,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22755,6 +24522,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22775,6 +24545,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22795,6 +24568,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22815,6 +24591,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22835,6 +24614,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22855,6 +24637,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22875,6 +24660,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22895,6 +24683,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22915,6 +24706,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22935,6 +24729,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22955,6 +24752,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22975,6 +24775,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -22995,6 +24798,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23015,6 +24821,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23035,6 +24844,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23055,6 +24867,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23075,6 +24890,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23095,6 +24913,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23115,6 +24936,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23135,6 +24959,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23155,6 +24982,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23175,6 +25005,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_fd_nosec_test", @@ -23196,6 +25029,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23218,6 +25052,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23240,6 +25075,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23262,6 +25098,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23284,6 +25121,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23306,6 +25144,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23328,6 +25167,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23350,6 +25190,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23372,6 +25213,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23394,6 +25236,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23416,6 +25261,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23438,6 +25284,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23460,6 +25307,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23482,6 +25330,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23504,6 +25353,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23526,6 +25376,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23548,6 +25399,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23570,6 +25422,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23592,6 +25445,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23614,6 +25468,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23636,6 +25491,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23658,6 +25514,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23680,6 +25537,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23702,6 +25560,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23724,6 +25583,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23746,6 +25606,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23768,6 +25629,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23790,6 +25652,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23812,6 +25675,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23834,6 +25698,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23856,6 +25721,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23878,6 +25744,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23900,6 +25767,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23922,6 +25790,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23944,6 +25813,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23966,6 +25836,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -23988,6 +25859,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -24010,6 +25882,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -24032,6 +25905,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -24054,6 +25928,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -24076,6 +25951,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -24098,6 +25974,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -24120,6 +25997,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full_nosec_test", @@ -24139,6 +26017,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24155,6 +26036,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24171,6 +26055,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24187,6 +26074,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24203,6 +26093,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24219,6 +26112,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24235,6 +26131,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24251,6 +26150,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24267,6 +26169,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24283,6 +26188,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24299,6 +26207,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24315,6 +26226,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24331,6 +26245,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24347,6 +26264,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24363,6 +26283,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24379,6 +26302,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24395,6 +26321,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24411,6 +26340,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24427,6 +26359,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24443,6 +26378,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24459,6 +26397,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24475,6 +26416,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24491,6 +26435,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24507,6 +26454,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24523,6 +26473,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24539,6 +26492,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24555,6 +26511,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24571,6 +26530,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24587,6 +26549,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24603,6 +26568,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24619,6 +26587,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24635,6 +26606,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24651,6 +26625,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24667,6 +26644,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24683,6 +26663,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24699,6 +26682,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24715,6 +26701,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24731,6 +26720,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24747,6 +26739,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24763,6 +26758,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24779,6 +26777,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24795,6 +26796,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24811,6 +26815,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+pipe_nosec_test", @@ -24830,6 +26837,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -24852,6 +26860,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -24874,6 +26883,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -24896,6 +26906,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -24918,6 +26929,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -24940,6 +26952,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -24962,6 +26975,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -24984,6 +26998,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25006,6 +27021,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25028,6 +27044,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25050,6 +27069,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25072,6 +27092,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25094,6 +27115,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25116,6 +27138,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25138,6 +27161,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25160,6 +27184,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25182,6 +27207,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25204,6 +27230,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25226,6 +27253,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25248,6 +27276,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25270,6 +27299,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25292,6 +27322,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25314,6 +27345,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25336,6 +27368,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25358,6 +27391,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25380,6 +27414,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25402,6 +27437,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25424,6 +27460,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25446,6 +27483,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25468,6 +27506,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25490,6 +27529,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25512,6 +27552,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25534,6 +27575,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25556,6 +27598,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25578,6 +27621,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25600,6 +27644,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25622,6 +27667,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25644,6 +27690,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25666,6 +27713,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25688,6 +27736,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25710,6 +27759,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_full+trace_nosec_test", @@ -25731,6 +27781,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25752,6 +27805,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25773,6 +27829,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25794,6 +27853,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25815,6 +27877,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25836,6 +27901,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25857,6 +27925,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25878,6 +27949,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25899,6 +27973,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25920,6 +27997,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25941,6 +28021,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25962,6 +28045,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -25983,6 +28069,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26004,6 +28093,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26025,6 +28117,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26046,6 +28141,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26067,6 +28165,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26088,6 +28189,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26109,6 +28213,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26130,6 +28237,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26151,6 +28261,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26172,6 +28285,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26193,6 +28309,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26214,6 +28333,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26235,6 +28357,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26256,6 +28381,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26277,6 +28405,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26298,6 +28429,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26319,6 +28453,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26340,6 +28477,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26361,6 +28501,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26382,6 +28525,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26403,6 +28549,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26424,6 +28573,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26445,6 +28597,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26466,6 +28621,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26487,6 +28645,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26508,6 +28669,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26529,6 +28693,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26550,6 +28717,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26571,6 +28741,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26592,6 +28765,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26613,6 +28789,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_http_proxy_nosec_test", @@ -26635,6 +28814,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26657,6 +28837,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26679,6 +28860,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26701,6 +28883,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26723,6 +28906,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26745,6 +28929,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26767,6 +28952,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26789,6 +28975,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26811,6 +28998,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26833,6 +29021,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26855,6 +29046,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26877,6 +29069,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26899,6 +29092,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26921,6 +29115,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26943,6 +29138,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26965,6 +29161,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -26987,6 +29184,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27009,6 +29207,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27031,6 +29230,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27053,6 +29253,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27075,6 +29276,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27097,6 +29299,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27119,6 +29322,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27141,6 +29345,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27163,6 +29368,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27185,6 +29391,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27207,6 +29414,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27229,6 +29437,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27251,6 +29460,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27273,6 +29483,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27295,6 +29506,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27317,6 +29529,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27339,6 +29552,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27361,6 +29575,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27383,6 +29598,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27405,6 +29621,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27427,6 +29644,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27449,6 +29667,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27471,6 +29690,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27493,6 +29713,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27515,6 +29736,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27537,6 +29759,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27559,6 +29782,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "language": "c", "name": "h2_load_reporting_nosec_test", @@ -27580,6 +29804,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27601,6 +29828,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27622,6 +29852,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27643,6 +29876,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27664,6 +29900,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27685,6 +29924,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27706,6 +29948,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27727,6 +29972,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27748,6 +29996,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27769,6 +30020,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27790,6 +30044,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27811,6 +30068,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27832,6 +30092,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27853,6 +30116,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27874,6 +30140,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27895,6 +30164,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27916,6 +30188,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27937,6 +30212,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27958,6 +30236,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -27979,6 +30260,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28000,6 +30284,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28021,6 +30308,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28042,6 +30332,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28063,6 +30356,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28084,6 +30380,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28105,6 +30404,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28126,6 +30428,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28147,6 +30452,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28168,6 +30476,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28189,6 +30500,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28210,6 +30524,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28231,6 +30548,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28252,6 +30572,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28273,6 +30596,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28294,6 +30620,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28315,6 +30644,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28336,6 +30668,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_proxy_nosec_test", @@ -28357,6 +30692,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28378,6 +30716,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28399,6 +30740,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28420,6 +30764,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28441,6 +30788,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28462,6 +30812,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28483,6 +30836,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28504,6 +30860,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28525,6 +30884,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28546,6 +30908,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28567,6 +30932,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28588,6 +30956,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28609,6 +30980,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28630,6 +31004,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28651,6 +31028,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28672,6 +31052,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28693,6 +31076,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28714,6 +31100,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28735,6 +31124,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28756,6 +31148,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28777,6 +31172,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28798,6 +31196,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28819,6 +31220,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28840,6 +31244,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28861,6 +31268,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28882,6 +31292,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28903,6 +31316,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28924,6 +31340,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28945,6 +31364,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28966,6 +31388,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -28987,6 +31412,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -29008,6 +31436,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -29029,6 +31460,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -29050,6 +31484,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -29071,6 +31508,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -29092,6 +31532,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -29113,6 +31556,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -29134,6 +31580,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_nosec_test", @@ -29155,6 +31604,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29176,6 +31628,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29197,6 +31652,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29218,6 +31676,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29239,6 +31700,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29260,6 +31724,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29281,6 +31748,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29302,6 +31772,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29323,6 +31796,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29344,6 +31820,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29365,6 +31844,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29386,6 +31868,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29407,6 +31892,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29428,6 +31916,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29449,6 +31940,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29470,6 +31964,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29491,6 +31988,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29512,6 +32012,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29533,6 +32036,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29554,6 +32060,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29575,6 +32084,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29596,6 +32108,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29617,6 +32132,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29638,6 +32156,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29659,6 +32180,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29680,6 +32204,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29701,6 +32228,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29722,6 +32252,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29743,6 +32276,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29764,6 +32300,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29785,6 +32324,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29806,6 +32348,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29827,6 +32372,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29848,6 +32396,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29869,6 +32420,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29890,6 +32444,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair+trace_nosec_test", @@ -29913,6 +32470,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -29936,6 +32496,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -29959,6 +32522,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -29982,6 +32548,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30005,6 +32574,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30028,6 +32600,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30051,6 +32626,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30074,6 +32652,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30097,6 +32678,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30120,6 +32704,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30143,6 +32730,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30166,6 +32756,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30189,6 +32782,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30212,6 +32808,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30235,6 +32834,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30258,6 +32860,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30281,6 +32886,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30304,6 +32912,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30327,6 +32938,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30350,6 +32964,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30373,6 +32990,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30396,6 +33016,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30419,6 +33042,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30442,6 +33068,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30465,6 +33094,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30488,6 +33120,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30511,6 +33146,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30534,6 +33172,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30557,6 +33198,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30580,6 +33224,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30603,6 +33250,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30626,6 +33276,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30649,6 +33302,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30672,6 +33328,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30695,6 +33354,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30718,6 +33380,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30741,6 +33406,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30764,6 +33432,9 @@ "exclude_configs": [ "msan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -30785,6 +33456,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30805,6 +33479,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30825,6 +33502,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30845,6 +33525,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30865,6 +33548,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30885,6 +33571,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30905,6 +33594,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30925,6 +33617,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30945,6 +33640,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30965,6 +33663,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -30985,6 +33686,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31005,6 +33709,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31025,6 +33732,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31045,6 +33755,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31065,6 +33778,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31085,6 +33801,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31105,6 +33824,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31125,6 +33847,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31145,6 +33870,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31165,6 +33893,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31185,6 +33916,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31205,6 +33939,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31225,6 +33962,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31245,6 +33985,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31265,6 +34008,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31285,6 +34031,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31305,6 +34054,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31325,6 +34077,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31345,6 +34100,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31365,6 +34123,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31385,6 +34146,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31405,6 +34169,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31425,6 +34192,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31445,6 +34215,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31465,6 +34238,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31485,6 +34261,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31505,6 +34284,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31525,6 +34307,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31545,6 +34330,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31565,6 +34353,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31585,6 +34376,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -31605,6 +34399,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "h2_uds_nosec_test", @@ -32045,6 +34842,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32064,6 +34864,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32083,6 +34886,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32102,6 +34908,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32121,6 +34930,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32140,6 +34952,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32159,6 +34974,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32178,6 +34996,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32197,6 +35018,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32216,6 +35040,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32235,6 +35062,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32254,6 +35084,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32273,6 +35106,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32292,6 +35128,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32311,6 +35150,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32330,6 +35172,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32349,6 +35194,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32368,6 +35216,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32387,6 +35238,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32406,6 +35260,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32425,6 +35282,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32444,6 +35304,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32463,6 +35326,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32482,6 +35348,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32501,6 +35370,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32520,6 +35392,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32539,6 +35414,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32558,6 +35436,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32577,6 +35458,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32596,6 +35480,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32615,6 +35502,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32634,6 +35524,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32653,6 +35546,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32672,6 +35568,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32691,6 +35590,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32710,6 +35612,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32729,6 +35634,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32748,6 +35656,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32767,6 +35678,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32786,6 +35700,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32805,6 +35722,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32824,6 +35744,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32843,6 +35766,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32862,6 +35788,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32881,6 +35810,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32900,6 +35832,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32919,6 +35854,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32938,6 +35876,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32957,6 +35898,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32976,6 +35920,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32995,6 +35942,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33014,6 +35964,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33033,6 +35986,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33052,6 +36008,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33071,6 +36030,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33090,6 +36052,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33109,6 +36074,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33128,6 +36096,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33147,6 +36118,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33166,6 +36140,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33185,6 +36162,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33204,6 +36184,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33223,6 +36206,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33242,6 +36228,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33261,6 +36250,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33280,6 +36272,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33299,6 +36294,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33318,6 +36316,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33337,6 +36338,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33356,6 +36360,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33375,6 +36382,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33394,6 +36404,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33413,6 +36426,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33432,6 +36448,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33451,6 +36470,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33470,6 +36492,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33489,6 +36514,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33508,6 +36536,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33527,6 +36558,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33546,6 +36580,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33565,6 +36602,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33584,6 +36624,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33603,6 +36646,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33622,6 +36668,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33641,6 +36690,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33660,6 +36712,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33679,6 +36734,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33698,6 +36756,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33717,6 +36778,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33736,6 +36800,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33755,6 +36822,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33774,6 +36844,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33793,6 +36866,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33812,6 +36888,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33831,6 +36910,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33850,6 +36932,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33869,6 +36954,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33888,6 +36976,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33907,6 +36998,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33926,6 +37020,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33945,6 +37042,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33964,6 +37064,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33983,6 +37086,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34002,6 +37108,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34021,6 +37130,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34040,6 +37152,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34059,6 +37174,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34078,6 +37196,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34097,6 +37218,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34116,6 +37240,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34135,6 +37262,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34154,6 +37284,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34173,6 +37306,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34192,6 +37328,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34211,6 +37350,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34230,6 +37372,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34249,6 +37394,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34268,6 +37416,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34287,6 +37438,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34306,6 +37460,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34325,6 +37482,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34344,6 +37504,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34363,6 +37526,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34382,6 +37548,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34401,6 +37570,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34420,6 +37592,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34439,6 +37614,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34458,6 +37636,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34477,6 +37658,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34496,6 +37680,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34515,6 +37702,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34534,6 +37724,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34553,6 +37746,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34572,6 +37768,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34591,6 +37790,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34610,6 +37812,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34629,6 +37834,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34648,6 +37856,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34667,6 +37878,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34686,6 +37900,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34705,6 +37922,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34724,6 +37944,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34743,6 +37966,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34762,6 +37988,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34781,6 +38010,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34800,6 +38032,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34819,6 +38054,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34838,6 +38076,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34857,6 +38098,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34876,6 +38120,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34895,6 +38142,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34914,6 +38164,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34933,6 +38186,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34952,6 +38208,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34971,6 +38230,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34990,6 +38252,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35009,6 +38274,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35028,6 +38296,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35047,6 +38318,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35066,6 +38340,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35085,6 +38362,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35104,6 +38384,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35123,6 +38406,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35142,6 +38428,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35161,6 +38450,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35180,6 +38472,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35199,6 +38494,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35218,6 +38516,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35237,6 +38538,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35256,6 +38560,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35275,6 +38582,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35294,6 +38604,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35313,6 +38626,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35332,6 +38648,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35351,6 +38670,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35370,6 +38692,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35389,6 +38714,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35408,6 +38736,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35427,6 +38758,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35446,6 +38780,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35465,6 +38802,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35484,6 +38824,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35503,6 +38846,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35522,6 +38868,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35541,6 +38890,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35560,6 +38912,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35579,6 +38934,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35598,6 +38956,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35617,6 +38978,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35636,6 +39000,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35655,6 +39022,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35674,6 +39044,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35693,6 +39066,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35712,6 +39088,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35731,6 +39110,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35750,6 +39132,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35769,6 +39154,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35788,6 +39176,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35807,6 +39198,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35826,6 +39220,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35845,6 +39242,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35864,6 +39264,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35883,6 +39286,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35902,6 +39308,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35921,6 +39330,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35940,6 +39352,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35959,6 +39374,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35978,6 +39396,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35997,6 +39418,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36016,6 +39440,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36035,6 +39462,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36054,6 +39484,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36073,6 +39506,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36092,6 +39528,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36111,6 +39550,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36130,6 +39572,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36149,6 +39594,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36168,6 +39616,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36187,6 +39638,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36206,6 +39660,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36225,6 +39682,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36244,6 +39704,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36263,6 +39726,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36282,6 +39748,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36301,6 +39770,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36320,6 +39792,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36339,6 +39814,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36358,6 +39836,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36377,6 +39858,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36396,6 +39880,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36415,6 +39902,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36434,6 +39924,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36453,6 +39946,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36472,6 +39968,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36491,6 +39990,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36510,6 +40012,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36529,6 +40034,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36548,6 +40056,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36567,6 +40078,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36586,6 +40100,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36605,6 +40122,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36624,6 +40144,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36643,6 +40166,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36662,6 +40188,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36681,6 +40210,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36700,6 +40232,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36719,6 +40254,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36738,6 +40276,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36757,6 +40298,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36776,6 +40320,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36795,6 +40342,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36814,6 +40364,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36833,6 +40386,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36852,6 +40408,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36871,6 +40430,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36890,6 +40452,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36909,6 +40474,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36928,6 +40496,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36947,6 +40518,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36966,6 +40540,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36985,6 +40562,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37004,6 +40584,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37023,6 +40606,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37042,6 +40628,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37061,6 +40650,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37080,6 +40672,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37099,6 +40694,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37118,6 +40716,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37137,6 +40738,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37156,6 +40760,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37175,6 +40782,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37194,6 +40804,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37213,6 +40826,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37232,6 +40848,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37251,6 +40870,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37270,6 +40892,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37289,6 +40914,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37308,6 +40936,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37327,6 +40958,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37346,6 +40980,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37365,6 +41002,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37384,6 +41024,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37403,6 +41046,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37422,6 +41068,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37441,6 +41090,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37460,6 +41112,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37479,6 +41134,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37498,6 +41156,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37517,6 +41178,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37536,6 +41200,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37555,6 +41222,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37574,6 +41244,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37593,6 +41266,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37612,6 +41288,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37631,6 +41310,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37650,6 +41332,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37669,6 +41354,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37688,6 +41376,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37707,6 +41398,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37726,6 +41420,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37745,6 +41442,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37764,6 +41464,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37783,6 +41486,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37802,6 +41508,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37821,6 +41530,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37840,6 +41552,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37859,6 +41574,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37878,6 +41596,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37897,6 +41618,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37916,6 +41640,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37935,6 +41662,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37954,6 +41684,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37973,6 +41706,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37992,6 +41728,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38011,6 +41750,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38030,6 +41772,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38049,6 +41794,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38068,6 +41816,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38087,6 +41838,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38106,6 +41860,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38125,6 +41882,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38144,6 +41904,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38163,6 +41926,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38182,6 +41948,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38201,6 +41970,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38220,6 +41992,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38239,6 +42014,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38258,6 +42036,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38277,6 +42058,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38296,6 +42080,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38315,6 +42102,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38334,6 +42124,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38353,6 +42146,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38372,6 +42168,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38391,6 +42190,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38410,6 +42212,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38429,6 +42234,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38448,6 +42256,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38467,6 +42278,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38486,6 +42300,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38505,6 +42322,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38524,6 +42344,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38543,6 +42366,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38562,6 +42388,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38581,6 +42410,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38600,6 +42432,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38619,6 +42454,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38638,6 +42476,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38657,6 +42498,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38676,6 +42520,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38695,6 +42542,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38714,6 +42564,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38733,6 +42586,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38752,6 +42608,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38771,6 +42630,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38790,6 +42652,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38809,6 +42674,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38828,6 +42696,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38847,6 +42718,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38866,6 +42740,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38885,6 +42762,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38904,6 +42784,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38923,6 +42806,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38942,6 +42828,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38961,6 +42850,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38980,6 +42872,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38999,6 +42894,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39018,6 +42916,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39037,6 +42938,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39056,6 +42960,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39075,6 +42982,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39094,6 +43004,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39113,6 +43026,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39132,6 +43048,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39151,6 +43070,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39170,6 +43092,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39189,6 +43114,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39208,6 +43136,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39227,6 +43158,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39246,6 +43180,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39265,6 +43202,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39284,6 +43224,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39303,6 +43246,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39322,6 +43268,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39341,6 +43290,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39360,6 +43312,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39379,6 +43334,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39398,6 +43356,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39417,6 +43378,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39436,6 +43400,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39455,6 +43422,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39474,6 +43444,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39493,6 +43466,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39512,6 +43488,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39531,6 +43510,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39550,6 +43532,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39569,6 +43554,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39588,6 +43576,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39607,6 +43598,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39626,6 +43620,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39645,6 +43642,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39664,6 +43664,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39683,6 +43686,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39702,6 +43708,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39721,6 +43730,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39740,6 +43752,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39759,6 +43774,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39778,6 +43796,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39797,6 +43818,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39816,6 +43840,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39835,6 +43862,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39854,6 +43884,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39873,6 +43906,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39892,6 +43928,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39911,6 +43950,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39930,6 +43972,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39949,6 +43994,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39968,6 +44016,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39987,6 +44038,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40006,6 +44060,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40025,6 +44082,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40044,6 +44104,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40063,6 +44126,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40082,6 +44148,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40101,6 +44170,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40120,6 +44192,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40139,6 +44214,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40158,6 +44236,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40177,6 +44258,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40196,6 +44280,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40215,6 +44302,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40234,6 +44324,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40253,6 +44346,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40272,6 +44368,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40291,6 +44390,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40310,6 +44412,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40329,6 +44434,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40348,6 +44456,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40367,6 +44478,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40386,6 +44500,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40405,6 +44522,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40424,6 +44544,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40443,6 +44566,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40462,6 +44588,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40481,6 +44610,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40500,6 +44632,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40519,6 +44654,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40538,6 +44676,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40557,6 +44698,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40576,6 +44720,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40595,6 +44742,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40614,6 +44764,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40633,6 +44786,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40652,6 +44808,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40671,6 +44830,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40690,6 +44852,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40709,6 +44874,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40728,6 +44896,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40747,6 +44918,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40766,6 +44940,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40785,6 +44962,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40804,6 +44984,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40823,6 +45006,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40842,6 +45028,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40861,6 +45050,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40880,6 +45072,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40899,6 +45094,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40918,6 +45116,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40937,6 +45138,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40956,6 +45160,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40975,6 +45182,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40994,6 +45204,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41013,6 +45226,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41032,6 +45248,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41051,6 +45270,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41070,6 +45292,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41089,6 +45314,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41108,6 +45336,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41127,6 +45358,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41146,6 +45380,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41165,6 +45402,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41184,6 +45424,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41203,6 +45446,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41222,6 +45468,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41241,6 +45490,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41260,6 +45512,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41279,6 +45534,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41298,6 +45556,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41317,6 +45578,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41336,6 +45600,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41355,6 +45622,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41374,6 +45644,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41393,6 +45666,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41412,6 +45688,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41431,6 +45710,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41450,6 +45732,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41469,6 +45754,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41488,6 +45776,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41507,6 +45798,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41526,6 +45820,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41545,6 +45842,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41564,6 +45864,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41583,6 +45886,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41602,6 +45908,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41621,6 +45930,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41640,6 +45952,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41659,6 +45974,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41678,6 +45996,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41697,6 +46018,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41716,6 +46040,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41735,6 +46062,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41754,6 +46084,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41773,6 +46106,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41792,6 +46128,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41811,6 +46150,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41830,6 +46172,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41849,6 +46194,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41868,6 +46216,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41887,6 +46238,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41906,6 +46260,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41925,6 +46282,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41944,6 +46304,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41963,6 +46326,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41982,6 +46348,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42001,6 +46370,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42020,6 +46392,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42039,6 +46414,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42058,6 +46436,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42077,6 +46458,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42096,6 +46480,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42115,6 +46502,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42134,6 +46524,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42153,6 +46546,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42172,6 +46568,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42191,6 +46590,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42210,6 +46612,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42229,6 +46634,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42248,6 +46656,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42267,6 +46678,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42286,6 +46700,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42305,6 +46722,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42324,6 +46744,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42343,6 +46766,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42362,6 +46788,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42381,6 +46810,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42400,6 +46832,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42419,6 +46854,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42438,6 +46876,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42457,6 +46898,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42476,6 +46920,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42495,6 +46942,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42514,6 +46964,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42533,6 +46986,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42552,6 +47008,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42571,6 +47030,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42590,6 +47052,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42609,6 +47074,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42628,6 +47096,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42647,6 +47118,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42666,6 +47140,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42685,6 +47162,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42704,6 +47184,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42723,6 +47206,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42742,6 +47228,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42761,6 +47250,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42780,6 +47272,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42799,6 +47294,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42818,6 +47316,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42837,6 +47338,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42856,6 +47360,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42875,6 +47382,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42894,6 +47404,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42913,6 +47426,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42932,6 +47448,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42951,6 +47470,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42970,6 +47492,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42989,6 +47514,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43008,6 +47536,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43027,6 +47558,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43046,6 +47580,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43065,6 +47602,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43084,6 +47624,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43103,6 +47646,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43122,6 +47668,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43141,6 +47690,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43160,6 +47712,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43179,6 +47734,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43198,6 +47756,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43217,6 +47778,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43236,6 +47800,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43255,6 +47822,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43274,6 +47844,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43293,6 +47866,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43312,6 +47888,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43331,6 +47910,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43350,6 +47932,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43369,6 +47954,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43388,6 +47976,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43407,6 +47998,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43426,6 +48020,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43445,6 +48042,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43464,6 +48064,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43483,6 +48086,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43502,6 +48108,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43521,6 +48130,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43540,6 +48152,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43559,6 +48174,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43578,6 +48196,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43597,6 +48218,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43616,6 +48240,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43635,6 +48262,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43654,6 +48284,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43673,6 +48306,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43692,6 +48328,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43711,6 +48350,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43730,6 +48372,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43749,6 +48394,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43768,6 +48416,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43787,6 +48438,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43806,6 +48460,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43825,6 +48482,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43844,6 +48504,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43863,6 +48526,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43882,6 +48548,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43901,6 +48570,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43920,6 +48592,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43939,6 +48614,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43958,6 +48636,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43977,6 +48658,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43996,6 +48680,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44015,6 +48702,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44034,6 +48724,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44053,6 +48746,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44072,6 +48768,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44091,6 +48790,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44110,6 +48812,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44129,6 +48834,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44148,6 +48856,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44167,6 +48878,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44186,6 +48900,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44205,6 +48922,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44224,6 +48944,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44243,6 +48966,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44262,6 +48988,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44281,6 +49010,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44300,6 +49032,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44319,6 +49054,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44338,6 +49076,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44357,6 +49098,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44376,6 +49120,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44395,6 +49142,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44414,6 +49164,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44433,6 +49186,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44452,6 +49208,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44471,6 +49230,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44490,6 +49252,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44509,6 +49274,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44528,6 +49296,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44547,6 +49318,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44566,6 +49340,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44585,6 +49362,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44604,6 +49384,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44623,6 +49406,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44642,6 +49428,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44661,6 +49450,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44680,6 +49472,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44699,6 +49494,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44718,6 +49516,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44737,6 +49538,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44756,6 +49560,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44775,6 +49582,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44794,6 +49604,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44813,6 +49626,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44832,6 +49648,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44851,6 +49670,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44870,6 +49692,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44889,6 +49714,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44908,6 +49736,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44927,6 +49758,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44946,6 +49780,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44965,6 +49802,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44984,6 +49824,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45003,6 +49846,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45022,6 +49868,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45041,6 +49890,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45060,6 +49912,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45079,6 +49934,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45098,6 +49956,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45117,6 +49978,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45136,6 +50000,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45155,6 +50022,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45174,6 +50044,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45193,6 +50066,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45212,6 +50088,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45231,6 +50110,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45250,6 +50132,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45269,6 +50154,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45288,6 +50176,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45307,6 +50198,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45326,6 +50220,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45345,6 +50242,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45364,6 +50264,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45383,6 +50286,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45402,6 +50308,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45421,6 +50330,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45440,6 +50352,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45459,6 +50374,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45478,6 +50396,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45497,6 +50418,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45516,6 +50440,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45535,6 +50462,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45554,6 +50484,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45573,6 +50506,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45592,6 +50528,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45611,6 +50550,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45630,6 +50572,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45649,6 +50594,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45668,6 +50616,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45687,6 +50638,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45706,6 +50660,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45725,6 +50682,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45744,6 +50704,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45763,6 +50726,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45782,6 +50748,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45801,6 +50770,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45820,6 +50792,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45839,6 +50814,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45858,6 +50836,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45877,6 +50858,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45896,6 +50880,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45915,6 +50902,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45934,6 +50924,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45953,6 +50946,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45972,6 +50968,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45991,6 +50990,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46010,6 +51012,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46029,6 +51034,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46048,6 +51056,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46067,6 +51078,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46086,6 +51100,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46105,6 +51122,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46124,6 +51144,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46143,6 +51166,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46162,6 +51188,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46181,6 +51210,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46200,6 +51232,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46219,6 +51254,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46238,6 +51276,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46257,6 +51298,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46276,6 +51320,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46295,6 +51342,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46314,6 +51364,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46333,6 +51386,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46352,6 +51408,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46371,6 +51430,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46390,6 +51452,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46409,6 +51474,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46428,6 +51496,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46447,6 +51518,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46466,6 +51540,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46485,6 +51562,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46504,6 +51584,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46523,6 +51606,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46542,6 +51628,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46561,6 +51650,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46580,6 +51672,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46599,6 +51694,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46618,6 +51716,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46637,6 +51738,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46656,6 +51760,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46675,6 +51782,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46694,6 +51804,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46713,6 +51826,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46732,6 +51848,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46751,6 +51870,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46770,6 +51892,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46789,6 +51914,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46808,6 +51936,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46827,6 +51958,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46846,6 +51980,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46865,6 +52002,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46884,6 +52024,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46903,6 +52046,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46922,6 +52068,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46941,6 +52090,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46960,6 +52112,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46979,6 +52134,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46998,6 +52156,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47017,6 +52178,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47036,6 +52200,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47055,6 +52222,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47074,6 +52244,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47093,6 +52266,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47112,6 +52288,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47131,6 +52310,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47150,6 +52332,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47169,6 +52354,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47188,6 +52376,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47207,6 +52398,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47226,6 +52420,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47245,6 +52442,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47264,6 +52464,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47283,6 +52486,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47302,6 +52508,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47321,6 +52530,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47340,6 +52552,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47359,6 +52574,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47378,6 +52596,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47397,6 +52618,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47416,6 +52640,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47435,6 +52662,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47454,6 +52684,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47473,6 +52706,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47492,6 +52728,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47511,6 +52750,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47530,6 +52772,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47549,6 +52794,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47568,6 +52816,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47587,6 +52838,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47606,6 +52860,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47625,6 +52882,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47644,6 +52904,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47663,6 +52926,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47682,6 +52948,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47701,6 +52970,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47720,6 +52992,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47739,6 +53014,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47758,6 +53036,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47777,6 +53058,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47796,6 +53080,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47815,6 +53102,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47834,6 +53124,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47853,6 +53146,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47872,6 +53168,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47891,6 +53190,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47910,6 +53212,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47929,6 +53234,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47948,6 +53256,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47967,6 +53278,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -47986,6 +53300,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48005,6 +53322,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48024,6 +53344,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48043,6 +53366,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48062,6 +53388,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48081,6 +53410,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48100,6 +53432,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48119,6 +53454,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48138,6 +53476,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48157,6 +53498,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48176,6 +53520,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48195,6 +53542,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48214,6 +53564,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48233,6 +53586,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48252,6 +53608,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48271,6 +53630,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48290,6 +53652,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48309,6 +53674,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48328,6 +53696,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48347,6 +53718,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48366,6 +53740,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48385,6 +53762,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48404,6 +53784,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48423,6 +53806,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48442,6 +53828,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48461,6 +53850,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48480,6 +53872,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48499,6 +53894,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48518,6 +53916,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48537,6 +53938,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48556,6 +53960,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48575,6 +53982,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48594,6 +54004,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48613,6 +54026,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48632,6 +54048,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48651,6 +54070,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48670,6 +54092,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48689,6 +54114,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48708,6 +54136,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48727,6 +54158,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48746,6 +54180,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48765,6 +54202,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48784,6 +54224,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48803,6 +54246,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48822,6 +54268,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48841,6 +54290,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48860,6 +54312,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48879,6 +54334,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48898,6 +54356,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48917,6 +54378,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48936,6 +54400,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48955,6 +54422,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48974,6 +54444,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -48993,6 +54466,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49012,6 +54488,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49031,6 +54510,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49050,6 +54532,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49069,6 +54554,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49088,6 +54576,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49107,6 +54598,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49126,6 +54620,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49145,6 +54642,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49164,6 +54664,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49183,6 +54686,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49202,6 +54708,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49221,6 +54730,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49240,6 +54752,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49259,6 +54774,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49278,6 +54796,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49297,6 +54818,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49316,6 +54840,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49335,6 +54862,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49354,6 +54884,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49373,6 +54906,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49392,6 +54928,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49411,6 +54950,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49430,6 +54972,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49449,6 +54994,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49468,6 +55016,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49487,6 +55038,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49506,6 +55060,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49525,6 +55082,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49544,6 +55104,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49563,6 +55126,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49582,6 +55148,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49601,6 +55170,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49620,6 +55192,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49639,6 +55214,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49658,6 +55236,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49677,6 +55258,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49696,6 +55280,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49715,6 +55302,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49734,6 +55324,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49753,6 +55346,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49772,6 +55368,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49791,6 +55390,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49810,6 +55412,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49829,6 +55434,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49848,6 +55456,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49867,6 +55478,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49886,6 +55500,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49905,6 +55522,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49924,6 +55544,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49943,6 +55566,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49962,6 +55588,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -49981,6 +55610,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50000,6 +55632,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50019,6 +55654,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50038,6 +55676,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50057,6 +55698,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50076,6 +55720,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50095,6 +55742,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50114,6 +55764,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50133,6 +55786,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50152,6 +55808,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50171,6 +55830,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50190,6 +55852,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50209,6 +55874,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50228,6 +55896,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50247,6 +55918,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50266,6 +55940,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50285,6 +55962,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50304,6 +55984,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50323,6 +56006,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50342,6 +56028,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50361,6 +56050,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50380,6 +56072,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50399,6 +56094,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50418,6 +56116,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50437,6 +56138,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50456,6 +56160,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50475,6 +56182,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50494,6 +56204,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50513,6 +56226,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50532,6 +56248,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50551,6 +56270,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50570,6 +56292,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50589,6 +56314,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50608,6 +56336,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50627,6 +56358,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50646,6 +56380,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50665,6 +56402,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50684,6 +56424,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50703,6 +56446,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50722,6 +56468,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50741,6 +56490,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50760,6 +56512,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50779,6 +56534,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50798,6 +56556,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50817,6 +56578,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50836,6 +56600,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50855,6 +56622,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50874,6 +56644,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50893,6 +56666,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50912,6 +56688,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50931,6 +56710,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50950,6 +56732,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50969,6 +56754,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -50988,6 +56776,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51007,6 +56798,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51026,6 +56820,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51045,6 +56842,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51064,6 +56864,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51083,6 +56886,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51102,6 +56908,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51121,6 +56930,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51140,6 +56952,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51159,6 +56974,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51178,6 +56996,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51197,6 +57018,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51216,6 +57040,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51235,6 +57062,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51254,6 +57084,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51273,6 +57106,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51292,6 +57128,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51311,6 +57150,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51330,6 +57172,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51349,6 +57194,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51368,6 +57216,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51387,6 +57238,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51406,6 +57260,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51425,6 +57282,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51444,6 +57304,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51463,6 +57326,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51482,6 +57348,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51501,6 +57370,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51520,6 +57392,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51539,6 +57414,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51558,6 +57436,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51577,6 +57458,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51596,6 +57480,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51615,6 +57502,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51634,6 +57524,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51653,6 +57546,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51672,6 +57568,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51691,6 +57590,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51710,6 +57612,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51729,6 +57634,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51748,6 +57656,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51767,6 +57678,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51786,6 +57700,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51805,6 +57722,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51824,6 +57744,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51843,6 +57766,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51862,6 +57788,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51881,6 +57810,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51900,6 +57832,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51919,6 +57854,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51938,6 +57876,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51957,6 +57898,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51976,6 +57920,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -51995,6 +57942,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52014,6 +57964,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52033,6 +57986,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52052,6 +58008,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52071,6 +58030,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52090,6 +58052,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52109,6 +58074,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52128,6 +58096,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52147,6 +58118,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52166,6 +58140,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52185,6 +58162,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52204,6 +58184,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52223,6 +58206,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52242,6 +58228,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52261,6 +58250,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52280,6 +58272,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52299,6 +58294,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52318,6 +58316,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52337,6 +58338,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52356,6 +58360,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52375,6 +58382,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52394,6 +58404,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52413,6 +58426,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52432,6 +58448,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52451,6 +58470,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52470,6 +58492,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52489,6 +58514,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52508,6 +58536,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52527,6 +58558,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52546,6 +58580,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52565,6 +58602,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52584,6 +58624,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52603,6 +58646,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52622,6 +58668,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52641,6 +58690,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52660,6 +58712,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52679,6 +58734,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52698,6 +58756,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52717,6 +58778,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52736,6 +58800,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52755,6 +58822,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52774,6 +58844,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52793,6 +58866,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52812,6 +58888,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52831,6 +58910,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52850,6 +58932,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52869,6 +58954,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52888,6 +58976,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52907,6 +58998,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52926,6 +59020,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52945,6 +59042,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52964,6 +59064,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -52983,6 +59086,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53002,6 +59108,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53021,6 +59130,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53040,6 +59152,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53059,6 +59174,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53078,6 +59196,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53097,6 +59218,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53116,6 +59240,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53135,6 +59262,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53154,6 +59284,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53173,6 +59306,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53192,6 +59328,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53211,6 +59350,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53230,6 +59372,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53249,6 +59394,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53268,6 +59416,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53287,6 +59438,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53306,6 +59460,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53325,6 +59482,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53344,6 +59504,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53363,6 +59526,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53382,6 +59548,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53401,6 +59570,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53420,6 +59592,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53439,6 +59614,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53458,6 +59636,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53477,6 +59658,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53496,6 +59680,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53515,6 +59702,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53534,6 +59724,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53553,6 +59746,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53572,6 +59768,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53591,6 +59790,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53610,6 +59812,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53629,6 +59834,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53648,6 +59856,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53667,6 +59878,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53686,6 +59900,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53705,6 +59922,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53724,6 +59944,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53743,6 +59966,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53762,6 +59988,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53781,6 +60010,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53800,6 +60032,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53819,6 +60054,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53838,6 +60076,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53857,6 +60098,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53876,6 +60120,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53895,6 +60142,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53914,6 +60164,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53933,6 +60186,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53952,6 +60208,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53971,6 +60230,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -53990,6 +60252,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54009,6 +60274,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54028,6 +60296,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54047,6 +60318,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54066,6 +60340,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54085,6 +60362,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54104,6 +60384,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54123,6 +60406,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54142,6 +60428,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54161,6 +60450,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54180,6 +60472,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54199,6 +60494,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54218,6 +60516,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54237,6 +60538,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54256,6 +60560,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54275,6 +60582,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54294,6 +60604,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54313,6 +60626,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54332,6 +60648,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54351,6 +60670,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54370,6 +60692,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54389,6 +60714,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54408,6 +60736,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54427,6 +60758,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54446,6 +60780,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54465,6 +60802,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54484,6 +60824,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54503,6 +60846,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54522,6 +60868,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54541,6 +60890,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54560,6 +60912,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54579,6 +60934,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54598,6 +60956,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54617,6 +60978,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54636,6 +61000,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54655,6 +61022,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54674,6 +61044,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54693,6 +61066,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54712,6 +61088,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54731,6 +61110,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54750,6 +61132,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54769,6 +61154,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54788,6 +61176,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54807,6 +61198,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54826,6 +61220,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54845,6 +61242,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54864,6 +61264,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54883,6 +61286,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54902,6 +61308,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54921,6 +61330,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54940,6 +61352,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54959,6 +61374,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54978,6 +61396,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -54997,6 +61418,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55016,6 +61440,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55035,6 +61462,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55054,6 +61484,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55073,6 +61506,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55092,6 +61528,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55111,6 +61550,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55130,6 +61572,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55149,6 +61594,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55168,6 +61616,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55187,6 +61638,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55206,6 +61660,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55225,6 +61682,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55244,6 +61704,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55263,6 +61726,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55282,6 +61748,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55301,6 +61770,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55320,6 +61792,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55339,6 +61814,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55358,6 +61836,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55377,6 +61858,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55396,6 +61880,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55415,6 +61902,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55434,6 +61924,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55453,6 +61946,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55472,6 +61968,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55491,6 +61990,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55510,6 +62012,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55529,6 +62034,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55548,6 +62056,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55567,6 +62078,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55586,6 +62100,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55605,6 +62122,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55624,6 +62144,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55643,6 +62166,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55662,6 +62188,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55681,6 +62210,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55700,6 +62232,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55719,6 +62254,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55738,6 +62276,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55757,6 +62298,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55776,6 +62320,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55795,6 +62342,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55814,6 +62364,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55833,6 +62386,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55852,6 +62408,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55871,6 +62430,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55890,6 +62452,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55909,6 +62474,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55928,6 +62496,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55947,6 +62518,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55966,6 +62540,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -55985,6 +62562,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56004,6 +62584,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56023,6 +62606,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56042,6 +62628,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56061,6 +62650,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56080,6 +62672,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56099,6 +62694,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56118,6 +62716,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56137,6 +62738,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56156,6 +62760,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56175,6 +62782,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56194,6 +62804,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56213,6 +62826,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56232,6 +62848,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56251,6 +62870,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56270,6 +62892,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56289,6 +62914,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56308,6 +62936,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56327,6 +62958,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56346,6 +62980,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56365,6 +63002,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56384,6 +63024,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56403,6 +63046,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56422,6 +63068,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56441,6 +63090,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56460,6 +63112,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56479,6 +63134,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56498,6 +63156,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56517,6 +63178,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56536,6 +63200,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56555,6 +63222,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56574,6 +63244,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56593,6 +63266,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56612,6 +63288,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56631,6 +63310,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56650,6 +63332,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56669,6 +63354,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56688,6 +63376,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56707,6 +63398,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56726,6 +63420,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56745,6 +63442,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56764,6 +63464,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56783,6 +63486,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56802,6 +63508,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56821,6 +63530,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56840,6 +63552,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56859,6 +63574,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56878,6 +63596,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56897,6 +63618,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56916,6 +63640,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56935,6 +63662,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56954,6 +63684,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56973,6 +63706,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -56992,6 +63728,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57011,6 +63750,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57030,6 +63772,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57049,6 +63794,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57068,6 +63816,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57087,6 +63838,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57106,6 +63860,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57125,6 +63882,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57144,6 +63904,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57163,6 +63926,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57182,6 +63948,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57201,6 +63970,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57220,6 +63992,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57239,6 +64014,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57258,6 +64036,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57277,6 +64058,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57296,6 +64080,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57315,6 +64102,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57334,6 +64124,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57353,6 +64146,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57372,6 +64168,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57391,6 +64190,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57410,6 +64212,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57429,6 +64234,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57448,6 +64256,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57467,6 +64278,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57486,6 +64300,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57505,6 +64322,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57524,6 +64344,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57543,6 +64366,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57562,6 +64388,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57581,6 +64410,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57600,6 +64432,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57619,6 +64454,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57638,6 +64476,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57657,6 +64498,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57676,6 +64520,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57695,6 +64542,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57714,6 +64564,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57733,6 +64586,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57752,6 +64608,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57771,6 +64630,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57790,6 +64652,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57809,6 +64674,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57828,6 +64696,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57847,6 +64718,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57866,6 +64740,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57885,6 +64762,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57904,6 +64784,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57923,6 +64806,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57942,6 +64828,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57961,6 +64850,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57980,6 +64872,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -57999,6 +64894,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -58018,6 +64916,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -58037,6 +64938,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -58056,6 +64960,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -58075,6 +64982,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58094,6 +65004,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58113,6 +65026,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58132,6 +65048,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58151,6 +65070,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58170,6 +65092,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58189,6 +65114,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58208,6 +65136,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58227,6 +65158,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58246,6 +65180,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58265,6 +65202,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58284,6 +65224,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58303,6 +65246,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58322,6 +65268,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58341,6 +65290,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58360,6 +65312,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58379,6 +65334,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58398,6 +65356,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58417,6 +65378,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58436,6 +65400,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58455,6 +65422,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58474,6 +65444,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58493,6 +65466,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58512,6 +65488,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58531,6 +65510,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58550,6 +65532,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58569,6 +65554,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58588,6 +65576,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58607,6 +65598,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58626,6 +65620,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58645,6 +65642,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58664,6 +65664,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58683,6 +65686,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58702,6 +65708,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58721,6 +65730,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58740,6 +65752,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58759,6 +65774,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58778,6 +65796,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58797,6 +65818,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58816,6 +65840,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58835,6 +65862,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58854,6 +65884,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58873,6 +65906,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58892,6 +65928,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58911,6 +65950,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58930,6 +65972,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58949,6 +65994,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58968,6 +66016,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -58987,6 +66038,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59006,6 +66060,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59025,6 +66082,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59044,6 +66104,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59063,6 +66126,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59082,6 +66148,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59101,6 +66170,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59120,6 +66192,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59139,6 +66214,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59158,6 +66236,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59177,6 +66258,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59196,6 +66280,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59215,6 +66302,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59234,6 +66324,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59253,6 +66346,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59272,6 +66368,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59291,6 +66390,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59310,6 +66412,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59329,6 +66434,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59348,6 +66456,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59367,6 +66478,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59386,6 +66500,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59405,6 +66522,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59424,6 +66544,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59443,6 +66566,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59462,6 +66588,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59481,6 +66610,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59500,6 +66632,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59519,6 +66654,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59538,6 +66676,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59557,6 +66698,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59576,6 +66720,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59595,6 +66742,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59614,6 +66764,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59633,6 +66786,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59652,6 +66808,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59671,6 +66830,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59690,6 +66852,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59709,6 +66874,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59728,6 +66896,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59747,6 +66918,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59766,6 +66940,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59785,6 +66962,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59804,6 +66984,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59823,6 +67006,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59842,6 +67028,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59861,6 +67050,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59880,6 +67072,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59899,6 +67094,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59918,6 +67116,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59937,6 +67138,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59956,6 +67160,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59975,6 +67182,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -59994,6 +67204,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60013,6 +67226,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60032,6 +67248,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60051,6 +67270,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60070,6 +67292,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60089,6 +67314,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60108,6 +67336,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60127,6 +67358,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60146,6 +67380,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60165,6 +67402,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60184,6 +67424,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60203,6 +67446,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60222,6 +67468,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60241,6 +67490,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60260,6 +67512,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60279,6 +67534,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60298,6 +67556,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60317,6 +67578,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60336,6 +67600,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60355,6 +67622,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60374,6 +67644,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60393,6 +67666,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60412,6 +67688,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60431,6 +67710,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60450,6 +67732,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60469,6 +67754,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60488,6 +67776,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60507,6 +67798,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60526,6 +67820,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60545,6 +67842,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60564,6 +67864,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60583,6 +67886,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60602,6 +67908,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60621,6 +67930,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60640,6 +67952,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60659,6 +67974,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60678,6 +67996,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60697,6 +68018,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60716,6 +68040,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60735,6 +68062,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60754,6 +68084,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60773,6 +68106,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60792,6 +68128,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60811,6 +68150,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60830,6 +68172,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60849,6 +68194,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60868,6 +68216,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60887,6 +68238,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60906,6 +68260,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60925,6 +68282,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60944,6 +68304,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60963,6 +68326,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -60982,6 +68348,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61001,6 +68370,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61020,6 +68392,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61039,6 +68414,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61058,6 +68436,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61077,6 +68458,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61096,6 +68480,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61115,6 +68502,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61134,6 +68524,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61153,6 +68546,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61172,6 +68568,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61191,6 +68590,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61210,6 +68612,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61229,6 +68634,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61248,6 +68656,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61267,6 +68678,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61286,6 +68700,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61305,6 +68722,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61324,6 +68744,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61343,6 +68766,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61362,6 +68788,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61381,6 +68810,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61400,6 +68832,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61419,6 +68854,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61438,6 +68876,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61457,6 +68898,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61476,6 +68920,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61495,6 +68942,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61514,6 +68964,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61533,6 +68986,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61552,6 +69008,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61571,6 +69030,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61590,6 +69052,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61609,6 +69074,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61628,6 +69096,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61647,6 +69118,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61666,6 +69140,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61685,6 +69162,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61704,6 +69184,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61723,6 +69206,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61742,6 +69228,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61761,6 +69250,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61780,6 +69272,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61799,6 +69294,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61818,6 +69316,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61837,6 +69338,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61856,6 +69360,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61875,6 +69382,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61894,6 +69404,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61913,6 +69426,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61932,6 +69448,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61951,6 +69470,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61970,6 +69492,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -61989,6 +69514,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62008,6 +69536,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62027,6 +69558,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62046,6 +69580,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62065,6 +69602,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62084,6 +69624,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62103,6 +69646,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62122,6 +69668,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62141,6 +69690,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62160,6 +69712,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62179,6 +69734,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62198,6 +69756,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62217,6 +69778,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62236,6 +69800,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62255,6 +69822,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62274,6 +69844,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62293,6 +69866,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62312,6 +69888,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62331,6 +69910,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62350,6 +69932,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62369,6 +69954,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62388,6 +69976,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62407,6 +69998,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62426,6 +70020,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62445,6 +70042,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62464,6 +70064,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62483,6 +70086,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62502,6 +70108,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62521,6 +70130,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62540,6 +70152,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62559,6 +70174,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62578,6 +70196,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62597,6 +70218,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62616,6 +70240,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62635,6 +70262,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62654,6 +70284,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62673,6 +70306,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62692,6 +70328,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62711,6 +70350,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62730,6 +70372,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62749,6 +70394,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62768,6 +70416,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62787,6 +70438,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62806,6 +70460,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62825,6 +70482,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62844,6 +70504,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62863,6 +70526,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62882,6 +70548,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62901,6 +70570,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62920,6 +70592,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62939,6 +70614,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62958,6 +70636,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62977,6 +70658,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -62996,6 +70680,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63015,6 +70702,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63034,6 +70724,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63053,6 +70746,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63072,6 +70768,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63091,6 +70790,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63110,6 +70812,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63129,6 +70834,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63148,6 +70856,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63167,6 +70878,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63186,6 +70900,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63205,6 +70922,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63224,6 +70944,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63243,6 +70966,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63262,6 +70988,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63281,6 +71010,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63300,6 +71032,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63319,6 +71054,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63338,6 +71076,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63357,6 +71098,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63376,6 +71120,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63395,6 +71142,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63414,6 +71164,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63433,6 +71186,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63452,6 +71208,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63471,6 +71230,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63490,6 +71252,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63509,6 +71274,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63528,6 +71296,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63547,6 +71318,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63566,6 +71340,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63585,6 +71362,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63604,6 +71384,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63623,6 +71406,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63642,6 +71428,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63661,6 +71450,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63680,6 +71472,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63699,6 +71494,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63718,6 +71516,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63737,6 +71538,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63756,6 +71560,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63775,6 +71582,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63794,6 +71604,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63813,6 +71626,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63832,6 +71648,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63851,6 +71670,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63870,6 +71692,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63889,6 +71714,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63908,6 +71736,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63927,6 +71758,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63946,6 +71780,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63965,6 +71802,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -63984,6 +71824,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64003,6 +71846,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64022,6 +71868,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64041,6 +71890,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64060,6 +71912,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64079,6 +71934,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64098,6 +71956,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64117,6 +71978,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64136,6 +72000,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64155,6 +72022,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64174,6 +72044,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64193,6 +72066,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64212,6 +72088,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64231,6 +72110,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64250,6 +72132,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64269,6 +72154,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64288,6 +72176,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64307,6 +72198,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64326,6 +72220,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64345,6 +72242,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64364,6 +72264,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64383,6 +72286,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64402,6 +72308,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64421,6 +72330,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64440,6 +72352,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64459,6 +72374,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64478,6 +72396,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64497,6 +72418,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64516,6 +72440,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64535,6 +72462,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64554,6 +72484,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64573,6 +72506,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64592,6 +72528,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64611,6 +72550,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64630,6 +72572,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64649,6 +72594,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64668,6 +72616,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64687,6 +72638,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64706,6 +72660,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64725,6 +72682,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64744,6 +72704,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64763,6 +72726,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64782,6 +72748,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64801,6 +72770,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64820,6 +72792,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64839,6 +72814,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64858,6 +72836,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64877,6 +72858,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64896,6 +72880,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64915,6 +72902,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64934,6 +72924,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64953,6 +72946,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64972,6 +72968,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -64991,6 +72990,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65010,6 +73012,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65029,6 +73034,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65048,6 +73056,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65067,6 +73078,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65086,6 +73100,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65105,6 +73122,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65124,6 +73144,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65143,6 +73166,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65162,6 +73188,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65181,6 +73210,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65200,6 +73232,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65219,6 +73254,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65238,6 +73276,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65257,6 +73298,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65276,6 +73320,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65295,6 +73342,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65314,6 +73364,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65333,6 +73386,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65352,6 +73408,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65371,6 +73430,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65390,6 +73452,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65409,6 +73474,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65428,6 +73496,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65447,6 +73518,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65466,6 +73540,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65485,6 +73562,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65504,6 +73584,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65523,6 +73606,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65542,6 +73628,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65561,6 +73650,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65580,6 +73672,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65599,6 +73694,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65618,6 +73716,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65637,6 +73738,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65656,6 +73760,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65675,6 +73782,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65694,6 +73804,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65713,6 +73826,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65732,6 +73848,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65751,6 +73870,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65770,6 +73892,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65789,6 +73914,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65808,6 +73936,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65827,6 +73958,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65846,6 +73980,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65865,6 +74002,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65884,6 +74024,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65903,6 +74046,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65922,6 +74068,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65941,6 +74090,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65960,6 +74112,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65979,6 +74134,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -65998,6 +74156,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66017,6 +74178,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66036,6 +74200,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66055,6 +74222,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66074,6 +74244,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66093,6 +74266,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66112,6 +74288,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66131,6 +74310,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66150,6 +74332,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66169,6 +74354,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66188,6 +74376,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66207,6 +74398,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66226,6 +74420,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66245,6 +74442,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66264,6 +74464,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66283,6 +74486,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66302,6 +74508,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66321,6 +74530,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66340,6 +74552,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66359,6 +74574,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66378,6 +74596,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66397,6 +74618,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66416,6 +74640,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66435,6 +74662,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66454,6 +74684,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66473,6 +74706,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66492,6 +74728,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66511,6 +74750,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66530,6 +74772,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66549,6 +74794,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66568,6 +74816,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66587,6 +74838,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66606,6 +74860,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66625,6 +74882,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66644,6 +74904,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66663,6 +74926,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66682,6 +74948,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66701,6 +74970,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66720,6 +74992,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66739,6 +75014,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66758,6 +75036,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66777,6 +75058,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66796,6 +75080,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66815,6 +75102,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66834,6 +75124,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66853,6 +75146,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66872,6 +75168,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66891,6 +75190,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66910,6 +75212,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66929,6 +75234,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66948,6 +75256,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66967,6 +75278,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -66986,6 +75300,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67005,6 +75322,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67024,6 +75344,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67043,6 +75366,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67062,6 +75388,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67081,6 +75410,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67100,6 +75432,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67119,6 +75454,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67138,6 +75476,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67157,6 +75498,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67176,6 +75520,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67195,6 +75542,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67214,6 +75564,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67233,6 +75586,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67252,6 +75608,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67271,6 +75630,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67290,6 +75652,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -67309,6 +75674,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67328,6 +75696,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67347,6 +75718,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67366,6 +75740,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67385,6 +75762,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67404,6 +75784,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67423,6 +75806,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67442,6 +75828,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67461,6 +75850,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67480,6 +75872,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67499,6 +75894,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67518,6 +75916,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67537,6 +75938,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67556,6 +75960,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67575,6 +75982,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67594,6 +76004,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67613,6 +76026,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67632,6 +76048,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67651,6 +76070,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67670,6 +76092,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67689,6 +76114,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67708,6 +76136,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67727,6 +76158,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67746,6 +76180,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67765,6 +76202,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67784,6 +76224,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67803,6 +76246,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67822,6 +76268,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67841,6 +76290,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67860,6 +76312,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67879,6 +76334,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67898,6 +76356,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67917,6 +76378,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67936,6 +76400,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67955,6 +76422,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67974,6 +76444,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -67993,6 +76466,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68012,6 +76488,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68031,6 +76510,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68050,6 +76532,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68069,6 +76554,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68088,6 +76576,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68107,6 +76598,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68126,6 +76620,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68145,6 +76642,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68164,6 +76664,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68183,6 +76686,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68202,6 +76708,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68221,6 +76730,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68240,6 +76752,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68259,6 +76774,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68278,6 +76796,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68297,6 +76818,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68316,6 +76840,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68335,6 +76862,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68354,6 +76884,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68373,6 +76906,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68392,6 +76928,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68411,6 +76950,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68430,6 +76972,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68449,6 +76994,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68468,6 +77016,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68487,6 +77038,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68506,6 +77060,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68525,6 +77082,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68544,6 +77104,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68563,6 +77126,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68582,6 +77148,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68601,6 +77170,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68620,6 +77192,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68639,6 +77214,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68658,6 +77236,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68677,6 +77258,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68696,6 +77280,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68715,6 +77302,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68734,6 +77324,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68753,6 +77346,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68772,6 +77368,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68791,6 +77390,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68810,6 +77412,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68829,6 +77434,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68848,6 +77456,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68867,6 +77478,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68886,6 +77500,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68905,6 +77522,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68924,6 +77544,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68943,6 +77566,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68962,6 +77588,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -68981,6 +77610,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69000,6 +77632,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69019,6 +77654,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69038,6 +77676,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69057,6 +77698,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69076,6 +77720,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69095,6 +77742,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69114,6 +77764,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69133,6 +77786,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69152,6 +77808,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69171,6 +77830,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69190,6 +77852,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69209,6 +77874,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69228,6 +77896,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69247,6 +77918,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69266,6 +77940,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69285,6 +77962,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69304,6 +77984,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69323,6 +78006,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69342,6 +78028,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69361,6 +78050,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69380,6 +78072,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69399,6 +78094,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69418,6 +78116,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69437,6 +78138,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69456,6 +78160,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69475,6 +78182,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69494,6 +78204,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69513,6 +78226,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69532,6 +78248,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69551,6 +78270,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69570,6 +78292,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69589,6 +78314,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69608,6 +78336,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69627,6 +78358,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69646,6 +78380,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69665,6 +78402,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69684,6 +78424,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69703,6 +78446,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69722,6 +78468,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69741,6 +78490,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69760,6 +78512,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69779,6 +78534,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69798,6 +78556,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69817,6 +78578,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69836,6 +78600,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69855,6 +78622,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69874,6 +78644,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69893,6 +78666,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69912,6 +78688,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69931,6 +78710,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69950,6 +78732,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69969,6 +78754,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -69988,6 +78776,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70007,6 +78798,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70026,6 +78820,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70045,6 +78842,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70064,6 +78864,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70083,6 +78886,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70102,6 +78908,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70121,6 +78930,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70140,6 +78952,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70159,6 +78974,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70178,6 +78996,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70197,6 +79018,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70216,6 +79040,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70235,6 +79062,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70254,6 +79084,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70273,6 +79106,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70292,6 +79128,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70311,6 +79150,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70330,6 +79172,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70349,6 +79194,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70368,6 +79216,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70387,6 +79238,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70406,6 +79260,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70425,6 +79282,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70444,6 +79304,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70463,6 +79326,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70482,6 +79348,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70501,6 +79370,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70520,6 +79392,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70539,6 +79414,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70558,6 +79436,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70577,6 +79458,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70596,6 +79480,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70615,6 +79502,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70634,6 +79524,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70653,6 +79546,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70672,6 +79568,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70691,6 +79590,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70710,6 +79612,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70729,6 +79634,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70748,6 +79656,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70767,6 +79678,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70786,6 +79700,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70805,6 +79722,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70824,6 +79744,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70843,6 +79766,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70862,6 +79788,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70881,6 +79810,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70900,6 +79832,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70919,6 +79854,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70938,6 +79876,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70957,6 +79898,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70976,6 +79920,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -70995,6 +79942,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71014,6 +79964,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71033,6 +79986,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71052,6 +80008,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71071,6 +80030,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71090,6 +80052,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71109,6 +80074,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71128,6 +80096,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71147,6 +80118,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71166,6 +80140,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71185,6 +80162,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71204,6 +80184,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71223,6 +80206,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71242,6 +80228,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71261,6 +80250,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71280,6 +80272,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71299,6 +80294,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71318,6 +80316,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71337,6 +80338,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71356,6 +80360,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71375,6 +80382,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71394,6 +80404,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71413,6 +80426,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71432,6 +80448,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71451,6 +80470,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71470,6 +80492,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71489,6 +80514,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71508,6 +80536,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71527,6 +80558,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71546,6 +80580,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71565,6 +80602,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71584,6 +80624,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71603,6 +80646,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71622,6 +80668,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71641,6 +80690,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71660,6 +80712,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71679,6 +80734,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71698,6 +80756,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71717,6 +80778,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71736,6 +80800,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71755,6 +80822,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71774,6 +80844,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71793,6 +80866,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71812,6 +80888,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71831,6 +80910,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71850,6 +80932,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71869,6 +80954,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71888,6 +80976,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71907,6 +80998,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71926,6 +81020,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71945,6 +81042,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71964,6 +81064,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -71983,6 +81086,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72002,6 +81108,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72021,6 +81130,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72040,6 +81152,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72059,6 +81174,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72078,6 +81196,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72097,6 +81218,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72116,6 +81240,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72135,6 +81262,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72154,6 +81284,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72173,6 +81306,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72192,6 +81328,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72211,6 +81350,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72230,6 +81372,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72249,6 +81394,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72268,6 +81416,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72287,6 +81438,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72306,6 +81460,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72325,6 +81482,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72344,6 +81504,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72363,6 +81526,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72382,6 +81548,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72401,6 +81570,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72420,6 +81592,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72439,6 +81614,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72458,6 +81636,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72477,6 +81658,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72496,6 +81680,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72515,6 +81702,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72534,6 +81724,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72553,6 +81746,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72572,6 +81768,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72591,6 +81790,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72610,6 +81812,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72629,6 +81834,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72648,6 +81856,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72667,6 +81878,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72686,6 +81900,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72705,6 +81922,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72724,6 +81944,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72743,6 +81966,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72762,6 +81988,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72781,6 +82010,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72800,6 +82032,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72819,6 +82054,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72838,6 +82076,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72857,6 +82098,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72876,6 +82120,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72895,6 +82142,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72914,6 +82164,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72933,6 +82186,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72952,6 +82208,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72971,6 +82230,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -72990,6 +82252,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73009,6 +82274,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73028,6 +82296,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73047,6 +82318,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73066,6 +82340,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73085,6 +82362,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73104,6 +82384,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73123,6 +82406,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73142,6 +82428,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73161,6 +82450,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73180,6 +82472,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73199,6 +82494,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73218,6 +82516,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73237,6 +82538,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73256,6 +82560,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73275,6 +82582,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73294,6 +82604,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73313,6 +82626,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73332,6 +82648,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73351,6 +82670,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73370,6 +82692,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73389,6 +82714,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73408,6 +82736,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73427,6 +82758,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73446,6 +82780,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73465,6 +82802,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73484,6 +82824,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73503,6 +82846,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73522,6 +82868,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -73541,6 +82890,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73560,6 +82912,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73579,6 +82934,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73598,6 +82956,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73617,6 +82978,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73636,6 +83000,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73655,6 +83022,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73674,6 +83044,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73693,6 +83066,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73712,6 +83088,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73731,6 +83110,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73750,6 +83132,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73769,6 +83154,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73788,6 +83176,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73807,6 +83198,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73826,6 +83220,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73845,6 +83242,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73864,6 +83264,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73883,6 +83286,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73902,6 +83308,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73921,6 +83330,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73940,6 +83352,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73959,6 +83374,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73978,6 +83396,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -73997,6 +83418,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74016,6 +83440,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74035,6 +83462,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74054,6 +83484,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74073,6 +83506,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74092,6 +83528,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74111,6 +83550,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74130,6 +83572,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74149,6 +83594,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74168,6 +83616,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74187,6 +83638,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74206,6 +83660,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74225,6 +83682,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74244,6 +83704,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74263,6 +83726,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74282,6 +83748,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74301,6 +83770,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74320,6 +83792,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74339,6 +83814,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74358,6 +83836,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74377,6 +83858,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74396,6 +83880,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74415,6 +83902,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74434,6 +83924,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74453,6 +83946,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74472,6 +83968,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74491,6 +83990,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74510,6 +84012,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74529,6 +84034,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74548,6 +84056,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74567,6 +84078,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74586,6 +84100,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74605,6 +84122,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74624,6 +84144,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74643,6 +84166,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74662,6 +84188,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74681,6 +84210,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74700,6 +84232,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74719,6 +84254,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74738,6 +84276,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74757,6 +84298,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74776,6 +84320,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74795,6 +84342,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74814,6 +84364,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74833,6 +84386,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74852,6 +84408,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74871,6 +84430,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74890,6 +84452,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74909,6 +84474,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74928,6 +84496,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74947,6 +84518,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74966,6 +84540,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -74985,6 +84562,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75004,6 +84584,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75023,6 +84606,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75042,6 +84628,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75061,6 +84650,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75080,6 +84672,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75099,6 +84694,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75118,6 +84716,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75137,6 +84738,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75156,6 +84760,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75175,6 +84782,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75194,6 +84804,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75213,6 +84826,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75232,6 +84848,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75251,6 +84870,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75270,6 +84892,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75289,6 +84914,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75308,6 +84936,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75327,6 +84958,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75346,6 +84980,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75365,6 +85002,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75384,6 +85024,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75403,6 +85046,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75422,6 +85068,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75441,6 +85090,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75460,6 +85112,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75479,6 +85134,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75498,6 +85156,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75517,6 +85178,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75536,6 +85200,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75555,6 +85222,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75574,6 +85244,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75593,6 +85266,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75612,6 +85288,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75631,6 +85310,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75650,6 +85332,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75669,6 +85354,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75688,6 +85376,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75707,6 +85398,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75726,6 +85420,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75745,6 +85442,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75764,6 +85464,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75783,6 +85486,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75802,6 +85508,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75821,6 +85530,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75840,6 +85552,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75859,6 +85574,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75878,6 +85596,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75897,6 +85618,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75916,6 +85640,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75935,6 +85662,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75954,6 +85684,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75973,6 +85706,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -75992,6 +85728,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76011,6 +85750,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76030,6 +85772,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76049,6 +85794,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76068,6 +85816,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76087,6 +85838,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76106,6 +85860,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76125,6 +85882,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76144,6 +85904,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76163,6 +85926,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76182,6 +85948,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76201,6 +85970,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76220,6 +85992,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76239,6 +86014,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76258,6 +86036,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76277,6 +86058,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76296,6 +86080,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76315,6 +86102,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76334,6 +86124,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76353,6 +86146,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76372,6 +86168,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76391,6 +86190,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76410,6 +86212,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76429,6 +86234,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76448,6 +86256,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76467,6 +86278,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76486,6 +86300,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76505,6 +86322,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76524,6 +86344,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76543,6 +86366,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76562,6 +86388,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76581,6 +86410,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76600,6 +86432,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76619,6 +86454,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76638,6 +86476,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76657,6 +86498,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76676,6 +86520,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76695,6 +86542,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76714,6 +86564,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76733,6 +86586,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76752,6 +86608,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76771,6 +86630,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76790,6 +86652,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76809,6 +86674,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76828,6 +86696,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76847,6 +86718,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76866,6 +86740,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76885,6 +86762,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76904,6 +86784,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76923,6 +86806,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76942,6 +86828,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76961,6 +86850,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76980,6 +86872,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -76999,6 +86894,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77018,6 +86916,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77037,6 +86938,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77056,6 +86960,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77075,6 +86982,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77094,6 +87004,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77113,6 +87026,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77132,6 +87048,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77151,6 +87070,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77170,6 +87092,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77189,6 +87114,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77208,6 +87136,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77227,6 +87158,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77246,6 +87180,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77265,6 +87202,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77284,6 +87224,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77303,6 +87246,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77322,6 +87268,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77341,6 +87290,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77360,6 +87312,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77379,6 +87334,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77398,6 +87356,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77417,6 +87378,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77436,6 +87400,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77455,6 +87422,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77474,6 +87444,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77493,6 +87466,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77512,6 +87488,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77531,6 +87510,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77550,6 +87532,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77569,6 +87554,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77588,6 +87576,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77607,6 +87598,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77626,6 +87620,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77645,6 +87642,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77664,6 +87664,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77683,6 +87686,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77702,6 +87708,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77721,6 +87730,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77740,6 +87752,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77759,6 +87774,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77778,6 +87796,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77797,6 +87818,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77816,6 +87840,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77835,6 +87862,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77854,6 +87884,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77873,6 +87906,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77892,6 +87928,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77911,6 +87950,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77930,6 +87972,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77949,6 +87994,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77968,6 +88016,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -77987,6 +88038,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78006,6 +88060,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78025,6 +88082,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78044,6 +88104,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78063,6 +88126,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78082,6 +88148,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78101,6 +88170,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78120,6 +88192,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78139,6 +88214,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78158,6 +88236,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78177,6 +88258,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78196,6 +88280,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78215,6 +88302,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78234,6 +88324,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78253,6 +88346,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78272,6 +88368,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78291,6 +88390,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78310,6 +88412,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78329,6 +88434,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78348,6 +88456,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78367,6 +88478,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78386,6 +88500,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78405,6 +88522,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78424,6 +88544,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78443,6 +88566,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78462,6 +88588,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78481,6 +88610,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78500,6 +88632,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78519,6 +88654,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78538,6 +88676,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78557,6 +88698,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78576,6 +88720,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78595,6 +88742,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78614,6 +88764,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78633,6 +88786,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78652,6 +88808,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78671,6 +88830,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78690,6 +88852,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78709,6 +88874,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78728,6 +88896,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78747,6 +88918,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78766,6 +88940,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78785,6 +88962,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78804,6 +88984,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78823,6 +89006,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78842,6 +89028,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78861,6 +89050,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78880,6 +89072,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78899,6 +89094,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78918,6 +89116,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78937,6 +89138,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78956,6 +89160,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78975,6 +89182,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -78994,6 +89204,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79013,6 +89226,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79032,6 +89248,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79051,6 +89270,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79070,6 +89292,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79089,6 +89314,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79108,6 +89336,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79127,6 +89358,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79146,6 +89380,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79165,6 +89402,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79184,6 +89424,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79203,6 +89446,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79222,6 +89468,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79241,6 +89490,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79260,6 +89512,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79279,6 +89534,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79298,6 +89556,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79317,6 +89578,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79336,6 +89600,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79355,6 +89622,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79374,6 +89644,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79393,6 +89666,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79412,6 +89688,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79431,6 +89710,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79450,6 +89732,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79469,6 +89754,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79488,6 +89776,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79507,6 +89798,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79526,6 +89820,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79545,6 +89842,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79564,6 +89864,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79583,6 +89886,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79602,6 +89908,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79621,6 +89930,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79640,6 +89952,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79659,6 +89974,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79678,6 +89996,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79697,6 +90018,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79716,6 +90040,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79735,6 +90062,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79754,6 +90084,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79773,6 +90106,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79792,6 +90128,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79811,6 +90150,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79830,6 +90172,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79849,6 +90194,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79868,6 +90216,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79887,6 +90238,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79906,6 +90260,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79925,6 +90282,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79944,6 +90304,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79963,6 +90326,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -79982,6 +90348,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -80001,6 +90370,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -80020,6 +90392,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -80039,6 +90414,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -80058,6 +90436,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -80077,6 +90458,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -80096,6 +90480,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -80115,6 +90502,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -80134,6 +90524,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -80153,6 +90546,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80172,6 +90568,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80191,6 +90590,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80210,6 +90612,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80229,6 +90634,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80248,6 +90656,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80267,6 +90678,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80286,6 +90700,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80305,6 +90722,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80324,6 +90744,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80343,6 +90766,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80362,6 +90788,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80381,6 +90810,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80400,6 +90832,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80419,6 +90854,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80438,6 +90876,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80457,6 +90898,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80476,6 +90920,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80495,6 +90942,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80514,6 +90964,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80533,6 +90986,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80552,6 +91008,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80571,6 +91030,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80590,6 +91052,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80609,6 +91074,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80628,6 +91096,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80647,6 +91118,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80666,6 +91140,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80685,6 +91162,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80704,6 +91184,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80723,6 +91206,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80742,6 +91228,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80761,6 +91250,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80780,6 +91272,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80799,6 +91294,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80818,6 +91316,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80837,6 +91338,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80856,6 +91360,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80875,6 +91382,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80894,6 +91404,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80913,6 +91426,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80932,6 +91448,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80951,6 +91470,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80970,6 +91492,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -80989,6 +91514,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81008,6 +91536,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81027,6 +91558,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81046,6 +91580,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81065,6 +91602,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81084,6 +91624,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81103,6 +91646,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81122,6 +91668,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81141,6 +91690,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81160,6 +91712,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81179,6 +91734,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81198,6 +91756,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81217,6 +91778,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81236,6 +91800,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81255,6 +91822,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81274,6 +91844,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81293,6 +91866,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81312,6 +91888,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81331,6 +91910,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -81350,6 +91932,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81369,6 +91954,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81388,6 +91976,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81407,6 +91998,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81426,6 +92020,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81445,6 +92042,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81464,6 +92064,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81483,6 +92086,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81502,6 +92108,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81521,6 +92130,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81540,6 +92152,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81559,6 +92174,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81578,6 +92196,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81597,6 +92218,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81616,6 +92240,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81635,6 +92262,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81654,6 +92284,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81673,6 +92306,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81692,6 +92328,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81711,6 +92350,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81730,6 +92372,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81749,6 +92394,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81768,6 +92416,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81787,6 +92438,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81806,6 +92460,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81825,6 +92482,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81844,6 +92504,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81863,6 +92526,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81882,6 +92548,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81901,6 +92570,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81920,6 +92592,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81939,6 +92614,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81958,6 +92636,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81977,6 +92658,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -81996,6 +92680,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82015,6 +92702,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82034,6 +92724,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82053,6 +92746,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82072,6 +92768,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82091,6 +92790,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82110,6 +92812,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82129,6 +92834,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82148,6 +92856,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82167,6 +92878,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82186,6 +92900,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82205,6 +92922,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82224,6 +92944,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82243,6 +92966,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82262,6 +92988,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82281,6 +93010,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82300,6 +93032,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82319,6 +93054,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82338,6 +93076,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82357,6 +93098,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82376,6 +93120,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82395,6 +93142,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82414,6 +93164,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82433,6 +93186,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82452,6 +93208,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82471,6 +93230,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82490,6 +93252,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82509,6 +93274,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82528,6 +93296,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82547,6 +93318,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82566,6 +93340,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82585,6 +93362,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82604,6 +93384,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82623,6 +93406,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82642,6 +93428,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82661,6 +93450,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82680,6 +93472,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82699,6 +93494,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82718,6 +93516,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82737,6 +93538,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82756,6 +93560,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82775,6 +93582,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82794,6 +93604,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82813,6 +93626,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82832,6 +93648,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82851,6 +93670,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82870,6 +93692,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82889,6 +93714,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82908,6 +93736,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82927,6 +93758,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82946,6 +93780,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82965,6 +93802,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -82984,6 +93824,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83003,6 +93846,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83022,6 +93868,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83041,6 +93890,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83060,6 +93912,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83079,6 +93934,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83098,6 +93956,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83117,6 +93978,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83136,6 +94000,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83155,6 +94022,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83174,6 +94044,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83193,6 +94066,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83212,6 +94088,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83231,6 +94110,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83250,6 +94132,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83269,6 +94154,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83288,6 +94176,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83307,6 +94198,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83326,6 +94220,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83345,6 +94242,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83364,6 +94264,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83383,6 +94286,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83402,6 +94308,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83421,6 +94330,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83440,6 +94352,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83459,6 +94374,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83478,6 +94396,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83497,6 +94418,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83516,6 +94440,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83535,6 +94462,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83554,6 +94484,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83573,6 +94506,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83592,6 +94528,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83611,6 +94550,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83630,6 +94572,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83649,6 +94594,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83668,6 +94616,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83687,6 +94638,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83706,6 +94660,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83725,6 +94682,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83744,6 +94704,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83763,6 +94726,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83782,6 +94748,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83801,6 +94770,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83820,6 +94792,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83839,6 +94814,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83858,6 +94836,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83877,6 +94858,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83896,6 +94880,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83915,6 +94902,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83934,6 +94924,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83953,6 +94946,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83972,6 +94968,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -83991,6 +94990,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84010,6 +95012,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84029,6 +95034,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84048,6 +95056,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84067,6 +95078,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84086,6 +95100,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84105,6 +95122,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84124,6 +95144,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84143,6 +95166,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84162,6 +95188,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84181,6 +95210,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84200,6 +95232,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84219,6 +95254,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84238,6 +95276,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84257,6 +95298,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84276,6 +95320,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84295,6 +95342,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84314,6 +95364,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84333,6 +95386,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84352,6 +95408,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84371,6 +95430,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84390,6 +95452,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84409,6 +95474,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84428,6 +95496,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84447,6 +95518,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84466,6 +95540,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84485,6 +95562,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84504,6 +95584,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84523,6 +95606,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84542,6 +95628,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84561,6 +95650,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84580,6 +95672,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84599,6 +95694,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84618,6 +95716,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84637,6 +95738,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84656,6 +95760,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84675,6 +95782,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84694,6 +95804,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84713,6 +95826,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84732,6 +95848,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84751,6 +95870,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84770,6 +95892,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84789,6 +95914,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84808,6 +95936,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84827,6 +95958,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84846,6 +95980,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84865,6 +96002,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84884,6 +96024,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84903,6 +96046,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84922,6 +96068,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84941,6 +96090,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84960,6 +96112,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84979,6 +96134,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -84998,6 +96156,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85017,6 +96178,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85036,6 +96200,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85055,6 +96222,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85074,6 +96244,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85093,6 +96266,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85112,6 +96288,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85131,6 +96310,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85150,6 +96332,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85169,6 +96354,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85188,6 +96376,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85207,6 +96398,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85226,6 +96420,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85245,6 +96442,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85264,6 +96464,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85283,6 +96486,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85302,6 +96508,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85321,6 +96530,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85340,6 +96552,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85359,6 +96574,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85378,6 +96596,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85397,6 +96618,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85416,6 +96640,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85435,6 +96662,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85454,6 +96684,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85473,6 +96706,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85492,6 +96728,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85511,6 +96750,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85530,6 +96772,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85549,6 +96794,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85568,6 +96816,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85587,6 +96838,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85606,6 +96860,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85625,6 +96882,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85644,6 +96904,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85663,6 +96926,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85682,6 +96948,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85701,6 +96970,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85720,6 +96992,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85739,6 +97014,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85758,6 +97036,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85777,6 +97058,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85796,6 +97080,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85815,6 +97102,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85834,6 +97124,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85853,6 +97146,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85872,6 +97168,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85891,6 +97190,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85910,6 +97212,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85929,6 +97234,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85948,6 +97256,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85967,6 +97278,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -85986,6 +97300,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86005,6 +97322,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86024,6 +97344,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86043,6 +97366,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86062,6 +97388,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86081,6 +97410,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86100,6 +97432,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86119,6 +97454,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86138,6 +97476,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86157,6 +97498,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86176,6 +97520,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86195,6 +97542,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86214,6 +97564,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86233,6 +97586,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86252,6 +97608,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86271,6 +97630,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86290,6 +97652,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86309,6 +97674,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86328,6 +97696,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86347,6 +97718,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86366,6 +97740,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86385,6 +97762,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86404,6 +97784,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86423,6 +97806,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86442,6 +97828,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86461,6 +97850,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86480,6 +97872,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86499,6 +97894,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -86518,6 +97916,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86537,6 +97938,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86556,6 +97960,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86575,6 +97982,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86594,6 +98004,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86613,6 +98026,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86632,6 +98048,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86651,6 +98070,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86670,6 +98092,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86689,6 +98114,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86708,6 +98136,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86727,6 +98158,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86746,6 +98180,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86765,6 +98202,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86784,6 +98224,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86803,6 +98246,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86822,6 +98268,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86841,6 +98290,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86860,6 +98312,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86879,6 +98334,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86898,6 +98356,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86917,6 +98378,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86936,6 +98400,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86955,6 +98422,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86974,6 +98444,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -86993,6 +98466,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_decode_fuzzer_one_entry", @@ -87012,6 +98488,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87031,6 +98510,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87050,6 +98532,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87069,6 +98554,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87088,6 +98576,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87107,6 +98598,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87126,6 +98620,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87145,6 +98642,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87164,6 +98664,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87183,6 +98686,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87202,6 +98708,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87221,6 +98730,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87240,6 +98752,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87259,6 +98774,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87278,6 +98796,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87297,6 +98818,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "percent_encode_fuzzer_one_entry", @@ -87316,6 +98840,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87335,6 +98862,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87354,6 +98884,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87373,6 +98906,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87392,6 +98928,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87411,6 +98950,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87430,6 +98972,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87449,6 +98994,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87468,6 +99016,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87487,6 +99038,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87506,6 +99060,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87525,6 +99082,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87544,6 +99104,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87563,6 +99126,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87582,6 +99148,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87601,6 +99170,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87620,6 +99192,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87639,6 +99214,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87658,6 +99236,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87677,6 +99258,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87696,6 +99280,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87715,6 +99302,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87734,6 +99324,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87753,6 +99346,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87772,6 +99368,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87791,6 +99390,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87810,6 +99412,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87829,6 +99434,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87848,6 +99456,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87867,6 +99478,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87886,6 +99500,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87905,6 +99522,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87924,6 +99544,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87943,6 +99566,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87962,6 +99588,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -87981,6 +99610,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88000,6 +99632,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88019,6 +99654,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88038,6 +99676,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88057,6 +99698,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88076,6 +99720,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88095,6 +99742,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88114,6 +99764,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88133,6 +99786,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88152,6 +99808,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88171,6 +99830,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88190,6 +99852,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88209,6 +99874,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88228,6 +99896,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88247,6 +99918,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88266,6 +99940,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88285,6 +99962,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88304,6 +99984,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88323,6 +100006,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88342,6 +100028,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88361,6 +100050,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88380,6 +100072,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88399,6 +100094,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88418,6 +100116,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88437,6 +100138,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88456,6 +100160,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88475,6 +100182,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88494,6 +100204,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88513,6 +100226,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88532,6 +100248,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88551,6 +100270,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88570,6 +100292,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88589,6 +100314,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88608,6 +100336,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88627,6 +100358,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88646,6 +100380,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88665,6 +100402,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88684,6 +100424,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88703,6 +100446,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88722,6 +100468,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88741,6 +100490,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88760,6 +100512,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88779,6 +100534,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88798,6 +100556,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88817,6 +100578,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88836,6 +100600,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88855,6 +100622,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88874,6 +100644,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88893,6 +100666,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88912,6 +100688,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88931,6 +100710,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88950,6 +100732,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88969,6 +100754,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -88988,6 +100776,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89007,6 +100798,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89026,6 +100820,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89045,6 +100842,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89064,6 +100864,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89083,6 +100886,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89102,6 +100908,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89121,6 +100930,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89140,6 +100952,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89159,6 +100974,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89178,6 +100996,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89197,6 +101018,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89216,6 +101040,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89235,6 +101062,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89254,6 +101084,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89273,6 +101106,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89292,6 +101128,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89311,6 +101150,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89330,6 +101172,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89349,6 +101194,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89368,6 +101216,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89387,6 +101238,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89406,6 +101260,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89425,6 +101282,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89444,6 +101304,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89463,6 +101326,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89482,6 +101348,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89501,6 +101370,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89520,6 +101392,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89539,6 +101414,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89558,6 +101436,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89577,6 +101458,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89596,6 +101480,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89615,6 +101502,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89634,6 +101524,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89653,6 +101546,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89672,6 +101568,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89691,6 +101590,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89710,6 +101612,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89729,6 +101634,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89748,6 +101656,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89767,6 +101678,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89786,6 +101700,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89805,6 +101722,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89824,6 +101744,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89843,6 +101766,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89862,6 +101788,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89881,6 +101810,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89900,6 +101832,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89919,6 +101854,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89938,6 +101876,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89957,6 +101898,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89976,6 +101920,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -89995,6 +101942,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90014,6 +101964,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90033,6 +101986,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90052,6 +102008,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90071,6 +102030,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90090,6 +102052,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90109,6 +102074,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90128,6 +102096,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90147,6 +102118,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90166,6 +102140,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90185,6 +102162,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90204,6 +102184,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90223,6 +102206,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90242,6 +102228,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90261,6 +102250,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90280,6 +102272,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90299,6 +102294,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90318,6 +102316,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90337,6 +102338,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90356,6 +102360,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90375,6 +102382,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90394,6 +102404,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90413,6 +102426,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90432,6 +102448,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90451,6 +102470,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90470,6 +102492,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90489,6 +102514,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90508,6 +102536,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90527,6 +102558,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90546,6 +102580,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90565,6 +102602,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90584,6 +102624,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90603,6 +102646,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90622,6 +102668,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90641,6 +102690,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90660,6 +102712,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90679,6 +102734,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90698,6 +102756,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90717,6 +102778,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90736,6 +102800,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90755,6 +102822,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90774,6 +102844,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90793,6 +102866,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90812,6 +102888,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90831,6 +102910,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90850,6 +102932,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90869,6 +102954,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90888,6 +102976,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90907,6 +102998,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90926,6 +103020,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90945,6 +103042,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90964,6 +103064,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -90983,6 +103086,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91002,6 +103108,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91021,6 +103130,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91040,6 +103152,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91059,6 +103174,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91078,6 +103196,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91097,6 +103218,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91116,6 +103240,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91135,6 +103262,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91154,6 +103284,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91173,6 +103306,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91192,6 +103328,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91211,6 +103350,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91230,6 +103372,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91249,6 +103394,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91268,6 +103416,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91287,6 +103438,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91306,6 +103460,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91325,6 +103482,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91344,6 +103504,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91363,6 +103526,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91382,6 +103548,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91401,6 +103570,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91420,6 +103592,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91439,6 +103614,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91458,6 +103636,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91477,6 +103658,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91496,6 +103680,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91515,6 +103702,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91534,6 +103724,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91553,6 +103746,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91572,6 +103768,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91591,6 +103790,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91610,6 +103812,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91629,6 +103834,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91648,6 +103856,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91667,6 +103878,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91686,6 +103900,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91705,6 +103922,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91724,6 +103944,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91743,6 +103966,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91762,6 +103988,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91781,6 +104010,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91800,6 +104032,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91819,6 +104054,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91838,6 +104076,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91857,6 +104098,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91876,6 +104120,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91895,6 +104142,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91914,6 +104164,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91933,6 +104186,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91952,6 +104208,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91971,6 +104230,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -91990,6 +104252,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92009,6 +104274,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92028,6 +104296,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92047,6 +104318,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92066,6 +104340,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92085,6 +104362,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92104,6 +104384,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92123,6 +104406,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92142,6 +104428,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92161,6 +104450,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92180,6 +104472,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92199,6 +104494,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92218,6 +104516,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92237,6 +104538,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92256,6 +104560,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92275,6 +104582,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92294,6 +104604,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92313,6 +104626,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92332,6 +104648,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92351,6 +104670,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92370,6 +104692,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92389,6 +104714,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92408,6 +104736,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92427,6 +104758,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92446,6 +104780,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92465,6 +104802,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92484,6 +104824,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92503,6 +104846,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92522,6 +104868,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92541,6 +104890,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92560,6 +104912,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92579,6 +104934,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92598,6 +104956,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92617,6 +104978,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92636,6 +105000,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92655,6 +105022,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92674,6 +105044,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92693,6 +105066,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92712,6 +105088,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92731,6 +105110,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92750,6 +105132,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92769,6 +105154,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92788,6 +105176,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92807,6 +105198,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92826,6 +105220,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92845,6 +105242,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92864,6 +105264,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92883,6 +105286,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92902,6 +105308,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92921,6 +105330,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92940,6 +105352,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92959,6 +105374,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92978,6 +105396,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -92997,6 +105418,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93016,6 +105440,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93035,6 +105462,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93054,6 +105484,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93073,6 +105506,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93092,6 +105528,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93111,6 +105550,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93130,6 +105572,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93149,6 +105594,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93168,6 +105616,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93187,6 +105638,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93206,6 +105660,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93225,6 +105682,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93244,6 +105704,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93263,6 +105726,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93282,6 +105748,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93301,6 +105770,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93320,6 +105792,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93339,6 +105814,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93358,6 +105836,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93377,6 +105858,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93396,6 +105880,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93415,6 +105902,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93434,6 +105924,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93453,6 +105946,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93472,6 +105968,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93491,6 +105990,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93510,6 +106012,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93529,6 +106034,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93548,6 +106056,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93567,6 +106078,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93586,6 +106100,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93605,6 +106122,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93624,6 +106144,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93643,6 +106166,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93662,6 +106188,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93681,6 +106210,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93700,6 +106232,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93719,6 +106254,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93738,6 +106276,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93757,6 +106298,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93776,6 +106320,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93795,6 +106342,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93814,6 +106364,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93833,6 +106386,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93852,6 +106408,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93871,6 +106430,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93890,6 +106452,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93909,6 +106474,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93928,6 +106496,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93947,6 +106518,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93966,6 +106540,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -93985,6 +106562,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94004,6 +106584,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94023,6 +106606,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94042,6 +106628,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94061,6 +106650,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94080,6 +106672,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94099,6 +106694,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94118,6 +106716,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94137,6 +106738,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94156,6 +106760,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94175,6 +106782,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94194,6 +106804,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94213,6 +106826,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94232,6 +106848,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94251,6 +106870,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94270,6 +106892,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94289,6 +106914,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94308,6 +106936,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94327,6 +106958,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94346,6 +106980,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94365,6 +107002,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94384,6 +107024,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94403,6 +107046,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94422,6 +107068,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94441,6 +107090,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94460,6 +107112,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94479,6 +107134,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94498,6 +107156,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94517,6 +107178,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94536,6 +107200,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94555,6 +107222,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94574,6 +107244,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94593,6 +107266,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94612,6 +107288,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94631,6 +107310,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94650,6 +107332,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94669,6 +107354,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94688,6 +107376,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94707,6 +107398,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94726,6 +107420,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94745,6 +107442,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94764,6 +107464,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94783,6 +107486,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94802,6 +107508,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94821,6 +107530,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94840,6 +107552,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94859,6 +107574,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94878,6 +107596,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94897,6 +107618,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94916,6 +107640,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94935,6 +107662,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94954,6 +107684,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94973,6 +107706,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -94992,6 +107728,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95011,6 +107750,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95030,6 +107772,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95049,6 +107794,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95068,6 +107816,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95087,6 +107838,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95106,6 +107860,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95125,6 +107882,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95144,6 +107904,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95163,6 +107926,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95182,6 +107948,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95201,6 +107970,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95220,6 +107992,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95239,6 +108014,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95258,6 +108036,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95277,6 +108058,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95296,6 +108080,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95315,6 +108102,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95334,6 +108124,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95353,6 +108146,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95372,6 +108168,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95391,6 +108190,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95410,6 +108212,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95429,6 +108234,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95448,6 +108256,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95467,6 +108278,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -95486,6 +108300,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95505,6 +108322,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95524,6 +108344,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95543,6 +108366,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95562,6 +108388,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95581,6 +108410,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95600,6 +108432,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95619,6 +108454,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95638,6 +108476,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95657,6 +108498,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95676,6 +108520,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95695,6 +108542,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95714,6 +108564,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95733,6 +108586,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95752,6 +108608,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95771,6 +108630,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95790,6 +108652,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95809,6 +108674,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95828,6 +108696,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95847,6 +108718,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95866,6 +108740,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95885,6 +108762,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95904,6 +108784,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95923,6 +108806,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95942,6 +108828,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95961,6 +108850,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95980,6 +108872,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -95999,6 +108894,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96018,6 +108916,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96037,6 +108938,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96056,6 +108960,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96075,6 +108982,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96094,6 +109004,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96113,6 +109026,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96132,6 +109048,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96151,6 +109070,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96170,6 +109092,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96189,6 +109114,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96208,6 +109136,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96227,6 +109158,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96246,6 +109180,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96265,6 +109202,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96284,6 +109224,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96303,6 +109246,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96322,6 +109268,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96341,6 +109290,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96360,6 +109312,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96379,6 +109334,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96398,6 +109356,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96417,6 +109378,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96436,6 +109400,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96455,6 +109422,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96474,6 +109444,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96493,6 +109466,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96512,6 +109488,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96531,6 +109510,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96550,6 +109532,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96569,6 +109554,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96588,6 +109576,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96607,6 +109598,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96626,6 +109620,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96645,6 +109642,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -96664,6 +109664,9 @@ "exclude_configs": [ "tsan" ], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index 724b792191e..bf5742075f7 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -176,7 +176,6 @@ - @@ -292,10 +291,6 @@ - - - - diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 6eb20bc81ef..3c7a7d28be0 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -19,12 +19,6 @@ test\core\end2end - - test\core\end2end - - - test\core\end2end - test\core\end2end\fixtures @@ -461,9 +455,6 @@ test\core\end2end - - test\core\end2end - test\core\end2end\fixtures diff --git a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj index d38045db918..2ba2d9fd3d6 100644 --- a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj @@ -148,7 +148,6 @@ - @@ -164,10 +163,6 @@ - - - - diff --git a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters index 00615fbf9e8..2aeb896901a 100644 --- a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters @@ -4,12 +4,6 @@ test\core\end2end - - test\core\end2end - - - test\core\end2end - test\core\end2end\fixtures @@ -54,9 +48,6 @@ test\core\end2end - - test\core\end2end - test\core\end2end\fixtures From 197d87e6efddc532cca5a213467adca231bac270 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Fri, 7 Oct 2016 14:49:05 -0700 Subject: [PATCH 110/286] Fix how Node touches an internal core header --- src/node/ext/node_grpc.cc | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc index b8013c41938..75f23a6960f 100644 --- a/src/node/ext/node_grpc.cc +++ b/src/node/ext/node_grpc.cc @@ -42,8 +42,11 @@ #include "grpc/support/log.h" #include "grpc/support/time.h" +// TODO(murgatroid99): Remove this when the endpoint API becomes public #ifdef GRPC_UV +extern "C" { #include "src/core/lib/iomgr/pollset_uv.h" +} #endif #include "call.h" @@ -419,12 +422,6 @@ NAN_METHOD(SetLogVerbosity) { gpr_set_log_verbosity(severity); } -uv_signal_t signal_handle; - -void signal_callback(uv_signal_t *handle, int signum) { - uv_print_all_handles(uv_default_loop(), stderr); -} - void init(Local exports) { Nan::HandleScope scope; grpc_init(); @@ -439,10 +436,6 @@ void init(Local exports) { InitWriteFlags(exports); InitLogConstants(exports); - uv_signal_init(uv_default_loop(), &signal_handle); - uv_signal_start(&signal_handle, signal_callback, SIGUSR2); - uv_unref((uv_handle_t *)&signal_handle); - #ifdef GRPC_UV grpc_pollset_work_run_loop = 0; #endif From aa9c578b074ce06ac1bf2765971924cdf5246290 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 10 Oct 2016 12:16:13 -0700 Subject: [PATCH 111/286] Clean up code after merge with master --- build.yaml | 2 + src/core/lib/iomgr/endpoint_pair_uv.c | 3 +- src/core/lib/iomgr/pollset_uv.c | 9 +- src/core/lib/iomgr/pollset_uv.h | 5 ++ src/core/lib/iomgr/tcp_client_uv.c | 4 +- src/core/lib/iomgr/tcp_server_uv.c | 1 - src/core/lib/iomgr/tcp_uv.c | 4 +- src/core/lib/iomgr/udp_server.c | 88 +++++++++---------- src/core/lib/iomgr/udp_server.h | 5 +- test/core/end2end/cq_verifier_native.c | 5 +- test/core/end2end/cq_verifier_uv.c | 11 ++- test/core/end2end/dualstack_socket_test.c | 4 +- test/core/end2end/fake_resolver.c | 5 +- test/core/end2end/fixtures/h2_fd.c | 4 +- test/core/end2end/fixtures/h2_full+pipe.c | 4 +- test/core/end2end/fixtures/h2_full+trace.c | 6 +- .../core/end2end/fixtures/h2_sockpair+trace.c | 6 +- test/core/iomgr/fd_posix_test.c | 4 +- test/core/iomgr/socket_utils_test.c | 4 +- test/core/iomgr/tcp_posix_test.c | 4 +- test/core/iomgr/tcp_server_posix_test.c | 4 +- test/core/iomgr/timer_heap_test.c | 4 +- test/core/iomgr/udp_server_test.c | 50 +++++++---- test/core/util/port_uv.c | 4 +- tools/run_tests/tests.json | 11 ++- 25 files changed, 127 insertions(+), 124 deletions(-) diff --git a/build.yaml b/build.yaml index 12051ea89c0..14e73b7c126 100644 --- a/build.yaml +++ b/build.yaml @@ -2626,6 +2626,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux diff --git a/src/core/lib/iomgr/endpoint_pair_uv.c b/src/core/lib/iomgr/endpoint_pair_uv.c index 4f769901ae2..7941e203886 100644 --- a/src/core/lib/iomgr/endpoint_pair_uv.c +++ b/src/core/lib/iomgr/endpoint_pair_uv.c @@ -45,7 +45,8 @@ grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, size_t read_slice_size) { grpc_endpoint_pair endpoint_pair; // TODO(mlumish): implement this properly under libuv - GPR_ASSERT(false && "grpc_iomgr_create_endpoint_pair is not suppoted with libuv"); + GPR_ASSERT(false && + "grpc_iomgr_create_endpoint_pair is not suppoted with libuv"); return endpoint_pair; } diff --git a/src/core/lib/iomgr/pollset_uv.c b/src/core/lib/iomgr/pollset_uv.c index 8f4e20f2963..3a74b842b6c 100644 --- a/src/core/lib/iomgr/pollset_uv.c +++ b/src/core/lib/iomgr/pollset_uv.c @@ -73,9 +73,7 @@ void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu) { pollset->shutting_down = 0; } -static void timer_close_cb(uv_handle_t *handle) { - handle->data = (void *)1; -} +static void timer_close_cb(uv_handle_t *handle) { handle->data = (void *)1; } void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_closure *closure) { @@ -89,7 +87,7 @@ void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, } void grpc_pollset_destroy(grpc_pollset *pollset) { - uv_close((uv_handle_t*)&pollset->timer, timer_close_cb); + uv_close((uv_handle_t *)&pollset->timer, timer_close_cb); // timer.data is a boolean indicating that the timer has finished closing pollset->timer.data = (void *)0; if (grpc_pollset_work_run_loop) { @@ -104,8 +102,7 @@ void grpc_pollset_reset(grpc_pollset *pollset) { pollset->shutting_down = 0; } -static void timer_run_cb(uv_timer_t *timer) { -} +static void timer_run_cb(uv_timer_t *timer) {} grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_pollset_worker **worker_hdl, diff --git a/src/core/lib/iomgr/pollset_uv.h b/src/core/lib/iomgr/pollset_uv.h index 9f1d1442b20..0715eb4295f 100644 --- a/src/core/lib/iomgr/pollset_uv.h +++ b/src/core/lib/iomgr/pollset_uv.h @@ -31,7 +31,12 @@ * */ +#ifndef GRPC_CORE_LIB_IOMGR_POLLSET_UV_H +#define GRPC_CORE_LIB_IOMGR_POLLSET_UV_H + extern int grpc_pollset_work_run_loop; void grpc_pollset_global_init(void); void grpc_pollset_global_shutdown(void); + +#endif /* GRPC_CORE_LIB_IOMGR_POLLSET_UV_H */ diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c index d48147ce6e1..62746670420 100644 --- a/src/core/lib/iomgr/tcp_client_uv.c +++ b/src/core/lib/iomgr/tcp_client_uv.c @@ -60,9 +60,7 @@ static void uv_tcp_connect_cleanup(grpc_uv_tcp_connect *connect) { gpr_free(connect); } -static void tcp_close_callback(uv_handle_t *handle) { - gpr_free(handle); -} +static void tcp_close_callback(uv_handle_t *handle) { gpr_free(handle); } static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { diff --git a/src/core/lib/iomgr/tcp_server_uv.c b/src/core/lib/iomgr/tcp_server_uv.c index e1eee2d460f..73e4db3d650 100644 --- a/src/core/lib/iomgr/tcp_server_uv.c +++ b/src/core/lib/iomgr/tcp_server_uv.c @@ -178,7 +178,6 @@ static void on_connect(uv_stream_t *server, int status) { char *peer_name_string; int err; - if (status < 0) { gpr_log(GPR_INFO, "Skipping on_accept due to error: %s", uv_strerror(status)); diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index a78a40d261e..05d6eeb2408 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -69,9 +69,7 @@ typedef struct { grpc_pollset *pollset; } grpc_tcp; -static void uv_close_callback(uv_handle_t *handle) { - gpr_free(handle); -} +static void uv_close_callback(uv_handle_t *handle) { gpr_free(handle); } static void tcp_free(grpc_tcp *tcp) { gpr_free(tcp); } diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c index c4884d02310..273f6071927 100644 --- a/src/core/lib/iomgr/udp_server.c +++ b/src/core/lib/iomgr/udp_server.c @@ -38,7 +38,7 @@ #include "src/core/lib/iomgr/port.h" -#ifdef GPR_POSIX_SOCKET +#ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/udp_server.h" @@ -62,6 +62,7 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/ev_posix.h" #include "src/core/lib/iomgr/resolve_address.h" +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/socket_utils_posix.h" #include "src/core/lib/support/string.h" @@ -73,11 +74,7 @@ typedef struct { int fd; grpc_fd *emfd; grpc_udp_server *server; - union { - uint8_t untyped[GRPC_MAX_SOCKADDR_SIZE]; - struct sockaddr sockaddr; - } addr; - size_t addr_len; + grpc_resolved_address addr; grpc_closure read_closure; grpc_closure destroyed_closure; grpc_udp_server_read_cb read_cb; @@ -214,10 +211,9 @@ void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s, } /* Prepare a recently-created socket for listening. */ -static int prepare_socket(int fd, const struct sockaddr *addr, - size_t addr_len) { - struct sockaddr_storage sockname_temp; - socklen_t sockname_len; +static int prepare_socket(int fd, const grpc_resolved_address *addr) { + grpc_resolved_address sockname_temp; + struct sockaddr *addr_ptr = (struct sockaddr *)addr->addr; /* Set send/receive socket buffers to 1 MB */ int buffer_size_bytes = 1024 * 1024; @@ -237,15 +233,15 @@ static int prepare_socket(int fd, const struct sockaddr *addr, if (grpc_set_socket_ip_pktinfo_if_possible(fd) != GRPC_ERROR_NONE) { gpr_log(GPR_ERROR, "Unable to set ip_pktinfo."); goto error; - } else if (addr->sa_family == AF_INET6) { + } else if (addr_ptr->sa_family == AF_INET6) { if (grpc_set_socket_ipv6_recvpktinfo_if_possible(fd) != GRPC_ERROR_NONE) { gpr_log(GPR_ERROR, "Unable to set ipv6_recvpktinfo."); goto error; } } - GPR_ASSERT(addr_len < ~(socklen_t)0); - if (bind(fd, addr, (socklen_t)addr_len) < 0) { + GPR_ASSERT(addr->len < ~(socklen_t)0); + if (bind(fd, (struct sockaddr *)addr, (socklen_t)addr->len) < 0) { char *addr_str; grpc_sockaddr_to_string(&addr_str, addr, 0); gpr_log(GPR_ERROR, "bind addr=%s: %s", addr_str, strerror(errno)); @@ -253,8 +249,10 @@ static int prepare_socket(int fd, const struct sockaddr *addr, goto error; } - sockname_len = sizeof(sockname_temp); - if (getsockname(fd, (struct sockaddr *)&sockname_temp, &sockname_len) < 0) { + sockname_temp.len = sizeof(struct sockaddr_storage); + + if (getsockname(fd, (struct sockaddr *)sockname_temp.addr, + (socklen_t *)&sockname_temp.len) < 0) { goto error; } @@ -270,7 +268,7 @@ static int prepare_socket(int fd, const struct sockaddr *addr, goto error; } - return grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + return grpc_sockaddr_get_port(&sockname_temp); error: if (fd >= 0) { @@ -303,7 +301,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { } static int add_socket_to_server(grpc_udp_server *s, int fd, - const struct sockaddr *addr, size_t addr_len, + const grpc_resolved_address *addr, grpc_udp_server_read_cb read_cb, grpc_udp_server_orphan_cb orphan_cb) { server_port *sp; @@ -311,9 +309,9 @@ static int add_socket_to_server(grpc_udp_server *s, int fd, char *addr_str; char *name; - port = prepare_socket(fd, addr, addr_len); + port = prepare_socket(fd, addr); if (port >= 0) { - grpc_sockaddr_to_string(&addr_str, (struct sockaddr *)&addr, 1); + grpc_sockaddr_to_string(&addr_str, addr, 1); gpr_asprintf(&name, "udp-server-listener:%s", addr_str); gpr_free(addr_str); gpr_mu_lock(&s->mu); @@ -326,8 +324,7 @@ static int add_socket_to_server(grpc_udp_server *s, int fd, sp->server = s; sp->fd = fd; sp->emfd = grpc_fd_create(fd, name); - memcpy(sp->addr.untyped, addr, addr_len); - sp->addr_len = addr_len; + memcpy(&sp->addr, addr, sizeof(grpc_resolved_address)); sp->read_cb = read_cb; sp->orphan_cb = orphan_cb; GPR_ASSERT(sp->emfd); @@ -338,34 +335,34 @@ static int add_socket_to_server(grpc_udp_server *s, int fd, return port; } -int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr, - size_t addr_len, grpc_udp_server_read_cb read_cb, +int grpc_udp_server_add_port(grpc_udp_server *s, + const grpc_resolved_address *addr, + grpc_udp_server_read_cb read_cb, grpc_udp_server_orphan_cb orphan_cb) { int allocated_port1 = -1; int allocated_port2 = -1; unsigned i; int fd; grpc_dualstack_mode dsmode; - struct sockaddr_in6 addr6_v4mapped; - struct sockaddr_in wild4; - struct sockaddr_in6 wild6; - struct sockaddr_in addr4_copy; - struct sockaddr *allocated_addr = NULL; - struct sockaddr_storage sockname_temp; - socklen_t sockname_len; + grpc_resolved_address addr6_v4mapped; + grpc_resolved_address wild4; + grpc_resolved_address wild6; + grpc_resolved_address addr4_copy; + grpc_resolved_address *allocated_addr = NULL; + grpc_resolved_address sockname_temp; int port; /* Check if this is a wildcard port, and if so, try to keep the port the same as some previously created listener. */ if (grpc_sockaddr_get_port(addr) == 0) { for (i = 0; i < s->nports; i++) { - sockname_len = sizeof(sockname_temp); - if (0 == getsockname(s->ports[i].fd, (struct sockaddr *)&sockname_temp, - &sockname_len)) { - port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + sockname_temp.len = sizeof(struct sockaddr_storage); + if (0 == getsockname(s->ports[i].fd, (struct sockaddr *)sockname_temp.addr, + (socklen_t *)&sockname_temp.len)) { + port = grpc_sockaddr_get_port(&sockname_temp); if (port > 0) { - allocated_addr = gpr_malloc(addr_len); - memcpy(allocated_addr, addr, addr_len); + allocated_addr = gpr_malloc(sizeof(grpc_resolved_address)); + memcpy(allocated_addr, addr, sizeof(grpc_resolved_address)); grpc_sockaddr_set_port(allocated_addr, port); addr = allocated_addr; break; @@ -375,8 +372,7 @@ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr, } if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) { - addr = (const struct sockaddr *)&addr6_v4mapped; - addr_len = sizeof(addr6_v4mapped); + addr = &addr6_v4mapped; } /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */ @@ -384,22 +380,20 @@ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr, grpc_sockaddr_make_wildcards(port, &wild4, &wild6); /* Try listening on IPv6 first. */ - addr = (struct sockaddr *)&wild6; - addr_len = sizeof(wild6); + addr = &wild6; // TODO(rjshade): Test and propagate the returned grpc_error*: grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP, &dsmode, &fd); allocated_port1 = - add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb); + add_socket_to_server(s, fd, addr, read_cb, orphan_cb); if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) { goto done; } /* If we didn't get a dualstack socket, also listen on 0.0.0.0. */ if (port == 0 && allocated_port1 > 0) { - grpc_sockaddr_set_port((struct sockaddr *)&wild4, allocated_port1); + grpc_sockaddr_set_port(&wild4, allocated_port1); } - addr = (struct sockaddr *)&wild4; - addr_len = sizeof(wild4); + addr = &wild4; } // TODO(rjshade): Test and propagate the returned grpc_error*: @@ -409,11 +403,9 @@ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr, } if (dsmode == GRPC_DSMODE_IPV4 && grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) { - addr = (struct sockaddr *)&addr4_copy; - addr_len = sizeof(addr4_copy); + addr = &addr4_copy; } - allocated_port2 = - add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb); + allocated_port2 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb); done: gpr_free(allocated_addr); diff --git a/src/core/lib/iomgr/udp_server.h b/src/core/lib/iomgr/udp_server.h index 33c5ce11cda..e8129be46c3 100644 --- a/src/core/lib/iomgr/udp_server.h +++ b/src/core/lib/iomgr/udp_server.h @@ -36,6 +36,7 @@ #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/ev_posix.h" +#include "src/core/lib/iomgr/resolve_address.h" /* Forward decl of struct grpc_server */ /* This is not typedef'ed to avoid a typedef-redefinition error */ @@ -71,8 +72,8 @@ int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned index); /* TODO(ctiller): deprecate this, and make grpc_udp_server_add_ports to handle all of the multiple socket port matching logic in one place */ -int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr, - size_t addr_len, grpc_udp_server_read_cb read_cb, +int grpc_udp_server_add_port(grpc_udp_server *s, const grpc_resolved_address *addr, + grpc_udp_server_read_cb read_cb, grpc_udp_server_orphan_cb orphan_cb); void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *server, diff --git a/test/core/end2end/cq_verifier_native.c b/test/core/end2end/cq_verifier_native.c index fa9a87d6e40..b1fcb4beedd 100644 --- a/test/core/end2end/cq_verifier_native.c +++ b/test/core/end2end/cq_verifier_native.c @@ -48,7 +48,7 @@ struct cq_verifier { cq_verifier *cq_verifier_create(grpc_completion_queue *cq) { cq_verifier *v = gpr_malloc(sizeof(cq_verifier)); v->cq = cq; - cq_verifier_set_first_expectation(v,NULL); + cq_verifier_set_first_expectation(v, NULL); return v; } @@ -66,7 +66,8 @@ void cq_verifier_set_first_expectation(cq_verifier *v, expectation *e) { } grpc_event cq_verifier_next_event(cq_verifier *v, int timeout_seconds) { - const gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(timeout_seconds); + const gpr_timespec deadline = + GRPC_TIMEOUT_SECONDS_TO_DEADLINE(timeout_seconds); return grpc_completion_queue_next(v->cq, deadline, NULL); } diff --git a/test/core/end2end/cq_verifier_uv.c b/test/core/end2end/cq_verifier_uv.c index 74ac673f204..2b5a2ca495a 100644 --- a/test/core/end2end/cq_verifier_uv.c +++ b/test/core/end2end/cq_verifier_uv.c @@ -92,16 +92,19 @@ static void timer_run_cb(uv_timer_t *timer) { } grpc_event cq_verifier_next_event(cq_verifier *v, int timeout_seconds) { - uint64_t timeout_ms = timeout_seconds < 0 ? 0 : (uint64_t)timeout_seconds * 1000; + uint64_t timeout_ms = + timeout_seconds < 0 ? 0 : (uint64_t)timeout_seconds * 1000; grpc_event ev; v->timer.data = (void *)TIMER_STARTED; uv_timer_start(&v->timer, timer_run_cb, timeout_ms, 0); - ev = grpc_completion_queue_next(v->cq, gpr_inf_past(GPR_CLOCK_MONOTONIC), NULL); + ev = grpc_completion_queue_next(v->cq, gpr_inf_past(GPR_CLOCK_MONOTONIC), + NULL); // Stop the loop if the timer goes off or we get a non-timeout event while (((timer_state)v->timer.data != TIMER_TRIGGERED) && - ev.type == GRPC_QUEUE_TIMEOUT){ + ev.type == GRPC_QUEUE_TIMEOUT) { uv_run(uv_default_loop(), UV_RUN_ONCE); - ev = grpc_completion_queue_next(v->cq, gpr_inf_past(GPR_CLOCK_MONOTONIC), NULL); + ev = grpc_completion_queue_next(v->cq, gpr_inf_past(GPR_CLOCK_MONOTONIC), + NULL); } return ev; } diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c index 3fb25360fe2..f427202a7b5 100644 --- a/test/core/end2end/dualstack_socket_test.c +++ b/test/core/end2end/dualstack_socket_test.c @@ -361,8 +361,6 @@ int main(int argc, char **argv) { #else /* GRPC_POSIX_SOCKET */ -int main(int argc, char **argv) { - return 1; -} +int main(int argc, char **argv) { return 1; } #endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/end2end/fake_resolver.c b/test/core/end2end/fake_resolver.c index 8a6624a49ab..350cd4a36b0 100644 --- a/test/core/end2end/fake_resolver.c +++ b/test/core/end2end/fake_resolver.c @@ -165,10 +165,7 @@ static grpc_resolver* fake_resolver_create(grpc_resolver_factory* factory, grpc_uri ith_uri = *args->uri; char* part_str = gpr_dump_slice(path_parts.slices[i], GPR_DUMP_ASCII); ith_uri.path = part_str; - if (!parse_ipv4( - &ith_uri, - (struct sockaddr_storage*)(&addresses->addresses[i].address.addr), - &addresses->addresses[i].address.len)) { + if (!parse_ipv4(&ith_uri, &addresses->addresses[i].address)) { errors_found = true; } gpr_free(part_str); diff --git a/test/core/end2end/fixtures/h2_fd.c b/test/core/end2end/fixtures/h2_fd.c index 0eaf042aa26..e9fd6668ed0 100644 --- a/test/core/end2end/fixtures/h2_fd.c +++ b/test/core/end2end/fixtures/h2_fd.c @@ -134,8 +134,6 @@ int main(int argc, char **argv) { #else /* GRPC_POSIX_SOCKET */ -int main(int argc, char **argv) { - return 1; -} +int main(int argc, char **argv) { return 1; } #endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/end2end/fixtures/h2_full+pipe.c b/test/core/end2end/fixtures/h2_full+pipe.c index 11619b099e8..0a9a5f4dd3f 100644 --- a/test/core/end2end/fixtures/h2_full+pipe.c +++ b/test/core/end2end/fixtures/h2_full+pipe.c @@ -127,8 +127,6 @@ int main(int argc, char **argv) { #else /* GRPC_POSIX_WAKEUP_FD */ -int main(int argc, char **argv) { - return 1; -} +int main(int argc, char **argv) { return 1; } #endif /* GRPC_POSIX_WAKEUP_FD */ diff --git a/test/core/end2end/fixtures/h2_full+trace.c b/test/core/end2end/fixtures/h2_full+trace.c index e25b5e33470..78a33c7e9a2 100644 --- a/test/core/end2end/fixtures/h2_full+trace.c +++ b/test/core/end2end/fixtures/h2_full+trace.c @@ -31,9 +31,14 @@ * */ +#include "src/core/lib/iomgr/port.h" + #include "test/core/end2end/end2end_tests.h" #include +#ifdef GRPC_POSIX_SOCKET +#include +#endif #include #include @@ -45,7 +50,6 @@ #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" #include "src/core/lib/channel/connected_channel.h" #include "src/core/lib/channel/http_server_filter.h" -#include "src/core/lib/iomgr/port.h" #include "src/core/lib/support/env.h" #include "src/core/lib/surface/channel.h" #include "src/core/lib/surface/server.h" diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c index d0925e51099..4f3fbf22bf7 100644 --- a/test/core/end2end/fixtures/h2_sockpair+trace.c +++ b/test/core/end2end/fixtures/h2_sockpair+trace.c @@ -31,9 +31,14 @@ * */ +#include "src/core/lib/iomgr/port.h" + #include "test/core/end2end/end2end_tests.h" #include +#ifdef GRPC_POSIX_SOCKET +#include +#endif #include #include @@ -48,7 +53,6 @@ #include "src/core/lib/channel/http_server_filter.h" #include "src/core/lib/iomgr/endpoint_pair.h" #include "src/core/lib/iomgr/iomgr.h" -#include "src/core/lib/iomgr/port.h" #include "src/core/lib/support/env.h" #include "src/core/lib/surface/channel.h" #include "src/core/lib/surface/completion_queue.h" diff --git a/test/core/iomgr/fd_posix_test.c b/test/core/iomgr/fd_posix_test.c index bf6d5377a6c..6166699fe62 100644 --- a/test/core/iomgr/fd_posix_test.c +++ b/test/core/iomgr/fd_posix_test.c @@ -556,8 +556,6 @@ int main(int argc, char **argv) { #else /* GRPC_POSIX_SOCKET */ -int main(int argc, char **argv) { - return 1; -} +int main(int argc, char **argv) { return 1; } #endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c index bb789e4c5a5..67bc914c15c 100644 --- a/test/core/iomgr/socket_utils_test.c +++ b/test/core/iomgr/socket_utils_test.c @@ -75,8 +75,6 @@ int main(int argc, char **argv) { #else /* GRPC_POSIX_SOCKET */ -int main(int argc, char **argv) { - return 1; -} +int main(int argc, char **argv) { return 1; } #endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c index 495e648090b..d998958744c 100644 --- a/test/core/iomgr/tcp_posix_test.c +++ b/test/core/iomgr/tcp_posix_test.c @@ -552,8 +552,6 @@ int main(int argc, char **argv) { #else /* GRPC_POSIX_SOCKET */ -int main(int argc, char **argv) { - return 1; -} +int main(int argc, char **argv) { return 1; } #endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c index d1c0af55fec..e246816435d 100644 --- a/test/core/iomgr/tcp_server_posix_test.c +++ b/test/core/iomgr/tcp_server_posix_test.c @@ -368,8 +368,6 @@ int main(int argc, char **argv) { #else /* GRPC_POSIX_SOCKET */ -int main(int argc, char **argv) { - return 1; -} +int main(int argc, char **argv) { return 1; } #endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/iomgr/timer_heap_test.c b/test/core/iomgr/timer_heap_test.c index a68988df77b..410d972313b 100644 --- a/test/core/iomgr/timer_heap_test.c +++ b/test/core/iomgr/timer_heap_test.c @@ -323,8 +323,6 @@ int main(int argc, char **argv) { #else /* GRPC_TIMER_USE_GENERIC */ -int main(int argc, char **argv) { - return 1; -} +int main(int argc, char **argv) { return 1; } #endif /* GRPC_TIMER_USE_GENERIC */ diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c index 2a304275043..ac92f53f51d 100644 --- a/test/core/iomgr/udp_server_test.c +++ b/test/core/iomgr/udp_server_test.c @@ -31,6 +31,11 @@ * */ +#include "src/core/lib/iomgr/port.h" + +// This test won't work except with posix sockets enabled +#ifdef GRPC_POSIX_SOCKET + #include "src/core/lib/iomgr/udp_server.h" #include @@ -98,13 +103,15 @@ static void test_no_op_with_start(void) { static void test_no_op_with_port(void) { g_number_of_orphan_calls = 0; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - struct sockaddr_in addr; + grpc_resolved_address resolved_addr; + struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr; grpc_udp_server *s = grpc_udp_server_create(); LOG_TEST("test_no_op_with_port"); - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr), + memset(&resolved_addr, 0, sizeof(resolved_addr)); + resolved_addr.len = sizeof(struct sockaddr_in); + addr->sin_family = AF_INET; + GPR_ASSERT(grpc_udp_server_add_port(s, &resolved_addr, on_read, on_fd_orphaned)); grpc_udp_server_destroy(&exec_ctx, s, NULL); @@ -117,13 +124,15 @@ static void test_no_op_with_port(void) { static void test_no_op_with_port_and_start(void) { g_number_of_orphan_calls = 0; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - struct sockaddr_in addr; + grpc_resolved_address resolved_addr; + struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr; grpc_udp_server *s = grpc_udp_server_create(); LOG_TEST("test_no_op_with_port_and_start"); - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr), + memset(&resolved_addr, 0, sizeof(resolved_addr)); + resolved_addr.len = sizeof(struct sockaddr_in); + addr->sin_family = AF_INET; + GPR_ASSERT(grpc_udp_server_add_port(s, &resolved_addr, on_read, on_fd_orphaned)); grpc_udp_server_start(&exec_ctx, s, NULL, 0, NULL); @@ -137,8 +146,8 @@ static void test_no_op_with_port_and_start(void) { static void test_receive(int number_of_clients) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); + grpc_resolved_address resolved_addr; + struct sockaddr_storage *addr = (struct sockaddr_storage *)resolved_addr.addr; int clifd, svrfd; grpc_udp_server *s = grpc_udp_server_create(); int i; @@ -151,15 +160,16 @@ static void test_receive(int number_of_clients) { g_number_of_bytes_read = 0; g_number_of_orphan_calls = 0; - memset(&addr, 0, sizeof(addr)); - addr.ss_family = AF_INET; - GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, addr_len, + memset(&resolved_addr, 0, sizeof(resolved_addr)); + resolved_addr.len = sizeof(struct sockaddr_storage); + addr->ss_family = AF_INET; + GPR_ASSERT(grpc_udp_server_add_port(s, &resolved_addr, on_read, on_fd_orphaned)); svrfd = grpc_udp_server_get_fd(s, 0); GPR_ASSERT(svrfd >= 0); - GPR_ASSERT(getsockname(svrfd, (struct sockaddr *)&addr, &addr_len) == 0); - GPR_ASSERT(addr_len <= sizeof(addr)); + GPR_ASSERT(getsockname(svrfd, (struct sockaddr *)addr, (socklen_t *)&resolved_addr.len) == 0); + GPR_ASSERT(resolved_addr.len <= sizeof(struct sockaddr_storage)); pollsets[0] = g_pollset; grpc_udp_server_start(&exec_ctx, s, pollsets, 1, NULL); @@ -171,9 +181,9 @@ static void test_receive(int number_of_clients) { number_of_reads_before = g_number_of_reads; /* Create a socket, send a packet to the UDP server. */ - clifd = socket(addr.ss_family, SOCK_DGRAM, 0); + clifd = socket(addr->ss_family, SOCK_DGRAM, 0); GPR_ASSERT(clifd >= 0); - GPR_ASSERT(connect(clifd, (struct sockaddr *)&addr, addr_len) == 0); + GPR_ASSERT(connect(clifd, (struct sockaddr *)&addr, (socklen_t)resolved_addr.len) == 0); GPR_ASSERT(5 == write(clifd, "hello", 5)); while (g_number_of_reads == number_of_reads_before && gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) > 0) { @@ -227,3 +237,9 @@ int main(int argc, char **argv) { grpc_iomgr_shutdown(); return 0; } + +#else /* GRPC_POSIX_SOCKET */ + +int main(int argc, char **argv) { return 1; } + +#endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/util/port_uv.c b/test/core/util/port_uv.c index cab31b3f4ec..0c9c0d87d66 100644 --- a/test/core/util/port_uv.c +++ b/test/core/util/port_uv.c @@ -112,8 +112,6 @@ int grpc_pick_unused_port_or_die(void) { return port; } -void grpc_recycle_unused_port(int port) { - GPR_ASSERT(free_chosen_port(port)); -} +void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); } #endif /* GRPC_UV && GRPC_TEST_PICK_PORT */ diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 4930e07b0cb..740a991db64 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -411,9 +411,7 @@ ], "cpu_cost": 0.1, "exclude_configs": [], - "exclude_iomgrs": [ - "uv" - ], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -435,6 +433,9 @@ ], "cpu_cost": 0.1, "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -2167,7 +2168,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", From 4251945f161bcce45235c92e9fceefa3de4ae08b Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Wed, 12 Oct 2016 18:56:42 +0200 Subject: [PATCH 112/286] save time when creating matrix workspaces on win and mac --- tools/run_tests/run_tests_in_workspace.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/run_tests/run_tests_in_workspace.sh b/tools/run_tests/run_tests_in_workspace.sh index 98ef3566db1..9c6c5b76e06 100755 --- a/tools/run_tests/run_tests_in_workspace.sh +++ b/tools/run_tests/run_tests_in_workspace.sh @@ -35,11 +35,13 @@ set -ex cd $(dirname $0)/../.. +export repo_root=$(pwd) rm -rf "${WORKSPACE_NAME}" -# TODO(jtattermusch): clone --recursive fetches the submodules from github. -# Try avoiding that to save time and network capacity. -git clone --recursive . "${WORKSPACE_NAME}" +git clone . "${WORKSPACE_NAME}" +# clone gRPC submodules, use data from locally cloned submodules where possible +git submodule foreach 'cd "${repo_root}/${WORKSPACE_NAME}" \ + && git submodule update --init --reference ${repo_root}/${name} ${name}' echo "Running run_tests.py in workspace ${WORKSPACE_NAME}" python "${WORKSPACE_NAME}/tools/run_tests/run_tests.py" $@ From 1687cab9ed8b286f78db1f11b1baa0094b236d83 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 11 Oct 2016 11:42:01 -0700 Subject: [PATCH 113/286] Add libuv tests, and installation step in dockerfile --- .../dockerfile/test/cxx_jessie_x64/Dockerfile | 8 +++++ tools/run_tests/run_tests.py | 4 +-- tools/run_tests/run_tests_matrix.py | 32 ++++++++++++------- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/tools/dockerfile/test/cxx_jessie_x64/Dockerfile b/tools/dockerfile/test/cxx_jessie_x64/Dockerfile index 67cee19914d..b9216571ef0 100644 --- a/tools/dockerfile/test/cxx_jessie_x64/Dockerfile +++ b/tools/dockerfile/test/cxx_jessie_x64/Dockerfile @@ -115,6 +115,14 @@ RUN cd llvm-build && cmake \ ../llvm RUN make -C llvm-build -j 12 && make -C llvm-build install && rm -rf llvm-build +#================ +# libuv +RUN cd /tmp \ + && wget http://dist.libuv.org/dist/v1.9.1/libuv-v1.9.1.tar.gz \ + && tar -xf libuv-v1.9.1.tar.gz \ + && cd libuv-v1.9.1 \ + && sh autogen.sh && ./configure --prefix=/usr && make && make install + # Prepare ccache RUN ln -s /usr/bin/ccache /usr/local/bin/gcc RUN ln -s /usr/bin/ccache /usr/local/bin/g++ diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index e8818d77e06..a146ac8f665 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -207,11 +207,11 @@ class CLanguage(object): cflags = '-DGRPC_UV ' try: cflags += subprocess.check_output(['pkg-config', '--cflags', 'libuv']).strip() + ' ' - except subprocess.CalledProcessError: + except (subprocess.CalledProcessError, OSError): pass try: ldflags = subprocess.check_output(['pkg-config', '--libs', 'libuv']).strip() + ' ' - except subprocess.CalledProcessError: + except (subprocess.CalledProcessError, OSError): ldflags = '-luv ' self._make_options += ['EXTRA_CPPFLAGS={}'.format(cflags), 'EXTRA_LDLIBS={}'.format(ldflags)] diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index a94f9cfef5e..ca459fbdbd2 100755 --- a/tools/run_tests/run_tests_matrix.py +++ b/tools/run_tests/run_tests_matrix.py @@ -111,28 +111,28 @@ def _create_test_jobs(extra_args=[]): platforms=['linux'], labels=['basictests'], extra_args=extra_args) - + # supported on all platforms. test_jobs += _generate_jobs(languages=['c', 'csharp', 'node', 'python'], configs=['dbg', 'opt'], platforms=['linux', 'macos', 'windows'], labels=['basictests'], extra_args=extra_args) - + # supported on linux and mac. test_jobs += _generate_jobs(languages=['c++', 'ruby', 'php'], configs=['dbg', 'opt'], platforms=['linux', 'macos'], labels=['basictests'], extra_args=extra_args) - + # supported on mac only. test_jobs += _generate_jobs(languages=['objc'], configs=['dbg', 'opt'], platforms=['macos'], labels=['basictests'], extra_args=extra_args) - + # sanitizers test_jobs += _generate_jobs(languages=['c'], configs=['msan', 'asan', 'tsan'], @@ -144,9 +144,17 @@ def _create_test_jobs(extra_args=[]): platforms=['linux'], labels=['sanitizers'], extra_args=extra_args) + + # libuv tests + test_jobs += _generate_jobs(languages=['c'], + configs=['dbg', 'opt'], + platforms=['linux'], + labels=['libuv'], + extra_args=extra_args + ['--iomgr_platform=uv']) + return test_jobs - + def _create_portability_test_jobs(extra_args=[]): test_jobs = [] # portability C x86 @@ -157,7 +165,7 @@ def _create_portability_test_jobs(extra_args=[]): compiler='default', labels=['portability'], extra_args=extra_args) - + # portability C and C++ on x64 for compiler in ['gcc4.4', 'gcc4.6', 'gcc5.3', 'clang3.5', 'clang3.6', 'clang3.7']: @@ -168,7 +176,7 @@ def _create_portability_test_jobs(extra_args=[]): compiler=compiler, labels=['portability'], extra_args=extra_args) - + # portability C on Windows for arch in ['x86', 'x64']: for compiler in ['vs2013', 'vs2015']: @@ -179,7 +187,7 @@ def _create_portability_test_jobs(extra_args=[]): compiler=compiler, labels=['portability'], extra_args=extra_args) - + test_jobs += _generate_jobs(languages=['python'], configs=['dbg'], platforms=['linux'], @@ -187,7 +195,7 @@ def _create_portability_test_jobs(extra_args=[]): compiler='python3.4', labels=['portability'], extra_args=extra_args) - + test_jobs += _generate_jobs(languages=['csharp'], configs=['dbg'], platforms=['linux'], @@ -195,7 +203,7 @@ def _create_portability_test_jobs(extra_args=[]): compiler='coreclr', labels=['portability'], extra_args=extra_args) - return test_jobs + return test_jobs def _allowed_labels(): @@ -248,12 +256,12 @@ if not jobs: jobset.message('FAILED', 'No test suites match given criteria.', do_newline=True) sys.exit(1) - + print('IMPORTANT: The changes you are testing need to be locally committed') print('because only the committed changes in the current branch will be') print('copied to the docker environment or into subworkspaces.') -print +print print 'Will run these tests:' for job in jobs: if args.dry_run: From 22d50e98d8dbff93a7221cd705130b1192c34ffa Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 12 Oct 2016 09:54:49 -0700 Subject: [PATCH 114/286] Fix sanity and move a header include --- src/core/lib/iomgr/resolve_address.h | 1 - src/core/lib/iomgr/timer_uv.h | 6 +++--- src/core/lib/iomgr/udp_server.c | 6 +++--- src/core/lib/iomgr/udp_server.h | 3 ++- .../tools/dockerfile/libuv_install.include | 7 +++++++ .../test/cxx_jessie_x64/Dockerfile.template | 5 +++-- test/core/iomgr/resolve_address_test.c | 1 + test/core/iomgr/udp_server_test.c | 18 ++++++++++-------- .../dockerfile/test/cxx_jessie_x64/Dockerfile | 11 +++-------- 9 files changed, 32 insertions(+), 26 deletions(-) create mode 100644 templates/tools/dockerfile/libuv_install.include diff --git a/src/core/lib/iomgr/resolve_address.h b/src/core/lib/iomgr/resolve_address.h index ddbe3757555..275924448a1 100644 --- a/src/core/lib/iomgr/resolve_address.h +++ b/src/core/lib/iomgr/resolve_address.h @@ -36,7 +36,6 @@ #include #include "src/core/lib/iomgr/exec_ctx.h" -#include "src/core/lib/iomgr/iomgr.h" #define GRPC_MAX_SOCKADDR_SIZE 128 diff --git a/src/core/lib/iomgr/timer_uv.h b/src/core/lib/iomgr/timer_uv.h index b64291b036d..3de383ebd50 100644 --- a/src/core/lib/iomgr/timer_uv.h +++ b/src/core/lib/iomgr/timer_uv.h @@ -31,8 +31,8 @@ * */ -#ifndef GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H -#define GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H +#ifndef GRPC_CORE_LIB_IOMGR_TIMER_UV_H +#define GRPC_CORE_LIB_IOMGR_TIMER_UV_H #include "src/core/lib/iomgr/exec_ctx.h" @@ -44,4 +44,4 @@ struct grpc_timer { int triggered; }; -#endif /* GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H */ +#endif /* GRPC_CORE_LIB_IOMGR_TIMER_UV_H */ diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c index 273f6071927..0d31b255e97 100644 --- a/src/core/lib/iomgr/udp_server.c +++ b/src/core/lib/iomgr/udp_server.c @@ -357,7 +357,8 @@ int grpc_udp_server_add_port(grpc_udp_server *s, if (grpc_sockaddr_get_port(addr) == 0) { for (i = 0; i < s->nports; i++) { sockname_temp.len = sizeof(struct sockaddr_storage); - if (0 == getsockname(s->ports[i].fd, (struct sockaddr *)sockname_temp.addr, + if (0 == getsockname(s->ports[i].fd, + (struct sockaddr *)sockname_temp.addr, (socklen_t *)&sockname_temp.len)) { port = grpc_sockaddr_get_port(&sockname_temp); if (port > 0) { @@ -383,8 +384,7 @@ int grpc_udp_server_add_port(grpc_udp_server *s, addr = &wild6; // TODO(rjshade): Test and propagate the returned grpc_error*: grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP, &dsmode, &fd); - allocated_port1 = - add_socket_to_server(s, fd, addr, read_cb, orphan_cb); + allocated_port1 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb); if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) { goto done; } diff --git a/src/core/lib/iomgr/udp_server.h b/src/core/lib/iomgr/udp_server.h index e8129be46c3..a95086e9aec 100644 --- a/src/core/lib/iomgr/udp_server.h +++ b/src/core/lib/iomgr/udp_server.h @@ -72,7 +72,8 @@ int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned index); /* TODO(ctiller): deprecate this, and make grpc_udp_server_add_ports to handle all of the multiple socket port matching logic in one place */ -int grpc_udp_server_add_port(grpc_udp_server *s, const grpc_resolved_address *addr, +int grpc_udp_server_add_port(grpc_udp_server *s, + const grpc_resolved_address *addr, grpc_udp_server_read_cb read_cb, grpc_udp_server_orphan_cb orphan_cb); diff --git a/templates/tools/dockerfile/libuv_install.include b/templates/tools/dockerfile/libuv_install.include new file mode 100644 index 00000000000..a249c095db1 --- /dev/null +++ b/templates/tools/dockerfile/libuv_install.include @@ -0,0 +1,7 @@ +#================ +# libuv +RUN cd /tmp \ + && wget http://dist.libuv.org/dist/v1.9.1/libuv-v1.9.1.tar.gz \ + && tar -xf libuv-v1.9.1.tar.gz \ + && cd libuv-v1.9.1 \ + && sh autogen.sh && ./configure --prefix=/usr && make && make install \ No newline at end of file diff --git a/templates/tools/dockerfile/test/cxx_jessie_x64/Dockerfile.template b/templates/tools/dockerfile/test/cxx_jessie_x64/Dockerfile.template index 04767248b8b..211baff2d1d 100644 --- a/templates/tools/dockerfile/test/cxx_jessie_x64/Dockerfile.template +++ b/templates/tools/dockerfile/test/cxx_jessie_x64/Dockerfile.template @@ -28,13 +28,14 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + FROM debian:jessie - + <%include file="../../apt_get_basic.include"/> <%include file="../../python_deps.include"/> <%include file="../../cxx_deps.include"/> <%include file="../../clang_update.include"/> <%include file="../../run_tests_addons.include"/> + <%include file="../../libuv_install.include"/> # Define the default command. CMD ["bash"] diff --git a/test/core/iomgr/resolve_address_test.c b/test/core/iomgr/resolve_address_test.c index 4417d960432..2dd0d88b3f8 100644 --- a/test/core/iomgr/resolve_address_test.c +++ b/test/core/iomgr/resolve_address_test.c @@ -36,6 +36,7 @@ #include #include #include "src/core/lib/iomgr/executor.h" +#include "src/core/lib/iomgr/iomgr.h" #include "test/core/util/test_config.h" static gpr_timespec test_deadline(void) { diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c index ac92f53f51d..026584bf53a 100644 --- a/test/core/iomgr/udp_server_test.c +++ b/test/core/iomgr/udp_server_test.c @@ -111,8 +111,8 @@ static void test_no_op_with_port(void) { memset(&resolved_addr, 0, sizeof(resolved_addr)); resolved_addr.len = sizeof(struct sockaddr_in); addr->sin_family = AF_INET; - GPR_ASSERT(grpc_udp_server_add_port(s, &resolved_addr, - on_read, on_fd_orphaned)); + GPR_ASSERT( + grpc_udp_server_add_port(s, &resolved_addr, on_read, on_fd_orphaned)); grpc_udp_server_destroy(&exec_ctx, s, NULL); grpc_exec_ctx_finish(&exec_ctx); @@ -132,8 +132,8 @@ static void test_no_op_with_port_and_start(void) { memset(&resolved_addr, 0, sizeof(resolved_addr)); resolved_addr.len = sizeof(struct sockaddr_in); addr->sin_family = AF_INET; - GPR_ASSERT(grpc_udp_server_add_port(s, &resolved_addr, - on_read, on_fd_orphaned)); + GPR_ASSERT( + grpc_udp_server_add_port(s, &resolved_addr, on_read, on_fd_orphaned)); grpc_udp_server_start(&exec_ctx, s, NULL, 0, NULL); @@ -163,12 +163,13 @@ static void test_receive(int number_of_clients) { memset(&resolved_addr, 0, sizeof(resolved_addr)); resolved_addr.len = sizeof(struct sockaddr_storage); addr->ss_family = AF_INET; - GPR_ASSERT(grpc_udp_server_add_port(s, &resolved_addr, - on_read, on_fd_orphaned)); + GPR_ASSERT( + grpc_udp_server_add_port(s, &resolved_addr, on_read, on_fd_orphaned)); svrfd = grpc_udp_server_get_fd(s, 0); GPR_ASSERT(svrfd >= 0); - GPR_ASSERT(getsockname(svrfd, (struct sockaddr *)addr, (socklen_t *)&resolved_addr.len) == 0); + GPR_ASSERT(getsockname(svrfd, (struct sockaddr *)addr, + (socklen_t *)&resolved_addr.len) == 0); GPR_ASSERT(resolved_addr.len <= sizeof(struct sockaddr_storage)); pollsets[0] = g_pollset; @@ -183,7 +184,8 @@ static void test_receive(int number_of_clients) { /* Create a socket, send a packet to the UDP server. */ clifd = socket(addr->ss_family, SOCK_DGRAM, 0); GPR_ASSERT(clifd >= 0); - GPR_ASSERT(connect(clifd, (struct sockaddr *)&addr, (socklen_t)resolved_addr.len) == 0); + GPR_ASSERT(connect(clifd, (struct sockaddr *)&addr, + (socklen_t)resolved_addr.len) == 0); GPR_ASSERT(5 == write(clifd, "hello", 5)); while (g_number_of_reads == number_of_reads_before && gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) > 0) { diff --git a/tools/dockerfile/test/cxx_jessie_x64/Dockerfile b/tools/dockerfile/test/cxx_jessie_x64/Dockerfile index b9216571ef0..1f6641ac42d 100644 --- a/tools/dockerfile/test/cxx_jessie_x64/Dockerfile +++ b/tools/dockerfile/test/cxx_jessie_x64/Dockerfile @@ -115,14 +115,6 @@ RUN cd llvm-build && cmake \ ../llvm RUN make -C llvm-build -j 12 && make -C llvm-build install && rm -rf llvm-build -#================ -# libuv -RUN cd /tmp \ - && wget http://dist.libuv.org/dist/v1.9.1/libuv-v1.9.1.tar.gz \ - && tar -xf libuv-v1.9.1.tar.gz \ - && cd libuv-v1.9.1 \ - && sh autogen.sh && ./configure --prefix=/usr && make && make install - # Prepare ccache RUN ln -s /usr/bin/ccache /usr/local/bin/gcc RUN ln -s /usr/bin/ccache /usr/local/bin/g++ @@ -134,5 +126,8 @@ RUN ln -s /usr/bin/ccache /usr/local/bin/clang++ RUN mkdir /var/local/jenkins +#================ +# libuv +RUN cd /tmp && wget http://dist.libuv.org/dist/v1.9.1/libuv-v1.9.1.tar.gz && tar -xf libuv-v1.9.1.tar.gz && cd libuv-v1.9.1 && sh autogen.sh && ./configure --prefix=/usr && make && make install # Define the default command. CMD ["bash"] From a460192d926d9d4adf76ef35d8ef1521623e2123 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 12 Oct 2016 13:19:40 -0700 Subject: [PATCH 115/286] Minor fixes to sockaddr changes --- src/core/lib/iomgr/socket_utils_posix.c | 2 +- test/core/iomgr/tcp_client_posix_test.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/lib/iomgr/socket_utils_posix.c b/src/core/lib/iomgr/socket_utils_posix.c index 9e95c276daf..9dea0c0cd88 100644 --- a/src/core/lib/iomgr/socket_utils_posix.c +++ b/src/core/lib/iomgr/socket_utils_posix.c @@ -50,7 +50,7 @@ int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock, GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); GPR_ASSERT(resolved_addr->len <= (socklen_t)-1); fd = accept(sockfd, (struct sockaddr *)resolved_addr->addr, - (socklen_t)resolved_addr->len); + (socklen_t *)&resolved_addr->len); if (fd >= 0) { if (nonblock) { flags = fcntl(fd, F_GETFL, 0); diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c index b544f5b21b9..6c6962ed7a2 100644 --- a/test/core/iomgr/tcp_client_posix_test.c +++ b/test/core/iomgr/tcp_client_posix_test.c @@ -120,7 +120,8 @@ void test_succeeds(void) { /* await the connection */ do { resolved_addr.len = sizeof(addr); - r = accept(svr_fd, addr, (socklen_t *)&resolved_addr.len); + r = accept(svr_fd, (struct sockaddr *)addr, + (socklen_t *)&resolved_addr.len); } while (r == -1 && errno == EINTR); GPR_ASSERT(r >= 0); close(r); From a8d6681cce0e605a8ae401523c77c7ad3ca211bb Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Thu, 13 Oct 2016 10:09:39 -0700 Subject: [PATCH 116/286] Update Podfile --- src/objective-c/tests/Connectivity/Podfile | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/objective-c/tests/Connectivity/Podfile b/src/objective-c/tests/Connectivity/Podfile index f9224d9e4e9..547a38b1ca2 100644 --- a/src/objective-c/tests/Connectivity/Podfile +++ b/src/objective-c/tests/Connectivity/Podfile @@ -1,10 +1,31 @@ install! 'cocoapods', :deterministic_uuids => false +platform :ios, '8.0' # Location of gRPC's repo root relative to this file. GRPC_LOCAL_SRC = '../../../..' target 'ConnectivityTestingApp' do pod 'gRPC', :path => GRPC_LOCAL_SRC + pod 'gRPC-Core', :path => GRPC_LOCAL_SRC + pod 'gRPC-ProtoRPC', :path => GRPC_LOCAL_SRC pod 'Protobuf', :path => "#{GRPC_LOCAL_SRC}/third_party/protobuf" pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c" end + +pre_install do |installer| + # This is the gRPC-Core podspec object, as initialized by its podspec file. + grpc_core_spec = installer.pod_targets.find{|t| t.name == 'gRPC-Core'}.root_spec + + # Copied from gRPC-Core.podspec, except for the adjusted src_root: + src_root = "$(PODS_ROOT)/../#{GRPC_LOCAL_SRC}" + grpc_core_spec.pod_target_xcconfig = { + 'GRPC_SRC_ROOT' => src_root, + 'HEADER_SEARCH_PATHS' => '"$(inherited)" "$(GRPC_SRC_ROOT)/include"', + 'USER_HEADER_SEARCH_PATHS' => '"$(GRPC_SRC_ROOT)"', + # If we don't set these two settings, `include/grpc/support/time.h` and + # `src/core/lib/support/string.h` shadow the system `` and ``, breaking the + # build. + 'USE_HEADERMAP' => 'NO', + 'ALWAYS_SEARCH_USER_PATHS' => 'NO', + } +end From 19a4121e73850f20d418b3e4363248e0c624b20e Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Sun, 9 Oct 2016 17:02:34 +0200 Subject: [PATCH 117/286] more flexible test naming in reports --- tools/run_tests/report_utils.py | 7 ++++--- tools/run_tests/run_tests.py | 8 ++++++-- tools/run_tests/run_tests_matrix.py | 9 ++++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/tools/run_tests/report_utils.py b/tools/run_tests/report_utils.py index 35dcaca3d34..4fe9cf84136 100644 --- a/tools/run_tests/report_utils.py +++ b/tools/run_tests/report_utils.py @@ -55,11 +55,12 @@ def _filter_msg(msg, output_format): return msg -def render_junit_xml_report(resultset, xml_report): +def render_junit_xml_report(resultset, xml_report, suite_package='grpc', + suite_name='tests'): """Generate JUnit-like XML report.""" root = ET.Element('testsuites') - testsuite = ET.SubElement(root, 'testsuite', id='1', package='grpc', - name='tests') + testsuite = ET.SubElement(root, 'testsuite', id='1', package=suite_package, + name=suite_name) for shortname, results in resultset.iteritems(): for result in results: xml_test = ET.SubElement(testsuite, 'testcase', name=shortname) diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index c7d10e057f5..c286d4d6236 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -949,6 +949,8 @@ argp.add_argument('--update_submodules', default=[], nargs='*', argp.add_argument('-a', '--antagonists', default=0, type=int) argp.add_argument('-x', '--xml_report', default=None, type=str, help='Generates a JUnit-compatible XML report') +argp.add_argument('--report_suite_name', default='tests', type=str, + help='Test suite name to use in generated JUnit XML report') argp.add_argument('--force_default_poller', default=False, action='store_const', const=True, help='Dont try to iterate over many polling strategies when they exist') args = argp.parse_args() @@ -1273,7 +1275,8 @@ def _build_and_run( if build_only: if xml_report: - report_utils.render_junit_xml_report(resultset, xml_report) + report_utils.render_junit_xml_report(resultset, xml_report, + suite_name=args.report_suite_name) return [] # start antagonists @@ -1325,7 +1328,8 @@ def _build_and_run( for antagonist in antagonists: antagonist.kill() if xml_report and resultset: - report_utils.render_junit_xml_report(resultset, xml_report) + report_utils.render_junit_xml_report(resultset, xml_report, + suite_name=args.report_suite_name) number_failures, _ = jobset.run( post_tests_steps, maxjobs=1, stop_on_failure=True, diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index a94f9cfef5e..60c21a1e218 100755 --- a/tools/run_tests/run_tests_matrix.py +++ b/tools/run_tests/run_tests_matrix.py @@ -55,7 +55,8 @@ def _docker_jobspec(name, runtests_args=[]): '--use_docker', '-t', '-j', str(_INNER_JOBS), - '-x', 'report_%s.xml' % name] + runtests_args, + '-x', 'report_%s.xml' % name, + '--report_suite_name', '%s' % name] + runtests_args, shortname='run_tests_%s' % name, timeout_seconds=_RUNTESTS_TIMEOUT) return test_job @@ -70,7 +71,8 @@ def _workspace_jobspec(name, runtests_args=[], workspace_name=None): cmdline=['tools/run_tests/run_tests_in_workspace.sh', '-t', '-j', str(_INNER_JOBS), - '-x', '../report_%s.xml' % name] + runtests_args, + '-x', '../report_%s.xml' % name, + '--report_suite_name', '%s' % name] + runtests_args, environ=env, shortname='run_tests_%s' % name, timeout_seconds=_RUNTESTS_TIMEOUT) @@ -271,7 +273,8 @@ num_failures, resultset = jobset.run(jobs, newline_on_success=True, travis=True, maxjobs=args.jobs) -report_utils.render_junit_xml_report(resultset, 'report.xml') +report_utils.render_junit_xml_report(resultset, 'report.xml', + suite_name='aggregate_tests') if num_failures == 0: jobset.message('SUCCESS', 'All run_tests.py instance finished successfully.', From 96766195a6ed083e5fc239755aa76a2138cd1d7a Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 13 Oct 2016 12:42:54 -0700 Subject: [PATCH 118/286] Refactor SyncServerSettings code --- include/grpc++/server_builder.h | 53 +++++++++++++++++--------------- src/cpp/server/server_builder.cc | 35 ++++++++++++--------- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index 8fac168ff7e..42e22688513 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -34,6 +34,7 @@ #ifndef GRPCXX_SERVER_BUILDER_H #define GRPCXX_SERVER_BUILDER_H +#include #include #include #include @@ -42,6 +43,8 @@ #include #include #include +#include +#include namespace grpc { @@ -62,21 +65,7 @@ class ServerBuilder { public: ServerBuilder(); - struct SyncServerSettings { - // Number of server completion queues to create to listen to incoming RPCs. - int num_cqs; - - // Minimum number of threads per completion queue that should be listening - // to incoming RPCs. - int min_pollers; - - // Maximum number of threads per completion queue that can be listening to - // incoming RPCs. - int max_pollers; - - // The timeout for server completion queue's AsyncNext call. - int cq_timeout_msec; - }; + enum SyncServerOption { NUM_CQS, MIN_POLLERS, MAX_POLLERS, CQ_TIMEOUT_MSEC }; /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the \a Server instance returned @@ -131,8 +120,8 @@ class ServerBuilder { ServerBuilder& SetOption(std::unique_ptr option); - /// Note: Only useful if this is a Synchronous server. - void SetSyncServerSettings(SyncServerSettings settings); + /// Only useful if this is a Synchronous server. + ServerBuilder& SetSyncServerOption(SyncServerOption option, int value); /// Tries to bind \a server to the given \a addr. /// @@ -189,13 +178,27 @@ class ServerBuilder { int* selected_port; }; - // Sync server settings. If this is not set via SetSyncServerSettings(), the - // following default values are used: - // sync_server_settings_.num_cqs = Number of CPUs - // sync_server_settings_.min_pollers = 1 - // sync_server_settings_.max_pollers = INT_MAX - // sync_server_settings_.cq_timeout_msec = 1000 - struct SyncServerSettings sync_server_settings_; + struct SyncServerSettings { + SyncServerSettings() + : num_cqs(GPR_MAX(gpr_cpu_num_cores(), 4)), + min_pollers(1), + max_pollers(INT_MAX), + cq_timeout_msec(100) {} + + // Number of server completion queues to create to listen to incoming RPCs. + int num_cqs; + + // Minimum number of threads per completion queue that should be listening + // to incoming RPCs. + int min_pollers; + + // Maximum number of threads per completion queue that can be listening to + // incoming RPCs. + int max_pollers; + + // The timeout for server completion queue's AsyncNext call. + int cq_timeout_msec; + }; typedef std::unique_ptr HostString; struct NamedService { @@ -212,6 +215,8 @@ class ServerBuilder { std::vector> services_; std::vector ports_; + SyncServerSettings sync_server_settings_; + /* List of completion queues added via AddCompletionQueue() method */ std::vector cqs_; diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 59c40dedaf1..6b4ff28972b 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -55,6 +55,7 @@ static void do_plugin_list_init(void) { ServerBuilder::ServerBuilder() : max_receive_message_size_(-1), max_send_message_size_(-1), + sync_server_settings_(SyncServerSettings()), generic_service_(nullptr) { gpr_once_init(&once_init_plugin_list, do_plugin_list_init); for (auto it = g_plugin_factory_list->begin(); @@ -70,16 +71,6 @@ ServerBuilder::ServerBuilder() sizeof(maybe_default_compression_level_)); memset(&maybe_default_compression_algorithm_, 0, sizeof(maybe_default_compression_algorithm_)); - - // Sync server setting defaults - sync_server_settings_.min_pollers = 1; - sync_server_settings_.max_pollers = INT_MAX; - - int num_cpus = gpr_cpu_num_cores(); - num_cpus = GPR_MAX(num_cpus, 4); - sync_server_settings_.num_cqs = num_cpus; - - sync_server_settings_.cq_timeout_msec = 1000; } std::unique_ptr ServerBuilder::AddCompletionQueue( @@ -119,6 +110,26 @@ ServerBuilder& ServerBuilder::SetOption( return *this; } +ServerBuilder& ServerBuilder::SetSyncServerOption( + ServerBuilder::SyncServerOption option, int val) { + switch (option) { + case NUM_CQS: + sync_server_settings_.num_cqs = val; + break; + + case MIN_POLLERS: + sync_server_settings_.min_pollers = val; + break; + case MAX_POLLERS: + sync_server_settings_.max_pollers = val; + break; + case CQ_TIMEOUT_MSEC: + sync_server_settings_.cq_timeout_msec = val; + break; + } + return *this; +} + ServerBuilder& ServerBuilder::SetCompressionAlgorithmSupportStatus( grpc_compression_algorithm algorithm, bool enabled) { if (enabled) { @@ -142,10 +153,6 @@ ServerBuilder& ServerBuilder::SetDefaultCompressionAlgorithm( return *this; } -void ServerBuilder::SetSyncServerSettings(SyncServerSettings settings) { - sync_server_settings_ = settings; // copy the settings -} - ServerBuilder& ServerBuilder::AddListeningPort( const grpc::string& addr, std::shared_ptr creds, int* selected_port) { From 8f7739bcd6f14e18e2f342cba8e940942f37a48b Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 13 Oct 2016 15:12:55 -0700 Subject: [PATCH 119/286] Rename GrpcRpcManager -> ThreadManager --- BUILD | 8 +- CMakeLists.txt | 4 +- Makefile | 100 +++++++++--------- build.yaml | 28 ++--- include/grpc++/server.h | 15 +-- src/cpp/server/server_builder.cc | 2 +- src/cpp/server/server_cc.cc | 30 +++--- .../thread_manager.cc} | 45 ++++---- .../thread_manager.h} | 62 +++++------ .../thread_manager_test.cc} | 12 +-- .../thread_manager_test.h} | 16 +-- tools/doxygen/Doxyfile.c++.internal | 4 +- tools/run_tests/sources_and_headers.json | 48 ++++----- tools/run_tests/tests.json | 84 ++++----------- vsprojects/vcxproj/grpc++/grpc++.vcxproj | 6 +- .../vcxproj/grpc++/grpc++.vcxproj.filters | 18 ++-- .../grpc++_unsecure/grpc++_unsecure.vcxproj | 6 +- .../grpc++_unsecure.vcxproj.filters | 18 ++-- .../grpc_rpc_manager_test.vcxproj.filters | 26 ----- .../thread_manager_test.vcxproj} | 10 +- .../thread_manager_test.vcxproj.filters | 26 +++++ 21 files changed, 262 insertions(+), 306 deletions(-) rename src/cpp/{rpcmanager/grpc_rpc_manager.cc => thread_manager/thread_manager.cc} (82%) rename src/cpp/{rpcmanager/grpc_rpc_manager.h => thread_manager/thread_manager.h} (70%) rename test/cpp/{rpcmanager/grpc_rpc_manager_test.cc => thread_manager/thread_manager_test.cc} (89%) rename test/cpp/{rpcmanager/grpc_rpc_manager_test.h => thread_manager/thread_manager_test.h} (80%) delete mode 100644 vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj.filters rename vsprojects/vcxproj/test/{grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj => thread_manager_test/thread_manager_test.vcxproj} (97%) create mode 100644 vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj.filters diff --git a/BUILD b/BUILD index 8178c9ffd20..0167cb58d3d 100644 --- a/BUILD +++ b/BUILD @@ -1270,9 +1270,9 @@ cc_library( "src/cpp/server/secure_server_credentials.h", "src/cpp/client/create_channel_internal.h", "src/cpp/common/channel_filter.h", - "src/cpp/rpcmanager/grpc_rpc_manager.h", "src/cpp/server/dynamic_thread_pool.h", "src/cpp/server/thread_pool_interface.h", + "src/cpp/thread_manager/thread_manager.h", "src/cpp/client/insecure_credentials.cc", "src/cpp/client/secure_credentials.cc", "src/cpp/common/auth_property_iterator.cc", @@ -1293,7 +1293,6 @@ cc_library( "src/cpp/common/completion_queue_cc.cc", "src/cpp/common/core_codegen.cc", "src/cpp/common/rpc_method.cc", - "src/cpp/rpcmanager/grpc_rpc_manager.cc", "src/cpp/server/async_generic_service.cc", "src/cpp/server/create_default_thread_pool.cc", "src/cpp/server/dynamic_thread_pool.cc", @@ -1302,6 +1301,7 @@ cc_library( "src/cpp/server/server_context.cc", "src/cpp/server/server_credentials.cc", "src/cpp/server/server_posix.cc", + "src/cpp/thread_manager/thread_manager.cc", "src/cpp/util/byte_buffer_cc.cc", "src/cpp/util/slice_cc.cc", "src/cpp/util/status.cc", @@ -1499,9 +1499,9 @@ cc_library( srcs = [ "src/cpp/client/create_channel_internal.h", "src/cpp/common/channel_filter.h", - "src/cpp/rpcmanager/grpc_rpc_manager.h", "src/cpp/server/dynamic_thread_pool.h", "src/cpp/server/thread_pool_interface.h", + "src/cpp/thread_manager/thread_manager.h", "src/cpp/client/insecure_credentials.cc", "src/cpp/common/insecure_create_auth_context.cc", "src/cpp/server/insecure_server_credentials.cc", @@ -1517,7 +1517,6 @@ cc_library( "src/cpp/common/completion_queue_cc.cc", "src/cpp/common/core_codegen.cc", "src/cpp/common/rpc_method.cc", - "src/cpp/rpcmanager/grpc_rpc_manager.cc", "src/cpp/server/async_generic_service.cc", "src/cpp/server/create_default_thread_pool.cc", "src/cpp/server/dynamic_thread_pool.cc", @@ -1526,6 +1525,7 @@ cc_library( "src/cpp/server/server_context.cc", "src/cpp/server/server_credentials.cc", "src/cpp/server/server_posix.cc", + "src/cpp/thread_manager/thread_manager.cc", "src/cpp/util/byte_buffer_cc.cc", "src/cpp/util/slice_cc.cc", "src/cpp/util/status.cc", diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b6f4f96c21..f8144073624 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1025,7 +1025,6 @@ add_library(grpc++ src/cpp/common/completion_queue_cc.cc src/cpp/common/core_codegen.cc src/cpp/common/rpc_method.cc - src/cpp/rpcmanager/grpc_rpc_manager.cc src/cpp/server/async_generic_service.cc src/cpp/server/create_default_thread_pool.cc src/cpp/server/dynamic_thread_pool.cc @@ -1034,6 +1033,7 @@ add_library(grpc++ src/cpp/server/server_context.cc src/cpp/server/server_credentials.cc src/cpp/server/server_posix.cc + src/cpp/thread_manager/thread_manager.cc src/cpp/util/byte_buffer_cc.cc src/cpp/util/slice_cc.cc src/cpp/util/status.cc @@ -1280,7 +1280,6 @@ add_library(grpc++_unsecure src/cpp/common/completion_queue_cc.cc src/cpp/common/core_codegen.cc src/cpp/common/rpc_method.cc - src/cpp/rpcmanager/grpc_rpc_manager.cc src/cpp/server/async_generic_service.cc src/cpp/server/create_default_thread_pool.cc src/cpp/server/dynamic_thread_pool.cc @@ -1289,6 +1288,7 @@ add_library(grpc++_unsecure src/cpp/server/server_context.cc src/cpp/server/server_credentials.cc src/cpp/server/server_posix.cc + src/cpp/thread_manager/thread_manager.cc src/cpp/util/byte_buffer_cc.cc src/cpp/util/slice_cc.cc src/cpp/util/status.cc diff --git a/Makefile b/Makefile index 73ed5623c31..a515c22b329 100644 --- a/Makefile +++ b/Makefile @@ -1050,7 +1050,6 @@ grpc_node_plugin: $(BINDIR)/$(CONFIG)/grpc_node_plugin grpc_objective_c_plugin: $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin grpc_php_plugin: $(BINDIR)/$(CONFIG)/grpc_php_plugin grpc_python_plugin: $(BINDIR)/$(CONFIG)/grpc_python_plugin -grpc_rpc_manager_test: $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test grpc_ruby_plugin: $(BINDIR)/$(CONFIG)/grpc_ruby_plugin grpc_tool_test: $(BINDIR)/$(CONFIG)/grpc_tool_test grpclb_api_test: $(BINDIR)/$(CONFIG)/grpclb_api_test @@ -1078,6 +1077,7 @@ shutdown_test: $(BINDIR)/$(CONFIG)/shutdown_test status_test: $(BINDIR)/$(CONFIG)/status_test streaming_throughput_test: $(BINDIR)/$(CONFIG)/streaming_throughput_test stress_test: $(BINDIR)/$(CONFIG)/stress_test +thread_manager_test: $(BINDIR)/$(CONFIG)/thread_manager_test thread_stress_test: $(BINDIR)/$(CONFIG)/thread_stress_test public_headers_must_be_c89: $(BINDIR)/$(CONFIG)/public_headers_must_be_c89 boringssl_aes_test: $(BINDIR)/$(CONFIG)/boringssl_aes_test @@ -1420,7 +1420,6 @@ buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/generic_end2end_test \ $(BINDIR)/$(CONFIG)/golden_file_test \ $(BINDIR)/$(CONFIG)/grpc_cli \ - $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test \ $(BINDIR)/$(CONFIG)/grpc_tool_test \ $(BINDIR)/$(CONFIG)/grpclb_api_test \ $(BINDIR)/$(CONFIG)/grpclb_test \ @@ -1447,6 +1446,7 @@ buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/status_test \ $(BINDIR)/$(CONFIG)/streaming_throughput_test \ $(BINDIR)/$(CONFIG)/stress_test \ + $(BINDIR)/$(CONFIG)/thread_manager_test \ $(BINDIR)/$(CONFIG)/thread_stress_test \ $(BINDIR)/$(CONFIG)/boringssl_aes_test \ $(BINDIR)/$(CONFIG)/boringssl_asn1_test \ @@ -1508,7 +1508,6 @@ buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/generic_end2end_test \ $(BINDIR)/$(CONFIG)/golden_file_test \ $(BINDIR)/$(CONFIG)/grpc_cli \ - $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test \ $(BINDIR)/$(CONFIG)/grpc_tool_test \ $(BINDIR)/$(CONFIG)/grpclb_api_test \ $(BINDIR)/$(CONFIG)/grpclb_test \ @@ -1535,6 +1534,7 @@ buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/status_test \ $(BINDIR)/$(CONFIG)/streaming_throughput_test \ $(BINDIR)/$(CONFIG)/stress_test \ + $(BINDIR)/$(CONFIG)/thread_manager_test \ $(BINDIR)/$(CONFIG)/thread_stress_test \ endif @@ -1809,8 +1809,6 @@ test_cxx: buildtests_cxx $(Q) $(BINDIR)/$(CONFIG)/generic_end2end_test || ( echo test generic_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing golden_file_test" $(Q) $(BINDIR)/$(CONFIG)/golden_file_test || ( echo test golden_file_test failed ; exit 1 ) - $(E) "[RUN] Testing grpc_rpc_manager_test" - $(Q) $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test || ( echo test grpc_rpc_manager_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_tool_test" $(Q) $(BINDIR)/$(CONFIG)/grpc_tool_test || ( echo test grpc_tool_test failed ; exit 1 ) $(E) "[RUN] Testing grpclb_api_test" @@ -1841,6 +1839,8 @@ test_cxx: buildtests_cxx $(Q) $(BINDIR)/$(CONFIG)/status_test || ( echo test status_test failed ; exit 1 ) $(E) "[RUN] Testing streaming_throughput_test" $(Q) $(BINDIR)/$(CONFIG)/streaming_throughput_test || ( echo test streaming_throughput_test failed ; exit 1 ) + $(E) "[RUN] Testing thread_manager_test" + $(Q) $(BINDIR)/$(CONFIG)/thread_manager_test || ( echo test thread_manager_test failed ; exit 1 ) $(E) "[RUN] Testing thread_stress_test" $(Q) $(BINDIR)/$(CONFIG)/thread_stress_test || ( echo test thread_stress_test failed ; exit 1 ) @@ -3605,7 +3605,6 @@ LIBGRPC++_SRC = \ src/cpp/common/completion_queue_cc.cc \ src/cpp/common/core_codegen.cc \ src/cpp/common/rpc_method.cc \ - src/cpp/rpcmanager/grpc_rpc_manager.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/create_default_thread_pool.cc \ src/cpp/server/dynamic_thread_pool.cc \ @@ -3614,6 +3613,7 @@ LIBGRPC++_SRC = \ src/cpp/server/server_context.cc \ src/cpp/server/server_credentials.cc \ src/cpp/server/server_posix.cc \ + src/cpp/thread_manager/thread_manager.cc \ src/cpp/util/byte_buffer_cc.cc \ src/cpp/util/slice_cc.cc \ src/cpp/util/status.cc \ @@ -4136,7 +4136,6 @@ LIBGRPC++_UNSECURE_SRC = \ src/cpp/common/completion_queue_cc.cc \ src/cpp/common/core_codegen.cc \ src/cpp/common/rpc_method.cc \ - src/cpp/rpcmanager/grpc_rpc_manager.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/create_default_thread_pool.cc \ src/cpp/server/dynamic_thread_pool.cc \ @@ -4145,6 +4144,7 @@ LIBGRPC++_UNSECURE_SRC = \ src/cpp/server/server_context.cc \ src/cpp/server/server_credentials.cc \ src/cpp/server/server_posix.cc \ + src/cpp/thread_manager/thread_manager.cc \ src/cpp/util/byte_buffer_cc.cc \ src/cpp/util/slice_cc.cc \ src/cpp/util/status.cc \ @@ -11807,49 +11807,6 @@ ifneq ($(NO_DEPS),true) endif -GRPC_RPC_MANAGER_TEST_SRC = \ - test/cpp/rpcmanager/grpc_rpc_manager_test.cc \ - -GRPC_RPC_MANAGER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_RPC_MANAGER_TEST_SRC)))) -ifeq ($(NO_SECURE),true) - -# You can't build secure targets if you don't have OpenSSL. - -$(BINDIR)/$(CONFIG)/grpc_rpc_manager_test: openssl_dep_error - -else - - - - -ifeq ($(NO_PROTOBUF),true) - -# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+. - -$(BINDIR)/$(CONFIG)/grpc_rpc_manager_test: protobuf_dep_error - -else - -$(BINDIR)/$(CONFIG)/grpc_rpc_manager_test: $(PROTOBUF_DEP) $(GRPC_RPC_MANAGER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a - $(E) "[LD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(GRPC_RPC_MANAGER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_rpc_manager_test - -endif - -endif - -$(OBJDIR)/$(CONFIG)/test/cpp/rpcmanager/grpc_rpc_manager_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a - -deps_grpc_rpc_manager_test: $(GRPC_RPC_MANAGER_TEST_OBJS:.o=.dep) - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(GRPC_RPC_MANAGER_TEST_OBJS:.o=.dep) -endif -endif - - GRPC_RUBY_PLUGIN_SRC = \ src/compiler/ruby_plugin.cc \ @@ -13046,6 +13003,49 @@ $(OBJDIR)/$(CONFIG)/test/cpp/interop/stress_test.o: $(GENDIR)/src/proto/grpc/tes $(OBJDIR)/$(CONFIG)/test/cpp/util/metrics_server.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc +THREAD_MANAGER_TEST_SRC = \ + test/cpp/thread_manager/thread_manager_test.cc \ + +THREAD_MANAGER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(THREAD_MANAGER_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/thread_manager_test: openssl_dep_error + +else + + + + +ifeq ($(NO_PROTOBUF),true) + +# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+. + +$(BINDIR)/$(CONFIG)/thread_manager_test: protobuf_dep_error + +else + +$(BINDIR)/$(CONFIG)/thread_manager_test: $(PROTOBUF_DEP) $(THREAD_MANAGER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LDXX) $(LDFLAGS) $(THREAD_MANAGER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/thread_manager_test + +endif + +endif + +$(OBJDIR)/$(CONFIG)/test/cpp/thread_manager/thread_manager_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a + +deps_thread_manager_test: $(THREAD_MANAGER_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(THREAD_MANAGER_TEST_OBJS:.o=.dep) +endif +endif + + THREAD_STRESS_TEST_SRC = \ test/cpp/end2end/thread_stress_test.cc \ diff --git a/build.yaml b/build.yaml index 666e83c7000..baf1eb9bd0c 100644 --- a/build.yaml +++ b/build.yaml @@ -713,9 +713,9 @@ filegroups: headers: - src/cpp/client/create_channel_internal.h - src/cpp/common/channel_filter.h - - src/cpp/rpcmanager/grpc_rpc_manager.h - src/cpp/server/dynamic_thread_pool.h - src/cpp/server/thread_pool_interface.h + - src/cpp/thread_manager/thread_manager.h src: - src/cpp/client/channel_cc.cc - src/cpp/client/client_context.cc @@ -729,7 +729,6 @@ filegroups: - src/cpp/common/completion_queue_cc.cc - src/cpp/common/core_codegen.cc - src/cpp/common/rpc_method.cc - - src/cpp/rpcmanager/grpc_rpc_manager.cc - src/cpp/server/async_generic_service.cc - src/cpp/server/create_default_thread_pool.cc - src/cpp/server/dynamic_thread_pool.cc @@ -738,6 +737,7 @@ filegroups: - src/cpp/server/server_context.cc - src/cpp/server/server_credentials.cc - src/cpp/server/server_posix.cc + - src/cpp/thread_manager/thread_manager.cc - src/cpp/util/byte_buffer_cc.cc - src/cpp/util/slice_cc.cc - src/cpp/util/status.cc @@ -2895,18 +2895,6 @@ targets: secure: false vs_config_type: Application vs_project_guid: '{DF52D501-A6CF-4E6F-BA38-6EBE2E8DAFB2}' -- name: grpc_rpc_manager_test - build: test - language: c++ - headers: - - test/cpp/rpcmanager/grpc_rpc_manager_test.h - src: - - test/cpp/rpcmanager/grpc_rpc_manager_test.cc - deps: - - grpc++ - - grpc - - gpr - - grpc++_test_config - name: grpc_ruby_plugin build: protoc language: c++ @@ -3337,6 +3325,18 @@ targets: - gpr_test_util - gpr - grpc++_test_config +- name: thread_manager_test + build: test + language: c++ + headers: + - test/cpp/thread_manager/thread_manager_test.h + src: + - test/cpp/thread_manager/thread_manager_test.cc + deps: + - grpc++ + - grpc + - gpr + - grpc++_test_config - name: thread_stress_test gtest: true cpu_cost: 100 diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 7753013c394..99b5975847b 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -107,11 +107,11 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { class AsyncRequest; class ShutdownRequest; - /// SyncRequestManager is an implementation of GrpcRpcManager. This class is - /// responsible for polling for incoming RPCs and calling the RPC handlers. + /// SyncRequestThreadManager is an implementation of ThreadManager. This class + /// is responsible for polling for incoming RPCs and calling the RPC handlers. /// This is only used in case of a Sync server (i.e a server exposing a sync /// interface) - class SyncRequestManager; + class SyncRequestThreadManager; class UnimplementedAsyncRequestContext; class UnimplementedAsyncRequest; @@ -196,8 +196,8 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { std::shared_ptr>> sync_server_cqs_; - /// List of GrpcRpcManager instances (one for each cq in the sync_server_cqs) - std::vector> sync_req_mgrs_; + /// List of ThreadManager instances (one for each cq in the sync_server_cqs) + std::vector> sync_req_mgrs_; // Sever status grpc::mutex mu_; @@ -205,11 +205,6 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { bool shutdown_; bool shutdown_notified_; - // TODO (sreek) : Remove num_running_cb_ and callback_cv_; - // The number of threads which are running callbacks. - // int num_running_cb_; - // grpc::condition_variable callback_cv_; - grpc::condition_variable shutdown_cv_; std::shared_ptr global_callbacks_; diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 6b4ff28972b..7ab41ca1f8c 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -247,7 +247,7 @@ std::unique_ptr ServerBuilder::BuildAndStart() { // server // 2. cqs_: Completion queues added via AddCompletionQueue() call - // All sync cqs (if any) are frequently polled by the GrpcRpcManager + // All sync cqs (if any) are frequently polled by ThreadManager int num_frequently_polled_cqs = sync_server_cqs->size(); for (auto it = sync_server_cqs->begin(); it != sync_server_cqs->end(); ++it) { diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 761f76fa12a..3352aee8221 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -242,12 +242,16 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { grpc_completion_queue* cq_; }; -class Server::SyncRequestManager : public GrpcRpcManager { +// Implementation of ThreadManager. Each instance of SyncRequestThreadManager +// manages a pool of threads that poll for incoming Sync RPCs and call the +// appropriate RPC handlers +class Server::SyncRequestThreadManager : public ThreadManager { public: - SyncRequestManager(Server* server, CompletionQueue* server_cq, - std::shared_ptr global_callbacks, - int min_pollers, int max_pollers, int cq_timeout_msec) - : GrpcRpcManager(min_pollers, max_pollers), + SyncRequestThreadManager(Server* server, CompletionQueue* server_cq, + std::shared_ptr global_callbacks, + int min_pollers, int max_pollers, + int cq_timeout_msec) + : ThreadManager(min_pollers, max_pollers), server_(server), server_cq_(server_cq), cq_timeout_msec_(cq_timeout_msec), @@ -333,7 +337,7 @@ class Server::SyncRequestManager : public GrpcRpcManager { m->Request(server_->c_server(), server_cq_->cq()); } - GrpcRpcManager::Initialize(); + ThreadManager::Initialize(); } } @@ -367,9 +371,9 @@ Server::Server( for (auto it = sync_server_cqs_->begin(); it != sync_server_cqs_->end(); it++) { - sync_req_mgrs_.emplace_back( - new SyncRequestManager(this, (*it).get(), global_callbacks_, - min_pollers, max_pollers, sync_cq_timeout_msec)); + sync_req_mgrs_.emplace_back(new SyncRequestThreadManager( + this, (*it).get(), global_callbacks_, min_pollers, max_pollers, + sync_cq_timeout_msec)); } grpc_channel_args channel_args; @@ -509,10 +513,10 @@ 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 RpcManagers. This will try to gracefully stop all the - // threads in the RpcManagers (once they process any inflight requests) + // 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)->ShutdownRpcManager(); + (*it)->Shutdown(); } shutdown_cq.Shutdown(); @@ -530,7 +534,7 @@ void Server::ShutdownInternal(gpr_timespec deadline) { // Else in case of SHUTDOWN or GOT_EVENT, it means that the server has // successfully shutdown - // Wait for threads in all RpcManagers to terminate + // Wait for threads in all ThreadManagers to terminate for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { (*it)->Wait(); (*it)->ShutdownAndDrainCompletionQueue(); diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/thread_manager/thread_manager.cc similarity index 82% rename from src/cpp/rpcmanager/grpc_rpc_manager.cc rename to src/cpp/thread_manager/thread_manager.cc index 2d791bb159b..93ccfb4d988 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/thread_manager/thread_manager.cc @@ -40,29 +40,28 @@ namespace grpc { -GrpcRpcManager::GrpcRpcManagerThread::GrpcRpcManagerThread( - GrpcRpcManager* rpc_mgr) - : rpc_mgr_(rpc_mgr), - thd_(new std::thread(&GrpcRpcManager::GrpcRpcManagerThread::Run, this)) {} - -void GrpcRpcManager::GrpcRpcManagerThread::Run() { - rpc_mgr_->MainWorkLoop(); - rpc_mgr_->MarkAsCompleted(this); +ThreadManager::WorkerThread::WorkerThread(ThreadManager* thd_mgr) + : thd_mgr_(thd_mgr), + thd_(new std::thread(&ThreadManager::WorkerThread::Run, this)) {} + +void ThreadManager::WorkerThread::Run() { + thd_mgr_->MainWorkLoop(); + thd_mgr_->MarkAsCompleted(this); } -GrpcRpcManager::GrpcRpcManagerThread::~GrpcRpcManagerThread() { +ThreadManager::WorkerThread::~WorkerThread() { thd_->join(); thd_.reset(); } -GrpcRpcManager::GrpcRpcManager(int min_pollers, int max_pollers) +ThreadManager::ThreadManager(int min_pollers, int max_pollers) : shutdown_(false), num_pollers_(0), min_pollers_(min_pollers), max_pollers_(max_pollers == -1 ? INT_MAX : max_pollers), num_threads_(0) {} -GrpcRpcManager::~GrpcRpcManager() { +ThreadManager::~ThreadManager() { { std::unique_lock lock(mu_); GPR_ASSERT(num_threads_ == 0); @@ -71,24 +70,24 @@ GrpcRpcManager::~GrpcRpcManager() { CleanupCompletedThreads(); } -void GrpcRpcManager::Wait() { +void ThreadManager::Wait() { std::unique_lock lock(mu_); while (num_threads_ != 0) { shutdown_cv_.wait(lock); } } -void GrpcRpcManager::ShutdownRpcManager() { +void ThreadManager::Shutdown() { std::unique_lock lock(mu_); shutdown_ = true; } -bool GrpcRpcManager::IsShutdown() { +bool ThreadManager::IsShutdown() { std::unique_lock lock(mu_); return shutdown_; } -void GrpcRpcManager::MarkAsCompleted(GrpcRpcManagerThread* thd) { +void ThreadManager::MarkAsCompleted(WorkerThread* thd) { { std::unique_lock list_lock(list_mu_); completed_threads_.push_back(thd); @@ -101,7 +100,7 @@ void GrpcRpcManager::MarkAsCompleted(GrpcRpcManagerThread* thd) { } } -void GrpcRpcManager::CleanupCompletedThreads() { +void ThreadManager::CleanupCompletedThreads() { std::unique_lock lock(list_mu_); for (auto thd = completed_threads_.begin(); thd != completed_threads_.end(); thd = completed_threads_.erase(thd)) { @@ -109,7 +108,7 @@ void GrpcRpcManager::CleanupCompletedThreads() { } } -void GrpcRpcManager::Initialize() { +void ThreadManager::Initialize() { for (int i = 0; i < min_pollers_; i++) { MaybeCreatePoller(); } @@ -118,7 +117,7 @@ void GrpcRpcManager::Initialize() { // If the number of pollers (i.e threads currently blocked in PollForWork()) is // less than max threshold (i.e max_pollers_) and the total number of threads is // below the maximum threshold, we can let the current thread continue as poller -bool GrpcRpcManager::MaybeContinueAsPoller() { +bool ThreadManager::MaybeContinueAsPoller() { std::unique_lock lock(mu_); if (shutdown_ || num_pollers_ > max_pollers_) { return false; @@ -131,18 +130,18 @@ bool GrpcRpcManager::MaybeContinueAsPoller() { // Create a new poller if the current number of pollers i.e num_pollers_ (i.e // threads currently blocked in PollForWork()) is below the threshold (i.e // min_pollers_) and the total number of threads is below the maximum threshold -void GrpcRpcManager::MaybeCreatePoller() { +void ThreadManager::MaybeCreatePoller() { grpc::unique_lock lock(mu_); if (!shutdown_ && num_pollers_ < min_pollers_) { num_pollers_++; num_threads_++; // Create a new thread (which ends up calling the MainWorkLoop() function - new GrpcRpcManagerThread(this); + new WorkerThread(this); } } -void GrpcRpcManager::MainWorkLoop() { +void ThreadManager::MainWorkLoop() { void* tag; bool ok; @@ -170,7 +169,7 @@ void GrpcRpcManager::MainWorkLoop() { } // Note that MaybeCreatePoller does check for shutdown and creates a new - // thread only if GrpcRpcManager is not shutdown + // thread only if ThreadManager is not shutdown if (work_status == WORK_FOUND) { MaybeCreatePoller(); DoWork(tag, ok); @@ -179,7 +178,7 @@ void GrpcRpcManager::MainWorkLoop() { CleanupCompletedThreads(); - // If we are here, either GrpcRpcManager is shutting down or it already has + // If we are here, either ThreadManager is shutting down or it already has // enough threads. } diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.h b/src/cpp/thread_manager/thread_manager.h similarity index 70% rename from src/cpp/rpcmanager/grpc_rpc_manager.h rename to src/cpp/thread_manager/thread_manager.h index 77715c52fde..b667a645afb 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.h +++ b/src/cpp/thread_manager/thread_manager.h @@ -31,8 +31,8 @@ * */ -#ifndef GRPC_INTERNAL_CPP_GRPC_RPC_MANAGER_H -#define GRPC_INTERNAL_CPP_GRPC_RPC_MANAGER_H +#ifndef GRPC_INTERNAL_CPP_THREAD_MANAGER_H +#define GRPC_INTERNAL_CPP_THREAD_MANAGER_H #include #include @@ -42,10 +42,10 @@ namespace grpc { -class GrpcRpcManager { +class ThreadManager { public: - explicit GrpcRpcManager(int min_pollers, int max_pollers); - virtual ~GrpcRpcManager(); + explicit ThreadManager(int min_pollers, int max_pollers); + virtual ~ThreadManager(); // Initializes and Starts the Rpc Manager threads void Initialize(); @@ -60,17 +60,17 @@ class GrpcRpcManager { // - The implementaion MUST set the value of 'ok' to 'true' or 'false'. A // value of 'false' indicates some implemenation specific error (that is // neither SHUTDOWN nor TIMEOUT) - // - GrpcRpcManager does not interpret the values of 'tag' and 'ok' - // - GrpcRpcManager WILL call DoWork() and pass '*tag' and 'ok' as input to + // - ThreadManager does not interpret the values of 'tag' and 'ok' + // - ThreadManager WILL call DoWork() and pass '*tag' and 'ok' as input to // DoWork() // // If the return value is SHUTDOWN:, - // - GrpcManager WILL NOT call DoWork() and terminates the thead + // - ThreadManager WILL NOT call DoWork() and terminates the thead // // If the return value is TIMEOUT:, - // - GrpcManager WILL NOT call DoWork() - // - GrpcManager MAY terminate the thread depending on the current number of - // active poller threads and mix_pollers/max_pollers settings + // - ThreadManager WILL NOT call DoWork() + // - ThreadManager MAY terminate the thread depending on the current number + // of active poller threads and mix_pollers/max_pollers settings // - Also, the value of timeout is specific to the derived class // implementation virtual WorkStatus PollForWork(void** tag, bool* ok) = 0; @@ -84,40 +84,40 @@ class GrpcRpcManager { // actually finds some work virtual void DoWork(void* tag, bool ok) = 0; - // Mark the GrpcRpcManager as shutdown and begin draining the work. - // This is a non-blocking call and the caller should call Wait(), a blocking - // call which returns only once the shutdown is complete - void ShutdownRpcManager(); + // Mark the ThreadManager as shutdown and begin draining the work. This is a + // non-blocking call and the caller should call Wait(), a blocking call which + // returns only once the shutdown is complete + void Shutdown(); - // Has ShutdownRpcManager() been called + // Has Shutdown() been called bool IsShutdown(); - // A blocking call that returns only after the GrpcRpcManager has shutdown and + // A blocking call that returns only after the ThreadManager has shutdown and // all the threads have drained all the outstanding work void Wait(); private: - // Helper wrapper class around std::thread. This takes a GrpcRpcManager object + // Helper wrapper class around std::thread. This takes a ThreadManager object // and starts a new std::thread to calls the Run() function. // - // The Run() function calls GrpcManager::MainWorkLoop() function and once that - // completes, it marks the GrpcRpcManagerThread completed by calling - // GrpcRpcManager::MarkAsCompleted() - class GrpcRpcManagerThread { + // The Run() function calls ThreadManager::MainWorkLoop() function and once + // that completes, it marks the WorkerThread completed by calling + // ThreadManager::MarkAsCompleted() + class WorkerThread { public: - GrpcRpcManagerThread(GrpcRpcManager* rpc_mgr); - ~GrpcRpcManagerThread(); + WorkerThread(ThreadManager* thd_mgr); + ~WorkerThread(); private: - // Calls rpc_mgr_->MainWorkLoop() and once that completes, calls - // rpc_mgr_>MarkAsCompleted(this) to mark the thread as completed + // Calls thd_mgr_->MainWorkLoop() and once that completes, calls + // thd_mgr_>MarkAsCompleted(this) to mark the thread as completed void Run(); - GrpcRpcManager* rpc_mgr_; + ThreadManager* thd_mgr_; std::unique_ptr thd_; }; - // The main funtion in GrpcRpcManager + // The main funtion in ThreadManager void MainWorkLoop(); // Create a new poller if the number of current pollers is less than the @@ -128,7 +128,7 @@ class GrpcRpcManager { // current number of pollers is less than the max_pollers. bool MaybeContinueAsPoller(); - void MarkAsCompleted(GrpcRpcManagerThread* thd); + void MarkAsCompleted(WorkerThread* thd); void CleanupCompletedThreads(); // Protects shutdown_, num_pollers_ and num_threads_ @@ -150,9 +150,9 @@ class GrpcRpcManager { int num_threads_; grpc::mutex list_mu_; - std::list completed_threads_; + std::list completed_threads_; }; } // namespace grpc -#endif // GRPC_INTERNAL_CPP_GRPC_RPC_MANAGER_H +#endif // GRPC_INTERNAL_CPP_THREAD_MANAGER_H diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc similarity index 89% rename from test/cpp/rpcmanager/grpc_rpc_manager_test.cc rename to test/cpp/thread_manager/thread_manager_test.cc index 85ced00d46d..07fabd6bc36 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -42,7 +42,7 @@ #include "test/cpp/rpcmanager/grpc_rpc_manager_test.h" #include "test/cpp/util/test_config.h" -using grpc::testing::GrpcRpcManagerTest; +using grpc::testing::ThreadManagerTest; static const int kMinPollers = 2; static const int kMaxPollers = 10; @@ -52,8 +52,8 @@ static const int kDoWorkDurationMsec = 1; static const int kNumDoWorkIterations = 10; -grpc::GrpcRpcManager::WorkStatus GrpcRpcManagerTest::PollForWork(void **tag, - bool *ok) { +grpc::ThreadManager::WorkStatus ThreadManagerTest::PollForWork(void **tag, + bool *ok) { { std::unique_lock lock(mu_); gpr_log(GPR_INFO, "PollForWork: Entered"); @@ -72,14 +72,14 @@ grpc::GrpcRpcManager::WorkStatus GrpcRpcManagerTest::PollForWork(void **tag, if (num_calls_ > kNumDoWorkIterations) { gpr_log(GPR_DEBUG, "PollForWork: Returning shutdown"); work_status = SHUTDOWN; - ShutdownRpcManager(); + ThreadManager::Shutdown(); } } return work_status; } -void GrpcRpcManagerTest::DoWork(void *tag, bool ok) { +void ThreadManagerTest::DoWork(void *tag, bool ok) { { std::unique_lock lock(mu_); gpr_log(GPR_DEBUG, "DoWork()"); @@ -91,7 +91,7 @@ void GrpcRpcManagerTest::DoWork(void *tag, bool ok) { int main(int argc, char **argv) { grpc::testing::InitTest(&argc, &argv, true); - GrpcRpcManagerTest test_rpc_manager(kMinPollers, kMaxPollers); + ThreadManagerTest test_rpc_manager(kMinPollers, kMaxPollers); test_rpc_manager.Initialize(); test_rpc_manager.Wait(); diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.h b/test/cpp/thread_manager/thread_manager_test.h similarity index 80% rename from test/cpp/rpcmanager/grpc_rpc_manager_test.h rename to test/cpp/thread_manager/thread_manager_test.h index 0f1d3b3ed2a..01bf52459f7 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.h +++ b/test/cpp/thread_manager/thread_manager_test.h @@ -30,21 +30,21 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *is % allowed in string */ -#ifndef GRPC_TEST_CPP_GRPC_RPC_MANAGER_TEST_H -#define GRPC_TEST_CPP_GRPC_RPC_MANAGER_TEST_H +#ifndef GRPC_TEST_CPP_THREAD_MANAGER_TEST_H +#define GRPC_TEST_CPP_THREAD_MANAGER_TEST_H #include "src/cpp/rpcmanager/grpc_rpc_manager.h" namespace grpc { namespace testing { -class GrpcRpcManagerTest GRPC_FINAL : public GrpcRpcManager { +class ThreadManagerTest GRPC_FINAL : public ThreadManager { public: - GrpcRpcManagerTest(int min_pollers, int max_pollers) - : GrpcRpcManager(min_pollers, max_pollers), num_calls_(0){}; + ThreadManagerTest(int min_pollers, int max_pollers) + : ThreadManager(min_pollers, max_pollers), num_calls_(0){}; - grpc::GrpcRpcManager::WorkStatus PollForWork(void **tag, - bool *ok) GRPC_OVERRIDE; + grpc::ThreadManager::WorkStatus PollForWork(void **tag, + bool *ok) GRPC_OVERRIDE; void DoWork(void *tag, bool ok) GRPC_OVERRIDE; private: @@ -55,4 +55,4 @@ class GrpcRpcManagerTest GRPC_FINAL : public GrpcRpcManager { } // namespace testing } // namespace grpc -#endif // GRPC_TEST_CPP_GRPC_RPC_MANAGER_TEST_H +#endif // GRPC_TEST_CPP_THREAD_MANAGER_TEST_H diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index dac227d077e..7a95526adbe 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -861,9 +861,9 @@ src/cpp/common/secure_auth_context.h \ src/cpp/server/secure_server_credentials.h \ src/cpp/client/create_channel_internal.h \ src/cpp/common/channel_filter.h \ -src/cpp/rpcmanager/grpc_rpc_manager.h \ src/cpp/server/dynamic_thread_pool.h \ src/cpp/server/thread_pool_interface.h \ +src/cpp/thread_manager/thread_manager.h \ src/cpp/client/insecure_credentials.cc \ src/cpp/client/secure_credentials.cc \ src/cpp/common/auth_property_iterator.cc \ @@ -884,7 +884,6 @@ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ src/cpp/common/core_codegen.cc \ src/cpp/common/rpc_method.cc \ -src/cpp/rpcmanager/grpc_rpc_manager.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/create_default_thread_pool.cc \ src/cpp/server/dynamic_thread_pool.cc \ @@ -893,6 +892,7 @@ src/cpp/server/server_cc.cc \ src/cpp/server/server_context.cc \ src/cpp/server/server_credentials.cc \ src/cpp/server/server_posix.cc \ +src/cpp/thread_manager/thread_manager.cc \ src/cpp/util/byte_buffer_cc.cc \ src/cpp/util/slice_cc.cc \ src/cpp/util/status.cc \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index de7f1e1edfd..7619af11059 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -2527,26 +2527,6 @@ "third_party": false, "type": "target" }, - { - "deps": [ - "gpr", - "grpc", - "grpc++", - "grpc++_test_config" - ], - "headers": [ - "test/cpp/rpcmanager/grpc_rpc_manager_test.h" - ], - "is_filegroup": false, - "language": "c++", - "name": "grpc_rpc_manager_test", - "src": [ - "test/cpp/rpcmanager/grpc_rpc_manager_test.cc", - "test/cpp/rpcmanager/grpc_rpc_manager_test.h" - ], - "third_party": false, - "type": "target" - }, { "deps": [ "grpc_plugin_support" @@ -3131,6 +3111,26 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "grpc", + "grpc++", + "grpc++_test_config" + ], + "headers": [ + "test/cpp/thread_manager/thread_manager_test.h" + ], + "is_filegroup": false, + "language": "c++", + "name": "thread_manager_test", + "src": [ + "test/cpp/thread_manager/thread_manager_test.cc", + "test/cpp/thread_manager/thread_manager_test.h" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -7269,9 +7269,9 @@ "include/grpc++/support/time.h", "src/cpp/client/create_channel_internal.h", "src/cpp/common/channel_filter.h", - "src/cpp/rpcmanager/grpc_rpc_manager.h", "src/cpp/server/dynamic_thread_pool.h", - "src/cpp/server/thread_pool_interface.h" + "src/cpp/server/thread_pool_interface.h", + "src/cpp/thread_manager/thread_manager.h" ], "is_filegroup": true, "language": "c++", @@ -7338,8 +7338,6 @@ "src/cpp/common/completion_queue_cc.cc", "src/cpp/common/core_codegen.cc", "src/cpp/common/rpc_method.cc", - "src/cpp/rpcmanager/grpc_rpc_manager.cc", - "src/cpp/rpcmanager/grpc_rpc_manager.h", "src/cpp/server/async_generic_service.cc", "src/cpp/server/create_default_thread_pool.cc", "src/cpp/server/dynamic_thread_pool.cc", @@ -7350,6 +7348,8 @@ "src/cpp/server/server_credentials.cc", "src/cpp/server/server_posix.cc", "src/cpp/server/thread_pool_interface.h", + "src/cpp/thread_manager/thread_manager.cc", + "src/cpp/thread_manager/thread_manager.h", "src/cpp/util/byte_buffer_cc.cc", "src/cpp/util/slice_cc.cc", "src/cpp/util/status.cc", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 255cb80f153..7446aecdc1b 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -2416,27 +2416,6 @@ "windows" ] }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "gtest": false, - "language": "c++", - "name": "grpc_rpc_manager_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, { "args": [], "ci_platforms": [ @@ -2742,6 +2721,27 @@ "posix" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c++", + "name": "thread_manager_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ @@ -31563,27 +31563,6 @@ "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_secure", "timeout_seconds": 180 }, - { - "args": [ - "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 8, - "defaults": "boringssl", - "exclude_configs": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure", - "timeout_seconds": 180 - }, { "args": [ "--scenarios_json", @@ -31815,27 +31794,6 @@ "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_insecure", "timeout_seconds": 180 }, - { - "args": [ - "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 8, - "defaults": "boringssl", - "exclude_configs": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure", - "timeout_seconds": 180 - }, { "args": [ "--scenarios_json", diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index 509e66d00bb..ad217dae7e1 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -361,9 +361,9 @@ - + @@ -406,8 +406,6 @@ - - @@ -424,6 +422,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index 1dd5fd90e51..d4ad8c4c978 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -61,9 +61,6 @@ src\cpp\common - - src\cpp\rpcmanager - src\cpp\server @@ -88,6 +85,9 @@ src\cpp\server + + src\cpp\thread_manager + src\cpp\util @@ -413,15 +413,15 @@ src\cpp\common - - src\cpp\rpcmanager - src\cpp\server src\cpp\server + + src\cpp\thread_manager + @@ -473,12 +473,12 @@ {2336e396-7e0b-8bf9-3b09-adc6ad1f0e5b} - - {f142b1a2-5198-040b-9da4-2afc09e9248a} - {321b0980-74ad-e8ca-f23b-deffa5d6bb8f} + + {23f9df56-8604-52a0-e6a2-f01b8e68d0e7} + {f842537a-2bf1-1ec3-b495-7d62c64a1c06} diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index 5ec59397ec2..01940c31af7 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -357,9 +357,9 @@ - + @@ -392,8 +392,6 @@ - - @@ -410,6 +408,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index 7e5b912f211..f261c04c7dc 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -46,9 +46,6 @@ src\cpp\common - - src\cpp\rpcmanager - src\cpp\server @@ -73,6 +70,9 @@ src\cpp\server + + src\cpp\thread_manager + src\cpp\util @@ -386,15 +386,15 @@ src\cpp\common - - src\cpp\rpcmanager - src\cpp\server src\cpp\server + + src\cpp\thread_manager + @@ -446,12 +446,12 @@ {ed8e4daa-825f-fbe5-2a45-846ad9165d3d} - - {cb26a5cb-4725-6fee-8abc-09d5fcd52f39} - {8a54a279-d14b-4237-0df3-1ffe1ef5a7af} + + {e5b55f25-d99f-b8e5-9981-7da7fa7ba628} + {fb5d9a64-20ca-5119-ed38-04a3cf94923d} diff --git a/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj.filters b/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj.filters deleted file mode 100644 index fedaea08d33..00000000000 --- a/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj.filters +++ /dev/null @@ -1,26 +0,0 @@ - - - - - test\cpp\rpcmanager - - - - - test\cpp\rpcmanager - - - - - - {9da529f7-8064-34c0-54da-0fade27184ad} - - - {b6e53cff-22ab-1194-866d-57caa3551fd2} - - - {c63d7236-e7c6-d7b7-e3d8-f25853e358e6} - - - - diff --git a/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj b/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj similarity index 97% rename from vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj rename to vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj index 4502de81676..6de19fbf338 100644 --- a/vsprojects/vcxproj/test/grpc_rpc_manager_test/grpc_rpc_manager_test.vcxproj +++ b/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj @@ -20,7 +20,7 @@ - {A4F24E89-1766-2FAA-9058-1094EAA018A8} + {08C611E4-7F87-73BE-76CE-C158A4CC05A3} true $(SolutionDir)IntDir\$(MSBuildProjectName)\ @@ -62,14 +62,14 @@ - grpc_rpc_manager_test + thread_manager_test static Debug static Debug - grpc_rpc_manager_test + thread_manager_test static Release static @@ -160,10 +160,10 @@ - + - + diff --git a/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj.filters b/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj.filters new file mode 100644 index 00000000000..a16d1913170 --- /dev/null +++ b/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj.filters @@ -0,0 +1,26 @@ + + + + + test\cpp\thread_manager + + + + + test\cpp\thread_manager + + + + + + {e9e471cd-7f7e-9abc-af13-ec58851849ac} + + + {b350f72c-af76-7272-4342-1b0fc7a458ee} + + + {6b09ea8d-fbc6-e6fe-f884-b3d3dfcbfc12} + + + + From d39f40da9e1bbe2570ea6f313a938fd98c43d366 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 13 Oct 2016 15:21:14 -0700 Subject: [PATCH 120/286] Fix include files --- include/grpc++/server.h | 2 +- src/cpp/thread_manager/thread_manager.cc | 2 +- test/cpp/thread_manager/thread_manager_test.cc | 2 +- test/cpp/thread_manager/thread_manager_test.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 99b5975847b..9c33b38ce05 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -50,7 +50,7 @@ #include #include -#include "src/cpp/rpcmanager/grpc_rpc_manager.h" +#include "src/cpp/thread_manager/thread_manager.h" struct grpc_server; diff --git a/src/cpp/thread_manager/thread_manager.cc b/src/cpp/thread_manager/thread_manager.cc index 93ccfb4d988..e2b32512f19 100644 --- a/src/cpp/thread_manager/thread_manager.cc +++ b/src/cpp/thread_manager/thread_manager.cc @@ -36,7 +36,7 @@ #include #include -#include "src/cpp/rpcmanager/grpc_rpc_manager.h" +#include "src/cpp/thread_manager/thread_manager.h" namespace grpc { diff --git a/test/cpp/thread_manager/thread_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc index 07fabd6bc36..990e2bab3f7 100644 --- a/test/cpp/thread_manager/thread_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -39,7 +39,7 @@ #include #include -#include "test/cpp/rpcmanager/grpc_rpc_manager_test.h" +#include "test/cpp/thread_manager/thread_manager_test.h" #include "test/cpp/util/test_config.h" using grpc::testing::ThreadManagerTest; diff --git a/test/cpp/thread_manager/thread_manager_test.h b/test/cpp/thread_manager/thread_manager_test.h index 01bf52459f7..176448243b7 100644 --- a/test/cpp/thread_manager/thread_manager_test.h +++ b/test/cpp/thread_manager/thread_manager_test.h @@ -33,7 +33,7 @@ #ifndef GRPC_TEST_CPP_THREAD_MANAGER_TEST_H #define GRPC_TEST_CPP_THREAD_MANAGER_TEST_H -#include "src/cpp/rpcmanager/grpc_rpc_manager.h" +#include "src/cpp/thread_manager/thread_manager.h" namespace grpc { namespace testing { From c37a8a56df0b2dd64f802fee4d4da7d5552212e1 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 13 Oct 2016 15:40:15 -0700 Subject: [PATCH 121/286] Fix test --- include/grpc++/server_builder.h | 2 +- test/cpp/end2end/end2end_test.cc | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index 42e22688513..607df74318f 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -183,7 +183,7 @@ class ServerBuilder { : num_cqs(GPR_MAX(gpr_cpu_num_cores(), 4)), min_pollers(1), max_pollers(INT_MAX), - cq_timeout_msec(100) {} + cq_timeout_msec(1000) {} // Number of server completion queues to create to listen to incoming RPCs. int num_cqs; diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index a46f9f268bc..3618d9ac2ee 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -226,11 +226,6 @@ class End2endTest : public ::testing::TestWithParam { kMaxMessageSize_(8192), special_service_("special") { GetParam().Log(); - - sync_server_settings_.max_pollers = INT_MAX; - sync_server_settings_.min_pollers = 1; - sync_server_settings_.cq_timeout_msec = 10; - sync_server_settings_.num_cqs = 4; } void TearDown() GRPC_OVERRIDE { @@ -256,7 +251,9 @@ class End2endTest : public ::testing::TestWithParam { kMaxMessageSize_); // For testing max message size. builder.RegisterService(&dup_pkg_service_); - builder.SetSyncServerSettings(sync_server_settings_); + builder.SetSyncServerOption(ServerBuilder::SyncServerOption::NUM_CQS, 4); + builder.SetSyncServerOption( + ServerBuilder::SyncServerOption::CQ_TIMEOUT_MSEC, 10); server_ = builder.BuildAndStart(); is_server_started_ = true; @@ -287,7 +284,10 @@ class End2endTest : public ::testing::TestWithParam { ServerBuilder builder; builder.AddListeningPort(proxyaddr.str(), InsecureServerCredentials()); builder.RegisterService(proxy_service_.get()); - builder.SetSyncServerSettings(sync_server_settings_); + + builder.SetSyncServerOption(ServerBuilder::SyncServerOption::NUM_CQS, 4); + builder.SetSyncServerOption( + ServerBuilder::SyncServerOption::CQ_TIMEOUT_MSEC, 10); proxy_server_ = builder.BuildAndStart(); @@ -309,7 +309,6 @@ class End2endTest : public ::testing::TestWithParam { TestServiceImpl special_service_; TestServiceImplDupPkg dup_pkg_service_; grpc::string user_agent_prefix_; - ServerBuilder::SyncServerSettings sync_server_settings_; }; static void SendRpc(grpc::testing::EchoTestService::Stub* stub, int num_rpcs, From 583eb9b96f83f8e443ee530d0cc8df9c233a2de9 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 14 Oct 2016 14:50:21 -0700 Subject: [PATCH 122/286] Clang format --- test/cpp/interop/interop_client.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc index effbb8a42eb..ffd19eb1d5f 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -988,8 +988,8 @@ bool InteropClient::DoUnimplementedMethod() { Empty response = Empty::default_instance(); ClientContext context; - Status s = serviceStub_.Get()->UnimplementedMethod( - &context, request, &response); + Status s = + serviceStub_.Get()->UnimplementedMethod(&context, request, &response); if (!AssertStatusCode(s, StatusCode::UNIMPLEMENTED)) { return false; From 169c985f676f634c33318b9748086f25478ddd9f Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Fri, 14 Oct 2016 15:58:09 -0700 Subject: [PATCH 123/286] Remove generated pb files --- BUILD | 55 +- CMakeLists.txt | 55 +- Makefile | 189 +- build.yaml | 36 +- include/grpc++/ext/reflection.grpc.pb.h | 186 - include/grpc++/ext/reflection.pb.h | 2125 --------- src/cpp/ext/proto_server_reflection.h | 17 - src/cpp/ext/reflection.grpc.pb.cc | 97 - src/cpp/ext/reflection.pb.cc | 4045 ----------------- .../proto_reflection_descriptor_database.h | 7 +- .../extensions/gen_reflection_proto.sh | 95 - tools/distrib/check_generated_pb_files.sh | 43 - .../grpc_check_generated_pb_files/Dockerfile | 73 - .../check_pb_files.sh | 50 - tools/run_tests/sanity/sanity_tests.yaml | 1 - tools/run_tests/sources_and_headers.json | 62 +- .../grpc++_reflection.vcxproj | 60 +- .../grpc++_reflection.vcxproj.filters | 193 +- .../grpc++_reflection_codegen.vcxproj | 168 - .../grpc++_reflection_codegen.vcxproj.filters | 27 - .../grpc_cli_libs/grpc_cli_libs.vcxproj | 63 +- .../grpc_cli_libs.vcxproj.filters | 199 +- .../grpc_tool_test/grpc_tool_test.vcxproj | 8 +- .../grpc_tool_test.vcxproj.filters | 8 - .../proto_server_reflection_test.vcxproj | 58 + ...oto_server_reflection_test.vcxproj.filters | 188 + 26 files changed, 643 insertions(+), 7465 deletions(-) delete mode 100644 include/grpc++/ext/reflection.grpc.pb.h delete mode 100644 include/grpc++/ext/reflection.pb.h delete mode 100644 src/cpp/ext/reflection.grpc.pb.cc delete mode 100644 src/cpp/ext/reflection.pb.cc delete mode 100755 tools/codegen/extensions/gen_reflection_proto.sh delete mode 100755 tools/distrib/check_generated_pb_files.sh delete mode 100644 tools/dockerfile/grpc_check_generated_pb_files/Dockerfile delete mode 100755 tools/dockerfile/grpc_check_generated_pb_files/check_pb_files.sh delete mode 100644 vsprojects/vcxproj/grpc++_reflection_codegen/grpc++_reflection_codegen.vcxproj delete mode 100644 vsprojects/vcxproj/grpc++_reflection_codegen/grpc++_reflection_codegen.vcxproj.filters diff --git a/BUILD b/BUILD index bad6f3f0755..fbfe176f356 100644 --- a/BUILD +++ b/BUILD @@ -1423,63 +1423,10 @@ cc_library( "src/cpp/ext/proto_server_reflection.h", "src/cpp/ext/proto_server_reflection.cc", "src/cpp/ext/proto_server_reflection_plugin.cc", - "src/cpp/ext/reflection.grpc.pb.cc", - "src/cpp/ext/reflection.pb.cc", + "src/proto/grpc/reflection/v1alpha/reflection.proto", ], hdrs = [ "include/grpc++/ext/proto_server_reflection_plugin.h", - "include/grpc++/ext/reflection.grpc.pb.h", - "include/grpc++/ext/reflection.pb.h", - "include/grpc++/impl/codegen/proto_utils.h", - "include/grpc++/impl/codegen/async_stream.h", - "include/grpc++/impl/codegen/async_unary_call.h", - "include/grpc++/impl/codegen/call.h", - "include/grpc++/impl/codegen/call_hook.h", - "include/grpc++/impl/codegen/channel_interface.h", - "include/grpc++/impl/codegen/client_context.h", - "include/grpc++/impl/codegen/client_unary_call.h", - "include/grpc++/impl/codegen/completion_queue.h", - "include/grpc++/impl/codegen/completion_queue_tag.h", - "include/grpc++/impl/codegen/config.h", - "include/grpc++/impl/codegen/core_codegen_interface.h", - "include/grpc++/impl/codegen/create_auth_context.h", - "include/grpc++/impl/codegen/grpc_library.h", - "include/grpc++/impl/codegen/method_handler_impl.h", - "include/grpc++/impl/codegen/rpc_method.h", - "include/grpc++/impl/codegen/rpc_service_method.h", - "include/grpc++/impl/codegen/security/auth_context.h", - "include/grpc++/impl/codegen/serialization_traits.h", - "include/grpc++/impl/codegen/server_context.h", - "include/grpc++/impl/codegen/server_interface.h", - "include/grpc++/impl/codegen/service_type.h", - "include/grpc++/impl/codegen/status.h", - "include/grpc++/impl/codegen/status_code_enum.h", - "include/grpc++/impl/codegen/status_helper.h", - "include/grpc++/impl/codegen/string_ref.h", - "include/grpc++/impl/codegen/stub_options.h", - "include/grpc++/impl/codegen/sync.h", - "include/grpc++/impl/codegen/sync_cxx11.h", - "include/grpc++/impl/codegen/sync_no_cxx11.h", - "include/grpc++/impl/codegen/sync_stream.h", - "include/grpc++/impl/codegen/time.h", - "include/grpc/impl/codegen/byte_buffer_reader.h", - "include/grpc/impl/codegen/compression_types.h", - "include/grpc/impl/codegen/connectivity_state.h", - "include/grpc/impl/codegen/grpc_types.h", - "include/grpc/impl/codegen/propagation_bits.h", - "include/grpc/impl/codegen/status.h", - "include/grpc/impl/codegen/atm.h", - "include/grpc/impl/codegen/atm_gcc_atomic.h", - "include/grpc/impl/codegen/atm_gcc_sync.h", - "include/grpc/impl/codegen/atm_windows.h", - "include/grpc/impl/codegen/gpr_types.h", - "include/grpc/impl/codegen/port_platform.h", - "include/grpc/impl/codegen/slice.h", - "include/grpc/impl/codegen/sync.h", - "include/grpc/impl/codegen/sync_generic.h", - "include/grpc/impl/codegen/sync_posix.h", - "include/grpc/impl/codegen/sync_windows.h", - "include/grpc++/impl/codegen/config_protobuf.h", ], includes = [ "include", diff --git a/CMakeLists.txt b/CMakeLists.txt index c4191521bd1..6ea5e066359 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1174,8 +1174,7 @@ endif() add_library(grpc++_reflection src/cpp/ext/proto_server_reflection.cc src/cpp/ext/proto_server_reflection_plugin.cc - src/cpp/ext/reflection.grpc.pb.cc - src/cpp/ext/reflection.pb.cc + src/proto/grpc/reflection/v1alpha/reflection.proto ) target_include_directories(grpc++_reflection @@ -1193,58 +1192,6 @@ target_link_libraries(grpc++_reflection foreach(_hdr include/grpc++/ext/proto_server_reflection_plugin.h - include/grpc++/ext/reflection.grpc.pb.h - include/grpc++/ext/reflection.pb.h - include/grpc++/impl/codegen/proto_utils.h - include/grpc++/impl/codegen/async_stream.h - include/grpc++/impl/codegen/async_unary_call.h - include/grpc++/impl/codegen/call.h - include/grpc++/impl/codegen/call_hook.h - include/grpc++/impl/codegen/channel_interface.h - include/grpc++/impl/codegen/client_context.h - include/grpc++/impl/codegen/client_unary_call.h - include/grpc++/impl/codegen/completion_queue.h - include/grpc++/impl/codegen/completion_queue_tag.h - include/grpc++/impl/codegen/config.h - include/grpc++/impl/codegen/core_codegen_interface.h - include/grpc++/impl/codegen/create_auth_context.h - include/grpc++/impl/codegen/grpc_library.h - include/grpc++/impl/codegen/method_handler_impl.h - include/grpc++/impl/codegen/rpc_method.h - include/grpc++/impl/codegen/rpc_service_method.h - include/grpc++/impl/codegen/security/auth_context.h - include/grpc++/impl/codegen/serialization_traits.h - include/grpc++/impl/codegen/server_context.h - include/grpc++/impl/codegen/server_interface.h - include/grpc++/impl/codegen/service_type.h - include/grpc++/impl/codegen/status.h - include/grpc++/impl/codegen/status_code_enum.h - include/grpc++/impl/codegen/status_helper.h - include/grpc++/impl/codegen/string_ref.h - include/grpc++/impl/codegen/stub_options.h - include/grpc++/impl/codegen/sync.h - include/grpc++/impl/codegen/sync_cxx11.h - include/grpc++/impl/codegen/sync_no_cxx11.h - include/grpc++/impl/codegen/sync_stream.h - include/grpc++/impl/codegen/time.h - include/grpc/impl/codegen/byte_buffer_reader.h - include/grpc/impl/codegen/compression_types.h - include/grpc/impl/codegen/connectivity_state.h - include/grpc/impl/codegen/grpc_types.h - include/grpc/impl/codegen/propagation_bits.h - include/grpc/impl/codegen/status.h - include/grpc/impl/codegen/atm.h - include/grpc/impl/codegen/atm_gcc_atomic.h - include/grpc/impl/codegen/atm_gcc_sync.h - include/grpc/impl/codegen/atm_windows.h - include/grpc/impl/codegen/gpr_types.h - include/grpc/impl/codegen/port_platform.h - include/grpc/impl/codegen/slice.h - include/grpc/impl/codegen/sync.h - include/grpc/impl/codegen/sync_generic.h - include/grpc/impl/codegen/sync_posix.h - include/grpc/impl/codegen/sync_windows.h - include/grpc++/impl/codegen/config_protobuf.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) diff --git a/Makefile b/Makefile index 62c65822b0f..be012287a3a 100644 --- a/Makefile +++ b/Makefile @@ -1224,9 +1224,9 @@ pc_cxx: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++.pc pc_cxx_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc ifeq ($(EMBED_OPENSSL),true) -privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_asn1_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x509_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a +privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_asn1_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x509_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a else -privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a +privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a endif @@ -3778,63 +3778,10 @@ endif LIBGRPC++_REFLECTION_SRC = \ src/cpp/ext/proto_server_reflection.cc \ src/cpp/ext/proto_server_reflection_plugin.cc \ - src/cpp/ext/reflection.grpc.pb.cc \ - src/cpp/ext/reflection.pb.cc \ + $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ PUBLIC_HEADERS_CXX += \ include/grpc++/ext/proto_server_reflection_plugin.h \ - include/grpc++/ext/reflection.grpc.pb.h \ - include/grpc++/ext/reflection.pb.h \ - include/grpc++/impl/codegen/proto_utils.h \ - include/grpc++/impl/codegen/async_stream.h \ - include/grpc++/impl/codegen/async_unary_call.h \ - include/grpc++/impl/codegen/call.h \ - include/grpc++/impl/codegen/call_hook.h \ - include/grpc++/impl/codegen/channel_interface.h \ - include/grpc++/impl/codegen/client_context.h \ - include/grpc++/impl/codegen/client_unary_call.h \ - include/grpc++/impl/codegen/completion_queue.h \ - include/grpc++/impl/codegen/completion_queue_tag.h \ - include/grpc++/impl/codegen/config.h \ - include/grpc++/impl/codegen/core_codegen_interface.h \ - include/grpc++/impl/codegen/create_auth_context.h \ - include/grpc++/impl/codegen/grpc_library.h \ - include/grpc++/impl/codegen/method_handler_impl.h \ - include/grpc++/impl/codegen/rpc_method.h \ - include/grpc++/impl/codegen/rpc_service_method.h \ - include/grpc++/impl/codegen/security/auth_context.h \ - include/grpc++/impl/codegen/serialization_traits.h \ - include/grpc++/impl/codegen/server_context.h \ - include/grpc++/impl/codegen/server_interface.h \ - include/grpc++/impl/codegen/service_type.h \ - include/grpc++/impl/codegen/status.h \ - include/grpc++/impl/codegen/status_code_enum.h \ - include/grpc++/impl/codegen/status_helper.h \ - include/grpc++/impl/codegen/string_ref.h \ - include/grpc++/impl/codegen/stub_options.h \ - include/grpc++/impl/codegen/sync.h \ - include/grpc++/impl/codegen/sync_cxx11.h \ - include/grpc++/impl/codegen/sync_no_cxx11.h \ - include/grpc++/impl/codegen/sync_stream.h \ - include/grpc++/impl/codegen/time.h \ - include/grpc/impl/codegen/byte_buffer_reader.h \ - include/grpc/impl/codegen/compression_types.h \ - include/grpc/impl/codegen/connectivity_state.h \ - include/grpc/impl/codegen/grpc_types.h \ - include/grpc/impl/codegen/propagation_bits.h \ - include/grpc/impl/codegen/status.h \ - include/grpc/impl/codegen/atm.h \ - include/grpc/impl/codegen/atm_gcc_atomic.h \ - include/grpc/impl/codegen/atm_gcc_sync.h \ - include/grpc/impl/codegen/atm_windows.h \ - include/grpc/impl/codegen/gpr_types.h \ - include/grpc/impl/codegen/port_platform.h \ - include/grpc/impl/codegen/slice.h \ - include/grpc/impl/codegen/sync.h \ - include/grpc/impl/codegen/sync_generic.h \ - include/grpc/impl/codegen/sync_posix.h \ - include/grpc/impl/codegen/sync_windows.h \ - include/grpc++/impl/codegen/config_protobuf.h \ LIBGRPC++_REFLECTION_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_REFLECTION_SRC)))) @@ -3897,55 +3844,8 @@ ifneq ($(NO_DEPS),true) -include $(LIBGRPC++_REFLECTION_OBJS:.o=.dep) endif endif - - -LIBGRPC++_REFLECTION_CODEGEN_SRC = \ - $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ - -PUBLIC_HEADERS_CXX += \ - -LIBGRPC++_REFLECTION_CODEGEN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_REFLECTION_CODEGEN_SRC)))) - - -ifeq ($(NO_SECURE),true) - -# You can't build secure libraries if you don't have OpenSSL. - -$(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a: openssl_dep_error - - -else - -ifeq ($(NO_PROTOBUF),true) - -# You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. - -$(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a: protobuf_dep_error - - -else - -$(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_REFLECTION_CODEGEN_OBJS) - $(E) "[AR] Creating $@" - $(Q) mkdir -p `dirname $@` - $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a - $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBGRPC++_REFLECTION_CODEGEN_OBJS) -ifeq ($(SYSTEM),Darwin) - $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a -endif - - - - -endif - -endif - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(LIBGRPC++_REFLECTION_CODEGEN_OBJS:.o=.dep) -endif -endif +$(OBJDIR)/$(CONFIG)/src/cpp/ext/proto_server_reflection.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc +$(OBJDIR)/$(CONFIG)/src/cpp/ext/proto_server_reflection_plugin.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc LIBGRPC++_TEST_CONFIG_SRC = \ @@ -4296,10 +4196,60 @@ LIBGRPC_CLI_LIBS_SRC = \ test/cpp/util/cli_credentials.cc \ test/cpp/util/grpc_tool.cc \ test/cpp/util/proto_file_parser.cc \ - test/cpp/util/proto_reflection_descriptor_database.cc \ test/cpp/util/service_describer.cc \ + test/cpp/util/proto_reflection_descriptor_database.cc \ + $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ PUBLIC_HEADERS_CXX += \ + include/grpc++/impl/codegen/async_stream.h \ + include/grpc++/impl/codegen/async_unary_call.h \ + include/grpc++/impl/codegen/call.h \ + include/grpc++/impl/codegen/call_hook.h \ + include/grpc++/impl/codegen/channel_interface.h \ + include/grpc++/impl/codegen/client_context.h \ + include/grpc++/impl/codegen/client_unary_call.h \ + include/grpc++/impl/codegen/completion_queue.h \ + include/grpc++/impl/codegen/completion_queue_tag.h \ + include/grpc++/impl/codegen/config.h \ + include/grpc++/impl/codegen/core_codegen_interface.h \ + include/grpc++/impl/codegen/create_auth_context.h \ + include/grpc++/impl/codegen/grpc_library.h \ + include/grpc++/impl/codegen/method_handler_impl.h \ + include/grpc++/impl/codegen/rpc_method.h \ + include/grpc++/impl/codegen/rpc_service_method.h \ + include/grpc++/impl/codegen/security/auth_context.h \ + include/grpc++/impl/codegen/serialization_traits.h \ + include/grpc++/impl/codegen/server_context.h \ + include/grpc++/impl/codegen/server_interface.h \ + include/grpc++/impl/codegen/service_type.h \ + include/grpc++/impl/codegen/status.h \ + include/grpc++/impl/codegen/status_code_enum.h \ + include/grpc++/impl/codegen/status_helper.h \ + include/grpc++/impl/codegen/string_ref.h \ + include/grpc++/impl/codegen/stub_options.h \ + include/grpc++/impl/codegen/sync.h \ + include/grpc++/impl/codegen/sync_cxx11.h \ + include/grpc++/impl/codegen/sync_no_cxx11.h \ + include/grpc++/impl/codegen/sync_stream.h \ + include/grpc++/impl/codegen/time.h \ + include/grpc/impl/codegen/byte_buffer_reader.h \ + include/grpc/impl/codegen/compression_types.h \ + include/grpc/impl/codegen/connectivity_state.h \ + include/grpc/impl/codegen/grpc_types.h \ + include/grpc/impl/codegen/propagation_bits.h \ + include/grpc/impl/codegen/status.h \ + include/grpc/impl/codegen/atm.h \ + include/grpc/impl/codegen/atm_gcc_atomic.h \ + include/grpc/impl/codegen/atm_gcc_sync.h \ + include/grpc/impl/codegen/atm_windows.h \ + include/grpc/impl/codegen/gpr_types.h \ + include/grpc/impl/codegen/port_platform.h \ + include/grpc/impl/codegen/slice.h \ + include/grpc/impl/codegen/sync.h \ + include/grpc/impl/codegen/sync_generic.h \ + include/grpc/impl/codegen/sync_posix.h \ + include/grpc/impl/codegen/sync_windows.h \ + include/grpc++/impl/codegen/config_protobuf.h \ LIBGRPC_CLI_LIBS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_CLI_LIBS_SRC)))) @@ -4343,6 +4293,12 @@ ifneq ($(NO_DEPS),true) -include $(LIBGRPC_CLI_LIBS_OBJS:.o=.dep) endif endif +$(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc +$(OBJDIR)/$(CONFIG)/test/cpp/util/cli_credentials.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc +$(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc +$(OBJDIR)/$(CONFIG)/test/cpp/util/proto_file_parser.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc +$(OBJDIR)/$(CONFIG)/test/cpp/util/service_describer.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc +$(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc LIBGRPC_PLUGIN_SUPPORT_SRC = \ @@ -11835,7 +11791,6 @@ GRPC_TOOL_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ test/cpp/util/grpc_tool_test.cc \ - test/cpp/util/string_ref_helper.cc \ GRPC_TOOL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_TOOL_TEST_SRC)))) ifeq ($(NO_SECURE),true) @@ -11857,22 +11812,20 @@ $(BINDIR)/$(CONFIG)/grpc_tool_test: protobuf_dep_error else -$(BINDIR)/$(CONFIG)/grpc_tool_test: $(PROTOBUF_DEP) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(BINDIR)/$(CONFIG)/grpc_tool_test: $(PROTOBUF_DEP) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_tool_test + $(Q) $(LDXX) $(LDFLAGS) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_tool_test endif endif -$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - -$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a -$(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a -$(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_helper.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a deps_grpc_tool_test: $(GRPC_TOOL_TEST_OBJS:.o=.dep) @@ -11882,7 +11835,6 @@ ifneq ($(NO_DEPS),true) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc -$(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_helper.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc GRPCLB_API_TEST_SRC = \ @@ -12263,6 +12215,7 @@ endif PROTO_SERVER_REFLECTION_TEST_SRC = \ test/cpp/end2end/proto_server_reflection_test.cc \ test/cpp/util/proto_reflection_descriptor_database.cc \ + $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ PROTO_SERVER_REFLECTION_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PROTO_SERVER_REFLECTION_TEST_SRC)))) ifeq ($(NO_SECURE),true) @@ -12297,6 +12250,8 @@ $(OBJDIR)/$(CONFIG)/test/cpp/end2end/proto_server_reflection_test.o: $(LIBDIR)/ $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(OBJDIR)/$(CONFIG)/src/proto/grpc/reflection/v1alpha/reflection.o: $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + deps_proto_server_reflection_test: $(PROTO_SERVER_REFLECTION_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) @@ -12304,6 +12259,8 @@ ifneq ($(NO_DEPS),true) -include $(PROTO_SERVER_REFLECTION_TEST_OBJS:.o=.dep) endif endif +$(OBJDIR)/$(CONFIG)/test/cpp/end2end/proto_server_reflection_test.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc +$(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc QPS_INTERARRIVAL_TEST_SRC = \ @@ -15671,8 +15628,6 @@ src/cpp/common/secure_channel_arguments.cc: $(OPENSSL_DEP) src/cpp/common/secure_create_auth_context.cc: $(OPENSSL_DEP) src/cpp/ext/proto_server_reflection.cc: $(OPENSSL_DEP) src/cpp/ext/proto_server_reflection_plugin.cc: $(OPENSSL_DEP) -src/cpp/ext/reflection.grpc.pb.cc: $(OPENSSL_DEP) -src/cpp/ext/reflection.pb.cc: $(OPENSSL_DEP) src/cpp/server/secure_server_credentials.cc: $(OPENSSL_DEP) src/csharp/ext/grpc_csharp_ext.c: $(OPENSSL_DEP) test/core/bad_client/bad_client.c: $(OPENSSL_DEP) diff --git a/build.yaml b/build.yaml index 584084ff865..cde799b324d 100644 --- a/build.yaml +++ b/build.yaml @@ -796,16 +796,19 @@ filegroups: language: c++ public_headers: - include/grpc++/impl/codegen/config_protobuf.h -- name: grpc++_reflection_proto +- name: grpc++_proto_reflection_desc_db language: c++ - public_headers: - - include/grpc++/ext/reflection.grpc.pb.h - - include/grpc++/ext/reflection.pb.h + headers: + - test/cpp/util/proto_reflection_descriptor_database.h src: - - src/cpp/ext/reflection.grpc.pb.cc - - src/cpp/ext/reflection.pb.cc + - test/cpp/util/proto_reflection_descriptor_database.cc uses: - - grpc++_codegen_proto + - grpc++_reflection_proto + - grpc++_codegen_base +- name: grpc++_reflection_proto + language: c++ + src: + - src/proto/grpc/reflection/v1alpha/reflection.proto - name: thrift_util language: c++ public_headers: @@ -1017,11 +1020,6 @@ libs: - grpc++ filegroups: - grpc++_reflection_proto -- name: grpc++_reflection_codegen - build: private - language: c++ - src: - - src/proto/grpc/reflection/v1alpha/reflection.proto - name: grpc++_test_config build: private language: c++ @@ -1085,18 +1083,19 @@ libs: - test/cpp/util/config_grpc_cli.h - test/cpp/util/grpc_tool.h - test/cpp/util/proto_file_parser.h - - test/cpp/util/proto_reflection_descriptor_database.h - test/cpp/util/service_describer.h src: - test/cpp/util/cli_call.cc - test/cpp/util/cli_credentials.cc - test/cpp/util/grpc_tool.cc - test/cpp/util/proto_file_parser.cc - - test/cpp/util/proto_reflection_descriptor_database.cc - test/cpp/util/service_describer.cc deps: - grpc++_reflection - grpc++ + filegroups: + - grpc++_proto_reflection_desc_db + - grpc++_config_proto - name: grpc_plugin_support build: protoc language: c++ @@ -2907,16 +2906,14 @@ targets: gtest: true build: test language: c++ - headers: - - test/cpp/util/string_ref_helper.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - test/cpp/util/grpc_tool_test.cc - - test/cpp/util/string_ref_helper.cc deps: - grpc_cli_libs - grpc++_reflection + - grpc++_test_util - grpc_test_util - grpc++ - grpc @@ -3063,11 +3060,8 @@ targets: gtest: true build: test language: c++ - headers: - - test/cpp/util/proto_reflection_descriptor_database.h src: - test/cpp/end2end/proto_server_reflection_test.cc - - test/cpp/util/proto_reflection_descriptor_database.cc deps: - grpc++_reflection - grpc++_test_util @@ -3076,6 +3070,8 @@ targets: - grpc - gpr_test_util - gpr + filegroups: + - grpc++_proto_reflection_desc_db - name: qps_interarrival_test build: test run: false diff --git a/include/grpc++/ext/reflection.grpc.pb.h b/include/grpc++/ext/reflection.grpc.pb.h deleted file mode 100644 index 6e56088497a..00000000000 --- a/include/grpc++/ext/reflection.grpc.pb.h +++ /dev/null @@ -1,186 +0,0 @@ -/* - * - * Copyright 2015, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -// Generated by tools/codegen/extensions/gen_reflection_proto.sh -// If you make any local change, they will be lost. -// source: reflection.proto -// Original file comments: -// Copyright 2016, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Service exported by server reflection -// -#ifndef GRPC_reflection_2eproto__INCLUDED -#define GRPC_reflection_2eproto__INCLUDED - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace grpc { -class CompletionQueue; -class Channel; -class RpcService; -class ServerCompletionQueue; -class ServerContext; -} // namespace grpc - -namespace grpc { -namespace reflection { -namespace v1alpha { - -class ServerReflection GRPC_FINAL { - public: - class StubInterface { - public: - virtual ~StubInterface() {} - // The reflection service is structured as a bidirectional stream, ensuring - // all related requests go to a single server. - std::unique_ptr< ::grpc::ClientReaderWriterInterface< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>> ServerReflectionInfo(::grpc::ClientContext* context) { - return std::unique_ptr< ::grpc::ClientReaderWriterInterface< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>>(ServerReflectionInfoRaw(context)); - } - std::unique_ptr< ::grpc::ClientAsyncReaderWriterInterface< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>> AsyncServerReflectionInfo(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) { - return std::unique_ptr< ::grpc::ClientAsyncReaderWriterInterface< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>>(AsyncServerReflectionInfoRaw(context, cq, tag)); - } - private: - virtual ::grpc::ClientReaderWriterInterface< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>* ServerReflectionInfoRaw(::grpc::ClientContext* context) = 0; - virtual ::grpc::ClientAsyncReaderWriterInterface< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>* AsyncServerReflectionInfoRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) = 0; - }; - class Stub GRPC_FINAL : public StubInterface { - public: - Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel); - std::unique_ptr< ::grpc::ClientReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>> ServerReflectionInfo(::grpc::ClientContext* context) { - return std::unique_ptr< ::grpc::ClientReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>>(ServerReflectionInfoRaw(context)); - } - std::unique_ptr< ::grpc::ClientAsyncReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>> AsyncServerReflectionInfo(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) { - return std::unique_ptr< ::grpc::ClientAsyncReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>>(AsyncServerReflectionInfoRaw(context, cq, tag)); - } - - private: - std::shared_ptr< ::grpc::ChannelInterface> channel_; - ::grpc::ClientReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>* ServerReflectionInfoRaw(::grpc::ClientContext* context) GRPC_OVERRIDE; - ::grpc::ClientAsyncReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>* AsyncServerReflectionInfoRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) GRPC_OVERRIDE; - const ::grpc::RpcMethod rpcmethod_ServerReflectionInfo_; - }; - static std::unique_ptr NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions()); - - class Service : public ::grpc::Service { - public: - Service(); - virtual ~Service(); - // The reflection service is structured as a bidirectional stream, ensuring - // all related requests go to a single server. - virtual ::grpc::Status ServerReflectionInfo(::grpc::ServerContext* context, ::grpc::ServerReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionResponse, ::grpc::reflection::v1alpha::ServerReflectionRequest>* stream); - }; - template - class WithAsyncMethod_ServerReflectionInfo : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - WithAsyncMethod_ServerReflectionInfo() { - ::grpc::Service::MarkMethodAsync(0); - } - ~WithAsyncMethod_ServerReflectionInfo() GRPC_OVERRIDE { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status ServerReflectionInfo(::grpc::ServerContext* context, ::grpc::ServerReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionResponse, ::grpc::reflection::v1alpha::ServerReflectionRequest>* stream) GRPC_FINAL GRPC_OVERRIDE { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - void RequestServerReflectionInfo(::grpc::ServerContext* context, ::grpc::ServerAsyncReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionResponse, ::grpc::reflection::v1alpha::ServerReflectionRequest>* stream, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { - ::grpc::Service::RequestAsyncBidiStreaming(0, context, stream, new_call_cq, notification_cq, tag); - } - }; - typedef WithAsyncMethod_ServerReflectionInfo AsyncService; - template - class WithGenericMethod_ServerReflectionInfo : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - WithGenericMethod_ServerReflectionInfo() { - ::grpc::Service::MarkMethodGeneric(0); - } - ~WithGenericMethod_ServerReflectionInfo() GRPC_OVERRIDE { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status ServerReflectionInfo(::grpc::ServerContext* context, ::grpc::ServerReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionResponse, ::grpc::reflection::v1alpha::ServerReflectionRequest>* stream) GRPC_FINAL GRPC_OVERRIDE { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - }; - typedef Service StreamedUnaryService; -}; - -} // namespace v1alpha -} // namespace reflection -} // namespace grpc - - -#endif // GRPC_reflection_2eproto__INCLUDED diff --git a/include/grpc++/ext/reflection.pb.h b/include/grpc++/ext/reflection.pb.h deleted file mode 100644 index 6e645af10e5..00000000000 --- a/include/grpc++/ext/reflection.pb.h +++ /dev/null @@ -1,2125 +0,0 @@ -/* - * - * Copyright 2015, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -// Generated by tools/codegen/extensions/gen_reflection_proto.sh -// source: reflection.proto - -#ifndef PROTOBUF_reflection_2eproto__INCLUDED -#define PROTOBUF_reflection_2eproto__INCLUDED - -#include - -#include - -#if GOOGLE_PROTOBUF_VERSION < 3001000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3001000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -// @@protoc_insertion_point(includes) - -namespace grpc { -namespace reflection { -namespace v1alpha { - -// Internal implementation detail -- do not call these. -void protobuf_AddDesc_reflection_2eproto(); -void protobuf_InitDefaults_reflection_2eproto(); -void protobuf_AssignDesc_reflection_2eproto(); -void protobuf_ShutdownFile_reflection_2eproto(); - -class ErrorResponse; -class ExtensionNumberResponse; -class ExtensionRequest; -class FileDescriptorResponse; -class ListServiceResponse; -class ServerReflectionRequest; -class ServerReflectionResponse; -class ServiceResponse; - -// =================================================================== - -class ServerReflectionRequest : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:grpc.reflection.v1alpha.ServerReflectionRequest) */ { - public: - ServerReflectionRequest(); - virtual ~ServerReflectionRequest(); - - ServerReflectionRequest(const ServerReflectionRequest& from); - - inline ServerReflectionRequest& operator=(const ServerReflectionRequest& from) { - CopyFrom(from); - return *this; - } - - static const ::google::protobuf::Descriptor* descriptor(); - static const ServerReflectionRequest& default_instance(); - - enum MessageRequestCase { - kFileByFilename = 3, - kFileContainingSymbol = 4, - kFileContainingExtension = 5, - kAllExtensionNumbersOfType = 6, - kListServices = 7, - MESSAGE_REQUEST_NOT_SET = 0, - }; - - static const ServerReflectionRequest* internal_default_instance(); - - void Swap(ServerReflectionRequest* other); - - // implements Message ---------------------------------------------- - - inline ServerReflectionRequest* New() const { return New(NULL); } - - ServerReflectionRequest* New(::google::protobuf::Arena* arena) const; - void CopyFrom(const ::google::protobuf::Message& from); - void MergeFrom(const ::google::protobuf::Message& from); - void CopyFrom(const ServerReflectionRequest& from); - void MergeFrom(const ServerReflectionRequest& from); - void Clear(); - bool IsInitialized() const; - - size_t ByteSizeLong() const; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input); - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* output) const; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const { - return InternalSerializeWithCachedSizesToArray(false, output); - } - int GetCachedSize() const { return _cached_size_; } - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const; - void InternalSwap(ServerReflectionRequest* other); - void UnsafeMergeFrom(const ServerReflectionRequest& from); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return _internal_metadata_.arena(); - } - inline void* MaybeArenaPtr() const { - return _internal_metadata_.raw_arena_ptr(); - } - public: - - ::google::protobuf::Metadata GetMetadata() const; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // optional string host = 1; - void clear_host(); - static const int kHostFieldNumber = 1; - const ::std::string& host() const; - void set_host(const ::std::string& value); - void set_host(const char* value); - void set_host(const char* value, size_t size); - ::std::string* mutable_host(); - ::std::string* release_host(); - void set_allocated_host(::std::string* host); - - // optional string file_by_filename = 3; - private: - bool has_file_by_filename() const; - public: - void clear_file_by_filename(); - static const int kFileByFilenameFieldNumber = 3; - const ::std::string& file_by_filename() const; - void set_file_by_filename(const ::std::string& value); - void set_file_by_filename(const char* value); - void set_file_by_filename(const char* value, size_t size); - ::std::string* mutable_file_by_filename(); - ::std::string* release_file_by_filename(); - void set_allocated_file_by_filename(::std::string* file_by_filename); - - // optional string file_containing_symbol = 4; - private: - bool has_file_containing_symbol() const; - public: - void clear_file_containing_symbol(); - static const int kFileContainingSymbolFieldNumber = 4; - const ::std::string& file_containing_symbol() const; - void set_file_containing_symbol(const ::std::string& value); - void set_file_containing_symbol(const char* value); - void set_file_containing_symbol(const char* value, size_t size); - ::std::string* mutable_file_containing_symbol(); - ::std::string* release_file_containing_symbol(); - void set_allocated_file_containing_symbol(::std::string* file_containing_symbol); - - // optional .grpc.reflection.v1alpha.ExtensionRequest file_containing_extension = 5; - bool has_file_containing_extension() const; - void clear_file_containing_extension(); - static const int kFileContainingExtensionFieldNumber = 5; - const ::grpc::reflection::v1alpha::ExtensionRequest& file_containing_extension() const; - ::grpc::reflection::v1alpha::ExtensionRequest* mutable_file_containing_extension(); - ::grpc::reflection::v1alpha::ExtensionRequest* release_file_containing_extension(); - void set_allocated_file_containing_extension(::grpc::reflection::v1alpha::ExtensionRequest* file_containing_extension); - - // optional string all_extension_numbers_of_type = 6; - private: - bool has_all_extension_numbers_of_type() const; - public: - void clear_all_extension_numbers_of_type(); - static const int kAllExtensionNumbersOfTypeFieldNumber = 6; - const ::std::string& all_extension_numbers_of_type() const; - void set_all_extension_numbers_of_type(const ::std::string& value); - void set_all_extension_numbers_of_type(const char* value); - void set_all_extension_numbers_of_type(const char* value, size_t size); - ::std::string* mutable_all_extension_numbers_of_type(); - ::std::string* release_all_extension_numbers_of_type(); - void set_allocated_all_extension_numbers_of_type(::std::string* all_extension_numbers_of_type); - - // optional string list_services = 7; - private: - bool has_list_services() const; - public: - void clear_list_services(); - static const int kListServicesFieldNumber = 7; - const ::std::string& list_services() const; - void set_list_services(const ::std::string& value); - void set_list_services(const char* value); - void set_list_services(const char* value, size_t size); - ::std::string* mutable_list_services(); - ::std::string* release_list_services(); - void set_allocated_list_services(::std::string* list_services); - - MessageRequestCase message_request_case() const; - // @@protoc_insertion_point(class_scope:grpc.reflection.v1alpha.ServerReflectionRequest) - private: - inline void set_has_file_by_filename(); - inline void set_has_file_containing_symbol(); - inline void set_has_file_containing_extension(); - inline void set_has_all_extension_numbers_of_type(); - inline void set_has_list_services(); - - inline bool has_message_request() const; - void clear_message_request(); - inline void clear_has_message_request(); - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr host_; - union MessageRequestUnion { - MessageRequestUnion() {} - ::google::protobuf::internal::ArenaStringPtr file_by_filename_; - ::google::protobuf::internal::ArenaStringPtr file_containing_symbol_; - ::grpc::reflection::v1alpha::ExtensionRequest* file_containing_extension_; - ::google::protobuf::internal::ArenaStringPtr all_extension_numbers_of_type_; - ::google::protobuf::internal::ArenaStringPtr list_services_; - } message_request_; - mutable int _cached_size_; - ::google::protobuf::uint32 _oneof_case_[1]; - - friend void protobuf_InitDefaults_reflection_2eproto_impl(); - friend void protobuf_AddDesc_reflection_2eproto_impl(); - friend void protobuf_AssignDesc_reflection_2eproto(); - friend void protobuf_ShutdownFile_reflection_2eproto(); - - void InitAsDefaultInstance(); -}; -extern ::google::protobuf::internal::ExplicitlyConstructed ServerReflectionRequest_default_instance_; - -// ------------------------------------------------------------------- - -class ExtensionRequest : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:grpc.reflection.v1alpha.ExtensionRequest) */ { - public: - ExtensionRequest(); - virtual ~ExtensionRequest(); - - ExtensionRequest(const ExtensionRequest& from); - - inline ExtensionRequest& operator=(const ExtensionRequest& from) { - CopyFrom(from); - return *this; - } - - static const ::google::protobuf::Descriptor* descriptor(); - static const ExtensionRequest& default_instance(); - - static const ExtensionRequest* internal_default_instance(); - - void Swap(ExtensionRequest* other); - - // implements Message ---------------------------------------------- - - inline ExtensionRequest* New() const { return New(NULL); } - - ExtensionRequest* New(::google::protobuf::Arena* arena) const; - void CopyFrom(const ::google::protobuf::Message& from); - void MergeFrom(const ::google::protobuf::Message& from); - void CopyFrom(const ExtensionRequest& from); - void MergeFrom(const ExtensionRequest& from); - void Clear(); - bool IsInitialized() const; - - size_t ByteSizeLong() const; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input); - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* output) const; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const { - return InternalSerializeWithCachedSizesToArray(false, output); - } - int GetCachedSize() const { return _cached_size_; } - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const; - void InternalSwap(ExtensionRequest* other); - void UnsafeMergeFrom(const ExtensionRequest& from); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return _internal_metadata_.arena(); - } - inline void* MaybeArenaPtr() const { - return _internal_metadata_.raw_arena_ptr(); - } - public: - - ::google::protobuf::Metadata GetMetadata() const; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // optional string containing_type = 1; - void clear_containing_type(); - static const int kContainingTypeFieldNumber = 1; - const ::std::string& containing_type() const; - void set_containing_type(const ::std::string& value); - void set_containing_type(const char* value); - void set_containing_type(const char* value, size_t size); - ::std::string* mutable_containing_type(); - ::std::string* release_containing_type(); - void set_allocated_containing_type(::std::string* containing_type); - - // optional int32 extension_number = 2; - void clear_extension_number(); - static const int kExtensionNumberFieldNumber = 2; - ::google::protobuf::int32 extension_number() const; - void set_extension_number(::google::protobuf::int32 value); - - // @@protoc_insertion_point(class_scope:grpc.reflection.v1alpha.ExtensionRequest) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr containing_type_; - ::google::protobuf::int32 extension_number_; - mutable int _cached_size_; - friend void protobuf_InitDefaults_reflection_2eproto_impl(); - friend void protobuf_AddDesc_reflection_2eproto_impl(); - friend void protobuf_AssignDesc_reflection_2eproto(); - friend void protobuf_ShutdownFile_reflection_2eproto(); - - void InitAsDefaultInstance(); -}; -extern ::google::protobuf::internal::ExplicitlyConstructed ExtensionRequest_default_instance_; - -// ------------------------------------------------------------------- - -class ServerReflectionResponse : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:grpc.reflection.v1alpha.ServerReflectionResponse) */ { - public: - ServerReflectionResponse(); - virtual ~ServerReflectionResponse(); - - ServerReflectionResponse(const ServerReflectionResponse& from); - - inline ServerReflectionResponse& operator=(const ServerReflectionResponse& from) { - CopyFrom(from); - return *this; - } - - static const ::google::protobuf::Descriptor* descriptor(); - static const ServerReflectionResponse& default_instance(); - - enum MessageResponseCase { - kFileDescriptorResponse = 4, - kAllExtensionNumbersResponse = 5, - kListServicesResponse = 6, - kErrorResponse = 7, - MESSAGE_RESPONSE_NOT_SET = 0, - }; - - static const ServerReflectionResponse* internal_default_instance(); - - void Swap(ServerReflectionResponse* other); - - // implements Message ---------------------------------------------- - - inline ServerReflectionResponse* New() const { return New(NULL); } - - ServerReflectionResponse* New(::google::protobuf::Arena* arena) const; - void CopyFrom(const ::google::protobuf::Message& from); - void MergeFrom(const ::google::protobuf::Message& from); - void CopyFrom(const ServerReflectionResponse& from); - void MergeFrom(const ServerReflectionResponse& from); - void Clear(); - bool IsInitialized() const; - - size_t ByteSizeLong() const; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input); - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* output) const; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const { - return InternalSerializeWithCachedSizesToArray(false, output); - } - int GetCachedSize() const { return _cached_size_; } - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const; - void InternalSwap(ServerReflectionResponse* other); - void UnsafeMergeFrom(const ServerReflectionResponse& from); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return _internal_metadata_.arena(); - } - inline void* MaybeArenaPtr() const { - return _internal_metadata_.raw_arena_ptr(); - } - public: - - ::google::protobuf::Metadata GetMetadata() const; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // optional string valid_host = 1; - void clear_valid_host(); - static const int kValidHostFieldNumber = 1; - const ::std::string& valid_host() const; - void set_valid_host(const ::std::string& value); - void set_valid_host(const char* value); - void set_valid_host(const char* value, size_t size); - ::std::string* mutable_valid_host(); - ::std::string* release_valid_host(); - void set_allocated_valid_host(::std::string* valid_host); - - // optional .grpc.reflection.v1alpha.ServerReflectionRequest original_request = 2; - bool has_original_request() const; - void clear_original_request(); - static const int kOriginalRequestFieldNumber = 2; - const ::grpc::reflection::v1alpha::ServerReflectionRequest& original_request() const; - ::grpc::reflection::v1alpha::ServerReflectionRequest* mutable_original_request(); - ::grpc::reflection::v1alpha::ServerReflectionRequest* release_original_request(); - void set_allocated_original_request(::grpc::reflection::v1alpha::ServerReflectionRequest* original_request); - - // optional .grpc.reflection.v1alpha.FileDescriptorResponse file_descriptor_response = 4; - bool has_file_descriptor_response() const; - void clear_file_descriptor_response(); - static const int kFileDescriptorResponseFieldNumber = 4; - const ::grpc::reflection::v1alpha::FileDescriptorResponse& file_descriptor_response() const; - ::grpc::reflection::v1alpha::FileDescriptorResponse* mutable_file_descriptor_response(); - ::grpc::reflection::v1alpha::FileDescriptorResponse* release_file_descriptor_response(); - void set_allocated_file_descriptor_response(::grpc::reflection::v1alpha::FileDescriptorResponse* file_descriptor_response); - - // optional .grpc.reflection.v1alpha.ExtensionNumberResponse all_extension_numbers_response = 5; - bool has_all_extension_numbers_response() const; - void clear_all_extension_numbers_response(); - static const int kAllExtensionNumbersResponseFieldNumber = 5; - const ::grpc::reflection::v1alpha::ExtensionNumberResponse& all_extension_numbers_response() const; - ::grpc::reflection::v1alpha::ExtensionNumberResponse* mutable_all_extension_numbers_response(); - ::grpc::reflection::v1alpha::ExtensionNumberResponse* release_all_extension_numbers_response(); - void set_allocated_all_extension_numbers_response(::grpc::reflection::v1alpha::ExtensionNumberResponse* all_extension_numbers_response); - - // optional .grpc.reflection.v1alpha.ListServiceResponse list_services_response = 6; - bool has_list_services_response() const; - void clear_list_services_response(); - static const int kListServicesResponseFieldNumber = 6; - const ::grpc::reflection::v1alpha::ListServiceResponse& list_services_response() const; - ::grpc::reflection::v1alpha::ListServiceResponse* mutable_list_services_response(); - ::grpc::reflection::v1alpha::ListServiceResponse* release_list_services_response(); - void set_allocated_list_services_response(::grpc::reflection::v1alpha::ListServiceResponse* list_services_response); - - // optional .grpc.reflection.v1alpha.ErrorResponse error_response = 7; - bool has_error_response() const; - void clear_error_response(); - static const int kErrorResponseFieldNumber = 7; - const ::grpc::reflection::v1alpha::ErrorResponse& error_response() const; - ::grpc::reflection::v1alpha::ErrorResponse* mutable_error_response(); - ::grpc::reflection::v1alpha::ErrorResponse* release_error_response(); - void set_allocated_error_response(::grpc::reflection::v1alpha::ErrorResponse* error_response); - - MessageResponseCase message_response_case() const; - // @@protoc_insertion_point(class_scope:grpc.reflection.v1alpha.ServerReflectionResponse) - private: - inline void set_has_file_descriptor_response(); - inline void set_has_all_extension_numbers_response(); - inline void set_has_list_services_response(); - inline void set_has_error_response(); - - inline bool has_message_response() const; - void clear_message_response(); - inline void clear_has_message_response(); - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr valid_host_; - ::grpc::reflection::v1alpha::ServerReflectionRequest* original_request_; - union MessageResponseUnion { - MessageResponseUnion() {} - ::grpc::reflection::v1alpha::FileDescriptorResponse* file_descriptor_response_; - ::grpc::reflection::v1alpha::ExtensionNumberResponse* all_extension_numbers_response_; - ::grpc::reflection::v1alpha::ListServiceResponse* list_services_response_; - ::grpc::reflection::v1alpha::ErrorResponse* error_response_; - } message_response_; - mutable int _cached_size_; - ::google::protobuf::uint32 _oneof_case_[1]; - - friend void protobuf_InitDefaults_reflection_2eproto_impl(); - friend void protobuf_AddDesc_reflection_2eproto_impl(); - friend void protobuf_AssignDesc_reflection_2eproto(); - friend void protobuf_ShutdownFile_reflection_2eproto(); - - void InitAsDefaultInstance(); -}; -extern ::google::protobuf::internal::ExplicitlyConstructed ServerReflectionResponse_default_instance_; - -// ------------------------------------------------------------------- - -class FileDescriptorResponse : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:grpc.reflection.v1alpha.FileDescriptorResponse) */ { - public: - FileDescriptorResponse(); - virtual ~FileDescriptorResponse(); - - FileDescriptorResponse(const FileDescriptorResponse& from); - - inline FileDescriptorResponse& operator=(const FileDescriptorResponse& from) { - CopyFrom(from); - return *this; - } - - static const ::google::protobuf::Descriptor* descriptor(); - static const FileDescriptorResponse& default_instance(); - - static const FileDescriptorResponse* internal_default_instance(); - - void Swap(FileDescriptorResponse* other); - - // implements Message ---------------------------------------------- - - inline FileDescriptorResponse* New() const { return New(NULL); } - - FileDescriptorResponse* New(::google::protobuf::Arena* arena) const; - void CopyFrom(const ::google::protobuf::Message& from); - void MergeFrom(const ::google::protobuf::Message& from); - void CopyFrom(const FileDescriptorResponse& from); - void MergeFrom(const FileDescriptorResponse& from); - void Clear(); - bool IsInitialized() const; - - size_t ByteSizeLong() const; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input); - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* output) const; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const { - return InternalSerializeWithCachedSizesToArray(false, output); - } - int GetCachedSize() const { return _cached_size_; } - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const; - void InternalSwap(FileDescriptorResponse* other); - void UnsafeMergeFrom(const FileDescriptorResponse& from); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return _internal_metadata_.arena(); - } - inline void* MaybeArenaPtr() const { - return _internal_metadata_.raw_arena_ptr(); - } - public: - - ::google::protobuf::Metadata GetMetadata() const; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // repeated bytes file_descriptor_proto = 1; - int file_descriptor_proto_size() const; - void clear_file_descriptor_proto(); - static const int kFileDescriptorProtoFieldNumber = 1; - const ::std::string& file_descriptor_proto(int index) const; - ::std::string* mutable_file_descriptor_proto(int index); - void set_file_descriptor_proto(int index, const ::std::string& value); - void set_file_descriptor_proto(int index, const char* value); - void set_file_descriptor_proto(int index, const void* value, size_t size); - ::std::string* add_file_descriptor_proto(); - void add_file_descriptor_proto(const ::std::string& value); - void add_file_descriptor_proto(const char* value); - void add_file_descriptor_proto(const void* value, size_t size); - const ::google::protobuf::RepeatedPtrField< ::std::string>& file_descriptor_proto() const; - ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_file_descriptor_proto(); - - // @@protoc_insertion_point(class_scope:grpc.reflection.v1alpha.FileDescriptorResponse) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::RepeatedPtrField< ::std::string> file_descriptor_proto_; - mutable int _cached_size_; - friend void protobuf_InitDefaults_reflection_2eproto_impl(); - friend void protobuf_AddDesc_reflection_2eproto_impl(); - friend void protobuf_AssignDesc_reflection_2eproto(); - friend void protobuf_ShutdownFile_reflection_2eproto(); - - void InitAsDefaultInstance(); -}; -extern ::google::protobuf::internal::ExplicitlyConstructed FileDescriptorResponse_default_instance_; - -// ------------------------------------------------------------------- - -class ExtensionNumberResponse : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:grpc.reflection.v1alpha.ExtensionNumberResponse) */ { - public: - ExtensionNumberResponse(); - virtual ~ExtensionNumberResponse(); - - ExtensionNumberResponse(const ExtensionNumberResponse& from); - - inline ExtensionNumberResponse& operator=(const ExtensionNumberResponse& from) { - CopyFrom(from); - return *this; - } - - static const ::google::protobuf::Descriptor* descriptor(); - static const ExtensionNumberResponse& default_instance(); - - static const ExtensionNumberResponse* internal_default_instance(); - - void Swap(ExtensionNumberResponse* other); - - // implements Message ---------------------------------------------- - - inline ExtensionNumberResponse* New() const { return New(NULL); } - - ExtensionNumberResponse* New(::google::protobuf::Arena* arena) const; - void CopyFrom(const ::google::protobuf::Message& from); - void MergeFrom(const ::google::protobuf::Message& from); - void CopyFrom(const ExtensionNumberResponse& from); - void MergeFrom(const ExtensionNumberResponse& from); - void Clear(); - bool IsInitialized() const; - - size_t ByteSizeLong() const; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input); - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* output) const; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const { - return InternalSerializeWithCachedSizesToArray(false, output); - } - int GetCachedSize() const { return _cached_size_; } - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const; - void InternalSwap(ExtensionNumberResponse* other); - void UnsafeMergeFrom(const ExtensionNumberResponse& from); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return _internal_metadata_.arena(); - } - inline void* MaybeArenaPtr() const { - return _internal_metadata_.raw_arena_ptr(); - } - public: - - ::google::protobuf::Metadata GetMetadata() const; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // optional string base_type_name = 1; - void clear_base_type_name(); - static const int kBaseTypeNameFieldNumber = 1; - const ::std::string& base_type_name() const; - void set_base_type_name(const ::std::string& value); - void set_base_type_name(const char* value); - void set_base_type_name(const char* value, size_t size); - ::std::string* mutable_base_type_name(); - ::std::string* release_base_type_name(); - void set_allocated_base_type_name(::std::string* base_type_name); - - // repeated int32 extension_number = 2; - int extension_number_size() const; - void clear_extension_number(); - static const int kExtensionNumberFieldNumber = 2; - ::google::protobuf::int32 extension_number(int index) const; - void set_extension_number(int index, ::google::protobuf::int32 value); - void add_extension_number(::google::protobuf::int32 value); - const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& - extension_number() const; - ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* - mutable_extension_number(); - - // @@protoc_insertion_point(class_scope:grpc.reflection.v1alpha.ExtensionNumberResponse) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::RepeatedField< ::google::protobuf::int32 > extension_number_; - mutable int _extension_number_cached_byte_size_; - ::google::protobuf::internal::ArenaStringPtr base_type_name_; - mutable int _cached_size_; - friend void protobuf_InitDefaults_reflection_2eproto_impl(); - friend void protobuf_AddDesc_reflection_2eproto_impl(); - friend void protobuf_AssignDesc_reflection_2eproto(); - friend void protobuf_ShutdownFile_reflection_2eproto(); - - void InitAsDefaultInstance(); -}; -extern ::google::protobuf::internal::ExplicitlyConstructed ExtensionNumberResponse_default_instance_; - -// ------------------------------------------------------------------- - -class ListServiceResponse : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:grpc.reflection.v1alpha.ListServiceResponse) */ { - public: - ListServiceResponse(); - virtual ~ListServiceResponse(); - - ListServiceResponse(const ListServiceResponse& from); - - inline ListServiceResponse& operator=(const ListServiceResponse& from) { - CopyFrom(from); - return *this; - } - - static const ::google::protobuf::Descriptor* descriptor(); - static const ListServiceResponse& default_instance(); - - static const ListServiceResponse* internal_default_instance(); - - void Swap(ListServiceResponse* other); - - // implements Message ---------------------------------------------- - - inline ListServiceResponse* New() const { return New(NULL); } - - ListServiceResponse* New(::google::protobuf::Arena* arena) const; - void CopyFrom(const ::google::protobuf::Message& from); - void MergeFrom(const ::google::protobuf::Message& from); - void CopyFrom(const ListServiceResponse& from); - void MergeFrom(const ListServiceResponse& from); - void Clear(); - bool IsInitialized() const; - - size_t ByteSizeLong() const; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input); - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* output) const; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const { - return InternalSerializeWithCachedSizesToArray(false, output); - } - int GetCachedSize() const { return _cached_size_; } - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const; - void InternalSwap(ListServiceResponse* other); - void UnsafeMergeFrom(const ListServiceResponse& from); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return _internal_metadata_.arena(); - } - inline void* MaybeArenaPtr() const { - return _internal_metadata_.raw_arena_ptr(); - } - public: - - ::google::protobuf::Metadata GetMetadata() const; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // repeated .grpc.reflection.v1alpha.ServiceResponse service = 1; - int service_size() const; - void clear_service(); - static const int kServiceFieldNumber = 1; - const ::grpc::reflection::v1alpha::ServiceResponse& service(int index) const; - ::grpc::reflection::v1alpha::ServiceResponse* mutable_service(int index); - ::grpc::reflection::v1alpha::ServiceResponse* add_service(); - ::google::protobuf::RepeatedPtrField< ::grpc::reflection::v1alpha::ServiceResponse >* - mutable_service(); - const ::google::protobuf::RepeatedPtrField< ::grpc::reflection::v1alpha::ServiceResponse >& - service() const; - - // @@protoc_insertion_point(class_scope:grpc.reflection.v1alpha.ListServiceResponse) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::RepeatedPtrField< ::grpc::reflection::v1alpha::ServiceResponse > service_; - mutable int _cached_size_; - friend void protobuf_InitDefaults_reflection_2eproto_impl(); - friend void protobuf_AddDesc_reflection_2eproto_impl(); - friend void protobuf_AssignDesc_reflection_2eproto(); - friend void protobuf_ShutdownFile_reflection_2eproto(); - - void InitAsDefaultInstance(); -}; -extern ::google::protobuf::internal::ExplicitlyConstructed ListServiceResponse_default_instance_; - -// ------------------------------------------------------------------- - -class ServiceResponse : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:grpc.reflection.v1alpha.ServiceResponse) */ { - public: - ServiceResponse(); - virtual ~ServiceResponse(); - - ServiceResponse(const ServiceResponse& from); - - inline ServiceResponse& operator=(const ServiceResponse& from) { - CopyFrom(from); - return *this; - } - - static const ::google::protobuf::Descriptor* descriptor(); - static const ServiceResponse& default_instance(); - - static const ServiceResponse* internal_default_instance(); - - void Swap(ServiceResponse* other); - - // implements Message ---------------------------------------------- - - inline ServiceResponse* New() const { return New(NULL); } - - ServiceResponse* New(::google::protobuf::Arena* arena) const; - void CopyFrom(const ::google::protobuf::Message& from); - void MergeFrom(const ::google::protobuf::Message& from); - void CopyFrom(const ServiceResponse& from); - void MergeFrom(const ServiceResponse& from); - void Clear(); - bool IsInitialized() const; - - size_t ByteSizeLong() const; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input); - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* output) const; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const { - return InternalSerializeWithCachedSizesToArray(false, output); - } - int GetCachedSize() const { return _cached_size_; } - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const; - void InternalSwap(ServiceResponse* other); - void UnsafeMergeFrom(const ServiceResponse& from); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return _internal_metadata_.arena(); - } - inline void* MaybeArenaPtr() const { - return _internal_metadata_.raw_arena_ptr(); - } - public: - - ::google::protobuf::Metadata GetMetadata() const; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // optional string name = 1; - void clear_name(); - static const int kNameFieldNumber = 1; - const ::std::string& name() const; - void set_name(const ::std::string& value); - void set_name(const char* value); - void set_name(const char* value, size_t size); - ::std::string* mutable_name(); - ::std::string* release_name(); - void set_allocated_name(::std::string* name); - - // @@protoc_insertion_point(class_scope:grpc.reflection.v1alpha.ServiceResponse) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr name_; - mutable int _cached_size_; - friend void protobuf_InitDefaults_reflection_2eproto_impl(); - friend void protobuf_AddDesc_reflection_2eproto_impl(); - friend void protobuf_AssignDesc_reflection_2eproto(); - friend void protobuf_ShutdownFile_reflection_2eproto(); - - void InitAsDefaultInstance(); -}; -extern ::google::protobuf::internal::ExplicitlyConstructed ServiceResponse_default_instance_; - -// ------------------------------------------------------------------- - -class ErrorResponse : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:grpc.reflection.v1alpha.ErrorResponse) */ { - public: - ErrorResponse(); - virtual ~ErrorResponse(); - - ErrorResponse(const ErrorResponse& from); - - inline ErrorResponse& operator=(const ErrorResponse& from) { - CopyFrom(from); - return *this; - } - - static const ::google::protobuf::Descriptor* descriptor(); - static const ErrorResponse& default_instance(); - - static const ErrorResponse* internal_default_instance(); - - void Swap(ErrorResponse* other); - - // implements Message ---------------------------------------------- - - inline ErrorResponse* New() const { return New(NULL); } - - ErrorResponse* New(::google::protobuf::Arena* arena) const; - void CopyFrom(const ::google::protobuf::Message& from); - void MergeFrom(const ::google::protobuf::Message& from); - void CopyFrom(const ErrorResponse& from); - void MergeFrom(const ErrorResponse& from); - void Clear(); - bool IsInitialized() const; - - size_t ByteSizeLong() const; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input); - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* output) const; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const { - return InternalSerializeWithCachedSizesToArray(false, output); - } - int GetCachedSize() const { return _cached_size_; } - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const; - void InternalSwap(ErrorResponse* other); - void UnsafeMergeFrom(const ErrorResponse& from); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return _internal_metadata_.arena(); - } - inline void* MaybeArenaPtr() const { - return _internal_metadata_.raw_arena_ptr(); - } - public: - - ::google::protobuf::Metadata GetMetadata() const; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // optional int32 error_code = 1; - void clear_error_code(); - static const int kErrorCodeFieldNumber = 1; - ::google::protobuf::int32 error_code() const; - void set_error_code(::google::protobuf::int32 value); - - // optional string error_message = 2; - void clear_error_message(); - static const int kErrorMessageFieldNumber = 2; - const ::std::string& error_message() const; - void set_error_message(const ::std::string& value); - void set_error_message(const char* value); - void set_error_message(const char* value, size_t size); - ::std::string* mutable_error_message(); - ::std::string* release_error_message(); - void set_allocated_error_message(::std::string* error_message); - - // @@protoc_insertion_point(class_scope:grpc.reflection.v1alpha.ErrorResponse) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr error_message_; - ::google::protobuf::int32 error_code_; - mutable int _cached_size_; - friend void protobuf_InitDefaults_reflection_2eproto_impl(); - friend void protobuf_AddDesc_reflection_2eproto_impl(); - friend void protobuf_AssignDesc_reflection_2eproto(); - friend void protobuf_ShutdownFile_reflection_2eproto(); - - void InitAsDefaultInstance(); -}; -extern ::google::protobuf::internal::ExplicitlyConstructed ErrorResponse_default_instance_; - -// =================================================================== - - -// =================================================================== - -#if !PROTOBUF_INLINE_NOT_IN_HEADERS -// ServerReflectionRequest - -// optional string host = 1; -inline void ServerReflectionRequest::clear_host() { - host_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& ServerReflectionRequest::host() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.host) - return host_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ServerReflectionRequest::set_host(const ::std::string& value) { - - host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.host) -} -inline void ServerReflectionRequest::set_host(const char* value) { - - host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.host) -} -inline void ServerReflectionRequest::set_host(const char* value, size_t size) { - - host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.host) -} -inline ::std::string* ServerReflectionRequest::mutable_host() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.host) - return host_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ServerReflectionRequest::release_host() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.host) - - return host_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ServerReflectionRequest::set_allocated_host(::std::string* host) { - if (host != NULL) { - - } else { - - } - host_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), host); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.host) -} - -// optional string file_by_filename = 3; -inline bool ServerReflectionRequest::has_file_by_filename() const { - return message_request_case() == kFileByFilename; -} -inline void ServerReflectionRequest::set_has_file_by_filename() { - _oneof_case_[0] = kFileByFilename; -} -inline void ServerReflectionRequest::clear_file_by_filename() { - if (has_file_by_filename()) { - message_request_.file_by_filename_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_has_message_request(); - } -} -inline const ::std::string& ServerReflectionRequest::file_by_filename() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) - if (has_file_by_filename()) { - return message_request_.file_by_filename_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); -} -inline void ServerReflectionRequest::set_file_by_filename(const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) - if (!has_file_by_filename()) { - clear_message_request(); - set_has_file_by_filename(); - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_by_filename_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) -} -inline void ServerReflectionRequest::set_file_by_filename(const char* value) { - if (!has_file_by_filename()) { - clear_message_request(); - set_has_file_by_filename(); - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_by_filename_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) -} -inline void ServerReflectionRequest::set_file_by_filename(const char* value, size_t size) { - if (!has_file_by_filename()) { - clear_message_request(); - set_has_file_by_filename(); - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_by_filename_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( - reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) -} -inline ::std::string* ServerReflectionRequest::mutable_file_by_filename() { - if (!has_file_by_filename()) { - clear_message_request(); - set_has_file_by_filename(); - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) - return message_request_.file_by_filename_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ServerReflectionRequest::release_file_by_filename() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) - if (has_file_by_filename()) { - clear_has_message_request(); - return message_request_.file_by_filename_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } else { - return NULL; - } -} -inline void ServerReflectionRequest::set_allocated_file_by_filename(::std::string* file_by_filename) { - if (!has_file_by_filename()) { - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - clear_message_request(); - if (file_by_filename != NULL) { - set_has_file_by_filename(); - message_request_.file_by_filename_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - file_by_filename); - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) -} - -// optional string file_containing_symbol = 4; -inline bool ServerReflectionRequest::has_file_containing_symbol() const { - return message_request_case() == kFileContainingSymbol; -} -inline void ServerReflectionRequest::set_has_file_containing_symbol() { - _oneof_case_[0] = kFileContainingSymbol; -} -inline void ServerReflectionRequest::clear_file_containing_symbol() { - if (has_file_containing_symbol()) { - message_request_.file_containing_symbol_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_has_message_request(); - } -} -inline const ::std::string& ServerReflectionRequest::file_containing_symbol() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) - if (has_file_containing_symbol()) { - return message_request_.file_containing_symbol_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); -} -inline void ServerReflectionRequest::set_file_containing_symbol(const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) - if (!has_file_containing_symbol()) { - clear_message_request(); - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_containing_symbol_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) -} -inline void ServerReflectionRequest::set_file_containing_symbol(const char* value) { - if (!has_file_containing_symbol()) { - clear_message_request(); - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_containing_symbol_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) -} -inline void ServerReflectionRequest::set_file_containing_symbol(const char* value, size_t size) { - if (!has_file_containing_symbol()) { - clear_message_request(); - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_containing_symbol_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( - reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) -} -inline ::std::string* ServerReflectionRequest::mutable_file_containing_symbol() { - if (!has_file_containing_symbol()) { - clear_message_request(); - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) - return message_request_.file_containing_symbol_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ServerReflectionRequest::release_file_containing_symbol() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) - if (has_file_containing_symbol()) { - clear_has_message_request(); - return message_request_.file_containing_symbol_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } else { - return NULL; - } -} -inline void ServerReflectionRequest::set_allocated_file_containing_symbol(::std::string* file_containing_symbol) { - if (!has_file_containing_symbol()) { - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - clear_message_request(); - if (file_containing_symbol != NULL) { - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - file_containing_symbol); - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) -} - -// optional .grpc.reflection.v1alpha.ExtensionRequest file_containing_extension = 5; -inline bool ServerReflectionRequest::has_file_containing_extension() const { - return message_request_case() == kFileContainingExtension; -} -inline void ServerReflectionRequest::set_has_file_containing_extension() { - _oneof_case_[0] = kFileContainingExtension; -} -inline void ServerReflectionRequest::clear_file_containing_extension() { - if (has_file_containing_extension()) { - delete message_request_.file_containing_extension_; - clear_has_message_request(); - } -} -inline const ::grpc::reflection::v1alpha::ExtensionRequest& ServerReflectionRequest::file_containing_extension() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_extension) - return has_file_containing_extension() - ? *message_request_.file_containing_extension_ - : ::grpc::reflection::v1alpha::ExtensionRequest::default_instance(); -} -inline ::grpc::reflection::v1alpha::ExtensionRequest* ServerReflectionRequest::mutable_file_containing_extension() { - if (!has_file_containing_extension()) { - clear_message_request(); - set_has_file_containing_extension(); - message_request_.file_containing_extension_ = new ::grpc::reflection::v1alpha::ExtensionRequest; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_extension) - return message_request_.file_containing_extension_; -} -inline ::grpc::reflection::v1alpha::ExtensionRequest* ServerReflectionRequest::release_file_containing_extension() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_extension) - if (has_file_containing_extension()) { - clear_has_message_request(); - ::grpc::reflection::v1alpha::ExtensionRequest* temp = message_request_.file_containing_extension_; - message_request_.file_containing_extension_ = NULL; - return temp; - } else { - return NULL; - } -} -inline void ServerReflectionRequest::set_allocated_file_containing_extension(::grpc::reflection::v1alpha::ExtensionRequest* file_containing_extension) { - clear_message_request(); - if (file_containing_extension) { - set_has_file_containing_extension(); - message_request_.file_containing_extension_ = file_containing_extension; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_extension) -} - -// optional string all_extension_numbers_of_type = 6; -inline bool ServerReflectionRequest::has_all_extension_numbers_of_type() const { - return message_request_case() == kAllExtensionNumbersOfType; -} -inline void ServerReflectionRequest::set_has_all_extension_numbers_of_type() { - _oneof_case_[0] = kAllExtensionNumbersOfType; -} -inline void ServerReflectionRequest::clear_all_extension_numbers_of_type() { - if (has_all_extension_numbers_of_type()) { - message_request_.all_extension_numbers_of_type_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_has_message_request(); - } -} -inline const ::std::string& ServerReflectionRequest::all_extension_numbers_of_type() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) - if (has_all_extension_numbers_of_type()) { - return message_request_.all_extension_numbers_of_type_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); -} -inline void ServerReflectionRequest::set_all_extension_numbers_of_type(const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) - if (!has_all_extension_numbers_of_type()) { - clear_message_request(); - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.all_extension_numbers_of_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) -} -inline void ServerReflectionRequest::set_all_extension_numbers_of_type(const char* value) { - if (!has_all_extension_numbers_of_type()) { - clear_message_request(); - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.all_extension_numbers_of_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) -} -inline void ServerReflectionRequest::set_all_extension_numbers_of_type(const char* value, size_t size) { - if (!has_all_extension_numbers_of_type()) { - clear_message_request(); - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.all_extension_numbers_of_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( - reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) -} -inline ::std::string* ServerReflectionRequest::mutable_all_extension_numbers_of_type() { - if (!has_all_extension_numbers_of_type()) { - clear_message_request(); - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) - return message_request_.all_extension_numbers_of_type_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ServerReflectionRequest::release_all_extension_numbers_of_type() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) - if (has_all_extension_numbers_of_type()) { - clear_has_message_request(); - return message_request_.all_extension_numbers_of_type_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } else { - return NULL; - } -} -inline void ServerReflectionRequest::set_allocated_all_extension_numbers_of_type(::std::string* all_extension_numbers_of_type) { - if (!has_all_extension_numbers_of_type()) { - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - clear_message_request(); - if (all_extension_numbers_of_type != NULL) { - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - all_extension_numbers_of_type); - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) -} - -// optional string list_services = 7; -inline bool ServerReflectionRequest::has_list_services() const { - return message_request_case() == kListServices; -} -inline void ServerReflectionRequest::set_has_list_services() { - _oneof_case_[0] = kListServices; -} -inline void ServerReflectionRequest::clear_list_services() { - if (has_list_services()) { - message_request_.list_services_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_has_message_request(); - } -} -inline const ::std::string& ServerReflectionRequest::list_services() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) - if (has_list_services()) { - return message_request_.list_services_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); -} -inline void ServerReflectionRequest::set_list_services(const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) - if (!has_list_services()) { - clear_message_request(); - set_has_list_services(); - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.list_services_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) -} -inline void ServerReflectionRequest::set_list_services(const char* value) { - if (!has_list_services()) { - clear_message_request(); - set_has_list_services(); - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.list_services_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) -} -inline void ServerReflectionRequest::set_list_services(const char* value, size_t size) { - if (!has_list_services()) { - clear_message_request(); - set_has_list_services(); - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.list_services_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( - reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) -} -inline ::std::string* ServerReflectionRequest::mutable_list_services() { - if (!has_list_services()) { - clear_message_request(); - set_has_list_services(); - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) - return message_request_.list_services_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ServerReflectionRequest::release_list_services() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) - if (has_list_services()) { - clear_has_message_request(); - return message_request_.list_services_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } else { - return NULL; - } -} -inline void ServerReflectionRequest::set_allocated_list_services(::std::string* list_services) { - if (!has_list_services()) { - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - clear_message_request(); - if (list_services != NULL) { - set_has_list_services(); - message_request_.list_services_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - list_services); - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) -} - -inline bool ServerReflectionRequest::has_message_request() const { - return message_request_case() != MESSAGE_REQUEST_NOT_SET; -} -inline void ServerReflectionRequest::clear_has_message_request() { - _oneof_case_[0] = MESSAGE_REQUEST_NOT_SET; -} -inline ServerReflectionRequest::MessageRequestCase ServerReflectionRequest::message_request_case() const { - return ServerReflectionRequest::MessageRequestCase(_oneof_case_[0]); -} -inline const ServerReflectionRequest* ServerReflectionRequest::internal_default_instance() { - return &ServerReflectionRequest_default_instance_.get(); -} -// ------------------------------------------------------------------- - -// ExtensionRequest - -// optional string containing_type = 1; -inline void ExtensionRequest::clear_containing_type() { - containing_type_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& ExtensionRequest::containing_type() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ExtensionRequest.containing_type) - return containing_type_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ExtensionRequest::set_containing_type(const ::std::string& value) { - - containing_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ExtensionRequest.containing_type) -} -inline void ExtensionRequest::set_containing_type(const char* value) { - - containing_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ExtensionRequest.containing_type) -} -inline void ExtensionRequest::set_containing_type(const char* value, size_t size) { - - containing_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ExtensionRequest.containing_type) -} -inline ::std::string* ExtensionRequest::mutable_containing_type() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ExtensionRequest.containing_type) - return containing_type_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ExtensionRequest::release_containing_type() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ExtensionRequest.containing_type) - - return containing_type_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ExtensionRequest::set_allocated_containing_type(::std::string* containing_type) { - if (containing_type != NULL) { - - } else { - - } - containing_type_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), containing_type); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ExtensionRequest.containing_type) -} - -// optional int32 extension_number = 2; -inline void ExtensionRequest::clear_extension_number() { - extension_number_ = 0; -} -inline ::google::protobuf::int32 ExtensionRequest::extension_number() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ExtensionRequest.extension_number) - return extension_number_; -} -inline void ExtensionRequest::set_extension_number(::google::protobuf::int32 value) { - - extension_number_ = value; - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ExtensionRequest.extension_number) -} - -inline const ExtensionRequest* ExtensionRequest::internal_default_instance() { - return &ExtensionRequest_default_instance_.get(); -} -// ------------------------------------------------------------------- - -// ServerReflectionResponse - -// optional string valid_host = 1; -inline void ServerReflectionResponse::clear_valid_host() { - valid_host_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& ServerReflectionResponse::valid_host() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) - return valid_host_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ServerReflectionResponse::set_valid_host(const ::std::string& value) { - - valid_host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) -} -inline void ServerReflectionResponse::set_valid_host(const char* value) { - - valid_host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) -} -inline void ServerReflectionResponse::set_valid_host(const char* value, size_t size) { - - valid_host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) -} -inline ::std::string* ServerReflectionResponse::mutable_valid_host() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) - return valid_host_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ServerReflectionResponse::release_valid_host() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) - - return valid_host_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ServerReflectionResponse::set_allocated_valid_host(::std::string* valid_host) { - if (valid_host != NULL) { - - } else { - - } - valid_host_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), valid_host); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) -} - -// optional .grpc.reflection.v1alpha.ServerReflectionRequest original_request = 2; -inline bool ServerReflectionResponse::has_original_request() const { - return this != internal_default_instance() && original_request_ != NULL; -} -inline void ServerReflectionResponse::clear_original_request() { - if (GetArenaNoVirtual() == NULL && original_request_ != NULL) delete original_request_; - original_request_ = NULL; -} -inline const ::grpc::reflection::v1alpha::ServerReflectionRequest& ServerReflectionResponse::original_request() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.original_request) - return original_request_ != NULL ? *original_request_ - : *::grpc::reflection::v1alpha::ServerReflectionRequest::internal_default_instance(); -} -inline ::grpc::reflection::v1alpha::ServerReflectionRequest* ServerReflectionResponse::mutable_original_request() { - - if (original_request_ == NULL) { - original_request_ = new ::grpc::reflection::v1alpha::ServerReflectionRequest; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.original_request) - return original_request_; -} -inline ::grpc::reflection::v1alpha::ServerReflectionRequest* ServerReflectionResponse::release_original_request() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.original_request) - - ::grpc::reflection::v1alpha::ServerReflectionRequest* temp = original_request_; - original_request_ = NULL; - return temp; -} -inline void ServerReflectionResponse::set_allocated_original_request(::grpc::reflection::v1alpha::ServerReflectionRequest* original_request) { - delete original_request_; - original_request_ = original_request; - if (original_request) { - - } else { - - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.original_request) -} - -// optional .grpc.reflection.v1alpha.FileDescriptorResponse file_descriptor_response = 4; -inline bool ServerReflectionResponse::has_file_descriptor_response() const { - return message_response_case() == kFileDescriptorResponse; -} -inline void ServerReflectionResponse::set_has_file_descriptor_response() { - _oneof_case_[0] = kFileDescriptorResponse; -} -inline void ServerReflectionResponse::clear_file_descriptor_response() { - if (has_file_descriptor_response()) { - delete message_response_.file_descriptor_response_; - clear_has_message_response(); - } -} -inline const ::grpc::reflection::v1alpha::FileDescriptorResponse& ServerReflectionResponse::file_descriptor_response() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.file_descriptor_response) - return has_file_descriptor_response() - ? *message_response_.file_descriptor_response_ - : ::grpc::reflection::v1alpha::FileDescriptorResponse::default_instance(); -} -inline ::grpc::reflection::v1alpha::FileDescriptorResponse* ServerReflectionResponse::mutable_file_descriptor_response() { - if (!has_file_descriptor_response()) { - clear_message_response(); - set_has_file_descriptor_response(); - message_response_.file_descriptor_response_ = new ::grpc::reflection::v1alpha::FileDescriptorResponse; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.file_descriptor_response) - return message_response_.file_descriptor_response_; -} -inline ::grpc::reflection::v1alpha::FileDescriptorResponse* ServerReflectionResponse::release_file_descriptor_response() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.file_descriptor_response) - if (has_file_descriptor_response()) { - clear_has_message_response(); - ::grpc::reflection::v1alpha::FileDescriptorResponse* temp = message_response_.file_descriptor_response_; - message_response_.file_descriptor_response_ = NULL; - return temp; - } else { - return NULL; - } -} -inline void ServerReflectionResponse::set_allocated_file_descriptor_response(::grpc::reflection::v1alpha::FileDescriptorResponse* file_descriptor_response) { - clear_message_response(); - if (file_descriptor_response) { - set_has_file_descriptor_response(); - message_response_.file_descriptor_response_ = file_descriptor_response; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.file_descriptor_response) -} - -// optional .grpc.reflection.v1alpha.ExtensionNumberResponse all_extension_numbers_response = 5; -inline bool ServerReflectionResponse::has_all_extension_numbers_response() const { - return message_response_case() == kAllExtensionNumbersResponse; -} -inline void ServerReflectionResponse::set_has_all_extension_numbers_response() { - _oneof_case_[0] = kAllExtensionNumbersResponse; -} -inline void ServerReflectionResponse::clear_all_extension_numbers_response() { - if (has_all_extension_numbers_response()) { - delete message_response_.all_extension_numbers_response_; - clear_has_message_response(); - } -} -inline const ::grpc::reflection::v1alpha::ExtensionNumberResponse& ServerReflectionResponse::all_extension_numbers_response() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.all_extension_numbers_response) - return has_all_extension_numbers_response() - ? *message_response_.all_extension_numbers_response_ - : ::grpc::reflection::v1alpha::ExtensionNumberResponse::default_instance(); -} -inline ::grpc::reflection::v1alpha::ExtensionNumberResponse* ServerReflectionResponse::mutable_all_extension_numbers_response() { - if (!has_all_extension_numbers_response()) { - clear_message_response(); - set_has_all_extension_numbers_response(); - message_response_.all_extension_numbers_response_ = new ::grpc::reflection::v1alpha::ExtensionNumberResponse; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.all_extension_numbers_response) - return message_response_.all_extension_numbers_response_; -} -inline ::grpc::reflection::v1alpha::ExtensionNumberResponse* ServerReflectionResponse::release_all_extension_numbers_response() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.all_extension_numbers_response) - if (has_all_extension_numbers_response()) { - clear_has_message_response(); - ::grpc::reflection::v1alpha::ExtensionNumberResponse* temp = message_response_.all_extension_numbers_response_; - message_response_.all_extension_numbers_response_ = NULL; - return temp; - } else { - return NULL; - } -} -inline void ServerReflectionResponse::set_allocated_all_extension_numbers_response(::grpc::reflection::v1alpha::ExtensionNumberResponse* all_extension_numbers_response) { - clear_message_response(); - if (all_extension_numbers_response) { - set_has_all_extension_numbers_response(); - message_response_.all_extension_numbers_response_ = all_extension_numbers_response; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.all_extension_numbers_response) -} - -// optional .grpc.reflection.v1alpha.ListServiceResponse list_services_response = 6; -inline bool ServerReflectionResponse::has_list_services_response() const { - return message_response_case() == kListServicesResponse; -} -inline void ServerReflectionResponse::set_has_list_services_response() { - _oneof_case_[0] = kListServicesResponse; -} -inline void ServerReflectionResponse::clear_list_services_response() { - if (has_list_services_response()) { - delete message_response_.list_services_response_; - clear_has_message_response(); - } -} -inline const ::grpc::reflection::v1alpha::ListServiceResponse& ServerReflectionResponse::list_services_response() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.list_services_response) - return has_list_services_response() - ? *message_response_.list_services_response_ - : ::grpc::reflection::v1alpha::ListServiceResponse::default_instance(); -} -inline ::grpc::reflection::v1alpha::ListServiceResponse* ServerReflectionResponse::mutable_list_services_response() { - if (!has_list_services_response()) { - clear_message_response(); - set_has_list_services_response(); - message_response_.list_services_response_ = new ::grpc::reflection::v1alpha::ListServiceResponse; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.list_services_response) - return message_response_.list_services_response_; -} -inline ::grpc::reflection::v1alpha::ListServiceResponse* ServerReflectionResponse::release_list_services_response() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.list_services_response) - if (has_list_services_response()) { - clear_has_message_response(); - ::grpc::reflection::v1alpha::ListServiceResponse* temp = message_response_.list_services_response_; - message_response_.list_services_response_ = NULL; - return temp; - } else { - return NULL; - } -} -inline void ServerReflectionResponse::set_allocated_list_services_response(::grpc::reflection::v1alpha::ListServiceResponse* list_services_response) { - clear_message_response(); - if (list_services_response) { - set_has_list_services_response(); - message_response_.list_services_response_ = list_services_response; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.list_services_response) -} - -// optional .grpc.reflection.v1alpha.ErrorResponse error_response = 7; -inline bool ServerReflectionResponse::has_error_response() const { - return message_response_case() == kErrorResponse; -} -inline void ServerReflectionResponse::set_has_error_response() { - _oneof_case_[0] = kErrorResponse; -} -inline void ServerReflectionResponse::clear_error_response() { - if (has_error_response()) { - delete message_response_.error_response_; - clear_has_message_response(); - } -} -inline const ::grpc::reflection::v1alpha::ErrorResponse& ServerReflectionResponse::error_response() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.error_response) - return has_error_response() - ? *message_response_.error_response_ - : ::grpc::reflection::v1alpha::ErrorResponse::default_instance(); -} -inline ::grpc::reflection::v1alpha::ErrorResponse* ServerReflectionResponse::mutable_error_response() { - if (!has_error_response()) { - clear_message_response(); - set_has_error_response(); - message_response_.error_response_ = new ::grpc::reflection::v1alpha::ErrorResponse; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.error_response) - return message_response_.error_response_; -} -inline ::grpc::reflection::v1alpha::ErrorResponse* ServerReflectionResponse::release_error_response() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.error_response) - if (has_error_response()) { - clear_has_message_response(); - ::grpc::reflection::v1alpha::ErrorResponse* temp = message_response_.error_response_; - message_response_.error_response_ = NULL; - return temp; - } else { - return NULL; - } -} -inline void ServerReflectionResponse::set_allocated_error_response(::grpc::reflection::v1alpha::ErrorResponse* error_response) { - clear_message_response(); - if (error_response) { - set_has_error_response(); - message_response_.error_response_ = error_response; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.error_response) -} - -inline bool ServerReflectionResponse::has_message_response() const { - return message_response_case() != MESSAGE_RESPONSE_NOT_SET; -} -inline void ServerReflectionResponse::clear_has_message_response() { - _oneof_case_[0] = MESSAGE_RESPONSE_NOT_SET; -} -inline ServerReflectionResponse::MessageResponseCase ServerReflectionResponse::message_response_case() const { - return ServerReflectionResponse::MessageResponseCase(_oneof_case_[0]); -} -inline const ServerReflectionResponse* ServerReflectionResponse::internal_default_instance() { - return &ServerReflectionResponse_default_instance_.get(); -} -// ------------------------------------------------------------------- - -// FileDescriptorResponse - -// repeated bytes file_descriptor_proto = 1; -inline int FileDescriptorResponse::file_descriptor_proto_size() const { - return file_descriptor_proto_.size(); -} -inline void FileDescriptorResponse::clear_file_descriptor_proto() { - file_descriptor_proto_.Clear(); -} -inline const ::std::string& FileDescriptorResponse::file_descriptor_proto(int index) const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return file_descriptor_proto_.Get(index); -} -inline ::std::string* FileDescriptorResponse::mutable_file_descriptor_proto(int index) { - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return file_descriptor_proto_.Mutable(index); -} -inline void FileDescriptorResponse::set_file_descriptor_proto(int index, const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - file_descriptor_proto_.Mutable(index)->assign(value); -} -inline void FileDescriptorResponse::set_file_descriptor_proto(int index, const char* value) { - file_descriptor_proto_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -inline void FileDescriptorResponse::set_file_descriptor_proto(int index, const void* value, size_t size) { - file_descriptor_proto_.Mutable(index)->assign( - reinterpret_cast(value), size); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -inline ::std::string* FileDescriptorResponse::add_file_descriptor_proto() { - // @@protoc_insertion_point(field_add_mutable:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return file_descriptor_proto_.Add(); -} -inline void FileDescriptorResponse::add_file_descriptor_proto(const ::std::string& value) { - file_descriptor_proto_.Add()->assign(value); - // @@protoc_insertion_point(field_add:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -inline void FileDescriptorResponse::add_file_descriptor_proto(const char* value) { - file_descriptor_proto_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -inline void FileDescriptorResponse::add_file_descriptor_proto(const void* value, size_t size) { - file_descriptor_proto_.Add()->assign(reinterpret_cast(value), size); - // @@protoc_insertion_point(field_add_pointer:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -inline const ::google::protobuf::RepeatedPtrField< ::std::string>& -FileDescriptorResponse::file_descriptor_proto() const { - // @@protoc_insertion_point(field_list:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return file_descriptor_proto_; -} -inline ::google::protobuf::RepeatedPtrField< ::std::string>* -FileDescriptorResponse::mutable_file_descriptor_proto() { - // @@protoc_insertion_point(field_mutable_list:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return &file_descriptor_proto_; -} - -inline const FileDescriptorResponse* FileDescriptorResponse::internal_default_instance() { - return &FileDescriptorResponse_default_instance_.get(); -} -// ------------------------------------------------------------------- - -// ExtensionNumberResponse - -// optional string base_type_name = 1; -inline void ExtensionNumberResponse::clear_base_type_name() { - base_type_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& ExtensionNumberResponse::base_type_name() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) - return base_type_name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ExtensionNumberResponse::set_base_type_name(const ::std::string& value) { - - base_type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) -} -inline void ExtensionNumberResponse::set_base_type_name(const char* value) { - - base_type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) -} -inline void ExtensionNumberResponse::set_base_type_name(const char* value, size_t size) { - - base_type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) -} -inline ::std::string* ExtensionNumberResponse::mutable_base_type_name() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) - return base_type_name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ExtensionNumberResponse::release_base_type_name() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) - - return base_type_name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ExtensionNumberResponse::set_allocated_base_type_name(::std::string* base_type_name) { - if (base_type_name != NULL) { - - } else { - - } - base_type_name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), base_type_name); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) -} - -// repeated int32 extension_number = 2; -inline int ExtensionNumberResponse::extension_number_size() const { - return extension_number_.size(); -} -inline void ExtensionNumberResponse::clear_extension_number() { - extension_number_.Clear(); -} -inline ::google::protobuf::int32 ExtensionNumberResponse::extension_number(int index) const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) - return extension_number_.Get(index); -} -inline void ExtensionNumberResponse::set_extension_number(int index, ::google::protobuf::int32 value) { - extension_number_.Set(index, value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) -} -inline void ExtensionNumberResponse::add_extension_number(::google::protobuf::int32 value) { - extension_number_.Add(value); - // @@protoc_insertion_point(field_add:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) -} -inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& -ExtensionNumberResponse::extension_number() const { - // @@protoc_insertion_point(field_list:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) - return extension_number_; -} -inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* -ExtensionNumberResponse::mutable_extension_number() { - // @@protoc_insertion_point(field_mutable_list:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) - return &extension_number_; -} - -inline const ExtensionNumberResponse* ExtensionNumberResponse::internal_default_instance() { - return &ExtensionNumberResponse_default_instance_.get(); -} -// ------------------------------------------------------------------- - -// ListServiceResponse - -// repeated .grpc.reflection.v1alpha.ServiceResponse service = 1; -inline int ListServiceResponse::service_size() const { - return service_.size(); -} -inline void ListServiceResponse::clear_service() { - service_.Clear(); -} -inline const ::grpc::reflection::v1alpha::ServiceResponse& ListServiceResponse::service(int index) const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ListServiceResponse.service) - return service_.Get(index); -} -inline ::grpc::reflection::v1alpha::ServiceResponse* ListServiceResponse::mutable_service(int index) { - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ListServiceResponse.service) - return service_.Mutable(index); -} -inline ::grpc::reflection::v1alpha::ServiceResponse* ListServiceResponse::add_service() { - // @@protoc_insertion_point(field_add:grpc.reflection.v1alpha.ListServiceResponse.service) - return service_.Add(); -} -inline ::google::protobuf::RepeatedPtrField< ::grpc::reflection::v1alpha::ServiceResponse >* -ListServiceResponse::mutable_service() { - // @@protoc_insertion_point(field_mutable_list:grpc.reflection.v1alpha.ListServiceResponse.service) - return &service_; -} -inline const ::google::protobuf::RepeatedPtrField< ::grpc::reflection::v1alpha::ServiceResponse >& -ListServiceResponse::service() const { - // @@protoc_insertion_point(field_list:grpc.reflection.v1alpha.ListServiceResponse.service) - return service_; -} - -inline const ListServiceResponse* ListServiceResponse::internal_default_instance() { - return &ListServiceResponse_default_instance_.get(); -} -// ------------------------------------------------------------------- - -// ServiceResponse - -// optional string name = 1; -inline void ServiceResponse::clear_name() { - name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& ServiceResponse::name() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServiceResponse.name) - return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ServiceResponse::set_name(const ::std::string& value) { - - name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServiceResponse.name) -} -inline void ServiceResponse::set_name(const char* value) { - - name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServiceResponse.name) -} -inline void ServiceResponse::set_name(const char* value, size_t size) { - - name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServiceResponse.name) -} -inline ::std::string* ServiceResponse::mutable_name() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServiceResponse.name) - return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ServiceResponse::release_name() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServiceResponse.name) - - return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ServiceResponse::set_allocated_name(::std::string* name) { - if (name != NULL) { - - } else { - - } - name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServiceResponse.name) -} - -inline const ServiceResponse* ServiceResponse::internal_default_instance() { - return &ServiceResponse_default_instance_.get(); -} -// ------------------------------------------------------------------- - -// ErrorResponse - -// optional int32 error_code = 1; -inline void ErrorResponse::clear_error_code() { - error_code_ = 0; -} -inline ::google::protobuf::int32 ErrorResponse::error_code() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ErrorResponse.error_code) - return error_code_; -} -inline void ErrorResponse::set_error_code(::google::protobuf::int32 value) { - - error_code_ = value; - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ErrorResponse.error_code) -} - -// optional string error_message = 2; -inline void ErrorResponse::clear_error_message() { - error_message_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& ErrorResponse::error_message() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ErrorResponse.error_message) - return error_message_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ErrorResponse::set_error_message(const ::std::string& value) { - - error_message_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ErrorResponse.error_message) -} -inline void ErrorResponse::set_error_message(const char* value) { - - error_message_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ErrorResponse.error_message) -} -inline void ErrorResponse::set_error_message(const char* value, size_t size) { - - error_message_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ErrorResponse.error_message) -} -inline ::std::string* ErrorResponse::mutable_error_message() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ErrorResponse.error_message) - return error_message_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* ErrorResponse::release_error_message() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ErrorResponse.error_message) - - return error_message_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void ErrorResponse::set_allocated_error_message(::std::string* error_message) { - if (error_message != NULL) { - - } else { - - } - error_message_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), error_message); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ErrorResponse.error_message) -} - -inline const ErrorResponse* ErrorResponse::internal_default_instance() { - return &ErrorResponse_default_instance_.get(); -} -#endif // !PROTOBUF_INLINE_NOT_IN_HEADERS -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - -} // namespace v1alpha -} // namespace reflection -} // namespace grpc - -// @@protoc_insertion_point(global_scope) - -#endif // PROTOBUF_reflection_2eproto__INCLUDED diff --git a/src/cpp/ext/proto_server_reflection.h b/src/cpp/ext/proto_server_reflection.h index f66f3c2c9ae..c9fa643d66c 100644 --- a/src/cpp/ext/proto_server_reflection.h +++ b/src/cpp/ext/proto_server_reflection.h @@ -31,30 +31,13 @@ * */ -/* - - If the generated header `grpc++/ext/reflection.grpc.pb.h` needs to be - installed, target `grpc++_reflection` in `build.yaml` should use the - filegroup `grpc++_reflection_proto`, and GRPC_NO_GENERATED_CODE should not - be defined. - - If the server reflection library needs to generate `reflection.grpc.pb.h` - from `reflection.proto` at compile time, the generated header - `grpc++/ext/reflection.grpc.pb.h` should not be installed. In this case, - target `grpc++_reflection` should depend on `grpc++_reflection_codegen`, and - GRPC_NO_GENERATED_CODE should be defined. -*/ - #ifndef GRPC_INTERNAL_CPP_EXT_PROTO_SERVER_REFLECTION_H #define GRPC_INTERNAL_CPP_EXT_PROTO_SERVER_REFLECTION_H #include #include -// GRPC_NO_GENERATED_CODE indicates generated pb files should not be used -#ifdef GRPC_NO_GENERATED_CODE #include "src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h" -#else -#include -#endif // GRPC_NO_GENERATED_CODE #include namespace grpc { diff --git a/src/cpp/ext/reflection.grpc.pb.cc b/src/cpp/ext/reflection.grpc.pb.cc deleted file mode 100644 index 8139c8ea162..00000000000 --- a/src/cpp/ext/reflection.grpc.pb.cc +++ /dev/null @@ -1,97 +0,0 @@ -/* - * - * Copyright 2015, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -// Generated by tools/codegen/extensions/gen_reflection_proto.sh -// If you make any local change, they will be lost. -// source: reflection.proto - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -namespace grpc { -namespace reflection { -namespace v1alpha { - -static const char* ServerReflection_method_names[] = { - "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo", -}; - -std::unique_ptr< ServerReflection::Stub> ServerReflection::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { - std::unique_ptr< ServerReflection::Stub> stub(new ServerReflection::Stub(channel)); - return stub; -} - -ServerReflection::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel) - : channel_(channel), rpcmethod_ServerReflectionInfo_(ServerReflection_method_names[0], ::grpc::RpcMethod::BIDI_STREAMING, channel) - {} - -::grpc::ClientReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>* ServerReflection::Stub::ServerReflectionInfoRaw(::grpc::ClientContext* context) { - return new ::grpc::ClientReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>(channel_.get(), rpcmethod_ServerReflectionInfo_, context); -} - -::grpc::ClientAsyncReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>* ServerReflection::Stub::AsyncServerReflectionInfoRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) { - return new ::grpc::ClientAsyncReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>(channel_.get(), cq, rpcmethod_ServerReflectionInfo_, context, tag); -} - -ServerReflection::Service::Service() { - (void)ServerReflection_method_names; - AddMethod(new ::grpc::RpcServiceMethod( - ServerReflection_method_names[0], - ::grpc::RpcMethod::BIDI_STREAMING, - new ::grpc::BidiStreamingHandler< ServerReflection::Service, ::grpc::reflection::v1alpha::ServerReflectionRequest, ::grpc::reflection::v1alpha::ServerReflectionResponse>( - std::mem_fn(&ServerReflection::Service::ServerReflectionInfo), this))); -} - -ServerReflection::Service::~Service() { -} - -::grpc::Status ServerReflection::Service::ServerReflectionInfo(::grpc::ServerContext* context, ::grpc::ServerReaderWriter< ::grpc::reflection::v1alpha::ServerReflectionResponse, ::grpc::reflection::v1alpha::ServerReflectionRequest>* stream) { - (void) context; - (void) stream; - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); -} - - -} // namespace grpc -} // namespace reflection -} // namespace v1alpha - diff --git a/src/cpp/ext/reflection.pb.cc b/src/cpp/ext/reflection.pb.cc deleted file mode 100644 index d75503b3ce1..00000000000 --- a/src/cpp/ext/reflection.pb.cc +++ /dev/null @@ -1,4045 +0,0 @@ -/* - * - * Copyright 2015, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -// Generated by tools/codegen/extensions/gen_reflection_proto.sh -// source: reflection.proto - -#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -// @@protoc_insertion_point(includes) - -namespace grpc { -namespace reflection { -namespace v1alpha { - -namespace { - -const ::google::protobuf::Descriptor* ServerReflectionRequest_descriptor_ = NULL; -const ::google::protobuf::internal::GeneratedMessageReflection* - ServerReflectionRequest_reflection_ = NULL; -struct ServerReflectionRequestOneofInstance { - ::google::protobuf::internal::ArenaStringPtr file_by_filename_; - ::google::protobuf::internal::ArenaStringPtr file_containing_symbol_; - const ::grpc::reflection::v1alpha::ExtensionRequest* file_containing_extension_; - ::google::protobuf::internal::ArenaStringPtr all_extension_numbers_of_type_; - ::google::protobuf::internal::ArenaStringPtr list_services_; -}* ServerReflectionRequest_default_oneof_instance_ = NULL; -const ::google::protobuf::Descriptor* ExtensionRequest_descriptor_ = NULL; -const ::google::protobuf::internal::GeneratedMessageReflection* - ExtensionRequest_reflection_ = NULL; -const ::google::protobuf::Descriptor* ServerReflectionResponse_descriptor_ = NULL; -const ::google::protobuf::internal::GeneratedMessageReflection* - ServerReflectionResponse_reflection_ = NULL; -struct ServerReflectionResponseOneofInstance { - const ::grpc::reflection::v1alpha::FileDescriptorResponse* file_descriptor_response_; - const ::grpc::reflection::v1alpha::ExtensionNumberResponse* all_extension_numbers_response_; - const ::grpc::reflection::v1alpha::ListServiceResponse* list_services_response_; - const ::grpc::reflection::v1alpha::ErrorResponse* error_response_; -}* ServerReflectionResponse_default_oneof_instance_ = NULL; -const ::google::protobuf::Descriptor* FileDescriptorResponse_descriptor_ = NULL; -const ::google::protobuf::internal::GeneratedMessageReflection* - FileDescriptorResponse_reflection_ = NULL; -const ::google::protobuf::Descriptor* ExtensionNumberResponse_descriptor_ = NULL; -const ::google::protobuf::internal::GeneratedMessageReflection* - ExtensionNumberResponse_reflection_ = NULL; -const ::google::protobuf::Descriptor* ListServiceResponse_descriptor_ = NULL; -const ::google::protobuf::internal::GeneratedMessageReflection* - ListServiceResponse_reflection_ = NULL; -const ::google::protobuf::Descriptor* ServiceResponse_descriptor_ = NULL; -const ::google::protobuf::internal::GeneratedMessageReflection* - ServiceResponse_reflection_ = NULL; -const ::google::protobuf::Descriptor* ErrorResponse_descriptor_ = NULL; -const ::google::protobuf::internal::GeneratedMessageReflection* - ErrorResponse_reflection_ = NULL; - -} // namespace - - -void protobuf_AssignDesc_reflection_2eproto() GOOGLE_ATTRIBUTE_COLD; -void protobuf_AssignDesc_reflection_2eproto() { - protobuf_AddDesc_reflection_2eproto(); - const ::google::protobuf::FileDescriptor* file = - ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName( - "reflection.proto"); - GOOGLE_CHECK(file != NULL); - ServerReflectionRequest_descriptor_ = file->message_type(0); - static const int ServerReflectionRequest_offsets_[7] = { - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServerReflectionRequest, host_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ServerReflectionRequest_default_oneof_instance_, file_by_filename_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ServerReflectionRequest_default_oneof_instance_, file_containing_symbol_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ServerReflectionRequest_default_oneof_instance_, file_containing_extension_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ServerReflectionRequest_default_oneof_instance_, all_extension_numbers_of_type_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ServerReflectionRequest_default_oneof_instance_, list_services_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServerReflectionRequest, message_request_), - }; - ServerReflectionRequest_reflection_ = - ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection( - ServerReflectionRequest_descriptor_, - ServerReflectionRequest::internal_default_instance(), - ServerReflectionRequest_offsets_, - -1, - -1, - -1, - ServerReflectionRequest_default_oneof_instance_, - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServerReflectionRequest, _oneof_case_[0]), - sizeof(ServerReflectionRequest), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServerReflectionRequest, _internal_metadata_)); - ExtensionRequest_descriptor_ = file->message_type(1); - static const int ExtensionRequest_offsets_[2] = { - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExtensionRequest, containing_type_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExtensionRequest, extension_number_), - }; - ExtensionRequest_reflection_ = - ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection( - ExtensionRequest_descriptor_, - ExtensionRequest::internal_default_instance(), - ExtensionRequest_offsets_, - -1, - -1, - -1, - sizeof(ExtensionRequest), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExtensionRequest, _internal_metadata_)); - ServerReflectionResponse_descriptor_ = file->message_type(2); - static const int ServerReflectionResponse_offsets_[7] = { - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServerReflectionResponse, valid_host_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServerReflectionResponse, original_request_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ServerReflectionResponse_default_oneof_instance_, file_descriptor_response_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ServerReflectionResponse_default_oneof_instance_, all_extension_numbers_response_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ServerReflectionResponse_default_oneof_instance_, list_services_response_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ServerReflectionResponse_default_oneof_instance_, error_response_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServerReflectionResponse, message_response_), - }; - ServerReflectionResponse_reflection_ = - ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection( - ServerReflectionResponse_descriptor_, - ServerReflectionResponse::internal_default_instance(), - ServerReflectionResponse_offsets_, - -1, - -1, - -1, - ServerReflectionResponse_default_oneof_instance_, - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServerReflectionResponse, _oneof_case_[0]), - sizeof(ServerReflectionResponse), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServerReflectionResponse, _internal_metadata_)); - FileDescriptorResponse_descriptor_ = file->message_type(3); - static const int FileDescriptorResponse_offsets_[1] = { - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorResponse, file_descriptor_proto_), - }; - FileDescriptorResponse_reflection_ = - ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection( - FileDescriptorResponse_descriptor_, - FileDescriptorResponse::internal_default_instance(), - FileDescriptorResponse_offsets_, - -1, - -1, - -1, - sizeof(FileDescriptorResponse), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorResponse, _internal_metadata_)); - ExtensionNumberResponse_descriptor_ = file->message_type(4); - static const int ExtensionNumberResponse_offsets_[2] = { - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExtensionNumberResponse, base_type_name_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExtensionNumberResponse, extension_number_), - }; - ExtensionNumberResponse_reflection_ = - ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection( - ExtensionNumberResponse_descriptor_, - ExtensionNumberResponse::internal_default_instance(), - ExtensionNumberResponse_offsets_, - -1, - -1, - -1, - sizeof(ExtensionNumberResponse), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExtensionNumberResponse, _internal_metadata_)); - ListServiceResponse_descriptor_ = file->message_type(5); - static const int ListServiceResponse_offsets_[1] = { - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ListServiceResponse, service_), - }; - ListServiceResponse_reflection_ = - ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection( - ListServiceResponse_descriptor_, - ListServiceResponse::internal_default_instance(), - ListServiceResponse_offsets_, - -1, - -1, - -1, - sizeof(ListServiceResponse), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ListServiceResponse, _internal_metadata_)); - ServiceResponse_descriptor_ = file->message_type(6); - static const int ServiceResponse_offsets_[1] = { - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceResponse, name_), - }; - ServiceResponse_reflection_ = - ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection( - ServiceResponse_descriptor_, - ServiceResponse::internal_default_instance(), - ServiceResponse_offsets_, - -1, - -1, - -1, - sizeof(ServiceResponse), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceResponse, _internal_metadata_)); - ErrorResponse_descriptor_ = file->message_type(7); - static const int ErrorResponse_offsets_[2] = { - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ErrorResponse, error_code_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ErrorResponse, error_message_), - }; - ErrorResponse_reflection_ = - ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection( - ErrorResponse_descriptor_, - ErrorResponse::internal_default_instance(), - ErrorResponse_offsets_, - -1, - -1, - -1, - sizeof(ErrorResponse), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ErrorResponse, _internal_metadata_)); -} - -namespace { - -GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_); -void protobuf_AssignDescriptorsOnce() { - ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_, - &protobuf_AssignDesc_reflection_2eproto); -} - -void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD; -void protobuf_RegisterTypes(const ::std::string&) { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( - ServerReflectionRequest_descriptor_, ServerReflectionRequest::internal_default_instance()); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( - ExtensionRequest_descriptor_, ExtensionRequest::internal_default_instance()); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( - ServerReflectionResponse_descriptor_, ServerReflectionResponse::internal_default_instance()); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( - FileDescriptorResponse_descriptor_, FileDescriptorResponse::internal_default_instance()); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( - ExtensionNumberResponse_descriptor_, ExtensionNumberResponse::internal_default_instance()); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( - ListServiceResponse_descriptor_, ListServiceResponse::internal_default_instance()); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( - ServiceResponse_descriptor_, ServiceResponse::internal_default_instance()); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( - ErrorResponse_descriptor_, ErrorResponse::internal_default_instance()); -} - -} // namespace - -void protobuf_ShutdownFile_reflection_2eproto() { - ServerReflectionRequest_default_instance_.Shutdown(); - delete ServerReflectionRequest_default_oneof_instance_; - delete ServerReflectionRequest_reflection_; - ExtensionRequest_default_instance_.Shutdown(); - delete ExtensionRequest_reflection_; - ServerReflectionResponse_default_instance_.Shutdown(); - delete ServerReflectionResponse_default_oneof_instance_; - delete ServerReflectionResponse_reflection_; - FileDescriptorResponse_default_instance_.Shutdown(); - delete FileDescriptorResponse_reflection_; - ExtensionNumberResponse_default_instance_.Shutdown(); - delete ExtensionNumberResponse_reflection_; - ListServiceResponse_default_instance_.Shutdown(); - delete ListServiceResponse_reflection_; - ServiceResponse_default_instance_.Shutdown(); - delete ServiceResponse_reflection_; - ErrorResponse_default_instance_.Shutdown(); - delete ErrorResponse_reflection_; -} - -void protobuf_InitDefaults_reflection_2eproto_impl() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - ::google::protobuf::internal::GetEmptyString(); - ServerReflectionRequest_default_instance_.DefaultConstruct(); - ServerReflectionRequest_default_oneof_instance_ = new ServerReflectionRequestOneofInstance(); - ::google::protobuf::internal::GetEmptyString(); - ExtensionRequest_default_instance_.DefaultConstruct(); - ::google::protobuf::internal::GetEmptyString(); - ServerReflectionResponse_default_instance_.DefaultConstruct(); - ServerReflectionResponse_default_oneof_instance_ = new ServerReflectionResponseOneofInstance(); - ::google::protobuf::internal::GetEmptyString(); - FileDescriptorResponse_default_instance_.DefaultConstruct(); - ::google::protobuf::internal::GetEmptyString(); - ExtensionNumberResponse_default_instance_.DefaultConstruct(); - ListServiceResponse_default_instance_.DefaultConstruct(); - ::google::protobuf::internal::GetEmptyString(); - ServiceResponse_default_instance_.DefaultConstruct(); - ::google::protobuf::internal::GetEmptyString(); - ErrorResponse_default_instance_.DefaultConstruct(); - ServerReflectionRequest_default_instance_.get_mutable()->InitAsDefaultInstance(); - ExtensionRequest_default_instance_.get_mutable()->InitAsDefaultInstance(); - ServerReflectionResponse_default_instance_.get_mutable()->InitAsDefaultInstance(); - FileDescriptorResponse_default_instance_.get_mutable()->InitAsDefaultInstance(); - ExtensionNumberResponse_default_instance_.get_mutable()->InitAsDefaultInstance(); - ListServiceResponse_default_instance_.get_mutable()->InitAsDefaultInstance(); - ServiceResponse_default_instance_.get_mutable()->InitAsDefaultInstance(); - ErrorResponse_default_instance_.get_mutable()->InitAsDefaultInstance(); -} - -GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_InitDefaults_reflection_2eproto_once_); -void protobuf_InitDefaults_reflection_2eproto() { - ::google::protobuf::GoogleOnceInit(&protobuf_InitDefaults_reflection_2eproto_once_, - &protobuf_InitDefaults_reflection_2eproto_impl); -} -void protobuf_AddDesc_reflection_2eproto_impl() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - protobuf_InitDefaults_reflection_2eproto(); - ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( - "\n\020reflection.proto\022\027grpc.reflection.v1al" - "pha\"\212\002\n\027ServerReflectionRequest\022\014\n\004host\030" - "\001 \001(\t\022\032\n\020file_by_filename\030\003 \001(\tH\000\022 \n\026fil" - "e_containing_symbol\030\004 \001(\tH\000\022N\n\031file_cont" - "aining_extension\030\005 \001(\0132).grpc.reflection" - ".v1alpha.ExtensionRequestH\000\022\'\n\035all_exten" - "sion_numbers_of_type\030\006 \001(\tH\000\022\027\n\rlist_ser" - "vices\030\007 \001(\tH\000B\021\n\017message_request\"E\n\020Exte" - "nsionRequest\022\027\n\017containing_type\030\001 \001(\t\022\030\n" - "\020extension_number\030\002 \001(\005\"\321\003\n\030ServerReflec" - "tionResponse\022\022\n\nvalid_host\030\001 \001(\t\022J\n\020orig" - "inal_request\030\002 \001(\01320.grpc.reflection.v1a" - "lpha.ServerReflectionRequest\022S\n\030file_des" - "criptor_response\030\004 \001(\0132/.grpc.reflection" - ".v1alpha.FileDescriptorResponseH\000\022Z\n\036all" - "_extension_numbers_response\030\005 \001(\01320.grpc" - ".reflection.v1alpha.ExtensionNumberRespo" - "nseH\000\022N\n\026list_services_response\030\006 \001(\0132,." - "grpc.reflection.v1alpha.ListServiceRespo" - "nseH\000\022@\n\016error_response\030\007 \001(\0132&.grpc.ref" - "lection.v1alpha.ErrorResponseH\000B\022\n\020messa" - "ge_response\"7\n\026FileDescriptorResponse\022\035\n" - "\025file_descriptor_proto\030\001 \003(\014\"K\n\027Extensio" - "nNumberResponse\022\026\n\016base_type_name\030\001 \001(\t\022" - "\030\n\020extension_number\030\002 \003(\005\"P\n\023ListService" - "Response\0229\n\007service\030\001 \003(\0132(.grpc.reflect" - "ion.v1alpha.ServiceResponse\"\037\n\017ServiceRe" - "sponse\022\014\n\004name\030\001 \001(\t\":\n\rErrorResponse\022\022\n" - "\nerror_code\030\001 \001(\005\022\025\n\rerror_message\030\002 \001(\t" - "2\223\001\n\020ServerReflection\022\177\n\024ServerReflectio" - "nInfo\0220.grpc.reflection.v1alpha.ServerRe" - "flectionRequest\0321.grpc.reflection.v1alph" - "a.ServerReflectionResponse(\0010\001b\006proto3", 1318); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( - "reflection.proto", &protobuf_RegisterTypes); - ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_reflection_2eproto); -} - -GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AddDesc_reflection_2eproto_once_); -void protobuf_AddDesc_reflection_2eproto() { - ::google::protobuf::GoogleOnceInit(&protobuf_AddDesc_reflection_2eproto_once_, - &protobuf_AddDesc_reflection_2eproto_impl); -} -// Force AddDescriptors() to be called at static initialization time. -struct StaticDescriptorInitializer_reflection_2eproto { - StaticDescriptorInitializer_reflection_2eproto() { - protobuf_AddDesc_reflection_2eproto(); - } -} static_descriptor_initializer_reflection_2eproto_; - -namespace { - -static void MergeFromFail(int line) GOOGLE_ATTRIBUTE_COLD GOOGLE_ATTRIBUTE_NORETURN; -static void MergeFromFail(int line) { - ::google::protobuf::internal::MergeFromFail(__FILE__, line); -} - -} // namespace - - -// =================================================================== - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int ServerReflectionRequest::kHostFieldNumber; -const int ServerReflectionRequest::kFileByFilenameFieldNumber; -const int ServerReflectionRequest::kFileContainingSymbolFieldNumber; -const int ServerReflectionRequest::kFileContainingExtensionFieldNumber; -const int ServerReflectionRequest::kAllExtensionNumbersOfTypeFieldNumber; -const int ServerReflectionRequest::kListServicesFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -ServerReflectionRequest::ServerReflectionRequest() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - if (this != internal_default_instance()) protobuf_InitDefaults_reflection_2eproto(); - SharedCtor(); - // @@protoc_insertion_point(constructor:grpc.reflection.v1alpha.ServerReflectionRequest) -} - -void ServerReflectionRequest::InitAsDefaultInstance() { - ServerReflectionRequest_default_oneof_instance_->file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ServerReflectionRequest_default_oneof_instance_->file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ServerReflectionRequest_default_oneof_instance_->file_containing_extension_ = const_cast< ::grpc::reflection::v1alpha::ExtensionRequest*>( - ::grpc::reflection::v1alpha::ExtensionRequest::internal_default_instance()); - ServerReflectionRequest_default_oneof_instance_->all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ServerReflectionRequest_default_oneof_instance_->list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -ServerReflectionRequest::ServerReflectionRequest(const ServerReflectionRequest& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - SharedCtor(); - UnsafeMergeFrom(from); - // @@protoc_insertion_point(copy_constructor:grpc.reflection.v1alpha.ServerReflectionRequest) -} - -void ServerReflectionRequest::SharedCtor() { - host_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_has_message_request(); - _cached_size_ = 0; -} - -ServerReflectionRequest::~ServerReflectionRequest() { - // @@protoc_insertion_point(destructor:grpc.reflection.v1alpha.ServerReflectionRequest) - SharedDtor(); -} - -void ServerReflectionRequest::SharedDtor() { - host_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (has_message_request()) { - clear_message_request(); - } -} - -void ServerReflectionRequest::SetCachedSize(int size) const { - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); -} -const ::google::protobuf::Descriptor* ServerReflectionRequest::descriptor() { - protobuf_AssignDescriptorsOnce(); - return ServerReflectionRequest_descriptor_; -} - -const ServerReflectionRequest& ServerReflectionRequest::default_instance() { - protobuf_InitDefaults_reflection_2eproto(); - return *internal_default_instance(); -} - -::google::protobuf::internal::ExplicitlyConstructed ServerReflectionRequest_default_instance_; - -ServerReflectionRequest* ServerReflectionRequest::New(::google::protobuf::Arena* arena) const { - ServerReflectionRequest* n = new ServerReflectionRequest; - if (arena != NULL) { - arena->Own(n); - } - return n; -} - -void ServerReflectionRequest::clear_message_request() { -// @@protoc_insertion_point(one_of_clear_start:grpc.reflection.v1alpha.ServerReflectionRequest) - switch (message_request_case()) { - case kFileByFilename: { - message_request_.file_by_filename_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - break; - } - case kFileContainingSymbol: { - message_request_.file_containing_symbol_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - break; - } - case kFileContainingExtension: { - delete message_request_.file_containing_extension_; - break; - } - case kAllExtensionNumbersOfType: { - message_request_.all_extension_numbers_of_type_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - break; - } - case kListServices: { - message_request_.list_services_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - break; - } - case MESSAGE_REQUEST_NOT_SET: { - break; - } - } - _oneof_case_[0] = MESSAGE_REQUEST_NOT_SET; -} - - -void ServerReflectionRequest::Clear() { -// @@protoc_insertion_point(message_clear_start:grpc.reflection.v1alpha.ServerReflectionRequest) - host_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_message_request(); -} - -bool ServerReflectionRequest::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:grpc.reflection.v1alpha.ServerReflectionRequest) - for (;;) { - ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // optional string host = 1; - case 1: { - if (tag == 10) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_host())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->host().data(), this->host().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ServerReflectionRequest.host")); - } else { - goto handle_unusual; - } - if (input->ExpectTag(26)) goto parse_file_by_filename; - break; - } - - // optional string file_by_filename = 3; - case 3: { - if (tag == 26) { - parse_file_by_filename: - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_file_by_filename())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->file_by_filename().data(), this->file_by_filename().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename")); - } else { - goto handle_unusual; - } - goto after_list_services; - break; - } - - // optional string file_containing_symbol = 4; - case 4: { - if (tag == 34) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_file_containing_symbol())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->file_containing_symbol().data(), this->file_containing_symbol().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol")); - } else { - goto handle_unusual; - } - goto after_list_services; - break; - } - - // optional .grpc.reflection.v1alpha.ExtensionRequest file_containing_extension = 5; - case 5: { - if (tag == 42) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( - input, mutable_file_containing_extension())); - } else { - goto handle_unusual; - } - goto after_list_services; - break; - } - - // optional string all_extension_numbers_of_type = 6; - case 6: { - if (tag == 50) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_all_extension_numbers_of_type())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->all_extension_numbers_of_type().data(), this->all_extension_numbers_of_type().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type")); - } else { - goto handle_unusual; - } - if (input->ExpectTag(58)) goto parse_list_services; - break; - } - - // optional string list_services = 7; - case 7: { - if (tag == 58) { - parse_list_services: - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_list_services())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->list_services().data(), this->list_services().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ServerReflectionRequest.list_services")); - } else { - goto handle_unusual; - } - after_list_services: - if (input->ExpectAtEnd()) goto success; - break; - } - - default: { - handle_unusual: - if (tag == 0 || - ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == - ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { - goto success; - } - DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag)); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:grpc.reflection.v1alpha.ServerReflectionRequest) - return true; -failure: - // @@protoc_insertion_point(parse_failure:grpc.reflection.v1alpha.ServerReflectionRequest) - return false; -#undef DO_ -} - -void ServerReflectionRequest::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:grpc.reflection.v1alpha.ServerReflectionRequest) - // optional string host = 1; - if (this->host().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->host().data(), this->host().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.host"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->host(), output); - } - - // optional string file_by_filename = 3; - if (has_file_by_filename()) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->file_by_filename().data(), this->file_by_filename().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 3, this->file_by_filename(), output); - } - - // optional string file_containing_symbol = 4; - if (has_file_containing_symbol()) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->file_containing_symbol().data(), this->file_containing_symbol().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 4, this->file_containing_symbol(), output); - } - - // optional .grpc.reflection.v1alpha.ExtensionRequest file_containing_extension = 5; - if (has_file_containing_extension()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 5, *message_request_.file_containing_extension_, output); - } - - // optional string all_extension_numbers_of_type = 6; - if (has_all_extension_numbers_of_type()) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->all_extension_numbers_of_type().data(), this->all_extension_numbers_of_type().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 6, this->all_extension_numbers_of_type(), output); - } - - // optional string list_services = 7; - if (has_list_services()) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->list_services().data(), this->list_services().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.list_services"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 7, this->list_services(), output); - } - - // @@protoc_insertion_point(serialize_end:grpc.reflection.v1alpha.ServerReflectionRequest) -} - -::google::protobuf::uint8* ServerReflectionRequest::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:grpc.reflection.v1alpha.ServerReflectionRequest) - // optional string host = 1; - if (this->host().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->host().data(), this->host().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.host"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->host(), target); - } - - // optional string file_by_filename = 3; - if (has_file_by_filename()) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->file_by_filename().data(), this->file_by_filename().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 3, this->file_by_filename(), target); - } - - // optional string file_containing_symbol = 4; - if (has_file_containing_symbol()) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->file_containing_symbol().data(), this->file_containing_symbol().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 4, this->file_containing_symbol(), target); - } - - // optional .grpc.reflection.v1alpha.ExtensionRequest file_containing_extension = 5; - if (has_file_containing_extension()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageNoVirtualToArray( - 5, *message_request_.file_containing_extension_, false, target); - } - - // optional string all_extension_numbers_of_type = 6; - if (has_all_extension_numbers_of_type()) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->all_extension_numbers_of_type().data(), this->all_extension_numbers_of_type().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 6, this->all_extension_numbers_of_type(), target); - } - - // optional string list_services = 7; - if (has_list_services()) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->list_services().data(), this->list_services().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionRequest.list_services"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 7, this->list_services(), target); - } - - // @@protoc_insertion_point(serialize_to_array_end:grpc.reflection.v1alpha.ServerReflectionRequest) - return target; -} - -size_t ServerReflectionRequest::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:grpc.reflection.v1alpha.ServerReflectionRequest) - size_t total_size = 0; - - // optional string host = 1; - if (this->host().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->host()); - } - - switch (message_request_case()) { - // optional string file_by_filename = 3; - case kFileByFilename: { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->file_by_filename()); - break; - } - // optional string file_containing_symbol = 4; - case kFileContainingSymbol: { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->file_containing_symbol()); - break; - } - // optional .grpc.reflection.v1alpha.ExtensionRequest file_containing_extension = 5; - case kFileContainingExtension: { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( - *message_request_.file_containing_extension_); - break; - } - // optional string all_extension_numbers_of_type = 6; - case kAllExtensionNumbersOfType: { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->all_extension_numbers_of_type()); - break; - } - // optional string list_services = 7; - case kListServices: { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->list_services()); - break; - } - case MESSAGE_REQUEST_NOT_SET: { - break; - } - } - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = cached_size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); - return total_size; -} - -void ServerReflectionRequest::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:grpc.reflection.v1alpha.ServerReflectionRequest) - if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__); - const ServerReflectionRequest* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:grpc.reflection.v1alpha.ServerReflectionRequest) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:grpc.reflection.v1alpha.ServerReflectionRequest) - UnsafeMergeFrom(*source); - } -} - -void ServerReflectionRequest::MergeFrom(const ServerReflectionRequest& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:grpc.reflection.v1alpha.ServerReflectionRequest) - if (GOOGLE_PREDICT_TRUE(&from != this)) { - UnsafeMergeFrom(from); - } else { - MergeFromFail(__LINE__); - } -} - -void ServerReflectionRequest::UnsafeMergeFrom(const ServerReflectionRequest& from) { - GOOGLE_DCHECK(&from != this); - switch (from.message_request_case()) { - case kFileByFilename: { - set_file_by_filename(from.file_by_filename()); - break; - } - case kFileContainingSymbol: { - set_file_containing_symbol(from.file_containing_symbol()); - break; - } - case kFileContainingExtension: { - mutable_file_containing_extension()->::grpc::reflection::v1alpha::ExtensionRequest::MergeFrom(from.file_containing_extension()); - break; - } - case kAllExtensionNumbersOfType: { - set_all_extension_numbers_of_type(from.all_extension_numbers_of_type()); - break; - } - case kListServices: { - set_list_services(from.list_services()); - break; - } - case MESSAGE_REQUEST_NOT_SET: { - break; - } - } - if (from.host().size() > 0) { - - host_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.host_); - } -} - -void ServerReflectionRequest::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:grpc.reflection.v1alpha.ServerReflectionRequest) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void ServerReflectionRequest::CopyFrom(const ServerReflectionRequest& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:grpc.reflection.v1alpha.ServerReflectionRequest) - if (&from == this) return; - Clear(); - UnsafeMergeFrom(from); -} - -bool ServerReflectionRequest::IsInitialized() const { - - return true; -} - -void ServerReflectionRequest::Swap(ServerReflectionRequest* other) { - if (other == this) return; - InternalSwap(other); -} -void ServerReflectionRequest::InternalSwap(ServerReflectionRequest* other) { - host_.Swap(&other->host_); - std::swap(message_request_, other->message_request_); - std::swap(_oneof_case_[0], other->_oneof_case_[0]); - _internal_metadata_.Swap(&other->_internal_metadata_); - std::swap(_cached_size_, other->_cached_size_); -} - -::google::protobuf::Metadata ServerReflectionRequest::GetMetadata() const { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::Metadata metadata; - metadata.descriptor = ServerReflectionRequest_descriptor_; - metadata.reflection = ServerReflectionRequest_reflection_; - return metadata; -} - -#if PROTOBUF_INLINE_NOT_IN_HEADERS -// ServerReflectionRequest - -// optional string host = 1; -void ServerReflectionRequest::clear_host() { - host_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -const ::std::string& ServerReflectionRequest::host() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.host) - return host_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ServerReflectionRequest::set_host(const ::std::string& value) { - - host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.host) -} -void ServerReflectionRequest::set_host(const char* value) { - - host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.host) -} -void ServerReflectionRequest::set_host(const char* value, size_t size) { - - host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.host) -} -::std::string* ServerReflectionRequest::mutable_host() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.host) - return host_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ServerReflectionRequest::release_host() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.host) - - return host_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ServerReflectionRequest::set_allocated_host(::std::string* host) { - if (host != NULL) { - - } else { - - } - host_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), host); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.host) -} - -// optional string file_by_filename = 3; -bool ServerReflectionRequest::has_file_by_filename() const { - return message_request_case() == kFileByFilename; -} -void ServerReflectionRequest::set_has_file_by_filename() { - _oneof_case_[0] = kFileByFilename; -} -void ServerReflectionRequest::clear_file_by_filename() { - if (has_file_by_filename()) { - message_request_.file_by_filename_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_has_message_request(); - } -} -const ::std::string& ServerReflectionRequest::file_by_filename() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) - if (has_file_by_filename()) { - return message_request_.file_by_filename_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); -} -void ServerReflectionRequest::set_file_by_filename(const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) - if (!has_file_by_filename()) { - clear_message_request(); - set_has_file_by_filename(); - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_by_filename_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) -} -void ServerReflectionRequest::set_file_by_filename(const char* value) { - if (!has_file_by_filename()) { - clear_message_request(); - set_has_file_by_filename(); - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_by_filename_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) -} -void ServerReflectionRequest::set_file_by_filename(const char* value, size_t size) { - if (!has_file_by_filename()) { - clear_message_request(); - set_has_file_by_filename(); - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_by_filename_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( - reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) -} -::std::string* ServerReflectionRequest::mutable_file_by_filename() { - if (!has_file_by_filename()) { - clear_message_request(); - set_has_file_by_filename(); - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) - return message_request_.file_by_filename_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ServerReflectionRequest::release_file_by_filename() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) - if (has_file_by_filename()) { - clear_has_message_request(); - return message_request_.file_by_filename_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } else { - return NULL; - } -} -void ServerReflectionRequest::set_allocated_file_by_filename(::std::string* file_by_filename) { - if (!has_file_by_filename()) { - message_request_.file_by_filename_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - clear_message_request(); - if (file_by_filename != NULL) { - set_has_file_by_filename(); - message_request_.file_by_filename_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - file_by_filename); - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.file_by_filename) -} - -// optional string file_containing_symbol = 4; -bool ServerReflectionRequest::has_file_containing_symbol() const { - return message_request_case() == kFileContainingSymbol; -} -void ServerReflectionRequest::set_has_file_containing_symbol() { - _oneof_case_[0] = kFileContainingSymbol; -} -void ServerReflectionRequest::clear_file_containing_symbol() { - if (has_file_containing_symbol()) { - message_request_.file_containing_symbol_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_has_message_request(); - } -} -const ::std::string& ServerReflectionRequest::file_containing_symbol() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) - if (has_file_containing_symbol()) { - return message_request_.file_containing_symbol_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); -} -void ServerReflectionRequest::set_file_containing_symbol(const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) - if (!has_file_containing_symbol()) { - clear_message_request(); - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_containing_symbol_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) -} -void ServerReflectionRequest::set_file_containing_symbol(const char* value) { - if (!has_file_containing_symbol()) { - clear_message_request(); - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_containing_symbol_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) -} -void ServerReflectionRequest::set_file_containing_symbol(const char* value, size_t size) { - if (!has_file_containing_symbol()) { - clear_message_request(); - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.file_containing_symbol_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( - reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) -} -::std::string* ServerReflectionRequest::mutable_file_containing_symbol() { - if (!has_file_containing_symbol()) { - clear_message_request(); - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) - return message_request_.file_containing_symbol_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ServerReflectionRequest::release_file_containing_symbol() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) - if (has_file_containing_symbol()) { - clear_has_message_request(); - return message_request_.file_containing_symbol_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } else { - return NULL; - } -} -void ServerReflectionRequest::set_allocated_file_containing_symbol(::std::string* file_containing_symbol) { - if (!has_file_containing_symbol()) { - message_request_.file_containing_symbol_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - clear_message_request(); - if (file_containing_symbol != NULL) { - set_has_file_containing_symbol(); - message_request_.file_containing_symbol_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - file_containing_symbol); - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_symbol) -} - -// optional .grpc.reflection.v1alpha.ExtensionRequest file_containing_extension = 5; -bool ServerReflectionRequest::has_file_containing_extension() const { - return message_request_case() == kFileContainingExtension; -} -void ServerReflectionRequest::set_has_file_containing_extension() { - _oneof_case_[0] = kFileContainingExtension; -} -void ServerReflectionRequest::clear_file_containing_extension() { - if (has_file_containing_extension()) { - delete message_request_.file_containing_extension_; - clear_has_message_request(); - } -} - const ::grpc::reflection::v1alpha::ExtensionRequest& ServerReflectionRequest::file_containing_extension() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_extension) - return has_file_containing_extension() - ? *message_request_.file_containing_extension_ - : ::grpc::reflection::v1alpha::ExtensionRequest::default_instance(); -} -::grpc::reflection::v1alpha::ExtensionRequest* ServerReflectionRequest::mutable_file_containing_extension() { - if (!has_file_containing_extension()) { - clear_message_request(); - set_has_file_containing_extension(); - message_request_.file_containing_extension_ = new ::grpc::reflection::v1alpha::ExtensionRequest; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_extension) - return message_request_.file_containing_extension_; -} -::grpc::reflection::v1alpha::ExtensionRequest* ServerReflectionRequest::release_file_containing_extension() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_extension) - if (has_file_containing_extension()) { - clear_has_message_request(); - ::grpc::reflection::v1alpha::ExtensionRequest* temp = message_request_.file_containing_extension_; - message_request_.file_containing_extension_ = NULL; - return temp; - } else { - return NULL; - } -} -void ServerReflectionRequest::set_allocated_file_containing_extension(::grpc::reflection::v1alpha::ExtensionRequest* file_containing_extension) { - clear_message_request(); - if (file_containing_extension) { - set_has_file_containing_extension(); - message_request_.file_containing_extension_ = file_containing_extension; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_extension) -} - -// optional string all_extension_numbers_of_type = 6; -bool ServerReflectionRequest::has_all_extension_numbers_of_type() const { - return message_request_case() == kAllExtensionNumbersOfType; -} -void ServerReflectionRequest::set_has_all_extension_numbers_of_type() { - _oneof_case_[0] = kAllExtensionNumbersOfType; -} -void ServerReflectionRequest::clear_all_extension_numbers_of_type() { - if (has_all_extension_numbers_of_type()) { - message_request_.all_extension_numbers_of_type_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_has_message_request(); - } -} -const ::std::string& ServerReflectionRequest::all_extension_numbers_of_type() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) - if (has_all_extension_numbers_of_type()) { - return message_request_.all_extension_numbers_of_type_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); -} -void ServerReflectionRequest::set_all_extension_numbers_of_type(const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) - if (!has_all_extension_numbers_of_type()) { - clear_message_request(); - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.all_extension_numbers_of_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) -} -void ServerReflectionRequest::set_all_extension_numbers_of_type(const char* value) { - if (!has_all_extension_numbers_of_type()) { - clear_message_request(); - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.all_extension_numbers_of_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) -} -void ServerReflectionRequest::set_all_extension_numbers_of_type(const char* value, size_t size) { - if (!has_all_extension_numbers_of_type()) { - clear_message_request(); - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.all_extension_numbers_of_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( - reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) -} -::std::string* ServerReflectionRequest::mutable_all_extension_numbers_of_type() { - if (!has_all_extension_numbers_of_type()) { - clear_message_request(); - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) - return message_request_.all_extension_numbers_of_type_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ServerReflectionRequest::release_all_extension_numbers_of_type() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) - if (has_all_extension_numbers_of_type()) { - clear_has_message_request(); - return message_request_.all_extension_numbers_of_type_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } else { - return NULL; - } -} -void ServerReflectionRequest::set_allocated_all_extension_numbers_of_type(::std::string* all_extension_numbers_of_type) { - if (!has_all_extension_numbers_of_type()) { - message_request_.all_extension_numbers_of_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - clear_message_request(); - if (all_extension_numbers_of_type != NULL) { - set_has_all_extension_numbers_of_type(); - message_request_.all_extension_numbers_of_type_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - all_extension_numbers_of_type); - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.all_extension_numbers_of_type) -} - -// optional string list_services = 7; -bool ServerReflectionRequest::has_list_services() const { - return message_request_case() == kListServices; -} -void ServerReflectionRequest::set_has_list_services() { - _oneof_case_[0] = kListServices; -} -void ServerReflectionRequest::clear_list_services() { - if (has_list_services()) { - message_request_.list_services_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - clear_has_message_request(); - } -} -const ::std::string& ServerReflectionRequest::list_services() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) - if (has_list_services()) { - return message_request_.list_services_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); -} -void ServerReflectionRequest::set_list_services(const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) - if (!has_list_services()) { - clear_message_request(); - set_has_list_services(); - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.list_services_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) -} -void ServerReflectionRequest::set_list_services(const char* value) { - if (!has_list_services()) { - clear_message_request(); - set_has_list_services(); - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.list_services_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) -} -void ServerReflectionRequest::set_list_services(const char* value, size_t size) { - if (!has_list_services()) { - clear_message_request(); - set_has_list_services(); - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - message_request_.list_services_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( - reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) -} -::std::string* ServerReflectionRequest::mutable_list_services() { - if (!has_list_services()) { - clear_message_request(); - set_has_list_services(); - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) - return message_request_.list_services_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ServerReflectionRequest::release_list_services() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) - if (has_list_services()) { - clear_has_message_request(); - return message_request_.list_services_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } else { - return NULL; - } -} -void ServerReflectionRequest::set_allocated_list_services(::std::string* list_services) { - if (!has_list_services()) { - message_request_.list_services_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - } - clear_message_request(); - if (list_services != NULL) { - set_has_list_services(); - message_request_.list_services_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - list_services); - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionRequest.list_services) -} - -bool ServerReflectionRequest::has_message_request() const { - return message_request_case() != MESSAGE_REQUEST_NOT_SET; -} -void ServerReflectionRequest::clear_has_message_request() { - _oneof_case_[0] = MESSAGE_REQUEST_NOT_SET; -} -ServerReflectionRequest::MessageRequestCase ServerReflectionRequest::message_request_case() const { - return ServerReflectionRequest::MessageRequestCase(_oneof_case_[0]); -} -inline const ServerReflectionRequest* ServerReflectionRequest::internal_default_instance() { - return &ServerReflectionRequest_default_instance_.get(); -} -#endif // PROTOBUF_INLINE_NOT_IN_HEADERS - -// =================================================================== - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int ExtensionRequest::kContainingTypeFieldNumber; -const int ExtensionRequest::kExtensionNumberFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -ExtensionRequest::ExtensionRequest() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - if (this != internal_default_instance()) protobuf_InitDefaults_reflection_2eproto(); - SharedCtor(); - // @@protoc_insertion_point(constructor:grpc.reflection.v1alpha.ExtensionRequest) -} - -void ExtensionRequest::InitAsDefaultInstance() { -} - -ExtensionRequest::ExtensionRequest(const ExtensionRequest& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - SharedCtor(); - UnsafeMergeFrom(from); - // @@protoc_insertion_point(copy_constructor:grpc.reflection.v1alpha.ExtensionRequest) -} - -void ExtensionRequest::SharedCtor() { - containing_type_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - extension_number_ = 0; - _cached_size_ = 0; -} - -ExtensionRequest::~ExtensionRequest() { - // @@protoc_insertion_point(destructor:grpc.reflection.v1alpha.ExtensionRequest) - SharedDtor(); -} - -void ExtensionRequest::SharedDtor() { - containing_type_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void ExtensionRequest::SetCachedSize(int size) const { - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); -} -const ::google::protobuf::Descriptor* ExtensionRequest::descriptor() { - protobuf_AssignDescriptorsOnce(); - return ExtensionRequest_descriptor_; -} - -const ExtensionRequest& ExtensionRequest::default_instance() { - protobuf_InitDefaults_reflection_2eproto(); - return *internal_default_instance(); -} - -::google::protobuf::internal::ExplicitlyConstructed ExtensionRequest_default_instance_; - -ExtensionRequest* ExtensionRequest::New(::google::protobuf::Arena* arena) const { - ExtensionRequest* n = new ExtensionRequest; - if (arena != NULL) { - arena->Own(n); - } - return n; -} - -void ExtensionRequest::Clear() { -// @@protoc_insertion_point(message_clear_start:grpc.reflection.v1alpha.ExtensionRequest) - containing_type_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - extension_number_ = 0; -} - -bool ExtensionRequest::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:grpc.reflection.v1alpha.ExtensionRequest) - for (;;) { - ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // optional string containing_type = 1; - case 1: { - if (tag == 10) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_containing_type())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->containing_type().data(), this->containing_type().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ExtensionRequest.containing_type")); - } else { - goto handle_unusual; - } - if (input->ExpectTag(16)) goto parse_extension_number; - break; - } - - // optional int32 extension_number = 2; - case 2: { - if (tag == 16) { - parse_extension_number: - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &extension_number_))); - } else { - goto handle_unusual; - } - if (input->ExpectAtEnd()) goto success; - break; - } - - default: { - handle_unusual: - if (tag == 0 || - ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == - ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { - goto success; - } - DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag)); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:grpc.reflection.v1alpha.ExtensionRequest) - return true; -failure: - // @@protoc_insertion_point(parse_failure:grpc.reflection.v1alpha.ExtensionRequest) - return false; -#undef DO_ -} - -void ExtensionRequest::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:grpc.reflection.v1alpha.ExtensionRequest) - // optional string containing_type = 1; - if (this->containing_type().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->containing_type().data(), this->containing_type().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ExtensionRequest.containing_type"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->containing_type(), output); - } - - // optional int32 extension_number = 2; - if (this->extension_number() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->extension_number(), output); - } - - // @@protoc_insertion_point(serialize_end:grpc.reflection.v1alpha.ExtensionRequest) -} - -::google::protobuf::uint8* ExtensionRequest::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:grpc.reflection.v1alpha.ExtensionRequest) - // optional string containing_type = 1; - if (this->containing_type().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->containing_type().data(), this->containing_type().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ExtensionRequest.containing_type"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->containing_type(), target); - } - - // optional int32 extension_number = 2; - if (this->extension_number() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->extension_number(), target); - } - - // @@protoc_insertion_point(serialize_to_array_end:grpc.reflection.v1alpha.ExtensionRequest) - return target; -} - -size_t ExtensionRequest::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:grpc.reflection.v1alpha.ExtensionRequest) - size_t total_size = 0; - - // optional string containing_type = 1; - if (this->containing_type().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->containing_type()); - } - - // optional int32 extension_number = 2; - if (this->extension_number() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->extension_number()); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = cached_size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); - return total_size; -} - -void ExtensionRequest::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:grpc.reflection.v1alpha.ExtensionRequest) - if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__); - const ExtensionRequest* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:grpc.reflection.v1alpha.ExtensionRequest) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:grpc.reflection.v1alpha.ExtensionRequest) - UnsafeMergeFrom(*source); - } -} - -void ExtensionRequest::MergeFrom(const ExtensionRequest& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:grpc.reflection.v1alpha.ExtensionRequest) - if (GOOGLE_PREDICT_TRUE(&from != this)) { - UnsafeMergeFrom(from); - } else { - MergeFromFail(__LINE__); - } -} - -void ExtensionRequest::UnsafeMergeFrom(const ExtensionRequest& from) { - GOOGLE_DCHECK(&from != this); - if (from.containing_type().size() > 0) { - - containing_type_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.containing_type_); - } - if (from.extension_number() != 0) { - set_extension_number(from.extension_number()); - } -} - -void ExtensionRequest::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:grpc.reflection.v1alpha.ExtensionRequest) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void ExtensionRequest::CopyFrom(const ExtensionRequest& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:grpc.reflection.v1alpha.ExtensionRequest) - if (&from == this) return; - Clear(); - UnsafeMergeFrom(from); -} - -bool ExtensionRequest::IsInitialized() const { - - return true; -} - -void ExtensionRequest::Swap(ExtensionRequest* other) { - if (other == this) return; - InternalSwap(other); -} -void ExtensionRequest::InternalSwap(ExtensionRequest* other) { - containing_type_.Swap(&other->containing_type_); - std::swap(extension_number_, other->extension_number_); - _internal_metadata_.Swap(&other->_internal_metadata_); - std::swap(_cached_size_, other->_cached_size_); -} - -::google::protobuf::Metadata ExtensionRequest::GetMetadata() const { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::Metadata metadata; - metadata.descriptor = ExtensionRequest_descriptor_; - metadata.reflection = ExtensionRequest_reflection_; - return metadata; -} - -#if PROTOBUF_INLINE_NOT_IN_HEADERS -// ExtensionRequest - -// optional string containing_type = 1; -void ExtensionRequest::clear_containing_type() { - containing_type_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -const ::std::string& ExtensionRequest::containing_type() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ExtensionRequest.containing_type) - return containing_type_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ExtensionRequest::set_containing_type(const ::std::string& value) { - - containing_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ExtensionRequest.containing_type) -} -void ExtensionRequest::set_containing_type(const char* value) { - - containing_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ExtensionRequest.containing_type) -} -void ExtensionRequest::set_containing_type(const char* value, size_t size) { - - containing_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ExtensionRequest.containing_type) -} -::std::string* ExtensionRequest::mutable_containing_type() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ExtensionRequest.containing_type) - return containing_type_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ExtensionRequest::release_containing_type() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ExtensionRequest.containing_type) - - return containing_type_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ExtensionRequest::set_allocated_containing_type(::std::string* containing_type) { - if (containing_type != NULL) { - - } else { - - } - containing_type_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), containing_type); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ExtensionRequest.containing_type) -} - -// optional int32 extension_number = 2; -void ExtensionRequest::clear_extension_number() { - extension_number_ = 0; -} -::google::protobuf::int32 ExtensionRequest::extension_number() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ExtensionRequest.extension_number) - return extension_number_; -} -void ExtensionRequest::set_extension_number(::google::protobuf::int32 value) { - - extension_number_ = value; - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ExtensionRequest.extension_number) -} - -inline const ExtensionRequest* ExtensionRequest::internal_default_instance() { - return &ExtensionRequest_default_instance_.get(); -} -#endif // PROTOBUF_INLINE_NOT_IN_HEADERS - -// =================================================================== - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int ServerReflectionResponse::kValidHostFieldNumber; -const int ServerReflectionResponse::kOriginalRequestFieldNumber; -const int ServerReflectionResponse::kFileDescriptorResponseFieldNumber; -const int ServerReflectionResponse::kAllExtensionNumbersResponseFieldNumber; -const int ServerReflectionResponse::kListServicesResponseFieldNumber; -const int ServerReflectionResponse::kErrorResponseFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -ServerReflectionResponse::ServerReflectionResponse() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - if (this != internal_default_instance()) protobuf_InitDefaults_reflection_2eproto(); - SharedCtor(); - // @@protoc_insertion_point(constructor:grpc.reflection.v1alpha.ServerReflectionResponse) -} - -void ServerReflectionResponse::InitAsDefaultInstance() { - original_request_ = const_cast< ::grpc::reflection::v1alpha::ServerReflectionRequest*>( - ::grpc::reflection::v1alpha::ServerReflectionRequest::internal_default_instance()); - ServerReflectionResponse_default_oneof_instance_->file_descriptor_response_ = const_cast< ::grpc::reflection::v1alpha::FileDescriptorResponse*>( - ::grpc::reflection::v1alpha::FileDescriptorResponse::internal_default_instance()); - ServerReflectionResponse_default_oneof_instance_->all_extension_numbers_response_ = const_cast< ::grpc::reflection::v1alpha::ExtensionNumberResponse*>( - ::grpc::reflection::v1alpha::ExtensionNumberResponse::internal_default_instance()); - ServerReflectionResponse_default_oneof_instance_->list_services_response_ = const_cast< ::grpc::reflection::v1alpha::ListServiceResponse*>( - ::grpc::reflection::v1alpha::ListServiceResponse::internal_default_instance()); - ServerReflectionResponse_default_oneof_instance_->error_response_ = const_cast< ::grpc::reflection::v1alpha::ErrorResponse*>( - ::grpc::reflection::v1alpha::ErrorResponse::internal_default_instance()); -} - -ServerReflectionResponse::ServerReflectionResponse(const ServerReflectionResponse& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - SharedCtor(); - UnsafeMergeFrom(from); - // @@protoc_insertion_point(copy_constructor:grpc.reflection.v1alpha.ServerReflectionResponse) -} - -void ServerReflectionResponse::SharedCtor() { - valid_host_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - original_request_ = NULL; - clear_has_message_response(); - _cached_size_ = 0; -} - -ServerReflectionResponse::~ServerReflectionResponse() { - // @@protoc_insertion_point(destructor:grpc.reflection.v1alpha.ServerReflectionResponse) - SharedDtor(); -} - -void ServerReflectionResponse::SharedDtor() { - valid_host_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (has_message_response()) { - clear_message_response(); - } - if (this != &ServerReflectionResponse_default_instance_.get()) { - delete original_request_; - } -} - -void ServerReflectionResponse::SetCachedSize(int size) const { - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); -} -const ::google::protobuf::Descriptor* ServerReflectionResponse::descriptor() { - protobuf_AssignDescriptorsOnce(); - return ServerReflectionResponse_descriptor_; -} - -const ServerReflectionResponse& ServerReflectionResponse::default_instance() { - protobuf_InitDefaults_reflection_2eproto(); - return *internal_default_instance(); -} - -::google::protobuf::internal::ExplicitlyConstructed ServerReflectionResponse_default_instance_; - -ServerReflectionResponse* ServerReflectionResponse::New(::google::protobuf::Arena* arena) const { - ServerReflectionResponse* n = new ServerReflectionResponse; - if (arena != NULL) { - arena->Own(n); - } - return n; -} - -void ServerReflectionResponse::clear_message_response() { -// @@protoc_insertion_point(one_of_clear_start:grpc.reflection.v1alpha.ServerReflectionResponse) - switch (message_response_case()) { - case kFileDescriptorResponse: { - delete message_response_.file_descriptor_response_; - break; - } - case kAllExtensionNumbersResponse: { - delete message_response_.all_extension_numbers_response_; - break; - } - case kListServicesResponse: { - delete message_response_.list_services_response_; - break; - } - case kErrorResponse: { - delete message_response_.error_response_; - break; - } - case MESSAGE_RESPONSE_NOT_SET: { - break; - } - } - _oneof_case_[0] = MESSAGE_RESPONSE_NOT_SET; -} - - -void ServerReflectionResponse::Clear() { -// @@protoc_insertion_point(message_clear_start:grpc.reflection.v1alpha.ServerReflectionResponse) - valid_host_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (GetArenaNoVirtual() == NULL && original_request_ != NULL) delete original_request_; - original_request_ = NULL; - clear_message_response(); -} - -bool ServerReflectionResponse::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:grpc.reflection.v1alpha.ServerReflectionResponse) - for (;;) { - ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // optional string valid_host = 1; - case 1: { - if (tag == 10) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_valid_host())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->valid_host().data(), this->valid_host().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ServerReflectionResponse.valid_host")); - } else { - goto handle_unusual; - } - if (input->ExpectTag(18)) goto parse_original_request; - break; - } - - // optional .grpc.reflection.v1alpha.ServerReflectionRequest original_request = 2; - case 2: { - if (tag == 18) { - parse_original_request: - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( - input, mutable_original_request())); - } else { - goto handle_unusual; - } - if (input->ExpectTag(34)) goto parse_file_descriptor_response; - break; - } - - // optional .grpc.reflection.v1alpha.FileDescriptorResponse file_descriptor_response = 4; - case 4: { - if (tag == 34) { - parse_file_descriptor_response: - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( - input, mutable_file_descriptor_response())); - } else { - goto handle_unusual; - } - goto after_error_response; - break; - } - - // optional .grpc.reflection.v1alpha.ExtensionNumberResponse all_extension_numbers_response = 5; - case 5: { - if (tag == 42) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( - input, mutable_all_extension_numbers_response())); - } else { - goto handle_unusual; - } - goto after_error_response; - break; - } - - // optional .grpc.reflection.v1alpha.ListServiceResponse list_services_response = 6; - case 6: { - if (tag == 50) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( - input, mutable_list_services_response())); - } else { - goto handle_unusual; - } - if (input->ExpectTag(58)) goto parse_error_response; - break; - } - - // optional .grpc.reflection.v1alpha.ErrorResponse error_response = 7; - case 7: { - if (tag == 58) { - parse_error_response: - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( - input, mutable_error_response())); - } else { - goto handle_unusual; - } - after_error_response: - if (input->ExpectAtEnd()) goto success; - break; - } - - default: { - handle_unusual: - if (tag == 0 || - ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == - ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { - goto success; - } - DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag)); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:grpc.reflection.v1alpha.ServerReflectionResponse) - return true; -failure: - // @@protoc_insertion_point(parse_failure:grpc.reflection.v1alpha.ServerReflectionResponse) - return false; -#undef DO_ -} - -void ServerReflectionResponse::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:grpc.reflection.v1alpha.ServerReflectionResponse) - // optional string valid_host = 1; - if (this->valid_host().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->valid_host().data(), this->valid_host().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionResponse.valid_host"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->valid_host(), output); - } - - // optional .grpc.reflection.v1alpha.ServerReflectionRequest original_request = 2; - if (this->has_original_request()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 2, *this->original_request_, output); - } - - // optional .grpc.reflection.v1alpha.FileDescriptorResponse file_descriptor_response = 4; - if (has_file_descriptor_response()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 4, *message_response_.file_descriptor_response_, output); - } - - // optional .grpc.reflection.v1alpha.ExtensionNumberResponse all_extension_numbers_response = 5; - if (has_all_extension_numbers_response()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 5, *message_response_.all_extension_numbers_response_, output); - } - - // optional .grpc.reflection.v1alpha.ListServiceResponse list_services_response = 6; - if (has_list_services_response()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 6, *message_response_.list_services_response_, output); - } - - // optional .grpc.reflection.v1alpha.ErrorResponse error_response = 7; - if (has_error_response()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 7, *message_response_.error_response_, output); - } - - // @@protoc_insertion_point(serialize_end:grpc.reflection.v1alpha.ServerReflectionResponse) -} - -::google::protobuf::uint8* ServerReflectionResponse::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:grpc.reflection.v1alpha.ServerReflectionResponse) - // optional string valid_host = 1; - if (this->valid_host().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->valid_host().data(), this->valid_host().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServerReflectionResponse.valid_host"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->valid_host(), target); - } - - // optional .grpc.reflection.v1alpha.ServerReflectionRequest original_request = 2; - if (this->has_original_request()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageNoVirtualToArray( - 2, *this->original_request_, false, target); - } - - // optional .grpc.reflection.v1alpha.FileDescriptorResponse file_descriptor_response = 4; - if (has_file_descriptor_response()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageNoVirtualToArray( - 4, *message_response_.file_descriptor_response_, false, target); - } - - // optional .grpc.reflection.v1alpha.ExtensionNumberResponse all_extension_numbers_response = 5; - if (has_all_extension_numbers_response()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageNoVirtualToArray( - 5, *message_response_.all_extension_numbers_response_, false, target); - } - - // optional .grpc.reflection.v1alpha.ListServiceResponse list_services_response = 6; - if (has_list_services_response()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageNoVirtualToArray( - 6, *message_response_.list_services_response_, false, target); - } - - // optional .grpc.reflection.v1alpha.ErrorResponse error_response = 7; - if (has_error_response()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageNoVirtualToArray( - 7, *message_response_.error_response_, false, target); - } - - // @@protoc_insertion_point(serialize_to_array_end:grpc.reflection.v1alpha.ServerReflectionResponse) - return target; -} - -size_t ServerReflectionResponse::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:grpc.reflection.v1alpha.ServerReflectionResponse) - size_t total_size = 0; - - // optional string valid_host = 1; - if (this->valid_host().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->valid_host()); - } - - // optional .grpc.reflection.v1alpha.ServerReflectionRequest original_request = 2; - if (this->has_original_request()) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( - *this->original_request_); - } - - switch (message_response_case()) { - // optional .grpc.reflection.v1alpha.FileDescriptorResponse file_descriptor_response = 4; - case kFileDescriptorResponse: { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( - *message_response_.file_descriptor_response_); - break; - } - // optional .grpc.reflection.v1alpha.ExtensionNumberResponse all_extension_numbers_response = 5; - case kAllExtensionNumbersResponse: { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( - *message_response_.all_extension_numbers_response_); - break; - } - // optional .grpc.reflection.v1alpha.ListServiceResponse list_services_response = 6; - case kListServicesResponse: { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( - *message_response_.list_services_response_); - break; - } - // optional .grpc.reflection.v1alpha.ErrorResponse error_response = 7; - case kErrorResponse: { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( - *message_response_.error_response_); - break; - } - case MESSAGE_RESPONSE_NOT_SET: { - break; - } - } - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = cached_size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); - return total_size; -} - -void ServerReflectionResponse::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:grpc.reflection.v1alpha.ServerReflectionResponse) - if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__); - const ServerReflectionResponse* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:grpc.reflection.v1alpha.ServerReflectionResponse) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:grpc.reflection.v1alpha.ServerReflectionResponse) - UnsafeMergeFrom(*source); - } -} - -void ServerReflectionResponse::MergeFrom(const ServerReflectionResponse& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:grpc.reflection.v1alpha.ServerReflectionResponse) - if (GOOGLE_PREDICT_TRUE(&from != this)) { - UnsafeMergeFrom(from); - } else { - MergeFromFail(__LINE__); - } -} - -void ServerReflectionResponse::UnsafeMergeFrom(const ServerReflectionResponse& from) { - GOOGLE_DCHECK(&from != this); - switch (from.message_response_case()) { - case kFileDescriptorResponse: { - mutable_file_descriptor_response()->::grpc::reflection::v1alpha::FileDescriptorResponse::MergeFrom(from.file_descriptor_response()); - break; - } - case kAllExtensionNumbersResponse: { - mutable_all_extension_numbers_response()->::grpc::reflection::v1alpha::ExtensionNumberResponse::MergeFrom(from.all_extension_numbers_response()); - break; - } - case kListServicesResponse: { - mutable_list_services_response()->::grpc::reflection::v1alpha::ListServiceResponse::MergeFrom(from.list_services_response()); - break; - } - case kErrorResponse: { - mutable_error_response()->::grpc::reflection::v1alpha::ErrorResponse::MergeFrom(from.error_response()); - break; - } - case MESSAGE_RESPONSE_NOT_SET: { - break; - } - } - if (from.valid_host().size() > 0) { - - valid_host_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.valid_host_); - } - if (from.has_original_request()) { - mutable_original_request()->::grpc::reflection::v1alpha::ServerReflectionRequest::MergeFrom(from.original_request()); - } -} - -void ServerReflectionResponse::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:grpc.reflection.v1alpha.ServerReflectionResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void ServerReflectionResponse::CopyFrom(const ServerReflectionResponse& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:grpc.reflection.v1alpha.ServerReflectionResponse) - if (&from == this) return; - Clear(); - UnsafeMergeFrom(from); -} - -bool ServerReflectionResponse::IsInitialized() const { - - return true; -} - -void ServerReflectionResponse::Swap(ServerReflectionResponse* other) { - if (other == this) return; - InternalSwap(other); -} -void ServerReflectionResponse::InternalSwap(ServerReflectionResponse* other) { - valid_host_.Swap(&other->valid_host_); - std::swap(original_request_, other->original_request_); - std::swap(message_response_, other->message_response_); - std::swap(_oneof_case_[0], other->_oneof_case_[0]); - _internal_metadata_.Swap(&other->_internal_metadata_); - std::swap(_cached_size_, other->_cached_size_); -} - -::google::protobuf::Metadata ServerReflectionResponse::GetMetadata() const { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::Metadata metadata; - metadata.descriptor = ServerReflectionResponse_descriptor_; - metadata.reflection = ServerReflectionResponse_reflection_; - return metadata; -} - -#if PROTOBUF_INLINE_NOT_IN_HEADERS -// ServerReflectionResponse - -// optional string valid_host = 1; -void ServerReflectionResponse::clear_valid_host() { - valid_host_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -const ::std::string& ServerReflectionResponse::valid_host() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) - return valid_host_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ServerReflectionResponse::set_valid_host(const ::std::string& value) { - - valid_host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) -} -void ServerReflectionResponse::set_valid_host(const char* value) { - - valid_host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) -} -void ServerReflectionResponse::set_valid_host(const char* value, size_t size) { - - valid_host_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) -} -::std::string* ServerReflectionResponse::mutable_valid_host() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) - return valid_host_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ServerReflectionResponse::release_valid_host() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) - - return valid_host_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ServerReflectionResponse::set_allocated_valid_host(::std::string* valid_host) { - if (valid_host != NULL) { - - } else { - - } - valid_host_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), valid_host); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.valid_host) -} - -// optional .grpc.reflection.v1alpha.ServerReflectionRequest original_request = 2; -bool ServerReflectionResponse::has_original_request() const { - return this != internal_default_instance() && original_request_ != NULL; -} -void ServerReflectionResponse::clear_original_request() { - if (GetArenaNoVirtual() == NULL && original_request_ != NULL) delete original_request_; - original_request_ = NULL; -} -const ::grpc::reflection::v1alpha::ServerReflectionRequest& ServerReflectionResponse::original_request() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.original_request) - return original_request_ != NULL ? *original_request_ - : *::grpc::reflection::v1alpha::ServerReflectionRequest::internal_default_instance(); -} -::grpc::reflection::v1alpha::ServerReflectionRequest* ServerReflectionResponse::mutable_original_request() { - - if (original_request_ == NULL) { - original_request_ = new ::grpc::reflection::v1alpha::ServerReflectionRequest; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.original_request) - return original_request_; -} -::grpc::reflection::v1alpha::ServerReflectionRequest* ServerReflectionResponse::release_original_request() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.original_request) - - ::grpc::reflection::v1alpha::ServerReflectionRequest* temp = original_request_; - original_request_ = NULL; - return temp; -} -void ServerReflectionResponse::set_allocated_original_request(::grpc::reflection::v1alpha::ServerReflectionRequest* original_request) { - delete original_request_; - original_request_ = original_request; - if (original_request) { - - } else { - - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.original_request) -} - -// optional .grpc.reflection.v1alpha.FileDescriptorResponse file_descriptor_response = 4; -bool ServerReflectionResponse::has_file_descriptor_response() const { - return message_response_case() == kFileDescriptorResponse; -} -void ServerReflectionResponse::set_has_file_descriptor_response() { - _oneof_case_[0] = kFileDescriptorResponse; -} -void ServerReflectionResponse::clear_file_descriptor_response() { - if (has_file_descriptor_response()) { - delete message_response_.file_descriptor_response_; - clear_has_message_response(); - } -} - const ::grpc::reflection::v1alpha::FileDescriptorResponse& ServerReflectionResponse::file_descriptor_response() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.file_descriptor_response) - return has_file_descriptor_response() - ? *message_response_.file_descriptor_response_ - : ::grpc::reflection::v1alpha::FileDescriptorResponse::default_instance(); -} -::grpc::reflection::v1alpha::FileDescriptorResponse* ServerReflectionResponse::mutable_file_descriptor_response() { - if (!has_file_descriptor_response()) { - clear_message_response(); - set_has_file_descriptor_response(); - message_response_.file_descriptor_response_ = new ::grpc::reflection::v1alpha::FileDescriptorResponse; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.file_descriptor_response) - return message_response_.file_descriptor_response_; -} -::grpc::reflection::v1alpha::FileDescriptorResponse* ServerReflectionResponse::release_file_descriptor_response() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.file_descriptor_response) - if (has_file_descriptor_response()) { - clear_has_message_response(); - ::grpc::reflection::v1alpha::FileDescriptorResponse* temp = message_response_.file_descriptor_response_; - message_response_.file_descriptor_response_ = NULL; - return temp; - } else { - return NULL; - } -} -void ServerReflectionResponse::set_allocated_file_descriptor_response(::grpc::reflection::v1alpha::FileDescriptorResponse* file_descriptor_response) { - clear_message_response(); - if (file_descriptor_response) { - set_has_file_descriptor_response(); - message_response_.file_descriptor_response_ = file_descriptor_response; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.file_descriptor_response) -} - -// optional .grpc.reflection.v1alpha.ExtensionNumberResponse all_extension_numbers_response = 5; -bool ServerReflectionResponse::has_all_extension_numbers_response() const { - return message_response_case() == kAllExtensionNumbersResponse; -} -void ServerReflectionResponse::set_has_all_extension_numbers_response() { - _oneof_case_[0] = kAllExtensionNumbersResponse; -} -void ServerReflectionResponse::clear_all_extension_numbers_response() { - if (has_all_extension_numbers_response()) { - delete message_response_.all_extension_numbers_response_; - clear_has_message_response(); - } -} - const ::grpc::reflection::v1alpha::ExtensionNumberResponse& ServerReflectionResponse::all_extension_numbers_response() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.all_extension_numbers_response) - return has_all_extension_numbers_response() - ? *message_response_.all_extension_numbers_response_ - : ::grpc::reflection::v1alpha::ExtensionNumberResponse::default_instance(); -} -::grpc::reflection::v1alpha::ExtensionNumberResponse* ServerReflectionResponse::mutable_all_extension_numbers_response() { - if (!has_all_extension_numbers_response()) { - clear_message_response(); - set_has_all_extension_numbers_response(); - message_response_.all_extension_numbers_response_ = new ::grpc::reflection::v1alpha::ExtensionNumberResponse; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.all_extension_numbers_response) - return message_response_.all_extension_numbers_response_; -} -::grpc::reflection::v1alpha::ExtensionNumberResponse* ServerReflectionResponse::release_all_extension_numbers_response() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.all_extension_numbers_response) - if (has_all_extension_numbers_response()) { - clear_has_message_response(); - ::grpc::reflection::v1alpha::ExtensionNumberResponse* temp = message_response_.all_extension_numbers_response_; - message_response_.all_extension_numbers_response_ = NULL; - return temp; - } else { - return NULL; - } -} -void ServerReflectionResponse::set_allocated_all_extension_numbers_response(::grpc::reflection::v1alpha::ExtensionNumberResponse* all_extension_numbers_response) { - clear_message_response(); - if (all_extension_numbers_response) { - set_has_all_extension_numbers_response(); - message_response_.all_extension_numbers_response_ = all_extension_numbers_response; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.all_extension_numbers_response) -} - -// optional .grpc.reflection.v1alpha.ListServiceResponse list_services_response = 6; -bool ServerReflectionResponse::has_list_services_response() const { - return message_response_case() == kListServicesResponse; -} -void ServerReflectionResponse::set_has_list_services_response() { - _oneof_case_[0] = kListServicesResponse; -} -void ServerReflectionResponse::clear_list_services_response() { - if (has_list_services_response()) { - delete message_response_.list_services_response_; - clear_has_message_response(); - } -} - const ::grpc::reflection::v1alpha::ListServiceResponse& ServerReflectionResponse::list_services_response() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.list_services_response) - return has_list_services_response() - ? *message_response_.list_services_response_ - : ::grpc::reflection::v1alpha::ListServiceResponse::default_instance(); -} -::grpc::reflection::v1alpha::ListServiceResponse* ServerReflectionResponse::mutable_list_services_response() { - if (!has_list_services_response()) { - clear_message_response(); - set_has_list_services_response(); - message_response_.list_services_response_ = new ::grpc::reflection::v1alpha::ListServiceResponse; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.list_services_response) - return message_response_.list_services_response_; -} -::grpc::reflection::v1alpha::ListServiceResponse* ServerReflectionResponse::release_list_services_response() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.list_services_response) - if (has_list_services_response()) { - clear_has_message_response(); - ::grpc::reflection::v1alpha::ListServiceResponse* temp = message_response_.list_services_response_; - message_response_.list_services_response_ = NULL; - return temp; - } else { - return NULL; - } -} -void ServerReflectionResponse::set_allocated_list_services_response(::grpc::reflection::v1alpha::ListServiceResponse* list_services_response) { - clear_message_response(); - if (list_services_response) { - set_has_list_services_response(); - message_response_.list_services_response_ = list_services_response; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.list_services_response) -} - -// optional .grpc.reflection.v1alpha.ErrorResponse error_response = 7; -bool ServerReflectionResponse::has_error_response() const { - return message_response_case() == kErrorResponse; -} -void ServerReflectionResponse::set_has_error_response() { - _oneof_case_[0] = kErrorResponse; -} -void ServerReflectionResponse::clear_error_response() { - if (has_error_response()) { - delete message_response_.error_response_; - clear_has_message_response(); - } -} - const ::grpc::reflection::v1alpha::ErrorResponse& ServerReflectionResponse::error_response() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServerReflectionResponse.error_response) - return has_error_response() - ? *message_response_.error_response_ - : ::grpc::reflection::v1alpha::ErrorResponse::default_instance(); -} -::grpc::reflection::v1alpha::ErrorResponse* ServerReflectionResponse::mutable_error_response() { - if (!has_error_response()) { - clear_message_response(); - set_has_error_response(); - message_response_.error_response_ = new ::grpc::reflection::v1alpha::ErrorResponse; - } - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServerReflectionResponse.error_response) - return message_response_.error_response_; -} -::grpc::reflection::v1alpha::ErrorResponse* ServerReflectionResponse::release_error_response() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServerReflectionResponse.error_response) - if (has_error_response()) { - clear_has_message_response(); - ::grpc::reflection::v1alpha::ErrorResponse* temp = message_response_.error_response_; - message_response_.error_response_ = NULL; - return temp; - } else { - return NULL; - } -} -void ServerReflectionResponse::set_allocated_error_response(::grpc::reflection::v1alpha::ErrorResponse* error_response) { - clear_message_response(); - if (error_response) { - set_has_error_response(); - message_response_.error_response_ = error_response; - } - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServerReflectionResponse.error_response) -} - -bool ServerReflectionResponse::has_message_response() const { - return message_response_case() != MESSAGE_RESPONSE_NOT_SET; -} -void ServerReflectionResponse::clear_has_message_response() { - _oneof_case_[0] = MESSAGE_RESPONSE_NOT_SET; -} -ServerReflectionResponse::MessageResponseCase ServerReflectionResponse::message_response_case() const { - return ServerReflectionResponse::MessageResponseCase(_oneof_case_[0]); -} -inline const ServerReflectionResponse* ServerReflectionResponse::internal_default_instance() { - return &ServerReflectionResponse_default_instance_.get(); -} -#endif // PROTOBUF_INLINE_NOT_IN_HEADERS - -// =================================================================== - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int FileDescriptorResponse::kFileDescriptorProtoFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -FileDescriptorResponse::FileDescriptorResponse() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - if (this != internal_default_instance()) protobuf_InitDefaults_reflection_2eproto(); - SharedCtor(); - // @@protoc_insertion_point(constructor:grpc.reflection.v1alpha.FileDescriptorResponse) -} - -void FileDescriptorResponse::InitAsDefaultInstance() { -} - -FileDescriptorResponse::FileDescriptorResponse(const FileDescriptorResponse& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - SharedCtor(); - UnsafeMergeFrom(from); - // @@protoc_insertion_point(copy_constructor:grpc.reflection.v1alpha.FileDescriptorResponse) -} - -void FileDescriptorResponse::SharedCtor() { - _cached_size_ = 0; -} - -FileDescriptorResponse::~FileDescriptorResponse() { - // @@protoc_insertion_point(destructor:grpc.reflection.v1alpha.FileDescriptorResponse) - SharedDtor(); -} - -void FileDescriptorResponse::SharedDtor() { -} - -void FileDescriptorResponse::SetCachedSize(int size) const { - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); -} -const ::google::protobuf::Descriptor* FileDescriptorResponse::descriptor() { - protobuf_AssignDescriptorsOnce(); - return FileDescriptorResponse_descriptor_; -} - -const FileDescriptorResponse& FileDescriptorResponse::default_instance() { - protobuf_InitDefaults_reflection_2eproto(); - return *internal_default_instance(); -} - -::google::protobuf::internal::ExplicitlyConstructed FileDescriptorResponse_default_instance_; - -FileDescriptorResponse* FileDescriptorResponse::New(::google::protobuf::Arena* arena) const { - FileDescriptorResponse* n = new FileDescriptorResponse; - if (arena != NULL) { - arena->Own(n); - } - return n; -} - -void FileDescriptorResponse::Clear() { -// @@protoc_insertion_point(message_clear_start:grpc.reflection.v1alpha.FileDescriptorResponse) - file_descriptor_proto_.Clear(); -} - -bool FileDescriptorResponse::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:grpc.reflection.v1alpha.FileDescriptorResponse) - for (;;) { - ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // repeated bytes file_descriptor_proto = 1; - case 1: { - if (tag == 10) { - parse_file_descriptor_proto: - DO_(::google::protobuf::internal::WireFormatLite::ReadBytes( - input, this->add_file_descriptor_proto())); - } else { - goto handle_unusual; - } - if (input->ExpectTag(10)) goto parse_file_descriptor_proto; - if (input->ExpectAtEnd()) goto success; - break; - } - - default: { - handle_unusual: - if (tag == 0 || - ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == - ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { - goto success; - } - DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag)); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:grpc.reflection.v1alpha.FileDescriptorResponse) - return true; -failure: - // @@protoc_insertion_point(parse_failure:grpc.reflection.v1alpha.FileDescriptorResponse) - return false; -#undef DO_ -} - -void FileDescriptorResponse::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:grpc.reflection.v1alpha.FileDescriptorResponse) - // repeated bytes file_descriptor_proto = 1; - for (int i = 0; i < this->file_descriptor_proto_size(); i++) { - ::google::protobuf::internal::WireFormatLite::WriteBytes( - 1, this->file_descriptor_proto(i), output); - } - - // @@protoc_insertion_point(serialize_end:grpc.reflection.v1alpha.FileDescriptorResponse) -} - -::google::protobuf::uint8* FileDescriptorResponse::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:grpc.reflection.v1alpha.FileDescriptorResponse) - // repeated bytes file_descriptor_proto = 1; - for (int i = 0; i < this->file_descriptor_proto_size(); i++) { - target = ::google::protobuf::internal::WireFormatLite:: - WriteBytesToArray(1, this->file_descriptor_proto(i), target); - } - - // @@protoc_insertion_point(serialize_to_array_end:grpc.reflection.v1alpha.FileDescriptorResponse) - return target; -} - -size_t FileDescriptorResponse::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:grpc.reflection.v1alpha.FileDescriptorResponse) - size_t total_size = 0; - - // repeated bytes file_descriptor_proto = 1; - total_size += 1 * - ::google::protobuf::internal::FromIntSize(this->file_descriptor_proto_size()); - for (int i = 0; i < this->file_descriptor_proto_size(); i++) { - total_size += ::google::protobuf::internal::WireFormatLite::BytesSize( - this->file_descriptor_proto(i)); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = cached_size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); - return total_size; -} - -void FileDescriptorResponse::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:grpc.reflection.v1alpha.FileDescriptorResponse) - if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__); - const FileDescriptorResponse* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:grpc.reflection.v1alpha.FileDescriptorResponse) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:grpc.reflection.v1alpha.FileDescriptorResponse) - UnsafeMergeFrom(*source); - } -} - -void FileDescriptorResponse::MergeFrom(const FileDescriptorResponse& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:grpc.reflection.v1alpha.FileDescriptorResponse) - if (GOOGLE_PREDICT_TRUE(&from != this)) { - UnsafeMergeFrom(from); - } else { - MergeFromFail(__LINE__); - } -} - -void FileDescriptorResponse::UnsafeMergeFrom(const FileDescriptorResponse& from) { - GOOGLE_DCHECK(&from != this); - file_descriptor_proto_.UnsafeMergeFrom(from.file_descriptor_proto_); -} - -void FileDescriptorResponse::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:grpc.reflection.v1alpha.FileDescriptorResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void FileDescriptorResponse::CopyFrom(const FileDescriptorResponse& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:grpc.reflection.v1alpha.FileDescriptorResponse) - if (&from == this) return; - Clear(); - UnsafeMergeFrom(from); -} - -bool FileDescriptorResponse::IsInitialized() const { - - return true; -} - -void FileDescriptorResponse::Swap(FileDescriptorResponse* other) { - if (other == this) return; - InternalSwap(other); -} -void FileDescriptorResponse::InternalSwap(FileDescriptorResponse* other) { - file_descriptor_proto_.UnsafeArenaSwap(&other->file_descriptor_proto_); - _internal_metadata_.Swap(&other->_internal_metadata_); - std::swap(_cached_size_, other->_cached_size_); -} - -::google::protobuf::Metadata FileDescriptorResponse::GetMetadata() const { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::Metadata metadata; - metadata.descriptor = FileDescriptorResponse_descriptor_; - metadata.reflection = FileDescriptorResponse_reflection_; - return metadata; -} - -#if PROTOBUF_INLINE_NOT_IN_HEADERS -// FileDescriptorResponse - -// repeated bytes file_descriptor_proto = 1; -int FileDescriptorResponse::file_descriptor_proto_size() const { - return file_descriptor_proto_.size(); -} -void FileDescriptorResponse::clear_file_descriptor_proto() { - file_descriptor_proto_.Clear(); -} -const ::std::string& FileDescriptorResponse::file_descriptor_proto(int index) const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return file_descriptor_proto_.Get(index); -} -::std::string* FileDescriptorResponse::mutable_file_descriptor_proto(int index) { - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return file_descriptor_proto_.Mutable(index); -} -void FileDescriptorResponse::set_file_descriptor_proto(int index, const ::std::string& value) { - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - file_descriptor_proto_.Mutable(index)->assign(value); -} -void FileDescriptorResponse::set_file_descriptor_proto(int index, const char* value) { - file_descriptor_proto_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -void FileDescriptorResponse::set_file_descriptor_proto(int index, const void* value, size_t size) { - file_descriptor_proto_.Mutable(index)->assign( - reinterpret_cast(value), size); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -::std::string* FileDescriptorResponse::add_file_descriptor_proto() { - // @@protoc_insertion_point(field_add_mutable:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return file_descriptor_proto_.Add(); -} -void FileDescriptorResponse::add_file_descriptor_proto(const ::std::string& value) { - file_descriptor_proto_.Add()->assign(value); - // @@protoc_insertion_point(field_add:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -void FileDescriptorResponse::add_file_descriptor_proto(const char* value) { - file_descriptor_proto_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -void FileDescriptorResponse::add_file_descriptor_proto(const void* value, size_t size) { - file_descriptor_proto_.Add()->assign(reinterpret_cast(value), size); - // @@protoc_insertion_point(field_add_pointer:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) -} -const ::google::protobuf::RepeatedPtrField< ::std::string>& -FileDescriptorResponse::file_descriptor_proto() const { - // @@protoc_insertion_point(field_list:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return file_descriptor_proto_; -} -::google::protobuf::RepeatedPtrField< ::std::string>* -FileDescriptorResponse::mutable_file_descriptor_proto() { - // @@protoc_insertion_point(field_mutable_list:grpc.reflection.v1alpha.FileDescriptorResponse.file_descriptor_proto) - return &file_descriptor_proto_; -} - -inline const FileDescriptorResponse* FileDescriptorResponse::internal_default_instance() { - return &FileDescriptorResponse_default_instance_.get(); -} -#endif // PROTOBUF_INLINE_NOT_IN_HEADERS - -// =================================================================== - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int ExtensionNumberResponse::kBaseTypeNameFieldNumber; -const int ExtensionNumberResponse::kExtensionNumberFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -ExtensionNumberResponse::ExtensionNumberResponse() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - if (this != internal_default_instance()) protobuf_InitDefaults_reflection_2eproto(); - SharedCtor(); - // @@protoc_insertion_point(constructor:grpc.reflection.v1alpha.ExtensionNumberResponse) -} - -void ExtensionNumberResponse::InitAsDefaultInstance() { -} - -ExtensionNumberResponse::ExtensionNumberResponse(const ExtensionNumberResponse& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - SharedCtor(); - UnsafeMergeFrom(from); - // @@protoc_insertion_point(copy_constructor:grpc.reflection.v1alpha.ExtensionNumberResponse) -} - -void ExtensionNumberResponse::SharedCtor() { - base_type_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - _cached_size_ = 0; -} - -ExtensionNumberResponse::~ExtensionNumberResponse() { - // @@protoc_insertion_point(destructor:grpc.reflection.v1alpha.ExtensionNumberResponse) - SharedDtor(); -} - -void ExtensionNumberResponse::SharedDtor() { - base_type_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void ExtensionNumberResponse::SetCachedSize(int size) const { - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); -} -const ::google::protobuf::Descriptor* ExtensionNumberResponse::descriptor() { - protobuf_AssignDescriptorsOnce(); - return ExtensionNumberResponse_descriptor_; -} - -const ExtensionNumberResponse& ExtensionNumberResponse::default_instance() { - protobuf_InitDefaults_reflection_2eproto(); - return *internal_default_instance(); -} - -::google::protobuf::internal::ExplicitlyConstructed ExtensionNumberResponse_default_instance_; - -ExtensionNumberResponse* ExtensionNumberResponse::New(::google::protobuf::Arena* arena) const { - ExtensionNumberResponse* n = new ExtensionNumberResponse; - if (arena != NULL) { - arena->Own(n); - } - return n; -} - -void ExtensionNumberResponse::Clear() { -// @@protoc_insertion_point(message_clear_start:grpc.reflection.v1alpha.ExtensionNumberResponse) - base_type_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - extension_number_.Clear(); -} - -bool ExtensionNumberResponse::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:grpc.reflection.v1alpha.ExtensionNumberResponse) - for (;;) { - ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // optional string base_type_name = 1; - case 1: { - if (tag == 10) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_base_type_name())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->base_type_name().data(), this->base_type_name().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name")); - } else { - goto handle_unusual; - } - if (input->ExpectTag(18)) goto parse_extension_number; - break; - } - - // repeated int32 extension_number = 2; - case 2: { - if (tag == 18) { - parse_extension_number: - DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, this->mutable_extension_number()))); - } else if (tag == 16) { - DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - 1, 18, input, this->mutable_extension_number()))); - } else { - goto handle_unusual; - } - if (input->ExpectAtEnd()) goto success; - break; - } - - default: { - handle_unusual: - if (tag == 0 || - ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == - ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { - goto success; - } - DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag)); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:grpc.reflection.v1alpha.ExtensionNumberResponse) - return true; -failure: - // @@protoc_insertion_point(parse_failure:grpc.reflection.v1alpha.ExtensionNumberResponse) - return false; -#undef DO_ -} - -void ExtensionNumberResponse::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:grpc.reflection.v1alpha.ExtensionNumberResponse) - // optional string base_type_name = 1; - if (this->base_type_name().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->base_type_name().data(), this->base_type_name().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->base_type_name(), output); - } - - // repeated int32 extension_number = 2; - if (this->extension_number_size() > 0) { - ::google::protobuf::internal::WireFormatLite::WriteTag(2, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output); - output->WriteVarint32(_extension_number_cached_byte_size_); - } - for (int i = 0; i < this->extension_number_size(); i++) { - ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag( - this->extension_number(i), output); - } - - // @@protoc_insertion_point(serialize_end:grpc.reflection.v1alpha.ExtensionNumberResponse) -} - -::google::protobuf::uint8* ExtensionNumberResponse::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:grpc.reflection.v1alpha.ExtensionNumberResponse) - // optional string base_type_name = 1; - if (this->base_type_name().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->base_type_name().data(), this->base_type_name().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->base_type_name(), target); - } - - // repeated int32 extension_number = 2; - if (this->extension_number_size() > 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray( - 2, - ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, - target); - target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray( - _extension_number_cached_byte_size_, target); - } - for (int i = 0; i < this->extension_number_size(); i++) { - target = ::google::protobuf::internal::WireFormatLite:: - WriteInt32NoTagToArray(this->extension_number(i), target); - } - - // @@protoc_insertion_point(serialize_to_array_end:grpc.reflection.v1alpha.ExtensionNumberResponse) - return target; -} - -size_t ExtensionNumberResponse::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:grpc.reflection.v1alpha.ExtensionNumberResponse) - size_t total_size = 0; - - // optional string base_type_name = 1; - if (this->base_type_name().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->base_type_name()); - } - - // repeated int32 extension_number = 2; - { - size_t data_size = 0; - unsigned int count = this->extension_number_size(); - for (unsigned int i = 0; i < count; i++) { - data_size += ::google::protobuf::internal::WireFormatLite:: - Int32Size(this->extension_number(i)); - } - if (data_size > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size(data_size); - } - int cached_size = ::google::protobuf::internal::ToCachedSize(data_size); - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _extension_number_cached_byte_size_ = cached_size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); - total_size += data_size; - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = cached_size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); - return total_size; -} - -void ExtensionNumberResponse::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:grpc.reflection.v1alpha.ExtensionNumberResponse) - if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__); - const ExtensionNumberResponse* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:grpc.reflection.v1alpha.ExtensionNumberResponse) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:grpc.reflection.v1alpha.ExtensionNumberResponse) - UnsafeMergeFrom(*source); - } -} - -void ExtensionNumberResponse::MergeFrom(const ExtensionNumberResponse& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:grpc.reflection.v1alpha.ExtensionNumberResponse) - if (GOOGLE_PREDICT_TRUE(&from != this)) { - UnsafeMergeFrom(from); - } else { - MergeFromFail(__LINE__); - } -} - -void ExtensionNumberResponse::UnsafeMergeFrom(const ExtensionNumberResponse& from) { - GOOGLE_DCHECK(&from != this); - extension_number_.UnsafeMergeFrom(from.extension_number_); - if (from.base_type_name().size() > 0) { - - base_type_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.base_type_name_); - } -} - -void ExtensionNumberResponse::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:grpc.reflection.v1alpha.ExtensionNumberResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void ExtensionNumberResponse::CopyFrom(const ExtensionNumberResponse& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:grpc.reflection.v1alpha.ExtensionNumberResponse) - if (&from == this) return; - Clear(); - UnsafeMergeFrom(from); -} - -bool ExtensionNumberResponse::IsInitialized() const { - - return true; -} - -void ExtensionNumberResponse::Swap(ExtensionNumberResponse* other) { - if (other == this) return; - InternalSwap(other); -} -void ExtensionNumberResponse::InternalSwap(ExtensionNumberResponse* other) { - base_type_name_.Swap(&other->base_type_name_); - extension_number_.UnsafeArenaSwap(&other->extension_number_); - _internal_metadata_.Swap(&other->_internal_metadata_); - std::swap(_cached_size_, other->_cached_size_); -} - -::google::protobuf::Metadata ExtensionNumberResponse::GetMetadata() const { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::Metadata metadata; - metadata.descriptor = ExtensionNumberResponse_descriptor_; - metadata.reflection = ExtensionNumberResponse_reflection_; - return metadata; -} - -#if PROTOBUF_INLINE_NOT_IN_HEADERS -// ExtensionNumberResponse - -// optional string base_type_name = 1; -void ExtensionNumberResponse::clear_base_type_name() { - base_type_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -const ::std::string& ExtensionNumberResponse::base_type_name() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) - return base_type_name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ExtensionNumberResponse::set_base_type_name(const ::std::string& value) { - - base_type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) -} -void ExtensionNumberResponse::set_base_type_name(const char* value) { - - base_type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) -} -void ExtensionNumberResponse::set_base_type_name(const char* value, size_t size) { - - base_type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) -} -::std::string* ExtensionNumberResponse::mutable_base_type_name() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) - return base_type_name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ExtensionNumberResponse::release_base_type_name() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) - - return base_type_name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ExtensionNumberResponse::set_allocated_base_type_name(::std::string* base_type_name) { - if (base_type_name != NULL) { - - } else { - - } - base_type_name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), base_type_name); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ExtensionNumberResponse.base_type_name) -} - -// repeated int32 extension_number = 2; -int ExtensionNumberResponse::extension_number_size() const { - return extension_number_.size(); -} -void ExtensionNumberResponse::clear_extension_number() { - extension_number_.Clear(); -} -::google::protobuf::int32 ExtensionNumberResponse::extension_number(int index) const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) - return extension_number_.Get(index); -} -void ExtensionNumberResponse::set_extension_number(int index, ::google::protobuf::int32 value) { - extension_number_.Set(index, value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) -} -void ExtensionNumberResponse::add_extension_number(::google::protobuf::int32 value) { - extension_number_.Add(value); - // @@protoc_insertion_point(field_add:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) -} -const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& -ExtensionNumberResponse::extension_number() const { - // @@protoc_insertion_point(field_list:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) - return extension_number_; -} -::google::protobuf::RepeatedField< ::google::protobuf::int32 >* -ExtensionNumberResponse::mutable_extension_number() { - // @@protoc_insertion_point(field_mutable_list:grpc.reflection.v1alpha.ExtensionNumberResponse.extension_number) - return &extension_number_; -} - -inline const ExtensionNumberResponse* ExtensionNumberResponse::internal_default_instance() { - return &ExtensionNumberResponse_default_instance_.get(); -} -#endif // PROTOBUF_INLINE_NOT_IN_HEADERS - -// =================================================================== - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int ListServiceResponse::kServiceFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -ListServiceResponse::ListServiceResponse() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - if (this != internal_default_instance()) protobuf_InitDefaults_reflection_2eproto(); - SharedCtor(); - // @@protoc_insertion_point(constructor:grpc.reflection.v1alpha.ListServiceResponse) -} - -void ListServiceResponse::InitAsDefaultInstance() { -} - -ListServiceResponse::ListServiceResponse(const ListServiceResponse& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - SharedCtor(); - UnsafeMergeFrom(from); - // @@protoc_insertion_point(copy_constructor:grpc.reflection.v1alpha.ListServiceResponse) -} - -void ListServiceResponse::SharedCtor() { - _cached_size_ = 0; -} - -ListServiceResponse::~ListServiceResponse() { - // @@protoc_insertion_point(destructor:grpc.reflection.v1alpha.ListServiceResponse) - SharedDtor(); -} - -void ListServiceResponse::SharedDtor() { -} - -void ListServiceResponse::SetCachedSize(int size) const { - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); -} -const ::google::protobuf::Descriptor* ListServiceResponse::descriptor() { - protobuf_AssignDescriptorsOnce(); - return ListServiceResponse_descriptor_; -} - -const ListServiceResponse& ListServiceResponse::default_instance() { - protobuf_InitDefaults_reflection_2eproto(); - return *internal_default_instance(); -} - -::google::protobuf::internal::ExplicitlyConstructed ListServiceResponse_default_instance_; - -ListServiceResponse* ListServiceResponse::New(::google::protobuf::Arena* arena) const { - ListServiceResponse* n = new ListServiceResponse; - if (arena != NULL) { - arena->Own(n); - } - return n; -} - -void ListServiceResponse::Clear() { -// @@protoc_insertion_point(message_clear_start:grpc.reflection.v1alpha.ListServiceResponse) - service_.Clear(); -} - -bool ListServiceResponse::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:grpc.reflection.v1alpha.ListServiceResponse) - for (;;) { - ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // repeated .grpc.reflection.v1alpha.ServiceResponse service = 1; - case 1: { - if (tag == 10) { - DO_(input->IncrementRecursionDepth()); - parse_loop_service: - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( - input, add_service())); - } else { - goto handle_unusual; - } - if (input->ExpectTag(10)) goto parse_loop_service; - input->UnsafeDecrementRecursionDepth(); - if (input->ExpectAtEnd()) goto success; - break; - } - - default: { - handle_unusual: - if (tag == 0 || - ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == - ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { - goto success; - } - DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag)); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:grpc.reflection.v1alpha.ListServiceResponse) - return true; -failure: - // @@protoc_insertion_point(parse_failure:grpc.reflection.v1alpha.ListServiceResponse) - return false; -#undef DO_ -} - -void ListServiceResponse::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:grpc.reflection.v1alpha.ListServiceResponse) - // repeated .grpc.reflection.v1alpha.ServiceResponse service = 1; - for (unsigned int i = 0, n = this->service_size(); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 1, this->service(i), output); - } - - // @@protoc_insertion_point(serialize_end:grpc.reflection.v1alpha.ListServiceResponse) -} - -::google::protobuf::uint8* ListServiceResponse::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:grpc.reflection.v1alpha.ListServiceResponse) - // repeated .grpc.reflection.v1alpha.ServiceResponse service = 1; - for (unsigned int i = 0, n = this->service_size(); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageNoVirtualToArray( - 1, this->service(i), false, target); - } - - // @@protoc_insertion_point(serialize_to_array_end:grpc.reflection.v1alpha.ListServiceResponse) - return target; -} - -size_t ListServiceResponse::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:grpc.reflection.v1alpha.ListServiceResponse) - size_t total_size = 0; - - // repeated .grpc.reflection.v1alpha.ServiceResponse service = 1; - { - unsigned int count = this->service_size(); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( - this->service(i)); - } - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = cached_size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); - return total_size; -} - -void ListServiceResponse::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:grpc.reflection.v1alpha.ListServiceResponse) - if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__); - const ListServiceResponse* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:grpc.reflection.v1alpha.ListServiceResponse) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:grpc.reflection.v1alpha.ListServiceResponse) - UnsafeMergeFrom(*source); - } -} - -void ListServiceResponse::MergeFrom(const ListServiceResponse& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:grpc.reflection.v1alpha.ListServiceResponse) - if (GOOGLE_PREDICT_TRUE(&from != this)) { - UnsafeMergeFrom(from); - } else { - MergeFromFail(__LINE__); - } -} - -void ListServiceResponse::UnsafeMergeFrom(const ListServiceResponse& from) { - GOOGLE_DCHECK(&from != this); - service_.MergeFrom(from.service_); -} - -void ListServiceResponse::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:grpc.reflection.v1alpha.ListServiceResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void ListServiceResponse::CopyFrom(const ListServiceResponse& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:grpc.reflection.v1alpha.ListServiceResponse) - if (&from == this) return; - Clear(); - UnsafeMergeFrom(from); -} - -bool ListServiceResponse::IsInitialized() const { - - return true; -} - -void ListServiceResponse::Swap(ListServiceResponse* other) { - if (other == this) return; - InternalSwap(other); -} -void ListServiceResponse::InternalSwap(ListServiceResponse* other) { - service_.UnsafeArenaSwap(&other->service_); - _internal_metadata_.Swap(&other->_internal_metadata_); - std::swap(_cached_size_, other->_cached_size_); -} - -::google::protobuf::Metadata ListServiceResponse::GetMetadata() const { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::Metadata metadata; - metadata.descriptor = ListServiceResponse_descriptor_; - metadata.reflection = ListServiceResponse_reflection_; - return metadata; -} - -#if PROTOBUF_INLINE_NOT_IN_HEADERS -// ListServiceResponse - -// repeated .grpc.reflection.v1alpha.ServiceResponse service = 1; -int ListServiceResponse::service_size() const { - return service_.size(); -} -void ListServiceResponse::clear_service() { - service_.Clear(); -} -const ::grpc::reflection::v1alpha::ServiceResponse& ListServiceResponse::service(int index) const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ListServiceResponse.service) - return service_.Get(index); -} -::grpc::reflection::v1alpha::ServiceResponse* ListServiceResponse::mutable_service(int index) { - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ListServiceResponse.service) - return service_.Mutable(index); -} -::grpc::reflection::v1alpha::ServiceResponse* ListServiceResponse::add_service() { - // @@protoc_insertion_point(field_add:grpc.reflection.v1alpha.ListServiceResponse.service) - return service_.Add(); -} -::google::protobuf::RepeatedPtrField< ::grpc::reflection::v1alpha::ServiceResponse >* -ListServiceResponse::mutable_service() { - // @@protoc_insertion_point(field_mutable_list:grpc.reflection.v1alpha.ListServiceResponse.service) - return &service_; -} -const ::google::protobuf::RepeatedPtrField< ::grpc::reflection::v1alpha::ServiceResponse >& -ListServiceResponse::service() const { - // @@protoc_insertion_point(field_list:grpc.reflection.v1alpha.ListServiceResponse.service) - return service_; -} - -inline const ListServiceResponse* ListServiceResponse::internal_default_instance() { - return &ListServiceResponse_default_instance_.get(); -} -#endif // PROTOBUF_INLINE_NOT_IN_HEADERS - -// =================================================================== - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int ServiceResponse::kNameFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -ServiceResponse::ServiceResponse() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - if (this != internal_default_instance()) protobuf_InitDefaults_reflection_2eproto(); - SharedCtor(); - // @@protoc_insertion_point(constructor:grpc.reflection.v1alpha.ServiceResponse) -} - -void ServiceResponse::InitAsDefaultInstance() { -} - -ServiceResponse::ServiceResponse(const ServiceResponse& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - SharedCtor(); - UnsafeMergeFrom(from); - // @@protoc_insertion_point(copy_constructor:grpc.reflection.v1alpha.ServiceResponse) -} - -void ServiceResponse::SharedCtor() { - name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - _cached_size_ = 0; -} - -ServiceResponse::~ServiceResponse() { - // @@protoc_insertion_point(destructor:grpc.reflection.v1alpha.ServiceResponse) - SharedDtor(); -} - -void ServiceResponse::SharedDtor() { - name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void ServiceResponse::SetCachedSize(int size) const { - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); -} -const ::google::protobuf::Descriptor* ServiceResponse::descriptor() { - protobuf_AssignDescriptorsOnce(); - return ServiceResponse_descriptor_; -} - -const ServiceResponse& ServiceResponse::default_instance() { - protobuf_InitDefaults_reflection_2eproto(); - return *internal_default_instance(); -} - -::google::protobuf::internal::ExplicitlyConstructed ServiceResponse_default_instance_; - -ServiceResponse* ServiceResponse::New(::google::protobuf::Arena* arena) const { - ServiceResponse* n = new ServiceResponse; - if (arena != NULL) { - arena->Own(n); - } - return n; -} - -void ServiceResponse::Clear() { -// @@protoc_insertion_point(message_clear_start:grpc.reflection.v1alpha.ServiceResponse) - name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -bool ServiceResponse::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:grpc.reflection.v1alpha.ServiceResponse) - for (;;) { - ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // optional string name = 1; - case 1: { - if (tag == 10) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_name())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->name().data(), this->name().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ServiceResponse.name")); - } else { - goto handle_unusual; - } - if (input->ExpectAtEnd()) goto success; - break; - } - - default: { - handle_unusual: - if (tag == 0 || - ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == - ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { - goto success; - } - DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag)); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:grpc.reflection.v1alpha.ServiceResponse) - return true; -failure: - // @@protoc_insertion_point(parse_failure:grpc.reflection.v1alpha.ServiceResponse) - return false; -#undef DO_ -} - -void ServiceResponse::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:grpc.reflection.v1alpha.ServiceResponse) - // optional string name = 1; - if (this->name().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->name().data(), this->name().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServiceResponse.name"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->name(), output); - } - - // @@protoc_insertion_point(serialize_end:grpc.reflection.v1alpha.ServiceResponse) -} - -::google::protobuf::uint8* ServiceResponse::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:grpc.reflection.v1alpha.ServiceResponse) - // optional string name = 1; - if (this->name().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->name().data(), this->name().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ServiceResponse.name"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->name(), target); - } - - // @@protoc_insertion_point(serialize_to_array_end:grpc.reflection.v1alpha.ServiceResponse) - return target; -} - -size_t ServiceResponse::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:grpc.reflection.v1alpha.ServiceResponse) - size_t total_size = 0; - - // optional string name = 1; - if (this->name().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->name()); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = cached_size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); - return total_size; -} - -void ServiceResponse::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:grpc.reflection.v1alpha.ServiceResponse) - if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__); - const ServiceResponse* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:grpc.reflection.v1alpha.ServiceResponse) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:grpc.reflection.v1alpha.ServiceResponse) - UnsafeMergeFrom(*source); - } -} - -void ServiceResponse::MergeFrom(const ServiceResponse& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:grpc.reflection.v1alpha.ServiceResponse) - if (GOOGLE_PREDICT_TRUE(&from != this)) { - UnsafeMergeFrom(from); - } else { - MergeFromFail(__LINE__); - } -} - -void ServiceResponse::UnsafeMergeFrom(const ServiceResponse& from) { - GOOGLE_DCHECK(&from != this); - if (from.name().size() > 0) { - - name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); - } -} - -void ServiceResponse::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:grpc.reflection.v1alpha.ServiceResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void ServiceResponse::CopyFrom(const ServiceResponse& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:grpc.reflection.v1alpha.ServiceResponse) - if (&from == this) return; - Clear(); - UnsafeMergeFrom(from); -} - -bool ServiceResponse::IsInitialized() const { - - return true; -} - -void ServiceResponse::Swap(ServiceResponse* other) { - if (other == this) return; - InternalSwap(other); -} -void ServiceResponse::InternalSwap(ServiceResponse* other) { - name_.Swap(&other->name_); - _internal_metadata_.Swap(&other->_internal_metadata_); - std::swap(_cached_size_, other->_cached_size_); -} - -::google::protobuf::Metadata ServiceResponse::GetMetadata() const { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::Metadata metadata; - metadata.descriptor = ServiceResponse_descriptor_; - metadata.reflection = ServiceResponse_reflection_; - return metadata; -} - -#if PROTOBUF_INLINE_NOT_IN_HEADERS -// ServiceResponse - -// optional string name = 1; -void ServiceResponse::clear_name() { - name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -const ::std::string& ServiceResponse::name() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ServiceResponse.name) - return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ServiceResponse::set_name(const ::std::string& value) { - - name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ServiceResponse.name) -} -void ServiceResponse::set_name(const char* value) { - - name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ServiceResponse.name) -} -void ServiceResponse::set_name(const char* value, size_t size) { - - name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ServiceResponse.name) -} -::std::string* ServiceResponse::mutable_name() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ServiceResponse.name) - return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ServiceResponse::release_name() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ServiceResponse.name) - - return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ServiceResponse::set_allocated_name(::std::string* name) { - if (name != NULL) { - - } else { - - } - name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ServiceResponse.name) -} - -inline const ServiceResponse* ServiceResponse::internal_default_instance() { - return &ServiceResponse_default_instance_.get(); -} -#endif // PROTOBUF_INLINE_NOT_IN_HEADERS - -// =================================================================== - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int ErrorResponse::kErrorCodeFieldNumber; -const int ErrorResponse::kErrorMessageFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -ErrorResponse::ErrorResponse() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - if (this != internal_default_instance()) protobuf_InitDefaults_reflection_2eproto(); - SharedCtor(); - // @@protoc_insertion_point(constructor:grpc.reflection.v1alpha.ErrorResponse) -} - -void ErrorResponse::InitAsDefaultInstance() { -} - -ErrorResponse::ErrorResponse(const ErrorResponse& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - SharedCtor(); - UnsafeMergeFrom(from); - // @@protoc_insertion_point(copy_constructor:grpc.reflection.v1alpha.ErrorResponse) -} - -void ErrorResponse::SharedCtor() { - error_message_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - error_code_ = 0; - _cached_size_ = 0; -} - -ErrorResponse::~ErrorResponse() { - // @@protoc_insertion_point(destructor:grpc.reflection.v1alpha.ErrorResponse) - SharedDtor(); -} - -void ErrorResponse::SharedDtor() { - error_message_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void ErrorResponse::SetCachedSize(int size) const { - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); -} -const ::google::protobuf::Descriptor* ErrorResponse::descriptor() { - protobuf_AssignDescriptorsOnce(); - return ErrorResponse_descriptor_; -} - -const ErrorResponse& ErrorResponse::default_instance() { - protobuf_InitDefaults_reflection_2eproto(); - return *internal_default_instance(); -} - -::google::protobuf::internal::ExplicitlyConstructed ErrorResponse_default_instance_; - -ErrorResponse* ErrorResponse::New(::google::protobuf::Arena* arena) const { - ErrorResponse* n = new ErrorResponse; - if (arena != NULL) { - arena->Own(n); - } - return n; -} - -void ErrorResponse::Clear() { -// @@protoc_insertion_point(message_clear_start:grpc.reflection.v1alpha.ErrorResponse) - error_code_ = 0; - error_message_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -bool ErrorResponse::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:grpc.reflection.v1alpha.ErrorResponse) - for (;;) { - ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // optional int32 error_code = 1; - case 1: { - if (tag == 8) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &error_code_))); - } else { - goto handle_unusual; - } - if (input->ExpectTag(18)) goto parse_error_message; - break; - } - - // optional string error_message = 2; - case 2: { - if (tag == 18) { - parse_error_message: - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_error_message())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->error_message().data(), this->error_message().length(), - ::google::protobuf::internal::WireFormatLite::PARSE, - "grpc.reflection.v1alpha.ErrorResponse.error_message")); - } else { - goto handle_unusual; - } - if (input->ExpectAtEnd()) goto success; - break; - } - - default: { - handle_unusual: - if (tag == 0 || - ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == - ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { - goto success; - } - DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag)); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:grpc.reflection.v1alpha.ErrorResponse) - return true; -failure: - // @@protoc_insertion_point(parse_failure:grpc.reflection.v1alpha.ErrorResponse) - return false; -#undef DO_ -} - -void ErrorResponse::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:grpc.reflection.v1alpha.ErrorResponse) - // optional int32 error_code = 1; - if (this->error_code() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->error_code(), output); - } - - // optional string error_message = 2; - if (this->error_message().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->error_message().data(), this->error_message().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ErrorResponse.error_message"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 2, this->error_message(), output); - } - - // @@protoc_insertion_point(serialize_end:grpc.reflection.v1alpha.ErrorResponse) -} - -::google::protobuf::uint8* ErrorResponse::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:grpc.reflection.v1alpha.ErrorResponse) - // optional int32 error_code = 1; - if (this->error_code() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->error_code(), target); - } - - // optional string error_message = 2; - if (this->error_message().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->error_message().data(), this->error_message().length(), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "grpc.reflection.v1alpha.ErrorResponse.error_message"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 2, this->error_message(), target); - } - - // @@protoc_insertion_point(serialize_to_array_end:grpc.reflection.v1alpha.ErrorResponse) - return target; -} - -size_t ErrorResponse::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:grpc.reflection.v1alpha.ErrorResponse) - size_t total_size = 0; - - // optional int32 error_code = 1; - if (this->error_code() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->error_code()); - } - - // optional string error_message = 2; - if (this->error_message().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->error_message()); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); - _cached_size_ = cached_size; - GOOGLE_SAFE_CONCURRENT_WRITES_END(); - return total_size; -} - -void ErrorResponse::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:grpc.reflection.v1alpha.ErrorResponse) - if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__); - const ErrorResponse* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:grpc.reflection.v1alpha.ErrorResponse) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:grpc.reflection.v1alpha.ErrorResponse) - UnsafeMergeFrom(*source); - } -} - -void ErrorResponse::MergeFrom(const ErrorResponse& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:grpc.reflection.v1alpha.ErrorResponse) - if (GOOGLE_PREDICT_TRUE(&from != this)) { - UnsafeMergeFrom(from); - } else { - MergeFromFail(__LINE__); - } -} - -void ErrorResponse::UnsafeMergeFrom(const ErrorResponse& from) { - GOOGLE_DCHECK(&from != this); - if (from.error_code() != 0) { - set_error_code(from.error_code()); - } - if (from.error_message().size() > 0) { - - error_message_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.error_message_); - } -} - -void ErrorResponse::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:grpc.reflection.v1alpha.ErrorResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void ErrorResponse::CopyFrom(const ErrorResponse& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:grpc.reflection.v1alpha.ErrorResponse) - if (&from == this) return; - Clear(); - UnsafeMergeFrom(from); -} - -bool ErrorResponse::IsInitialized() const { - - return true; -} - -void ErrorResponse::Swap(ErrorResponse* other) { - if (other == this) return; - InternalSwap(other); -} -void ErrorResponse::InternalSwap(ErrorResponse* other) { - std::swap(error_code_, other->error_code_); - error_message_.Swap(&other->error_message_); - _internal_metadata_.Swap(&other->_internal_metadata_); - std::swap(_cached_size_, other->_cached_size_); -} - -::google::protobuf::Metadata ErrorResponse::GetMetadata() const { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::Metadata metadata; - metadata.descriptor = ErrorResponse_descriptor_; - metadata.reflection = ErrorResponse_reflection_; - return metadata; -} - -#if PROTOBUF_INLINE_NOT_IN_HEADERS -// ErrorResponse - -// optional int32 error_code = 1; -void ErrorResponse::clear_error_code() { - error_code_ = 0; -} -::google::protobuf::int32 ErrorResponse::error_code() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ErrorResponse.error_code) - return error_code_; -} -void ErrorResponse::set_error_code(::google::protobuf::int32 value) { - - error_code_ = value; - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ErrorResponse.error_code) -} - -// optional string error_message = 2; -void ErrorResponse::clear_error_message() { - error_message_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -const ::std::string& ErrorResponse::error_message() const { - // @@protoc_insertion_point(field_get:grpc.reflection.v1alpha.ErrorResponse.error_message) - return error_message_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ErrorResponse::set_error_message(const ::std::string& value) { - - error_message_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:grpc.reflection.v1alpha.ErrorResponse.error_message) -} -void ErrorResponse::set_error_message(const char* value) { - - error_message_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:grpc.reflection.v1alpha.ErrorResponse.error_message) -} -void ErrorResponse::set_error_message(const char* value, size_t size) { - - error_message_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:grpc.reflection.v1alpha.ErrorResponse.error_message) -} -::std::string* ErrorResponse::mutable_error_message() { - - // @@protoc_insertion_point(field_mutable:grpc.reflection.v1alpha.ErrorResponse.error_message) - return error_message_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -::std::string* ErrorResponse::release_error_message() { - // @@protoc_insertion_point(field_release:grpc.reflection.v1alpha.ErrorResponse.error_message) - - return error_message_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -void ErrorResponse::set_allocated_error_message(::std::string* error_message) { - if (error_message != NULL) { - - } else { - - } - error_message_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), error_message); - // @@protoc_insertion_point(field_set_allocated:grpc.reflection.v1alpha.ErrorResponse.error_message) -} - -inline const ErrorResponse* ErrorResponse::internal_default_instance() { - return &ErrorResponse_default_instance_.get(); -} -#endif // PROTOBUF_INLINE_NOT_IN_HEADERS - -// @@protoc_insertion_point(namespace_scope) - -} // namespace v1alpha -} // namespace reflection -} // namespace grpc - -// @@protoc_insertion_point(global_scope) diff --git a/test/cpp/util/proto_reflection_descriptor_database.h b/test/cpp/util/proto_reflection_descriptor_database.h index dfa36044d9e..4637c043f11 100644 --- a/test/cpp/util/proto_reflection_descriptor_database.h +++ b/test/cpp/util/proto_reflection_descriptor_database.h @@ -38,14 +38,9 @@ #include #include -// GRPC_NO_GENERATED_CODE indicates generated pb files should not be used -#ifdef GRPC_NO_GENERATED_CODE -#include "src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h" -#else -#include -#endif // GRPC_NO_GENERATED_CODE #include #include +#include "src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h" namespace grpc { diff --git a/tools/codegen/extensions/gen_reflection_proto.sh b/tools/codegen/extensions/gen_reflection_proto.sh deleted file mode 100755 index ea7689f7e88..00000000000 --- a/tools/codegen/extensions/gen_reflection_proto.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash - -# Copyright 2016, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -set -e -cd $(dirname $0)/../../.. - -PROTO_DIR="src/proto/grpc/reflection/v1alpha" -PROTO_FILE="reflection" -HEADER_DIR="include/grpc++/ext" -SRC_DIR="src/cpp/ext" -INCLUDE_DIR="grpc++/ext" -TMP_DIR="tmp" - -if hash grpc_cpp_plugin 2>/dev/null; then - GRPC_PLUGIN=$(which grpc_cpp_plugin) -else - if [ -f bins/opt/grpc_cpp_plugin ]; then - GRPC_PLUGIN="bins/opt/grpc_cpp_plugin" - else - echo "gRPC protoc plugin not found" - exit 1 - fi -fi - -if hash protoc 2>/dev/null; then - PROTOC=$(which protoc) -else - if [ -f bins/opt/protobuf/protoc ]; then - PROTOC="bins/opt/protobuf/protoc" - else - echo "protoc not found" - exit 1 - fi -fi - -TMP_DIR=${TMP_DIR}_${PROTO_FILE} - -[ ! -d $HEADER_DIR ] && mkdir -p $HEADER_DIR || : -[ ! -d $SRC_DIR ] && mkdir -p $SRC_DIR || : -[ ! -d $TMP_DIR ] && mkdir -p $TMP_DIR || : - -$PROTOC -I$PROTO_DIR --cpp_out=$TMP_DIR ${PROTO_DIR}/${PROTO_FILE}.proto -$PROTOC -I$PROTO_DIR --grpc_out=$TMP_DIR --plugin=protoc-gen-grpc=${GRPC_PLUGIN} ${PROTO_DIR}/${PROTO_FILE}.proto - -sed -i "s/\"${PROTO_FILE}.pb.h\"/<${INCLUDE_DIR/\//\\\/}\/${PROTO_FILE}.pb.h>/g" ${TMP_DIR}/${PROTO_FILE}.pb.cc -sed -i "s/\"${PROTO_FILE}.pb.h\"/<${INCLUDE_DIR/\//\\\/}\/${PROTO_FILE}.pb.h>/g" ${TMP_DIR}/${PROTO_FILE}.grpc.pb.h -sed -i "s/\"${PROTO_FILE}.pb.h\"/<${INCLUDE_DIR/\//\\\/}\/${PROTO_FILE}.pb.h>/g" ${TMP_DIR}/${PROTO_FILE}.grpc.pb.cc -sed -i "s/\"${PROTO_FILE}.grpc.pb.h\"/<${INCLUDE_DIR/\//\\\/}\/${PROTO_FILE}.grpc.pb.h>/g" ${TMP_DIR}/${PROTO_FILE}.grpc.pb.cc - -sed -i "1s/.*/\/\/ Generated by tools\/codegen\/extensions\/gen_reflection_proto.sh/g" ${TMP_DIR}/*.pb.h -sed -i "1s/.*/\/\/ Generated by tools\/codegen\/extensions\/gen_reflection_proto.sh/g" ${TMP_DIR}/*.pb.cc - -/bin/cp LICENSE ${TMP_DIR}/TMP_LICENSE -sed -i -e "s/./ &/" -e "s/.*/ \*&/" ${TMP_DIR}/TMP_LICENSE -sed -i -r "\$a\ *\n *\/\n\n" ${TMP_DIR}/TMP_LICENSE - -sed -i -e "1s/^/ *\n/" -e "1s/^/\/*\n/" ${TMP_DIR}/*.pb.h -sed -i -e "1s/^/ *\n/" -e "1s/^/\/*\n/" ${TMP_DIR}/*.pb.cc - -sed -i "2r ${TMP_DIR}/TMP_LICENSE" ${TMP_DIR}/*.pb.h -sed -i "2r ${TMP_DIR}/TMP_LICENSE" ${TMP_DIR}/*.pb.cc - -/bin/mv ${TMP_DIR}/${PROTO_FILE}.pb.h ${HEADER_DIR} -/bin/mv ${TMP_DIR}/${PROTO_FILE}.grpc.pb.h ${HEADER_DIR} -/bin/mv ${TMP_DIR}/${PROTO_FILE}.pb.cc ${SRC_DIR} -/bin/mv ${TMP_DIR}/${PROTO_FILE}.grpc.pb.cc ${SRC_DIR} -/bin/rm -r $TMP_DIR diff --git a/tools/distrib/check_generated_pb_files.sh b/tools/distrib/check_generated_pb_files.sh deleted file mode 100755 index 6b93895484c..00000000000 --- a/tools/distrib/check_generated_pb_files.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# Copyright 2016, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -set -ex - -# change to root directory -cd $(dirname $0)/../.. - -# build grpc_check_generated_pb_files docker image -docker build -t grpc_check_generated_pb_files tools/dockerfile/grpc_check_generated_pb_files - -# run check_pb_files against the checked out codebase -docker run -e TEST=$TEST --rm=true -v ${HOST_GIT_ROOT:-`pwd`}:/var/local/jenkins/grpc -t grpc_check_generated_pb_files /var/local/jenkins/grpc/tools/dockerfile/grpc_check_generated_pb_files/check_pb_files.sh - -# If the test fails, please make sure your protobuf submodule is up-to-date and run -# tools/codegen/extensions/gen_reflection_proto.sh to update the generated files. diff --git a/tools/dockerfile/grpc_check_generated_pb_files/Dockerfile b/tools/dockerfile/grpc_check_generated_pb_files/Dockerfile deleted file mode 100644 index d19bc67120f..00000000000 --- a/tools/dockerfile/grpc_check_generated_pb_files/Dockerfile +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright 2015, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -FROM debian:jessie - -# Install Git and basic packages. -RUN apt-get update && apt-get install -y \ - autoconf \ - autotools-dev \ - build-essential \ - bzip2 \ - ccache \ - curl \ - gcc \ - gcc-multilib \ - git \ - golang \ - gyp \ - lcov \ - libc6 \ - libc6-dbg \ - libc6-dev \ - libgtest-dev \ - libtool \ - make \ - perl \ - strace \ - python-dev \ - python-setuptools \ - python-yaml \ - telnet \ - unzip \ - wget \ - zip && apt-get clean - -#================ -# Build profiling -RUN apt-get update && apt-get install -y time && apt-get clean - -#================= -# C++ dependencies -RUN apt-get update && apt-get -y install libgflags-dev libgtest-dev libc++-dev clang && apt-get clean - -RUN mkdir /var/local/jenkins - -# Define the default command. -CMD ["bash"] diff --git a/tools/dockerfile/grpc_check_generated_pb_files/check_pb_files.sh b/tools/dockerfile/grpc_check_generated_pb_files/check_pb_files.sh deleted file mode 100755 index 9db7aae9eba..00000000000 --- a/tools/dockerfile/grpc_check_generated_pb_files/check_pb_files.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -# Copyright 2015, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -set -e - -mkdir -p /var/local/git -git clone /var/local/jenkins/grpc /var/local/git/grpc -# clone gRPC submodules, use data from locally cloned submodules where possible -(cd /var/local/jenkins/grpc/ && git submodule foreach 'cd /var/local/git/grpc \ -&& git submodule update --init --reference /var/local/jenkins/grpc/${name} \ -${name}') - -cd /var/local/git/grpc - -# build grpc cpp plugin for generating grpc pb files -make grpc_cpp_plugin - -# generate pb files -tools/codegen/extensions/gen_reflection_proto.sh - -# check if the pb files in the checked out codebase are identical with the newly -# generated ones -git diff --exit-code diff --git a/tools/run_tests/sanity/sanity_tests.yaml b/tools/run_tests/sanity/sanity_tests.yaml index e699c5194df..c5945c602f4 100644 --- a/tools/run_tests/sanity/sanity_tests.yaml +++ b/tools/run_tests/sanity/sanity_tests.yaml @@ -11,4 +11,3 @@ - script: tools/distrib/check_nanopb_output.sh - script: tools/distrib/check_include_guards.py - script: tools/distrib/python/check_grpcio_tools.py -- script: tools/distrib/check_generated_pb_files.sh diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index c05d194e19e..9b66844b0fa 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -2550,6 +2550,7 @@ "grpc++_codegen_proto", "grpc++_config_proto", "grpc++_reflection", + "grpc++_test_util", "grpc_cli_libs", "grpc_test_util" ], @@ -2557,16 +2558,13 @@ "src/proto/grpc/testing/echo.grpc.pb.h", "src/proto/grpc/testing/echo.pb.h", "src/proto/grpc/testing/echo_messages.grpc.pb.h", - "src/proto/grpc/testing/echo_messages.pb.h", - "test/cpp/util/string_ref_helper.h" + "src/proto/grpc/testing/echo_messages.pb.h" ], "is_filegroup": false, "language": "c++", "name": "grpc_tool_test", "src": [ - "test/cpp/util/grpc_tool_test.cc", - "test/cpp/util/string_ref_helper.cc", - "test/cpp/util/string_ref_helper.h" + "test/cpp/util/grpc_tool_test.cc" ], "third_party": false, "type": "target" @@ -2757,20 +2755,17 @@ "gpr_test_util", "grpc", "grpc++", + "grpc++_proto_reflection_desc_db", "grpc++_reflection", "grpc++_test_util", "grpc_test_util" ], - "headers": [ - "test/cpp/util/proto_reflection_descriptor_database.h" - ], + "headers": [], "is_filegroup": false, "language": "c++", "name": "proto_server_reflection_test", "src": [ - "test/cpp/end2end/proto_server_reflection_test.cc", - "test/cpp/util/proto_reflection_descriptor_database.cc", - "test/cpp/util/proto_reflection_descriptor_database.h" + "test/cpp/end2end/proto_server_reflection_test.cc" ], "third_party": false, "type": "target" @@ -4915,19 +4910,6 @@ "third_party": false, "type": "lib" }, - { - "deps": [], - "headers": [ - "src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h", - "src/proto/grpc/reflection/v1alpha/reflection.pb.h" - ], - "is_filegroup": false, - "language": "c++", - "name": "grpc++_reflection_codegen", - "src": [], - "third_party": false, - "type": "lib" - }, { "deps": [], "headers": [ @@ -5010,6 +4992,8 @@ { "deps": [ "grpc++", + "grpc++_config_proto", + "grpc++_proto_reflection_desc_db", "grpc++_reflection" ], "headers": [ @@ -5018,7 +5002,6 @@ "test/cpp/util/config_grpc_cli.h", "test/cpp/util/grpc_tool.h", "test/cpp/util/proto_file_parser.h", - "test/cpp/util/proto_reflection_descriptor_database.h", "test/cpp/util/service_describer.h" ], "is_filegroup": false, @@ -5034,8 +5017,6 @@ "test/cpp/util/grpc_tool.h", "test/cpp/util/proto_file_parser.cc", "test/cpp/util/proto_file_parser.h", - "test/cpp/util/proto_reflection_descriptor_database.cc", - "test/cpp/util/proto_reflection_descriptor_database.h", "test/cpp/util/service_describer.cc", "test/cpp/util/service_describer.h" ], @@ -7459,24 +7440,35 @@ }, { "deps": [ - "grpc++_codegen_proto" + "grpc++_codegen_base", + "grpc++_reflection_proto" ], "headers": [ - "include/grpc++/ext/reflection.grpc.pb.h", - "include/grpc++/ext/reflection.pb.h" + "test/cpp/util/proto_reflection_descriptor_database.h" ], "is_filegroup": true, "language": "c++", - "name": "grpc++_reflection_proto", + "name": "grpc++_proto_reflection_desc_db", "src": [ - "include/grpc++/ext/reflection.grpc.pb.h", - "include/grpc++/ext/reflection.pb.h", - "src/cpp/ext/reflection.grpc.pb.cc", - "src/cpp/ext/reflection.pb.cc" + "test/cpp/util/proto_reflection_descriptor_database.cc", + "test/cpp/util/proto_reflection_descriptor_database.h" ], "third_party": false, "type": "filegroup" }, + { + "deps": [], + "headers": [ + "src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h", + "src/proto/grpc/reflection/v1alpha/reflection.pb.h" + ], + "is_filegroup": true, + "language": "c++", + "name": "grpc++_reflection_proto", + "src": [], + "third_party": false, + "type": "filegroup" + }, { "deps": [ "grpc++_codegen_base" diff --git a/vsprojects/vcxproj/grpc++_reflection/grpc++_reflection.vcxproj b/vsprojects/vcxproj/grpc++_reflection/grpc++_reflection.vcxproj index 230128180a3..da4c6857764 100644 --- a/vsprojects/vcxproj/grpc++_reflection/grpc++_reflection.vcxproj +++ b/vsprojects/vcxproj/grpc++_reflection/grpc++_reflection.vcxproj @@ -148,58 +148,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -209,10 +157,14 @@ - + - + + + + + diff --git a/vsprojects/vcxproj/grpc++_reflection/grpc++_reflection.vcxproj.filters b/vsprojects/vcxproj/grpc++_reflection/grpc++_reflection.vcxproj.filters index 540e1c6e364..b292e06fd7c 100644 --- a/vsprojects/vcxproj/grpc++_reflection/grpc++_reflection.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_reflection/grpc++_reflection.vcxproj.filters @@ -7,173 +7,14 @@ src\cpp\ext - - src\cpp\ext - - - src\cpp\ext + + src\proto\grpc\reflection\v1alpha include\grpc++\ext - - include\grpc++\ext - - - include\grpc++\ext - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen\security - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc++\impl\codegen - @@ -185,30 +26,12 @@ {e9441021-f78a-ec84-7efd-1883975feddb} - - {3b19b259-3bf4-c0fa-8e20-ed79acd63ac3} - {c66e66b4-a64e-79bf-40e8-1a1bac124a3d} {8d96203b-d3ce-2164-74a6-06e0ff2b09af} - - {4e57d72c-762f-20b1-bdb9-bc7088ca6fda} - - - {0f0f3943-7a9d-2b03-7eb1-2fbad4199428} - - - {e1b8bc6d-2cd2-1283-868a-dfd64c3dbab8} - - - {7bccc379-84fb-c1aa-19aa-a0cc09ac59ac} - - - {a1f1904b-e820-dd3c-b4b0-14a6e0ff9d19} - {5ec5476e-3d72-e3f9-4f05-3f7c31c13651} @@ -218,6 +41,18 @@ {d0204618-0f6a-dbc6-cf41-ffc04e76075a} + + {728e13e3-db36-9633-3cb9-a74c0f11470d} + + + {b49296ac-bc15-94ec-012b-5f8fe2ce2c1f} + + + {d980f473-6242-4a95-556a-7d4c6d6a2a00} + + + {8c7d8658-ade7-6086-0e04-7e00380ddccf} + diff --git a/vsprojects/vcxproj/grpc++_reflection_codegen/grpc++_reflection_codegen.vcxproj b/vsprojects/vcxproj/grpc++_reflection_codegen/grpc++_reflection_codegen.vcxproj deleted file mode 100644 index d9e10c2d37e..00000000000 --- a/vsprojects/vcxproj/grpc++_reflection_codegen/grpc++_reflection_codegen.vcxproj +++ /dev/null @@ -1,168 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {C8A925BF-4373-D85D-60AE-96CDCBBF33F2} - true - $(SolutionDir)IntDir\$(MSBuildProjectName)\ - - - - v100 - - - v110 - - - v120 - - - v140 - - - StaticLibrary - true - Unicode - - - StaticLibrary - false - true - Unicode - - - - - - - - - - - - grpc++_reflection_codegen - - - grpc++_reflection_codegen - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreadedDebug - true - None - false - - - Windows - true - false - - - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreadedDebug - true - None - false - - - Windows - true - false - - - - - - NotUsing - Level3 - MaxSpeed - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - true - true - MultiThreaded - true - None - false - - - Windows - true - false - true - true - - - - - - NotUsing - Level3 - MaxSpeed - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - true - true - MultiThreaded - true - None - false - - - Windows - true - false - true - true - - - - - - - - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - diff --git a/vsprojects/vcxproj/grpc++_reflection_codegen/grpc++_reflection_codegen.vcxproj.filters b/vsprojects/vcxproj/grpc++_reflection_codegen/grpc++_reflection_codegen.vcxproj.filters deleted file mode 100644 index 577dcc77d8f..00000000000 --- a/vsprojects/vcxproj/grpc++_reflection_codegen/grpc++_reflection_codegen.vcxproj.filters +++ /dev/null @@ -1,27 +0,0 @@ - - - - - src\proto\grpc\reflection\v1alpha - - - - - - {d6f45d49-92db-00f7-3dd4-e53f5768d80c} - - - {32b951f4-cef1-24a3-ffb9-bb229f0cdd6a} - - - {8fdcb9f3-4d86-2f49-5c15-c92e0e0f4fba} - - - {098a074c-f3de-2840-8009-1a3840af1efc} - - - {219ff371-7d3a-130c-5792-be36514a4e98} - - - - diff --git a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj index 4c61baa506d..e0f63bd6b89 100644 --- a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj +++ b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj @@ -146,14 +146,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -164,10 +215,18 @@ + + - + + + + + + + diff --git a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters index d4d692766d6..b17590e3974 100644 --- a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters @@ -13,12 +13,164 @@ test\cpp\util - + test\cpp\util - + test\cpp\util + + src\proto\grpc\reflection\v1alpha + + + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen\security + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc++\impl\codegen + @@ -36,15 +188,54 @@ test\cpp\util - + test\cpp\util - + test\cpp\util + + {09004fab-571d-4499-ea07-ab14a367b0e6} + + + {5822a435-62c4-1c37-745b-56960c93e411} + + + {17074550-63b5-b955-9a30-33f983c6933a} + + + {9d5cca3a-e3da-b197-ba07-8ef7649de092} + + + {12d6b95a-4072-e05e-8de7-79b0c2f7329f} + + + {2cbad591-ce97-d603-bf68-a44d54a0d13e} + + + {7d554c37-a7e2-7aeb-5941-4d19a2783dff} + + + {9c9b90ce-c798-4b41-22f2-6de69237d433} + + + {5cc1b6f3-ef01-62ac-9b0e-1fd776f42182} + + + {86bd3e99-8380-85fd-f297-1ac2f018ed51} + + + {10c2568e-5695-1c21-6c51-172889d406f8} + + + {5213881a-59f9-2d2e-43aa-1433dc6f70af} + + + {8a66b2e3-477b-66e2-fba8-6987c6381367} + {16a32a9f-93aa-5812-5a5e-be659aaa76aa} diff --git a/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj b/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj index bdf310db1bd..6f69b9ef19e 100644 --- a/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj +++ b/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj @@ -211,9 +211,6 @@ - - - @@ -233,8 +230,6 @@ - - @@ -243,6 +238,9 @@ {5F575402-3F89-5D1A-6910-9DB8BF5D2BAB} + + {0BE77741-552A-929B-A497-4EF7ECE17A64} + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} diff --git a/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj.filters b/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj.filters index cd341e9eb1f..ab7d5ef5cc5 100644 --- a/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj.filters +++ b/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj.filters @@ -10,9 +10,6 @@ test\cpp\util - - test\cpp\util - @@ -166,11 +163,6 @@ include\grpc++\impl\codegen - - - test\cpp\util - - diff --git a/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj b/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj index 27fc168946b..142803037cd 100644 --- a/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj +++ b/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj @@ -159,6 +159,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -167,6 +217,14 @@ + + + + + + + + diff --git a/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj.filters b/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj.filters index 6d6e5c1f32c..225fc2dbcbb 100644 --- a/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj.filters +++ b/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj.filters @@ -7,6 +7,155 @@ test\cpp\util + + src\proto\grpc\reflection\v1alpha + + + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen\security + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc++\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + + + include\grpc\impl\codegen + @@ -15,6 +164,45 @@ + + {0f5e0c58-3aec-40e9-34bf-c41320f9140e} + + + {f89a5581-4144-43ac-7e28-1760b4ccbba2} + + + {3042b35a-e50b-f8b6-7627-82e2d0411d60} + + + {3b9ab145-76ed-5144-880c-11d9d03cc20a} + + + {14799057-f7dc-6994-6d3e-cc230718a3cf} + + + {aba2f587-6af6-ca1c-51ee-2571d375dc04} + + + {02069d19-4fe7-6060-9891-4f969a77658e} + + + {5f100923-14d6-fe22-b9b4-61af1e8e5e93} + + + {1a609c5d-8229-6c2f-c9c4-49b8efd6795a} + + + {fdd0d55c-9691-ac97-ea6b-4358c0f17f41} + + + {928fa3b3-6bbd-80cc-9915-517638362d63} + + + {a630e954-abff-de50-215c-c76d1468c0d0} + + + {098b332c-5e56-883c-d0d2-4ad4d603acbb} + {354831a1-52fb-6364-b568-c8c49bfb8d29} From 5f6fbc83793792f107cd840dc25e0c9aed4d1862 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Fri, 14 Oct 2016 17:33:46 -0700 Subject: [PATCH 124/286] More dependency changes --- Makefile | 126 ++++++----- build.yaml | 31 ++- tools/run_tests/sources_and_headers.json | 42 ++-- .../grpc_cli_libs/grpc_cli_libs.vcxproj | 58 +---- .../grpc_cli_libs.vcxproj.filters | 179 ---------------- .../vcxproj/test/grpc_cli/grpc_cli.vcxproj | 4 +- .../proto_server_reflection_test.vcxproj | 66 +----- ...oto_server_reflection_test.vcxproj.filters | 199 ------------------ 8 files changed, 101 insertions(+), 604 deletions(-) diff --git a/Makefile b/Makefile index be012287a3a..d5f9cf7056b 100644 --- a/Makefile +++ b/Makefile @@ -1224,9 +1224,9 @@ pc_cxx: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++.pc pc_cxx_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc ifeq ($(EMBED_OPENSSL),true) -privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_asn1_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x509_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a +privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_asn1_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x509_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a else -privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a +privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a endif @@ -3775,6 +3775,57 @@ endif endif +LIBGRPC++_PROTO_REFLECTION_DESC_DB_SRC = \ + test/cpp/util/proto_reflection_descriptor_database.cc \ + $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ + +PUBLIC_HEADERS_CXX += \ + +LIBGRPC++_PROTO_REFLECTION_DESC_DB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_PROTO_REFLECTION_DESC_DB_SRC)))) + + +ifeq ($(NO_SECURE),true) + +# You can't build secure libraries if you don't have OpenSSL. + +$(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a: openssl_dep_error + + +else + +ifeq ($(NO_PROTOBUF),true) + +# You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. + +$(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a: protobuf_dep_error + + +else + +$(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_PROTO_REFLECTION_DESC_DB_OBJS) + $(E) "[AR] Creating $@" + $(Q) mkdir -p `dirname $@` + $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a + $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBGRPC++_PROTO_REFLECTION_DESC_DB_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a +endif + + + + +endif + +endif + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(LIBGRPC++_PROTO_REFLECTION_DESC_DB_OBJS:.o=.dep) +endif +endif +$(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc + + LIBGRPC++_REFLECTION_SRC = \ src/cpp/ext/proto_server_reflection.cc \ src/cpp/ext/proto_server_reflection_plugin.cc \ @@ -4197,59 +4248,9 @@ LIBGRPC_CLI_LIBS_SRC = \ test/cpp/util/grpc_tool.cc \ test/cpp/util/proto_file_parser.cc \ test/cpp/util/service_describer.cc \ - test/cpp/util/proto_reflection_descriptor_database.cc \ $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ PUBLIC_HEADERS_CXX += \ - include/grpc++/impl/codegen/async_stream.h \ - include/grpc++/impl/codegen/async_unary_call.h \ - include/grpc++/impl/codegen/call.h \ - include/grpc++/impl/codegen/call_hook.h \ - include/grpc++/impl/codegen/channel_interface.h \ - include/grpc++/impl/codegen/client_context.h \ - include/grpc++/impl/codegen/client_unary_call.h \ - include/grpc++/impl/codegen/completion_queue.h \ - include/grpc++/impl/codegen/completion_queue_tag.h \ - include/grpc++/impl/codegen/config.h \ - include/grpc++/impl/codegen/core_codegen_interface.h \ - include/grpc++/impl/codegen/create_auth_context.h \ - include/grpc++/impl/codegen/grpc_library.h \ - include/grpc++/impl/codegen/method_handler_impl.h \ - include/grpc++/impl/codegen/rpc_method.h \ - include/grpc++/impl/codegen/rpc_service_method.h \ - include/grpc++/impl/codegen/security/auth_context.h \ - include/grpc++/impl/codegen/serialization_traits.h \ - include/grpc++/impl/codegen/server_context.h \ - include/grpc++/impl/codegen/server_interface.h \ - include/grpc++/impl/codegen/service_type.h \ - include/grpc++/impl/codegen/status.h \ - include/grpc++/impl/codegen/status_code_enum.h \ - include/grpc++/impl/codegen/status_helper.h \ - include/grpc++/impl/codegen/string_ref.h \ - include/grpc++/impl/codegen/stub_options.h \ - include/grpc++/impl/codegen/sync.h \ - include/grpc++/impl/codegen/sync_cxx11.h \ - include/grpc++/impl/codegen/sync_no_cxx11.h \ - include/grpc++/impl/codegen/sync_stream.h \ - include/grpc++/impl/codegen/time.h \ - include/grpc/impl/codegen/byte_buffer_reader.h \ - include/grpc/impl/codegen/compression_types.h \ - include/grpc/impl/codegen/connectivity_state.h \ - include/grpc/impl/codegen/grpc_types.h \ - include/grpc/impl/codegen/propagation_bits.h \ - include/grpc/impl/codegen/status.h \ - include/grpc/impl/codegen/atm.h \ - include/grpc/impl/codegen/atm_gcc_atomic.h \ - include/grpc/impl/codegen/atm_gcc_sync.h \ - include/grpc/impl/codegen/atm_windows.h \ - include/grpc/impl/codegen/gpr_types.h \ - include/grpc/impl/codegen/port_platform.h \ - include/grpc/impl/codegen/slice.h \ - include/grpc/impl/codegen/sync.h \ - include/grpc/impl/codegen/sync_generic.h \ - include/grpc/impl/codegen/sync_posix.h \ - include/grpc/impl/codegen/sync_windows.h \ - include/grpc++/impl/codegen/config_protobuf.h \ LIBGRPC_CLI_LIBS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_CLI_LIBS_SRC)))) @@ -4298,7 +4299,6 @@ $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_credentials.o: $(GENDIR)/src/proto/grpc/re $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_file_parser.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/service_describer.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc -$(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc LIBGRPC_PLUGIN_SUPPORT_SRC = \ @@ -11550,16 +11550,16 @@ $(BINDIR)/$(CONFIG)/grpc_cli: protobuf_dep_error else -$(BINDIR)/$(CONFIG)/grpc_cli: $(PROTOBUF_DEP) $(GRPC_CLI_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a +$(BINDIR)/$(CONFIG)/grpc_cli: $(PROTOBUF_DEP) $(GRPC_CLI_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(GRPC_CLI_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_cli + $(Q) $(LDXX) $(LDFLAGS) $(GRPC_CLI_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_cli endif endif -$(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_cli.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a +$(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_cli.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a deps_grpc_cli: $(GRPC_CLI_OBJS:.o=.dep) @@ -12214,8 +12214,6 @@ endif PROTO_SERVER_REFLECTION_TEST_SRC = \ test/cpp/end2end/proto_server_reflection_test.cc \ - test/cpp/util/proto_reflection_descriptor_database.cc \ - $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ PROTO_SERVER_REFLECTION_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PROTO_SERVER_REFLECTION_TEST_SRC)))) ifeq ($(NO_SECURE),true) @@ -12237,20 +12235,16 @@ $(BINDIR)/$(CONFIG)/proto_server_reflection_test: protobuf_dep_error else -$(BINDIR)/$(CONFIG)/proto_server_reflection_test: $(PROTOBUF_DEP) $(PROTO_SERVER_REFLECTION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(BINDIR)/$(CONFIG)/proto_server_reflection_test: $(PROTOBUF_DEP) $(PROTO_SERVER_REFLECTION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(PROTO_SERVER_REFLECTION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/proto_server_reflection_test + $(Q) $(LDXX) $(LDFLAGS) $(PROTO_SERVER_REFLECTION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/proto_server_reflection_test endif endif -$(OBJDIR)/$(CONFIG)/test/cpp/end2end/proto_server_reflection_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - -$(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - -$(OBJDIR)/$(CONFIG)/src/proto/grpc/reflection/v1alpha/reflection.o: $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(OBJDIR)/$(CONFIG)/test/cpp/end2end/proto_server_reflection_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a deps_proto_server_reflection_test: $(PROTO_SERVER_REFLECTION_TEST_OBJS:.o=.dep) @@ -12259,8 +12253,6 @@ ifneq ($(NO_DEPS),true) -include $(PROTO_SERVER_REFLECTION_TEST_OBJS:.o=.dep) endif endif -$(OBJDIR)/$(CONFIG)/test/cpp/end2end/proto_server_reflection_test.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc -$(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc QPS_INTERARRIVAL_TEST_SRC = \ diff --git a/build.yaml b/build.yaml index cde799b324d..fbab9ce35e5 100644 --- a/build.yaml +++ b/build.yaml @@ -796,15 +796,6 @@ filegroups: language: c++ public_headers: - include/grpc++/impl/codegen/config_protobuf.h -- name: grpc++_proto_reflection_desc_db - language: c++ - headers: - - test/cpp/util/proto_reflection_descriptor_database.h - src: - - test/cpp/util/proto_reflection_descriptor_database.cc - uses: - - grpc++_reflection_proto - - grpc++_codegen_base - name: grpc++_reflection_proto language: c++ src: @@ -1006,6 +997,17 @@ libs: - grpc++_codegen_base_src secure: check vs_project_guid: '{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}' +- name: grpc++_proto_reflection_desc_db + build: private + language: c++ + headers: + - test/cpp/util/proto_reflection_descriptor_database.h + src: + - test/cpp/util/proto_reflection_descriptor_database.cc + deps: + - grpc++ + filegroups: + - grpc++_reflection_proto - name: grpc++_reflection build: all language: c++ @@ -1091,11 +1093,10 @@ libs: - test/cpp/util/proto_file_parser.cc - test/cpp/util/service_describer.cc deps: - - grpc++_reflection + - grpc++_proto_reflection_desc_db - grpc++ filegroups: - - grpc++_proto_reflection_desc_db - - grpc++_config_proto + - grpc++_reflection_proto - name: grpc_plugin_support build: protoc language: c++ @@ -2829,7 +2830,7 @@ targets: - test/cpp/util/grpc_cli.cc deps: - grpc_cli_libs - - grpc++_reflection + - grpc++_proto_reflection_desc_db - grpc++ - grpc - gpr @@ -2921,7 +2922,6 @@ targets: - gpr filegroups: - grpc++_codegen_proto - - grpc++_config_proto - name: grpclb_api_test gtest: true build: test @@ -3063,6 +3063,7 @@ targets: src: - test/cpp/end2end/proto_server_reflection_test.cc deps: + - grpc++_proto_reflection_desc_db - grpc++_reflection - grpc++_test_util - grpc_test_util @@ -3070,8 +3071,6 @@ targets: - grpc - gpr_test_util - gpr - filegroups: - - grpc++_proto_reflection_desc_db - name: qps_interarrival_test build: test run: false diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 9b66844b0fa..68d5769aa8b 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -2429,7 +2429,7 @@ "gpr", "grpc", "grpc++", - "grpc++_reflection", + "grpc++_proto_reflection_desc_db", "grpc++_test_config", "grpc_cli_libs" ], @@ -2548,7 +2548,6 @@ "grpc", "grpc++", "grpc++_codegen_proto", - "grpc++_config_proto", "grpc++_reflection", "grpc++_test_util", "grpc_cli_libs", @@ -4889,6 +4888,24 @@ "third_party": false, "type": "lib" }, + { + "deps": [ + "grpc++", + "grpc++_reflection_proto" + ], + "headers": [ + "test/cpp/util/proto_reflection_descriptor_database.h" + ], + "is_filegroup": false, + "language": "c++", + "name": "grpc++_proto_reflection_desc_db", + "src": [ + "test/cpp/util/proto_reflection_descriptor_database.cc", + "test/cpp/util/proto_reflection_descriptor_database.h" + ], + "third_party": false, + "type": "lib" + }, { "deps": [ "grpc++", @@ -4992,9 +5009,8 @@ { "deps": [ "grpc++", - "grpc++_config_proto", "grpc++_proto_reflection_desc_db", - "grpc++_reflection" + "grpc++_reflection_proto" ], "headers": [ "test/cpp/util/cli_call.h", @@ -7438,24 +7454,6 @@ "third_party": false, "type": "filegroup" }, - { - "deps": [ - "grpc++_codegen_base", - "grpc++_reflection_proto" - ], - "headers": [ - "test/cpp/util/proto_reflection_descriptor_database.h" - ], - "is_filegroup": true, - "language": "c++", - "name": "grpc++_proto_reflection_desc_db", - "src": [ - "test/cpp/util/proto_reflection_descriptor_database.cc", - "test/cpp/util/proto_reflection_descriptor_database.h" - ], - "third_party": false, - "type": "filegroup" - }, { "deps": [], "headers": [ diff --git a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj index e0f63bd6b89..ea00a2623dd 100644 --- a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj +++ b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj @@ -146,57 +146,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -204,7 +153,6 @@ - @@ -217,8 +165,6 @@ - - @@ -229,8 +175,8 @@ - - {5F575402-3F89-5D1A-6910-9DB8BF5D2BAB} + + {7B95AF96-915A-7132-AE45-9FA37769FACE} {C187A093-A0FE-489D-A40A-6E33DE0F9FEB} diff --git a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters index b17590e3974..de983d14e36 100644 --- a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters @@ -16,162 +16,10 @@ test\cpp\util - - test\cpp\util - src\proto\grpc\reflection\v1alpha - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen\security - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc++\impl\codegen - - test\cpp\util @@ -191,36 +39,9 @@ test\cpp\util - - test\cpp\util - - - {09004fab-571d-4499-ea07-ab14a367b0e6} - - - {5822a435-62c4-1c37-745b-56960c93e411} - - - {17074550-63b5-b955-9a30-33f983c6933a} - - - {9d5cca3a-e3da-b197-ba07-8ef7649de092} - - - {12d6b95a-4072-e05e-8de7-79b0c2f7329f} - - - {2cbad591-ce97-d603-bf68-a44d54a0d13e} - - - {7d554c37-a7e2-7aeb-5941-4d19a2783dff} - - - {9c9b90ce-c798-4b41-22f2-6de69237d433} - {5cc1b6f3-ef01-62ac-9b0e-1fd776f42182} diff --git a/vsprojects/vcxproj/test/grpc_cli/grpc_cli.vcxproj b/vsprojects/vcxproj/test/grpc_cli/grpc_cli.vcxproj index 78a0a63b5d7..fbb1bc8ab22 100644 --- a/vsprojects/vcxproj/test/grpc_cli/grpc_cli.vcxproj +++ b/vsprojects/vcxproj/test/grpc_cli/grpc_cli.vcxproj @@ -167,8 +167,8 @@ {86E35862-43E8-F59E-F906-AFE0348AD3D2} - - {5F575402-3F89-5D1A-6910-9DB8BF5D2BAB} + + {7B95AF96-915A-7132-AE45-9FA37769FACE} {C187A093-A0FE-489D-A40A-6E33DE0F9FEB} diff --git a/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj b/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj index 142803037cd..d3cd3f1e042 100644 --- a/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj +++ b/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj @@ -159,74 +159,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + {7B95AF96-915A-7132-AE45-9FA37769FACE} + {5F575402-3F89-5D1A-6910-9DB8BF5D2BAB} diff --git a/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj.filters b/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj.filters index 225fc2dbcbb..ae0b05aa730 100644 --- a/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj.filters +++ b/vsprojects/vcxproj/test/proto_server_reflection_test/proto_server_reflection_test.vcxproj.filters @@ -4,205 +4,9 @@ test\cpp\end2end - - test\cpp\util - - - src\proto\grpc\reflection\v1alpha - - - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen\security - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc++\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - include\grpc\impl\codegen - - - - - test\cpp\util - - - {0f5e0c58-3aec-40e9-34bf-c41320f9140e} - - - {f89a5581-4144-43ac-7e28-1760b4ccbba2} - - - {3042b35a-e50b-f8b6-7627-82e2d0411d60} - - - {3b9ab145-76ed-5144-880c-11d9d03cc20a} - - - {14799057-f7dc-6994-6d3e-cc230718a3cf} - - - {aba2f587-6af6-ca1c-51ee-2571d375dc04} - - - {02069d19-4fe7-6060-9891-4f969a77658e} - - - {5f100923-14d6-fe22-b9b4-61af1e8e5e93} - - - {1a609c5d-8229-6c2f-c9c4-49b8efd6795a} - - - {fdd0d55c-9691-ac97-ea6b-4358c0f17f41} - - - {928fa3b3-6bbd-80cc-9915-517638362d63} - - - {a630e954-abff-de50-215c-c76d1468c0d0} - - - {098b332c-5e56-883c-d0d2-4ad4d603acbb} - {354831a1-52fb-6364-b568-c8c49bfb8d29} @@ -212,9 +16,6 @@ {130f224c-89a5-54ea-7045-b54b4188c52b} - - {aae81aad-5563-fceb-1461-10fdec84c5b0} - From 324cc66128292e1121a602b4c0c99ed6de33f52d Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Mon, 17 Oct 2016 11:27:35 -0700 Subject: [PATCH 125/286] Fix missing dependencies --- Makefile | 12 +++++++----- build.yaml | 3 +++ src/cpp/ext/proto_server_reflection.h | 2 +- tools/run_tests/sources_and_headers.json | 3 +++ .../vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj | 3 +++ .../grpc_cli_libs/grpc_cli_libs.vcxproj.filters | 17 +++++++++++++++++ .../test/grpc_tool_test/grpc_tool_test.vcxproj | 3 +++ 7 files changed, 37 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index d5f9cf7056b..44eb4e6937f 100644 --- a/Makefile +++ b/Makefile @@ -3780,6 +3780,7 @@ LIBGRPC++_PROTO_REFLECTION_DESC_DB_SRC = \ $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ PUBLIC_HEADERS_CXX += \ + include/grpc++/impl/codegen/config_protobuf.h \ LIBGRPC++_PROTO_REFLECTION_DESC_DB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_PROTO_REFLECTION_DESC_DB_SRC)))) @@ -4251,6 +4252,7 @@ LIBGRPC_CLI_LIBS_SRC = \ $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ PUBLIC_HEADERS_CXX += \ + include/grpc++/impl/codegen/config_protobuf.h \ LIBGRPC_CLI_LIBS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_CLI_LIBS_SRC)))) @@ -11812,20 +11814,20 @@ $(BINDIR)/$(CONFIG)/grpc_tool_test: protobuf_dep_error else -$(BINDIR)/$(CONFIG)/grpc_tool_test: $(PROTOBUF_DEP) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(BINDIR)/$(CONFIG)/grpc_tool_test: $(PROTOBUF_DEP) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_tool_test + $(Q) $(LDXX) $(LDFLAGS) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_tool_test endif endif -$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a -$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a -$(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libgrpc++_proto_reflection_desc_db.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a deps_grpc_tool_test: $(GRPC_TOOL_TEST_OBJS:.o=.dep) diff --git a/build.yaml b/build.yaml index fbab9ce35e5..728eb0a103a 100644 --- a/build.yaml +++ b/build.yaml @@ -1008,6 +1008,7 @@ libs: - grpc++ filegroups: - grpc++_reflection_proto + - grpc++_config_proto - name: grpc++_reflection build: all language: c++ @@ -1097,6 +1098,7 @@ libs: - grpc++ filegroups: - grpc++_reflection_proto + - grpc++_config_proto - name: grpc_plugin_support build: protoc language: c++ @@ -2913,6 +2915,7 @@ targets: - test/cpp/util/grpc_tool_test.cc deps: - grpc_cli_libs + - grpc++_proto_reflection_desc_db - grpc++_reflection - grpc++_test_util - grpc_test_util diff --git a/src/cpp/ext/proto_server_reflection.h b/src/cpp/ext/proto_server_reflection.h index c9fa643d66c..be5f062f9f1 100644 --- a/src/cpp/ext/proto_server_reflection.h +++ b/src/cpp/ext/proto_server_reflection.h @@ -37,8 +37,8 @@ #include #include -#include "src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h" #include +#include "src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h" namespace grpc { diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 68d5769aa8b..b11b5797519 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -2548,6 +2548,7 @@ "grpc", "grpc++", "grpc++_codegen_proto", + "grpc++_proto_reflection_desc_db", "grpc++_reflection", "grpc++_test_util", "grpc_cli_libs", @@ -4891,6 +4892,7 @@ { "deps": [ "grpc++", + "grpc++_config_proto", "grpc++_reflection_proto" ], "headers": [ @@ -5009,6 +5011,7 @@ { "deps": [ "grpc++", + "grpc++_config_proto", "grpc++_proto_reflection_desc_db", "grpc++_reflection_proto" ], diff --git a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj index ea00a2623dd..c97c7dcb3db 100644 --- a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj +++ b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj @@ -146,6 +146,9 @@ + + + diff --git a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters index de983d14e36..84a401a7bd1 100644 --- a/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_cli_libs/grpc_cli_libs.vcxproj.filters @@ -20,6 +20,11 @@ src\proto\grpc\reflection\v1alpha + + + include\grpc++\impl\codegen + + test\cpp\util @@ -42,6 +47,18 @@ + + {09004fab-571d-4499-ea07-ab14a367b0e6} + + + {17074550-63b5-b955-9a30-33f983c6933a} + + + {9d5cca3a-e3da-b197-ba07-8ef7649de092} + + + {12d6b95a-4072-e05e-8de7-79b0c2f7329f} + {5cc1b6f3-ef01-62ac-9b0e-1fd776f42182} diff --git a/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj b/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj index 6f69b9ef19e..945c8d2811f 100644 --- a/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj +++ b/vsprojects/vcxproj/test/grpc_tool_test/grpc_tool_test.vcxproj @@ -235,6 +235,9 @@ {86E35862-43E8-F59E-F906-AFE0348AD3D2} + + {7B95AF96-915A-7132-AE45-9FA37769FACE} + {5F575402-3F89-5D1A-6910-9DB8BF5D2BAB} From 544564e7f66865fb9502a2d0d2e959414524601d Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 14:53:34 -0700 Subject: [PATCH 126/286] Make initial connect retry backoff configurable --- include/grpc/impl/codegen/grpc_types.h | 3 ++ src/core/ext/client_config/subchannel.c | 53 ++++++++++++------------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index e5a82883be5..f291751305f 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -153,6 +153,9 @@ typedef struct { #define GRPC_ARG_SECONDARY_USER_AGENT_STRING "grpc.secondary_user_agent" /** The maximum time between subsequent connection attempts, in ms */ #define GRPC_ARG_MAX_RECONNECT_BACKOFF_MS "grpc.max_reconnect_backoff_ms" +/** The time between the first and second connection attempts, in ms */ +#define GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS \ + "grpc.initial_reconnect_backoff_ms" /* The caller of the secure_channel_create functions may override the target name used for SSL host name checking using this channel argument which is of type \a GRPC_ARG_STRING. This *should* be used for testing only. diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_config/subchannel.c index d089cd4399e..ebf13109586 100644 --- a/src/core/ext/client_config/subchannel.c +++ b/src/core/ext/client_config/subchannel.c @@ -331,41 +331,40 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx, grpc_closure_init(&c->connected, subchannel_connected, c); grpc_connectivity_state_init(&c->state_tracker, GRPC_CHANNEL_IDLE, "subchannel"); - gpr_backoff_init(&c->backoff_state, - GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER, - GRPC_SUBCHANNEL_RECONNECT_JITTER, - GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS * 1000, - GRPC_SUBCHANNEL_RECONNECT_MAX_BACKOFF_SECONDS * 1000); + int initial_backoff_ms = + GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS * 1000; + int max_backoff_ms = GRPC_SUBCHANNEL_RECONNECT_MAX_BACKOFF_SECONDS * 1000; + bool fixed_reconnect_backoff = false; if (c->args) { for (size_t i = 0; i < c->args->num_args; i++) { if (0 == strcmp(c->args->args[i].key, "grpc.testing.fixed_reconnect_backoff")) { GPR_ASSERT(c->args->args[i].type == GRPC_ARG_INTEGER); - gpr_backoff_init(&c->backoff_state, 1.0, 0.0, - c->args->args[i].value.integer, - c->args->args[i].value.integer); - } - if (0 == - strcmp(c->args->args[i].key, GRPC_ARG_MAX_RECONNECT_BACKOFF_MS)) { - if (c->args->args[i].type == GRPC_ARG_INTEGER) { - if (c->args->args[i].value.integer >= 0) { - gpr_backoff_init( - &c->backoff_state, GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER, - GRPC_SUBCHANNEL_RECONNECT_JITTER, - GPR_MIN(c->args->args[i].value.integer, - GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS * 1000), - c->args->args[i].value.integer); - } else { - gpr_log(GPR_ERROR, GRPC_ARG_MAX_RECONNECT_BACKOFF_MS - " : must be non-negative"); - } - } else { - gpr_log(GPR_ERROR, - GRPC_ARG_MAX_RECONNECT_BACKOFF_MS " : must be an integer"); - } + fixed_reconnect_backoff = true; + initial_backoff_ms = max_backoff_ms = grpc_channel_arg_get_integer( + &c->args->args[i], + (grpc_integer_options){initial_backoff_ms, 100, INT_MAX}); + } else if (0 == strcmp(c->args->args[i].key, + GRPC_ARG_MAX_RECONNECT_BACKOFF_MS)) { + fixed_reconnect_backoff = false; + max_backoff_ms = grpc_channel_arg_get_integer( + &c->args->args[i], + (grpc_integer_options){max_backoff_ms, 100, INT_MAX}); + } else if (0 == strcmp(c->args->args[i].key, + GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS)) { + fixed_reconnect_backoff = false; + max_backoff_ms = grpc_channel_arg_get_integer( + &c->args->args[i], + (grpc_integer_options){initial_backoff_ms, 100, INT_MAX}); } } } + gpr_backoff_init( + &c->backoff_state, + fixed_reconnect_backoff ? 1.0 + : GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER, + fixed_reconnect_backoff ? 0.0 : GRPC_SUBCHANNEL_RECONNECT_JITTER, + initial_backoff_ms, max_backoff_ms); gpr_mu_init(&c->mu); return grpc_subchannel_index_register(exec_ctx, key, c); From 4e5a0163e01eb19ca21427b93392b7fd8e314693 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 28 Sep 2016 15:39:55 -0700 Subject: [PATCH 127/286] Fix copy/paste bug --- src/core/ext/client_config/subchannel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_config/subchannel.c index ebf13109586..646e6027f83 100644 --- a/src/core/ext/client_config/subchannel.c +++ b/src/core/ext/client_config/subchannel.c @@ -353,7 +353,7 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx, } else if (0 == strcmp(c->args->args[i].key, GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS)) { fixed_reconnect_backoff = false; - max_backoff_ms = grpc_channel_arg_get_integer( + initial_backoff_ms = grpc_channel_arg_get_integer( &c->args->args[i], (grpc_integer_options){initial_backoff_ms, 100, INT_MAX}); } From 45c8c30ad38d32ef6b5c60d9023e56deea9b84ef Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Wed, 28 Sep 2016 17:19:48 -0700 Subject: [PATCH 128/286] Set initial backoff to 10000ms when creating channel --- src/objective-c/GRPCClient/private/GRPCHost.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index 9cd9593d172..57ecf092fe4 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -219,6 +219,8 @@ static NSMutableDictionary *kHostCache; if (_responseSizeLimitOverride) { args[@GRPC_ARG_MAX_MESSAGE_LENGTH] = _responseSizeLimitOverride; } + NSNumber *initialBackoff = [NSNumber numberWithInt:10000]; + args[@GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS] = initialBackoff; return args; } From 31c3e01ce9717ce4d3245abd700ac1194ae6c275 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Thu, 29 Sep 2016 11:26:12 -0700 Subject: [PATCH 129/286] Clean up code --- src/objective-c/GRPCClient/private/GRPCHost.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index 57ecf092fe4..b57c54b6cea 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -219,8 +219,8 @@ static NSMutableDictionary *kHostCache; if (_responseSizeLimitOverride) { args[@GRPC_ARG_MAX_MESSAGE_LENGTH] = _responseSizeLimitOverride; } - NSNumber *initialBackoff = [NSNumber numberWithInt:10000]; - args[@GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS] = initialBackoff; + // Use 10000ms initial backoff time for correct behavior on bad/slow networks + args[@GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS] = @10000; return args; } From 6a72e1cf09307ce333284f4ab424bc410898952c Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Mon, 17 Oct 2016 14:14:02 -0700 Subject: [PATCH 130/286] Add missing vsprojects files --- .../grpc++_proto_reflection_desc_db.vcxproj | 181 ++++++++++++++++++ ...+_proto_reflection_desc_db.vcxproj.filters | 61 ++++++ 2 files changed, 242 insertions(+) create mode 100644 vsprojects/vcxproj/grpc++_proto_reflection_desc_db/grpc++_proto_reflection_desc_db.vcxproj create mode 100644 vsprojects/vcxproj/grpc++_proto_reflection_desc_db/grpc++_proto_reflection_desc_db.vcxproj.filters diff --git a/vsprojects/vcxproj/grpc++_proto_reflection_desc_db/grpc++_proto_reflection_desc_db.vcxproj b/vsprojects/vcxproj/grpc++_proto_reflection_desc_db/grpc++_proto_reflection_desc_db.vcxproj new file mode 100644 index 00000000000..453b483fdea --- /dev/null +++ b/vsprojects/vcxproj/grpc++_proto_reflection_desc_db/grpc++_proto_reflection_desc_db.vcxproj @@ -0,0 +1,181 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {7B95AF96-915A-7132-AE45-9FA37769FACE} + true + $(SolutionDir)IntDir\$(MSBuildProjectName)\ + + + + v100 + + + v110 + + + v120 + + + v140 + + + StaticLibrary + true + Unicode + + + StaticLibrary + false + true + Unicode + + + + + + + + + + + + grpc++_proto_reflection_desc_db + + + grpc++_proto_reflection_desc_db + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Windows + true + false + + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Windows + true + false + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Windows + true + false + true + true + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Windows + true + false + true + true + + + + + + + + + + + + + + + + + + + + + + + + {C187A093-A0FE-489D-A40A-6E33DE0F9FEB} + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + diff --git a/vsprojects/vcxproj/grpc++_proto_reflection_desc_db/grpc++_proto_reflection_desc_db.vcxproj.filters b/vsprojects/vcxproj/grpc++_proto_reflection_desc_db/grpc++_proto_reflection_desc_db.vcxproj.filters new file mode 100644 index 00000000000..7e98918491f --- /dev/null +++ b/vsprojects/vcxproj/grpc++_proto_reflection_desc_db/grpc++_proto_reflection_desc_db.vcxproj.filters @@ -0,0 +1,61 @@ + + + + + test\cpp\util + + + src\proto\grpc\reflection\v1alpha + + + + + include\grpc++\impl\codegen + + + + + test\cpp\util + + + + + + {9b233966-149a-36c4-89fb-11d63d8e00bb} + + + {1abcca00-34c5-513a-f372-4ef9b190910a} + + + {0059fdd3-0e35-5500-b8a5-b2e573d7537c} + + + {3f1b0e9e-802e-0535-bc3a-9685c2cf68d1} + + + {b479720c-6a7e-d0ca-bad6-db7cc12c9b0c} + + + {d9aa2326-a033-5a44-a24b-25cdb4a58297} + + + {cdabe038-cb18-dc0f-8afa-0787627ebd55} + + + {3947956e-b4fb-30ce-fc28-da34aec087e7} + + + {79b4cc2b-5f94-0c9f-4754-1197647dd040} + + + {96bd243c-be93-569d-6a83-4a67ab8c1fa3} + + + {1041430f-3c5a-c462-ccc6-adc845814dbe} + + + {c84ddb0b-56a0-0d29-a5c0-6cb1a7a49119} + + + + From 20afa3d7c933207c548ed11928c47b552b5b2f80 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 17 Oct 2016 14:52:14 -0700 Subject: [PATCH 131/286] BufferPool --> ResourceQuota --- BUILD | 24 +- CMakeLists.txt | 14 +- Makefile | 92 +- binding.gyp | 2 +- build.yaml | 30 +- config.m4 | 2 +- gRPC-Core.podspec | 6 +- grpc.def | 10 +- grpc.gemspec | 4 +- .../{buffer_pool.h => resource_quota.h} | 28 +- include/grpc++/server_builder.h | 8 +- include/grpc++/support/channel_arguments.h | 4 +- include/grpc/grpc.h | 15 +- include/grpc/impl/codegen/grpc_types.h | 7 +- package.xml | 4 +- .../server/insecure/server_chttp2_posix.c | 8 +- .../chttp2/transport/chttp2_transport.c | 26 +- src/core/lib/http/httpcli.c | 20 +- src/core/lib/http/httpcli.h | 4 +- src/core/lib/iomgr/buffer_pool.c | 684 -------------- src/core/lib/iomgr/endpoint.c | 4 +- src/core/lib/iomgr/endpoint.h | 6 +- src/core/lib/iomgr/endpoint_pair.h | 2 +- src/core/lib/iomgr/endpoint_pair_posix.c | 6 +- src/core/lib/iomgr/resource_quota.c | 684 ++++++++++++++ .../iomgr/{buffer_pool.h => resource_quota.h} | 83 +- src/core/lib/iomgr/tcp_client_posix.c | 10 +- src/core/lib/iomgr/tcp_posix.c | 42 +- src/core/lib/iomgr/tcp_posix.h | 2 +- src/core/lib/iomgr/tcp_server_posix.c | 18 +- .../google_default_credentials.c | 8 +- .../security/credentials/jwt/jwt_verifier.c | 16 +- .../credentials/oauth2/oauth2_credentials.c | 18 +- .../lib/security/transport/secure_endpoint.c | 6 +- src/core/lib/surface/init.c | 4 +- src/cpp/common/channel_arguments.cc | 8 +- ...buffer_pool_cc.cc => resource_quota_cc.cc} | 14 +- src/cpp/server/server_builder.cc | 26 +- src/proto/grpc/testing/control.proto | 2 +- src/python/grpcio/grpc_core_dependencies.py | 2 +- src/ruby/ext/grpc/rb_grpc_imports.generated.c | 20 +- src/ruby/ext/grpc/rb_grpc_imports.generated.h | 30 +- test/core/bad_client/bad_client.c | 6 +- test/core/end2end/end2end_nosec_tests.c | 16 +- test/core/end2end/end2end_tests.c | 16 +- .../core/end2end/fixtures/h2_sockpair+trace.c | 6 +- test/core/end2end/fixtures/h2_sockpair.c | 6 +- .../core/end2end/fixtures/h2_sockpair_1byte.c | 6 +- test/core/end2end/fuzzers/api_fuzzer.c | 10 +- test/core/end2end/fuzzers/client_fuzzer.c | 6 +- test/core/end2end/fuzzers/server_fuzzer.c | 6 +- test/core/end2end/gen_build_yaml.py | 2 +- test/core/end2end/tests/buffer_pool_server.c | 17 +- .../end2end/tests/resource_quota_server.c | 352 ++++++++ test/core/http/httpcli_test.c | 12 +- test/core/http/httpscli_test.c | 12 +- test/core/internal_api_canaries/iomgr.c | 2 +- test/core/iomgr/endpoint_pair_test.c | 6 +- test/core/iomgr/fd_conservation_posix_test.c | 8 +- ...ffer_pool_test.c => resource_quota_test.c} | 382 ++++---- test/core/iomgr/tcp_posix_test.c | 37 +- test/core/security/secure_endpoint_test.c | 8 +- test/core/util/mock_endpoint.c | 18 +- test/core/util/mock_endpoint.h | 2 +- test/core/util/passthru_endpoint.c | 20 +- test/core/util/passthru_endpoint.h | 2 +- test/core/util/port_server_client.c | 24 +- test/cpp/end2end/end2end_test.cc | 15 +- test/cpp/qps/server_async.cc | 8 +- test/cpp/qps/server_sync.cc | 8 +- tools/doxygen/Doxyfile.c++ | 2 +- tools/doxygen/Doxyfile.c++.internal | 4 +- tools/doxygen/Doxyfile.core.internal | 4 +- .../run_tests/performance/scenario_config.py | 10 +- tools/run_tests/sources_and_headers.json | 50 +- tools/run_tests/tests.json | 848 +++++++++--------- vsprojects/buildtests_c.sln | 54 +- vsprojects/vcxproj/grpc++/grpc++.vcxproj | 6 +- .../vcxproj/grpc++/grpc++.vcxproj.filters | 12 +- .../grpc++_unsecure/grpc++_unsecure.vcxproj | 6 +- .../grpc++_unsecure.vcxproj.filters | 12 +- vsprojects/vcxproj/grpc/grpc.vcxproj | 6 +- vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 12 +- .../grpc_test_util/grpc_test_util.vcxproj | 6 +- .../grpc_test_util.vcxproj.filters | 12 +- .../grpc_unsecure/grpc_unsecure.vcxproj | 6 +- .../grpc_unsecure.vcxproj.filters | 12 +- .../end2end_nosec_tests.vcxproj | 4 +- .../end2end_nosec_tests.vcxproj.filters | 6 +- .../tests/end2end_tests/end2end_tests.vcxproj | 4 +- .../end2end_tests.vcxproj.filters | 6 +- .../resource_quota_test.vcxproj} | 8 +- .../resource_quota_test.vcxproj.filters} | 8 +- 93 files changed, 2243 insertions(+), 1871 deletions(-) rename include/grpc++/{buffer_pool.h => resource_quota.h} (74%) delete mode 100644 src/core/lib/iomgr/buffer_pool.c create mode 100644 src/core/lib/iomgr/resource_quota.c rename src/core/lib/iomgr/{buffer_pool.h => resource_quota.h} (53%) rename src/cpp/common/{buffer_pool_cc.cc => resource_quota_cc.cc} (80%) create mode 100644 test/core/end2end/tests/resource_quota_server.c rename test/core/iomgr/{buffer_pool_test.c => resource_quota_test.c} (61%) rename vsprojects/vcxproj/test/{buffer_pool_test/buffer_pool_test.vcxproj => resource_quota_test/resource_quota_test.vcxproj} (98%) rename vsprojects/vcxproj/test/{buffer_pool_test/buffer_pool_test.vcxproj.filters => resource_quota_test/resource_quota_test.vcxproj.filters} (62%) diff --git a/BUILD b/BUILD index 26040604149..4f8bed11b65 100644 --- a/BUILD +++ b/BUILD @@ -179,7 +179,6 @@ cc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", - "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -203,6 +202,7 @@ cc_library( "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/resolve_address.h", + "src/core/lib/iomgr/resource_quota.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", @@ -341,7 +341,6 @@ cc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", - "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -365,6 +364,7 @@ cc_library( "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", + "src/core/lib/iomgr/resource_quota.c", "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", @@ -583,7 +583,6 @@ cc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", - "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -607,6 +606,7 @@ cc_library( "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/resolve_address.h", + "src/core/lib/iomgr/resource_quota.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", @@ -730,7 +730,6 @@ cc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", - "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -754,6 +753,7 @@ cc_library( "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", + "src/core/lib/iomgr/resource_quota.c", "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", @@ -942,7 +942,6 @@ cc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", - "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -966,6 +965,7 @@ cc_library( "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/resolve_address.h", + "src/core/lib/iomgr/resource_quota.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", @@ -1081,7 +1081,6 @@ cc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", - "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -1105,6 +1104,7 @@ cc_library( "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", + "src/core/lib/iomgr/resource_quota.c", "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", @@ -1296,11 +1296,11 @@ cc_library( "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/generic_stub.cc", - "src/cpp/common/buffer_pool_cc.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/completion_queue_cc.cc", "src/cpp/common/core_codegen.cc", + "src/cpp/common/resource_quota_cc.cc", "src/cpp/common/rpc_method.cc", "src/cpp/server/async_generic_service.cc", "src/cpp/server/create_default_thread_pool.cc", @@ -1319,7 +1319,6 @@ cc_library( ], hdrs = [ "include/grpc++/alarm.h", - "include/grpc++/buffer_pool.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", @@ -1346,6 +1345,7 @@ cc_library( "include/grpc++/impl/thd.h", "include/grpc++/impl/thd_cxx11.h", "include/grpc++/impl/thd_no_cxx11.h", + "include/grpc++/resource_quota.h", "include/grpc++/security/auth_context.h", "include/grpc++/security/auth_metadata_processor.h", "include/grpc++/security/credentials.h", @@ -1520,11 +1520,11 @@ cc_library( "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/generic_stub.cc", - "src/cpp/common/buffer_pool_cc.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/completion_queue_cc.cc", "src/cpp/common/core_codegen.cc", + "src/cpp/common/resource_quota_cc.cc", "src/cpp/common/rpc_method.cc", "src/cpp/server/async_generic_service.cc", "src/cpp/server/create_default_thread_pool.cc", @@ -1543,7 +1543,6 @@ cc_library( ], hdrs = [ "include/grpc++/alarm.h", - "include/grpc++/buffer_pool.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", @@ -1570,6 +1569,7 @@ cc_library( "include/grpc++/impl/thd.h", "include/grpc++/impl/thd_cxx11.h", "include/grpc++/impl/thd_no_cxx11.h", + "include/grpc++/resource_quota.h", "include/grpc++/security/auth_context.h", "include/grpc++/security/auth_metadata_processor.h", "include/grpc++/security/credentials.h", @@ -1849,7 +1849,6 @@ objc_library( "src/core/lib/http/format_request.c", "src/core/lib/http/httpcli.c", "src/core/lib/http/parser.c", - "src/core/lib/iomgr/buffer_pool.c", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/combiner.c", "src/core/lib/iomgr/endpoint.c", @@ -1873,6 +1872,7 @@ objc_library( "src/core/lib/iomgr/pollset_windows.c", "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", + "src/core/lib/iomgr/resource_quota.c", "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", @@ -2070,7 +2070,6 @@ objc_library( "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", - "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -2094,6 +2093,7 @@ objc_library( "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/resolve_address.h", + "src/core/lib/iomgr/resource_quota.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index 59b661101ee..203c7d70f35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -306,7 +306,6 @@ add_library(grpc src/core/lib/http/format_request.c src/core/lib/http/httpcli.c src/core/lib/http/parser.c - src/core/lib/iomgr/buffer_pool.c src/core/lib/iomgr/closure.c src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c @@ -330,6 +329,7 @@ add_library(grpc src/core/lib/iomgr/pollset_windows.c src/core/lib/iomgr/resolve_address_posix.c src/core/lib/iomgr/resolve_address_windows.c + src/core/lib/iomgr/resource_quota.c src/core/lib/iomgr/sockaddr_utils.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c @@ -566,7 +566,6 @@ add_library(grpc_cronet src/core/lib/http/format_request.c src/core/lib/http/httpcli.c src/core/lib/http/parser.c - src/core/lib/iomgr/buffer_pool.c src/core/lib/iomgr/closure.c src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c @@ -590,6 +589,7 @@ add_library(grpc_cronet src/core/lib/iomgr/pollset_windows.c src/core/lib/iomgr/resolve_address_posix.c src/core/lib/iomgr/resolve_address_windows.c + src/core/lib/iomgr/resource_quota.c src/core/lib/iomgr/sockaddr_utils.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c @@ -798,7 +798,6 @@ add_library(grpc_unsecure src/core/lib/http/format_request.c src/core/lib/http/httpcli.c src/core/lib/http/parser.c - src/core/lib/iomgr/buffer_pool.c src/core/lib/iomgr/closure.c src/core/lib/iomgr/combiner.c src/core/lib/iomgr/endpoint.c @@ -822,6 +821,7 @@ add_library(grpc_unsecure src/core/lib/iomgr/pollset_windows.c src/core/lib/iomgr/resolve_address_posix.c src/core/lib/iomgr/resolve_address_windows.c + src/core/lib/iomgr/resource_quota.c src/core/lib/iomgr/sockaddr_utils.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c @@ -1023,11 +1023,11 @@ add_library(grpc++ src/cpp/client/create_channel_posix.cc src/cpp/client/credentials_cc.cc src/cpp/client/generic_stub.cc - src/cpp/common/buffer_pool_cc.cc src/cpp/common/channel_arguments.cc src/cpp/common/channel_filter.cc src/cpp/common/completion_queue_cc.cc src/cpp/common/core_codegen.cc + src/cpp/common/resource_quota_cc.cc src/cpp/common/rpc_method.cc src/cpp/server/async_generic_service.cc src/cpp/server/create_default_thread_pool.cc @@ -1063,7 +1063,6 @@ target_link_libraries(grpc++ foreach(_hdr include/grpc++/alarm.h - include/grpc++/buffer_pool.h include/grpc++/channel.h include/grpc++/client_context.h include/grpc++/completion_queue.h @@ -1090,6 +1089,7 @@ foreach(_hdr include/grpc++/impl/thd.h include/grpc++/impl/thd_cxx11.h include/grpc++/impl/thd_no_cxx11.h + include/grpc++/resource_quota.h include/grpc++/security/auth_context.h include/grpc++/security/auth_metadata_processor.h include/grpc++/security/credentials.h @@ -1279,11 +1279,11 @@ add_library(grpc++_unsecure src/cpp/client/create_channel_posix.cc src/cpp/client/credentials_cc.cc src/cpp/client/generic_stub.cc - src/cpp/common/buffer_pool_cc.cc src/cpp/common/channel_arguments.cc src/cpp/common/channel_filter.cc src/cpp/common/completion_queue_cc.cc src/cpp/common/core_codegen.cc + src/cpp/common/resource_quota_cc.cc src/cpp/common/rpc_method.cc src/cpp/server/async_generic_service.cc src/cpp/server/create_default_thread_pool.cc @@ -1319,7 +1319,6 @@ target_link_libraries(grpc++_unsecure foreach(_hdr include/grpc++/alarm.h - include/grpc++/buffer_pool.h include/grpc++/channel.h include/grpc++/client_context.h include/grpc++/completion_queue.h @@ -1346,6 +1345,7 @@ foreach(_hdr include/grpc++/impl/thd.h include/grpc++/impl/thd_cxx11.h include/grpc++/impl/thd_no_cxx11.h + include/grpc++/resource_quota.h include/grpc++/security/auth_context.h include/grpc++/security/auth_metadata_processor.h include/grpc++/security/credentials.h diff --git a/Makefile b/Makefile index a274642a7a0..8fea5859f69 100644 --- a/Makefile +++ b/Makefile @@ -907,7 +907,6 @@ api_fuzzer: $(BINDIR)/$(CONFIG)/api_fuzzer bad_server_response_test: $(BINDIR)/$(CONFIG)/bad_server_response_test bin_decoder_test: $(BINDIR)/$(CONFIG)/bin_decoder_test bin_encoder_test: $(BINDIR)/$(CONFIG)/bin_encoder_test -buffer_pool_test: $(BINDIR)/$(CONFIG)/buffer_pool_test census_context_test: $(BINDIR)/$(CONFIG)/census_context_test census_resource_test: $(BINDIR)/$(CONFIG)/census_resource_test census_trace_context_test: $(BINDIR)/$(CONFIG)/census_trace_context_test @@ -1003,6 +1002,7 @@ no_server_test: $(BINDIR)/$(CONFIG)/no_server_test percent_decode_fuzzer: $(BINDIR)/$(CONFIG)/percent_decode_fuzzer percent_encode_fuzzer: $(BINDIR)/$(CONFIG)/percent_encode_fuzzer resolve_address_test: $(BINDIR)/$(CONFIG)/resolve_address_test +resource_quota_test: $(BINDIR)/$(CONFIG)/resource_quota_test secure_channel_create_test: $(BINDIR)/$(CONFIG)/secure_channel_create_test secure_endpoint_test: $(BINDIR)/$(CONFIG)/secure_endpoint_test sequential_connectivity_test: $(BINDIR)/$(CONFIG)/sequential_connectivity_test @@ -1242,7 +1242,6 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/bad_server_response_test \ $(BINDIR)/$(CONFIG)/bin_decoder_test \ $(BINDIR)/$(CONFIG)/bin_encoder_test \ - $(BINDIR)/$(CONFIG)/buffer_pool_test \ $(BINDIR)/$(CONFIG)/census_context_test \ $(BINDIR)/$(CONFIG)/census_resource_test \ $(BINDIR)/$(CONFIG)/census_trace_context_test \ @@ -1322,6 +1321,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/murmur_hash_test \ $(BINDIR)/$(CONFIG)/no_server_test \ $(BINDIR)/$(CONFIG)/resolve_address_test \ + $(BINDIR)/$(CONFIG)/resource_quota_test \ $(BINDIR)/$(CONFIG)/secure_channel_create_test \ $(BINDIR)/$(CONFIG)/secure_endpoint_test \ $(BINDIR)/$(CONFIG)/sequential_connectivity_test \ @@ -1560,8 +1560,6 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/bin_decoder_test || ( echo test bin_decoder_test failed ; exit 1 ) $(E) "[RUN] Testing bin_encoder_test" $(Q) $(BINDIR)/$(CONFIG)/bin_encoder_test || ( echo test bin_encoder_test failed ; exit 1 ) - $(E) "[RUN] Testing buffer_pool_test" - $(Q) $(BINDIR)/$(CONFIG)/buffer_pool_test || ( echo test buffer_pool_test failed ; exit 1 ) $(E) "[RUN] Testing census_context_test" $(Q) $(BINDIR)/$(CONFIG)/census_context_test || ( echo test census_context_test failed ; exit 1 ) $(E) "[RUN] Testing census_resource_test" @@ -1702,6 +1700,8 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/no_server_test || ( echo test no_server_test failed ; exit 1 ) $(E) "[RUN] Testing resolve_address_test" $(Q) $(BINDIR)/$(CONFIG)/resolve_address_test || ( echo test resolve_address_test failed ; exit 1 ) + $(E) "[RUN] Testing resource_quota_test" + $(Q) $(BINDIR)/$(CONFIG)/resource_quota_test || ( echo test resource_quota_test failed ; exit 1 ) $(E) "[RUN] Testing secure_channel_create_test" $(Q) $(BINDIR)/$(CONFIG)/secure_channel_create_test || ( echo test secure_channel_create_test failed ; exit 1 ) $(E) "[RUN] Testing secure_endpoint_test" @@ -2558,7 +2558,6 @@ LIBGRPC_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ - src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -2582,6 +2581,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ + src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ @@ -2836,7 +2836,6 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ - src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -2860,6 +2859,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ + src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ @@ -3104,7 +3104,6 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ - src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -3128,6 +3127,7 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ + src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ @@ -3299,7 +3299,6 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ - src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -3323,6 +3322,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ + src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ @@ -3607,11 +3607,11 @@ LIBGRPC++_SRC = \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/generic_stub.cc \ - src/cpp/common/buffer_pool_cc.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ src/cpp/common/core_codegen.cc \ + src/cpp/common/resource_quota_cc.cc \ src/cpp/common/rpc_method.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/create_default_thread_pool.cc \ @@ -3630,7 +3630,6 @@ LIBGRPC++_SRC = \ PUBLIC_HEADERS_CXX += \ include/grpc++/alarm.h \ - include/grpc++/buffer_pool.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ @@ -3657,6 +3656,7 @@ PUBLIC_HEADERS_CXX += \ include/grpc++/impl/thd.h \ include/grpc++/impl/thd_cxx11.h \ include/grpc++/impl/thd_no_cxx11.h \ + include/grpc++/resource_quota.h \ include/grpc++/security/auth_context.h \ include/grpc++/security/auth_metadata_processor.h \ include/grpc++/security/credentials.h \ @@ -4139,11 +4139,11 @@ LIBGRPC++_UNSECURE_SRC = \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/generic_stub.cc \ - src/cpp/common/buffer_pool_cc.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ src/cpp/common/core_codegen.cc \ + src/cpp/common/resource_quota_cc.cc \ src/cpp/common/rpc_method.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/create_default_thread_pool.cc \ @@ -4162,7 +4162,6 @@ LIBGRPC++_UNSECURE_SRC = \ PUBLIC_HEADERS_CXX += \ include/grpc++/alarm.h \ - include/grpc++/buffer_pool.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ @@ -4189,6 +4188,7 @@ PUBLIC_HEADERS_CXX += \ include/grpc++/impl/thd.h \ include/grpc++/impl/thd_cxx11.h \ include/grpc++/impl/thd_no_cxx11.h \ + include/grpc++/resource_quota.h \ include/grpc++/security/auth_context.h \ include/grpc++/security/auth_metadata_processor.h \ include/grpc++/security/credentials.h \ @@ -6590,7 +6590,6 @@ LIBEND2END_TESTS_SRC = \ test/core/end2end/end2end_tests.c \ test/core/end2end/tests/bad_hostname.c \ test/core/end2end/tests/binary_metadata.c \ - test/core/end2end/tests/buffer_pool_server.c \ test/core/end2end/tests/call_creds.c \ test/core/end2end/tests/cancel_after_accept.c \ test/core/end2end/tests/cancel_after_client_done.c \ @@ -6624,6 +6623,7 @@ LIBEND2END_TESTS_SRC = \ test/core/end2end/tests/registered_call.c \ test/core/end2end/tests/request_with_flags.c \ test/core/end2end/tests/request_with_payload.c \ + test/core/end2end/tests/resource_quota_server.c \ test/core/end2end/tests/server_finishes_request.c \ test/core/end2end/tests/shutdown_finishes_calls.c \ test/core/end2end/tests/shutdown_finishes_tags.c \ @@ -6674,7 +6674,6 @@ LIBEND2END_NOSEC_TESTS_SRC = \ test/core/end2end/end2end_nosec_tests.c \ test/core/end2end/tests/bad_hostname.c \ test/core/end2end/tests/binary_metadata.c \ - test/core/end2end/tests/buffer_pool_server.c \ test/core/end2end/tests/cancel_after_accept.c \ test/core/end2end/tests/cancel_after_client_done.c \ test/core/end2end/tests/cancel_after_invoke.c \ @@ -6707,6 +6706,7 @@ LIBEND2END_NOSEC_TESTS_SRC = \ test/core/end2end/tests/registered_call.c \ test/core/end2end/tests/request_with_flags.c \ test/core/end2end/tests/request_with_payload.c \ + test/core/end2end/tests/resource_quota_server.c \ test/core/end2end/tests/server_finishes_request.c \ test/core/end2end/tests/shutdown_finishes_calls.c \ test/core/end2end/tests/shutdown_finishes_tags.c \ @@ -6999,38 +6999,6 @@ endif endif -BUFFER_POOL_TEST_SRC = \ - test/core/iomgr/buffer_pool_test.c \ - -BUFFER_POOL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BUFFER_POOL_TEST_SRC)))) -ifeq ($(NO_SECURE),true) - -# You can't build secure targets if you don't have OpenSSL. - -$(BINDIR)/$(CONFIG)/buffer_pool_test: openssl_dep_error - -else - - - -$(BINDIR)/$(CONFIG)/buffer_pool_test: $(BUFFER_POOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - $(E) "[LD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(BUFFER_POOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/buffer_pool_test - -endif - -$(OBJDIR)/$(CONFIG)/test/core/iomgr/buffer_pool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - -deps_buffer_pool_test: $(BUFFER_POOL_TEST_OBJS:.o=.dep) - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(BUFFER_POOL_TEST_OBJS:.o=.dep) -endif -endif - - CENSUS_CONTEXT_TEST_SRC = \ test/core/census/context_test.c \ @@ -10071,6 +10039,38 @@ endif endif +RESOURCE_QUOTA_TEST_SRC = \ + test/core/iomgr/resource_quota_test.c \ + +RESOURCE_QUOTA_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(RESOURCE_QUOTA_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/resource_quota_test: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/resource_quota_test: $(RESOURCE_QUOTA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(RESOURCE_QUOTA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/resource_quota_test + +endif + +$(OBJDIR)/$(CONFIG)/test/core/iomgr/resource_quota_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_resource_quota_test: $(RESOURCE_QUOTA_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(RESOURCE_QUOTA_TEST_OBJS:.o=.dep) +endif +endif + + SECURE_CHANNEL_CREATE_TEST_SRC = \ test/core/surface/secure_channel_create_test.c \ diff --git a/binding.gyp b/binding.gyp index c767241fded..390a18d3f73 100644 --- a/binding.gyp +++ b/binding.gyp @@ -581,7 +581,6 @@ 'src/core/lib/http/format_request.c', 'src/core/lib/http/httpcli.c', 'src/core/lib/http/parser.c', - 'src/core/lib/iomgr/buffer_pool.c', 'src/core/lib/iomgr/closure.c', 'src/core/lib/iomgr/combiner.c', 'src/core/lib/iomgr/endpoint.c', @@ -605,6 +604,7 @@ 'src/core/lib/iomgr/pollset_windows.c', 'src/core/lib/iomgr/resolve_address_posix.c', 'src/core/lib/iomgr/resolve_address_windows.c', + 'src/core/lib/iomgr/resource_quota.c', 'src/core/lib/iomgr/sockaddr_utils.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', diff --git a/build.yaml b/build.yaml index f76f925517f..bafa4440d96 100644 --- a/build.yaml +++ b/build.yaml @@ -183,7 +183,6 @@ filegroups: - src/core/lib/http/format_request.h - src/core/lib/http/httpcli.h - src/core/lib/http/parser.h - - src/core/lib/iomgr/buffer_pool.h - src/core/lib/iomgr/closure.h - src/core/lib/iomgr/combiner.h - src/core/lib/iomgr/endpoint.h @@ -207,6 +206,7 @@ filegroups: - src/core/lib/iomgr/pollset_set_windows.h - src/core/lib/iomgr/pollset_windows.h - src/core/lib/iomgr/resolve_address.h + - src/core/lib/iomgr/resource_quota.h - src/core/lib/iomgr/sockaddr.h - src/core/lib/iomgr/sockaddr_posix.h - src/core/lib/iomgr/sockaddr_utils.h @@ -268,7 +268,6 @@ filegroups: - src/core/lib/http/format_request.c - src/core/lib/http/httpcli.c - src/core/lib/http/parser.c - - src/core/lib/iomgr/buffer_pool.c - src/core/lib/iomgr/closure.c - src/core/lib/iomgr/combiner.c - src/core/lib/iomgr/endpoint.c @@ -292,6 +291,7 @@ filegroups: - src/core/lib/iomgr/pollset_windows.c - src/core/lib/iomgr/resolve_address_posix.c - src/core/lib/iomgr/resolve_address_windows.c + - src/core/lib/iomgr/resource_quota.c - src/core/lib/iomgr/sockaddr_utils.c - src/core/lib/iomgr/socket_utils_common_posix.c - src/core/lib/iomgr/socket_utils_linux.c @@ -667,7 +667,6 @@ filegroups: language: c++ public_headers: - include/grpc++/alarm.h - - include/grpc++/buffer_pool.h - include/grpc++/channel.h - include/grpc++/client_context.h - include/grpc++/completion_queue.h @@ -694,6 +693,7 @@ filegroups: - include/grpc++/impl/thd.h - include/grpc++/impl/thd_cxx11.h - include/grpc++/impl/thd_no_cxx11.h + - include/grpc++/resource_quota.h - include/grpc++/security/auth_context.h - include/grpc++/security/auth_metadata_processor.h - include/grpc++/security/credentials.h @@ -727,11 +727,11 @@ filegroups: - src/cpp/client/create_channel_posix.cc - src/cpp/client/credentials_cc.cc - src/cpp/client/generic_stub.cc - - src/cpp/common/buffer_pool_cc.cc - src/cpp/common/channel_arguments.cc - src/cpp/common/channel_filter.cc - src/cpp/common/completion_queue_cc.cc - src/cpp/common/core_codegen.cc + - src/cpp/common/resource_quota_cc.cc - src/cpp/common/rpc_method.cc - src/cpp/server/async_generic_service.cc - src/cpp/server/create_default_thread_pool.cc @@ -1345,17 +1345,6 @@ targets: deps: - grpc_test_util - grpc -- name: buffer_pool_test - cpu_cost: 30 - build: test - language: c - src: - - test/core/iomgr/buffer_pool_test.c - deps: - - grpc_test_util - - grpc - - gpr_test_util - - gpr - name: census_context_test build: test language: c @@ -2343,6 +2332,17 @@ targets: - grpc - gpr_test_util - gpr +- name: resource_quota_test + cpu_cost: 30 + build: test + language: c + src: + - test/core/iomgr/resource_quota_test.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr - name: secure_channel_create_test build: test language: c diff --git a/config.m4 b/config.m4 index 70f09238371..601e7f5a746 100644 --- a/config.m4 +++ b/config.m4 @@ -100,7 +100,6 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ - src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -124,6 +123,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ + src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 19bd8ac42a4..25e1ccf5fd3 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -266,7 +266,6 @@ Pod::Spec.new do |s| 'src/core/lib/http/format_request.h', 'src/core/lib/http/httpcli.h', 'src/core/lib/http/parser.h', - 'src/core/lib/iomgr/buffer_pool.h', 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/combiner.h', 'src/core/lib/iomgr/endpoint.h', @@ -290,6 +289,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/resolve_address.h', + 'src/core/lib/iomgr/resource_quota.h', 'src/core/lib/iomgr/sockaddr.h', 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', @@ -432,7 +432,6 @@ Pod::Spec.new do |s| 'src/core/lib/http/format_request.c', 'src/core/lib/http/httpcli.c', 'src/core/lib/http/parser.c', - 'src/core/lib/iomgr/buffer_pool.c', 'src/core/lib/iomgr/closure.c', 'src/core/lib/iomgr/combiner.c', 'src/core/lib/iomgr/endpoint.c', @@ -456,6 +455,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/pollset_windows.c', 'src/core/lib/iomgr/resolve_address_posix.c', 'src/core/lib/iomgr/resolve_address_windows.c', + 'src/core/lib/iomgr/resource_quota.c', 'src/core/lib/iomgr/sockaddr_utils.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', @@ -642,7 +642,6 @@ Pod::Spec.new do |s| 'src/core/lib/http/format_request.h', 'src/core/lib/http/httpcli.h', 'src/core/lib/http/parser.h', - 'src/core/lib/iomgr/buffer_pool.h', 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/combiner.h', 'src/core/lib/iomgr/endpoint.h', @@ -666,6 +665,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/resolve_address.h', + 'src/core/lib/iomgr/resource_quota.h', 'src/core/lib/iomgr/sockaddr.h', 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', diff --git a/grpc.def b/grpc.def index 644a5886f2e..0b6db801d8d 100644 --- a/grpc.def +++ b/grpc.def @@ -94,11 +94,11 @@ EXPORTS grpc_header_nonbin_value_is_legal grpc_is_binary_header grpc_call_error_to_string - grpc_buffer_pool_create - grpc_buffer_pool_ref - grpc_buffer_pool_unref - grpc_buffer_pool_resize - grpc_buffer_pool_arg_vtable + grpc_resource_quota_create + grpc_resource_quota_ref + grpc_resource_quota_unref + grpc_resource_quota_resize + grpc_resource_quota_arg_vtable grpc_insecure_channel_create_from_fd grpc_server_add_insecure_channel_from_fd grpc_use_signal diff --git a/grpc.gemspec b/grpc.gemspec index 004e9371093..25aa70965b9 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -186,7 +186,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/http/format_request.h ) s.files += %w( src/core/lib/http/httpcli.h ) s.files += %w( src/core/lib/http/parser.h ) - s.files += %w( src/core/lib/iomgr/buffer_pool.h ) s.files += %w( src/core/lib/iomgr/closure.h ) s.files += %w( src/core/lib/iomgr/combiner.h ) s.files += %w( src/core/lib/iomgr/endpoint.h ) @@ -210,6 +209,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/pollset_set_windows.h ) s.files += %w( src/core/lib/iomgr/pollset_windows.h ) s.files += %w( src/core/lib/iomgr/resolve_address.h ) + s.files += %w( src/core/lib/iomgr/resource_quota.h ) s.files += %w( src/core/lib/iomgr/sockaddr.h ) s.files += %w( src/core/lib/iomgr/sockaddr_posix.h ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.h ) @@ -352,7 +352,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/http/format_request.c ) s.files += %w( src/core/lib/http/httpcli.c ) s.files += %w( src/core/lib/http/parser.c ) - s.files += %w( src/core/lib/iomgr/buffer_pool.c ) s.files += %w( src/core/lib/iomgr/closure.c ) s.files += %w( src/core/lib/iomgr/combiner.c ) s.files += %w( src/core/lib/iomgr/endpoint.c ) @@ -376,6 +375,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/pollset_windows.c ) s.files += %w( src/core/lib/iomgr/resolve_address_posix.c ) s.files += %w( src/core/lib/iomgr/resolve_address_windows.c ) + s.files += %w( src/core/lib/iomgr/resource_quota.c ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.c ) s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.c ) s.files += %w( src/core/lib/iomgr/socket_utils_linux.c ) diff --git a/include/grpc++/buffer_pool.h b/include/grpc++/resource_quota.h similarity index 74% rename from include/grpc++/buffer_pool.h rename to include/grpc++/resource_quota.h index 900213ca6d1..e45fe989742 100644 --- a/include/grpc++/buffer_pool.h +++ b/include/grpc++/resource_quota.h @@ -34,35 +34,35 @@ #ifndef GRPCXX_BUFFER_POOL_H #define GRPCXX_BUFFER_POOL_H -struct grpc_buffer_pool; +struct grpc_resource_quota; #include namespace grpc { -/// BufferPool represents a bound on memory usage by the gRPC library. -/// A BufferPool can be attached to a server (via ServerBuilder), or a client +/// ResourceQuota represents a bound on memory usage by the gRPC library. +/// A ResourceQuota can be attached to a server (via ServerBuilder), or a client /// channel (via ChannelArguments). gRPC will attempt to keep memory used by -/// all attached entities below the BufferPool bound. -class BufferPool GRPC_FINAL { +/// all attached entities below the ResourceQuota bound. +class ResourceQuota GRPC_FINAL { public: - explicit BufferPool(const grpc::string& name); - BufferPool(); - ~BufferPool(); + explicit ResourceQuota(const grpc::string& name); + ResourceQuota(); + ~ResourceQuota(); - /// Resize this BufferPool to a new size. If new_size is smaller than the + /// Resize this ResourceQuota to a new size. If new_size is smaller than the /// current size of the pool, memory usage will be monotonically decreased /// until it falls under new_size. No time bound is given for this to occur /// however. - BufferPool& Resize(size_t new_size); + ResourceQuota& Resize(size_t new_size); - grpc_buffer_pool* c_buffer_pool() const { return impl_; } + grpc_resource_quota* c_resource_quota() const { return impl_; } private: - BufferPool(const BufferPool& rhs); - BufferPool& operator=(const BufferPool& rhs); + ResourceQuota(const ResourceQuota& rhs); + ResourceQuota& operator=(const ResourceQuota& rhs); - grpc_buffer_pool* const impl_; + grpc_resource_quota* const impl_; }; } // namespace grpc diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index 282d49c643e..15333df60e1 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -43,12 +43,12 @@ #include #include -struct grpc_buffer_pool; +struct grpc_resource_quota; namespace grpc { class AsyncGenericService; -class BufferPool; +class ResourceQuota; class CompletionQueue; class RpcService; class Server; @@ -118,7 +118,7 @@ class ServerBuilder { grpc_compression_algorithm algorithm); /// Set the attached buffer pool for this server - ServerBuilder& SetBufferPool(const BufferPool& buffer_pool); + ServerBuilder& SetResourceQuota(const ResourceQuota& resource_quota); ServerBuilder& SetOption(std::unique_ptr option); @@ -194,7 +194,7 @@ class ServerBuilder { std::vector cqs_; std::shared_ptr creds_; std::vector> plugins_; - grpc_buffer_pool* buffer_pool_; + grpc_resource_quota* resource_quota_; AsyncGenericService* generic_service_; struct { bool is_set; diff --git a/include/grpc++/support/channel_arguments.h b/include/grpc++/support/channel_arguments.h index e6fdc3bf17f..ba203f85bda 100644 --- a/include/grpc++/support/channel_arguments.h +++ b/include/grpc++/support/channel_arguments.h @@ -46,7 +46,7 @@ namespace testing { class ChannelArgumentsTest; } // namespace testing -class BufferPool; +class ResourceQuota; /// Options for channel creation. The user can use generic setters to pass /// key value pairs down to c channel creation code. For grpc related options, @@ -83,7 +83,7 @@ class ChannelArguments { void SetUserAgentPrefix(const grpc::string& user_agent_prefix); /// The given buffer pool will be attached to the constructed channel - void SetBufferPool(const BufferPool& buffer_pool); + void SetResourceQuota(const ResourceQuota& resource_quota); // Generic channel argument setters. Only for advanced use cases. /// Set an integer argument \a value under \a key. diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h index 4bdf744d911..f8e442274e6 100644 --- a/include/grpc/grpc.h +++ b/include/grpc/grpc.h @@ -402,20 +402,21 @@ GRPCAPI int grpc_is_binary_header(const char *key, size_t length); GRPCAPI const char *grpc_call_error_to_string(grpc_call_error error); /** Create a buffer pool */ -GRPCAPI grpc_buffer_pool *grpc_buffer_pool_create(const char *trace_name); +GRPCAPI grpc_resource_quota *grpc_resource_quota_create(const char *trace_name); /** Add a reference to a buffer pool */ -GRPCAPI void grpc_buffer_pool_ref(grpc_buffer_pool *buffer_pool); +GRPCAPI void grpc_resource_quota_ref(grpc_resource_quota *resource_quota); /** Drop a reference to a buffer pool */ -GRPCAPI void grpc_buffer_pool_unref(grpc_buffer_pool *buffer_pool); +GRPCAPI void grpc_resource_quota_unref(grpc_resource_quota *resource_quota); /** Update the size of a buffer pool */ -GRPCAPI void grpc_buffer_pool_resize(grpc_buffer_pool *buffer_pool, - size_t new_size); +GRPCAPI void grpc_resource_quota_resize(grpc_resource_quota *resource_quota, + size_t new_size); -/** Fetch a vtable for a grpc_channel_arg that points to a grpc_buffer_pool */ -GRPCAPI const grpc_arg_pointer_vtable *grpc_buffer_pool_arg_vtable(void); +/** Fetch a vtable for a grpc_channel_arg that points to a grpc_resource_quota + */ +GRPCAPI const grpc_arg_pointer_vtable *grpc_resource_quota_arg_vtable(void); #ifdef __cplusplus } diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index 5f25f57304b..3492bf741c0 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -201,9 +201,10 @@ typedef struct { #define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size" /** If non-zero, allow the use of SO_REUSEPORT if it's available (default 1) */ #define GRPC_ARG_ALLOW_REUSEPORT "grpc.so_reuseport" -/** If non-zero, a pointer to a buffer pool (use grpc_buffer_pool_arg_vtable to +/** If non-zero, a pointer to a buffer pool (use grpc_resource_quota_arg_vtable + to fetch an appropriate pointer arg vtable */ -#define GRPC_ARG_BUFFER_POOL "grpc.buffer_pool" +#define GRPC_ARG_BUFFER_POOL "grpc.resource_quota" /** \} */ /** Result of a grpc call. If the caller satisfies the prerequisites of a @@ -460,7 +461,7 @@ typedef struct grpc_op { } data; } grpc_op; -typedef struct grpc_buffer_pool grpc_buffer_pool; +typedef struct grpc_resource_quota grpc_resource_quota; #ifdef __cplusplus } diff --git a/package.xml b/package.xml index 19e23b9e74b..54509c99fae 100644 --- a/package.xml +++ b/package.xml @@ -193,7 +193,6 @@ - @@ -217,6 +216,7 @@ + @@ -359,7 +359,6 @@ - @@ -383,6 +382,7 @@ + diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c index e5a156a59e6..b760fea2faa 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c @@ -57,12 +57,12 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server *server, char *name; gpr_asprintf(&name, "fd:%d", fd); - grpc_buffer_pool *buffer_pool = - grpc_buffer_pool_from_channel_args(grpc_server_get_channel_args(server)); + grpc_resource_quota *resource_quota = + grpc_resource_quota_from_channel_args(grpc_server_get_channel_args(server)); grpc_endpoint *server_endpoint = - grpc_tcp_create(grpc_fd_create(fd, name), buffer_pool, + grpc_tcp_create(grpc_fd_create(fd, name), resource_quota, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, name); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); gpr_free(name); diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index a7137bc944b..612852cb163 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -2115,9 +2115,9 @@ static void post_benign_reclaimer(grpc_exec_ctx *exec_ctx, if (!t->benign_reclaimer_registered) { t->benign_reclaimer_registered = true; GRPC_CHTTP2_REF_TRANSPORT(t, "benign_reclaimer"); - grpc_buffer_user_post_reclaimer(exec_ctx, - grpc_endpoint_get_buffer_user(t->ep), false, - &t->benign_reclaimer); + grpc_resource_user_post_reclaimer(exec_ctx, + grpc_endpoint_get_resource_user(t->ep), + false, &t->benign_reclaimer); } } @@ -2126,9 +2126,9 @@ static void post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, if (!t->destructive_reclaimer_registered) { t->destructive_reclaimer_registered = true; GRPC_CHTTP2_REF_TRANSPORT(t, "destructive_reclaimer"); - grpc_buffer_user_post_reclaimer(exec_ctx, - grpc_endpoint_get_buffer_user(t->ep), true, - &t->destructive_reclaimer); + grpc_resource_user_post_reclaimer(exec_ctx, + grpc_endpoint_get_resource_user(t->ep), + true, &t->destructive_reclaimer); } } @@ -2151,13 +2151,13 @@ static void benign_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, grpc_chttp2_transport *t = arg; if (error == GRPC_ERROR_NONE && grpc_chttp2_stream_map_size(&t->stream_map) == 0) { - if (grpc_buffer_pool_trace) { + if (grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, "HTTP2: %s - send goaway to free memory", t->peer_string); } send_goaway(exec_ctx, t, GRPC_CHTTP2_ENHANCE_YOUR_CALM, gpr_slice_from_static_string("Buffers full")); - } else if (error == GRPC_ERROR_NONE && grpc_buffer_pool_trace) { + } else if (error == GRPC_ERROR_NONE && grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, "HTTP2: %s - skip benign reclaimation, there are still %" PRIdPTR " streams", @@ -2165,8 +2165,8 @@ static void benign_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, } t->benign_reclaimer_registered = false; if (error != GRPC_ERROR_CANCELLED) { - grpc_buffer_user_finish_reclaimation(exec_ctx, - grpc_endpoint_get_buffer_user(t->ep)); + grpc_resource_user_finish_reclaimation( + exec_ctx, grpc_endpoint_get_resource_user(t->ep)); } GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "benign_reclaimer"); } @@ -2178,7 +2178,7 @@ static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, t->destructive_reclaimer_registered = false; if (error == GRPC_ERROR_NONE && n > 0) { grpc_chttp2_stream *s = grpc_chttp2_stream_map_rand(&t->stream_map); - if (grpc_buffer_pool_trace) { + if (grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, "HTTP2: %s - abandon stream id %d", t->peer_string, s->id); } @@ -2191,8 +2191,8 @@ static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, } } if (error != GRPC_ERROR_CANCELLED) { - grpc_buffer_user_finish_reclaimation(exec_ctx, - grpc_endpoint_get_buffer_user(t->ep)); + grpc_resource_user_finish_reclaimation( + exec_ctx, grpc_endpoint_get_resource_user(t->ep)); } GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "destructive_reclaimer"); } diff --git a/src/core/lib/http/httpcli.c b/src/core/lib/http/httpcli.c index a4ce8a1e738..bdc18ac4bff 100644 --- a/src/core/lib/http/httpcli.c +++ b/src/core/lib/http/httpcli.c @@ -71,7 +71,7 @@ typedef struct { grpc_closure done_write; grpc_closure connected; grpc_error *overall_error; - grpc_buffer_pool *buffer_pool; + grpc_resource_quota *resource_quota; } internal_request; static grpc_httpcli_get_override g_get_override = NULL; @@ -119,7 +119,7 @@ static void finish(grpc_exec_ctx *exec_ctx, internal_request *req, gpr_slice_buffer_destroy(&req->incoming); gpr_slice_buffer_destroy(&req->outgoing); GRPC_ERROR_UNREF(req->overall_error); - grpc_buffer_pool_internal_unref(exec_ctx, req->buffer_pool); + grpc_resource_quota_internal_unref(exec_ctx, req->resource_quota); gpr_free(req); } @@ -229,8 +229,8 @@ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, grpc_arg arg; arg.key = GRPC_ARG_BUFFER_POOL; arg.type = GRPC_ARG_POINTER; - arg.value.pointer.p = req->buffer_pool; - arg.value.pointer.vtable = grpc_buffer_pool_arg_vtable(); + arg.value.pointer.p = req->resource_quota; + arg.value.pointer.vtable = grpc_resource_quota_arg_vtable(); grpc_channel_args args = {1, &arg}; grpc_tcp_client_connect( exec_ctx, &req->connected, &req->ep, req->context->pollset_set, &args, @@ -250,7 +250,7 @@ static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { static void internal_request_begin(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, - grpc_buffer_pool *buffer_pool, + grpc_resource_quota *resource_quota, const grpc_httpcli_request *request, gpr_timespec deadline, grpc_closure *on_done, grpc_httpcli_response *response, @@ -266,7 +266,7 @@ static void internal_request_begin(grpc_exec_ctx *exec_ctx, req->context = context; req->pollent = pollent; req->overall_error = GRPC_ERROR_NONE; - req->buffer_pool = grpc_buffer_pool_internal_ref(buffer_pool); + req->resource_quota = grpc_resource_quota_internal_ref(resource_quota); grpc_closure_init(&req->on_read, on_read, req); grpc_closure_init(&req->done_write, done_write, req); gpr_slice_buffer_init(&req->incoming); @@ -284,7 +284,7 @@ static void internal_request_begin(grpc_exec_ctx *exec_ctx, void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, - grpc_buffer_pool *buffer_pool, + grpc_resource_quota *resource_quota, const grpc_httpcli_request *request, gpr_timespec deadline, grpc_closure *on_done, grpc_httpcli_response *response) { @@ -294,7 +294,7 @@ void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, return; } gpr_asprintf(&name, "HTTP:GET:%s:%s", request->host, request->http.path); - internal_request_begin(exec_ctx, context, pollent, buffer_pool, request, + internal_request_begin(exec_ctx, context, pollent, resource_quota, request, deadline, on_done, response, name, grpc_httpcli_format_get_request(request)); gpr_free(name); @@ -302,7 +302,7 @@ void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, - grpc_buffer_pool *buffer_pool, + grpc_resource_quota *resource_quota, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, gpr_timespec deadline, grpc_closure *on_done, @@ -315,7 +315,7 @@ void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, } gpr_asprintf(&name, "HTTP:POST:%s:%s", request->host, request->http.path); internal_request_begin( - exec_ctx, context, pollent, buffer_pool, request, deadline, on_done, + exec_ctx, context, pollent, resource_quota, request, deadline, on_done, response, name, grpc_httpcli_format_post_request(request, body_bytes, body_size)); gpr_free(name); diff --git a/src/core/lib/http/httpcli.h b/src/core/lib/http/httpcli.h index 0c053c1d709..11e03b44dfd 100644 --- a/src/core/lib/http/httpcli.h +++ b/src/core/lib/http/httpcli.h @@ -96,7 +96,7 @@ void grpc_httpcli_context_destroy(grpc_httpcli_context *context); 'on_response' is a callback to report results to */ void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, - grpc_buffer_pool *buffer_pool, + grpc_resource_quota *resource_quota, const grpc_httpcli_request *request, gpr_timespec deadline, grpc_closure *on_complete, grpc_httpcli_response *response); @@ -117,7 +117,7 @@ void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, Does not support ?var1=val1&var2=val2 in the path. */ void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, - grpc_buffer_pool *buffer_pool, + grpc_resource_quota *resource_quota, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, gpr_timespec deadline, grpc_closure *on_complete, diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c deleted file mode 100644 index 8fbf75cbe48..00000000000 --- a/src/core/lib/iomgr/buffer_pool.c +++ /dev/null @@ -1,684 +0,0 @@ -/* - * - * Copyright 2016, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include "src/core/lib/iomgr/buffer_pool.h" - -#include - -#include -#include -#include -#include - -#include "src/core/lib/iomgr/combiner.h" - -int grpc_buffer_pool_trace = 0; - -typedef bool (*bpstate_func)(grpc_exec_ctx *exec_ctx, - grpc_buffer_pool *buffer_pool); - -typedef struct { - grpc_buffer_user *head; - grpc_buffer_user *tail; -} grpc_buffer_user_list; - -struct grpc_buffer_pool { - gpr_refcount refs; - - grpc_combiner *combiner; - int64_t size; - int64_t free_pool; - - bool step_scheduled; - bool reclaiming; - grpc_closure bpstep_closure; - grpc_closure bpreclaimation_done_closure; - - grpc_buffer_user *roots[GRPC_BULIST_COUNT]; - - char *name; -}; - -/******************************************************************************* - * list management - */ - -static void bulist_add_tail(grpc_buffer_user *buffer_user, grpc_bulist list) { - grpc_buffer_pool *buffer_pool = buffer_user->buffer_pool; - grpc_buffer_user **root = &buffer_pool->roots[list]; - if (*root == NULL) { - *root = buffer_user; - buffer_user->links[list].next = buffer_user->links[list].prev = buffer_user; - } else { - buffer_user->links[list].next = *root; - buffer_user->links[list].prev = (*root)->links[list].prev; - buffer_user->links[list].next->links[list].prev = - buffer_user->links[list].prev->links[list].next = buffer_user; - } -} - -static void bulist_add_head(grpc_buffer_user *buffer_user, grpc_bulist list) { - grpc_buffer_pool *buffer_pool = buffer_user->buffer_pool; - grpc_buffer_user **root = &buffer_pool->roots[list]; - if (*root == NULL) { - *root = buffer_user; - buffer_user->links[list].next = buffer_user->links[list].prev = buffer_user; - } else { - buffer_user->links[list].next = (*root)->links[list].next; - buffer_user->links[list].prev = *root; - buffer_user->links[list].next->links[list].prev = - buffer_user->links[list].prev->links[list].next = buffer_user; - *root = buffer_user; - } -} - -static bool bulist_empty(grpc_buffer_pool *buffer_pool, grpc_bulist list) { - return buffer_pool->roots[list] == NULL; -} - -static grpc_buffer_user *bulist_pop(grpc_buffer_pool *buffer_pool, - grpc_bulist list) { - grpc_buffer_user **root = &buffer_pool->roots[list]; - grpc_buffer_user *buffer_user = *root; - if (buffer_user == NULL) { - return NULL; - } - if (buffer_user->links[list].next == buffer_user) { - *root = NULL; - } else { - buffer_user->links[list].next->links[list].prev = - buffer_user->links[list].prev; - buffer_user->links[list].prev->links[list].next = - buffer_user->links[list].next; - *root = buffer_user->links[list].next; - } - buffer_user->links[list].next = buffer_user->links[list].prev = NULL; - return buffer_user; -} - -static void bulist_remove(grpc_buffer_user *buffer_user, grpc_bulist list) { - if (buffer_user->links[list].next == NULL) return; - grpc_buffer_pool *buffer_pool = buffer_user->buffer_pool; - if (buffer_pool->roots[list] == buffer_user) { - buffer_pool->roots[list] = buffer_user->links[list].next; - if (buffer_pool->roots[list] == buffer_user) { - buffer_pool->roots[list] = NULL; - } - } - buffer_user->links[list].next->links[list].prev = - buffer_user->links[list].prev; - buffer_user->links[list].prev->links[list].next = - buffer_user->links[list].next; -} - -/******************************************************************************* - * buffer pool state machine - */ - -static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool); -static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool); -static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool, - bool destructive); - -static void bpstep(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { - grpc_buffer_pool *buffer_pool = bp; - buffer_pool->step_scheduled = false; - do { - if (bpalloc(exec_ctx, buffer_pool)) goto done; - } while (bpscavenge(exec_ctx, buffer_pool)); - bpreclaim(exec_ctx, buffer_pool, false) || - bpreclaim(exec_ctx, buffer_pool, true); -done: - grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); -} - -static void bpstep_sched(grpc_exec_ctx *exec_ctx, - grpc_buffer_pool *buffer_pool) { - if (buffer_pool->step_scheduled) return; - buffer_pool->step_scheduled = true; - grpc_buffer_pool_internal_ref(buffer_pool); - grpc_combiner_execute_finally(exec_ctx, buffer_pool->combiner, - &buffer_pool->bpstep_closure, GRPC_ERROR_NONE, - false); -} - -/* returns true if all allocations are completed */ -static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { - grpc_buffer_user *buffer_user; - while ((buffer_user = - bulist_pop(buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION))) { - gpr_mu_lock(&buffer_user->mu); - if (buffer_user->free_pool < 0 && - -buffer_user->free_pool <= buffer_pool->free_pool) { - int64_t amt = -buffer_user->free_pool; - buffer_user->free_pool = 0; - buffer_pool->free_pool -= amt; - if (grpc_buffer_pool_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: grant alloc %" PRId64 - " bytes; bp_free_pool -> %" PRId64, - buffer_pool->name, buffer_user->name, amt, - buffer_pool->free_pool); - } - } else if (grpc_buffer_pool_trace && buffer_user->free_pool >= 0) { - gpr_log(GPR_DEBUG, "BP %s %s: discard already satisfied alloc request", - buffer_pool->name, buffer_user->name); - } - if (buffer_user->free_pool >= 0) { - buffer_user->allocating = false; - grpc_exec_ctx_enqueue_list(exec_ctx, &buffer_user->on_allocated, NULL); - gpr_mu_unlock(&buffer_user->mu); - } else { - bulist_add_head(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); - gpr_mu_unlock(&buffer_user->mu); - return false; - } - } - return true; -} - -/* returns true if any memory could be reclaimed from buffers */ -static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool) { - grpc_buffer_user *buffer_user; - while ((buffer_user = - bulist_pop(buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL))) { - gpr_mu_lock(&buffer_user->mu); - if (buffer_user->free_pool > 0) { - int64_t amt = buffer_user->free_pool; - buffer_user->free_pool = 0; - buffer_pool->free_pool += amt; - if (grpc_buffer_pool_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: scavenge %" PRId64 - " bytes; bp_free_pool -> %" PRId64, - buffer_pool->name, buffer_user->name, amt, - buffer_pool->free_pool); - } - gpr_mu_unlock(&buffer_user->mu); - return true; - } else { - gpr_mu_unlock(&buffer_user->mu); - } - } - return false; -} - -/* returns true if reclaimation is proceeding */ -static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_buffer_pool *buffer_pool, - bool destructive) { - if (buffer_pool->reclaiming) return true; - grpc_bulist list = destructive ? GRPC_BULIST_RECLAIMER_DESTRUCTIVE - : GRPC_BULIST_RECLAIMER_BENIGN; - grpc_buffer_user *buffer_user = bulist_pop(buffer_pool, list); - if (buffer_user == NULL) return false; - if (grpc_buffer_pool_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: initiate %s reclaimation", buffer_pool->name, - buffer_user->name, destructive ? "destructive" : "benign"); - } - buffer_pool->reclaiming = true; - grpc_buffer_pool_internal_ref(buffer_pool); - grpc_closure *c = buffer_user->reclaimers[destructive]; - buffer_user->reclaimers[destructive] = NULL; - grpc_closure_run(exec_ctx, c, GRPC_ERROR_NONE); - return true; -} - -/******************************************************************************* - * bu_slice: a slice implementation that is backed by a grpc_buffer_user - */ - -typedef struct { - gpr_slice_refcount base; - gpr_refcount refs; - grpc_buffer_user *buffer_user; - size_t size; -} bu_slice_refcount; - -static void bu_slice_ref(void *p) { - bu_slice_refcount *rc = p; - gpr_ref(&rc->refs); -} - -static void bu_slice_unref(void *p) { - bu_slice_refcount *rc = p; - if (gpr_unref(&rc->refs)) { - /* TODO(ctiller): this is dangerous, but I think safe for now: - we have no guarantee here that we're at a safe point for creating an - execution context, but we have no way of writing this code otherwise. - In the future: consider lifting gpr_slice to grpc, and offering an - internal_{ref,unref} pair that is execution context aware. Alternatively, - make exec_ctx be thread local and 'do the right thing' (whatever that is) - if NULL */ - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, rc->buffer_user, rc->size); - grpc_exec_ctx_finish(&exec_ctx); - gpr_free(rc); - } -} - -static gpr_slice bu_slice_create(grpc_buffer_user *buffer_user, size_t size) { - bu_slice_refcount *rc = gpr_malloc(sizeof(bu_slice_refcount) + size); - rc->base.ref = bu_slice_ref; - rc->base.unref = bu_slice_unref; - gpr_ref_init(&rc->refs, 1); - rc->buffer_user = buffer_user; - rc->size = size; - gpr_slice slice; - slice.refcount = &rc->base; - slice.data.refcounted.bytes = (uint8_t *)(rc + 1); - slice.data.refcounted.length = size; - return slice; -} - -/******************************************************************************* - * grpc_buffer_pool internal implementation - */ - -static void bu_allocate(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { - grpc_buffer_user *buffer_user = bu; - if (bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION)) { - bpstep_sched(exec_ctx, buffer_user->buffer_pool); - } - bulist_add_tail(buffer_user, GRPC_BULIST_AWAITING_ALLOCATION); -} - -static void bu_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, - grpc_error *error) { - grpc_buffer_user *buffer_user = bu; - if (!bulist_empty(buffer_user->buffer_pool, - GRPC_BULIST_AWAITING_ALLOCATION) && - bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL)) { - bpstep_sched(exec_ctx, buffer_user->buffer_pool); - } - bulist_add_tail(buffer_user, GRPC_BULIST_NON_EMPTY_FREE_POOL); -} - -static void bu_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, - grpc_error *error) { - grpc_buffer_user *buffer_user = bu; - if (!bulist_empty(buffer_user->buffer_pool, - GRPC_BULIST_AWAITING_ALLOCATION) && - bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL) && - bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_RECLAIMER_BENIGN)) { - bpstep_sched(exec_ctx, buffer_user->buffer_pool); - } - bulist_add_tail(buffer_user, GRPC_BULIST_RECLAIMER_BENIGN); -} - -static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, - grpc_error *error) { - grpc_buffer_user *buffer_user = bu; - if (!bulist_empty(buffer_user->buffer_pool, - GRPC_BULIST_AWAITING_ALLOCATION) && - bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_NON_EMPTY_FREE_POOL) && - bulist_empty(buffer_user->buffer_pool, GRPC_BULIST_RECLAIMER_BENIGN) && - bulist_empty(buffer_user->buffer_pool, - GRPC_BULIST_RECLAIMER_DESTRUCTIVE)) { - bpstep_sched(exec_ctx, buffer_user->buffer_pool); - } - bulist_add_tail(buffer_user, GRPC_BULIST_RECLAIMER_DESTRUCTIVE); -} - -static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { - grpc_buffer_user *buffer_user = bu; - GPR_ASSERT(buffer_user->allocated == 0); - for (int i = 0; i < GRPC_BULIST_COUNT; i++) { - bulist_remove(buffer_user, (grpc_bulist)i); - } - grpc_exec_ctx_sched(exec_ctx, buffer_user->reclaimers[0], - GRPC_ERROR_CANCELLED, NULL); - grpc_exec_ctx_sched(exec_ctx, buffer_user->reclaimers[1], - GRPC_ERROR_CANCELLED, NULL); - grpc_exec_ctx_sched(exec_ctx, (grpc_closure *)gpr_atm_no_barrier_load( - &buffer_user->on_done_destroy_closure), - GRPC_ERROR_NONE, NULL); - if (buffer_user->free_pool != 0) { - buffer_user->buffer_pool->free_pool += buffer_user->free_pool; - bpstep_sched(exec_ctx, buffer_user->buffer_pool); - } -} - -static void bu_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, - grpc_error *error) { - grpc_buffer_user_slice_allocator *slice_allocator = ts; - if (error == GRPC_ERROR_NONE) { - for (size_t i = 0; i < slice_allocator->count; i++) { - gpr_slice_buffer_add_indexed(slice_allocator->dest, - bu_slice_create(slice_allocator->buffer_user, - slice_allocator->length)); - } - } - grpc_closure_run(exec_ctx, &slice_allocator->on_done, GRPC_ERROR_REF(error)); -} - -typedef struct { - int64_t size; - grpc_buffer_pool *buffer_pool; - grpc_closure closure; -} bp_resize_args; - -static void bp_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { - bp_resize_args *a = args; - int64_t delta = a->size - a->buffer_pool->size; - a->buffer_pool->size += delta; - a->buffer_pool->free_pool += delta; - if (delta < 0 && a->buffer_pool->free_pool < 0) { - bpstep_sched(exec_ctx, a->buffer_pool); - } else if (delta > 0 && - !bulist_empty(a->buffer_pool, GRPC_BULIST_AWAITING_ALLOCATION)) { - bpstep_sched(exec_ctx, a->buffer_pool); - } - grpc_buffer_pool_internal_unref(exec_ctx, a->buffer_pool); - gpr_free(a); -} - -static void bp_reclaimation_done(grpc_exec_ctx *exec_ctx, void *bp, - grpc_error *error) { - grpc_buffer_pool *buffer_pool = bp; - buffer_pool->reclaiming = false; - bpstep_sched(exec_ctx, buffer_pool); - grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); -} - -/******************************************************************************* - * grpc_buffer_pool api - */ - -grpc_buffer_pool *grpc_buffer_pool_create(const char *name) { - grpc_buffer_pool *buffer_pool = gpr_malloc(sizeof(*buffer_pool)); - gpr_ref_init(&buffer_pool->refs, 1); - buffer_pool->combiner = grpc_combiner_create(NULL); - buffer_pool->free_pool = INT64_MAX; - buffer_pool->size = INT64_MAX; - buffer_pool->step_scheduled = false; - buffer_pool->reclaiming = false; - if (name != NULL) { - buffer_pool->name = gpr_strdup(name); - } else { - gpr_asprintf(&buffer_pool->name, "anonymous_pool_%" PRIxPTR, - (intptr_t)buffer_pool); - } - grpc_closure_init(&buffer_pool->bpstep_closure, bpstep, buffer_pool); - grpc_closure_init(&buffer_pool->bpreclaimation_done_closure, - bp_reclaimation_done, buffer_pool); - for (int i = 0; i < GRPC_BULIST_COUNT; i++) { - buffer_pool->roots[i] = NULL; - } - return buffer_pool; -} - -void grpc_buffer_pool_internal_unref(grpc_exec_ctx *exec_ctx, - grpc_buffer_pool *buffer_pool) { - if (gpr_unref(&buffer_pool->refs)) { - grpc_combiner_destroy(exec_ctx, buffer_pool->combiner); - gpr_free(buffer_pool->name); - gpr_free(buffer_pool); - } -} - -void grpc_buffer_pool_unref(grpc_buffer_pool *buffer_pool) { - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); - grpc_exec_ctx_finish(&exec_ctx); -} - -grpc_buffer_pool *grpc_buffer_pool_internal_ref(grpc_buffer_pool *buffer_pool) { - gpr_ref(&buffer_pool->refs); - return buffer_pool; -} - -void grpc_buffer_pool_ref(grpc_buffer_pool *buffer_pool) { - grpc_buffer_pool_internal_ref(buffer_pool); -} - -void grpc_buffer_pool_resize(grpc_buffer_pool *buffer_pool, size_t size) { - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - bp_resize_args *a = gpr_malloc(sizeof(*a)); - a->buffer_pool = grpc_buffer_pool_internal_ref(buffer_pool); - a->size = (int64_t)size; - grpc_closure_init(&a->closure, bp_resize, a); - grpc_combiner_execute(&exec_ctx, buffer_pool->combiner, &a->closure, - GRPC_ERROR_NONE, false); - grpc_exec_ctx_finish(&exec_ctx); -} - -/******************************************************************************* - * grpc_buffer_user channel args api - */ - -grpc_buffer_pool *grpc_buffer_pool_from_channel_args( - const grpc_channel_args *channel_args) { - for (size_t i = 0; i < channel_args->num_args; i++) { - if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_BUFFER_POOL)) { - if (channel_args->args[i].type == GRPC_ARG_POINTER) { - return grpc_buffer_pool_internal_ref( - channel_args->args[i].value.pointer.p); - } else { - gpr_log(GPR_DEBUG, GRPC_ARG_BUFFER_POOL " should be a pointer"); - } - } - } - return grpc_buffer_pool_create(NULL); -} - -static void *bp_copy(void *bp) { - grpc_buffer_pool_ref(bp); - return bp; -} - -static void bp_destroy(void *bp) { grpc_buffer_pool_unref(bp); } - -static int bp_cmp(void *a, void *b) { return GPR_ICMP(a, b); } - -const grpc_arg_pointer_vtable *grpc_buffer_pool_arg_vtable(void) { - static const grpc_arg_pointer_vtable vtable = {bp_copy, bp_destroy, bp_cmp}; - return &vtable; -} - -/******************************************************************************* - * grpc_buffer_user api - */ - -void grpc_buffer_user_init(grpc_buffer_user *buffer_user, - grpc_buffer_pool *buffer_pool, const char *name) { - buffer_user->buffer_pool = grpc_buffer_pool_internal_ref(buffer_pool); - grpc_closure_init(&buffer_user->allocate_closure, &bu_allocate, buffer_user); - grpc_closure_init(&buffer_user->add_to_free_pool_closure, - &bu_add_to_free_pool, buffer_user); - grpc_closure_init(&buffer_user->post_reclaimer_closure[0], - &bu_post_benign_reclaimer, buffer_user); - grpc_closure_init(&buffer_user->post_reclaimer_closure[1], - &bu_post_destructive_reclaimer, buffer_user); - grpc_closure_init(&buffer_user->destroy_closure, &bu_destroy, buffer_user); - gpr_mu_init(&buffer_user->mu); - buffer_user->allocated = 0; - buffer_user->free_pool = 0; - grpc_closure_list_init(&buffer_user->on_allocated); - buffer_user->allocating = false; - buffer_user->added_to_free_pool = false; - gpr_atm_no_barrier_store(&buffer_user->on_done_destroy_closure, 0); - buffer_user->reclaimers[0] = NULL; - buffer_user->reclaimers[1] = NULL; - for (int i = 0; i < GRPC_BULIST_COUNT; i++) { - buffer_user->links[i].next = buffer_user->links[i].prev = NULL; - } -#ifndef NDEBUG - buffer_user->asan_canary = gpr_malloc(1); -#endif - if (name != NULL) { - buffer_user->name = gpr_strdup(name); - } else { - gpr_asprintf(&buffer_user->name, "anonymous_buffer_user_%" PRIxPTR, - (intptr_t)buffer_user); - } -} - -void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, - grpc_closure *on_done) { - gpr_mu_lock(&buffer_user->mu); - GPR_ASSERT(gpr_atm_no_barrier_load(&buffer_user->on_done_destroy_closure) == - 0); - gpr_atm_no_barrier_store(&buffer_user->on_done_destroy_closure, - (gpr_atm)on_done); - if (buffer_user->allocated == 0) { - grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->destroy_closure, GRPC_ERROR_NONE, - false); - } - gpr_mu_unlock(&buffer_user->mu); -} - -void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user) { -#ifndef NDEBUG - gpr_free(buffer_user->asan_canary); -#endif - grpc_buffer_pool_internal_unref(exec_ctx, buffer_user->buffer_pool); - gpr_mu_destroy(&buffer_user->mu); - gpr_free(buffer_user->name); -} - -void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, size_t size, - grpc_closure *optional_on_done) { - gpr_mu_lock(&buffer_user->mu); - grpc_closure *on_done_destroy = (grpc_closure *)gpr_atm_no_barrier_load( - &buffer_user->on_done_destroy_closure); - if (on_done_destroy != NULL) { - /* already shutdown */ - if (grpc_buffer_pool_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: alloc %" PRIdPTR " after shutdown", - buffer_user->buffer_pool->name, buffer_user->name, size); - } - grpc_exec_ctx_sched( - exec_ctx, optional_on_done, - GRPC_ERROR_CREATE("Buffer pool user is already shutdown"), NULL); - gpr_mu_unlock(&buffer_user->mu); - return; - } - buffer_user->allocated += (int64_t)size; - buffer_user->free_pool -= (int64_t)size; - if (grpc_buffer_pool_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: alloc %" PRIdPTR "; allocated -> %" PRId64 - ", free_pool -> %" PRId64, - buffer_user->buffer_pool->name, buffer_user->name, size, - buffer_user->allocated, buffer_user->free_pool); - } - if (buffer_user->free_pool < 0) { - grpc_closure_list_append(&buffer_user->on_allocated, optional_on_done, - GRPC_ERROR_NONE); - if (!buffer_user->allocating) { - buffer_user->allocating = true; - grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->allocate_closure, GRPC_ERROR_NONE, - false); - } - } else { - grpc_exec_ctx_sched(exec_ctx, optional_on_done, GRPC_ERROR_NONE, NULL); - } - gpr_mu_unlock(&buffer_user->mu); -} - -void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, size_t size) { - gpr_mu_lock(&buffer_user->mu); - GPR_ASSERT(buffer_user->allocated >= (int64_t)size); - bool was_zero_or_negative = buffer_user->free_pool <= 0; - buffer_user->free_pool += (int64_t)size; - buffer_user->allocated -= (int64_t)size; - if (grpc_buffer_pool_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: free %" PRIdPTR "; allocated -> %" PRId64 - ", free_pool -> %" PRId64, - buffer_user->buffer_pool->name, buffer_user->name, size, - buffer_user->allocated, buffer_user->free_pool); - } - bool is_bigger_than_zero = buffer_user->free_pool > 0; - if (is_bigger_than_zero && was_zero_or_negative && - !buffer_user->added_to_free_pool) { - buffer_user->added_to_free_pool = true; - grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->add_to_free_pool_closure, - GRPC_ERROR_NONE, false); - } - grpc_closure *on_done_destroy = (grpc_closure *)gpr_atm_no_barrier_load( - &buffer_user->on_done_destroy_closure); - if (on_done_destroy != NULL && buffer_user->allocated == 0) { - grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->destroy_closure, GRPC_ERROR_NONE, - false); - } - gpr_mu_unlock(&buffer_user->mu); -} - -void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, - bool destructive, grpc_closure *closure) { - if (gpr_atm_acq_load(&buffer_user->on_done_destroy_closure) == 0) { - GPR_ASSERT(buffer_user->reclaimers[destructive] == NULL); - buffer_user->reclaimers[destructive] = closure; - grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->post_reclaimer_closure[destructive], - GRPC_ERROR_NONE, false); - } else { - grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_CANCELLED, NULL); - } -} - -void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user) { - if (grpc_buffer_pool_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: reclaimation complete", - buffer_user->buffer_pool->name, buffer_user->name); - } - grpc_combiner_execute(exec_ctx, buffer_user->buffer_pool->combiner, - &buffer_user->buffer_pool->bpreclaimation_done_closure, - GRPC_ERROR_NONE, false); -} - -void grpc_buffer_user_slice_allocator_init( - grpc_buffer_user_slice_allocator *slice_allocator, - grpc_buffer_user *buffer_user, grpc_iomgr_cb_func cb, void *p) { - grpc_closure_init(&slice_allocator->on_allocated, bu_allocated_slices, - slice_allocator); - grpc_closure_init(&slice_allocator->on_done, cb, p); - slice_allocator->buffer_user = buffer_user; -} - -void grpc_buffer_user_alloc_slices( - grpc_exec_ctx *exec_ctx, grpc_buffer_user_slice_allocator *slice_allocator, - size_t length, size_t count, gpr_slice_buffer *dest) { - slice_allocator->length = length; - slice_allocator->count = count; - slice_allocator->dest = dest; - grpc_buffer_user_alloc(exec_ctx, slice_allocator->buffer_user, count * length, - &slice_allocator->on_allocated); -} diff --git a/src/core/lib/iomgr/endpoint.c b/src/core/lib/iomgr/endpoint.c index f3548a1d74b..74fa9c45dff 100644 --- a/src/core/lib/iomgr/endpoint.c +++ b/src/core/lib/iomgr/endpoint.c @@ -70,6 +70,6 @@ grpc_workqueue* grpc_endpoint_get_workqueue(grpc_endpoint* ep) { return ep->vtable->get_workqueue(ep); } -grpc_buffer_user* grpc_endpoint_get_buffer_user(grpc_endpoint* ep) { - return ep->vtable->get_buffer_user(ep); +grpc_resource_user* grpc_endpoint_get_resource_user(grpc_endpoint* ep) { + return ep->vtable->get_resource_user(ep); } diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h index df6b899e398..819fcdda1aa 100644 --- a/src/core/lib/iomgr/endpoint.h +++ b/src/core/lib/iomgr/endpoint.h @@ -37,7 +37,7 @@ #include #include #include -#include "src/core/lib/iomgr/buffer_pool.h" +#include "src/core/lib/iomgr/resource_quota.h" #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" @@ -59,7 +59,7 @@ struct grpc_endpoint_vtable { grpc_pollset_set *pollset); void (*shutdown)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); void (*destroy)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); - grpc_buffer_user *(*get_buffer_user)(grpc_endpoint *ep); + grpc_resource_user *(*get_resource_user)(grpc_endpoint *ep); char *(*get_peer)(grpc_endpoint *ep); }; @@ -102,7 +102,7 @@ void grpc_endpoint_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, grpc_pollset_set *pollset_set); -grpc_buffer_user *grpc_endpoint_get_buffer_user(grpc_endpoint *endpoint); +grpc_resource_user *grpc_endpoint_get_resource_user(grpc_endpoint *endpoint); struct grpc_endpoint { const grpc_endpoint_vtable *vtable; diff --git a/src/core/lib/iomgr/endpoint_pair.h b/src/core/lib/iomgr/endpoint_pair.h index 4938cf85993..27c17a0e970 100644 --- a/src/core/lib/iomgr/endpoint_pair.h +++ b/src/core/lib/iomgr/endpoint_pair.h @@ -42,6 +42,6 @@ typedef struct { } grpc_endpoint_pair; grpc_endpoint_pair grpc_iomgr_create_endpoint_pair( - const char *name, grpc_buffer_pool *buffer_pool, size_t read_slice_size); + const char *name, grpc_resource_quota *resource_quota, size_t read_slice_size); #endif /* GRPC_CORE_LIB_IOMGR_ENDPOINT_PAIR_H */ diff --git a/src/core/lib/iomgr/endpoint_pair_posix.c b/src/core/lib/iomgr/endpoint_pair_posix.c index 64c161675f3..c1437bcf179 100644 --- a/src/core/lib/iomgr/endpoint_pair_posix.c +++ b/src/core/lib/iomgr/endpoint_pair_posix.c @@ -63,18 +63,18 @@ static void create_sockets(int sv[2]) { } grpc_endpoint_pair grpc_iomgr_create_endpoint_pair( - const char *name, grpc_buffer_pool *buffer_pool, size_t read_slice_size) { + const char *name, grpc_resource_quota *resource_quota, size_t read_slice_size) { int sv[2]; grpc_endpoint_pair p; char *final_name; create_sockets(sv); gpr_asprintf(&final_name, "%s:client", name); - p.client = grpc_tcp_create(grpc_fd_create(sv[1], final_name), buffer_pool, + p.client = grpc_tcp_create(grpc_fd_create(sv[1], final_name), resource_quota, read_slice_size, "socketpair-server"); gpr_free(final_name); gpr_asprintf(&final_name, "%s:server", name); - p.server = grpc_tcp_create(grpc_fd_create(sv[0], final_name), buffer_pool, + p.server = grpc_tcp_create(grpc_fd_create(sv[0], final_name), resource_quota, read_slice_size, "socketpair-client"); gpr_free(final_name); return p; diff --git a/src/core/lib/iomgr/resource_quota.c b/src/core/lib/iomgr/resource_quota.c new file mode 100644 index 00000000000..c4e6e5482af --- /dev/null +++ b/src/core/lib/iomgr/resource_quota.c @@ -0,0 +1,684 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/resource_quota.h" + +#include + +#include +#include +#include +#include + +#include "src/core/lib/iomgr/combiner.h" + +int grpc_resource_quota_trace = 0; + +typedef bool (*bpstate_func)(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota); + +typedef struct { + grpc_resource_user *head; + grpc_resource_user *tail; +} grpc_resource_user_list; + +struct grpc_resource_quota { + gpr_refcount refs; + + grpc_combiner *combiner; + int64_t size; + int64_t free_pool; + + bool step_scheduled; + bool reclaiming; + grpc_closure bpstep_closure; + grpc_closure bpreclaimation_done_closure; + + grpc_resource_user *roots[GRPC_BULIST_COUNT]; + + char *name; +}; + +/******************************************************************************* + * list management + */ + +static void bulist_add_tail(grpc_resource_user *resource_user, grpc_bulist list) { + grpc_resource_quota *resource_quota = resource_user->resource_quota; + grpc_resource_user **root = &resource_quota->roots[list]; + if (*root == NULL) { + *root = resource_user; + resource_user->links[list].next = resource_user->links[list].prev = resource_user; + } else { + resource_user->links[list].next = *root; + resource_user->links[list].prev = (*root)->links[list].prev; + resource_user->links[list].next->links[list].prev = + resource_user->links[list].prev->links[list].next = resource_user; + } +} + +static void bulist_add_head(grpc_resource_user *resource_user, grpc_bulist list) { + grpc_resource_quota *resource_quota = resource_user->resource_quota; + grpc_resource_user **root = &resource_quota->roots[list]; + if (*root == NULL) { + *root = resource_user; + resource_user->links[list].next = resource_user->links[list].prev = resource_user; + } else { + resource_user->links[list].next = (*root)->links[list].next; + resource_user->links[list].prev = *root; + resource_user->links[list].next->links[list].prev = + resource_user->links[list].prev->links[list].next = resource_user; + *root = resource_user; + } +} + +static bool bulist_empty(grpc_resource_quota *resource_quota, grpc_bulist list) { + return resource_quota->roots[list] == NULL; +} + +static grpc_resource_user *bulist_pop(grpc_resource_quota *resource_quota, + grpc_bulist list) { + grpc_resource_user **root = &resource_quota->roots[list]; + grpc_resource_user *resource_user = *root; + if (resource_user == NULL) { + return NULL; + } + if (resource_user->links[list].next == resource_user) { + *root = NULL; + } else { + resource_user->links[list].next->links[list].prev = + resource_user->links[list].prev; + resource_user->links[list].prev->links[list].next = + resource_user->links[list].next; + *root = resource_user->links[list].next; + } + resource_user->links[list].next = resource_user->links[list].prev = NULL; + return resource_user; +} + +static void bulist_remove(grpc_resource_user *resource_user, grpc_bulist list) { + if (resource_user->links[list].next == NULL) return; + grpc_resource_quota *resource_quota = resource_user->resource_quota; + if (resource_quota->roots[list] == resource_user) { + resource_quota->roots[list] = resource_user->links[list].next; + if (resource_quota->roots[list] == resource_user) { + resource_quota->roots[list] = NULL; + } + } + resource_user->links[list].next->links[list].prev = + resource_user->links[list].prev; + resource_user->links[list].prev->links[list].next = + resource_user->links[list].next; +} + +/******************************************************************************* + * buffer pool state machine + */ + +static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota); +static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota); +static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota, + bool destructive); + +static void bpstep(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { + grpc_resource_quota *resource_quota = bp; + resource_quota->step_scheduled = false; + do { + if (bpalloc(exec_ctx, resource_quota)) goto done; + } while (bpscavenge(exec_ctx, resource_quota)); + bpreclaim(exec_ctx, resource_quota, false) || + bpreclaim(exec_ctx, resource_quota, true); +done: + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); +} + +static void bpstep_sched(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota) { + if (resource_quota->step_scheduled) return; + resource_quota->step_scheduled = true; + grpc_resource_quota_internal_ref(resource_quota); + grpc_combiner_execute_finally(exec_ctx, resource_quota->combiner, + &resource_quota->bpstep_closure, GRPC_ERROR_NONE, + false); +} + +/* returns true if all allocations are completed */ +static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota) { + grpc_resource_user *resource_user; + while ((resource_user = + bulist_pop(resource_quota, GRPC_BULIST_AWAITING_ALLOCATION))) { + gpr_mu_lock(&resource_user->mu); + if (resource_user->free_pool < 0 && + -resource_user->free_pool <= resource_quota->free_pool) { + int64_t amt = -resource_user->free_pool; + resource_user->free_pool = 0; + resource_quota->free_pool -= amt; + if (grpc_resource_quota_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: grant alloc %" PRId64 + " bytes; bp_free_pool -> %" PRId64, + resource_quota->name, resource_user->name, amt, + resource_quota->free_pool); + } + } else if (grpc_resource_quota_trace && resource_user->free_pool >= 0) { + gpr_log(GPR_DEBUG, "BP %s %s: discard already satisfied alloc request", + resource_quota->name, resource_user->name); + } + if (resource_user->free_pool >= 0) { + resource_user->allocating = false; + grpc_exec_ctx_enqueue_list(exec_ctx, &resource_user->on_allocated, NULL); + gpr_mu_unlock(&resource_user->mu); + } else { + bulist_add_head(resource_user, GRPC_BULIST_AWAITING_ALLOCATION); + gpr_mu_unlock(&resource_user->mu); + return false; + } + } + return true; +} + +/* returns true if any memory could be reclaimed from buffers */ +static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota) { + grpc_resource_user *resource_user; + while ((resource_user = + bulist_pop(resource_quota, GRPC_BULIST_NON_EMPTY_FREE_POOL))) { + gpr_mu_lock(&resource_user->mu); + if (resource_user->free_pool > 0) { + int64_t amt = resource_user->free_pool; + resource_user->free_pool = 0; + resource_quota->free_pool += amt; + if (grpc_resource_quota_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: scavenge %" PRId64 + " bytes; bp_free_pool -> %" PRId64, + resource_quota->name, resource_user->name, amt, + resource_quota->free_pool); + } + gpr_mu_unlock(&resource_user->mu); + return true; + } else { + gpr_mu_unlock(&resource_user->mu); + } + } + return false; +} + +/* returns true if reclaimation is proceeding */ +static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota, + bool destructive) { + if (resource_quota->reclaiming) return true; + grpc_bulist list = destructive ? GRPC_BULIST_RECLAIMER_DESTRUCTIVE + : GRPC_BULIST_RECLAIMER_BENIGN; + grpc_resource_user *resource_user = bulist_pop(resource_quota, list); + if (resource_user == NULL) return false; + if (grpc_resource_quota_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: initiate %s reclaimation", resource_quota->name, + resource_user->name, destructive ? "destructive" : "benign"); + } + resource_quota->reclaiming = true; + grpc_resource_quota_internal_ref(resource_quota); + grpc_closure *c = resource_user->reclaimers[destructive]; + resource_user->reclaimers[destructive] = NULL; + grpc_closure_run(exec_ctx, c, GRPC_ERROR_NONE); + return true; +} + +/******************************************************************************* + * bu_slice: a slice implementation that is backed by a grpc_resource_user + */ + +typedef struct { + gpr_slice_refcount base; + gpr_refcount refs; + grpc_resource_user *resource_user; + size_t size; +} bu_slice_refcount; + +static void bu_slice_ref(void *p) { + bu_slice_refcount *rc = p; + gpr_ref(&rc->refs); +} + +static void bu_slice_unref(void *p) { + bu_slice_refcount *rc = p; + if (gpr_unref(&rc->refs)) { + /* TODO(ctiller): this is dangerous, but I think safe for now: + we have no guarantee here that we're at a safe point for creating an + execution context, but we have no way of writing this code otherwise. + In the future: consider lifting gpr_slice to grpc, and offering an + internal_{ref,unref} pair that is execution context aware. Alternatively, + make exec_ctx be thread local and 'do the right thing' (whatever that is) + if NULL */ + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_resource_user_free(&exec_ctx, rc->resource_user, rc->size); + grpc_exec_ctx_finish(&exec_ctx); + gpr_free(rc); + } +} + +static gpr_slice bu_slice_create(grpc_resource_user *resource_user, size_t size) { + bu_slice_refcount *rc = gpr_malloc(sizeof(bu_slice_refcount) + size); + rc->base.ref = bu_slice_ref; + rc->base.unref = bu_slice_unref; + gpr_ref_init(&rc->refs, 1); + rc->resource_user = resource_user; + rc->size = size; + gpr_slice slice; + slice.refcount = &rc->base; + slice.data.refcounted.bytes = (uint8_t *)(rc + 1); + slice.data.refcounted.length = size; + return slice; +} + +/******************************************************************************* + * grpc_resource_quota internal implementation + */ + +static void bu_allocate(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { + grpc_resource_user *resource_user = bu; + if (bulist_empty(resource_user->resource_quota, GRPC_BULIST_AWAITING_ALLOCATION)) { + bpstep_sched(exec_ctx, resource_user->resource_quota); + } + bulist_add_tail(resource_user, GRPC_BULIST_AWAITING_ALLOCATION); +} + +static void bu_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, + grpc_error *error) { + grpc_resource_user *resource_user = bu; + if (!bulist_empty(resource_user->resource_quota, + GRPC_BULIST_AWAITING_ALLOCATION) && + bulist_empty(resource_user->resource_quota, GRPC_BULIST_NON_EMPTY_FREE_POOL)) { + bpstep_sched(exec_ctx, resource_user->resource_quota); + } + bulist_add_tail(resource_user, GRPC_BULIST_NON_EMPTY_FREE_POOL); +} + +static void bu_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, + grpc_error *error) { + grpc_resource_user *resource_user = bu; + if (!bulist_empty(resource_user->resource_quota, + GRPC_BULIST_AWAITING_ALLOCATION) && + bulist_empty(resource_user->resource_quota, GRPC_BULIST_NON_EMPTY_FREE_POOL) && + bulist_empty(resource_user->resource_quota, GRPC_BULIST_RECLAIMER_BENIGN)) { + bpstep_sched(exec_ctx, resource_user->resource_quota); + } + bulist_add_tail(resource_user, GRPC_BULIST_RECLAIMER_BENIGN); +} + +static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, + grpc_error *error) { + grpc_resource_user *resource_user = bu; + if (!bulist_empty(resource_user->resource_quota, + GRPC_BULIST_AWAITING_ALLOCATION) && + bulist_empty(resource_user->resource_quota, GRPC_BULIST_NON_EMPTY_FREE_POOL) && + bulist_empty(resource_user->resource_quota, GRPC_BULIST_RECLAIMER_BENIGN) && + bulist_empty(resource_user->resource_quota, + GRPC_BULIST_RECLAIMER_DESTRUCTIVE)) { + bpstep_sched(exec_ctx, resource_user->resource_quota); + } + bulist_add_tail(resource_user, GRPC_BULIST_RECLAIMER_DESTRUCTIVE); +} + +static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { + grpc_resource_user *resource_user = bu; + GPR_ASSERT(resource_user->allocated == 0); + for (int i = 0; i < GRPC_BULIST_COUNT; i++) { + bulist_remove(resource_user, (grpc_bulist)i); + } + grpc_exec_ctx_sched(exec_ctx, resource_user->reclaimers[0], + GRPC_ERROR_CANCELLED, NULL); + grpc_exec_ctx_sched(exec_ctx, resource_user->reclaimers[1], + GRPC_ERROR_CANCELLED, NULL); + grpc_exec_ctx_sched(exec_ctx, (grpc_closure *)gpr_atm_no_barrier_load( + &resource_user->on_done_destroy_closure), + GRPC_ERROR_NONE, NULL); + if (resource_user->free_pool != 0) { + resource_user->resource_quota->free_pool += resource_user->free_pool; + bpstep_sched(exec_ctx, resource_user->resource_quota); + } +} + +static void bu_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, + grpc_error *error) { + grpc_resource_user_slice_allocator *slice_allocator = ts; + if (error == GRPC_ERROR_NONE) { + for (size_t i = 0; i < slice_allocator->count; i++) { + gpr_slice_buffer_add_indexed(slice_allocator->dest, + bu_slice_create(slice_allocator->resource_user, + slice_allocator->length)); + } + } + grpc_closure_run(exec_ctx, &slice_allocator->on_done, GRPC_ERROR_REF(error)); +} + +typedef struct { + int64_t size; + grpc_resource_quota *resource_quota; + grpc_closure closure; +} bp_resize_args; + +static void bp_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { + bp_resize_args *a = args; + int64_t delta = a->size - a->resource_quota->size; + a->resource_quota->size += delta; + a->resource_quota->free_pool += delta; + if (delta < 0 && a->resource_quota->free_pool < 0) { + bpstep_sched(exec_ctx, a->resource_quota); + } else if (delta > 0 && + !bulist_empty(a->resource_quota, GRPC_BULIST_AWAITING_ALLOCATION)) { + bpstep_sched(exec_ctx, a->resource_quota); + } + grpc_resource_quota_internal_unref(exec_ctx, a->resource_quota); + gpr_free(a); +} + +static void bp_reclaimation_done(grpc_exec_ctx *exec_ctx, void *bp, + grpc_error *error) { + grpc_resource_quota *resource_quota = bp; + resource_quota->reclaiming = false; + bpstep_sched(exec_ctx, resource_quota); + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); +} + +/******************************************************************************* + * grpc_resource_quota api + */ + +grpc_resource_quota *grpc_resource_quota_create(const char *name) { + grpc_resource_quota *resource_quota = gpr_malloc(sizeof(*resource_quota)); + gpr_ref_init(&resource_quota->refs, 1); + resource_quota->combiner = grpc_combiner_create(NULL); + resource_quota->free_pool = INT64_MAX; + resource_quota->size = INT64_MAX; + resource_quota->step_scheduled = false; + resource_quota->reclaiming = false; + if (name != NULL) { + resource_quota->name = gpr_strdup(name); + } else { + gpr_asprintf(&resource_quota->name, "anonymous_pool_%" PRIxPTR, + (intptr_t)resource_quota); + } + grpc_closure_init(&resource_quota->bpstep_closure, bpstep, resource_quota); + grpc_closure_init(&resource_quota->bpreclaimation_done_closure, + bp_reclaimation_done, resource_quota); + for (int i = 0; i < GRPC_BULIST_COUNT; i++) { + resource_quota->roots[i] = NULL; + } + return resource_quota; +} + +void grpc_resource_quota_internal_unref(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota) { + if (gpr_unref(&resource_quota->refs)) { + grpc_combiner_destroy(exec_ctx, resource_quota->combiner); + gpr_free(resource_quota->name); + gpr_free(resource_quota); + } +} + +void grpc_resource_quota_unref(grpc_resource_quota *resource_quota) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); + grpc_exec_ctx_finish(&exec_ctx); +} + +grpc_resource_quota *grpc_resource_quota_internal_ref(grpc_resource_quota *resource_quota) { + gpr_ref(&resource_quota->refs); + return resource_quota; +} + +void grpc_resource_quota_ref(grpc_resource_quota *resource_quota) { + grpc_resource_quota_internal_ref(resource_quota); +} + +void grpc_resource_quota_resize(grpc_resource_quota *resource_quota, size_t size) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + bp_resize_args *a = gpr_malloc(sizeof(*a)); + a->resource_quota = grpc_resource_quota_internal_ref(resource_quota); + a->size = (int64_t)size; + grpc_closure_init(&a->closure, bp_resize, a); + grpc_combiner_execute(&exec_ctx, resource_quota->combiner, &a->closure, + GRPC_ERROR_NONE, false); + grpc_exec_ctx_finish(&exec_ctx); +} + +/******************************************************************************* + * grpc_resource_user channel args api + */ + +grpc_resource_quota *grpc_resource_quota_from_channel_args( + const grpc_channel_args *channel_args) { + for (size_t i = 0; i < channel_args->num_args; i++) { + if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_BUFFER_POOL)) { + if (channel_args->args[i].type == GRPC_ARG_POINTER) { + return grpc_resource_quota_internal_ref( + channel_args->args[i].value.pointer.p); + } else { + gpr_log(GPR_DEBUG, GRPC_ARG_BUFFER_POOL " should be a pointer"); + } + } + } + return grpc_resource_quota_create(NULL); +} + +static void *bp_copy(void *bp) { + grpc_resource_quota_ref(bp); + return bp; +} + +static void bp_destroy(void *bp) { grpc_resource_quota_unref(bp); } + +static int bp_cmp(void *a, void *b) { return GPR_ICMP(a, b); } + +const grpc_arg_pointer_vtable *grpc_resource_quota_arg_vtable(void) { + static const grpc_arg_pointer_vtable vtable = {bp_copy, bp_destroy, bp_cmp}; + return &vtable; +} + +/******************************************************************************* + * grpc_resource_user api + */ + +void grpc_resource_user_init(grpc_resource_user *resource_user, + grpc_resource_quota *resource_quota, const char *name) { + resource_user->resource_quota = grpc_resource_quota_internal_ref(resource_quota); + grpc_closure_init(&resource_user->allocate_closure, &bu_allocate, resource_user); + grpc_closure_init(&resource_user->add_to_free_pool_closure, + &bu_add_to_free_pool, resource_user); + grpc_closure_init(&resource_user->post_reclaimer_closure[0], + &bu_post_benign_reclaimer, resource_user); + grpc_closure_init(&resource_user->post_reclaimer_closure[1], + &bu_post_destructive_reclaimer, resource_user); + grpc_closure_init(&resource_user->destroy_closure, &bu_destroy, resource_user); + gpr_mu_init(&resource_user->mu); + resource_user->allocated = 0; + resource_user->free_pool = 0; + grpc_closure_list_init(&resource_user->on_allocated); + resource_user->allocating = false; + resource_user->added_to_free_pool = false; + gpr_atm_no_barrier_store(&resource_user->on_done_destroy_closure, 0); + resource_user->reclaimers[0] = NULL; + resource_user->reclaimers[1] = NULL; + for (int i = 0; i < GRPC_BULIST_COUNT; i++) { + resource_user->links[i].next = resource_user->links[i].prev = NULL; + } +#ifndef NDEBUG + resource_user->asan_canary = gpr_malloc(1); +#endif + if (name != NULL) { + resource_user->name = gpr_strdup(name); + } else { + gpr_asprintf(&resource_user->name, "anonymous_resource_user_%" PRIxPTR, + (intptr_t)resource_user); + } +} + +void grpc_resource_user_shutdown(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user, + grpc_closure *on_done) { + gpr_mu_lock(&resource_user->mu); + GPR_ASSERT(gpr_atm_no_barrier_load(&resource_user->on_done_destroy_closure) == + 0); + gpr_atm_no_barrier_store(&resource_user->on_done_destroy_closure, + (gpr_atm)on_done); + if (resource_user->allocated == 0) { + grpc_combiner_execute(exec_ctx, resource_user->resource_quota->combiner, + &resource_user->destroy_closure, GRPC_ERROR_NONE, + false); + } + gpr_mu_unlock(&resource_user->mu); +} + +void grpc_resource_user_destroy(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user) { +#ifndef NDEBUG + gpr_free(resource_user->asan_canary); +#endif + grpc_resource_quota_internal_unref(exec_ctx, resource_user->resource_quota); + gpr_mu_destroy(&resource_user->mu); + gpr_free(resource_user->name); +} + +void grpc_resource_user_alloc(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user, size_t size, + grpc_closure *optional_on_done) { + gpr_mu_lock(&resource_user->mu); + grpc_closure *on_done_destroy = (grpc_closure *)gpr_atm_no_barrier_load( + &resource_user->on_done_destroy_closure); + if (on_done_destroy != NULL) { + /* already shutdown */ + if (grpc_resource_quota_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: alloc %" PRIdPTR " after shutdown", + resource_user->resource_quota->name, resource_user->name, size); + } + grpc_exec_ctx_sched( + exec_ctx, optional_on_done, + GRPC_ERROR_CREATE("Buffer pool user is already shutdown"), NULL); + gpr_mu_unlock(&resource_user->mu); + return; + } + resource_user->allocated += (int64_t)size; + resource_user->free_pool -= (int64_t)size; + if (grpc_resource_quota_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: alloc %" PRIdPTR "; allocated -> %" PRId64 + ", free_pool -> %" PRId64, + resource_user->resource_quota->name, resource_user->name, size, + resource_user->allocated, resource_user->free_pool); + } + if (resource_user->free_pool < 0) { + grpc_closure_list_append(&resource_user->on_allocated, optional_on_done, + GRPC_ERROR_NONE); + if (!resource_user->allocating) { + resource_user->allocating = true; + grpc_combiner_execute(exec_ctx, resource_user->resource_quota->combiner, + &resource_user->allocate_closure, GRPC_ERROR_NONE, + false); + } + } else { + grpc_exec_ctx_sched(exec_ctx, optional_on_done, GRPC_ERROR_NONE, NULL); + } + gpr_mu_unlock(&resource_user->mu); +} + +void grpc_resource_user_free(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user, size_t size) { + gpr_mu_lock(&resource_user->mu); + GPR_ASSERT(resource_user->allocated >= (int64_t)size); + bool was_zero_or_negative = resource_user->free_pool <= 0; + resource_user->free_pool += (int64_t)size; + resource_user->allocated -= (int64_t)size; + if (grpc_resource_quota_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: free %" PRIdPTR "; allocated -> %" PRId64 + ", free_pool -> %" PRId64, + resource_user->resource_quota->name, resource_user->name, size, + resource_user->allocated, resource_user->free_pool); + } + bool is_bigger_than_zero = resource_user->free_pool > 0; + if (is_bigger_than_zero && was_zero_or_negative && + !resource_user->added_to_free_pool) { + resource_user->added_to_free_pool = true; + grpc_combiner_execute(exec_ctx, resource_user->resource_quota->combiner, + &resource_user->add_to_free_pool_closure, + GRPC_ERROR_NONE, false); + } + grpc_closure *on_done_destroy = (grpc_closure *)gpr_atm_no_barrier_load( + &resource_user->on_done_destroy_closure); + if (on_done_destroy != NULL && resource_user->allocated == 0) { + grpc_combiner_execute(exec_ctx, resource_user->resource_quota->combiner, + &resource_user->destroy_closure, GRPC_ERROR_NONE, + false); + } + gpr_mu_unlock(&resource_user->mu); +} + +void grpc_resource_user_post_reclaimer(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user, + bool destructive, grpc_closure *closure) { + if (gpr_atm_acq_load(&resource_user->on_done_destroy_closure) == 0) { + GPR_ASSERT(resource_user->reclaimers[destructive] == NULL); + resource_user->reclaimers[destructive] = closure; + grpc_combiner_execute(exec_ctx, resource_user->resource_quota->combiner, + &resource_user->post_reclaimer_closure[destructive], + GRPC_ERROR_NONE, false); + } else { + grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_CANCELLED, NULL); + } +} + +void grpc_resource_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user) { + if (grpc_resource_quota_trace) { + gpr_log(GPR_DEBUG, "BP %s %s: reclaimation complete", + resource_user->resource_quota->name, resource_user->name); + } + grpc_combiner_execute(exec_ctx, resource_user->resource_quota->combiner, + &resource_user->resource_quota->bpreclaimation_done_closure, + GRPC_ERROR_NONE, false); +} + +void grpc_resource_user_slice_allocator_init( + grpc_resource_user_slice_allocator *slice_allocator, + grpc_resource_user *resource_user, grpc_iomgr_cb_func cb, void *p) { + grpc_closure_init(&slice_allocator->on_allocated, bu_allocated_slices, + slice_allocator); + grpc_closure_init(&slice_allocator->on_done, cb, p); + slice_allocator->resource_user = resource_user; +} + +void grpc_resource_user_alloc_slices( + grpc_exec_ctx *exec_ctx, grpc_resource_user_slice_allocator *slice_allocator, + size_t length, size_t count, gpr_slice_buffer *dest) { + slice_allocator->length = length; + slice_allocator->count = count; + slice_allocator->dest = dest; + grpc_resource_user_alloc(exec_ctx, slice_allocator->resource_user, count * length, + &slice_allocator->on_allocated); +} diff --git a/src/core/lib/iomgr/buffer_pool.h b/src/core/lib/iomgr/resource_quota.h similarity index 53% rename from src/core/lib/iomgr/buffer_pool.h rename to src/core/lib/iomgr/resource_quota.h index 1564872b5d6..5c566e492c3 100644 --- a/src/core/lib/iomgr/buffer_pool.h +++ b/src/core/lib/iomgr/resource_quota.h @@ -38,12 +38,13 @@ #include "src/core/lib/iomgr/exec_ctx.h" -extern int grpc_buffer_pool_trace; +extern int grpc_resource_quota_trace; -grpc_buffer_pool *grpc_buffer_pool_internal_ref(grpc_buffer_pool *buffer_pool); -void grpc_buffer_pool_internal_unref(grpc_exec_ctx *exec_ctx, - grpc_buffer_pool *buffer_pool); -grpc_buffer_pool *grpc_buffer_pool_from_channel_args( +grpc_resource_quota *grpc_resource_quota_internal_ref( + grpc_resource_quota *resource_quota); +void grpc_resource_quota_internal_unref(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota); +grpc_resource_quota *grpc_resource_quota_from_channel_args( const grpc_channel_args *channel_args); typedef enum { @@ -54,15 +55,15 @@ typedef enum { GRPC_BULIST_COUNT } grpc_bulist; -typedef struct grpc_buffer_user grpc_buffer_user; +typedef struct grpc_resource_user grpc_resource_user; typedef struct { - grpc_buffer_user *next; - grpc_buffer_user *prev; -} grpc_buffer_user_link; + grpc_resource_user *next; + grpc_resource_user *prev; +} grpc_resource_user_link; -struct grpc_buffer_user { - grpc_buffer_pool *buffer_pool; +struct grpc_resource_user { + grpc_resource_quota *resource_quota; grpc_closure allocate_closure; grpc_closure add_to_free_pool_closure; @@ -84,45 +85,47 @@ struct grpc_buffer_user { grpc_closure destroy_closure; gpr_atm on_done_destroy_closure; - grpc_buffer_user_link links[GRPC_BULIST_COUNT]; + grpc_resource_user_link links[GRPC_BULIST_COUNT]; char *name; }; -void grpc_buffer_user_init(grpc_buffer_user *buffer_user, - grpc_buffer_pool *buffer_pool, const char *name); -void grpc_buffer_user_shutdown(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, - grpc_closure *on_done); -void grpc_buffer_user_destroy(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user); - -void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, size_t size, - grpc_closure *optional_on_done); -void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, size_t size); -void grpc_buffer_user_post_reclaimer(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user, - bool destructive, grpc_closure *closure); -void grpc_buffer_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, - grpc_buffer_user *buffer_user); - -typedef struct grpc_buffer_user_slice_allocator { +void grpc_resource_user_init(grpc_resource_user *resource_user, + grpc_resource_quota *resource_quota, + const char *name); +void grpc_resource_user_shutdown(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user, + grpc_closure *on_done); +void grpc_resource_user_destroy(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user); + +void grpc_resource_user_alloc(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user, size_t size, + grpc_closure *optional_on_done); +void grpc_resource_user_free(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user, size_t size); +void grpc_resource_user_post_reclaimer(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user, + bool destructive, grpc_closure *closure); +void grpc_resource_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user); + +typedef struct grpc_resource_user_slice_allocator { grpc_closure on_allocated; grpc_closure on_done; size_t length; size_t count; gpr_slice_buffer *dest; - grpc_buffer_user *buffer_user; -} grpc_buffer_user_slice_allocator; + grpc_resource_user *resource_user; +} grpc_resource_user_slice_allocator; -void grpc_buffer_user_slice_allocator_init( - grpc_buffer_user_slice_allocator *slice_allocator, - grpc_buffer_user *buffer_user, grpc_iomgr_cb_func cb, void *p); +void grpc_resource_user_slice_allocator_init( + grpc_resource_user_slice_allocator *slice_allocator, + grpc_resource_user *resource_user, grpc_iomgr_cb_func cb, void *p); -void grpc_buffer_user_alloc_slices( - grpc_exec_ctx *exec_ctx, grpc_buffer_user_slice_allocator *slice_allocator, - size_t length, size_t count, gpr_slice_buffer *dest); +void grpc_resource_user_alloc_slices( + grpc_exec_ctx *exec_ctx, + grpc_resource_user_slice_allocator *slice_allocator, size_t length, + size_t count, gpr_slice_buffer *dest); #endif /* GRPC_CORE_LIB_IOMGR_BUFFER_POOL_H */ diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index dadd4cc2eb2..e74a696c2fd 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -125,7 +125,7 @@ grpc_endpoint *grpc_tcp_client_create_from_fd( grpc_exec_ctx *exec_ctx, grpc_fd *fd, const grpc_channel_args *channel_args, const char *addr_str) { size_t tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE; - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create(NULL); + grpc_resource_quota *resource_quota = grpc_resource_quota_create(NULL); if (channel_args != NULL) { for (size_t i = 0; i < channel_args->num_args; i++) { if (0 == @@ -135,16 +135,16 @@ grpc_endpoint *grpc_tcp_client_create_from_fd( tcp_read_chunk_size = (size_t)grpc_channel_arg_get_integer( &channel_args->args[i], options); } else if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_BUFFER_POOL)) { - grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); - buffer_pool = grpc_buffer_pool_internal_ref( + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); + resource_quota = grpc_resource_quota_internal_ref( channel_args->args[i].value.pointer.p); } } } grpc_endpoint *ep = - grpc_tcp_create(fd, buffer_pool, tcp_read_chunk_size, addr_str); - grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); + grpc_tcp_create(fd, resource_quota, tcp_read_chunk_size, addr_str); + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); return ep; } diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 648ca52818b..27b66775457 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -102,8 +102,8 @@ typedef struct { char *peer_string; - grpc_buffer_user buffer_user; - grpc_buffer_user_slice_allocator slice_allocator; + grpc_resource_user resource_user; + grpc_resource_user_slice_allocator slice_allocator; } grpc_tcp; static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, @@ -113,17 +113,17 @@ static void tcp_handle_write(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, static void tcp_unref_closure(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, grpc_error *error); -static void tcp_maybe_shutdown_buffer_user(grpc_exec_ctx *exec_ctx, - grpc_tcp *tcp) { +static void tcp_maybe_shutdown_resource_user(grpc_exec_ctx *exec_ctx, + grpc_tcp *tcp) { if (gpr_atm_full_fetch_add(&tcp->shutdown_count, 1) == 0) { - grpc_buffer_user_shutdown(exec_ctx, &tcp->buffer_user, - grpc_closure_create(tcp_unref_closure, tcp)); + grpc_resource_user_shutdown(exec_ctx, &tcp->resource_user, + grpc_closure_create(tcp_unref_closure, tcp)); } } static void tcp_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; - tcp_maybe_shutdown_buffer_user(exec_ctx, tcp); + tcp_maybe_shutdown_resource_user(exec_ctx, tcp); grpc_fd_shutdown(exec_ctx, tcp->em_fd); } @@ -131,7 +131,7 @@ static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { grpc_fd_orphan(exec_ctx, tcp->em_fd, tcp->release_fd_cb, tcp->release_fd, "tcp_unref_orphan"); gpr_slice_buffer_destroy(&tcp->last_read_buffer); - grpc_buffer_user_destroy(exec_ctx, &tcp->buffer_user); + grpc_resource_user_destroy(exec_ctx, &tcp->resource_user); gpr_free(tcp->peer_string); gpr_free(tcp); } @@ -170,13 +170,13 @@ static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); } static void tcp_unref_closure(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { - TCP_UNREF(exec_ctx, arg, "buffer_user"); + TCP_UNREF(exec_ctx, arg, "resource_user"); } static void tcp_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_network_status_unregister_endpoint(ep); grpc_tcp *tcp = (grpc_tcp *)ep; - tcp_maybe_shutdown_buffer_user(exec_ctx, tcp); + tcp_maybe_shutdown_resource_user(exec_ctx, tcp); gpr_slice_buffer_reset_and_unref(&tcp->last_read_buffer); TCP_UNREF(exec_ctx, tcp, "destroy"); } @@ -286,7 +286,7 @@ static void tcp_read_allocation_done(grpc_exec_ctx *exec_ctx, void *tcpp, static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { if (tcp->incoming_buffer->count < (size_t)tcp->iov_size) { - grpc_buffer_user_alloc_slices( + grpc_resource_user_alloc_slices( exec_ctx, &tcp->slice_allocator, tcp->slice_size, (size_t)tcp->iov_size - tcp->incoming_buffer->count, tcp->incoming_buffer); @@ -513,9 +513,9 @@ static grpc_workqueue *tcp_get_workqueue(grpc_endpoint *ep) { return grpc_fd_get_workqueue(tcp->em_fd); } -static grpc_buffer_user *tcp_get_buffer_user(grpc_endpoint *ep) { +static grpc_resource_user *tcp_get_resource_user(grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; - return &tcp->buffer_user; + return &tcp->resource_user; } static const grpc_endpoint_vtable vtable = {tcp_read, @@ -525,10 +525,11 @@ static const grpc_endpoint_vtable vtable = {tcp_read, tcp_add_to_pollset_set, tcp_shutdown, tcp_destroy, - tcp_get_buffer_user, + tcp_get_resource_user, tcp_get_peer}; -grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, grpc_buffer_pool *buffer_pool, +grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, + grpc_resource_quota *resource_quota, size_t slice_size, const char *peer_string) { grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp)); tcp->base.vtable = &vtable; @@ -543,7 +544,7 @@ grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, grpc_buffer_pool *buffer_pool, tcp->iov_size = 1; tcp->finished_edge = true; /* paired with unref in grpc_tcp_destroy, and with the shutdown for our - * buffer_user */ + * resource_user */ gpr_ref_init(&tcp->refcount, 2); gpr_atm_no_barrier_store(&tcp->shutdown_count, 0); tcp->em_fd = em_fd; @@ -552,9 +553,10 @@ grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, grpc_buffer_pool *buffer_pool, tcp->write_closure.cb = tcp_handle_write; tcp->write_closure.cb_arg = tcp; gpr_slice_buffer_init(&tcp->last_read_buffer); - grpc_buffer_user_init(&tcp->buffer_user, buffer_pool, peer_string); - grpc_buffer_user_slice_allocator_init( - &tcp->slice_allocator, &tcp->buffer_user, tcp_read_allocation_done, tcp); + grpc_resource_user_init(&tcp->resource_user, resource_quota, peer_string); + grpc_resource_user_slice_allocator_init(&tcp->slice_allocator, + &tcp->resource_user, + tcp_read_allocation_done, tcp); /* Tell network status tracker about new endpoint */ grpc_network_status_register_endpoint(&tcp->base); @@ -574,7 +576,7 @@ void grpc_tcp_destroy_and_release_fd(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, GPR_ASSERT(ep->vtable == &vtable); tcp->release_fd = fd; tcp->release_fd_cb = done; - tcp_maybe_shutdown_buffer_user(exec_ctx, tcp); + tcp_maybe_shutdown_resource_user(exec_ctx, tcp); gpr_slice_buffer_reset_and_unref(&tcp->last_read_buffer); TCP_UNREF(exec_ctx, tcp, "destroy"); } diff --git a/src/core/lib/iomgr/tcp_posix.h b/src/core/lib/iomgr/tcp_posix.h index 768355cf0c6..1c0d13f96e2 100644 --- a/src/core/lib/iomgr/tcp_posix.h +++ b/src/core/lib/iomgr/tcp_posix.h @@ -53,7 +53,7 @@ extern int grpc_tcp_trace; /* Create a tcp endpoint given a file desciptor and a read slice size. Takes ownership of fd. */ -grpc_endpoint *grpc_tcp_create(grpc_fd *fd, grpc_buffer_pool *buffer_pool, +grpc_endpoint *grpc_tcp_create(grpc_fd *fd, grpc_resource_quota *resource_quota, size_t read_slice_size, const char *peer_string); /* Return the tcp endpoint's fd, or -1 if this is not available. Does not diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index 2afce529eff..b2eb89f429a 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -138,7 +138,7 @@ struct grpc_tcp_server { /* next pollset to assign a channel to */ gpr_atm next_pollset_to_assign; - grpc_buffer_pool *buffer_pool; + grpc_resource_quota *resource_quota; }; static gpr_once check_init = GPR_ONCE_INIT; @@ -163,25 +163,25 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server)); s->so_reuseport = has_so_reuseport; - s->buffer_pool = grpc_buffer_pool_create(NULL); + s->resource_quota = grpc_resource_quota_create(NULL); for (size_t i = 0; i < (args == NULL ? 0 : args->num_args); i++) { if (0 == strcmp(GRPC_ARG_ALLOW_REUSEPORT, args->args[i].key)) { if (args->args[i].type == GRPC_ARG_INTEGER) { s->so_reuseport = has_so_reuseport && (args->args[i].value.integer != 0); } else { - grpc_buffer_pool_internal_unref(exec_ctx, s->buffer_pool); + grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); gpr_free(s); return GRPC_ERROR_CREATE(GRPC_ARG_ALLOW_REUSEPORT " must be an integer"); } } else if (0 == strcmp(GRPC_ARG_BUFFER_POOL, args->args[i].key)) { if (args->args[i].type == GRPC_ARG_POINTER) { - grpc_buffer_pool_internal_unref(exec_ctx, s->buffer_pool); - s->buffer_pool = - grpc_buffer_pool_internal_ref(args->args[i].value.pointer.p); + grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); + s->resource_quota = + grpc_resource_quota_internal_ref(args->args[i].value.pointer.p); } else { - grpc_buffer_pool_internal_unref(exec_ctx, s->buffer_pool); + grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); gpr_free(s); return GRPC_ERROR_CREATE(GRPC_ARG_BUFFER_POOL " must be a pointer to a buffer pool"); @@ -222,7 +222,7 @@ static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { gpr_free(sp); } - grpc_buffer_pool_internal_unref(exec_ctx, s->buffer_pool); + grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); gpr_free(s); } @@ -440,7 +440,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) { sp->server->on_accept_cb( exec_ctx, sp->server->on_accept_cb_arg, - grpc_tcp_create(fdobj, sp->server->buffer_pool, + grpc_tcp_create(fdobj, sp->server->resource_quota, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, addr_str), read_notifier_pollset, &acceptor); diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.c b/src/core/lib/security/credentials/google_default/google_default_credentials.c index 4e703aa9f40..cb5ba554b07 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.c +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.c @@ -124,14 +124,14 @@ static int is_stack_running_on_compute_engine(void) { grpc_httpcli_context_init(&context); - grpc_buffer_pool *buffer_pool = - grpc_buffer_pool_create("google_default_credentials"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("google_default_credentials"); grpc_httpcli_get( - &exec_ctx, &context, &detector.pollent, buffer_pool, &request, + &exec_ctx, &context, &detector.pollent, resource_quota, &request, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), max_detection_delay), grpc_closure_create(on_compute_engine_detection_http_response, &detector), &detector.response); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_exec_ctx_flush(&exec_ctx); diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.c b/src/core/lib/security/credentials/jwt/jwt_verifier.c index ffcd0b3910d..0339fd5d611 100644 --- a/src/core/lib/security/credentials/jwt/jwt_verifier.c +++ b/src/core/lib/security/credentials/jwt/jwt_verifier.c @@ -657,16 +657,16 @@ static void on_openid_config_retrieved(grpc_exec_ctx *exec_ctx, void *user_data, *(req.host + (req.http.path - jwks_uri)) = '\0'; } - /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host + /* TODO(ctiller): Carry the resource_quota in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("jwt_verifier"); + grpc_resource_quota *resource_quota = grpc_resource_quota_create("jwt_verifier"); grpc_httpcli_get( - exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, buffer_pool, &req, + exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, resource_quota, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), grpc_closure_create(on_keys_retrieved, ctx), &ctx->responses[HTTP_RESPONSE_KEYS]); - grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); grpc_json_destroy(json); gpr_free(req.host); return; @@ -769,15 +769,15 @@ static void retrieve_key_and_verify(grpc_exec_ctx *exec_ctx, rsp_idx = HTTP_RESPONSE_OPENID; } - /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host + /* TODO(ctiller): Carry the resource_quota in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("jwt_verifier"); + grpc_resource_quota *resource_quota = grpc_resource_quota_create("jwt_verifier"); grpc_httpcli_get( - exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, buffer_pool, &req, + exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, resource_quota, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), http_cb, &ctx->responses[rsp_idx]); - grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); gpr_free(req.host); gpr_free(req.http.path); return; diff --git a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c index 61c0815b2ad..102831637bf 100644 --- a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +++ b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c @@ -307,14 +307,14 @@ static void compute_engine_fetch_oauth2( request.http.path = GRPC_COMPUTE_ENGINE_METADATA_TOKEN_PATH; request.http.hdr_count = 1; request.http.hdrs = &header; - /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host + /* TODO(ctiller): Carry the resource_quota in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("oauth2_credentials"); - grpc_httpcli_get(exec_ctx, httpcli_context, pollent, buffer_pool, &request, + grpc_resource_quota *resource_quota = grpc_resource_quota_create("oauth2_credentials"); + grpc_httpcli_get(exec_ctx, httpcli_context, pollent, resource_quota, &request, deadline, grpc_closure_create(response_cb, metadata_req), &metadata_req->response); - grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); } grpc_call_credentials *grpc_google_compute_engine_credentials_create( @@ -362,16 +362,16 @@ static void refresh_token_fetch_oauth2( request.http.hdr_count = 1; request.http.hdrs = &header; request.handshaker = &grpc_httpcli_ssl; - /* TODO(ctiller): Carry the buffer_pool in ctx and share it with the host + /* TODO(ctiller): Carry the resource_quota in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_buffer_pool *buffer_pool = - grpc_buffer_pool_create("oauth2_credentials_refresh"); - grpc_httpcli_post(exec_ctx, httpcli_context, pollent, buffer_pool, &request, + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("oauth2_credentials_refresh"); + grpc_httpcli_post(exec_ctx, httpcli_context, pollent, resource_quota, &request, body, strlen(body), deadline, grpc_closure_create(response_cb, metadata_req), &metadata_req->response); - grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); gpr_free(body); } diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c index ee6b9f97e87..9f842371715 100644 --- a/src/core/lib/security/transport/secure_endpoint.c +++ b/src/core/lib/security/transport/secure_endpoint.c @@ -370,9 +370,9 @@ static grpc_workqueue *endpoint_get_workqueue(grpc_endpoint *secure_ep) { return grpc_endpoint_get_workqueue(ep->wrapped_ep); } -static grpc_buffer_user *endpoint_get_buffer_user(grpc_endpoint *secure_ep) { +static grpc_resource_user *endpoint_get_resource_user(grpc_endpoint *secure_ep) { secure_endpoint *ep = (secure_endpoint *)secure_ep; - return grpc_endpoint_get_buffer_user(ep->wrapped_ep); + return grpc_endpoint_get_resource_user(ep->wrapped_ep); } static const grpc_endpoint_vtable vtable = {endpoint_read, @@ -382,7 +382,7 @@ static const grpc_endpoint_vtable vtable = {endpoint_read, endpoint_add_to_pollset_set, endpoint_shutdown, endpoint_destroy, - endpoint_get_buffer_user, + endpoint_get_resource_user, endpoint_get_peer}; grpc_endpoint *grpc_secure_endpoint_create( diff --git a/src/core/lib/surface/init.c b/src/core/lib/surface/init.c index 39cab0cc5f6..7903f57a68c 100644 --- a/src/core/lib/surface/init.c +++ b/src/core/lib/surface/init.c @@ -49,10 +49,10 @@ #include "src/core/lib/channel/message_size_filter.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/http/parser.h" -#include "src/core/lib/iomgr/buffer_pool.h" #include "src/core/lib/iomgr/combiner.h" #include "src/core/lib/iomgr/executor.h" #include "src/core/lib/iomgr/iomgr.h" +#include "src/core/lib/iomgr/resource_quota.h" #include "src/core/lib/profiling/timers.h" #include "src/core/lib/surface/api_trace.h" #include "src/core/lib/surface/call.h" @@ -192,7 +192,7 @@ void grpc_init(void) { // Default timeout trace to 1 grpc_cq_event_timeout_trace = 1; grpc_register_tracer("op_failure", &grpc_trace_operation_failures); - grpc_register_tracer("buffer_pool", &grpc_buffer_pool_trace); + grpc_register_tracer("resource_quota", &grpc_resource_quota_trace); #ifndef NDEBUG grpc_register_tracer("pending_tags", &grpc_trace_pending_tags); #endif diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc index afde513e1e8..6e84170d978 100644 --- a/src/cpp/common/channel_arguments.cc +++ b/src/cpp/common/channel_arguments.cc @@ -34,7 +34,7 @@ #include -#include +#include #include #include #include "src/core/lib/channel/channel_args.h" @@ -114,9 +114,9 @@ void ChannelArguments::SetUserAgentPrefix( } } -void ChannelArguments::SetBufferPool(const grpc::BufferPool& buffer_pool) { - SetPointerWithVtable(GRPC_ARG_BUFFER_POOL, buffer_pool.c_buffer_pool(), - grpc_buffer_pool_arg_vtable()); +void ChannelArguments::SetResourceQuota(const grpc::ResourceQuota& resource_quota) { + SetPointerWithVtable(GRPC_ARG_BUFFER_POOL, resource_quota.c_resource_quota(), + grpc_resource_quota_arg_vtable()); } void ChannelArguments::SetInt(const grpc::string& key, int value) { diff --git a/src/cpp/common/buffer_pool_cc.cc b/src/cpp/common/resource_quota_cc.cc similarity index 80% rename from src/cpp/common/buffer_pool_cc.cc rename to src/cpp/common/resource_quota_cc.cc index fe5704d6617..335896ab917 100644 --- a/src/cpp/common/buffer_pool_cc.cc +++ b/src/cpp/common/resource_quota_cc.cc @@ -31,20 +31,20 @@ * */ -#include +#include #include namespace grpc { -BufferPool::BufferPool() : impl_(grpc_buffer_pool_create(nullptr)) {} +ResourceQuota::ResourceQuota() : impl_(grpc_resource_quota_create(nullptr)) {} -BufferPool::BufferPool(const grpc::string& name) - : impl_(grpc_buffer_pool_create(name.c_str())) {} +ResourceQuota::ResourceQuota(const grpc::string& name) + : impl_(grpc_resource_quota_create(name.c_str())) {} -BufferPool::~BufferPool() { grpc_buffer_pool_unref(impl_); } +ResourceQuota::~ResourceQuota() { grpc_resource_quota_unref(impl_); } -BufferPool& BufferPool::Resize(size_t new_size) { - grpc_buffer_pool_resize(impl_, new_size); +ResourceQuota& ResourceQuota::Resize(size_t new_size) { + grpc_resource_quota_resize(impl_, new_size); return *this; } diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index be5b97846af..a4cf4063eee 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -33,7 +33,7 @@ #include -#include +#include #include #include #include @@ -55,7 +55,7 @@ static void do_plugin_list_init(void) { ServerBuilder::ServerBuilder() : max_receive_message_size_(-1), max_send_message_size_(-1), - buffer_pool_(nullptr), + resource_quota_(nullptr), generic_service_(nullptr) { gpr_once_init(&once_init_plugin_list, do_plugin_list_init); for (auto it = g_plugin_factory_list->begin(); @@ -73,8 +73,8 @@ ServerBuilder::ServerBuilder() } ServerBuilder::~ServerBuilder() { - if (buffer_pool_ != nullptr) { - grpc_buffer_pool_unref(buffer_pool_); + if (resource_quota_ != nullptr) { + grpc_resource_quota_unref(resource_quota_); } } @@ -138,13 +138,13 @@ ServerBuilder& ServerBuilder::SetDefaultCompressionAlgorithm( return *this; } -ServerBuilder& ServerBuilder::SetBufferPool( - const grpc::BufferPool& buffer_pool) { - if (buffer_pool_ != nullptr) { - grpc_buffer_pool_unref(buffer_pool_); +ServerBuilder& ServerBuilder::SetResourceQuota( + const grpc::ResourceQuota& resource_quota) { + if (resource_quota_ != nullptr) { + grpc_resource_quota_unref(resource_quota_); } - buffer_pool_ = buffer_pool.c_buffer_pool(); - grpc_buffer_pool_ref(buffer_pool_); + resource_quota_ = resource_quota.c_resource_quota(); + grpc_resource_quota_ref(resource_quota_); return *this; } @@ -196,9 +196,9 @@ std::unique_ptr ServerBuilder::BuildAndStart() { args.SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, maybe_default_compression_algorithm_.algorithm); } - if (buffer_pool_ != nullptr) { - args.SetPointerWithVtable(GRPC_ARG_BUFFER_POOL, buffer_pool_, - grpc_buffer_pool_arg_vtable()); + if (resource_quota_ != nullptr) { + args.SetPointerWithVtable(GRPC_ARG_BUFFER_POOL, resource_quota_, + grpc_resource_quota_arg_vtable()); } std::unique_ptr server(new Server(thread_pool.release(), true, max_receive_message_size_, &args)); diff --git a/src/proto/grpc/testing/control.proto b/src/proto/grpc/testing/control.proto index 4adf235f617..918f5fa3e3a 100644 --- a/src/proto/grpc/testing/control.proto +++ b/src/proto/grpc/testing/control.proto @@ -141,7 +141,7 @@ message ServerConfig { // c++-only options (for now) -------------------------------- // Buffer pool size (no buffer pool specified if unset) - int32 buffer_pool_size = 1001; + int32 resource_quota_size = 1001; } message ServerArgs { diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index eeb30135e25..c480d81514f 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -94,7 +94,6 @@ CORE_SOURCE_FILES = [ 'src/core/lib/http/format_request.c', 'src/core/lib/http/httpcli.c', 'src/core/lib/http/parser.c', - 'src/core/lib/iomgr/buffer_pool.c', 'src/core/lib/iomgr/closure.c', 'src/core/lib/iomgr/combiner.c', 'src/core/lib/iomgr/endpoint.c', @@ -118,6 +117,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/pollset_windows.c', 'src/core/lib/iomgr/resolve_address_posix.c', 'src/core/lib/iomgr/resolve_address_windows.c', + 'src/core/lib/iomgr/resource_quota.c', 'src/core/lib/iomgr/sockaddr_utils.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index 6c352554f95..fd73cc79704 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c @@ -132,11 +132,11 @@ grpc_header_key_is_legal_type grpc_header_key_is_legal_import; grpc_header_nonbin_value_is_legal_type grpc_header_nonbin_value_is_legal_import; grpc_is_binary_header_type grpc_is_binary_header_import; grpc_call_error_to_string_type grpc_call_error_to_string_import; -grpc_buffer_pool_create_type grpc_buffer_pool_create_import; -grpc_buffer_pool_ref_type grpc_buffer_pool_ref_import; -grpc_buffer_pool_unref_type grpc_buffer_pool_unref_import; -grpc_buffer_pool_resize_type grpc_buffer_pool_resize_import; -grpc_buffer_pool_arg_vtable_type grpc_buffer_pool_arg_vtable_import; +grpc_resource_quota_create_type grpc_resource_quota_create_import; +grpc_resource_quota_ref_type grpc_resource_quota_ref_import; +grpc_resource_quota_unref_type grpc_resource_quota_unref_import; +grpc_resource_quota_resize_type grpc_resource_quota_resize_import; +grpc_resource_quota_arg_vtable_type grpc_resource_quota_arg_vtable_import; grpc_insecure_channel_create_from_fd_type grpc_insecure_channel_create_from_fd_import; grpc_server_add_insecure_channel_from_fd_type grpc_server_add_insecure_channel_from_fd_import; grpc_use_signal_type grpc_use_signal_import; @@ -406,11 +406,11 @@ void grpc_rb_load_imports(HMODULE library) { grpc_header_nonbin_value_is_legal_import = (grpc_header_nonbin_value_is_legal_type) GetProcAddress(library, "grpc_header_nonbin_value_is_legal"); grpc_is_binary_header_import = (grpc_is_binary_header_type) GetProcAddress(library, "grpc_is_binary_header"); grpc_call_error_to_string_import = (grpc_call_error_to_string_type) GetProcAddress(library, "grpc_call_error_to_string"); - grpc_buffer_pool_create_import = (grpc_buffer_pool_create_type) GetProcAddress(library, "grpc_buffer_pool_create"); - grpc_buffer_pool_ref_import = (grpc_buffer_pool_ref_type) GetProcAddress(library, "grpc_buffer_pool_ref"); - grpc_buffer_pool_unref_import = (grpc_buffer_pool_unref_type) GetProcAddress(library, "grpc_buffer_pool_unref"); - grpc_buffer_pool_resize_import = (grpc_buffer_pool_resize_type) GetProcAddress(library, "grpc_buffer_pool_resize"); - grpc_buffer_pool_arg_vtable_import = (grpc_buffer_pool_arg_vtable_type) GetProcAddress(library, "grpc_buffer_pool_arg_vtable"); + grpc_resource_quota_create_import = (grpc_resource_quota_create_type) GetProcAddress(library, "grpc_resource_quota_create"); + grpc_resource_quota_ref_import = (grpc_resource_quota_ref_type) GetProcAddress(library, "grpc_resource_quota_ref"); + grpc_resource_quota_unref_import = (grpc_resource_quota_unref_type) GetProcAddress(library, "grpc_resource_quota_unref"); + grpc_resource_quota_resize_import = (grpc_resource_quota_resize_type) GetProcAddress(library, "grpc_resource_quota_resize"); + grpc_resource_quota_arg_vtable_import = (grpc_resource_quota_arg_vtable_type) GetProcAddress(library, "grpc_resource_quota_arg_vtable"); grpc_insecure_channel_create_from_fd_import = (grpc_insecure_channel_create_from_fd_type) GetProcAddress(library, "grpc_insecure_channel_create_from_fd"); grpc_server_add_insecure_channel_from_fd_import = (grpc_server_add_insecure_channel_from_fd_type) GetProcAddress(library, "grpc_server_add_insecure_channel_from_fd"); grpc_use_signal_import = (grpc_use_signal_type) GetProcAddress(library, "grpc_use_signal"); diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index b118ba3c789..c2244150f2c 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -347,21 +347,21 @@ extern grpc_is_binary_header_type grpc_is_binary_header_import; typedef const char *(*grpc_call_error_to_string_type)(grpc_call_error error); extern grpc_call_error_to_string_type grpc_call_error_to_string_import; #define grpc_call_error_to_string grpc_call_error_to_string_import -typedef grpc_buffer_pool *(*grpc_buffer_pool_create_type)(const char *trace_name); -extern grpc_buffer_pool_create_type grpc_buffer_pool_create_import; -#define grpc_buffer_pool_create grpc_buffer_pool_create_import -typedef void(*grpc_buffer_pool_ref_type)(grpc_buffer_pool *buffer_pool); -extern grpc_buffer_pool_ref_type grpc_buffer_pool_ref_import; -#define grpc_buffer_pool_ref grpc_buffer_pool_ref_import -typedef void(*grpc_buffer_pool_unref_type)(grpc_buffer_pool *buffer_pool); -extern grpc_buffer_pool_unref_type grpc_buffer_pool_unref_import; -#define grpc_buffer_pool_unref grpc_buffer_pool_unref_import -typedef void(*grpc_buffer_pool_resize_type)(grpc_buffer_pool *buffer_pool, size_t new_size); -extern grpc_buffer_pool_resize_type grpc_buffer_pool_resize_import; -#define grpc_buffer_pool_resize grpc_buffer_pool_resize_import -typedef const grpc_arg_pointer_vtable *(*grpc_buffer_pool_arg_vtable_type)(void); -extern grpc_buffer_pool_arg_vtable_type grpc_buffer_pool_arg_vtable_import; -#define grpc_buffer_pool_arg_vtable grpc_buffer_pool_arg_vtable_import +typedef grpc_resource_quota *(*grpc_resource_quota_create_type)(const char *trace_name); +extern grpc_resource_quota_create_type grpc_resource_quota_create_import; +#define grpc_resource_quota_create grpc_resource_quota_create_import +typedef void(*grpc_resource_quota_ref_type)(grpc_resource_quota *resource_quota); +extern grpc_resource_quota_ref_type grpc_resource_quota_ref_import; +#define grpc_resource_quota_ref grpc_resource_quota_ref_import +typedef void(*grpc_resource_quota_unref_type)(grpc_resource_quota *resource_quota); +extern grpc_resource_quota_unref_type grpc_resource_quota_unref_import; +#define grpc_resource_quota_unref grpc_resource_quota_unref_import +typedef void(*grpc_resource_quota_resize_type)(grpc_resource_quota *resource_quota, size_t new_size); +extern grpc_resource_quota_resize_type grpc_resource_quota_resize_import; +#define grpc_resource_quota_resize grpc_resource_quota_resize_import +typedef const grpc_arg_pointer_vtable *(*grpc_resource_quota_arg_vtable_type)(void); +extern grpc_resource_quota_arg_vtable_type grpc_resource_quota_arg_vtable_import; +#define grpc_resource_quota_arg_vtable grpc_resource_quota_arg_vtable_import typedef grpc_channel *(*grpc_insecure_channel_create_from_fd_type)(const char *target, int fd, const grpc_channel_args *args); extern grpc_insecure_channel_create_from_fd_type grpc_insecure_channel_create_from_fd_import; #define grpc_insecure_channel_create_from_fd grpc_insecure_channel_create_from_fd_import diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c index 60f0ab2106d..8a4a17ea93b 100644 --- a/test/core/bad_client/bad_client.c +++ b/test/core/bad_client/bad_client.c @@ -114,9 +114,9 @@ void grpc_run_bad_client_test( grpc_init(); /* Create endpoints */ - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("bad_client_test"); - sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 65536); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota *resource_quota = grpc_resource_quota_create("bad_client_test"); + sfd = grpc_iomgr_create_endpoint_pair("fixture", resource_quota, 65536); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); /* Create server, completion events */ a.server = grpc_server_create(NULL, NULL); diff --git a/test/core/end2end/end2end_nosec_tests.c b/test/core/end2end/end2end_nosec_tests.c index 1c9332acc17..caaa97c215b 100644 --- a/test/core/end2end/end2end_nosec_tests.c +++ b/test/core/end2end/end2end_nosec_tests.c @@ -47,8 +47,6 @@ extern void bad_hostname(grpc_end2end_test_config config); extern void bad_hostname_pre_init(void); extern void binary_metadata(grpc_end2end_test_config config); extern void binary_metadata_pre_init(void); -extern void buffer_pool_server(grpc_end2end_test_config config); -extern void buffer_pool_server_pre_init(void); extern void cancel_after_accept(grpc_end2end_test_config config); extern void cancel_after_accept_pre_init(void); extern void cancel_after_client_done(grpc_end2end_test_config config); @@ -113,6 +111,8 @@ extern void request_with_flags(grpc_end2end_test_config config); extern void request_with_flags_pre_init(void); extern void request_with_payload(grpc_end2end_test_config config); extern void request_with_payload_pre_init(void); +extern void resource_quota_server(grpc_end2end_test_config config); +extern void resource_quota_server_pre_init(void); extern void server_finishes_request(grpc_end2end_test_config config); extern void server_finishes_request_pre_init(void); extern void shutdown_finishes_calls(grpc_end2end_test_config config); @@ -137,7 +137,6 @@ void grpc_end2end_tests_pre_init(void) { g_pre_init_called = true; bad_hostname_pre_init(); binary_metadata_pre_init(); - buffer_pool_server_pre_init(); cancel_after_accept_pre_init(); cancel_after_client_done_pre_init(); cancel_after_invoke_pre_init(); @@ -170,6 +169,7 @@ void grpc_end2end_tests_pre_init(void) { registered_call_pre_init(); request_with_flags_pre_init(); request_with_payload_pre_init(); + resource_quota_server_pre_init(); server_finishes_request_pre_init(); shutdown_finishes_calls_pre_init(); shutdown_finishes_tags_pre_init(); @@ -190,7 +190,6 @@ void grpc_end2end_tests(int argc, char **argv, if (argc <= 1) { bad_hostname(config); binary_metadata(config); - buffer_pool_server(config); cancel_after_accept(config); cancel_after_client_done(config); cancel_after_invoke(config); @@ -223,6 +222,7 @@ void grpc_end2end_tests(int argc, char **argv, registered_call(config); request_with_flags(config); request_with_payload(config); + resource_quota_server(config); server_finishes_request(config); shutdown_finishes_calls(config); shutdown_finishes_tags(config); @@ -244,10 +244,6 @@ void grpc_end2end_tests(int argc, char **argv, binary_metadata(config); continue; } - if (0 == strcmp("buffer_pool_server", argv[i])) { - buffer_pool_server(config); - continue; - } if (0 == strcmp("cancel_after_accept", argv[i])) { cancel_after_accept(config); continue; @@ -376,6 +372,10 @@ void grpc_end2end_tests(int argc, char **argv, request_with_payload(config); continue; } + if (0 == strcmp("resource_quota_server", argv[i])) { + resource_quota_server(config); + continue; + } if (0 == strcmp("server_finishes_request", argv[i])) { server_finishes_request(config); continue; diff --git a/test/core/end2end/end2end_tests.c b/test/core/end2end/end2end_tests.c index cf0e4c8316d..6d17e686e61 100644 --- a/test/core/end2end/end2end_tests.c +++ b/test/core/end2end/end2end_tests.c @@ -47,8 +47,6 @@ extern void bad_hostname(grpc_end2end_test_config config); extern void bad_hostname_pre_init(void); extern void binary_metadata(grpc_end2end_test_config config); extern void binary_metadata_pre_init(void); -extern void buffer_pool_server(grpc_end2end_test_config config); -extern void buffer_pool_server_pre_init(void); extern void call_creds(grpc_end2end_test_config config); extern void call_creds_pre_init(void); extern void cancel_after_accept(grpc_end2end_test_config config); @@ -115,6 +113,8 @@ extern void request_with_flags(grpc_end2end_test_config config); extern void request_with_flags_pre_init(void); extern void request_with_payload(grpc_end2end_test_config config); extern void request_with_payload_pre_init(void); +extern void resource_quota_server(grpc_end2end_test_config config); +extern void resource_quota_server_pre_init(void); extern void server_finishes_request(grpc_end2end_test_config config); extern void server_finishes_request_pre_init(void); extern void shutdown_finishes_calls(grpc_end2end_test_config config); @@ -139,7 +139,6 @@ void grpc_end2end_tests_pre_init(void) { g_pre_init_called = true; bad_hostname_pre_init(); binary_metadata_pre_init(); - buffer_pool_server_pre_init(); call_creds_pre_init(); cancel_after_accept_pre_init(); cancel_after_client_done_pre_init(); @@ -173,6 +172,7 @@ void grpc_end2end_tests_pre_init(void) { registered_call_pre_init(); request_with_flags_pre_init(); request_with_payload_pre_init(); + resource_quota_server_pre_init(); server_finishes_request_pre_init(); shutdown_finishes_calls_pre_init(); shutdown_finishes_tags_pre_init(); @@ -193,7 +193,6 @@ void grpc_end2end_tests(int argc, char **argv, if (argc <= 1) { bad_hostname(config); binary_metadata(config); - buffer_pool_server(config); call_creds(config); cancel_after_accept(config); cancel_after_client_done(config); @@ -227,6 +226,7 @@ void grpc_end2end_tests(int argc, char **argv, registered_call(config); request_with_flags(config); request_with_payload(config); + resource_quota_server(config); server_finishes_request(config); shutdown_finishes_calls(config); shutdown_finishes_tags(config); @@ -248,10 +248,6 @@ void grpc_end2end_tests(int argc, char **argv, binary_metadata(config); continue; } - if (0 == strcmp("buffer_pool_server", argv[i])) { - buffer_pool_server(config); - continue; - } if (0 == strcmp("call_creds", argv[i])) { call_creds(config); continue; @@ -384,6 +380,10 @@ void grpc_end2end_tests(int argc, char **argv, request_with_payload(config); continue; } + if (0 == strcmp("resource_quota_server", argv[i])) { + resource_quota_server(config); + continue; + } if (0 == strcmp("server_finishes_request", argv[i])) { server_finishes_request(config); continue; diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c index 4a546e710e1..f7dbfdf2e35 100644 --- a/test/core/end2end/fixtures/h2_sockpair+trace.c +++ b/test/core/end2end/fixtures/h2_sockpair+trace.c @@ -91,9 +91,9 @@ static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( f.fixture_data = sfd; f.cq = grpc_completion_queue_create(NULL); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("fixture"); - *sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 65536); - grpc_buffer_pool_unref(buffer_pool); + grpc_resource_quota *resource_quota = grpc_resource_quota_create("fixture"); + *sfd = grpc_iomgr_create_endpoint_pair("fixture", resource_quota, 65536); + grpc_resource_quota_unref(resource_quota); return f; } diff --git a/test/core/end2end/fixtures/h2_sockpair.c b/test/core/end2end/fixtures/h2_sockpair.c index f528f0b0b22..c571b12e4a1 100644 --- a/test/core/end2end/fixtures/h2_sockpair.c +++ b/test/core/end2end/fixtures/h2_sockpair.c @@ -90,9 +90,9 @@ static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( f.fixture_data = sfd; f.cq = grpc_completion_queue_create(NULL); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("fixture"); - *sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 65536); - grpc_buffer_pool_unref(buffer_pool); + grpc_resource_quota *resource_quota = grpc_resource_quota_create("fixture"); + *sfd = grpc_iomgr_create_endpoint_pair("fixture", resource_quota, 65536); + grpc_resource_quota_unref(resource_quota); return f; } diff --git a/test/core/end2end/fixtures/h2_sockpair_1byte.c b/test/core/end2end/fixtures/h2_sockpair_1byte.c index 293cdf278e0..c3d2d5deccf 100644 --- a/test/core/end2end/fixtures/h2_sockpair_1byte.c +++ b/test/core/end2end/fixtures/h2_sockpair_1byte.c @@ -90,9 +90,9 @@ static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( f.fixture_data = sfd; f.cq = grpc_completion_queue_create(NULL); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("fixture"); - *sfd = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, 1); - grpc_buffer_pool_unref(buffer_pool); + grpc_resource_quota *resource_quota = grpc_resource_quota_create("fixture"); + *sfd = grpc_iomgr_create_endpoint_pair("fixture", resource_quota, 1); + grpc_resource_quota_unref(resource_quota); return f; } diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index f39a79ca191..945cc960e94 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -173,7 +173,7 @@ static bool is_eof(input_stream *inp) { return inp->cur == inp->end; } static gpr_timespec g_now; static grpc_server *g_server; static grpc_channel *g_channel; -static grpc_buffer_pool *g_buffer_pool; +static grpc_resource_quota *g_resource_quota; extern gpr_timespec (*gpr_now_impl)(gpr_clock_type clock_type); @@ -253,7 +253,7 @@ static void do_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { } else if (g_server != NULL) { grpc_endpoint *client; grpc_endpoint *server; - grpc_passthru_endpoint_create(&client, &server, g_buffer_pool); + grpc_passthru_endpoint_create(&client, &server, g_resource_quota); *fc->ep = client; grpc_transport *transport = @@ -522,7 +522,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int pending_pings = 0; g_active_call = new_call(NULL, ROOT); - g_buffer_pool = grpc_buffer_pool_create("api_fuzzer"); + g_resource_quota = grpc_resource_quota_create("api_fuzzer"); grpc_completion_queue *cq = grpc_completion_queue_create(NULL); @@ -944,7 +944,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { } // resize the buffer pool case 21: { - grpc_buffer_pool_resize(g_buffer_pool, read_uint22(&inp)); + grpc_resource_quota_resize(g_resource_quota, read_uint22(&inp)); break; } } @@ -962,7 +962,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { .type == GRPC_QUEUE_SHUTDOWN); grpc_completion_queue_destroy(cq); - grpc_buffer_pool_unref(g_buffer_pool); + grpc_resource_quota_unref(g_resource_quota); grpc_shutdown(); return 0; diff --git a/test/core/end2end/fuzzers/client_fuzzer.c b/test/core/end2end/fuzzers/client_fuzzer.c index 55d04ec28ac..b57c8c95fd4 100644 --- a/test/core/end2end/fuzzers/client_fuzzer.c +++ b/test/core/end2end/fuzzers/client_fuzzer.c @@ -58,10 +58,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_init(); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("client_fuzzer"); + grpc_resource_quota *resource_quota = grpc_resource_quota_create("client_fuzzer"); grpc_endpoint *mock_endpoint = - grpc_mock_endpoint_create(discard_write, buffer_pool); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_mock_endpoint_create(discard_write, resource_quota); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_completion_queue *cq = grpc_completion_queue_create(NULL); grpc_transport *transport = diff --git a/test/core/end2end/fuzzers/server_fuzzer.c b/test/core/end2end/fuzzers/server_fuzzer.c index dd093e51ec4..58c2a9d4835 100644 --- a/test/core/end2end/fuzzers/server_fuzzer.c +++ b/test/core/end2end/fuzzers/server_fuzzer.c @@ -56,10 +56,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_init(); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("server_fuzzer"); + grpc_resource_quota *resource_quota = grpc_resource_quota_create("server_fuzzer"); grpc_endpoint *mock_endpoint = - grpc_mock_endpoint_create(discard_write, buffer_pool); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_mock_endpoint_create(discard_write, resource_quota); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_mock_endpoint_put_read( &exec_ctx, mock_endpoint, gpr_slice_from_copied_buffer((const char *)data, size)); diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index 3fc827fc7d1..0ae70ce3083 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -88,7 +88,7 @@ LOWCPU = 0.1 END2END_TESTS = { 'bad_hostname': default_test_options, 'binary_metadata': default_test_options, - 'buffer_pool_server': default_test_options._replace(large_writes=True, + 'resource_quota_server': default_test_options._replace(large_writes=True, proxyable=False), 'call_creds': default_test_options._replace(secure=True), 'cancel_after_accept': default_test_options._replace(cpu_cost=LOWCPU), diff --git a/test/core/end2end/tests/buffer_pool_server.c b/test/core/end2end/tests/buffer_pool_server.c index daa971ccfc4..81850aea58f 100644 --- a/test/core/end2end/tests/buffer_pool_server.c +++ b/test/core/end2end/tests/buffer_pool_server.c @@ -107,9 +107,10 @@ static gpr_slice generate_random_slice() { return gpr_slice_from_copied_string(output); } -void buffer_pool_server(grpc_end2end_test_config config) { - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_server"); - grpc_buffer_pool_resize(buffer_pool, 5 * 1024 * 1024); +void resource_quota_server(grpc_end2end_test_config config) { + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("test_server"); + grpc_resource_quota_resize(resource_quota, 5 * 1024 * 1024); #define NUM_CALLS 100 #define CLIENT_BASE_TAG 1000 @@ -120,12 +121,12 @@ void buffer_pool_server(grpc_end2end_test_config config) { grpc_arg arg; arg.key = GRPC_ARG_BUFFER_POOL; arg.type = GRPC_ARG_POINTER; - arg.value.pointer.p = buffer_pool; - arg.value.pointer.vtable = grpc_buffer_pool_arg_vtable(); + arg.value.pointer.p = resource_quota; + arg.value.pointer.vtable = grpc_resource_quota_arg_vtable(); grpc_channel_args args = {1, &arg}; grpc_end2end_test_fixture f = - begin_test(config, "buffer_pool_server", NULL, &args); + begin_test(config, "resource_quota_server", NULL, &args); /* Create large request and response bodies. These are big enough to require * multiple round trips to deliver to the peer, and their exact contents of @@ -343,10 +344,10 @@ void buffer_pool_server(grpc_end2end_test_config config) { grpc_byte_buffer_destroy(request_payload); gpr_slice_unref(request_payload_slice); - grpc_buffer_pool_unref(buffer_pool); + grpc_resource_quota_unref(resource_quota); end_test(&f); config.tear_down_data(&f); } -void buffer_pool_server_pre_init(void) {} +void resource_quota_server_pre_init(void) {} diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c new file mode 100644 index 00000000000..c658776cbaf --- /dev/null +++ b/test/core/end2end/tests/resource_quota_server.c @@ -0,0 +1,352 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "test/core/end2end/end2end_tests.h" + +#include +#include + +#include +#include +#include +#include +#include +#include "test/core/end2end/cq_verifier.h" + +static void *tag(intptr_t t) { return (void *)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, "%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_time(int n) { + return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(n); +} + +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } + +static void drain_cq(grpc_completion_queue *cq) { + grpc_event ev; + do { + ev = grpc_completion_queue_next(cq, five_seconds_time(), NULL); + } 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)); + GPR_ASSERT(grpc_completion_queue_pluck( + f->cq, tag(1000), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5), NULL) + .type == GRPC_OP_COMPLETE); + grpc_server_destroy(f->server); + f->server = NULL; +} + +static void shutdown_client(grpc_end2end_test_fixture *f) { + if (!f->client) return; + grpc_channel_destroy(f->client); + f->client = NULL; +} + +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); +} + +/* Creates and returns a gpr_slice containing random alphanumeric characters. */ +static gpr_slice generate_random_slice() { + size_t i; + static const char chars[] = "abcdefghijklmnopqrstuvwxyz1234567890"; + char output[1024 * 1024]; + for (i = 0; i < GPR_ARRAY_SIZE(output) - 1; ++i) { + output[i] = chars[rand() % (int)(sizeof(chars) - 1)]; + } + output[GPR_ARRAY_SIZE(output) - 1] = '\0'; + return gpr_slice_from_copied_string(output); +} + +void resource_quota_server(grpc_end2end_test_config config) { + grpc_resource_quota *resource_quota = grpc_resource_quota_create("test_server"); + grpc_resource_quota_resize(resource_quota, 5 * 1024 * 1024); + +#define NUM_CALLS 100 +#define CLIENT_BASE_TAG 1000 +#define SERVER_START_BASE_TAG 2000 +#define SERVER_RECV_BASE_TAG 3000 +#define SERVER_END_BASE_TAG 4000 + + grpc_arg arg; + arg.key = GRPC_ARG_BUFFER_POOL; + arg.type = GRPC_ARG_POINTER; + arg.value.pointer.p = resource_quota; + arg.value.pointer.vtable = grpc_resource_quota_arg_vtable(); + grpc_channel_args args = {1, &arg}; + + grpc_end2end_test_fixture f = + begin_test(config, "resource_quota_server", NULL, &args); + + /* Create large request and response bodies. These are big enough to require + * 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_call *client_calls[NUM_CALLS]; + grpc_call *server_calls[NUM_CALLS]; + grpc_metadata_array initial_metadata_recv[NUM_CALLS]; + grpc_metadata_array trailing_metadata_recv[NUM_CALLS]; + grpc_metadata_array request_metadata_recv[NUM_CALLS]; + grpc_call_details call_details[NUM_CALLS]; + grpc_status_code status[NUM_CALLS]; + char *details[NUM_CALLS]; + size_t details_capacity[NUM_CALLS]; + grpc_byte_buffer *request_payload_recv[NUM_CALLS]; + int was_cancelled[NUM_CALLS]; + grpc_call_error error; + int pending_client_calls = 0; + int pending_server_start_calls = 0; + int pending_server_recv_calls = 0; + 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); + + grpc_op ops[6]; + grpc_op *op; + + for (int i = 0; i < NUM_CALLS; i++) { + grpc_metadata_array_init(&initial_metadata_recv[i]); + grpc_metadata_array_init(&trailing_metadata_recv[i]); + grpc_metadata_array_init(&request_metadata_recv[i]); + grpc_call_details_init(&call_details[i]); + details[i] = NULL; + details_capacity[i] = 0; + request_payload_recv[i] = NULL; + was_cancelled[i] = 0; + } + + 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)); + GPR_ASSERT(GRPC_CALL_OK == error); + + pending_server_start_calls++; + } + + for (int i = 0; i < NUM_CALLS; i++) { + client_calls[i] = grpc_channel_create_call( + f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq, "/foo", + "foo.test.google.fr", n_seconds_time(60), NULL); + + 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_SEND_MESSAGE; + op->data.send_message = request_payload; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_INITIAL_METADATA; + op->data.recv_initial_metadata = &initial_metadata_recv[i]; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; + op->data.recv_status_on_client.trailing_metadata = + &trailing_metadata_recv[i]; + op->data.recv_status_on_client.status = &status[i]; + op->data.recv_status_on_client.status_details = &details[i]; + op->data.recv_status_on_client.status_details_capacity = + &details_capacity[i]; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(client_calls[i], ops, (size_t)(op - ops), + tag(CLIENT_BASE_TAG + i), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + pending_client_calls++; + } + + 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_ASSERT(ev.type == GRPC_OP_COMPLETE); + + int ev_tag = (int)(intptr_t)ev.tag; + if (ev_tag < CLIENT_BASE_TAG) { + abort(); /* illegal tag */ + } else if (ev_tag < SERVER_START_BASE_TAG) { + /* client call finished */ + int call_id = ev_tag - CLIENT_BASE_TAG; + GPR_ASSERT(call_id >= 0); + GPR_ASSERT(call_id < NUM_CALLS); + switch (status[call_id]) { + case GRPC_STATUS_RESOURCE_EXHAUSTED: + cancelled_calls_on_client++; + break; + case GRPC_STATUS_OK: + break; + default: + gpr_log(GPR_ERROR, "Unexpected status code: %d", status[call_id]); + abort(); + } + GPR_ASSERT(pending_client_calls > 0); + + grpc_metadata_array_destroy(&initial_metadata_recv[call_id]); + grpc_metadata_array_destroy(&trailing_metadata_recv[call_id]); + grpc_call_destroy(client_calls[call_id]); + gpr_free(details[call_id]); + + pending_client_calls--; + } else if (ev_tag < SERVER_RECV_BASE_TAG) { + /* new incoming call to the server */ + int call_id = ev_tag - SERVER_START_BASE_TAG; + 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); + + GPR_ASSERT(pending_server_start_calls > 0); + pending_server_start_calls--; + pending_server_recv_calls++; + + grpc_call_details_destroy(&call_details[call_id]); + grpc_metadata_array_destroy(&request_metadata_recv[call_id]); + } else if (ev_tag < SERVER_END_BASE_TAG) { + /* finished read on the server */ + int call_id = ev_tag - SERVER_RECV_BASE_TAG; + GPR_ASSERT(call_id >= 0); + GPR_ASSERT(call_id < NUM_CALLS); + + if (ev.success) { + if (request_payload_recv[call_id] != NULL) { + grpc_byte_buffer_destroy(request_payload_recv[call_id]); + request_payload_recv[call_id] = NULL; + } + } else { + GPR_ASSERT(request_payload_recv[call_id] == NULL); + } + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; + op->data.recv_close_on_server.cancelled = &was_cancelled[call_id]; + op->flags = 0; + op->reserved = NULL; + 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 = "xyz"; + op->flags = 0; + op->reserved = NULL; + op++; + 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++; + } else { + int call_id = ev_tag - SERVER_END_BASE_TAG; + GPR_ASSERT(call_id >= 0); + GPR_ASSERT(call_id < NUM_CALLS); + + if (was_cancelled[call_id]) { + cancelled_calls_on_server++; + } + GPR_ASSERT(pending_server_end_calls > 0); + pending_server_end_calls--; + + grpc_call_destroy(server_calls[call_id]); + } + } + + gpr_log( + 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); + grpc_resource_quota_unref(resource_quota); + + end_test(&f); + config.tear_down_data(&f); +} + +void resource_quota_server_pre_init(void) {} diff --git a/test/core/http/httpcli_test.c b/test/core/http/httpcli_test.c index 1ecfe219d49..14318ae1847 100644 --- a/test/core/http/httpcli_test.c +++ b/test/core/http/httpcli_test.c @@ -89,11 +89,11 @@ static void test_get(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_get"); - grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, + grpc_resource_quota *resource_quota = grpc_resource_quota_create("test_get"); + grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, resource_quota, &req, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; @@ -129,11 +129,11 @@ static void test_post(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_post"); - grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, "hello", + grpc_resource_quota *resource_quota = grpc_resource_quota_create("test_post"); + grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, resource_quota, &req, "hello", 5, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; diff --git a/test/core/http/httpscli_test.c b/test/core/http/httpscli_test.c index 51ca73fdc69..966d5e4062e 100644 --- a/test/core/http/httpscli_test.c +++ b/test/core/http/httpscli_test.c @@ -90,11 +90,11 @@ static void test_get(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_get"); - grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, + grpc_resource_quota *resource_quota = grpc_resource_quota_create("test_get"); + grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, resource_quota, &req, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; @@ -131,11 +131,11 @@ static void test_post(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("test_post"); - grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, buffer_pool, &req, "hello", + grpc_resource_quota *resource_quota = grpc_resource_quota_create("test_post"); + grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, resource_quota, &req, "hello", 5, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; diff --git a/test/core/internal_api_canaries/iomgr.c b/test/core/internal_api_canaries/iomgr.c index 4f967ce7512..f1efa87a696 100644 --- a/test/core/internal_api_canaries/iomgr.c +++ b/test/core/internal_api_canaries/iomgr.c @@ -84,7 +84,7 @@ static void test_code(void) { grpc_endpoint_add_to_pollset_set, grpc_endpoint_shutdown, grpc_endpoint_destroy, - grpc_endpoint_get_buffer_user, + grpc_endpoint_get_resource_user, grpc_endpoint_get_peer}; endpoint.vtable = &vtable; diff --git a/test/core/iomgr/endpoint_pair_test.c b/test/core/iomgr/endpoint_pair_test.c index 4f8aab83235..53fb865e4ba 100644 --- a/test/core/iomgr/endpoint_pair_test.c +++ b/test/core/iomgr/endpoint_pair_test.c @@ -49,10 +49,10 @@ static grpc_endpoint_test_fixture create_fixture_endpoint_pair( size_t slice_size) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_endpoint_test_fixture f; - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("endpoint_pair_test"); + grpc_resource_quota *resource_quota = grpc_resource_quota_create("endpoint_pair_test"); grpc_endpoint_pair p = - grpc_iomgr_create_endpoint_pair("test", buffer_pool, slice_size); - grpc_buffer_pool_unref(buffer_pool); + grpc_iomgr_create_endpoint_pair("test", resource_quota, slice_size); + grpc_resource_quota_unref(resource_quota); f.client_ep = p.client; f.server_ep = p.server; diff --git a/test/core/iomgr/fd_conservation_posix_test.c b/test/core/iomgr/fd_conservation_posix_test.c index f3a36c78e4a..652b37eb6f4 100644 --- a/test/core/iomgr/fd_conservation_posix_test.c +++ b/test/core/iomgr/fd_conservation_posix_test.c @@ -52,18 +52,18 @@ int main(int argc, char **argv) { of descriptors */ rlim.rlim_cur = rlim.rlim_max = 10; GPR_ASSERT(0 == setrlimit(RLIMIT_NOFILE, &rlim)); - grpc_buffer_pool *buffer_pool = - grpc_buffer_pool_create("fd_conservation_posix_test"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("fd_conservation_posix_test"); for (i = 0; i < 100; i++) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - p = grpc_iomgr_create_endpoint_pair("test", buffer_pool, 1); + p = grpc_iomgr_create_endpoint_pair("test", resource_quota, 1); grpc_endpoint_destroy(&exec_ctx, p.client); grpc_endpoint_destroy(&exec_ctx, p.server); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(buffer_pool); + grpc_resource_quota_unref(resource_quota); grpc_iomgr_shutdown(); return 0; diff --git a/test/core/iomgr/buffer_pool_test.c b/test/core/iomgr/resource_quota_test.c similarity index 61% rename from test/core/iomgr/buffer_pool_test.c rename to test/core/iomgr/resource_quota_test.c index 3a58fc73ae1..5963ed089b4 100644 --- a/test/core/iomgr/buffer_pool_test.c +++ b/test/core/iomgr/resource_quota_test.c @@ -31,7 +31,7 @@ * */ -#include "src/core/lib/iomgr/buffer_pool.h" +#include "src/core/lib/iomgr/resource_quota.h" #include #include @@ -49,23 +49,23 @@ grpc_closure *set_bool(bool *p) { return grpc_closure_create(set_bool_cb, p); } typedef struct { size_t size; - grpc_buffer_user *buffer_user; + grpc_resource_user *resource_user; grpc_closure *then; } reclaimer_args; static void reclaimer_cb(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { GPR_ASSERT(error == GRPC_ERROR_NONE); reclaimer_args *a = args; - grpc_buffer_user_free(exec_ctx, a->buffer_user, a->size); - grpc_buffer_user_finish_reclaimation(exec_ctx, a->buffer_user); + grpc_resource_user_free(exec_ctx, a->resource_user, a->size); + grpc_resource_user_finish_reclaimation(exec_ctx, a->resource_user); grpc_closure_run(exec_ctx, a->then, GRPC_ERROR_NONE); gpr_free(a); } -grpc_closure *make_reclaimer(grpc_buffer_user *buffer_user, size_t size, +grpc_closure *make_reclaimer(grpc_resource_user *resource_user, size_t size, grpc_closure *then) { reclaimer_args *a = gpr_malloc(sizeof(*a)); a->size = size; - a->buffer_user = buffer_user; + a->resource_user = resource_user; a->then = then; return grpc_closure_create(reclaimer_cb, a); } @@ -79,214 +79,219 @@ grpc_closure *make_unused_reclaimer(grpc_closure *then) { return grpc_closure_create(unused_reclaimer_cb, then); } -static void destroy_user(grpc_buffer_user *usr) { +static void destroy_user(grpc_resource_user *usr) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; bool done = false; - grpc_buffer_user_shutdown(&exec_ctx, usr, set_bool(&done)); + grpc_resource_user_shutdown(&exec_ctx, usr, set_bool(&done)); grpc_exec_ctx_flush(&exec_ctx); GPR_ASSERT(done); - grpc_buffer_user_destroy(&exec_ctx, usr); + grpc_resource_user_destroy(&exec_ctx, usr); grpc_exec_ctx_finish(&exec_ctx); } static void test_no_op(void) { gpr_log(GPR_INFO, "** test_no_op **"); - grpc_buffer_pool_unref(grpc_buffer_pool_create("test_no_op")); + grpc_resource_quota_unref(grpc_resource_quota_create("test_no_op")); } static void test_resize_then_destroy(void) { gpr_log(GPR_INFO, "** test_resize_then_destroy **"); - grpc_buffer_pool *p = grpc_buffer_pool_create("test_resize_then_destroy"); - grpc_buffer_pool_resize(p, 1024 * 1024); - grpc_buffer_pool_unref(p); + grpc_resource_quota *p = + grpc_resource_quota_create("test_resize_then_destroy"); + grpc_resource_quota_resize(p, 1024 * 1024); + grpc_resource_quota_unref(p); } -static void test_buffer_user_no_op(void) { - gpr_log(GPR_INFO, "** test_buffer_user_no_op **"); - grpc_buffer_pool *p = grpc_buffer_pool_create("test_buffer_user_no_op"); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); - grpc_buffer_pool_unref(p); +static void test_resource_user_no_op(void) { + gpr_log(GPR_INFO, "** test_resource_user_no_op **"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_resource_user_no_op"); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_quota_unref(p); destroy_user(&usr); } static void test_instant_alloc_then_free(void) { gpr_log(GPR_INFO, "** test_instant_alloc_then_free **"); - grpc_buffer_pool *p = grpc_buffer_pool_create("test_instant_alloc_then_free"); - grpc_buffer_pool_resize(p, 1024 * 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_instant_alloc_then_free"); + grpc_resource_quota_resize(p, 1024 * 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, NULL); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, NULL); grpc_exec_ctx_finish(&exec_ctx); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr); } static void test_instant_alloc_free_pair(void) { gpr_log(GPR_INFO, "** test_instant_alloc_free_pair **"); - grpc_buffer_pool *p = grpc_buffer_pool_create("test_instant_alloc_free_pair"); - grpc_buffer_pool_resize(p, 1024 * 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_instant_alloc_free_pair"); + grpc_resource_quota_resize(p, 1024 * 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, NULL); - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, NULL); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr); } static void test_simple_async_alloc(void) { gpr_log(GPR_INFO, "** test_simple_async_alloc **"); - grpc_buffer_pool *p = grpc_buffer_pool_create("test_simple_async_alloc"); - grpc_buffer_pool_resize(p, 1024 * 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_simple_async_alloc"); + grpc_resource_quota_resize(p, 1024 * 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr); } static void test_async_alloc_blocked_by_size(void) { gpr_log(GPR_INFO, "** test_async_alloc_blocked_by_size **"); - grpc_buffer_pool *p = - grpc_buffer_pool_create("test_async_alloc_blocked_by_size"); - grpc_buffer_pool_resize(p, 1); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_async_alloc_blocked_by_size"); + grpc_resource_quota_resize(p, 1); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); bool done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(!done); } - grpc_buffer_pool_resize(p, 1024); + grpc_resource_quota_resize(p, 1024); GPR_ASSERT(done); { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr); } static void test_scavenge(void) { gpr_log(GPR_INFO, "** test_scavenge **"); - grpc_buffer_pool *p = grpc_buffer_pool_create("test_scavenge"); - grpc_buffer_pool_resize(p, 1024); - grpc_buffer_user usr1; - grpc_buffer_user usr2; - grpc_buffer_user_init(&usr1, p, "usr1"); - grpc_buffer_user_init(&usr2, p, "usr2"); + grpc_resource_quota *p = grpc_resource_quota_create("test_scavenge"); + grpc_resource_quota_resize(p, 1024); + grpc_resource_user usr1; + grpc_resource_user usr2; + grpc_resource_user_init(&usr1, p, "usr1"); + grpc_resource_user_init(&usr2, p, "usr2"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr1, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr1, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr1, 1024); + grpc_resource_user_free(&exec_ctx, &usr1, 1024); grpc_exec_ctx_finish(&exec_ctx); } { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr2, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr2, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr2, 1024); + grpc_resource_user_free(&exec_ctx, &usr2, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr1); destroy_user(&usr2); } static void test_scavenge_blocked(void) { gpr_log(GPR_INFO, "** test_scavenge_blocked **"); - grpc_buffer_pool *p = grpc_buffer_pool_create("test_scavenge_blocked"); - grpc_buffer_pool_resize(p, 1024); - grpc_buffer_user usr1; - grpc_buffer_user usr2; - grpc_buffer_user_init(&usr1, p, "usr1"); - grpc_buffer_user_init(&usr2, p, "usr2"); + grpc_resource_quota *p = grpc_resource_quota_create("test_scavenge_blocked"); + grpc_resource_quota_resize(p, 1024); + grpc_resource_user usr1; + grpc_resource_user usr2; + grpc_resource_user_init(&usr1, p, "usr1"); + grpc_resource_user_init(&usr2, p, "usr2"); bool done; { done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr1, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr1, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } { done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr2, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr2, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(!done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr1, 1024); + grpc_resource_user_free(&exec_ctx, &usr1, 1024); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr2, 1024); + grpc_resource_user_free(&exec_ctx, &usr2, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr1); destroy_user(&usr2); } static void test_blocked_until_scheduled_reclaim(void) { gpr_log(GPR_INFO, "** test_blocked_until_scheduled_reclaim **"); - grpc_buffer_pool *p = - grpc_buffer_pool_create("test_blocked_until_scheduled_reclaim"); - grpc_buffer_pool_resize(p, 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_blocked_until_scheduled_reclaim"); + grpc_resource_quota_resize(p, 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } bool reclaim_done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, false, make_reclaimer(&usr, 1024, set_bool(&reclaim_done))); grpc_exec_ctx_finish(&exec_ctx); @@ -294,40 +299,40 @@ static void test_blocked_until_scheduled_reclaim(void) { { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(reclaim_done); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr); } static void test_blocked_until_scheduled_reclaim_and_scavenge(void) { gpr_log(GPR_INFO, "** test_blocked_until_scheduled_reclaim_and_scavenge **"); - grpc_buffer_pool *p = grpc_buffer_pool_create( + grpc_resource_quota *p = grpc_resource_quota_create( "test_blocked_until_scheduled_reclaim_and_scavenge"); - grpc_buffer_pool_resize(p, 1024); - grpc_buffer_user usr1; - grpc_buffer_user usr2; - grpc_buffer_user_init(&usr1, p, "usr1"); - grpc_buffer_user_init(&usr2, p, "usr2"); + grpc_resource_quota_resize(p, 1024); + grpc_resource_user usr1; + grpc_resource_user usr2; + grpc_resource_user_init(&usr1, p, "usr1"); + grpc_resource_user_init(&usr2, p, "usr2"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr1, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr1, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } bool reclaim_done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr1, false, make_reclaimer(&usr1, 1024, set_bool(&reclaim_done))); grpc_exec_ctx_finish(&exec_ctx); @@ -335,39 +340,39 @@ static void test_blocked_until_scheduled_reclaim_and_scavenge(void) { { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr2, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr2, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(reclaim_done); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr2, 1024); + grpc_resource_user_free(&exec_ctx, &usr2, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr1); destroy_user(&usr2); } static void test_blocked_until_scheduled_destructive_reclaim(void) { gpr_log(GPR_INFO, "** test_blocked_until_scheduled_destructive_reclaim **"); - grpc_buffer_pool *p = grpc_buffer_pool_create( + grpc_resource_quota *p = grpc_resource_quota_create( "test_blocked_until_scheduled_destructive_reclaim"); - grpc_buffer_pool_resize(p, 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota_resize(p, 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } bool reclaim_done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, true, make_reclaimer(&usr, 1024, set_bool(&reclaim_done))); grpc_exec_ctx_finish(&exec_ctx); @@ -375,41 +380,41 @@ static void test_blocked_until_scheduled_destructive_reclaim(void) { { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(reclaim_done); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr); } static void test_unused_reclaim_is_cancelled(void) { gpr_log(GPR_INFO, "** test_unused_reclaim_is_cancelled **"); - grpc_buffer_pool *p = - grpc_buffer_pool_create("test_unused_reclaim_is_cancelled"); - grpc_buffer_pool_resize(p, 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_unused_reclaim_is_cancelled"); + grpc_resource_quota_resize(p, 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); bool benign_done = false; bool destructive_done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, false, make_unused_reclaimer(set_bool(&benign_done))); - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, true, make_unused_reclaimer(set_bool(&destructive_done))); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(!benign_done); GPR_ASSERT(!destructive_done); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr); GPR_ASSERT(benign_done); GPR_ASSERT(destructive_done); @@ -417,26 +422,26 @@ static void test_unused_reclaim_is_cancelled(void) { static void test_benign_reclaim_is_preferred(void) { gpr_log(GPR_INFO, "** test_benign_reclaim_is_preferred **"); - grpc_buffer_pool *p = - grpc_buffer_pool_create("test_benign_reclaim_is_preferred"); - grpc_buffer_pool_resize(p, 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_benign_reclaim_is_preferred"); + grpc_resource_quota_resize(p, 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); bool benign_done = false; bool destructive_done = false; { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, false, make_reclaimer(&usr, 1024, set_bool(&benign_done))); - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, true, make_unused_reclaimer(set_bool(&destructive_done))); grpc_exec_ctx_finish(&exec_ctx); @@ -446,7 +451,7 @@ static void test_benign_reclaim_is_preferred(void) { { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(benign_done); GPR_ASSERT(!destructive_done); @@ -454,10 +459,10 @@ static void test_benign_reclaim_is_preferred(void) { } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr); GPR_ASSERT(benign_done); GPR_ASSERT(destructive_done); @@ -465,26 +470,26 @@ static void test_benign_reclaim_is_preferred(void) { static void test_multiple_reclaims_can_be_triggered(void) { gpr_log(GPR_INFO, "** test_multiple_reclaims_can_be_triggered **"); - grpc_buffer_pool *p = - grpc_buffer_pool_create("test_multiple_reclaims_can_be_triggered"); - grpc_buffer_pool_resize(p, 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_multiple_reclaims_can_be_triggered"); + grpc_resource_quota_resize(p, 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); bool benign_done = false; bool destructive_done = false; { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, false, make_reclaimer(&usr, 512, set_bool(&benign_done))); - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, true, make_reclaimer(&usr, 512, set_bool(&destructive_done))); grpc_exec_ctx_finish(&exec_ctx); @@ -494,7 +499,7 @@ static void test_multiple_reclaims_can_be_triggered(void) { { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(benign_done); GPR_ASSERT(destructive_done); @@ -502,62 +507,62 @@ static void test_multiple_reclaims_can_be_triggered(void) { } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); destroy_user(&usr); GPR_ASSERT(benign_done); GPR_ASSERT(destructive_done); } -static void test_buffer_user_stays_allocated_until_memory_released(void) { +static void test_resource_user_stays_allocated_until_memory_released(void) { gpr_log(GPR_INFO, - "** test_buffer_user_stays_allocated_until_memory_released **"); - grpc_buffer_pool *p = grpc_buffer_pool_create( - "test_buffer_user_stays_allocated_until_memory_released"); - grpc_buffer_pool_resize(p, 1024 * 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + "** test_resource_user_stays_allocated_until_memory_released **"); + grpc_resource_quota *p = grpc_resource_quota_create( + "test_resource_user_stays_allocated_until_memory_released"); + grpc_resource_quota_resize(p, 1024 * 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); bool done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, NULL); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, NULL); grpc_exec_ctx_finish(&exec_ctx); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_pool_unref(p); - grpc_buffer_user_shutdown(&exec_ctx, &usr, set_bool(&done)); + grpc_resource_quota_unref(p); + grpc_resource_user_shutdown(&exec_ctx, &usr, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(!done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_destroy(&exec_ctx, &usr); + grpc_resource_user_destroy(&exec_ctx, &usr); grpc_exec_ctx_finish(&exec_ctx); } } -static void test_pools_merged_on_buffer_user_deletion(void) { - gpr_log(GPR_INFO, "** test_pools_merged_on_buffer_user_deletion **"); - grpc_buffer_pool *p = - grpc_buffer_pool_create("test_pools_merged_on_buffer_user_deletion"); - grpc_buffer_pool_resize(p, 1024); +static void test_pools_merged_on_resource_user_deletion(void) { + gpr_log(GPR_INFO, "** test_pools_merged_on_resource_user_deletion **"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_pools_merged_on_resource_user_deletion"); + grpc_resource_quota_resize(p, 1024); for (int i = 0; i < 10; i++) { - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); bool done = false; bool reclaimer_cancelled = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, false, make_unused_reclaimer(set_bool(&reclaimer_cancelled))); grpc_exec_ctx_finish(&exec_ctx); @@ -566,45 +571,45 @@ static void test_pools_merged_on_buffer_user_deletion(void) { { bool allocated = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&allocated)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&allocated)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(allocated); GPR_ASSERT(!reclaimer_cancelled); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_shutdown(&exec_ctx, &usr, set_bool(&done)); + grpc_resource_user_shutdown(&exec_ctx, &usr, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(!done); GPR_ASSERT(!reclaimer_cancelled); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); GPR_ASSERT(reclaimer_cancelled); } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_destroy(&exec_ctx, &usr); + grpc_resource_user_destroy(&exec_ctx, &usr); grpc_exec_ctx_finish(&exec_ctx); } } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); } static void test_reclaimers_can_be_posted_repeatedly(void) { gpr_log(GPR_INFO, "** test_reclaimers_can_be_posted_repeatedly **"); - grpc_buffer_pool *p = - grpc_buffer_pool_create("test_reclaimers_can_be_posted_repeatedly"); - grpc_buffer_pool_resize(p, 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_quota *p = + grpc_resource_quota_create("test_reclaimers_can_be_posted_repeatedly"); + grpc_resource_quota_resize(p, 1024); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); { bool allocated = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&allocated)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&allocated)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(allocated); } @@ -612,7 +617,7 @@ static void test_reclaimers_can_be_posted_repeatedly(void) { bool reclaimer_done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_post_reclaimer( + grpc_resource_user_post_reclaimer( &exec_ctx, &usr, false, make_reclaimer(&usr, 1024, set_bool(&reclaimer_done))); grpc_exec_ctx_finish(&exec_ctx); @@ -621,7 +626,7 @@ static void test_reclaimers_can_be_posted_repeatedly(void) { { bool allocated = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc(&exec_ctx, &usr, 1024, set_bool(&allocated)); + grpc_resource_user_alloc(&exec_ctx, &usr, 1024, set_bool(&allocated)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(allocated); GPR_ASSERT(reclaimer_done); @@ -629,25 +634,26 @@ static void test_reclaimers_can_be_posted_repeatedly(void) { } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_free(&exec_ctx, &usr, 1024); + grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } destroy_user(&usr); - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); } static void test_one_slice(void) { gpr_log(GPR_INFO, "** test_one_slice **"); - grpc_buffer_pool *p = grpc_buffer_pool_create("test_one_slice"); - grpc_buffer_pool_resize(p, 1024); + grpc_resource_quota *p = grpc_resource_quota_create("test_one_slice"); + grpc_resource_quota_resize(p, 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); - grpc_buffer_user_slice_allocator alloc; + grpc_resource_user_slice_allocator alloc; int num_allocs = 0; - grpc_buffer_user_slice_allocator_init(&alloc, &usr, inc_int_cb, &num_allocs); + grpc_resource_user_slice_allocator_init(&alloc, &usr, inc_int_cb, + &num_allocs); gpr_slice_buffer buffer; gpr_slice_buffer_init(&buffer); @@ -655,28 +661,30 @@ static void test_one_slice(void) { { const int start_allocs = num_allocs; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc_slices(&exec_ctx, &alloc, 1024, 1, &buffer); + grpc_resource_user_alloc_slices(&exec_ctx, &alloc, 1024, 1, &buffer); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(num_allocs == start_allocs + 1); } gpr_slice_buffer_destroy(&buffer); destroy_user(&usr); - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); } static void test_one_slice_deleted_late(void) { gpr_log(GPR_INFO, "** test_one_slice_deleted_late **"); - grpc_buffer_pool *p = grpc_buffer_pool_create("test_one_slice_deleted_late"); - grpc_buffer_pool_resize(p, 1024); + grpc_resource_quota *p = + grpc_resource_quota_create("test_one_slice_deleted_late"); + grpc_resource_quota_resize(p, 1024); - grpc_buffer_user usr; - grpc_buffer_user_init(&usr, p, "usr"); + grpc_resource_user usr; + grpc_resource_user_init(&usr, p, "usr"); - grpc_buffer_user_slice_allocator alloc; + grpc_resource_user_slice_allocator alloc; int num_allocs = 0; - grpc_buffer_user_slice_allocator_init(&alloc, &usr, inc_int_cb, &num_allocs); + grpc_resource_user_slice_allocator_init(&alloc, &usr, inc_int_cb, + &num_allocs); gpr_slice_buffer buffer; gpr_slice_buffer_init(&buffer); @@ -684,7 +692,7 @@ static void test_one_slice_deleted_late(void) { { const int start_allocs = num_allocs; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_alloc_slices(&exec_ctx, &alloc, 1024, 1, &buffer); + grpc_resource_user_alloc_slices(&exec_ctx, &alloc, 1024, 1, &buffer); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(num_allocs == start_allocs + 1); } @@ -692,17 +700,17 @@ static void test_one_slice_deleted_late(void) { bool done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_shutdown(&exec_ctx, &usr, set_bool(&done)); + grpc_resource_user_shutdown(&exec_ctx, &usr, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(!done); } - grpc_buffer_pool_unref(p); + grpc_resource_quota_unref(p); gpr_slice_buffer_destroy(&buffer); GPR_ASSERT(done); { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_buffer_user_destroy(&exec_ctx, &usr); + grpc_resource_user_destroy(&exec_ctx, &usr); grpc_exec_ctx_finish(&exec_ctx); } } @@ -712,7 +720,7 @@ int main(int argc, char **argv) { grpc_init(); test_no_op(); test_resize_then_destroy(); - test_buffer_user_no_op(); + test_resource_user_no_op(); test_instant_alloc_then_free(); test_instant_alloc_free_pair(); test_simple_async_alloc(); @@ -725,8 +733,8 @@ int main(int argc, char **argv) { test_unused_reclaim_is_cancelled(); test_benign_reclaim_is_preferred(); test_multiple_reclaims_can_be_triggered(); - test_buffer_user_stays_allocated_until_memory_released(); - test_pools_merged_on_buffer_user_deletion(); + test_resource_user_stays_allocated_until_memory_released(); + test_pools_merged_on_resource_user_deletion(); test_reclaimers_can_be_posted_repeatedly(); test_one_slice(); test_one_slice_deleted_late(); diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c index 04522b8ddf8..3f2e19ffd8d 100644 --- a/test/core/iomgr/tcp_posix_test.c +++ b/test/core/iomgr/tcp_posix_test.c @@ -176,10 +176,10 @@ static void read_test(size_t num_bytes, size_t slice_size) { create_sockets(sv); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("read_test"); - ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), buffer_pool, + grpc_resource_quota *resource_quota = grpc_resource_quota_create("read_test"); + ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), resource_quota, slice_size, "test"); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_endpoint_add_to_pollset(&exec_ctx, ep, g_pollset); written_bytes = fill_socket_partial(sv[0], num_bytes); @@ -226,10 +226,11 @@ static void large_read_test(size_t slice_size) { create_sockets(sv); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("large_read_test"); - ep = grpc_tcp_create(grpc_fd_create(sv[1], "large_read_test"), buffer_pool, + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("large_read_test"); + ep = grpc_tcp_create(grpc_fd_create(sv[1], "large_read_test"), resource_quota, slice_size, "test"); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_endpoint_add_to_pollset(&exec_ctx, ep, g_pollset); written_bytes = fill_socket(sv[0]); @@ -364,10 +365,11 @@ static void write_test(size_t num_bytes, size_t slice_size) { create_sockets(sv); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("write_test"); - ep = grpc_tcp_create(grpc_fd_create(sv[1], "write_test"), buffer_pool, + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("write_test"); + ep = grpc_tcp_create(grpc_fd_create(sv[1], "write_test"), resource_quota, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, "test"); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_endpoint_add_to_pollset(&exec_ctx, ep, g_pollset); state.ep = ep; @@ -430,11 +432,12 @@ static void release_fd_test(size_t num_bytes, size_t slice_size) { create_sockets(sv); - grpc_buffer_pool *buffer_pool = grpc_buffer_pool_create("release_fd_test"); - ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), buffer_pool, + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("release_fd_test"); + ep = grpc_tcp_create(grpc_fd_create(sv[1], "read_test"), resource_quota, slice_size, "test"); GPR_ASSERT(grpc_tcp_fd(ep) == sv[1] && sv[1] >= 0); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_endpoint_add_to_pollset(&exec_ctx, ep, g_pollset); written_bytes = fill_socket_partial(sv[0], num_bytes); @@ -520,13 +523,13 @@ static grpc_endpoint_test_fixture create_fixture_tcp_socketpair( grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; create_sockets(sv); - grpc_buffer_pool *buffer_pool = - grpc_buffer_pool_create("tcp_posix_test_socketpair"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("tcp_posix_test_socketpair"); f.client_ep = grpc_tcp_create(grpc_fd_create(sv[0], "fixture:client"), - buffer_pool, slice_size, "test"); + resource_quota, slice_size, "test"); f.server_ep = grpc_tcp_create(grpc_fd_create(sv[1], "fixture:server"), - buffer_pool, slice_size, "test"); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + resource_quota, slice_size, "test"); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_endpoint_add_to_pollset(&exec_ctx, f.client_ep, g_pollset); grpc_endpoint_add_to_pollset(&exec_ctx, f.server_ep, g_pollset); diff --git a/test/core/security/secure_endpoint_test.c b/test/core/security/secure_endpoint_test.c index 3397c9563e5..2262fde98d2 100644 --- a/test/core/security/secure_endpoint_test.c +++ b/test/core/security/secure_endpoint_test.c @@ -56,10 +56,10 @@ static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair( grpc_endpoint_test_fixture f; grpc_endpoint_pair tcp; - grpc_buffer_pool *buffer_pool = - grpc_buffer_pool_create("secure_endpoint_test"); - tcp = grpc_iomgr_create_endpoint_pair("fixture", buffer_pool, slice_size); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("secure_endpoint_test"); + tcp = grpc_iomgr_create_endpoint_pair("fixture", resource_quota, slice_size); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_endpoint_add_to_pollset(&exec_ctx, tcp.client, g_pollset); grpc_endpoint_add_to_pollset(&exec_ctx, tcp.server, g_pollset); diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index a70de7678c5..2b041a44841 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -46,7 +46,7 @@ typedef struct grpc_mock_endpoint { gpr_slice_buffer read_buffer; gpr_slice_buffer *on_read_out; grpc_closure *on_read; - grpc_buffer_user buffer_user; + grpc_resource_user resource_user; } grpc_mock_endpoint; static void me_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, @@ -83,7 +83,7 @@ static void unref(grpc_exec_ctx *exec_ctx, grpc_mock_endpoint *m) { if (0 == --m->refs) { gpr_mu_unlock(&m->mu); gpr_slice_buffer_destroy(&m->read_buffer); - grpc_buffer_user_destroy(exec_ctx, &m->buffer_user); + grpc_resource_user_destroy(exec_ctx, &m->resource_user); gpr_free(m); } else { gpr_mu_unlock(&m->mu); @@ -104,8 +104,8 @@ static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { GRPC_ERROR_CREATE("Endpoint Shutdown"), NULL); m->on_read = NULL; } - grpc_buffer_user_shutdown(exec_ctx, &m->buffer_user, - grpc_closure_create(me_finish_shutdown, m)); + grpc_resource_user_shutdown(exec_ctx, &m->resource_user, + grpc_closure_create(me_finish_shutdown, m)); gpr_mu_unlock(&m->mu); } @@ -118,9 +118,9 @@ static char *me_get_peer(grpc_endpoint *ep) { return gpr_strdup("fake:mock_endpoint"); } -static grpc_buffer_user *me_get_buffer_user(grpc_endpoint *ep) { +static grpc_resource_user *me_get_resource_user(grpc_endpoint *ep) { grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; - return &m->buffer_user; + return &m->resource_user; } static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } @@ -133,18 +133,18 @@ static const grpc_endpoint_vtable vtable = { me_add_to_pollset_set, me_shutdown, me_destroy, - me_get_buffer_user, + me_get_resource_user, me_get_peer, }; grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice), - grpc_buffer_pool *buffer_pool) { + grpc_resource_quota *resource_quota) { grpc_mock_endpoint *m = gpr_malloc(sizeof(*m)); m->base.vtable = &vtable; m->refs = 2; char *name; gpr_asprintf(&name, "mock_endpoint_%" PRIxPTR, (intptr_t)m); - grpc_buffer_user_init(&m->buffer_user, buffer_pool, name); + grpc_resource_user_init(&m->resource_user, resource_quota, name); gpr_free(name); gpr_slice_buffer_init(&m->read_buffer); gpr_mu_init(&m->mu); diff --git a/test/core/util/mock_endpoint.h b/test/core/util/mock_endpoint.h index bb59a16f7a1..b3a464ca01c 100644 --- a/test/core/util/mock_endpoint.h +++ b/test/core/util/mock_endpoint.h @@ -37,7 +37,7 @@ #include "src/core/lib/iomgr/endpoint.h" grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice), - grpc_buffer_pool *buffer_pool); + grpc_resource_quota *resource_quota); void grpc_mock_endpoint_put_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *mock_endpoint, gpr_slice slice); diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index a1aaeda9162..85ed1c824ca 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -46,7 +46,7 @@ typedef struct { gpr_slice_buffer read_buffer; gpr_slice_buffer *on_read_out; grpc_closure *on_read; - grpc_buffer_user buffer_user; + grpc_resource_user resource_user; } half; struct passthru_endpoint { @@ -142,7 +142,7 @@ static void me_really_destroy(grpc_exec_ctx *exec_ctx, void *ep, static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { half *m = (half *)ep; - grpc_buffer_user_shutdown(exec_ctx, &m->buffer_user, + grpc_resource_user_shutdown(exec_ctx, &m->resource_user, grpc_closure_create(me_really_destroy, m)); } @@ -152,9 +152,9 @@ static char *me_get_peer(grpc_endpoint *ep) { static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } -static grpc_buffer_user *me_get_buffer_user(grpc_endpoint *ep) { +static grpc_resource_user *me_get_resource_user(grpc_endpoint *ep) { half *m = (half *)ep; - return &m->buffer_user; + return &m->resource_user; } static const grpc_endpoint_vtable vtable = { @@ -165,12 +165,12 @@ static const grpc_endpoint_vtable vtable = { me_add_to_pollset_set, me_shutdown, me_destroy, - me_get_buffer_user, + me_get_resource_user, me_get_peer, }; static void half_init(half *m, passthru_endpoint *parent, - grpc_buffer_pool *buffer_pool, const char *half_name) { + grpc_resource_quota *resource_quota, const char *half_name) { m->base.vtable = &vtable; m->parent = parent; gpr_slice_buffer_init(&m->read_buffer); @@ -178,18 +178,18 @@ static void half_init(half *m, passthru_endpoint *parent, char *name; gpr_asprintf(&name, "passthru_endpoint_%s_%" PRIxPTR, half_name, (intptr_t)parent); - grpc_buffer_user_init(&m->buffer_user, buffer_pool, name); + grpc_resource_user_init(&m->resource_user, resource_quota, name); gpr_free(name); } void grpc_passthru_endpoint_create(grpc_endpoint **client, grpc_endpoint **server, - grpc_buffer_pool *buffer_pool) { + grpc_resource_quota *resource_quota) { passthru_endpoint *m = gpr_malloc(sizeof(*m)); m->halves = 2; m->shutdown = 0; - half_init(&m->client, m, buffer_pool, "client"); - half_init(&m->server, m, buffer_pool, "server"); + half_init(&m->client, m, resource_quota, "client"); + half_init(&m->server, m, resource_quota, "server"); gpr_mu_init(&m->mu); *client = &m->client.base; *server = &m->server.base; diff --git a/test/core/util/passthru_endpoint.h b/test/core/util/passthru_endpoint.h index 97563150843..b81ac5571c2 100644 --- a/test/core/util/passthru_endpoint.h +++ b/test/core/util/passthru_endpoint.h @@ -38,6 +38,6 @@ void grpc_passthru_endpoint_create(grpc_endpoint **client, grpc_endpoint **server, - grpc_buffer_pool *buffer_pool); + grpc_resource_quota *resource_quota); #endif diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c index f9e16ca407f..b2342feeb40 100644 --- a/test/core/util/port_server_client.c +++ b/test/core/util/port_server_client.c @@ -99,12 +99,12 @@ void grpc_free_port_using_server(char *server, int port) { req.http.path = path; grpc_httpcli_context_init(&context); - grpc_buffer_pool *buffer_pool = - grpc_buffer_pool_create("port_server_client/free"); - grpc_httpcli_get(&exec_ctx, &context, &pr.pops, buffer_pool, &req, + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("port_server_client/free"); + grpc_httpcli_get(&exec_ctx, &context, &pr.pops, resource_quota, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), grpc_closure_create(freed_port_from_server, &pr), &rsp); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); gpr_mu_lock(pr.mu); while (!pr.done) { grpc_pollset_worker *worker = NULL; @@ -170,13 +170,13 @@ static void got_port_from_server(grpc_exec_ctx *exec_ctx, void *arg, req.http.path = "/get"; grpc_http_response_destroy(&pr->response); memset(&pr->response, 0, sizeof(pr->response)); - grpc_buffer_pool *buffer_pool = - grpc_buffer_pool_create("port_server_client/pick_retry"); - grpc_httpcli_get(exec_ctx, pr->ctx, &pr->pops, buffer_pool, &req, + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("port_server_client/pick_retry"); + grpc_httpcli_get(exec_ctx, pr->ctx, &pr->pops, resource_quota, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), grpc_closure_create(got_port_from_server, pr), &pr->response); - grpc_buffer_pool_internal_unref(exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); return; } GPR_ASSERT(response); @@ -217,13 +217,13 @@ int grpc_pick_port_using_server(char *server) { req.http.path = "/get"; grpc_httpcli_context_init(&context); - grpc_buffer_pool *buffer_pool = - grpc_buffer_pool_create("port_server_client/pick"); - grpc_httpcli_get(&exec_ctx, &context, &pr.pops, buffer_pool, &req, + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("port_server_client/pick"); + grpc_httpcli_get(&exec_ctx, &context, &pr.pops, resource_quota, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), grpc_closure_create(got_port_from_server, &pr), &pr.response); - grpc_buffer_pool_internal_unref(&exec_ctx, buffer_pool); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(pr.mu); while (pr.port == -1) { diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index 17e6d248b59..a94ed4d8da9 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -34,10 +34,10 @@ #include #include -#include #include #include #include +#include #include #include #include @@ -1481,19 +1481,20 @@ TEST_P(SecureEnd2endTest, ClientAuthContext) { } } -class BufferPoolEnd2endTest : public End2endTest { +class ResourceQuotaEnd2endTest : public End2endTest { public: - BufferPoolEnd2endTest() : server_buffer_pool_("server_buffer_pool") {} + ResourceQuotaEnd2endTest() + : server_resource_quota_("server_resource_quota") {} virtual void ConfigureServerBuilder(ServerBuilder* builder) GRPC_OVERRIDE { - builder->SetBufferPool(server_buffer_pool_); + builder->SetResourceQuota(server_resource_quota_); } private: - BufferPool server_buffer_pool_; + ResourceQuota server_resource_quota_; }; -TEST_P(BufferPoolEnd2endTest, SimpleRequest) { +TEST_P(ResourceQuotaEnd2endTest, SimpleRequest) { ResetStub(); EchoRequest request; @@ -1543,7 +1544,7 @@ INSTANTIATE_TEST_CASE_P(SecureEnd2end, SecureEnd2endTest, ::testing::ValuesIn(CreateTestScenarios(false, false, true))); -INSTANTIATE_TEST_CASE_P(BufferPoolEnd2end, BufferPoolEnd2endTest, +INSTANTIATE_TEST_CASE_P(ResourceQuotaEnd2end, ResourceQuotaEnd2endTest, ::testing::ValuesIn(CreateTestScenarios(false, true, true))); diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc index 3d2ac788688..b2529a1121e 100644 --- a/test/cpp/qps/server_async.cc +++ b/test/cpp/qps/server_async.cc @@ -37,8 +37,8 @@ #include #include -#include #include +#include #include #include #include @@ -96,9 +96,9 @@ class AsyncQpsServerTest : public Server { srv_cqs_.emplace_back(builder.AddCompletionQueue()); } - if (config.buffer_pool_size() > 0) { - builder.SetBufferPool( - BufferPool("AsyncQpsServerTest").Resize(config.buffer_pool_size())); + if (config.resource_quota_size() > 0) { + builder.SetResourceQuota(ResourceQuota("AsyncQpsServerTest") + .Resize(config.resource_quota_size())); } server_ = builder.BuildAndStart(); diff --git a/test/cpp/qps/server_sync.cc b/test/cpp/qps/server_sync.cc index 97f709b714d..96f50a35aca 100644 --- a/test/cpp/qps/server_sync.cc +++ b/test/cpp/qps/server_sync.cc @@ -33,7 +33,7 @@ #include -#include +#include #include #include #include @@ -94,9 +94,9 @@ class SynchronousServer GRPC_FINAL : public grpc::testing::Server { Server::CreateServerCredentials(config)); gpr_free(server_address); - if (config.buffer_pool_size() > 0) { - builder.SetBufferPool( - BufferPool("AsyncQpsServerTest").Resize(config.buffer_pool_size())); + if (config.resource_quota_size() > 0) { + builder.SetResourceQuota(ResourceQuota("AsyncQpsServerTest") + .Resize(config.resource_quota_size())); } builder.RegisterService(&service_); diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++ index 6ad0db0fca4..00f970a4cbd 100644 --- a/tools/doxygen/Doxyfile.c++ +++ b/tools/doxygen/Doxyfile.c++ @@ -761,7 +761,6 @@ WARN_LOGFILE = # Note: If this tag is empty the current directory is searched. INPUT = include/grpc++/alarm.h \ -include/grpc++/buffer_pool.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ @@ -788,6 +787,7 @@ include/grpc++/impl/sync_no_cxx11.h \ include/grpc++/impl/thd.h \ include/grpc++/impl/thd_cxx11.h \ include/grpc++/impl/thd_no_cxx11.h \ +include/grpc++/resource_quota.h \ include/grpc++/security/auth_context.h \ include/grpc++/security/auth_metadata_processor.h \ include/grpc++/security/credentials.h \ diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index cb9868e68dd..252bdb7ed17 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -761,7 +761,6 @@ WARN_LOGFILE = # Note: If this tag is empty the current directory is searched. INPUT = include/grpc++/alarm.h \ -include/grpc++/buffer_pool.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ @@ -788,6 +787,7 @@ include/grpc++/impl/sync_no_cxx11.h \ include/grpc++/impl/thd.h \ include/grpc++/impl/thd_cxx11.h \ include/grpc++/impl/thd_no_cxx11.h \ +include/grpc++/resource_quota.h \ include/grpc++/security/auth_context.h \ include/grpc++/security/auth_metadata_processor.h \ include/grpc++/security/credentials.h \ @@ -879,11 +879,11 @@ src/cpp/client/create_channel_internal.cc \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/generic_stub.cc \ -src/cpp/common/buffer_pool_cc.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ src/cpp/common/core_codegen.cc \ +src/cpp/common/resource_quota_cc.cc \ src/cpp/common/rpc_method.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/create_default_thread_pool.cc \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 71a33e67c73..a8dc6161868 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -803,7 +803,6 @@ src/core/lib/debug/trace.h \ src/core/lib/http/format_request.h \ src/core/lib/http/httpcli.h \ src/core/lib/http/parser.h \ -src/core/lib/iomgr/buffer_pool.h \ src/core/lib/iomgr/closure.h \ src/core/lib/iomgr/combiner.h \ src/core/lib/iomgr/endpoint.h \ @@ -827,6 +826,7 @@ src/core/lib/iomgr/pollset_set.h \ src/core/lib/iomgr/pollset_set_windows.h \ src/core/lib/iomgr/pollset_windows.h \ src/core/lib/iomgr/resolve_address.h \ +src/core/lib/iomgr/resource_quota.h \ src/core/lib/iomgr/sockaddr.h \ src/core/lib/iomgr/sockaddr_posix.h \ src/core/lib/iomgr/sockaddr_utils.h \ @@ -969,7 +969,6 @@ src/core/lib/debug/trace.c \ src/core/lib/http/format_request.c \ src/core/lib/http/httpcli.c \ src/core/lib/http/parser.c \ -src/core/lib/iomgr/buffer_pool.c \ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/combiner.c \ src/core/lib/iomgr/endpoint.c \ @@ -993,6 +992,7 @@ src/core/lib/iomgr/pollset_set_windows.c \ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ +src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index 3d7c90066e0..13bd6295232 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -115,7 +115,7 @@ def _ping_pong_scenario(name, rpc_type, categories=DEFAULT_CATEGORIES, channels=None, outstanding=None, - buffer_pool_size=None): + resource_quota_size=None): """Creates a basic ping pong scenario.""" scenario = { 'name': name, @@ -142,8 +142,8 @@ def _ping_pong_scenario(name, rpc_type, 'warmup_seconds': warmup_seconds, 'benchmark_seconds': BENCHMARK_SECONDS } - if buffer_pool_size: - scenario['server_config']['buffer_pool_size'] = buffer_pool_size + if resource_quota_size: + scenario['server_config']['resource_quota_size'] = resource_quota_size if use_generic_payload: if server_type != 'ASYNC_GENERIC_SERVER': raise Exception('Use ASYNC_GENERIC_SERVER for generic payload.') @@ -242,14 +242,14 @@ class CXXLanguage: categories=smoketest_categories+[SCALABLE]) yield _ping_pong_scenario( - 'cpp_protobuf_%s_%s_qps_unconstrained_%s_500kib_buffer_pool' % (synchronicity, rpc_type, secstr), + 'cpp_protobuf_%s_%s_qps_unconstrained_%s_500kib_resource_quota' % (synchronicity, rpc_type, secstr), rpc_type=rpc_type.upper(), client_type='%s_CLIENT' % synchronicity.upper(), server_type='%s_SERVER' % synchronicity.upper(), unconstrained_client=synchronicity, secure=secure, categories=smoketest_categories+[SCALABLE], - buffer_pool_size=500*1024) + resource_quota_size=500*1024) for channels in geometric_progression(1, 20000, math.sqrt(10)): for outstanding in geometric_progression(1, 200000, math.sqrt(10)): diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index e84ee7eb5d5..afdc49d67bf 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -132,23 +132,6 @@ "third_party": false, "type": "target" }, - { - "deps": [ - "gpr", - "gpr_test_util", - "grpc", - "grpc_test_util" - ], - "headers": [], - "is_filegroup": false, - "language": "c", - "name": "buffer_pool_test", - "src": [ - "test/core/iomgr/buffer_pool_test.c" - ], - "third_party": false, - "type": "target" - }, { "deps": [ "gpr", @@ -1704,6 +1687,23 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "resource_quota_test", + "src": [ + "test/core/iomgr/resource_quota_test.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -6028,7 +6028,6 @@ "test/core/end2end/end2end_tests.h", "test/core/end2end/tests/bad_hostname.c", "test/core/end2end/tests/binary_metadata.c", - "test/core/end2end/tests/buffer_pool_server.c", "test/core/end2end/tests/call_creds.c", "test/core/end2end/tests/cancel_after_accept.c", "test/core/end2end/tests/cancel_after_client_done.c", @@ -6063,6 +6062,7 @@ "test/core/end2end/tests/registered_call.c", "test/core/end2end/tests/request_with_flags.c", "test/core/end2end/tests/request_with_payload.c", + "test/core/end2end/tests/resource_quota_server.c", "test/core/end2end/tests/server_finishes_request.c", "test/core/end2end/tests/shutdown_finishes_calls.c", "test/core/end2end/tests/shutdown_finishes_tags.c", @@ -6095,7 +6095,6 @@ "test/core/end2end/end2end_tests.h", "test/core/end2end/tests/bad_hostname.c", "test/core/end2end/tests/binary_metadata.c", - "test/core/end2end/tests/buffer_pool_server.c", "test/core/end2end/tests/cancel_after_accept.c", "test/core/end2end/tests/cancel_after_client_done.c", "test/core/end2end/tests/cancel_after_invoke.c", @@ -6129,6 +6128,7 @@ "test/core/end2end/tests/registered_call.c", "test/core/end2end/tests/request_with_flags.c", "test/core/end2end/tests/request_with_payload.c", + "test/core/end2end/tests/resource_quota_server.c", "test/core/end2end/tests/server_finishes_request.c", "test/core/end2end/tests/shutdown_finishes_calls.c", "test/core/end2end/tests/shutdown_finishes_tags.c", @@ -6403,7 +6403,6 @@ "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", - "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/endpoint.h", @@ -6427,6 +6426,7 @@ "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/resolve_address.h", + "src/core/lib/iomgr/resource_quota.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", @@ -6516,8 +6516,6 @@ "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.c", "src/core/lib/http/parser.h", - "src/core/lib/iomgr/buffer_pool.c", - "src/core/lib/iomgr/buffer_pool.h", "src/core/lib/iomgr/closure.c", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.c", @@ -6564,6 +6562,8 @@ "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", + "src/core/lib/iomgr/resource_quota.c", + "src/core/lib/iomgr/resource_quota.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.c", @@ -7242,7 +7242,6 @@ ], "headers": [ "include/grpc++/alarm.h", - "include/grpc++/buffer_pool.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", @@ -7269,6 +7268,7 @@ "include/grpc++/impl/thd.h", "include/grpc++/impl/thd_cxx11.h", "include/grpc++/impl/thd_no_cxx11.h", + "include/grpc++/resource_quota.h", "include/grpc++/security/auth_context.h", "include/grpc++/security/auth_metadata_processor.h", "include/grpc++/security/credentials.h", @@ -7299,7 +7299,6 @@ "name": "grpc++_base", "src": [ "include/grpc++/alarm.h", - "include/grpc++/buffer_pool.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", @@ -7326,6 +7325,7 @@ "include/grpc++/impl/thd.h", "include/grpc++/impl/thd_cxx11.h", "include/grpc++/impl/thd_no_cxx11.h", + "include/grpc++/resource_quota.h", "include/grpc++/security/auth_context.h", "include/grpc++/security/auth_metadata_processor.h", "include/grpc++/security/credentials.h", @@ -7354,12 +7354,12 @@ "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/generic_stub.cc", - "src/cpp/common/buffer_pool_cc.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/channel_filter.h", "src/cpp/common/completion_queue_cc.cc", "src/cpp/common/core_codegen.cc", + "src/cpp/common/resource_quota_cc.cc", "src/cpp/common/rpc_method.cc", "src/cpp/server/async_generic_service.cc", "src/cpp/server/create_default_thread_pool.cc", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index a8f4ca82699..ecca9fea63c 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -148,27 +148,6 @@ "windows" ] }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 30, - "exclude_configs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "buffer_pool_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, { "args": [], "ci_platforms": [ @@ -1653,6 +1632,27 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 30, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c", + "name": "resource_quota_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ @@ -4622,28 +4622,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_census_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "call_creds" @@ -5372,7 +5350,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -5394,7 +5372,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -5416,7 +5394,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -5438,7 +5416,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -5460,7 +5438,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -5482,7 +5460,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -5504,7 +5482,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -5526,7 +5504,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -5548,7 +5526,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -5570,7 +5548,7 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ "windows", @@ -5582,7 +5560,7 @@ "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_compress_test", + "name": "h2_census_test", "platforms": [ "windows", "linux", @@ -5592,7 +5570,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -5614,7 +5592,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -6362,7 +6340,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -6384,7 +6362,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -6406,7 +6384,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -6428,7 +6406,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -6450,7 +6428,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -6472,7 +6450,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -6494,7 +6472,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -6516,7 +6494,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -6538,7 +6516,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -6560,18 +6538,19 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ "windows", "linux", + "mac", "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_fakesec_test", + "name": "h2_compress_test", "platforms": [ "windows", "linux", @@ -6581,7 +6560,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -6602,7 +6581,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -7316,7 +7295,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -7337,7 +7316,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -7358,7 +7337,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -7379,7 +7358,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -7400,7 +7379,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -7421,7 +7400,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -7442,7 +7421,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -7463,7 +7442,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -7484,7 +7463,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -7505,19 +7484,20 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ + "windows", "linux", - "mac", "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_fd_test", + "name": "h2_fakesec_test", "platforms": [ + "windows", "linux", "mac", "posix" @@ -7525,7 +7505,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "linux", @@ -7545,7 +7525,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "linux", @@ -8145,7 +8125,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "linux", @@ -8165,7 +8145,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "linux", @@ -8185,7 +8165,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "linux", @@ -8205,7 +8185,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "linux", @@ -8225,7 +8205,7 @@ }, { "args": [ - "simple_metadata" + "simple_cacheable_request" ], "ci_platforms": [ "linux", @@ -8245,7 +8225,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "linux", @@ -8265,7 +8245,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "linux", @@ -8285,7 +8265,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "linux", @@ -8305,10 +8285,9 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ - "windows", "linux", "mac", "posix" @@ -8317,9 +8296,8 @@ "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_full_test", + "name": "h2_fd_test", "platforms": [ - "windows", "linux", "mac", "posix" @@ -8327,7 +8305,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -8349,7 +8327,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -9097,7 +9075,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -9119,7 +9097,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -9141,7 +9119,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -9163,7 +9141,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -9185,7 +9163,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -9207,7 +9185,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -9229,7 +9207,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -9251,7 +9229,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -9273,7 +9251,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -9295,23 +9273,29 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ - "linux" + "windows", + "linux", + "mac", + "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_full+pipe_test", + "name": "h2_full_test", "platforms": [ - "linux" + "windows", + "linux", + "mac", + "posix" ] }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "linux" @@ -9327,7 +9311,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "linux" @@ -9871,7 +9855,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "linux" @@ -9887,7 +9871,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "linux" @@ -9903,7 +9887,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "linux" @@ -9919,7 +9903,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "linux" @@ -9935,7 +9919,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "linux" @@ -9951,7 +9935,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "linux" @@ -9967,7 +9951,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "linux" @@ -9983,7 +9967,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "linux" @@ -9999,7 +9983,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "linux" @@ -10015,29 +9999,23 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" + "linux" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_full+trace_test", + "name": "h2_full+pipe_test", "platforms": [ - "windows", - "linux", - "mac", - "posix" + "linux" ] }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -10059,7 +10037,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -10763,7 +10741,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -10785,7 +10763,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -10807,7 +10785,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -10829,7 +10807,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -10851,7 +10829,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -10873,7 +10851,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -10895,7 +10873,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -10917,7 +10895,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -10939,7 +10917,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -10961,18 +10939,19 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ "windows", "linux", + "mac", "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_http_proxy_test", + "name": "h2_full+trace_test", "platforms": [ "windows", "linux", @@ -10982,7 +10961,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -11003,7 +10982,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -11717,7 +11696,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -11738,7 +11717,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -11759,7 +11738,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -11780,7 +11759,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -11801,7 +11780,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -11822,7 +11801,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -11843,7 +11822,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -11864,7 +11843,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -11885,7 +11864,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -11906,19 +11885,18 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ "windows", "linux", - "mac", "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_load_reporting_test", + "name": "h2_http_proxy_test", "platforms": [ "windows", "linux", @@ -11928,7 +11906,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -11950,7 +11928,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -12698,7 +12676,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -12720,7 +12698,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -12742,7 +12720,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -12764,7 +12742,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -12786,7 +12764,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -12808,7 +12786,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -12830,7 +12808,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -12852,7 +12830,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -12874,7 +12852,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -12896,18 +12874,19 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ "windows", "linux", + "mac", "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_oauth2_test", + "name": "h2_load_reporting_test", "platforms": [ "windows", "linux", @@ -12917,7 +12896,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -12938,7 +12917,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -13650,6 +13629,27 @@ "posix" ] }, + { + "args": [ + "resource_quota_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_oauth2_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "server_finishes_request" @@ -14679,27 +14679,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "call_creds" @@ -15309,6 +15288,27 @@ "posix" ] }, + { + "args": [ + "resource_quota_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "server_finishes_request" @@ -17117,28 +17117,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_ssl_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "call_creds" @@ -17867,7 +17845,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -17889,7 +17867,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -17911,7 +17889,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -17933,7 +17911,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -17955,7 +17933,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -17977,7 +17955,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -17999,7 +17977,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -18021,7 +17999,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -18043,7 +18021,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -18065,7 +18043,7 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ "windows", @@ -18077,7 +18055,7 @@ "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_ssl_cert_test", + "name": "h2_ssl_test", "platforms": [ "windows", "linux", @@ -18087,7 +18065,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -18109,7 +18087,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -18855,6 +18833,28 @@ "posix" ] }, + { + "args": [ + "resource_quota_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_cert_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "server_finishes_request" @@ -19891,26 +19891,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_uds_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, { "args": [ "call_creds" @@ -20553,7 +20533,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "linux", @@ -20573,7 +20553,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "linux", @@ -20593,7 +20573,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "linux", @@ -20613,7 +20593,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "linux", @@ -20633,7 +20613,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "linux", @@ -20653,7 +20633,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "linux", @@ -20673,7 +20653,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "linux", @@ -20693,7 +20673,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "linux", @@ -20713,7 +20693,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "linux", @@ -20733,10 +20713,9 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ - "windows", "linux", "mac", "posix" @@ -20745,9 +20724,8 @@ "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_census_nosec_test", + "name": "h2_uds_test", "platforms": [ - "windows", "linux", "mac", "posix" @@ -20755,7 +20733,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -20777,7 +20755,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -21503,7 +21481,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -21525,7 +21503,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -21547,7 +21525,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -21569,7 +21547,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -21591,7 +21569,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -21613,7 +21591,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -21635,7 +21613,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -21657,7 +21635,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -21679,7 +21657,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -21701,7 +21679,7 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ "windows", @@ -21713,7 +21691,7 @@ "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_compress_nosec_test", + "name": "h2_census_nosec_test", "platforms": [ "windows", "linux", @@ -21723,7 +21701,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -21745,7 +21723,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -22471,7 +22449,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -22493,7 +22471,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -22515,7 +22493,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -22537,7 +22515,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -22559,7 +22537,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -22581,7 +22559,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -22603,7 +22581,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -22625,7 +22603,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -22647,7 +22625,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -22669,9 +22647,10 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ + "windows", "linux", "mac", "posix" @@ -22680,8 +22659,9 @@ "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_fd_nosec_test", + "name": "h2_compress_nosec_test", "platforms": [ + "windows", "linux", "mac", "posix" @@ -22689,7 +22669,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "linux", @@ -22709,7 +22689,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "linux", @@ -23289,7 +23269,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "linux", @@ -23309,7 +23289,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "linux", @@ -23329,7 +23309,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "linux", @@ -23349,7 +23329,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "linux", @@ -23369,7 +23349,7 @@ }, { "args": [ - "simple_metadata" + "simple_cacheable_request" ], "ci_platforms": [ "linux", @@ -23389,7 +23369,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "linux", @@ -23409,7 +23389,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "linux", @@ -23429,7 +23409,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "linux", @@ -23449,10 +23429,9 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ - "windows", "linux", "mac", "posix" @@ -23461,9 +23440,8 @@ "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_full_nosec_test", + "name": "h2_fd_nosec_test", "platforms": [ - "windows", "linux", "mac", "posix" @@ -23471,7 +23449,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -23493,7 +23471,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -24219,7 +24197,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -24241,7 +24219,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -24263,7 +24241,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -24285,7 +24263,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -24307,7 +24285,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -24329,7 +24307,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -24351,7 +24329,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -24373,7 +24351,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -24395,7 +24373,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -24417,23 +24395,29 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ - "linux" + "windows", + "linux", + "mac", + "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_full+pipe_nosec_test", + "name": "h2_full_nosec_test", "platforms": [ - "linux" + "windows", + "linux", + "mac", + "posix" ] }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "linux" @@ -24449,7 +24433,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "linux" @@ -24977,7 +24961,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "linux" @@ -24993,7 +24977,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "linux" @@ -25009,7 +24993,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "linux" @@ -25025,7 +25009,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "linux" @@ -25041,7 +25025,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "linux" @@ -25057,7 +25041,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "linux" @@ -25073,7 +25057,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "linux" @@ -25089,7 +25073,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "linux" @@ -25105,7 +25089,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "linux" @@ -25121,29 +25105,23 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" + "linux" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_full+trace_nosec_test", + "name": "h2_full+pipe_nosec_test", "platforms": [ - "windows", - "linux", - "mac", - "posix" + "linux" ] }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -25165,7 +25143,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -25847,7 +25825,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -25869,7 +25847,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -25891,7 +25869,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -25913,7 +25891,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -25935,7 +25913,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -25957,7 +25935,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -25979,7 +25957,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -26001,7 +25979,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -26023,7 +26001,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -26045,18 +26023,19 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ "windows", "linux", + "mac", "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_http_proxy_nosec_test", + "name": "h2_full+trace_nosec_test", "platforms": [ "windows", "linux", @@ -26066,7 +26045,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -26087,7 +26066,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -26780,7 +26759,7 @@ }, { "args": [ - "server_finishes_request" + "resource_quota_server" ], "ci_platforms": [ "windows", @@ -26801,7 +26780,7 @@ }, { "args": [ - "shutdown_finishes_calls" + "server_finishes_request" ], "ci_platforms": [ "windows", @@ -26822,7 +26801,7 @@ }, { "args": [ - "shutdown_finishes_tags" + "shutdown_finishes_calls" ], "ci_platforms": [ "windows", @@ -26843,7 +26822,7 @@ }, { "args": [ - "simple_cacheable_request" + "shutdown_finishes_tags" ], "ci_platforms": [ "windows", @@ -26864,7 +26843,7 @@ }, { "args": [ - "simple_delayed_request" + "simple_cacheable_request" ], "ci_platforms": [ "windows", @@ -26885,7 +26864,7 @@ }, { "args": [ - "simple_metadata" + "simple_delayed_request" ], "ci_platforms": [ "windows", @@ -26906,7 +26885,7 @@ }, { "args": [ - "simple_request" + "simple_metadata" ], "ci_platforms": [ "windows", @@ -26927,7 +26906,7 @@ }, { "args": [ - "streaming_error_response" + "simple_request" ], "ci_platforms": [ "windows", @@ -26948,7 +26927,7 @@ }, { "args": [ - "trailing_metadata" + "streaming_error_response" ], "ci_platforms": [ "windows", @@ -26969,19 +26948,18 @@ }, { "args": [ - "bad_hostname" + "trailing_metadata" ], "ci_platforms": [ "windows", "linux", - "mac", "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", - "name": "h2_load_reporting_nosec_test", + "name": "h2_http_proxy_nosec_test", "platforms": [ "windows", "linux", @@ -26991,7 +26969,7 @@ }, { "args": [ - "binary_metadata" + "bad_hostname" ], "ci_platforms": [ "windows", @@ -27013,7 +26991,7 @@ }, { "args": [ - "buffer_pool_server" + "binary_metadata" ], "ci_platforms": [ "windows", @@ -27737,6 +27715,28 @@ "posix" ] }, + { + "args": [ + "resource_quota_server" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_load_reporting_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "server_finishes_request" @@ -28754,27 +28754,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "windows", - "linux", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair_nosec_test", - "platforms": [ - "windows", - "linux", - "mac", - "posix" - ] - }, { "args": [ "cancel_after_accept" @@ -29363,6 +29342,27 @@ "posix" ] }, + { + "args": [ + "resource_quota_server" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "server_finishes_request" @@ -31201,26 +31201,6 @@ "posix" ] }, - { - "args": [ - "buffer_pool_server" - ], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_uds_nosec_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, { "args": [ "cancel_after_accept" @@ -31841,6 +31821,26 @@ "posix" ] }, + { + "args": [ + "resource_quota_server" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_uds_nosec_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, { "args": [ "server_finishes_request" @@ -32129,7 +32129,7 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"buffer_pool_size\": 512000, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" ], "boringssl": true, "ci_platforms": [ @@ -32144,7 +32144,7 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_buffer_pool", + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota", "timeout_seconds": 180 }, { @@ -32192,7 +32192,7 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"buffer_pool_size\": 512000, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" ], "boringssl": true, "ci_platforms": [ @@ -32207,7 +32207,7 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_buffer_pool", + "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota", "timeout_seconds": 180 }, { @@ -32255,7 +32255,7 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"buffer_pool_size\": 512000, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" ], "boringssl": true, "ci_platforms": [ @@ -32270,7 +32270,7 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_buffer_pool", + "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota", "timeout_seconds": 180 }, { @@ -32318,7 +32318,7 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"buffer_pool_size\": 512000, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" ], "boringssl": true, "ci_platforms": [ @@ -32333,7 +32333,7 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_buffer_pool", + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota", "timeout_seconds": 180 }, { @@ -32444,7 +32444,7 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"buffer_pool_size\": 512000, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" ], "boringssl": true, "ci_platforms": [ @@ -32459,7 +32459,7 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_buffer_pool", + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota", "timeout_seconds": 180 }, { @@ -32507,7 +32507,7 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"buffer_pool_size\": 512000, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" ], "boringssl": true, "ci_platforms": [ @@ -32522,7 +32522,7 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_buffer_pool", + "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota", "timeout_seconds": 180 }, { @@ -32570,7 +32570,7 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"buffer_pool_size\": 512000, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" ], "boringssl": true, "ci_platforms": [ @@ -32585,7 +32585,7 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_buffer_pool", + "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota", "timeout_seconds": 180 }, { @@ -32633,7 +32633,7 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_buffer_pool\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"buffer_pool_size\": 512000, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" ], "boringssl": true, "ci_platforms": [ @@ -32648,7 +32648,7 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_buffer_pool", + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota", "timeout_seconds": 180 }, { diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index 34c3d7a1f2f..c84f1496576 100644 --- a/vsprojects/buildtests_c.sln +++ b/vsprojects/buildtests_c.sln @@ -98,17 +98,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bin_encoder_test", "vcxproj {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buffer_pool_test", "vcxproj\test\buffer_pool_test\buffer_pool_test.vcxproj", "{46480473-88FC-8C53-3509-FC7F4DC3A8CD}" - ProjectSection(myProperties) = preProject - lib = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} - {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} - {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} - {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "census_context_test", "vcxproj\test\census_context_test\census_context_test.vcxproj", "{5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}" ProjectSection(myProperties) = preProject lib = "False" @@ -1304,6 +1293,17 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "resolve_address_test", "vcx {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "resource_quota_test", "vcxproj\test\resource_quota_test\resource_quota_test.vcxproj", "{6084F546-5D66-5CB5-63CF-DC960F14B545}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "secure_channel_create_test", "vcxproj\test\secure_channel_create_test\secure_channel_create_test.vcxproj", "{62B25398-7173-928E-689E-53860B0ACFC4}" ProjectSection(myProperties) = preProject lib = "False" @@ -1685,22 +1685,6 @@ Global {D5C70922-D68E-0E9D-9988-995E0F9A79AE}.Release-DLL|Win32.Build.0 = Release|Win32 {D5C70922-D68E-0E9D-9988-995E0F9A79AE}.Release-DLL|x64.ActiveCfg = Release|x64 {D5C70922-D68E-0E9D-9988-995E0F9A79AE}.Release-DLL|x64.Build.0 = Release|x64 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug|Win32.ActiveCfg = Debug|Win32 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug|x64.ActiveCfg = Debug|x64 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release|Win32.ActiveCfg = Release|Win32 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release|x64.ActiveCfg = Release|x64 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug|Win32.Build.0 = Debug|Win32 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug|x64.Build.0 = Debug|x64 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release|Win32.Build.0 = Release|Win32 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release|x64.Build.0 = Release|x64 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug-DLL|Win32.Build.0 = Debug|Win32 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug-DLL|x64.ActiveCfg = Debug|x64 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Debug-DLL|x64.Build.0 = Debug|x64 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release-DLL|Win32.ActiveCfg = Release|Win32 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release-DLL|Win32.Build.0 = Release|Win32 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release-DLL|x64.ActiveCfg = Release|x64 - {46480473-88FC-8C53-3509-FC7F4DC3A8CD}.Release-DLL|x64.Build.0 = Release|x64 {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug|Win32.ActiveCfg = Debug|Win32 {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug|x64.ActiveCfg = Debug|x64 {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release|Win32.ActiveCfg = Release|Win32 @@ -3509,6 +3493,22 @@ Global {8279AF6C-9584-67F3-1547-B204864FCCA7}.Release-DLL|Win32.Build.0 = Release|Win32 {8279AF6C-9584-67F3-1547-B204864FCCA7}.Release-DLL|x64.ActiveCfg = Release|x64 {8279AF6C-9584-67F3-1547-B204864FCCA7}.Release-DLL|x64.Build.0 = Release|x64 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Debug|Win32.ActiveCfg = Debug|Win32 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Debug|x64.ActiveCfg = Debug|x64 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Release|Win32.ActiveCfg = Release|Win32 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Release|x64.ActiveCfg = Release|x64 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Debug|Win32.Build.0 = Debug|Win32 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Debug|x64.Build.0 = Debug|x64 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Release|Win32.Build.0 = Release|Win32 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Release|x64.Build.0 = Release|x64 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Debug-DLL|x64.Build.0 = Debug|x64 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Release-DLL|Win32.Build.0 = Release|Win32 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Release-DLL|x64.ActiveCfg = Release|x64 + {6084F546-5D66-5CB5-63CF-DC960F14B545}.Release-DLL|x64.Build.0 = Release|x64 {62B25398-7173-928E-689E-53860B0ACFC4}.Debug|Win32.ActiveCfg = Debug|Win32 {62B25398-7173-928E-689E-53860B0ACFC4}.Debug|x64.ActiveCfg = Debug|x64 {62B25398-7173-928E-689E-53860B0ACFC4}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index 6c2d33bf630..43c5281a024 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -259,7 +259,6 @@ - @@ -286,6 +285,7 @@ + @@ -396,8 +396,6 @@ - - @@ -406,6 +404,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index 974371dc85e..6ad212a125c 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -46,9 +46,6 @@ src\cpp\client - - src\cpp\common - src\cpp\common @@ -61,6 +58,9 @@ src\cpp\common + + src\cpp\common + src\cpp\common @@ -111,9 +111,6 @@ include\grpc++ - - include\grpc++ - include\grpc++ @@ -192,6 +189,9 @@ include\grpc++\impl + + include\grpc++ + include\grpc++\security diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index 5bfe4375f42..9e6f2c0d0f1 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -259,7 +259,6 @@ - @@ -286,6 +285,7 @@ + @@ -382,8 +382,6 @@ - - @@ -392,6 +390,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index 805b8609c9b..c73be4e63fe 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -31,9 +31,6 @@ src\cpp\client - - src\cpp\common - src\cpp\common @@ -46,6 +43,9 @@ src\cpp\common + + src\cpp\common + src\cpp\common @@ -96,9 +96,6 @@ include\grpc++ - - include\grpc++ - include\grpc++ @@ -177,6 +174,9 @@ include\grpc++\impl + + include\grpc++ + include\grpc++\security diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 31fdbe4f44b..8c9056ea148 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -312,7 +312,6 @@ - @@ -336,6 +335,7 @@ + @@ -497,8 +497,6 @@ - - @@ -545,6 +543,8 @@ + + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 0dcb848cd96..f37c1ed8ce6 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -52,9 +52,6 @@ src\core\lib\http - - src\core\lib\iomgr - src\core\lib\iomgr @@ -124,6 +121,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -722,9 +722,6 @@ src\core\lib\http - - src\core\lib\iomgr - src\core\lib\iomgr @@ -794,6 +791,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index ed74ef0f0ba..03b86c134d7 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -205,7 +205,6 @@ - @@ -229,6 +228,7 @@ + @@ -345,8 +345,6 @@ - - @@ -393,6 +391,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 9a6ad726115..d383970da49 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -106,9 +106,6 @@ src\core\lib\http - - src\core\lib\iomgr - src\core\lib\iomgr @@ -178,6 +175,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -509,9 +509,6 @@ src\core\lib\http - - src\core\lib\iomgr - src\core\lib\iomgr @@ -581,6 +578,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 8d007329b6b..9edaa0ec232 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -302,7 +302,6 @@ - @@ -326,6 +325,7 @@ + @@ -465,8 +465,6 @@ - - @@ -513,6 +511,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 1a28d41bbfe..c4be5b7af71 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -55,9 +55,6 @@ src\core\lib\http - - src\core\lib\iomgr - src\core\lib\iomgr @@ -127,6 +124,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -632,9 +632,6 @@ src\core\lib\http - - src\core\lib\iomgr - src\core\lib\iomgr @@ -704,6 +701,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj index f2665cc39f6..a47c40f0f73 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj @@ -157,8 +157,6 @@ - - @@ -223,6 +221,8 @@ + + diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters index a1ea12173d8..71cf6838fe2 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters @@ -10,9 +10,6 @@ test\core\end2end\tests - - test\core\end2end\tests - test\core\end2end\tests @@ -109,6 +106,9 @@ test\core\end2end\tests + + test\core\end2end\tests + test\core\end2end\tests diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj index 0b8c1666aea..68ff5f1ebd8 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj @@ -157,8 +157,6 @@ - - @@ -225,6 +223,8 @@ + + diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters index 8577b1652ab..7a620f61a54 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters @@ -10,9 +10,6 @@ test\core\end2end\tests - - test\core\end2end\tests - test\core\end2end\tests @@ -112,6 +109,9 @@ test\core\end2end\tests + + test\core\end2end\tests + test\core\end2end\tests diff --git a/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj b/vsprojects/vcxproj/test/resource_quota_test/resource_quota_test.vcxproj similarity index 98% rename from vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj rename to vsprojects/vcxproj/test/resource_quota_test/resource_quota_test.vcxproj index d11d063f9d1..389340e9a03 100644 --- a/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj +++ b/vsprojects/vcxproj/test/resource_quota_test/resource_quota_test.vcxproj @@ -20,7 +20,7 @@ - {46480473-88FC-8C53-3509-FC7F4DC3A8CD} + {6084F546-5D66-5CB5-63CF-DC960F14B545} true $(SolutionDir)IntDir\$(MSBuildProjectName)\ @@ -60,14 +60,14 @@ - buffer_pool_test + resource_quota_test static Debug static Debug - buffer_pool_test + resource_quota_test static Release static @@ -158,7 +158,7 @@ - + diff --git a/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj.filters b/vsprojects/vcxproj/test/resource_quota_test/resource_quota_test.vcxproj.filters similarity index 62% rename from vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj.filters rename to vsprojects/vcxproj/test/resource_quota_test/resource_quota_test.vcxproj.filters index ecbf91ec6e9..d76c8aed5d5 100644 --- a/vsprojects/vcxproj/test/buffer_pool_test/buffer_pool_test.vcxproj.filters +++ b/vsprojects/vcxproj/test/resource_quota_test/resource_quota_test.vcxproj.filters @@ -1,20 +1,20 @@ - + test\core\iomgr - {94e599c3-a059-4581-0cac-d15361ec8a7d} + {06783e32-dbf0-7e7c-7b50-12b278f9cc12} - {6d25d413-0043-5a1c-52f7-7d25809be372} + {c4f432b6-577b-e3ed-fec9-a915af5ebbd5} - {64b38e90-4497-be2e-cee1-402590cbea8a} + {fcc82d68-ffb2-0843-83aa-175006c43aeb} From 877caede868cb19978f745bc78236ef5bed8d2e6 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Mon, 17 Oct 2016 15:16:48 -0700 Subject: [PATCH 132/286] Backport the grpc_channel_arg_get_integer function --- src/core/ext/client_config/subchannel.c | 1 + src/core/lib/channel/channel_args.c | 18 ++++++++++++++++++ src/core/lib/channel/channel_args.h | 8 ++++++++ 3 files changed, 27 insertions(+) diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_config/subchannel.c index 646e6027f83..02cdf8648e0 100644 --- a/src/core/ext/client_config/subchannel.c +++ b/src/core/ext/client_config/subchannel.c @@ -33,6 +33,7 @@ #include "src/core/ext/client_config/subchannel.h" +#include #include #include diff --git a/src/core/lib/channel/channel_args.c b/src/core/lib/channel/channel_args.c index 79ceeb66b38..3a56b1ff205 100644 --- a/src/core/lib/channel/channel_args.c +++ b/src/core/lib/channel/channel_args.c @@ -271,3 +271,21 @@ int grpc_channel_args_compare(const grpc_channel_args *a, } return 0; } + +int grpc_channel_arg_get_integer(grpc_arg *arg, grpc_integer_options options) { + if (arg->type != GRPC_ARG_INTEGER) { + gpr_log(GPR_ERROR, "%s ignored: it must be an integer", arg->key); + return options.default_value; + } + if (arg->value.integer < options.min_value) { + gpr_log(GPR_ERROR, "%s ignored: it must be >= %d", arg->key, + options.min_value); + return options.default_value; + } + if (arg->value.integer > options.max_value) { + gpr_log(GPR_ERROR, "%s ignored: it must be <= %d", arg->key, + options.max_value); + return options.default_value; + } + return arg->value.integer; +} diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h index 653d04f4279..e85e979eeb7 100644 --- a/src/core/lib/channel/channel_args.h +++ b/src/core/lib/channel/channel_args.h @@ -87,4 +87,12 @@ uint32_t grpc_channel_args_compression_algorithm_get_states( int grpc_channel_args_compare(const grpc_channel_args *a, const grpc_channel_args *b); +typedef struct grpc_integer_options { + int default_value; // Return this if value is outside of expected bounds. + int min_value; + int max_value; +} grpc_integer_options; +/** Returns the value of \a arg, subject to the contraints in \a options. */ +int grpc_channel_arg_get_integer(grpc_arg *arg, grpc_integer_options options); + #endif /* GRPC_CORE_LIB_CHANNEL_CHANNEL_ARGS_H */ From 6758caae3155b20aed70364a2828f987f4415886 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Mon, 17 Oct 2016 17:10:26 -0700 Subject: [PATCH 133/286] Advance versions from 1.0.0 to 1.0.1-pre1 --- gRPC-Core.podspec | 2 +- gRPC-ProtoRPC.podspec | 2 +- gRPC-RxLibrary.podspec | 2 +- gRPC.podspec | 2 +- src/objective-c/!ProtoCompiler-gRPCPlugin.podspec | 2 +- src/objective-c/CronetFramework.podspec | 2 +- templates/gRPC-Core.podspec.template | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index b8dd2a7e331..1ca8119a109 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -35,7 +35,7 @@ Pod::Spec.new do |s| s.name = 'gRPC-Core' - version = '1.0.0' + version = '1.0.1-pre1' s.version = version s.summary = 'Core cross-platform gRPC library, written in C' s.homepage = 'http://www.grpc.io' diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec index f6426fb4deb..186a8665605 100644 --- a/gRPC-ProtoRPC.podspec +++ b/gRPC-ProtoRPC.podspec @@ -30,7 +30,7 @@ Pod::Spec.new do |s| s.name = 'gRPC-ProtoRPC' - version = '1.0.0' + version = '1.0.1-pre1' s.version = version s.summary = 'RPC library for Protocol Buffers, based on gRPC' s.homepage = 'http://www.grpc.io' diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec index 316843436ba..59ecb8232d8 100644 --- a/gRPC-RxLibrary.podspec +++ b/gRPC-RxLibrary.podspec @@ -30,7 +30,7 @@ Pod::Spec.new do |s| s.name = 'gRPC-RxLibrary' - version = '1.0.0' + version = '1.0.1-pre1' s.version = version s.summary = 'Reactive Extensions library for iOS/OSX.' s.homepage = 'http://www.grpc.io' diff --git a/gRPC.podspec b/gRPC.podspec index 9a479349531..a326d814018 100644 --- a/gRPC.podspec +++ b/gRPC.podspec @@ -30,7 +30,7 @@ Pod::Spec.new do |s| s.name = 'gRPC' - version = '1.0.0' + version = '1.0.1-pre1' s.version = version s.summary = 'gRPC client library for iOS/OSX' s.homepage = 'http://www.grpc.io' diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec index 0c3c3216abe..3ec4a313e88 100644 --- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec +++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec @@ -36,7 +36,7 @@ Pod::Spec.new do |s| # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed # before them. s.name = '!ProtoCompiler-gRPCPlugin' - v = '1.0.0' + v = '1.0.1-pre1' s.version = v s.summary = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.' s.description = <<-DESC diff --git a/src/objective-c/CronetFramework.podspec b/src/objective-c/CronetFramework.podspec index 3ebcacf0554..fe46d32c1be 100644 --- a/src/objective-c/CronetFramework.podspec +++ b/src/objective-c/CronetFramework.podspec @@ -30,7 +30,7 @@ Pod::Spec.new do |s| s.name = "CronetFramework" - s.version = "0.0.2" + s.version = "0.0.3" s.summary = "Cronet, precompiled and used as a framework." s.homepage = "http://chromium.org" s.license = { :type => 'BSD' } diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template index 7d735d3aca5..dff7ce07d6d 100644 --- a/templates/gRPC-Core.podspec.template +++ b/templates/gRPC-Core.podspec.template @@ -62,7 +62,7 @@ %> Pod::Spec.new do |s| s.name = 'gRPC-Core' - version = '1.0.0' + version = '1.0.1-pre1' s.version = version s.summary = 'Core cross-platform gRPC library, written in C' s.homepage = 'http://www.grpc.io' From a507de342dac80775f711c30a90d41581f6f5f78 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Mon, 17 Oct 2016 20:57:25 -0700 Subject: [PATCH 134/286] Advance version of BoringSSL --- gRPC-Core.podspec | 2 +- src/objective-c/BoringSSL.podspec | 534 +++++++++++++++--------------- 2 files changed, 277 insertions(+), 259 deletions(-) diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 1ca8119a109..e59404932cd 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -191,7 +191,7 @@ Pod::Spec.new do |s| ss.header_mappings_dir = '.' ss.libraries = 'z' ss.dependency "#{s.name}/Interface", version - ss.dependency 'BoringSSL', '~> 6.0' + ss.dependency 'BoringSSL', '~> 7.0' # To save you from scrolling, this is the last part of the podspec. ss.source_files = 'src/core/lib/profiling/timers.h', diff --git a/src/objective-c/BoringSSL.podspec b/src/objective-c/BoringSSL.podspec index e14f39b898c..b1093e973d8 100644 --- a/src/objective-c/BoringSSL.podspec +++ b/src/objective-c/BoringSSL.podspec @@ -31,7 +31,7 @@ Pod::Spec.new do |s| s.name = 'BoringSSL' - version = '6.0' + version = '7.0' s.version = version s.summary = 'BoringSSL is a fork of OpenSSL that is designed to meet Google’s needs.' # Adapted from the homepage: @@ -69,8 +69,8 @@ Pod::Spec.new do |s| s.source = { :git => 'https://boringssl.googlesource.com/boringssl', - :tag => "version_for_cocoapods_#{version}", - # :commit => '4ac2dc4c0d48ca45da4f66c40e60d6b425fa94a3', + # :tag => "version_for_cocoapods_#{version}", + :commit => '4fec04b48406111cb88fdd8d196253adc54f7a31', } name = 'openssl' @@ -388,42 +388,42 @@ Pod::Spec.new do |s| 0x28340c19, 0x283480ac, 0x283500ea, - 0x2c322843, - 0x2c32a851, - 0x2c332863, - 0x2c33a875, - 0x2c342889, - 0x2c34a89b, - 0x2c3528b6, - 0x2c35a8c8, - 0x2c3628db, + 0x2c322910, + 0x2c32a91e, + 0x2c332930, + 0x2c33a942, + 0x2c342956, + 0x2c34a968, + 0x2c352983, + 0x2c35a995, + 0x2c3629a8, 0x2c36832d, - 0x2c3728e8, - 0x2c37a8fa, - 0x2c38290d, - 0x2c38a924, - 0x2c392932, - 0x2c39a942, - 0x2c3a2954, - 0x2c3aa968, - 0x2c3b2979, - 0x2c3ba998, - 0x2c3c29ac, - 0x2c3ca9c2, - 0x2c3d29db, - 0x2c3da9f8, - 0x2c3e2a09, - 0x2c3eaa17, - 0x2c3f2a2f, - 0x2c3faa47, - 0x2c402a54, + 0x2c3729b5, + 0x2c37a9c7, + 0x2c3829da, + 0x2c38a9f1, + 0x2c3929ff, + 0x2c39aa0f, + 0x2c3a2a21, + 0x2c3aaa35, + 0x2c3b2a46, + 0x2c3baa65, + 0x2c3c2a79, + 0x2c3caa8f, + 0x2c3d2aa8, + 0x2c3daac5, + 0x2c3e2ad6, + 0x2c3eaae4, + 0x2c3f2afc, + 0x2c3fab14, + 0x2c402b21, 0x2c4090e7, - 0x2c412a65, - 0x2c41aa78, + 0x2c412b32, + 0x2c41ab45, 0x2c4210c0, - 0x2c42aa89, + 0x2c42ab56, 0x2c430720, - 0x2c43a98a, + 0x2c43aa57, 0x30320000, 0x30328015, 0x3033001f, @@ -576,174 +576,183 @@ Pod::Spec.new do |s| 0x403b9861, 0x403c0064, 0x403c8083, - 0x403d1890, - 0x403d98a6, - 0x403e18b5, - 0x403e98c8, - 0x403f18e2, - 0x403f98f0, - 0x40401905, - 0x40409919, - 0x40411936, - 0x40419951, - 0x4042196a, - 0x4042997d, - 0x40431991, - 0x404399a9, - 0x404419c0, + 0x403d18aa, + 0x403d98c0, + 0x403e18cf, + 0x403e98e2, + 0x403f18fc, + 0x403f990a, + 0x4040191f, + 0x40409933, + 0x40411950, + 0x4041996b, + 0x40421984, + 0x40429997, + 0x404319ab, + 0x404399c3, + 0x404419da, 0x404480ac, - 0x404519d5, - 0x404599e7, - 0x40461a0b, - 0x40469a2b, - 0x40471a39, - 0x40479a60, - 0x40481a89, - 0x40489aa2, - 0x40491ab9, - 0x40499ad3, - 0x404a1aea, - 0x404a9b08, - 0x404b1b20, - 0x404b9b37, - 0x404c1b4d, - 0x404c9b5f, - 0x404d1b80, - 0x404d9ba2, - 0x404e1bb6, - 0x404e9bc3, - 0x404f1bf0, - 0x404f9c19, - 0x40501c43, - 0x40509c57, - 0x40511c72, - 0x40519c82, - 0x40521c99, - 0x40529cbd, - 0x40531cd5, - 0x40539ce8, - 0x40541cfd, - 0x40549d20, - 0x40551d2e, - 0x40559d4b, - 0x40561d58, - 0x40569d71, - 0x40571d89, - 0x40579d9c, - 0x40581db1, - 0x40589dc3, - 0x40591df2, - 0x40599e0b, - 0x405a1e1f, - 0x405a9e2f, - 0x405b1e47, - 0x405b9e58, - 0x405c1e6b, - 0x405c9e7c, - 0x405d1e89, - 0x405d9ea0, - 0x405e1ec0, + 0x404519ef, + 0x40459a01, + 0x40461a25, + 0x40469a45, + 0x40471a53, + 0x40479a7a, + 0x40481ab7, + 0x40489ad0, + 0x40491ae7, + 0x40499b01, + 0x404a1b18, + 0x404a9b36, + 0x404b1b4e, + 0x404b9b65, + 0x404c1b7b, + 0x404c9b8d, + 0x404d1bae, + 0x404d9bd0, + 0x404e1be4, + 0x404e9bf1, + 0x404f1c1e, + 0x404f9c47, + 0x40501c71, + 0x40509c85, + 0x40511ca0, + 0x40519cb0, + 0x40521cc7, + 0x40529ceb, + 0x40531d03, + 0x40539d16, + 0x40541d2b, + 0x40549d4e, + 0x40551d5c, + 0x40559d79, + 0x40561d86, + 0x40569d9f, + 0x40571db7, + 0x40579dca, + 0x40581ddf, + 0x40589e06, + 0x40591e35, + 0x40599e62, + 0x405a1e76, + 0x405a9e86, + 0x405b1e9e, + 0x405b9eaf, + 0x405c1ec2, + 0x405c9ee3, + 0x405d1ef0, + 0x405d9f07, + 0x405e1f27, 0x405e8a95, - 0x405f1ee1, - 0x405f9eee, - 0x40601efc, - 0x40609f1e, - 0x40611f46, - 0x40619f5b, - 0x40621f72, - 0x40629f83, - 0x40631f94, - 0x40639fa9, - 0x40641fc0, - 0x40649fd1, - 0x40651fec, - 0x4065a003, - 0x4066201b, - 0x4066a045, - 0x40672070, - 0x4067a091, - 0x406820a4, - 0x4068a0c5, - 0x406920f7, - 0x4069a125, - 0x406a2146, - 0x406aa166, - 0x406b22ee, - 0x406ba311, - 0x406c2327, - 0x406ca553, - 0x406d2582, - 0x406da5aa, - 0x406e25c3, - 0x406ea5db, - 0x406f25fa, - 0x406fa60f, - 0x40702622, - 0x4070a63f, + 0x405f1f48, + 0x405f9f55, + 0x40601f63, + 0x40609f85, + 0x40611fad, + 0x40619fc2, + 0x40621fd9, + 0x40629fea, + 0x40631ffb, + 0x4063a010, + 0x40642027, + 0x4064a053, + 0x4065206e, + 0x4065a085, + 0x4066209d, + 0x4066a0c7, + 0x406720f2, + 0x4067a113, + 0x40682126, + 0x4068a147, + 0x40692179, + 0x4069a1a7, + 0x406a21c8, + 0x406aa1e8, + 0x406b2370, + 0x406ba393, + 0x406c23a9, + 0x406ca60b, + 0x406d263a, + 0x406da662, + 0x406e2690, + 0x406ea6a8, + 0x406f26c7, + 0x406fa6dc, + 0x407026ef, + 0x4070a70c, 0x40710800, - 0x4071a651, - 0x40722664, - 0x4072a67d, - 0x40732695, + 0x4071a71e, + 0x40722731, + 0x4072a74a, + 0x40732762, 0x4073936d, - 0x407426a9, - 0x4074a6c3, - 0x407526d4, - 0x4075a6e8, - 0x407626f6, + 0x40742776, + 0x4074a790, + 0x407527a1, + 0x4075a7b5, + 0x407627c3, 0x407691aa, - 0x4077271b, - 0x4077a73d, - 0x40782758, - 0x4078a791, - 0x407927a8, - 0x4079a7be, - 0x407a27ca, - 0x407aa7dd, - 0x407b27f2, - 0x407ba804, - 0x407c2819, - 0x407ca822, - 0x407d20e0, - 0x407d9c29, - 0x407e276d, - 0x407e9dd3, - 0x407f1a4d, - 0x407f986d, - 0x40801c00, - 0x40809a75, - 0x40811cab, - 0x40819bda, - 0x41f42219, - 0x41f922ab, - 0x41fe219e, - 0x41fea37a, - 0x41ff246b, - 0x42032232, - 0x42082254, - 0x4208a290, - 0x42092182, - 0x4209a2ca, - 0x420a21d9, - 0x420aa1b9, - 0x420b21f9, - 0x420ba272, - 0x420c2487, - 0x420ca347, - 0x420d2361, - 0x420da398, - 0x421223b2, - 0x4217244e, - 0x4217a3f4, - 0x421c2416, - 0x421f23d1, - 0x4221249e, - 0x42262431, - 0x422b2537, - 0x422ba500, - 0x422c251f, - 0x422ca4da, - 0x422d24b9, + 0x407727e8, + 0x4077a80a, + 0x40782825, + 0x4078a85e, + 0x40792875, + 0x4079a88b, + 0x407a2897, + 0x407aa8aa, + 0x407b28bf, + 0x407ba8d1, + 0x407c28e6, + 0x407ca8ef, + 0x407d2162, + 0x407d9c57, + 0x407e283a, + 0x407e9e16, + 0x407f1a67, + 0x407f9887, + 0x40801c2e, + 0x40809a8f, + 0x40811cd9, + 0x40819c08, + 0x4082267b, + 0x4082986d, + 0x40831df1, + 0x4083a038, + 0x40841aa3, + 0x40849e4e, + 0x40851ed3, + 0x41f4229b, + 0x41f9232d, + 0x41fe2220, + 0x41fea3fc, + 0x41ff24ed, + 0x420322b4, + 0x420822d6, + 0x4208a312, + 0x42092204, + 0x4209a34c, + 0x420a225b, + 0x420aa23b, + 0x420b227b, + 0x420ba2f4, + 0x420c2509, + 0x420ca3c9, + 0x420d23e3, + 0x420da41a, + 0x42122434, + 0x421724d0, + 0x4217a476, + 0x421c2498, + 0x421f2453, + 0x42212520, + 0x422624b3, + 0x422b25ef, + 0x422ba59d, + 0x422c25d7, + 0x422ca55c, + 0x422d253b, + 0x422da5bc, + 0x422e2582, 0x4432072b, 0x4432873a, 0x44330746, @@ -786,69 +795,69 @@ Pod::Spec.new do |s| 0x4c3d136d, 0x4c3d937c, 0x4c3e1389, - 0x50322a9b, - 0x5032aaaa, - 0x50332ab5, - 0x5033aac5, - 0x50342ade, - 0x5034aaf8, - 0x50352b06, - 0x5035ab1c, - 0x50362b2e, - 0x5036ab44, - 0x50372b5d, - 0x5037ab70, - 0x50382b88, - 0x5038ab99, - 0x50392bae, - 0x5039abc2, - 0x503a2be2, - 0x503aabf8, - 0x503b2c10, - 0x503bac22, - 0x503c2c3e, - 0x503cac55, - 0x503d2c6e, - 0x503dac84, - 0x503e2c91, - 0x503eaca7, - 0x503f2cb9, + 0x50322b68, + 0x5032ab77, + 0x50332b82, + 0x5033ab92, + 0x50342bab, + 0x5034abc5, + 0x50352bd3, + 0x5035abe9, + 0x50362bfb, + 0x5036ac11, + 0x50372c2a, + 0x5037ac3d, + 0x50382c55, + 0x5038ac66, + 0x50392c7b, + 0x5039ac8f, + 0x503a2caf, + 0x503aacc5, + 0x503b2cdd, + 0x503bacef, + 0x503c2d0b, + 0x503cad22, + 0x503d2d3b, + 0x503dad51, + 0x503e2d5e, + 0x503ead74, + 0x503f2d86, 0x503f8382, - 0x50402ccc, - 0x5040acdc, - 0x50412cf6, - 0x5041ad05, - 0x50422d1f, - 0x5042ad3c, - 0x50432d4c, - 0x5043ad5c, - 0x50442d6b, + 0x50402d99, + 0x5040ada9, + 0x50412dc3, + 0x5041add2, + 0x50422dec, + 0x5042ae09, + 0x50432e19, + 0x5043ae29, + 0x50442e38, 0x5044843f, - 0x50452d7f, - 0x5045ad9d, - 0x50462db0, - 0x5046adc6, - 0x50472dd8, - 0x5047aded, - 0x50482e13, - 0x5048ae21, - 0x50492e34, - 0x5049ae49, - 0x504a2e5f, - 0x504aae6f, - 0x504b2e8f, - 0x504baea2, - 0x504c2ec5, - 0x504caef3, - 0x504d2f05, - 0x504daf22, - 0x504e2f3d, - 0x504eaf59, - 0x504f2f6b, - 0x504faf82, - 0x50502f91, + 0x50452e4c, + 0x5045ae6a, + 0x50462e7d, + 0x5046ae93, + 0x50472ea5, + 0x5047aeba, + 0x50482ee0, + 0x5048aeee, + 0x50492f01, + 0x5049af16, + 0x504a2f2c, + 0x504aaf3c, + 0x504b2f5c, + 0x504baf6f, + 0x504c2f92, + 0x504cafc0, + 0x504d2fd2, + 0x504dafef, + 0x504e300a, + 0x504eb026, + 0x504f3038, + 0x504fb04f, + 0x5050305e, 0x505086ef, - 0x50512fa4, + 0x50513071, 0x58320ec9, 0x68320e8b, 0x68328c25, @@ -1209,6 +1218,7 @@ Pod::Spec.new do |s| "BAD_SSL_FILETYPE\\0" "BAD_WRITE_RETRY\\0" "BIO_NOT_SET\\0" + "BLOCK_CIPHER_PAD_IS_WRONG\\0" "BUFFERED_MESSAGES_ON_CIPHER_CHANGE\\0" "CA_DN_LENGTH_MISMATCH\\0" "CA_DN_TOO_LONG\\0" @@ -1233,6 +1243,7 @@ Pod::Spec.new do |s| "DOWNGRADE_DETECTED\\0" "DTLS_MESSAGE_TOO_BIG\\0" "DUPLICATE_EXTENSION\\0" + "DUPLICATE_KEY_SHARE\\0" "ECC_CERT_NOT_FOR_SIGNING\\0" "EMS_STATE_INCONSISTENT\\0" "ENCRYPTED_LENGTH_TOO_LONG\\0" @@ -1270,15 +1281,18 @@ Pod::Spec.new do |s| "NO_CERTIFICATE_SET\\0" "NO_CIPHERS_AVAILABLE\\0" "NO_CIPHERS_PASSED\\0" + "NO_CIPHERS_SPECIFIED\\0" "NO_CIPHER_MATCH\\0" "NO_COMMON_SIGNATURE_ALGORITHMS\\0" "NO_COMPRESSION_SPECIFIED\\0" + "NO_GROUPS_SPECIFIED\\0" "NO_METHOD_SPECIFIED\\0" "NO_P256_SUPPORT\\0" "NO_PRIVATE_KEY_ASSIGNED\\0" "NO_RENEGOTIATION\\0" "NO_REQUIRED_DIGEST\\0" "NO_SHARED_CIPHER\\0" + "NO_SHARED_GROUP\\0" "NULL_SSL_CTX\\0" "NULL_SSL_METHOD_PASSED\\0" "OLD_SESSION_CIPHER_NOT_RETURNED\\0" @@ -1294,6 +1308,7 @@ Pod::Spec.new do |s| "READ_TIMEOUT_EXPIRED\\0" "RECORD_LENGTH_MISMATCH\\0" "RECORD_TOO_LARGE\\0" + "RENEGOTIATION_EMS_MISMATCH\\0" "RENEGOTIATION_ENCODING_ERR\\0" "RENEGOTIATION_MISMATCH\\0" "REQUIRED_CIPHER_MISSING\\0" @@ -1338,12 +1353,15 @@ Pod::Spec.new do |s| "TLSV1_ALERT_USER_CANCELLED\\0" "TLSV1_BAD_CERTIFICATE_HASH_VALUE\\0" "TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE\\0" + "TLSV1_CERTIFICATE_REQUIRED\\0" "TLSV1_CERTIFICATE_UNOBTAINABLE\\0" + "TLSV1_UNKNOWN_PSK_IDENTITY\\0" "TLSV1_UNRECOGNIZED_NAME\\0" "TLSV1_UNSUPPORTED_EXTENSION\\0" "TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST\\0" "TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG\\0" "TOO_MANY_EMPTY_FRAGMENTS\\0" + "TOO_MANY_KEY_UPDATES\\0" "TOO_MANY_WARNING_ALERTS\\0" "UNABLE_TO_FIND_ECDH_PARAMETERS\\0" "UNEXPECTED_EXTENSION\\0" From b53e5d1f2b3a20299a2b65afffed6958a77ebfb6 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 18 Oct 2016 09:55:28 -0700 Subject: [PATCH 135/286] Create benchmark client and server for Node Express --- package.json | 12 +- .../performance/benchmark_client_express.js | 289 ++++++++++++++++++ src/node/performance/benchmark_server.js | 5 + .../performance/benchmark_server_express.js | 107 +++++++ src/node/performance/worker.js | 10 +- src/node/performance/worker_service_impl.js | 228 +++++++------- .../run_tests/performance/scenario_config.py | 61 +++- tools/run_tests/run_tests.py | 48 +++ 8 files changed, 645 insertions(+), 115 deletions(-) create mode 100644 src/node/performance/benchmark_client_express.js create mode 100644 src/node/performance/benchmark_server_express.js diff --git a/package.json b/package.json index 9afba318162..4827aac3985 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,9 @@ "coverage": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha src/node/test", "install": "./node_modules/.bin/node-pre-gyp install --fallback-to-build" }, - "bundledDependencies": ["node-pre-gyp"], + "bundledDependencies": [ + "node-pre-gyp" + ], "dependencies": { "arguejs": "^0.2.3", "lodash": "^3.9.3", @@ -34,6 +36,7 @@ }, "devDependencies": { "async": "^1.5.0", + "express": "^4.14.0", "google-auth-library": "^0.9.2", "google-protobuf": "^3.0.0", "istanbul": "^0.3.21", @@ -50,11 +53,10 @@ }, "binary": { "module_name": "grpc_node", - "module_path": "./build/Release/", + "module_path": "src/node/extension_binary", "host": "https://storage.googleapis.com/", "remote_path": "grpc-precompiled-binaries/node/{name}/v{version}", - "package_name": "{node_abi}-{platform}-{arch}.tar.gz", - "module_path": "src/node/extension_binary" + "package_name": "{node_abi}-{platform}-{arch}.tar.gz" }, "files": [ "LICENSE", @@ -75,7 +77,7 @@ ], "main": "src/node/index.js", "license": "BSD-3-Clause", - "jshintConfig" : { + "jshintConfig": { "bitwise": true, "curly": true, "eqeqeq": true, diff --git a/src/node/performance/benchmark_client_express.js b/src/node/performance/benchmark_client_express.js new file mode 100644 index 00000000000..15bc1132d29 --- /dev/null +++ b/src/node/performance/benchmark_client_express.js @@ -0,0 +1,289 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * Benchmark client module + * @module + */ + +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var util = require('util'); +var EventEmitter = require('events'); +var http = require('http'); +var https = require('https'); + +var async = require('async'); +var _ = require('lodash'); +var PoissonProcess = require('poisson-process'); +var Histogram = require('./histogram'); + +/** + * Convert a time difference, as returned by process.hrtime, to a number of + * nanoseconds. + * @param {Array.} time_diff The time diff, represented as + * [seconds, nanoseconds] + * @return {number} The total number of nanoseconds + */ +function timeDiffToNanos(time_diff) { + return time_diff[0] * 1e9 + time_diff[1]; +} + +function BenchmarkClient(server_targets, channels, histogram_params, + security_params) { + var options = { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + } + }; + var protocol; + if (security_params) { + var ca_path; + protocol = https; + this.request = _.bind(https.request, https); + if (security_params.use_test_ca) { + ca_path = path.join(__dirname, '../test/data/ca.pem'); + var ca_data = fs.readFileSync(ca_path); + options.ca = ca_data; + } + if (security_params.server_host_override) { + var host_override = security_params.server_host_override; + options.servername = host_override; + } + } else { + protocol = http; + } + + this.request = _.bind(protocol.request, protocol); + + this.client_options = []; + + for (var i = 0; i < channels; i++) { + var new_options = _.assign({host: server_targets[i]}, options); + new_options.agent = new protocol.Agent(new_options); + this.client_options[i] = new_options; + } + + this.histogram = new Histogram(histogram_params.resolution, + histogram_params.max_possible); + + this.running = false; + + this.pending_calls = 0; +} + +util.inherits(BenchmarkClient, EventEmitter); + +function startAllClients(client_options_list, outstanding_rpcs_per_channel, + makeCall, emitter) { + _.each(client_options_list, function(client_options) { + _.times(outstanding_rpcs_per_channel, function() { + makeCall(client_options); + }); + }); +} + +BenchmarkClient.prototype.startClosedLoop = function( + outstanding_rpcs_per_channel, rpc_type, req_size, resp_size, generic) { + var self = this; + + var options = {}; + + self.running = true; + + if (rpc_type == 'UNARY') { + options.path = '/serviceProto.BenchmarkService.service/unaryCall'; + } else { + self.emit('error', new Error('Unsupported rpc_type: ' + rpc_type)); + } + + if (generic) { + self.emit('error', new Error('Generic client not supported')); + } + + self.last_wall_time = process.hrtime(); + + var argument = { + response_size: resp_size, + payload: { + body: '0'.repeat(req_size) + } + }; + + function makeCall(client_options) { + if (self.running) { + self.pending_calls++; + var start_time = process.hrtime(); + var req = self.request(client_options, function(res) { + var res_data = ''; + res.on('data', function(data) { + res_data += data; + }); + res.on('end', function() { + JSON.parse(res_data); + var time_diff = process.hrtime(start_time); + self.histogram.add(timeDiffToNanos(time_diff)); + makeCall(client_options); + self.pending_calls--; + if ((!self.running) && self.pending_calls == 0) { + self.emit('finished'); + } + }); + }); + req.write(JSON.stringify(argument)); + req.end(); + req.on('error', function(error) { + self.emit('error', new Error('Client error: ' + error.message)); + self.running = false; + }); + } + } + + startAllClients(_.assign(options, self.client_options), + outstanding_rpcs_per_channel, makeCall, self); +}; + +BenchmarkClient.prototype.startPoisson = function( + outstanding_rpcs_per_channel, rpc_type, req_size, resp_size, offered_load, + generic) { + var self = this; + + var options = {}; + + self.running = true; + + if (rpc_type == 'UNARY') { + options.path = '/serviceProto.BenchmarkService.service/unaryCall'; + } else { + self.emit('error', new Error('Unsupported rpc_type: ' + rpc_type)); + } + + if (generic) { + self.emit('error', new Error('Generic client not supported')); + } + + self.last_wall_time = process.hrtime(); + + var argument = { + response_size: resp_size, + payload: { + body: '0'.repeat(req_size) + } + }; + + function makeCall(client_options, poisson) { + if (self.running) { + self.pending_calls++; + var start_time = process.hrtime(); + var req = self.request(client_options, function(res) { + var res_data = ''; + res.on('data', function(data) { + res_data += data; + }); + res.on('end', function() { + JSON.parse(res_data); + var time_diff = process.hrtime(start_time); + self.histogram.add(timeDiffToNanos(time_diff)); + self.pending_calls--; + if ((!self.running) && self.pending_calls == 0) { + self.emit('finished'); + } + }); + }); + req.write(JSON.stringify(argument)); + req.end(); + req.on('error', function(error) { + self.emit('error', new Error('Client error: ' + error.message)); + self.running = false; + }); + } else { + poisson.stop(); + } + } + + var averageIntervalMs = (1 / offered_load) * 1000; + + startAllClients(_.assign(options, self.client_options), + outstanding_rpcs_per_channel, function(opts){ + var p = PoissonProcess.create(averageIntervalMs, function() { + makeCall(opts, p); + }); + p.start(); + }, self); +}; + +/** + * Return curent statistics for the client. If reset is set, restart + * statistic collection. + * @param {boolean} reset Indicates that statistics should be reset + * @return {object} Client statistics + */ +BenchmarkClient.prototype.mark = function(reset) { + var wall_time_diff = process.hrtime(this.last_wall_time); + var histogram = this.histogram; + if (reset) { + this.last_wall_time = process.hrtime(); + this.histogram = new Histogram(histogram.resolution, + histogram.max_possible); + } + + return { + latencies: { + bucket: histogram.getContents(), + min_seen: histogram.minimum(), + max_seen: histogram.maximum(), + sum: histogram.getSum(), + sum_of_squares: histogram.sumOfSquares(), + count: histogram.getCount() + }, + time_elapsed: wall_time_diff[0] + wall_time_diff[1] / 1e9, + // Not sure how to measure these values + time_user: 0, + time_system: 0 + }; +}; + +/** + * Stop the clients. + * @param {function} callback Called when the clients have finished shutting + * down + */ +BenchmarkClient.prototype.stop = function(callback) { + this.running = false; + this.on('finished', callback); +}; + +module.exports = BenchmarkClient; diff --git a/src/node/performance/benchmark_server.js b/src/node/performance/benchmark_server.js index 70cee9979b1..6abde2e17af 100644 --- a/src/node/performance/benchmark_server.js +++ b/src/node/performance/benchmark_server.js @@ -40,6 +40,8 @@ var fs = require('fs'); var path = require('path'); +var EventEmitter = require('events'); +var util = require('util'); var genericService = require('./generic_service'); @@ -138,12 +140,15 @@ function BenchmarkServer(host, port, tls, generic, response_size) { this.server = server; } +util.inherits(BenchmarkServer, EventEmitter); + /** * Start the benchmark server. */ BenchmarkServer.prototype.start = function() { this.server.start(); this.last_wall_time = process.hrtime(); + this.emit('started'); }; /** diff --git a/src/node/performance/benchmark_server_express.js b/src/node/performance/benchmark_server_express.js new file mode 100644 index 00000000000..07a559f0226 --- /dev/null +++ b/src/node/performance/benchmark_server_express.js @@ -0,0 +1,107 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * Benchmark server module + * @module + */ + +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var http = require('http'); +var https = require('https'); +var EventEmitter = require('events'); +var util = require('util'); + +var express = require('express'); + +function unaryCall(req, res) { + var reqObj = JSON.parse(req.body); + var payload = {body: '0'.repeat(reqObj.response_size)}; + res.send(JSON.dumps(payload)); +} + +function BenchmarkServer(host, port, tls, generic, response_size) { + var app = express(); + app.put('/serviceProto.BenchmarkService.service/unaryCall', unaryCall); + this.input_host = host; + this.input_port = port; + if (tls) { + var credentials = {}; + var key_path = path.join(__dirname, '../test/data/server1.key'); + var pem_path = path.join(__dirname, '../test/data/server1.pem'); + + var key_data = fs.readFileSync(key_path); + var pem_data = fs.readFileSync(pem_path); + credentials['key'] = key_data; + credentials['cert'] = pem_data; + this.server = https.createServer(credentials, app); + } else { + this.server = http.createServer(app); + } +} + +util.inherits(BenchmarkServer, EventEmitter); + +BenchmarkServer.prototype.start = function() { + var self = this; + this.server.listen(this.input_port, this.input_hostname, function() { + this.last_wall_time = process.hrtime(); + self.emit('started'); + }); +}; + +BenchmarkServer.prototype.getPort = function() { + return this.server.address().port; +}; + +BenchmarkServer.prototype.mark = function(reset) { + var wall_time_diff = process.hrtime(this.last_wall_time); + if (reset) { + this.last_wall_time = process.hrtime(); + } + return { + time_elapsed: wall_time_diff[0] + wall_time_diff[1] / 1e9, + // Not sure how to measure these values + time_user: 0, + time_system: 0 + }; +}; + +BenchmarkServer.prototype.stop = function(callback) { + this.server.close(callback); +}; + +module.exports = BenchmarkServer; diff --git a/src/node/performance/worker.js b/src/node/performance/worker.js index 7ef9b84fe76..030bf7d7ba0 100644 --- a/src/node/performance/worker.js +++ b/src/node/performance/worker.js @@ -34,18 +34,18 @@ 'use strict'; var console = require('console'); -var worker_service_impl = require('./worker_service_impl'); +var WorkerServiceImpl = require('./worker_service_impl'); var grpc = require('../../../'); var serviceProto = grpc.load({ root: __dirname + '/../../..', file: 'src/proto/grpc/testing/services.proto'}).grpc.testing; -function runServer(port) { +function runServer(port, benchmark_impl) { var server_creds = grpc.ServerCredentials.createInsecure(); var server = new grpc.Server(); server.addProtoService(serviceProto.WorkerService.service, - worker_service_impl); + new WorkerServiceImpl(benchmark_impl, server)); var address = '0.0.0.0:' + port; server.bind(address, server_creds); server.start(); @@ -57,9 +57,9 @@ if (require.main === module) { Error.stackTraceLimit = Infinity; var parseArgs = require('minimist'); var argv = parseArgs(process.argv, { - string: ['driver_port'] + string: ['driver_port', 'benchmark_impl'] }); - runServer(argv.driver_port); + runServer(argv.driver_port, argv.benchmark_impl); } exports.runServer = runServer; diff --git a/src/node/performance/worker_service_impl.js b/src/node/performance/worker_service_impl.js index 4b5cb8f9c21..73dcb7afad8 100644 --- a/src/node/performance/worker_service_impl.js +++ b/src/node/performance/worker_service_impl.js @@ -38,121 +38,141 @@ var console = require('console'); var BenchmarkClient = require('./benchmark_client'); var BenchmarkServer = require('./benchmark_server'); -exports.quitWorker = function quitWorker(call, callback) { - callback(null, {}); - process.exit(0); -} +module.exports = function WorkerServiceImpl(benchmark_impl, server) { + var BenchmarkClient; + var BenchmarkServer; + switch (benchmark_impl) { + case 'grpc': + BenchmarkClient = require('./benchmark_client'); + BenchmarkServer = require('./benchmark_server'); + break; + case 'express': + BenchmarkClient = require('./benchmark_client_express'); + BenchmarkServer = require('./benchmark_server_express'); + break; + default: + throw new Error('Unrecognized benchmark impl: ' + benchmark_impl); + } -exports.runClient = function runClient(call) { - var client; - call.on('data', function(request) { - var stats; - switch (request.argtype) { - case 'setup': - var setup = request.setup; - console.log('ClientConfig %j', setup); - client = new BenchmarkClient(setup.server_targets, - setup.client_channels, - setup.histogram_params, - setup.security_params); - client.on('error', function(error) { - call.emit('error', error); - }); - var req_size, resp_size, generic; - switch (setup.payload_config.payload) { - case 'bytebuf_params': - req_size = setup.payload_config.bytebuf_params.req_size; - resp_size = setup.payload_config.bytebuf_params.resp_size; - generic = true; + this.quitWorker = function quitWorker(call, callback) { + server.tryShutdown(function() { + callback(null, {}); + }); + }; + + this.runClient = function runClient(call) { + var client; + call.on('data', function(request) { + var stats; + switch (request.argtype) { + case 'setup': + var setup = request.setup; + console.log('ClientConfig %j', setup); + client = new BenchmarkClient(setup.server_targets, + setup.client_channels, + setup.histogram_params, + setup.security_params); + client.on('error', function(error) { + call.emit('error', error); + }); + var req_size, resp_size, generic; + switch (setup.payload_config.payload) { + case 'bytebuf_params': + req_size = setup.payload_config.bytebuf_params.req_size; + resp_size = setup.payload_config.bytebuf_params.resp_size; + generic = true; + break; + case 'simple_params': + req_size = setup.payload_config.simple_params.req_size; + resp_size = setup.payload_config.simple_params.resp_size; + generic = false; + break; + default: + call.emit('error', new Error('Unsupported PayloadConfig type' + + setup.payload_config.payload)); + } + switch (setup.load_params.load) { + case 'closed_loop': + client.startClosedLoop(setup.outstanding_rpcs_per_channel, + setup.rpc_type, req_size, resp_size, generic); + break; + case 'poisson': + client.startPoisson(setup.outstanding_rpcs_per_channel, + setup.rpc_type, req_size, resp_size, + setup.load_params.poisson.offered_load, generic); + break; + default: + call.emit('error', new Error('Unsupported LoadParams type' + + setup.load_params.load)); + } + stats = client.mark(); + call.write({ + stats: stats + }); break; - case 'simple_params': - req_size = setup.payload_config.simple_params.req_size; - resp_size = setup.payload_config.simple_params.resp_size; - generic = false; + case 'mark': + if (client) { + stats = client.mark(request.mark.reset); + call.write({ + stats: stats + }); + } else { + call.emit('error', new Error('Got Mark before ClientConfig')); + } break; default: - call.emit('error', new Error('Unsupported PayloadConfig type' + - setup.payload_config.payload)); + throw new Error('Nonexistent client argtype option: ' + request.argtype); } - switch (setup.load_params.load) { - case 'closed_loop': - client.startClosedLoop(setup.outstanding_rpcs_per_channel, - setup.rpc_type, req_size, resp_size, generic); + }); + call.on('end', function() { + client.stop(function() { + call.end(); + }); + }); + }; + + this.runServer = function runServer(call) { + var server; + call.on('data', function(request) { + var stats; + switch (request.argtype) { + case 'setup': + console.log('ServerConfig %j', request.setup); + server = new BenchmarkServer('[::]', request.setup.port, + request.setup.security_params); + server.start(); + server.on('started', function() { + stats = server.mark(); + call.write({ + stats: stats, + port: server.getPort() + }); + }); break; - case 'poisson': - client.startPoisson(setup.outstanding_rpcs_per_channel, - setup.rpc_type, req_size, resp_size, - setup.load_params.poisson.offered_load, generic); + case 'mark': + if (server) { + stats = server.mark(request.mark.reset); + call.write({ + stats: stats, + port: server.getPort(), + cores: 1 + }); + } else { + call.emit('error', new Error('Got Mark before ServerConfig')); + } break; default: - call.emit('error', new Error('Unsupported LoadParams type' + - setup.load_params.load)); + throw new Error('Nonexistent server argtype option'); } - stats = client.mark(); - call.write({ - stats: stats - }); - break; - case 'mark': - if (client) { - stats = client.mark(request.mark.reset); - call.write({ - stats: stats - }); - } else { - call.emit('error', new Error('Got Mark before ClientConfig')); - } - break; - default: - throw new Error('Nonexistent client argtype option: ' + request.argtype); - } - }); - call.on('end', function() { - client.stop(function() { - call.end(); }); - }); -}; - -exports.runServer = function runServer(call) { - var server; - call.on('data', function(request) { - var stats; - switch (request.argtype) { - case 'setup': - console.log('ServerConfig %j', request.setup); - server = new BenchmarkServer('[::]', request.setup.port, - request.setup.security_params); - server.start(); - stats = server.mark(); - call.write({ - stats: stats, - port: server.getPort() + call.on('end', function() { + server.stop(function() { + call.end(); }); - break; - case 'mark': - if (server) { - stats = server.mark(request.mark.reset); - call.write({ - stats: stats, - port: server.getPort(), - cores: 1 - }); - } else { - call.emit('error', new Error('Got Mark before ServerConfig')); - } - break; - default: - throw new Error('Nonexistent server argtype option'); - } - }); - call.on('end', function() { - server.stop(function() { - call.end(); }); - }); -}; + }; -exports.coreCount = function coreCount(call, callback) { - callback(null, {cores: os.cpus().length}); + this.coreCount = function coreCount(call, callback) { + callback(null, {cores: os.cpus().length}); + }; }; diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index 725ca299bd4..ea86c7a61b0 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -338,7 +338,8 @@ class NodeLanguage: self.safename = str(self) def worker_cmdline(self): - return ['tools/run_tests/performance/run_worker_node.sh'] + return ['tools/run_tests/performance/run_worker_node.sh', + '--benchmark_impl=grpc'] def worker_port_offset(self): return 200 @@ -636,11 +637,69 @@ class GoLanguage: def __str__(self): return 'go' +class NodeExpressLanguage: + + def __init__(self): + pass + self.safename = str(self) + + def worker_cmdline(self): + return ['tools/run_tests/performance/run_worker_node.sh', + '--benchmark_impl=express'] + + def worker_port_offset(self): + return 700 + + def scenarios(self): + # TODO(jtattermusch): make this scenario work + #yield _ping_pong_scenario( + # 'node_generic_async_streaming_ping_pong', rpc_type='STREAMING', + # client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + # use_generic_payload=True) + + # TODO(jtattermusch): make this scenario work + #yield _ping_pong_scenario( + # 'node_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', + # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') + + yield _ping_pong_scenario( + 'node_protobuf_unary_ping_pong', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + categories=[SCALABLE, SMOKETEST]) + + yield _ping_pong_scenario( + 'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async', + categories=[SCALABLE, SMOKETEST]) + + # TODO(jtattermusch): make this scenario work + #yield _ping_pong_scenario( + # 'node_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING', + # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + # unconstrained_client='async') + + # TODO(jtattermusch): make this scenario work + #yield _ping_pong_scenario( + # 'node_to_cpp_protobuf_async_unary_ping_pong', rpc_type='UNARY', + # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + # server_language='c++', server_core_limit=1, async_server_threads=1) + + # TODO(jtattermusch): make this scenario work + #yield _ping_pong_scenario( + # 'node_to_cpp_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', + # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + # server_language='c++', server_core_limit=1, async_server_threads=1) + + def __str__(self): + return 'node_express' + LANGUAGES = { 'c++' : CXXLanguage(), 'csharp' : CSharpLanguage(), 'node' : NodeLanguage(), + 'node_express': NodeExpressLanguage(), 'ruby' : RubyLanguage(), 'java' : JavaLanguage(), 'python' : PythonLanguage(), diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index dd070b1fe01..fd792001c15 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -825,6 +825,53 @@ class Sanity(object): def __str__(self): return 'sanity' +class NodeExpressLanguage(object): + """Dummy Node express test target to enable running express performance + benchmarks""" + + def __init__(self): + self.platform = platform_string() + + def configure(self, config, args): + self.config = config + self.args = args + _check_compiler(self.args.compiler, ['default', 'node0.12', + 'node4', 'node5', 'node6']) + if self.args.compiler == 'default': + self.node_version = '4' + else: + # Take off the word "node" + self.node_version = self.args.compiler[4:] + + def test_specs(self): + return [] + + def pre_build_steps(self): + if self.platform == 'windows': + return [['tools\\run_tests\\pre_build_node.bat']] + else: + return [['tools/run_tests/pre_build_node.sh', self.node_version]] + + def make_targets(self): + return [] + + def make_options(self): + return [] + + def build_steps(self): + return [] + + def post_tests_steps(self): + return [] + + def makefile_name(self): + return 'Makefile' + + def dockerfile_dir(self): + return 'tools/dockerfile/test/node_jessie_%s' % _docker_arch_suffix(self.args.arch) + + def __str__(self): + return 'node_express' # different configurations we can run under with open('tools/run_tests/configs.json') as f: @@ -835,6 +882,7 @@ _LANGUAGES = { 'c++': CLanguage('cxx', 'c++'), 'c': CLanguage('c', 'c'), 'node': NodeLanguage(), + 'node_express': NodeExpressLanguage(), 'php': PhpLanguage(), 'php7': Php7Language(), 'python': PythonLanguage(), From a4ead72a1238c864a29635a483298fbde5073bb9 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Tue, 18 Oct 2016 11:20:48 -0700 Subject: [PATCH 136/286] Use BoringSSL tag instead of commit# --- src/objective-c/BoringSSL.podspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/objective-c/BoringSSL.podspec b/src/objective-c/BoringSSL.podspec index b1093e973d8..47b5b1a2e7b 100644 --- a/src/objective-c/BoringSSL.podspec +++ b/src/objective-c/BoringSSL.podspec @@ -69,8 +69,8 @@ Pod::Spec.new do |s| s.source = { :git => 'https://boringssl.googlesource.com/boringssl', - # :tag => "version_for_cocoapods_#{version}", - :commit => '4fec04b48406111cb88fdd8d196253adc54f7a31', + :tag => "version_for_cocoapods_#{version}", + # :commit => '4fec04b48406111cb88fdd8d196253adc54f7a31', } name = 'openssl' From e4eb51f20cdb8d80cf872ca933945c0154369faf Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 18 Oct 2016 11:51:28 -0700 Subject: [PATCH 137/286] reorder params in Server --- include/grpc++/server.h | 14 +++++++------- src/cpp/server/server_builder.cc | 2 +- src/cpp/server/server_cc.cc | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 9c33b38ce05..d0a357aeacc 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -119,15 +119,15 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { /// Server constructors. To be used by \a ServerBuilder only. /// - /// \param sync_server_cqs The completion queues to use if the server is a - /// synchronous server (or a hybrid server). The server polls for new RPCs on - /// these queues - /// /// \param max_message_size Maximum message length that the channel can /// receive. /// /// \param args The channel args /// + /// \param sync_server_cqs The completion queues to use if the server is a + /// synchronous server (or a hybrid server). The server polls for new RPCs on + /// these queues + /// /// \param min_pollers The minimum number of polling threads per server /// completion queue (in param sync_server_cqs) to use for listening to /// incoming requests (used only in case of sync server) @@ -138,10 +138,10 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { /// /// \param sync_cq_timeout_msec The timeout to use when calling AsyncNext() on /// server completion queues passed via sync_server_cqs param. - Server(std::shared_ptr>> + Server(int max_message_size, ChannelArguments* args, + std::shared_ptr>> sync_server_cqs, - int max_message_size, ChannelArguments* args, int min_pollers, - int max_pollers, int sync_cq_timeout_msec); + int min_pollers, int max_pollers, int sync_cq_timeout_msec); /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the Server instance. diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 7ab41ca1f8c..f4e7733312d 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -236,7 +236,7 @@ std::unique_ptr ServerBuilder::BuildAndStart() { } std::unique_ptr server(new Server( - sync_server_cqs, max_receive_message_size_, &args, + max_receive_message_size_, &args, sync_server_cqs, sync_server_settings_.min_pollers, sync_server_settings_.max_pollers, sync_server_settings_.cq_timeout_msec)); diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 3352aee8221..da7de130886 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -352,10 +352,10 @@ class Server::SyncRequestThreadManager : public ThreadManager { static internal::GrpcLibraryInitializer g_gli_initializer; Server::Server( + int max_receive_message_size, ChannelArguments* args, std::shared_ptr>> sync_server_cqs, - int max_receive_message_size, ChannelArguments* args, int min_pollers, - int max_pollers, int sync_cq_timeout_msec) + int min_pollers, int max_pollers, int sync_cq_timeout_msec) : max_receive_message_size_(max_receive_message_size), sync_server_cqs_(sync_server_cqs), started_(false), From 3dc67018a0be747917c2d43a72bc072d2b7f2d00 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 18 Oct 2016 15:56:44 -0700 Subject: [PATCH 138/286] Fix issues with express benchmark and synchronize package.json with template --- package.json | 1 + src/node/performance/benchmark_client_express.js | 8 +++++--- src/node/performance/benchmark_server_express.js | 8 +++++--- src/node/performance/worker_service_impl.js | 2 +- templates/package.json.template | 2 ++ 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 4827aac3985..30b4b6787c2 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ }, "devDependencies": { "async": "^1.5.0", + "body-parser": "^1.15.2", "express": "^4.14.0", "google-auth-library": "^0.9.2", "google-protobuf": "^3.0.0", diff --git a/src/node/performance/benchmark_client_express.js b/src/node/performance/benchmark_client_express.js index 15bc1132d29..675eb5f2884 100644 --- a/src/node/performance/benchmark_client_express.js +++ b/src/node/performance/benchmark_client_express.js @@ -92,7 +92,9 @@ function BenchmarkClient(server_targets, channels, histogram_params, this.client_options = []; for (var i = 0; i < channels; i++) { - var new_options = _.assign({host: server_targets[i]}, options); + var host_port; + host_port = server_targets[i % server_targets.length].split(':') + var new_options = _.assign({hostname: host_port[0], port: +host_port[1]}, options); new_options.agent = new protocol.Agent(new_options); this.client_options[i] = new_options; } @@ -172,7 +174,7 @@ BenchmarkClient.prototype.startClosedLoop = function( } } - startAllClients(_.assign(options, self.client_options), + startAllClients(_.map(self.client_options, _.partial(_.assign, options)), outstanding_rpcs_per_channel, makeCall, self); }; @@ -236,7 +238,7 @@ BenchmarkClient.prototype.startPoisson = function( var averageIntervalMs = (1 / offered_load) * 1000; - startAllClients(_.assign(options, self.client_options), + startAllClients(_.map(self.client_options, _.partial(_.assign, options)), outstanding_rpcs_per_channel, function(opts){ var p = PoissonProcess.create(averageIntervalMs, function() { makeCall(opts, p); diff --git a/src/node/performance/benchmark_server_express.js b/src/node/performance/benchmark_server_express.js index 07a559f0226..065bcf660b6 100644 --- a/src/node/performance/benchmark_server_express.js +++ b/src/node/performance/benchmark_server_express.js @@ -46,15 +46,17 @@ var EventEmitter = require('events'); var util = require('util'); var express = require('express'); +var bodyParser = require('body-parser') function unaryCall(req, res) { - var reqObj = JSON.parse(req.body); + var reqObj = req.body; var payload = {body: '0'.repeat(reqObj.response_size)}; - res.send(JSON.dumps(payload)); + res.json(payload); } function BenchmarkServer(host, port, tls, generic, response_size) { var app = express(); + app.use(bodyParser.json()) app.put('/serviceProto.BenchmarkService.service/unaryCall', unaryCall); this.input_host = host; this.input_port = port; @@ -78,7 +80,7 @@ util.inherits(BenchmarkServer, EventEmitter); BenchmarkServer.prototype.start = function() { var self = this; this.server.listen(this.input_port, this.input_hostname, function() { - this.last_wall_time = process.hrtime(); + self.last_wall_time = process.hrtime(); self.emit('started'); }); }; diff --git a/src/node/performance/worker_service_impl.js b/src/node/performance/worker_service_impl.js index 73dcb7afad8..3f317f64294 100644 --- a/src/node/performance/worker_service_impl.js +++ b/src/node/performance/worker_service_impl.js @@ -140,7 +140,6 @@ module.exports = function WorkerServiceImpl(benchmark_impl, server) { console.log('ServerConfig %j', request.setup); server = new BenchmarkServer('[::]', request.setup.port, request.setup.security_params); - server.start(); server.on('started', function() { stats = server.mark(); call.write({ @@ -148,6 +147,7 @@ module.exports = function WorkerServiceImpl(benchmark_impl, server) { port: server.getPort() }); }); + server.start(); break; case 'mark': if (server) { diff --git a/templates/package.json.template b/templates/package.json.template index e9596d4d4cb..2b3d32ec994 100644 --- a/templates/package.json.template +++ b/templates/package.json.template @@ -36,6 +36,8 @@ }, "devDependencies": { "async": "^1.5.0", + "body-parser": "^1.15.2", + "express": "^4.14.0", "google-auth-library": "^0.9.2", "google-protobuf": "^3.0.0", "istanbul": "^0.3.21", From 2f1d8708e52614ec4b221c710801ca77d3df18d3 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 18 Oct 2016 16:09:26 -0700 Subject: [PATCH 139/286] Header fixes --- include/grpc++/resource_quota.h | 6 +++--- src/core/lib/iomgr/resource_quota.h | 6 +++--- src/core/lib/iomgr/tcp_client_posix.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/grpc++/resource_quota.h b/include/grpc++/resource_quota.h index e45fe989742..db5bc8e7be1 100644 --- a/include/grpc++/resource_quota.h +++ b/include/grpc++/resource_quota.h @@ -31,8 +31,8 @@ * */ -#ifndef GRPCXX_BUFFER_POOL_H -#define GRPCXX_BUFFER_POOL_H +#ifndef GRPCXX_RESOURCE_QUOTA_H +#define GRPCXX_RESOURCE_QUOTA_H struct grpc_resource_quota; @@ -67,4 +67,4 @@ class ResourceQuota GRPC_FINAL { } // namespace grpc -#endif +#endif // GRPCXX_RESOURCE_QUOTA_H diff --git a/src/core/lib/iomgr/resource_quota.h b/src/core/lib/iomgr/resource_quota.h index 5c566e492c3..c4015b42cc4 100644 --- a/src/core/lib/iomgr/resource_quota.h +++ b/src/core/lib/iomgr/resource_quota.h @@ -31,8 +31,8 @@ * */ -#ifndef GRPC_CORE_LIB_IOMGR_BUFFER_POOL_H -#define GRPC_CORE_LIB_IOMGR_BUFFER_POOL_H +#ifndef GRPC_CORE_LIB_IOMGR_RESOURCE_QUOTA_H +#define GRPC_CORE_LIB_IOMGR_RESOURCE_QUOTA_H #include @@ -128,4 +128,4 @@ void grpc_resource_user_alloc_slices( grpc_resource_user_slice_allocator *slice_allocator, size_t length, size_t count, gpr_slice_buffer *dest); -#endif /* GRPC_CORE_LIB_IOMGR_BUFFER_POOL_H */ +#endif /* GRPC_CORE_LIB_IOMGR_RESOURCE_QUOTA_H */ diff --git a/src/core/lib/iomgr/tcp_client_posix.h b/src/core/lib/iomgr/tcp_client_posix.h index d8108b83599..efc5fcd5bba 100644 --- a/src/core/lib/iomgr/tcp_client_posix.h +++ b/src/core/lib/iomgr/tcp_client_posix.h @@ -42,4 +42,4 @@ grpc_endpoint *grpc_tcp_client_create_from_fd( grpc_exec_ctx *exec_ctx, grpc_fd *fd, const grpc_channel_args *channel_args, const char *addr_str); -#endif +#endif /* GRPC_CORE_LIB_IOMGR_TCP_CLIENT_POSIX_H */ From afcc8752f3a39d67831d03a810e85150765fa587 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 18 Oct 2016 16:10:06 -0700 Subject: [PATCH 140/286] clang-format --- .../server/insecure/server_chttp2_posix.c | 4 +- src/core/lib/iomgr/endpoint.h | 2 +- src/core/lib/iomgr/endpoint_pair.h | 3 +- src/core/lib/iomgr/endpoint_pair_posix.c | 3 +- src/core/lib/iomgr/resource_quota.c | 131 +++++++++++------- .../security/credentials/jwt/jwt_verifier.c | 6 +- .../credentials/oauth2/oauth2_credentials.c | 7 +- .../lib/security/transport/secure_endpoint.c | 3 +- src/cpp/common/channel_arguments.cc | 3 +- src/cpp/server/server_builder.cc | 2 +- test/core/bad_client/bad_client.c | 3 +- test/core/end2end/fuzzers/client_fuzzer.c | 3 +- test/core/end2end/fuzzers/server_fuzzer.c | 3 +- .../end2end/tests/resource_quota_server.c | 3 +- test/core/http/httpcli_test.c | 4 +- test/core/http/httpscli_test.c | 4 +- test/core/iomgr/endpoint_pair_test.c | 3 +- test/core/util/passthru_endpoint.c | 5 +- test/cpp/qps/driver.cc | 6 +- 19 files changed, 120 insertions(+), 78 deletions(-) diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c index b760fea2faa..aa2ecf5743d 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c @@ -57,8 +57,8 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server *server, char *name; gpr_asprintf(&name, "fd:%d", fd); - grpc_resource_quota *resource_quota = - grpc_resource_quota_from_channel_args(grpc_server_get_channel_args(server)); + grpc_resource_quota *resource_quota = grpc_resource_quota_from_channel_args( + grpc_server_get_channel_args(server)); grpc_endpoint *server_endpoint = grpc_tcp_create(grpc_fd_create(fd, name), resource_quota, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, name); diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h index 819fcdda1aa..0ac5486ff57 100644 --- a/src/core/lib/iomgr/endpoint.h +++ b/src/core/lib/iomgr/endpoint.h @@ -37,9 +37,9 @@ #include #include #include -#include "src/core/lib/iomgr/resource_quota.h" #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" +#include "src/core/lib/iomgr/resource_quota.h" /* An endpoint caps a streaming channel between two communicating processes. Examples may be: a tcp socket, , or some shared memory. */ diff --git a/src/core/lib/iomgr/endpoint_pair.h b/src/core/lib/iomgr/endpoint_pair.h index 27c17a0e970..f9de0c715ec 100644 --- a/src/core/lib/iomgr/endpoint_pair.h +++ b/src/core/lib/iomgr/endpoint_pair.h @@ -42,6 +42,7 @@ typedef struct { } grpc_endpoint_pair; grpc_endpoint_pair grpc_iomgr_create_endpoint_pair( - const char *name, grpc_resource_quota *resource_quota, size_t read_slice_size); + const char *name, grpc_resource_quota *resource_quota, + size_t read_slice_size); #endif /* GRPC_CORE_LIB_IOMGR_ENDPOINT_PAIR_H */ diff --git a/src/core/lib/iomgr/endpoint_pair_posix.c b/src/core/lib/iomgr/endpoint_pair_posix.c index c1437bcf179..fc80064a60b 100644 --- a/src/core/lib/iomgr/endpoint_pair_posix.c +++ b/src/core/lib/iomgr/endpoint_pair_posix.c @@ -63,7 +63,8 @@ static void create_sockets(int sv[2]) { } grpc_endpoint_pair grpc_iomgr_create_endpoint_pair( - const char *name, grpc_resource_quota *resource_quota, size_t read_slice_size) { + const char *name, grpc_resource_quota *resource_quota, + size_t read_slice_size) { int sv[2]; grpc_endpoint_pair p; char *final_name; diff --git a/src/core/lib/iomgr/resource_quota.c b/src/core/lib/iomgr/resource_quota.c index c4e6e5482af..89c795c0ec1 100644 --- a/src/core/lib/iomgr/resource_quota.c +++ b/src/core/lib/iomgr/resource_quota.c @@ -73,12 +73,14 @@ struct grpc_resource_quota { * list management */ -static void bulist_add_tail(grpc_resource_user *resource_user, grpc_bulist list) { +static void bulist_add_tail(grpc_resource_user *resource_user, + grpc_bulist list) { grpc_resource_quota *resource_quota = resource_user->resource_quota; grpc_resource_user **root = &resource_quota->roots[list]; if (*root == NULL) { *root = resource_user; - resource_user->links[list].next = resource_user->links[list].prev = resource_user; + resource_user->links[list].next = resource_user->links[list].prev = + resource_user; } else { resource_user->links[list].next = *root; resource_user->links[list].prev = (*root)->links[list].prev; @@ -87,12 +89,14 @@ static void bulist_add_tail(grpc_resource_user *resource_user, grpc_bulist list) } } -static void bulist_add_head(grpc_resource_user *resource_user, grpc_bulist list) { +static void bulist_add_head(grpc_resource_user *resource_user, + grpc_bulist list) { grpc_resource_quota *resource_quota = resource_user->resource_quota; grpc_resource_user **root = &resource_quota->roots[list]; if (*root == NULL) { *root = resource_user; - resource_user->links[list].next = resource_user->links[list].prev = resource_user; + resource_user->links[list].next = resource_user->links[list].prev = + resource_user; } else { resource_user->links[list].next = (*root)->links[list].next; resource_user->links[list].prev = *root; @@ -102,12 +106,13 @@ static void bulist_add_head(grpc_resource_user *resource_user, grpc_bulist list) } } -static bool bulist_empty(grpc_resource_quota *resource_quota, grpc_bulist list) { +static bool bulist_empty(grpc_resource_quota *resource_quota, + grpc_bulist list) { return resource_quota->roots[list] == NULL; } static grpc_resource_user *bulist_pop(grpc_resource_quota *resource_quota, - grpc_bulist list) { + grpc_bulist list) { grpc_resource_user **root = &resource_quota->roots[list]; grpc_resource_user *resource_user = *root; if (resource_user == NULL) { @@ -145,10 +150,12 @@ static void bulist_remove(grpc_resource_user *resource_user, grpc_bulist list) { * buffer pool state machine */ -static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota); -static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota); -static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota, - bool destructive); +static bool bpalloc(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota); +static bool bpscavenge(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota); +static bool bpreclaim(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota, bool destructive); static void bpstep(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { grpc_resource_quota *resource_quota = bp; @@ -168,12 +175,13 @@ static void bpstep_sched(grpc_exec_ctx *exec_ctx, resource_quota->step_scheduled = true; grpc_resource_quota_internal_ref(resource_quota); grpc_combiner_execute_finally(exec_ctx, resource_quota->combiner, - &resource_quota->bpstep_closure, GRPC_ERROR_NONE, - false); + &resource_quota->bpstep_closure, + GRPC_ERROR_NONE, false); } /* returns true if all allocations are completed */ -static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota) { +static bool bpalloc(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota) { grpc_resource_user *resource_user; while ((resource_user = bulist_pop(resource_quota, GRPC_BULIST_AWAITING_ALLOCATION))) { @@ -207,7 +215,8 @@ static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota } /* returns true if any memory could be reclaimed from buffers */ -static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota) { +static bool bpscavenge(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota) { grpc_resource_user *resource_user; while ((resource_user = bulist_pop(resource_quota, GRPC_BULIST_NON_EMPTY_FREE_POOL))) { @@ -232,16 +241,17 @@ static bool bpscavenge(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_qu } /* returns true if reclaimation is proceeding */ -static bool bpreclaim(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota, - bool destructive) { +static bool bpreclaim(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota, bool destructive) { if (resource_quota->reclaiming) return true; grpc_bulist list = destructive ? GRPC_BULIST_RECLAIMER_DESTRUCTIVE : GRPC_BULIST_RECLAIMER_BENIGN; grpc_resource_user *resource_user = bulist_pop(resource_quota, list); if (resource_user == NULL) return false; if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: initiate %s reclaimation", resource_quota->name, - resource_user->name, destructive ? "destructive" : "benign"); + gpr_log(GPR_DEBUG, "BP %s %s: initiate %s reclaimation", + resource_quota->name, resource_user->name, + destructive ? "destructive" : "benign"); } resource_quota->reclaiming = true; grpc_resource_quota_internal_ref(resource_quota); @@ -284,7 +294,8 @@ static void bu_slice_unref(void *p) { } } -static gpr_slice bu_slice_create(grpc_resource_user *resource_user, size_t size) { +static gpr_slice bu_slice_create(grpc_resource_user *resource_user, + size_t size) { bu_slice_refcount *rc = gpr_malloc(sizeof(bu_slice_refcount) + size); rc->base.ref = bu_slice_ref; rc->base.unref = bu_slice_unref; @@ -304,7 +315,8 @@ static gpr_slice bu_slice_create(grpc_resource_user *resource_user, size_t size) static void bu_allocate(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { grpc_resource_user *resource_user = bu; - if (bulist_empty(resource_user->resource_quota, GRPC_BULIST_AWAITING_ALLOCATION)) { + if (bulist_empty(resource_user->resource_quota, + GRPC_BULIST_AWAITING_ALLOCATION)) { bpstep_sched(exec_ctx, resource_user->resource_quota); } bulist_add_tail(resource_user, GRPC_BULIST_AWAITING_ALLOCATION); @@ -315,7 +327,8 @@ static void bu_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, grpc_resource_user *resource_user = bu; if (!bulist_empty(resource_user->resource_quota, GRPC_BULIST_AWAITING_ALLOCATION) && - bulist_empty(resource_user->resource_quota, GRPC_BULIST_NON_EMPTY_FREE_POOL)) { + bulist_empty(resource_user->resource_quota, + GRPC_BULIST_NON_EMPTY_FREE_POOL)) { bpstep_sched(exec_ctx, resource_user->resource_quota); } bulist_add_tail(resource_user, GRPC_BULIST_NON_EMPTY_FREE_POOL); @@ -326,8 +339,10 @@ static void bu_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, grpc_resource_user *resource_user = bu; if (!bulist_empty(resource_user->resource_quota, GRPC_BULIST_AWAITING_ALLOCATION) && - bulist_empty(resource_user->resource_quota, GRPC_BULIST_NON_EMPTY_FREE_POOL) && - bulist_empty(resource_user->resource_quota, GRPC_BULIST_RECLAIMER_BENIGN)) { + bulist_empty(resource_user->resource_quota, + GRPC_BULIST_NON_EMPTY_FREE_POOL) && + bulist_empty(resource_user->resource_quota, + GRPC_BULIST_RECLAIMER_BENIGN)) { bpstep_sched(exec_ctx, resource_user->resource_quota); } bulist_add_tail(resource_user, GRPC_BULIST_RECLAIMER_BENIGN); @@ -338,8 +353,10 @@ static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, grpc_resource_user *resource_user = bu; if (!bulist_empty(resource_user->resource_quota, GRPC_BULIST_AWAITING_ALLOCATION) && - bulist_empty(resource_user->resource_quota, GRPC_BULIST_NON_EMPTY_FREE_POOL) && - bulist_empty(resource_user->resource_quota, GRPC_BULIST_RECLAIMER_BENIGN) && + bulist_empty(resource_user->resource_quota, + GRPC_BULIST_NON_EMPTY_FREE_POOL) && + bulist_empty(resource_user->resource_quota, + GRPC_BULIST_RECLAIMER_BENIGN) && bulist_empty(resource_user->resource_quota, GRPC_BULIST_RECLAIMER_DESTRUCTIVE)) { bpstep_sched(exec_ctx, resource_user->resource_quota); @@ -371,9 +388,9 @@ static void bu_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, grpc_resource_user_slice_allocator *slice_allocator = ts; if (error == GRPC_ERROR_NONE) { for (size_t i = 0; i < slice_allocator->count; i++) { - gpr_slice_buffer_add_indexed(slice_allocator->dest, - bu_slice_create(slice_allocator->resource_user, - slice_allocator->length)); + gpr_slice_buffer_add_indexed( + slice_allocator->dest, bu_slice_create(slice_allocator->resource_user, + slice_allocator->length)); } } grpc_closure_run(exec_ctx, &slice_allocator->on_done, GRPC_ERROR_REF(error)); @@ -393,7 +410,8 @@ static void bp_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { if (delta < 0 && a->resource_quota->free_pool < 0) { bpstep_sched(exec_ctx, a->resource_quota); } else if (delta > 0 && - !bulist_empty(a->resource_quota, GRPC_BULIST_AWAITING_ALLOCATION)) { + !bulist_empty(a->resource_quota, + GRPC_BULIST_AWAITING_ALLOCATION)) { bpstep_sched(exec_ctx, a->resource_quota); } grpc_resource_quota_internal_unref(exec_ctx, a->resource_quota); @@ -436,7 +454,7 @@ grpc_resource_quota *grpc_resource_quota_create(const char *name) { } void grpc_resource_quota_internal_unref(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota) { + grpc_resource_quota *resource_quota) { if (gpr_unref(&resource_quota->refs)) { grpc_combiner_destroy(exec_ctx, resource_quota->combiner); gpr_free(resource_quota->name); @@ -450,7 +468,8 @@ void grpc_resource_quota_unref(grpc_resource_quota *resource_quota) { grpc_exec_ctx_finish(&exec_ctx); } -grpc_resource_quota *grpc_resource_quota_internal_ref(grpc_resource_quota *resource_quota) { +grpc_resource_quota *grpc_resource_quota_internal_ref( + grpc_resource_quota *resource_quota) { gpr_ref(&resource_quota->refs); return resource_quota; } @@ -459,7 +478,8 @@ void grpc_resource_quota_ref(grpc_resource_quota *resource_quota) { grpc_resource_quota_internal_ref(resource_quota); } -void grpc_resource_quota_resize(grpc_resource_quota *resource_quota, size_t size) { +void grpc_resource_quota_resize(grpc_resource_quota *resource_quota, + size_t size) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; bp_resize_args *a = gpr_malloc(sizeof(*a)); a->resource_quota = grpc_resource_quota_internal_ref(resource_quota); @@ -508,16 +528,20 @@ const grpc_arg_pointer_vtable *grpc_resource_quota_arg_vtable(void) { */ void grpc_resource_user_init(grpc_resource_user *resource_user, - grpc_resource_quota *resource_quota, const char *name) { - resource_user->resource_quota = grpc_resource_quota_internal_ref(resource_quota); - grpc_closure_init(&resource_user->allocate_closure, &bu_allocate, resource_user); + grpc_resource_quota *resource_quota, + const char *name) { + resource_user->resource_quota = + grpc_resource_quota_internal_ref(resource_quota); + grpc_closure_init(&resource_user->allocate_closure, &bu_allocate, + resource_user); grpc_closure_init(&resource_user->add_to_free_pool_closure, &bu_add_to_free_pool, resource_user); grpc_closure_init(&resource_user->post_reclaimer_closure[0], &bu_post_benign_reclaimer, resource_user); grpc_closure_init(&resource_user->post_reclaimer_closure[1], &bu_post_destructive_reclaimer, resource_user); - grpc_closure_init(&resource_user->destroy_closure, &bu_destroy, resource_user); + grpc_closure_init(&resource_user->destroy_closure, &bu_destroy, + resource_user); gpr_mu_init(&resource_user->mu); resource_user->allocated = 0; resource_user->free_pool = 0; @@ -542,8 +566,8 @@ void grpc_resource_user_init(grpc_resource_user *resource_user, } void grpc_resource_user_shutdown(grpc_exec_ctx *exec_ctx, - grpc_resource_user *resource_user, - grpc_closure *on_done) { + grpc_resource_user *resource_user, + grpc_closure *on_done) { gpr_mu_lock(&resource_user->mu); GPR_ASSERT(gpr_atm_no_barrier_load(&resource_user->on_done_destroy_closure) == 0); @@ -558,7 +582,7 @@ void grpc_resource_user_shutdown(grpc_exec_ctx *exec_ctx, } void grpc_resource_user_destroy(grpc_exec_ctx *exec_ctx, - grpc_resource_user *resource_user) { + grpc_resource_user *resource_user) { #ifndef NDEBUG gpr_free(resource_user->asan_canary); #endif @@ -568,8 +592,8 @@ void grpc_resource_user_destroy(grpc_exec_ctx *exec_ctx, } void grpc_resource_user_alloc(grpc_exec_ctx *exec_ctx, - grpc_resource_user *resource_user, size_t size, - grpc_closure *optional_on_done) { + grpc_resource_user *resource_user, size_t size, + grpc_closure *optional_on_done) { gpr_mu_lock(&resource_user->mu); grpc_closure *on_done_destroy = (grpc_closure *)gpr_atm_no_barrier_load( &resource_user->on_done_destroy_closure); @@ -609,7 +633,7 @@ void grpc_resource_user_alloc(grpc_exec_ctx *exec_ctx, } void grpc_resource_user_free(grpc_exec_ctx *exec_ctx, - grpc_resource_user *resource_user, size_t size) { + grpc_resource_user *resource_user, size_t size) { gpr_mu_lock(&resource_user->mu); GPR_ASSERT(resource_user->allocated >= (int64_t)size); bool was_zero_or_negative = resource_user->free_pool <= 0; @@ -640,8 +664,9 @@ void grpc_resource_user_free(grpc_exec_ctx *exec_ctx, } void grpc_resource_user_post_reclaimer(grpc_exec_ctx *exec_ctx, - grpc_resource_user *resource_user, - bool destructive, grpc_closure *closure) { + grpc_resource_user *resource_user, + bool destructive, + grpc_closure *closure) { if (gpr_atm_acq_load(&resource_user->on_done_destroy_closure) == 0) { GPR_ASSERT(resource_user->reclaimers[destructive] == NULL); resource_user->reclaimers[destructive] = closure; @@ -654,14 +679,15 @@ void grpc_resource_user_post_reclaimer(grpc_exec_ctx *exec_ctx, } void grpc_resource_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, - grpc_resource_user *resource_user) { + grpc_resource_user *resource_user) { if (grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, "BP %s %s: reclaimation complete", resource_user->resource_quota->name, resource_user->name); } - grpc_combiner_execute(exec_ctx, resource_user->resource_quota->combiner, - &resource_user->resource_quota->bpreclaimation_done_closure, - GRPC_ERROR_NONE, false); + grpc_combiner_execute( + exec_ctx, resource_user->resource_quota->combiner, + &resource_user->resource_quota->bpreclaimation_done_closure, + GRPC_ERROR_NONE, false); } void grpc_resource_user_slice_allocator_init( @@ -674,11 +700,12 @@ void grpc_resource_user_slice_allocator_init( } void grpc_resource_user_alloc_slices( - grpc_exec_ctx *exec_ctx, grpc_resource_user_slice_allocator *slice_allocator, - size_t length, size_t count, gpr_slice_buffer *dest) { + grpc_exec_ctx *exec_ctx, + grpc_resource_user_slice_allocator *slice_allocator, size_t length, + size_t count, gpr_slice_buffer *dest) { slice_allocator->length = length; slice_allocator->count = count; slice_allocator->dest = dest; - grpc_resource_user_alloc(exec_ctx, slice_allocator->resource_user, count * length, - &slice_allocator->on_allocated); + grpc_resource_user_alloc(exec_ctx, slice_allocator->resource_user, + count * length, &slice_allocator->on_allocated); } diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.c b/src/core/lib/security/credentials/jwt/jwt_verifier.c index 0339fd5d611..43eb6425153 100644 --- a/src/core/lib/security/credentials/jwt/jwt_verifier.c +++ b/src/core/lib/security/credentials/jwt/jwt_verifier.c @@ -660,7 +660,8 @@ static void on_openid_config_retrieved(grpc_exec_ctx *exec_ctx, void *user_data, /* TODO(ctiller): Carry the resource_quota in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_resource_quota *resource_quota = grpc_resource_quota_create("jwt_verifier"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("jwt_verifier"); grpc_httpcli_get( exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, resource_quota, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), @@ -772,7 +773,8 @@ static void retrieve_key_and_verify(grpc_exec_ctx *exec_ctx, /* TODO(ctiller): Carry the resource_quota in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_resource_quota *resource_quota = grpc_resource_quota_create("jwt_verifier"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("jwt_verifier"); grpc_httpcli_get( exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, resource_quota, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), diff --git a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c index 102831637bf..d980577c46a 100644 --- a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +++ b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c @@ -310,7 +310,8 @@ static void compute_engine_fetch_oauth2( /* TODO(ctiller): Carry the resource_quota in ctx and share it with the host channel. This would allow us to cancel an authentication query when under extreme memory pressure. */ - grpc_resource_quota *resource_quota = grpc_resource_quota_create("oauth2_credentials"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("oauth2_credentials"); grpc_httpcli_get(exec_ctx, httpcli_context, pollent, resource_quota, &request, deadline, grpc_closure_create(response_cb, metadata_req), &metadata_req->response); @@ -367,8 +368,8 @@ static void refresh_token_fetch_oauth2( extreme memory pressure. */ grpc_resource_quota *resource_quota = grpc_resource_quota_create("oauth2_credentials_refresh"); - grpc_httpcli_post(exec_ctx, httpcli_context, pollent, resource_quota, &request, - body, strlen(body), deadline, + grpc_httpcli_post(exec_ctx, httpcli_context, pollent, resource_quota, + &request, body, strlen(body), deadline, grpc_closure_create(response_cb, metadata_req), &metadata_req->response); grpc_resource_quota_internal_unref(exec_ctx, resource_quota); diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c index 9f842371715..3924997d31f 100644 --- a/src/core/lib/security/transport/secure_endpoint.c +++ b/src/core/lib/security/transport/secure_endpoint.c @@ -370,7 +370,8 @@ static grpc_workqueue *endpoint_get_workqueue(grpc_endpoint *secure_ep) { return grpc_endpoint_get_workqueue(ep->wrapped_ep); } -static grpc_resource_user *endpoint_get_resource_user(grpc_endpoint *secure_ep) { +static grpc_resource_user *endpoint_get_resource_user( + grpc_endpoint *secure_ep) { secure_endpoint *ep = (secure_endpoint *)secure_ep; return grpc_endpoint_get_resource_user(ep->wrapped_ep); } diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc index 6e84170d978..5462e0d72ab 100644 --- a/src/cpp/common/channel_arguments.cc +++ b/src/cpp/common/channel_arguments.cc @@ -114,7 +114,8 @@ void ChannelArguments::SetUserAgentPrefix( } } -void ChannelArguments::SetResourceQuota(const grpc::ResourceQuota& resource_quota) { +void ChannelArguments::SetResourceQuota( + const grpc::ResourceQuota& resource_quota) { SetPointerWithVtable(GRPC_ARG_BUFFER_POOL, resource_quota.c_resource_quota(), grpc_resource_quota_arg_vtable()); } diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index a4cf4063eee..68df1d11e1e 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -33,8 +33,8 @@ #include -#include #include +#include #include #include #include diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c index 8a4a17ea93b..a9638500b75 100644 --- a/test/core/bad_client/bad_client.c +++ b/test/core/bad_client/bad_client.c @@ -114,7 +114,8 @@ void grpc_run_bad_client_test( grpc_init(); /* Create endpoints */ - grpc_resource_quota *resource_quota = grpc_resource_quota_create("bad_client_test"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("bad_client_test"); sfd = grpc_iomgr_create_endpoint_pair("fixture", resource_quota, 65536); grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); diff --git a/test/core/end2end/fuzzers/client_fuzzer.c b/test/core/end2end/fuzzers/client_fuzzer.c index b57c8c95fd4..d104fe55e59 100644 --- a/test/core/end2end/fuzzers/client_fuzzer.c +++ b/test/core/end2end/fuzzers/client_fuzzer.c @@ -58,7 +58,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_init(); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resource_quota *resource_quota = grpc_resource_quota_create("client_fuzzer"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("client_fuzzer"); grpc_endpoint *mock_endpoint = grpc_mock_endpoint_create(discard_write, resource_quota); grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); diff --git a/test/core/end2end/fuzzers/server_fuzzer.c b/test/core/end2end/fuzzers/server_fuzzer.c index 58c2a9d4835..ae4c8e658d0 100644 --- a/test/core/end2end/fuzzers/server_fuzzer.c +++ b/test/core/end2end/fuzzers/server_fuzzer.c @@ -56,7 +56,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_init(); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resource_quota *resource_quota = grpc_resource_quota_create("server_fuzzer"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("server_fuzzer"); grpc_endpoint *mock_endpoint = grpc_mock_endpoint_create(discard_write, resource_quota); grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c index c658776cbaf..81850aea58f 100644 --- a/test/core/end2end/tests/resource_quota_server.c +++ b/test/core/end2end/tests/resource_quota_server.c @@ -108,7 +108,8 @@ static gpr_slice generate_random_slice() { } void resource_quota_server(grpc_end2end_test_config config) { - grpc_resource_quota *resource_quota = grpc_resource_quota_create("test_server"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("test_server"); grpc_resource_quota_resize(resource_quota, 5 * 1024 * 1024); #define NUM_CALLS 100 diff --git a/test/core/http/httpcli_test.c b/test/core/http/httpcli_test.c index 14318ae1847..3e312c1ddee 100644 --- a/test/core/http/httpcli_test.c +++ b/test/core/http/httpcli_test.c @@ -130,8 +130,8 @@ static void test_post(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); grpc_resource_quota *resource_quota = grpc_resource_quota_create("test_post"); - grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, resource_quota, &req, "hello", - 5, n_seconds_time(15), + grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, resource_quota, &req, + "hello", 5, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); gpr_mu_lock(g_mu); diff --git a/test/core/http/httpscli_test.c b/test/core/http/httpscli_test.c index 966d5e4062e..d06035149ef 100644 --- a/test/core/http/httpscli_test.c +++ b/test/core/http/httpscli_test.c @@ -132,8 +132,8 @@ static void test_post(int port) { grpc_http_response response; memset(&response, 0, sizeof(response)); grpc_resource_quota *resource_quota = grpc_resource_quota_create("test_post"); - grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, resource_quota, &req, "hello", - 5, n_seconds_time(15), + grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, resource_quota, &req, + "hello", 5, n_seconds_time(15), grpc_closure_create(on_finish, &response), &response); grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); gpr_mu_lock(g_mu); diff --git a/test/core/iomgr/endpoint_pair_test.c b/test/core/iomgr/endpoint_pair_test.c index 53fb865e4ba..2a257a7ceac 100644 --- a/test/core/iomgr/endpoint_pair_test.c +++ b/test/core/iomgr/endpoint_pair_test.c @@ -49,7 +49,8 @@ static grpc_endpoint_test_fixture create_fixture_endpoint_pair( size_t slice_size) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_endpoint_test_fixture f; - grpc_resource_quota *resource_quota = grpc_resource_quota_create("endpoint_pair_test"); + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("endpoint_pair_test"); grpc_endpoint_pair p = grpc_iomgr_create_endpoint_pair("test", resource_quota, slice_size); grpc_resource_quota_unref(resource_quota); diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index 85ed1c824ca..ee6ef7da601 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -143,7 +143,7 @@ static void me_really_destroy(grpc_exec_ctx *exec_ctx, void *ep, static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { half *m = (half *)ep; grpc_resource_user_shutdown(exec_ctx, &m->resource_user, - grpc_closure_create(me_really_destroy, m)); + grpc_closure_create(me_really_destroy, m)); } static char *me_get_peer(grpc_endpoint *ep) { @@ -170,7 +170,8 @@ static const grpc_endpoint_vtable vtable = { }; static void half_init(half *m, passthru_endpoint *parent, - grpc_resource_quota *resource_quota, const char *half_name) { + grpc_resource_quota *resource_quota, + const char *half_name) { m->base.vtable = &vtable; m->parent = parent; gpr_slice_buffer_init(&m->read_buffer); diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index 89739ad562b..a440341ccf4 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -170,8 +170,10 @@ static void postprocess_scenario_result(ScenarioResult* result) { failures += rrc.count(); } } - result->mutable_summary()->set_successful_requests_per_second(successes / time_estimate); - result->mutable_summary()->set_failed_requests_per_second(failures / time_estimate); + result->mutable_summary()->set_successful_requests_per_second( + successes / time_estimate); + result->mutable_summary()->set_failed_requests_per_second(failures / + time_estimate); } } From e2f696895f0e76514f2f3f1098a4d92acfbf477a Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 18 Oct 2016 16:12:55 -0700 Subject: [PATCH 141/286] Fixes for bad asserts --- test/core/end2end/tests/max_message_length.c | 1 - test/core/end2end/tests/network_status_change.c | 1 - 2 files changed, 2 deletions(-) diff --git a/test/core/end2end/tests/max_message_length.c b/test/core/end2end/tests/max_message_length.c index d27ccedb4e3..b02d7e023f7 100644 --- a/test/core/end2end/tests/max_message_length.c +++ b/test/core/end2end/tests/max_message_length.c @@ -367,7 +367,6 @@ static void test_max_message_length_on_response(grpc_end2end_test_config config, GPR_ASSERT(0 == strcmp(call_details.method, "/foo")); GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr:1234")); - GPR_ASSERT(was_cancelled == 0); GPR_ASSERT(status == GRPC_STATUS_INVALID_ARGUMENT); GPR_ASSERT(strcmp(details, diff --git a/test/core/end2end/tests/network_status_change.c b/test/core/end2end/tests/network_status_change.c index 1d4b6dbb18f..fe9c45f273d 100644 --- a/test/core/end2end/tests/network_status_change.c +++ b/test/core/end2end/tests/network_status_change.c @@ -213,7 +213,6 @@ static void test_invoke_network_status_change(grpc_end2end_test_config config) { GPR_ASSERT(status == GRPC_STATUS_UNAVAILABLE); GPR_ASSERT(0 == strcmp(call_details.method, "/foo")); GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr")); - GPR_ASSERT(was_cancelled == 0); gpr_free(details); grpc_metadata_array_destroy(&initial_metadata_recv); From 385c9b2f0540e8a6c278c00ad922e97ab749fd21 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 18 Oct 2016 16:26:38 -0700 Subject: [PATCH 142/286] Address code review comments --- include/grpc++/server.h | 2 +- include/grpc++/server_builder.h | 2 +- src/cpp/server/server_builder.cc | 5 ++--- src/cpp/server/server_cc.cc | 5 +---- src/cpp/thread_manager/thread_manager.cc | 5 ++--- src/cpp/thread_manager/thread_manager.h | 2 +- test/cpp/thread_manager/thread_manager_test.cc | 6 ++++-- 7 files changed, 12 insertions(+), 15 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index d0a357aeacc..fb04b88148e 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -212,7 +212,7 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { std::vector services_; bool has_generic_service_; - // Pointer to the c core's grpc server. + // Pointer to the wrapped grpc_server. grpc_server* server_; std::unique_ptr server_initializer_; diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index 607df74318f..c6bcf8b90a1 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -217,7 +217,7 @@ class ServerBuilder { SyncServerSettings sync_server_settings_; - /* List of completion queues added via AddCompletionQueue() method */ + // List of completion queues added via AddCompletionQueue() method std::vector cqs_; std::shared_ptr creds_; diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index f4e7733312d..9bf3221e6ac 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -116,7 +116,6 @@ ServerBuilder& ServerBuilder::SetSyncServerOption( case NUM_CQS: sync_server_settings_.num_cqs = val; break; - case MIN_POLLERS: sync_server_settings_.min_pollers = val; break; @@ -217,8 +216,8 @@ std::unique_ptr ServerBuilder::BuildAndStart() { // ServerBuilder's AddCompletionQueue() method (those completion queues // are in 'cqs_' member variable of ServerBuilder object) std::shared_ptr>> - sync_server_cqs( - new std::vector>()); + sync_server_cqs = std::make_shared< + std::vector>>(); if (has_sync_methods) { // This is a Sync server diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index da7de130886..809e74c95fe 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -312,10 +312,7 @@ class Server::SyncRequestThreadManager : public ThreadManager { if (!sync_methods_.empty()) { unknown_method_.reset(new RpcServiceMethod( "unknown", RpcMethod::BIDI_STREAMING, new UnknownMethodHandler)); - // Use of emplace_back with just constructor arguments is not accepted - // here by gcc-4.4 because it can't match the anonymous nullptr with a - // proper constructor implicitly. Construct the object and use push_back. - sync_methods_.push_back(SyncRequest(unknown_method_.get(), nullptr)); + sync_methods_.emplace_back(unknown_method_.get(), nullptr); } } diff --git a/src/cpp/thread_manager/thread_manager.cc b/src/cpp/thread_manager/thread_manager.cc index e2b32512f19..c4bf842fbb4 100644 --- a/src/cpp/thread_manager/thread_manager.cc +++ b/src/cpp/thread_manager/thread_manager.cc @@ -42,7 +42,7 @@ namespace grpc { ThreadManager::WorkerThread::WorkerThread(ThreadManager* thd_mgr) : thd_mgr_(thd_mgr), - thd_(new std::thread(&ThreadManager::WorkerThread::Run, this)) {} + thd_(&ThreadManager::WorkerThread::Run, this) {} void ThreadManager::WorkerThread::Run() { thd_mgr_->MainWorkLoop(); @@ -50,8 +50,7 @@ void ThreadManager::WorkerThread::Run() { } ThreadManager::WorkerThread::~WorkerThread() { - thd_->join(); - thd_.reset(); + thd_.join(); } ThreadManager::ThreadManager(int min_pollers, int max_pollers) diff --git a/src/cpp/thread_manager/thread_manager.h b/src/cpp/thread_manager/thread_manager.h index b667a645afb..1bb13a67dd9 100644 --- a/src/cpp/thread_manager/thread_manager.h +++ b/src/cpp/thread_manager/thread_manager.h @@ -114,7 +114,7 @@ class ThreadManager { void Run(); ThreadManager* thd_mgr_; - std::unique_ptr thd_; + grpc::thread thd_; }; // The main funtion in ThreadManager diff --git a/test/cpp/thread_manager/thread_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc index 990e2bab3f7..9265c2921ad 100644 --- a/test/cpp/thread_manager/thread_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -85,8 +85,10 @@ void ThreadManagerTest::DoWork(void *tag, bool ok) { gpr_log(GPR_DEBUG, "DoWork()"); } - // Simulate "doing work" by sleeping - std::this_thread::sleep_for(std::chrono::milliseconds(kDoWorkDurationMsec)); + gpr_timespec sleep_time = + gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), + gpr_time_from_millis(kDoWorkDurationMsec, GPR_TIMESPAN)); + gpr_sleep_until(sleep_time); } int main(int argc, char **argv) { From 21bca1e01729ef2ce5f8f15c7ee54a715fea2aba Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 18 Oct 2016 19:37:12 -0700 Subject: [PATCH 143/286] stress test framework design doc --- doc/images/stress_test_framework.png | Bin 0 -> 63366 bytes doc/stress_test_framework.md | 92 +++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 doc/images/stress_test_framework.png create mode 100644 doc/stress_test_framework.md diff --git a/doc/images/stress_test_framework.png b/doc/images/stress_test_framework.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8f95ba600474a85159c7405903188e2fc07f05 GIT binary patch literal 63366 zcmYg%1yGw!w03X{Qi=qpf?G-{t_6w|*Wg~DXmPjTP@uTGySsaFcXxN!n|}BHGyhC7 zlf0Ac9@}%CBO4?qBZi4ij1B+*FeSuA6aWBtDC|vuiVSbmO*afk%Lj>8sm?RqjL1e(q0Ng@G0c?UiV8FA=znLJZXo~? zOZ78a-I7rHoo^=S#!R^=^MN7Js<#&u(Li zCi7rPvZrZ{v_m@*cpP?Jeo=WmQ6u3TuU1^M1-)fzJB^^T3rTsUWO}%x;ltWu4MJ=* z*iT}hg;OPS4~)-h_}Cbt7Ay_FzS&=1%E{r0$~$MiUk>Bc`_M;s^9!#=Ss(3ax+F2c z2gU(CfYyB6!VC7f^JlxpgoJUCusgd_I7zjf1`~@|aAtmS|Ec*kPj4Gyav~ic}r6{xWmwbi1R{;yrmS!`% zf{}-o5*^&AP#E702)-dDD z^4iL2Z%5|i7zU7mVLa;t45Blic#JHv+4wh?3*QZJDt`7x+ z-XhQbQhXf8G9bzRC|~rp7Bt{6Ei$L_Z$+hb33v&^>i#}qA^8SuXw$jt=EzKYq!-dS zd_W%Hx6S43+kaf6Yp2L?g8yXZlLiR=xqF_k@#+zRWcCIpmlQa4PjII%^8Uxs8kKu@ zL{~cQKo))PqU0w%Ff%B+bIaC?zXCZp#=3Wb9F6!5MkbIXP2{Zv{3#MmO^oJ$GQ$(4 zVhSQn?H{+0r2$I7A5_pGz> zw-bV$P-$7j6*5Vwfxlia#XX9o*XN`fa`P16p1w7M=e#XU#*R@b#d6bvH|qv|r6!>R zk%ucj0AZG%BP0|M+hHdGZ~IXzJUjPKMvY3RZm*Fb)52J}$kp`*@81XuE#JBu6*o`x z!8uCmUHcWEtP@VJUd$}%ndYBnEz5UHL2W_peJWFm-i|QnhR* zitCULBUhs`_988G%hCG`;TN}RZKCxbKr{3En(^kd$IAeA9*0&=E z6hWtKhPAn1*Ofl1KBC#wJ7J=I^;6T!Xh1LFVSybenPk@~JckJ*j%0>atk}Sa?YHS? zrx~Sn&jj`WBkr?#87F~23zOh-i(vwB1*O(KrO?OUnfbsDIU>tmBfE6lk)1JT1V%#J za`oiu^id!g^Lmrep?|87af1)mXsLvzf0zx?D&PJ`!YM(}5*IL5-Af)N{{rr7s9z}} zz-Y}36|6w8&9QM!w1ft1y!33;8>`Trf}{@f+ilpERqb<_-b|kQaFEo~Z#J*&6r0A3 zs0`*~7TiRfTF#!bX`~sKTejJ*TYq*(E^wRivTswsi=hG$e??I@wC|=F-!IGPvH_sj z?r9F&3=(kOG;oVAvYK?Q(K51%n!v$qO>fLUMtnGVQw0N6TEo#>hhEou8p(RRmIoKO z5Zi9k>}w90HPTITXL9V&ZJu4Ui{9Kfui}5?#1oz8Zz%hT237LTAO9OJ&rL5jy|E>> zQfjCt&aJXIt{o=viCe91H5xd}1W7rHD9X|fMnG28YEzX44RHb&2nv4~n`Kv2OU_=8 z0Rsh&H9<#z7=b4hJJZwvsOU(p)k=Pq{hcb?p7{g*!-wh(wszeZ4EAFK)7-^v7KY^E zhdr}5H-G+f0My$dlRqoLc*E+G8=CR_UC6Co7=R5wq5GCZR5Cg}uq}8G0+_ZGn#L0> zBrbms__FI_ivA6*u9Z`7Oaw`F&Cg)G!FtY~25h2(kUP&p@`Ki)XCeHD=3-0fbuKzG znek_^VgG!!4+&VScNgoZE=8n?d=T*iX%n&b1k76(#0*3|ixc=0B$w=e{W)IoJ+Jz} z{8}e+#Ee}66pbp+Q)hsn2W9{}&CLUS<2&tj1qUGkge9hMULir%Us|(}t!I9_-`F*s~(H9jQ}>Gfqd?I(4&Zq#d%){E>=0%!uGlqXL;!=7 zwP~3b5IH^2)wbs$d8Ta%fm1=#m055xxXfL*T(cVEKkSt6X-o7#1qn` z<(N<6+;o{6YxrLGMu{&#hEO#7=q7H>D#C@T3s6&1DJbiMFU!52nQgqA%pcXG-ShG_ zV@Lm5D!(gipH2~bgejMZ5)XV>#r>XwJB?bX`pZ7wLF~(p`9n;@C6GNUD%yxU z(hUdaUo^5&&G8iqzCZ^4P@r}${{z_hFC-M|ih{E9;h{qFGDOq_7}>y@`Fk|9e<9hA zrcppnO;JD(Y=+xL_iH6iTtx@&zfdnKPcGLQpMyc>|M1^0@kHMsV_^7y1dF~;J^t9A zkZ;jI(q@2*-=t9x5cUTVZhE~j-;ueP>{vHRBe{fXOfu_8gZt;kL-O2psIA1wrpmD< zL}lcAu>H}qj6Q+u{Aw5Zs?|V}{!gM{7~lwP%KC+nZYp5Sswn*fesRtA{qEo;`kc}? zP8pjPRo&L?uL<_UX+58=#OCV+iOZJV$8A`1$NHw;SSz1Vy-8Wm|lxU7Sx0AB`OiGUuane6L|>$ak(XNC%Hv z3ZZ--+hN~cY(knQeX*%xTt!{sohUQg+Vk*SN&9#Z!n%AEP9iROmJ(@k!?JLL$HP-+ z64S#;F^;$IxYSodK(@4xy83;}NAu^irM$0!vUy6`@ra-M(efgmDanVFP4UOcV6*TU zAsDmrz8%qK$d6o^i?W}AKJSA(w5z!XO=jLEaO|4b)W>L)>(aZEI=EYnJ&gF&=orjg z{W7llW)bqXLA&HWg?;u4-EL*#<9X%cgt7mZtPWiX-)FX%&qFuA^|f=V5~MU2@LF{Y zncCLPr8$|=`lSn+YG_%^sLvZLN*F7{dYX}rzU65OIuOfgZkelaf0~x~SrSIK#+~|t z+O`>Dy>$Fo-Zft=%&2Qw7*V|Wq}0%AFe6Wqk;V461HX1vQ%vZ{D(7&HaVh^Z9X#Le53 zaPao+UNi#$A_PcTh0o$+t}nD@KfFmqEEb-*au8gi!}wbG>tvZAnZWok!u~^hZ#9I{ z3?ZngM#NhP!O#GJY+D>#K1AN$i35=Ba8WXcYlRxHhuLFt62^XI>}0JfS4d#>C!68F z-qq*iU^81byzqjpVx(=5O2qx9wWBq+ltL>_mPh?s`(_xihY=D;r-M8 zy#|8C7qxO-FT;gO;+V~{$A{HppF}4nC{yX-SVj8~^1i59g8r=IP-AR)NywXf2RQK8b}&NIp;)7s z&}I43A_+oNCUXR6ucSR_@Jm;xkzfZT<6*@W+m7d*N)$utP5f z6#fH^R-Yw1{1VohEzt|s`fbm_ZkQMQAZZ1opU`1rxV@%fOWrtgiK);bM8 z8NU90!?z=fvvempRO4|L;Kk7EFr+tsfv9)(ajkZyW>|3~*A)uacz~!kw(^Q;Jh@?U z8m^|=CJdt+G!(y(+~4JLKUaz5)7!~`j{Y@;kC}qJ!#|BiR&R? zV&5wr-^zomN$mCIPZvh~s@I4c+@Lv${%-sh0)}afV-Gb0&F&NfX$~ARPG2 zILhepEC9X@j`#_oM$L`zGq%CWtzaRW6`S<~Kg@1C=9Ra8F}BVBiA>PVZfr}-qYcuu zQyX;oB;aN5u*Lz6t(k5og?N50RW$fxUQ;Tz>8YLu4f4+diu&i zy7QdvK%E;4i$!$sohOX7y2u_`gFynB>|{TCJct=$?2>@ zd(QNz3@(EnQsKhX&(P-r|0zs@kNefs>ub^Ago?p1_L}3-v0Ys$DuKAGCoxkzZD(zw zfi6WJw-gVWAP{m$(teX{_a3_^7V!S}Yc8gPw?%2Vk+B(N(EUn0QeMx@Cs3aQyY6z# z;#1gTJ!ZpA6XLEl@!`tb^``OC-yX)cPR--?LqoSi?6T{L7@SE$q$TnEMq1%FE=z5C zr53kbwYP1EIDEeiAQoDE13}~xvhw#U6pCEA)a39h{XBALy5;O$R)Y-Xr1#?qWfwM! ze+rYO51k3I#TKTI&DF=~g56O?&%cfE1hpyWX02q~@?qk{Wc0acTk3@X@FED&PDE7W`=GwLjGWW4?S^`27#zz>-2Z|BVV*E(=SF0K(@GSmq!< zkE1v!hX^A7{_i1d7b9&crY@2M*q49H;8_{|-}C=nG2c9}z$m{ssKDr-Cv(<_>|faR zWq1{*YaytuW}|EB$Mu2ju~3oCU#dhBF#u|tI_4+G4bD`cEWop!Lz|t_cI?bSoM)Zf zO5i^*tUaQJ1yNhgv^w(luOnST@=B2`@mb7(rS>Y9UNmf~fj}7!je!L(OSokjuJy)U zb`UdX0!Fo=APvme^_2H+J}x{ubJ7M&3bNuc+P6Uo0O-lp2P(Z?QS!1DUX?lNf=y{f<#}Qt2*!+O@!j94W84L;YSQJ3YmQ+cAv06L?fcBxSvoDu zgTcFpc>SJioZjxyzP>uTczhO}*m@;hB{^Rut=8p>$TjBEi=e-&W2wmBc8OjhlQ|Ka z{K6fYo0Tsm;ZOE^TEhR`;H6RD%Pz_4{bHHhV$rgTPe^n=`v~h z(X!r~sjK8!8kRaat$8&*OqZ!pjk?Sz65yo{)yV{B@@9ToGPrES-@ORa^ytEDQ}|^t z>goKVbM-ts`1LsK_2FV9=~Z@m*juOhsw+)_#dY=gjow*KfD5zpeui+|)*AC7!LpF{ z0G=Kg4*z(;eyZIcu;zHus*!RZ=c#uo?s}H$IwdX}?$S#Y$NM*cOf+ZL2y`1Og0<_G z-v8>>wOE>ew@Pu>e9Bkn@tWi5F?d@PzVz}u__8tgjL(rW=QJ)&Gj;kj&qUas{`znj zqH`W5;M$d1Tlx(%YILAunP8SW>Lu@;=poEFl)>ORY7W_Rs<`~{+Z)_g-lbOeSuLAX z_OtS$&62P3bn+EO$^)jVzzS6Ksb|aYk0c(C&lHcht9y^xg=5D#2%CkKr)5)@0^rOm zJLU5{iUW`Pj5>Z6LnINfg!H9`&iTfl{WkaWzSfInRlAiN7d65sbe4e(;W6*a`mOBV z#z6osz1hH4l6X(4R#R$h(ry&Ts?^$mx5MObj)krsm|C$YcWm9oZkqRxXEkSRHeVZ# zEXdMa*IiLgUXQVnrgA7aGlb5f4jlQx#oBXx*)NZ;L`pHI2dS;a*UNQJC+h+)T`d7v z&no?icQXR_Ix*g!sjXL4t30<88Yd4!r{o^SmqtuvZLb$~D|gML@SX3I#r!TMVVL*$ zYG`AlX)CwkrKXI^WLx}kJ+6(^rz3>9aqkyR-*Y1EfPqR!FX;-lcTI@)RUXIc%c>>! z`QAy=x9J>xOw#+pi{*=1Nk-q%S=~FHKK?xI!bJ@JC%Wrq4gM1CvlWA=w#QfjmmCO+ z&h%AmT#M5d1+|;wYEi1IjW*xqh*jb4&FkuCmZwP#7wy{D;n9%{19>YolqgK+jE1% z^;C25xg)&jyTAoU;YByy_92C0TZZ@9y*?Rfy+(^j9pT>S=;Wl%S?l8K$@b~pB(%(F z*H!x|xK_Zb^y$nvFU@h6kEF-js_gaPSjXe;UhL#f={jjeEd?6TE#gOWDAP5?sx%W_ z5F+cJHC@Egmh2T{aO|~er5iCaj2DyaZ_PsXSJW*1?n%ORyh(uc?zGPBwDv$ahPuS;BDpj3U-UxX^r$Ti;LsxmDMWyxzl#Qi+an}2beXzJn$SSU^>R6)r)C4 zC<d@WI(;odNwZ(fcDZSfo30YTwWLDOQ5e1Nj~nq^nK0zy zdsVA*m*=|_b}TZ!b$i%f=2*Fi;VX0fo>i=syN%eaE(zY zD$T5jph980&>PmQ@uP1&gdOqO?InzQ&JNQIge^7Pm{E|cz8=r{x}2{OejV>_yFRzd zH(qW)gEp}tYF|}=5xJjr3fuMySPky=$pT8dt476UA~;epJsn{SH20dD%5g(%4!rZ_Cm;u zwp~>Hf+$lE@{l)zf9r7)wCZ+iq2s!rwE9f^F@A&wN#QK{BT&Ith#gkr+G zbyfvZ>J9RMrbskO7ftcQ&a!AbzoK7H#E~~{-C~hHq%8PzJkL6%%V$PV5hv`%W&Tr7 zr!F;Rxl*0XvX3OL{>Oyd@1AXH>r}m89Q$FiGgfG9P%PRB4 z)K%ONZpoWZp1+_ZuHcw@_?r5;c_gU&zXw*nK~@An1K_+j?|4$W8{HrQ%RUfCE($WG zcOAO4C~Gy+&_^syj=I}+`>01OHg}b-HT;KHfl1vvSyycGhk?^C>{^$V&yQ&(>!%T^ zFWW7%+P5Vwv*a#O$Q{_NlCe#-1zN2ibZG|af|C{~CKgG-?5A&G4GQ#I4KQGNAJUrjLY_=r% z6kA4+zWo6T-otNsIuIURbUkZ?`^?Cw@)gs*g?Qz}S$UJB6pbouM%t5L?{T9Qp{(si z83p^rpOJ)|+LHLG1v=}_XsE?&z1(z5#%tHL(#tV*+ETl}NsMT<b<BiqR9x!MujHKY;!D~G5phVnj)Eu^Fof zLvxOaNcZV$wwmD@g=+oC;2U|I+TRf7)@_`r*aLwT$m-z`e|M zxy)}7=S(j`Ud8P-XJ?JA+{psPQVH2UoToFVFDXV{s=rAs7_CpdDx?>$Syk@53R!bR*bSB zDLSCcf?(_#H!%BNb5eB(%)j2Nv#){uKk`u|Q9^L1^}uO{-+^iKEz9+F%{Zqnq0n7B-z1V%oPw z>29*M_YbqJ>>G{-9qDQT5MbF--RTqCyyyLI7y$O4VR^-1OuY7dn9-P?Meq(3{(EBw zr(EGR;4tV&em_%JdldB)HXpEg>e=Q3gX!p)$RUxKo$c1;K1kzRBuAaqMubcD8mkzI zdfLF()H+i20xNECcaz@kS413boazmDX}|m(MHT)YtRa?f?E~=bmbBWG1Zm%@Ecppw zg?*I~76kG9V!AxV!EPTRZ=Q;wmW#^4Df`FUA|3Y;+pk@%$f5rLdPc^QYV#IVhP~#& zr62$5Wx}Yhmt-r=BID%Z>QydTS9*0VN3#&Vj?G_ZNR*L|hN|%zJ)+GGxMCiQqkO<4 z{+;oCSg~TQ#?5yxTPu5e)R!X*+`;Up7$bvwzDo9AN}Sx75Zg!KK=n69MY9gI0wmkd z%!BK+{3P+_mHtjN#jEBO>mxOMuJ3^ovPswLRe#GkL-bBC1uY7U)JXfT?16uhqB$h; zHs^PoQ~>!HUuv-QB6j1z;^*J~egp=K$^j&OxQ41JJnjb%8gg>p)qhIAsr=5uC!pgc z4Jf*NIE*5vWDU3r_xa>xp%<@c*(g13UtWd|l+qeUdz2O`M{s>I@h@#;S>n&`@h zLE%)Yu)JmF^PCXWP@(ega)EC;^^weLnZnAur8Ux>2FQ1&Jr6AgGY|{cY=0YlNv@cg zHSS6=;{nn-s87PrJkT$3;V@Bj%ebX>?!tK$@cC*Pt9|`m!IF1u(eWZ~Xs-p|H*Ws@ z`#S*yG$`*spY3J8txK(U#&L4AglS_RaN!UVr<*90BWAY_BdJ}7e2tm@csAp3VoHW!yv^%y4X0J{`1$qdUojUY6ThINXwkILB zN&fKRAtUegA>0fV&4iYItB6FUi5^%}8&CVAJ!%Wzyw`a1Lp@0vCNCCTXDC%AJ2KD# zG6`HdM$T^xD1MHW)oN!-Bjl{irI*)72>S9vLc< z!^;KFpT6P2${K2l$jtmXJhdp~LmzZ$wPds!r!e63{Cb9{KU=fxqybAaqS&d7aa<^!4U| zV9Y{Yc-{2bQMgWddB-kkY!dl;l^HW6010G&c?}>%Cna`F+M2x6#1hm*2FZw^t9MlL zZyKQ9nSVOlt31L~Up1`)j8d3^K!dax;^C0X#AADnwYiN-xzYyjDRnWzn=;^;Gw4yt zr|sUu9S7OjgKnTovPw<;nPqu~Z1-qhsxuwYy`L8@Q+!xkrPv48@ZF0eYqfbhBR-h+ zu+kl{=`A!*J|EWBvKcmJU0z|hK+q0(jKKm;$#Pt?_uXgvH(PqQ{z1iV-Xu1^YUXSF za&Ui440ybHrGasvF(JKQo4HtQx!H)hx6OUM`s2CIAyAoPL|7-(`Iw+M#a|#DO@$6w zsT2+#`@@AZrf~oC8#g?o2I41y;CluTf9+edBxglbxlhid0pL|&42MBr16yZpl2I^| z&H&d_Y-jCkyCgTJ(-4i|M@Cq$rVvMO%qyLDmqKIkBQSAY$#H-ns1!e)m4H)iB$egN zh|&CS=h`yGy|_tg$}N~26irR=9ZtOhXMjCvA6Ml4;oZoxqYe(^<_(b)74T&Ga8kC> zGq%d*tFRw(y)zLjd5^VmbL95v7+EWIAocSz*7Cy_)G#=lIJnRYN94&zBQ7=V*1E~n zK}86opHVq#S7oiN4wa8sG?K&h%oA6;p@6^bXjeu|Sl-0IB;>dA+t{*oO8(IV8&AOG zHRNn(pw7gNju24LOW%NXmh7lTK3MX+&~7y=R-P;=7_O>CfQsSUaoi2dC0jev>1U6F zhWYpZh#W(K)g&KaM*vvqK_ z%VY6?>hF^T%U>|P3G$O;^eYDiZ(9RmySX3)9J;1>A)68vg27Y@jFI{Yys09V9lY?p z7vjQYGv!y@=|2Y~!sNQ+QipPj3M zKpj-ZUvUr>G4TqFrBIAoO~e^R2}H2?K_tOvfD+Ywo@h4m__o(as0mG1ax6eFkEczi z8BDtxbuI1^FaBquGUdhttvvBr5(PN$fc#~=DZu87uX1N0M@oU7wpTuOYhXYR#~c3O zx8;!F(+zGnqP+FRIfk*qyf1-9w%OK`N!>m*)Ck6Ry#9K7Hh1?-2zx)^A_sqn&!t>Y zcQ!8H6a1zsCr|rrWx&ACAr_d-+;L{Z2d^1gW?1rNtGTa`j;zu~Kf#NEZw#at@gAt4 z^rJBjZrP=)0tK5t8VeMfC-D;>F3Th+4hh}JqZ*Hqb(JjU$gg(UBc~BQ2>4d)0w0eP ziX`iXw%B65En!zB!i52Tf1p+zFWd+_d|*;6f3-;q`B5IKc2v)PmFEWSy28zJ7x`Vi zVm$tkEUyMusj~8tK>60gS~g;eZu+?G3am8Du>{&9A;2E7p!Krk)AFfIp8@9Qxb|Qo z`gs)3o)0&T{{i95iCO!8@GtO_YIN!pt9b&0*ezDy{S?^${Jq2)Mr{538;D^uqc$WYBKuX0TBpx&$OV{fy1dot0@7rI{qnz2oiglqRq zbICqwhJPyL8e0z?JJQc(Nh@{Bmn*+w!G@y3Q*>a3eTORt{=`n&CN?d%cSUPnkKf(_ zcbI`MshiC@l%`Fev0wQra2;;8oY?aHTNEmAgKOl9{maQ0=)8I4wKYIQ<*qltT$gIw^ZDzdJv_ z`{^%>tWZ6`7N4`M0?SYM+tc6H1|n^q*Fj~|Aag$gDtF7%-uylHqR@xlQGF9HsPb-) z%jW{!8#b+R?F!=rN&H;)>EE0zCoWZc3D`!Zod@idG(5e1)Dj;1;x#TM%&q4QE49

%rLSm{L#3XB_PhU@*(6dp*C5=(hYfC^oN72WfFy~`&xz@Tw@anKM2=!ke_ z{d=GnkkaM_@nS~)Pk0mqN|r={!LF`ma5S_cLh)ct4OA@&s9o&pCBV6P7ncbzKw=V$ zMj8Ew$Sf$Fa;)7-yOPQ=eaTjw-v*iBe+2HJ0nv;5t&QKSB2TpUTbl|Xu;50eK*wVg zj2B5m?-LbJ#yf>n58`9QmE~+u3ASGHJ1WiR%`SZ8WBo6`gR*fw*6f?e9jHg+?%n1P zG>C@(QTi5y7Z^pmC^A`!8rr^4n+6fM;xq`mhD&c7lM{B%2H*stII}bzwx)jMB(5pIfoRc2R6NqK4gGMTB%%b zfMsoHEgY$9!6;evNQe}J#0Ma24bUDAHbH`3pT;f+GMaxlj%>|+-3T%LCmllIO&Fz) zW~7_~`ry<=M9hbWT{Cn&Dn~+F=6Iwo}JuC^>8aFo+5@iG`GCV;)(#K+^w@Zd}?ZV=fSE z@dRqYe!_RBMbq8 zEbtDKSUO*||0I9j6o$kigA4&^_-~L&;M|+ECI{b$LQv83fBz=;+mi-dsq%$dKZ z{Jju1gUnovFe3yv!90&5>al({E0254{NcmmD^1o9nuaSg%al%MGfJ2s0UZi>8mkIk z%TSF4vH)c{rCPJu(!3Cs1`$~Dod{F+afj=Pyv@kg64wlvfO|g3PFrp7i3*~}OL4gg zo8U=Nph^8-omppdqZr5<5~6c3+O65re-PJz!=qxpTP$bvU6#3`L}lqnPY$2JEBmax z2ts>6g(|7*mLmr#O3QS3oNkYxt0Adwl%xA!6>n^magoxG6gWISt`JtD$MRk#ylz#l zNI2K%BD?tOD=k2XG6gVWwrULXrh;hxo&KsQ($M~#hQhelx2hsFBm_gdO6n!u_To?2 z%V7G_Zx_j>epDCLRi^XUx=Dr)dV`7VzfIkl>!VlWg%9g?Vhpq}%2Rs=25DjfdsD3O zYMx300haK!zf0ZYJJ{_t9w9;Q`|a$~8Y)fSjt+Te;?Oa(-yp*ZWWlJu3Z7M6KAn`2 zvUwBZoIxQhhWJZ=Npg7sO5;6*MFoG}bjJ22L99IwXFZpJZ*=6sA;k^}^eh1bH18PR z9bPHyM@kex-GV>af*TbN;z>gvPI>HIHS5IeUHg4HO~CO3dx~(C_=2&5nk^Vxz;bD> zq}x(>!5V#ajG1*5lfS6#pjZp|BV~gXMvuM@R(MJN<%8t2GdrVbi)g~XA0R3(%m^o$ zm~S2R)4E}jEax&*w+USkT9Kn=C)}zWGr-gG#zCEHG9^B{*GI?6dSf{Q z->F&Jcd)oB=->&T7Y>!w4qr>)y|To_Srl5kuD(i#IKfv_+;mF$UU>h=06AR6Dx=!v zg?XX@n)RMF4vN*6G(k7Yg;SQ=hfo7V;iBJqdj=b=QF}+?L_Hoyh z{qv+RBQ*c{oyK4XgqOrW2G*GTJ|yugDgJ5F?Gy3!%40bP8^*kwMa0~xHW!)k&SKhl zMzgz{p;gnLcnfjn)(11Ga&h-Xb1xZ%KE-$rAOg|dN;ow>%S{2!4oX(Z!r`C_Ggr|@ z(`H`ya=Imi0F#e1y`oQTM+#vK-C>+2T zVECJWt#qU55>m?8TM=QDcV71e9vrUI7a#+9=&+ z1@^+V-Js!2%KZ7EU~WK34e9b6NU-!fw7XSUdyYVY#3!1v>O(;YX?DJ*kI;vTgYVs^ zskAJP@TQCRiw|ed;vW!WBX-SzUDM??McZw%7(3zj6b$p6}PQo?d~La%kN z?a#Db-TMbi4rjH|1Vxm3-~d0}Fi~vyLI@g8m8FkK zfl`ol>1D_MiL|A$*O04-a-=RI0{}~4=m3MNVU}0n%FTNQDB5liX4I?(HuOY{{=ekx0oF(PgV_s!gW!ICcs^Y@du-> zD|Qq+4dMm$ig#qUPCWGJbYAZQe9_({kWz;!W5-`$0Trh1WrT5Mj9CvpA-DS$`!F;r zUk>3Q8%PxUbgln{Z$PcYR4`C`C6mgF!MVM`^Rkw(P?1ZA4RlMMG}s(^7Qny9=O#!V zZfu`+8YzRYyc(@9vPXYVimijC;VvR#aw%wgrq_0GOzVwW?Ztj zQuq=nAK&Gi$!I+4TPc#%Dz~yIs~iE5dmw2N+3ui0X8lLW;#IJHB4Kj3HazUOYSR+{ zgO#m)0s_JHDTtZfR^W&%;Z%L9DZb5o2%1=}!`FSUP68ml?6(BjqIY`MC~=ebdiwXC zxNFq2<o1ybohR^_}UZmZ#x+E5?UL? z#h$%E{7YQn*9(Vq2)xVyIfn9OhLK#B67#6&5;GJ;2f#~cV#+XOZP$#WkrqwLu&cC( zBf_M5O7}$;4ARBe(SW^tt8l+8?O1^RnMwU;(}=`DJGpO#R9!vrzN~Jf;sz@M?ysjR z^4#zF+?S$rmVS`6(D#LN=z+Jv5ToIwU(c~b)GG*cRXR)DOuFa*(%;$*A zMJ5tdpag?N$c4_yh_Cv8i0(`MGyfA1GKxP(K(2!OX|(ZxKDCMr5o_<*FJb?*Hwqzc zxWa!gicNwlHQ&Z^mGG+Dgb$zt7g%s6<#o%E1{)V6kzg|hR&BN!ZF+T8`vk1V=Jw9u zcKm%Kv10qnc$TgXEkL`;BAbPUVx5`RCZL_Qy`+GznZQWP!)#H(8Rmkg!cG_18FIQC zEAaHSp%+pTEb2&TP_z!+P3!24QL+^pqc^$I>#2X^MYW*1CE4kJl-NELFxXI>eliiF zRFlr$G(bwacV2~c4N##MK2-)bmg2(-Pb+4OBXTSB4$TUw~-wb>zcKwuN9Mzbr42vMv07s*6YE zmB4D#jlBKN#JD?My8oMYk(w^f!T4udgm8t<#2C;s$7hgQcodxOyF{ZG>| z{pR}__9U5v|9Qb*K~zi$kya1n5JcdN`t7LRlTMIp4%g(PA3XzxJ{9ROW#~6feoPfM zn;^4PBJGo%7IBbWhc2e>AO!IcPQlizK+Sm4g#fL20WRV*q|fWn@keJj_)u%0>ynL*CAnsi2hj$_tjn57qi zU*l{W9`sMA5*=$};`N*2R~~QT_pA7C*F_7uDg(b58mzk51;9XQ(FZlBwN14OUjw<* zL`P2Ij|$G1P#*aLjEP`?*m>(xw63$`nVpd5f&eieV)gP#~I9<(kFQB zmr_S#S|hQQ&clAE2Tn?41_NN@;q>bPP6eHdc#MARc+7_5^n3n7>PU_r4%dr$4+)ke zjeI4G!hUXS{#QwN)=qQO_SV76L?$W)uja>$leg+dK ziTsw2IGsL_zphc>_;(T_))sJSeM+5_2;vu{$W6;0yaafqg={;YLxclWvX#L>pP%TK zN4#`eHTJ}W6)J%}9GZB?9;RNei`lb9b|yH*Q;$3$3q!4J0%C=5ecxkWe}%X@fku<; zl_6wo|5eIT13I|wFuqA9tiO3BS4WECbii*c*}uuQ6hnVD=?9;S!`WN&>FIRJ+~L;V zW{dYpG}v8 zs1SOh^UODDph7CN1B-m+$+ukrI6uel<8b*EJ@8Wt9aA+rwR>$3_Zn zCOo7p_D$g%<3* zY@R$SG?z1dF*D0zw5QS7M)s5w8B|kMWCiQdsf|>kf$2wWn>Ug&U;j$SV=-iWf&X+O z$!`HKOZg`+I>~Oc^663;a38_;;*O#<3w~E*%q4%| zgA?0#?XLy)q~aN`QFo}F8>;@J$ARzp(-QmmctZti=^&W9Q$JGF=sEP{7@y$;;}EGO znO5E%Ry7cYz>&7d+`0TYG{7&108y*qBx_~Ag?%KliK&{lnZpthe<|lJU?F#2Zbm5<@ z2G7bZ`48vq(BJeGnk1sNXBNDzEK*q4KJeDUqmt2Z_y?guoe_QToyu$5 z3oC-_E{IOEBhf4hL~vvYS80-4SFBl}V-` zuhmuwhYW@y5PWxbH6%q|RJ2VT9VFbmeB-qcS@gTdOGpO~6n!o7nYvoP<-)xJoxOL? z(lgZA60~Ibh%hn}mlzAX(A6fKCPW{`GXd;V`VhCq>u+R8+xy|HriY$$XIxkUG<0sj z0JHV=by9jCyE5g%a9P2+oD4SPeqE7`z##H(ExYMt(xJ`1!OGuRT~_VaZFPRi*lL1l zBiMHzN}B=E9|2H!JV%#PikH8 z8aOdNcr)y(!}O8Ozn1tM9QzYMF45i8L%*k7#b#AZDp0GBPkJ+i5#gAV(I8ap`*6B; z4$MySSzRkc3ZPPHm*CP=m+8!lxYc<$X`(isq+wA6?;*q!0iq5qI_9f!2UmkQ_2eF^ zei>ip=%c0`0-TXw9QwREUi$}ddU=!Faf`OYppAH-2Lu;4J#2%NQbH?(E%Q0js z9vw*8t`WRYeDXQ&x-v?=h!h3&kGdZ`px$hE4{*9qf!WI`hct*Po$o4e!?GLPNVVmD zx9O66V;T`N-<*>{Am%97M6*hYUUjsQnuX)o{+l*auRA7~kLVQWXMulaJYt1eYf6O$ z!V6i#dx$_PE?e?pMbl5{uo59bXF&iCauaAB2F4nLXJF(Bjq}dLaArNW8v;Y#1D{gq5k(Q<{iYRdA88Vx!XeZRns zJO6UL^?jq>e#1>VcfVl(Hm&=C5=7@SS5#xCh{V`xO+n&v7|n(n`6IosoyAwGbFKYs zrrD6kFII*jqjFg#B3EJ}|L$UcD^OI~KlF|6M0{T6y>K zv(ase1=ZWVmG-M|wei2!FJiF0TR4d@uSF2X~1{iy+_?pLJ0XQK_!f0U+HEl4*3vnpT`jkqvQ6gFYp=0R5Qaw##K09Kc;j)8QM7DBHQ91Yn-J6 zJFWh1%I)1Z`|JZ^)r-5dkflhy7SGy}IhwMVY`inECx4Cwzjv#Rvj?}#B<{YLx0ybS zA7w-0e?aJ-$UMV_OXO#fBNHe-5)3 z@DIs5pO3EN*{>WyhHO}h{p@fjELd9fs#2r3nW9^3Tp^FID@TndFb8aTOFc=UAs&^>AWVwURC z-Cf(cyV`!;_g=5T?!<)Q{1&U z6e#Xr?&tmT|H|6z&g`6XW--MCLQhdfi~DB$^)5YetQ)^wj%Qg!cD8ARKiRVafax^5 z7(zsUHXMe2ji$CU9!P}w9&kt-E&*nU>h+O1Z=fMiU38!@DD<01lm>VcQJNI)D;mFB z4|?HFpm-z3{Qa7l?}j6Xjo`rgq~;s-l}>&W5Q}g%k^9K@3&eG|D_I~bRrVuq@bhan z$`3mj#HrFiA+u)6{YgmUa4M71mxJ1U_gFe}iUL83zRnCwgmcHaq&}l~kd_Ll zZ!5WJ23l8stsXWsb-g9Z(xR#g=w>E>*GfbU)P&^yB(i?zb-657ut}%4LfofSr(76W zdD-GVx}0grMoE0#zW-ptu1B!fnINKta0-hyR*-|4zOIU%*&@srC+W`z#X$1|#-wox zt&pOsa0H;ZY?X7q3wGQSn$T}2Z`jv5d2*LAyB8OeW(M-Djmc?S%hRDxDI8bTh=U;> zs;0bxS@W8SIN_1b_y9@sTv}~3{`k%@ItL(4rI92&)F=mUnMSWFSj{>}+>kskI(uSG zm&sTm`#U6mwYF?vc^uNbPfw&AuR=^d^CZ-j(aN6iB>xOxI(IegMxP~cfEk4 z@8gO&QFV|HOxfdMW>%ae1XB=O(VXy!c>IOwvq=KPQNw^8Ehlq)U~L2-K2@O;7WpcL z%=ZHdC1~1U)CN@mRRNY}d5eS}z#10z4!IG!=KEUvEX>0J_^al4t`e%6y>x^31bLLA z{}RrB%zDSB?k8;^tL12r)SQS1fXzo`)t^>8X>YE`DRau@(FZX0ezqz+JA(4gTxS4( z3t?BrD)Pd~h0gv+-M9EOf9U9OvusJ9gV|u%W#U%R&Z}|3ybS63QrKX?8=xWb7~HDSk8seg%L4Jo!)q_9RGyM z#~x+iS4D%<`^2=P1^eAbk>kuxHWyga&%ss!%JvJW0UPnDqx_I3 z-4sqcIAR-MlS$RBFi*KM<53m#kgdzONl(3+7d@mIEIaSGB%5_8yy#H!!MZtutGQ_Hns0Asa6#ETlWQonx2HBPzV`Lac67 zgJ`}8bH+&zSto1hDe;=}`?~>F?cB;C%|s1Yw#S77?&;^06~l z-A$(sp0G(1Uw8LU4WAd+u!^@BInrjZl4{bLA@>rS7Jsvi%wwzySr@i$!PRY!RoZb* z*prxzB|4(3o(ntX&pFXjFhg#Te&OBy^dB?rEOC%2zSM#%4K%@NLmLFwT1p`jM0Y-Z21`%q6R_wQH>9bwT^o6$nmt2Uo{`j4H#?;t|%#Sfpc zt*!Xt?Z=Q3$2;JE-%!+(Qw};dAYsfC4wom;n3~!pGMoO)xg@NU6H!Z&Q?6F$}LCXk)G6&pe-|%!olszx*uLznF$lFCCpBx~ghKmJ}`2R?!e*F1d zytq7$&Y~d8{a0q!;d=-j3bnE-^Y-`n7540&(_+&Tsq0~%9?1k`MHfs~juS1598h}b1q$$z(chU@q%-6$um6-~? ztlEe0^zcmF<5+@OH_@^53ALcjwprlmpkx;zR!kxg%Ohj)k8O1-&8)BD(!5yq5QA$H3p??pG^Z#)3_~1CjV( znbqHLfcxZ$URo*_3?{&RzwD^2021@KfQwFF-#pH~tI-CIjc$PkZ#hEpu&_7M9awMf z))5?do{?DM#}p}eEECn&PZ7?CBIfix^xNZhG7KYD&(q`h+Pv(;7?F? zeP*(e-!E5?oxmv!jN>+cEIujd#>9RPtHIEK-y+~CBo8{tPnN4xxbS1I|L$GWn-|j^ z%#sKq8mp@ZQK4|(+w!#2RZl4pYrg9{lNu+N9^O&;)J<30fb2ovP6V66Bj*EY)KoW`VisUR^?+rfO87@m>jG6~wqYZVr; z9mg@Dv;3r$&4?%ZuA=%o zrr1-P@PcV-(ZEKxQ3G0oJG;WcpF`UXREFJYXO*>g{;3EaC2(AYR|m0flIu4f@hpMT zc{J7PO(r^06RevTFl-%4&C2p1Z%Oa!k}>6~!d@jp#qUdzliG;bj45>E;vM2$qtv`> zq8MbF=_@H^ck7#d#4!$U=-PXH{tj`Az`X$sW^7ze8VryKQ{1HlnW08Pg;Pd9;0lC% z7`ONjQ-C{W)j_kA!fVTz)Ho4%Hu+*L+MoL^9r3Z59GS{3S=ov80iXCxb!MF&;r$cQ z3NcS|-1z7s*TEjdC*NR}NTy-pB$$w&N98k&AA}iZRDRc&<{qU~F^8@RMK0$Q&ipCu zu6@_>m2*9Ma0lg34X%fGF}fGmr{g0&ooM-5C`=)B7<5nx0d}(( zDe|?M=}}Vdu~&}F|3GHZ>XMm_+*S8T1BwIkwecsSKUpJTb3o2x_CJ7R|9q3eC9;zV zvDSb?6wSjZ*NO{cAHgf1T0NE~t) zMi(LI4iX=7X1M8sXa6{zn50Lcv=Da|ze`Rjqw+{T=05%DfoIc*l!5STIal@SA1kjb zCj z(!M>$)BNO=ib~g%DFHRz!0uqV(JW4W&yrlnoTGQzsH?NjLiVk`C|q`Mv!rxFo&0cd zOw~5fDcHYWxBdBifIpSvE>?$y760y@kwP;!q$K$>_LyTSQPIVBRDk=(c7l<^NK>|l z(;rOfYx7Zm`QcF{BSg$USp!PM>s0@JDco=3jGfvOd|HzYa%z=>WABe{8NfFGl*YkE zQ;P-7*P7qAozRjq$3aqPP7rzSu`1!ah%W&<&_y^C06cB+5F_i&e5TBX<28FvE16E^ zmRK|;E)ma0#Nfg;3Ma$Fy*=7C(S%r#g%tnU;sAuJ;KP6S=LU+`zZ<8GjghedN700f zW7%1Y?8DFu!lnB8+FrXp7G@fhlPQ+9(n>h^FUc0KKBLob?^(x-UEdExvES}C3JVDt zf2Lj3-uw@KJT#XPS&_~C=+K)lke>&@W2krRM50&|xnoybbeZ}H>`}g1R zDC-RXvelmEWnb5^cb{?sWIM=U3|mJM?ZDnl)e{rmoR#iOfe+0>EUy3L{a=>ID<)AuF27E0i{Ssa;I70dh zBkD+RcR-5tZTe#qF{S>t^<5Y}5lvM{VwR&4Y2L1%cI3RCm#qEG@x0~lI&RzeKgMk29H?d44q?i_yXS?1Snk+)3y*W zP<&<9h9+=EXINZLcRnr@&S+Bv%gUQzqzWY=gi4Zl{naix8^3VuJjvXSMub7+V#HNa zENtfD#$>c(k3tP884YNHaGbUGW7vSCS-_7?@9H;U9i*>fVu%oV+&ic66f+N?Nbew4 zI!+;FnjeYP^nw5XM~RC>#I+GCxhB+eNW(w3XP}Ou!bYKQsUf7b9N43(jT)uwycBm7 z`;J-vN>O+xMhAIffMr3P^AoIw4xUzM;}M$&;LV%wvIY+B84#V+Ry#%~pC(IR>iNOL z(1Zb>7zzI;#+FKX@x-^e3SS`cD&{Fk?l@5? ziJ(>slVlcaOqUJPIk1I5`ZdmNW63FR9szQwjp`T#Q1?2_y9WSg_!>@C|Bf6n(2ROz zJqTiLqg$KO?}d=sFOo|EH9})pY(e^`aiwpL1whnfjhY=)jqs%8S++%Oqn?Gf z6!Cov%tuP}@LQ6bi9K9M>G%DGBGPNW34zP=YGbA3G^=4v0abV8>}62SpS&_-_69MZI(_i6QeSp<8pn(;?vhGybq$3de3$XBMC?y zGe;+Uus>fnhtI#Hu>FI_=^jd+9Gw_tL9g&T^$@FL0$fj^E)ep&NSy6$%RZL?Y7|9Z z#P8F70f(JhsL{qAN``#QMlADBvn$>_9h>^pLar<_g~M`&fV#njBhtGAp}WVYcR!&& z4qtOOrQp40uxgvumSu&bu#EML%vDg}!~C#<2U@}~i0?mA6fkh$0`;`{N_uG z@CccPK!AxvD386~NC3nIP7kAgsee~J zwlQ<1kIi9)o38n!5q#vFz7RI$C$`=7bsO+9+GIj&4BgU4R=Bs3ufV8+A4p1=}1mCC6m2!hkz+swAM75t9H9 zz%dei$P$$AZd8Y-DMlq2{zcyK=Eny^jl-5xn#z1V+_UA0%1GHX`kZ0uL~;GP9T(_1 z+aW7&i#(h0t8@*)h)U$+LihU{3IuoaHaAV6>N6yd8rE> z`z4i=uv=IHZR@ftXeKfWYg?v!PuV&Mk~DH343A)UkGEM%@;s%^<5`xgz_uNApM6{G z;XznF+~1&Y{TY{xpKi8vPR}|v%GkxovlAK$;U-n=LJSDM{MmxS-*~q5(bScYvV0P| z0j+Qm9Qjfd^;V>6@^UZdL*c<_6S|};^L1s68Zly!_b43 zj-SVu%fdqXK_V82eqk_PX-yHwzZEuSVtlP+^K~zZZlDJO;6$G=NYKUr)&5ZPysJ61 zDyaRM5fYs(+g^-EB~zFSHb4meTVND}IUH?_(i`6${NRnz-1lFW0(pw%nn>+XY9HR0 zZQ-I$Ms_`JigC#dfs?i|K=Q}WKcb)(1f&yB%r3;>&mI@6Vgi9>JKvGwJ^I}byEMQ= zi0}Wzx^G;{|MQx(j4xwul(4{5CQ?vQ4K@^hp(B`8U4!sGmSjJEF^9q`B2yLE@g`MzSnw^0F&)R!eg$t$DWD|bgLhH3}y7#jO#eY%i@bhf)WUghSFS$hQes>ObSIL7g$w; zZ|K8Z+V*>_w!H_q_`*v@>!)3TkT2KX<4xP*a6%wB@@OM2E64;Zf1y;=r-LSq>C};$ zzXux945+~recN67ks^qIs>l8b$LHF<3oec&WX6%tR#hSH#ml(iLsnrh{ z3u7brV@&((AXx($78QYWFnA(~+DZx+P}R!UlOr;ySI+Q#gOynBdy({?dTmcD!P1>X z7U9&egJ73#H6dsyOSxT4#O|wD=07+D1R`Ss@=yZD5pHSrOrKCR)CCO>v(SHhpvUZL zIy8iU>yNk0z|>t1TS5mj^NYo$x=}P1$7>55rLje-{)}PG=V|<9zx4olO->IyL$*+=py)?vZx6;qjo~$U(O8X zx3uCH$>K{2^5m`YH2uI`yP3I|Om`)ye}bV9>o9bZ{8%r#u(-JU!+A1> zP-ss;NmrBj?(URmzz=Jx5#EAbYJZ|_|7`NMOG|L_#kWIApaODwZ;`k4np<6Bwtv*R zkta;hO{g_KeSuDH`Jgi7NxJy6U2)a@-kZnT&u#zk>i(7I~q*jQ`F2Vfz)#wDw9w{NfVl?I%s5?;y+*S!#Jm>_=JWtpdbWI<_HuE6c;nr zMG(XmQ$-{OLG4BkbO+TxUg~TvPw;#qE>7%xc&zd6T9l3NawuUy|UPrEwnaDB5$Mlj@ z7@P6+Ycb+~W6%dL31ojV5bNFIemxH|pVmfS^$01~mgpY)Ec2NsF>s5Hjphd5z{Cm% z##Qn33QRp|k*K7G6>0wDU2{XP{RN~UCEsL0A-LpvZ^KneMli*z4MM+>6|4%WQzzPf zGZ<@i%{9k^k>Fkp@=XX%_nh*}?u$QehvJnzWg1z2jGAmlNKI8^jl59_Wl3>H?xR;9KUbHDtkY#0%Kh~_^$NbL`WrUuNR@x!s272d(O`)PSCCCiv{}GNFk~U zqrigCxw6{Aq|@|oCEb)-Qc%|=wcqaZvb{iRWn9(9Ntnh=_TR)NUu~M_`2?#O0r?h5 zQ5glq=&H_ARYE0sH=<-k8#P=NJLShU*Zg=Otk4E-Pb8~CkYd+E`1c6Nsb9aOo-AzO z4Ae)q;eD>+ETcTfsCuX$jTy|$1dZcIxj~uie^V}gr4Q+)rmrh`TFF@x6qg|}u!y*X z>t%!;gvWL3sB)C-oGn9j5Pk|dNcLqZIrTuo z95<=&jQ*-kC9=YDR<@1S-}^pD97f+j2zg2E*&tA(Lv#uZo;gu+eNEbEQbMzD*nn~<0@UIj)jprt~1Z-seRDaY`YvVvS?nqwJuw7*fHq#I?zw$n8>r-Y*TQ>@=wXK2@d z%cfo-C5q_6)B&rYVMRoT<_y#D5sl%pX|cfA$JUDxyU9l<9{R1Hbzy};)sOQX`#@CQ zR&1`8C7S(rtffosU zHj+|5q>KWFR&JD^ly&^?Yq{);@Wf%1h(9x99=RZ$BMSj}d2@Y}y)P0s48C8VJYnT! z)K5{`gx?EoXIkdhP0;DFX+j8eky%)85;4_q9~m#%%f$pMtp70b{$+&i@MWJ7>*>Xt z25nTt7)K_MstVQCJn;;d81p91{ zjvi4`>HnhWZ({zBVR>!C03sB)*pq&MF~?X~@g$J;b(Mmq059^(h;UV6gH zh^~NYl${#`N-c(o8Zd=zAhpZ{(Cakm&r z)k=X#OS#rc_MAwtV&`gPfaW{$UH#=r3Dvk=e3=>r-?Q4|9u6Ve5Qqd!Vf5*)+N%?` zwP03{Ol(W(wnwh8MdD1H3emOErNC7!oe*X)82)!xR>)>==>Pf}C-hLk7FYdNYqqL^ zNajrjm_x69E%O2xgIgIioqS)WB2yfPoqYcLcb_nb+sTCQWak2m5y-+in`q2^Ss=T8 z^^-V|;fh!yH8qu0!bw~+ZsjI3u(5VY^upuqHSnhWF>vU7-rql2{p0O@&rwewLRh#+ z={uMvv*rKa3P_NZh{tWHZTtHkd~R?Y#A*KPJ4Zo{4fM62dnaFys3M_CZ;B+8+tu`_ z%##w!?CXn4v-ey5O%mw_<*Y(UopATt5@(OcUT@NT`H~{*Q=+%ncZXv>1(@B`#pi<$ z>q-0nb5m|c%HKL#7%%mY+!^Yyw7WxYtWUaH1KI0W=BZxxI(ggH(@d~It)?e;CkyU3 zQdEzeA&_Tf*c?YN2%;s5jGguH(Q?D`7E z$z=MBLT$X{1Z@Z$P;_n(Ee%yf>qHu1UF3IBv$i@oM)7+%do+zRoS!Xn!vS0!=U)6z zI8B#31%;i?CZhRL9O(HC6^I^H^2x`AFtcr70>v>r_qMWx)>_)IT0H=x9p^k82STr5kuT5`smbLTX`xjU%Q%65% zRwtj0-s*WcUUQFVp+>K$;+jb#fBwMy`En41P$UeAWC=Q;ZTO)Zt<}7%4J|iwwL1v`*YuYFe$*_3g1{he8y|rA(tki2%_DL&|GylZn zHoL#klHWj#2N3MqTK%i|^)SQ1M$G#g6ZVpT$CqZnWQFM4T8GzSsegG*=k6(Hf#X@W z{oQHL*(t1|%yZftUuuLYjQV$xO(g=e%?ZXHShi#3ub+-kli&;O_42pz#D{5;RBk)mxjNKNEg zj-|$C+QPi>oqbvORIZw+wx@2+{m{@nmG5ztS58=e<&J)uJ=U41*ZysAYuN!d;L4Eh zhuY8c45xL%t5w(uHqJo&UgL|V@e5n)zDA)(SGeqNm=ajUAnEViPZt~coey(n=A4Jn zrt#z=wd2CdxSZu$$XPh)=%gKr{UWHUoF6ks<@_zn^(G~hX+Dn1L-ytHm1+Lh+e3)` zKTk>D6DhLeL#>7R8~0pP@!b}f1w)GBUWQ&x<0u@xykI*4eZSlK)6OkqH}~CxEHOJ0 z@pZv#T|L5Rykik>?WClh9L#1tXJ>v3{}J$&5s8kPB@iY@2h_eEu3X(x`JOtwkI$JG z`&rmr`9t_;&ByMaf+EhE>%w;-fZozMEWg)~$9_?vLa#wB4Y9YE3nEH&ekGx@*N1D) zc_k_z*_W5QJazvMmvT2KeKr-w)Q=r~XTKY7T7|t9UkjQIVXUej{e?gNoXI^>{=);5 z%S#%?)+5ON^zTYhYRh-TU4W{_+48~;u03%XCPo=IXMh2`4(|K!H@zzuq=SA1#_Wv1 zs1%25Dk?3}`++dPFQ$2-*FCPA$++6G$1MK}T`9kU0&v-nwVQy7r!C*(i>;}-!^Pm^ z@E#9|7qc6dn}>6u0{iD{64x`S7G!A2V^LgJUvVZ4h;R;FBe**}m4TRTD?=m=oPJKt ztm0jY!>k&mA2g7zbruBW`d`ni6F1K}f9*uEeY-v1^cN8;tEs6usy}0Ql}w7Q;jr zSq;VC{Bh7`!49AQPo}-|;}^T8)JtoDs^lIk2BGij?2+bRt*~|^z#XO9RM+Dn-HX=x z?J%8|HFos;hQM`t=F??ZrjAghy}%{9#^Mv6>-@xBdFrmH8r9RNx+`f>{^ z5_T)Or$i9dK}(8brMWT)>!%XVZt!2{XN15GDnVN1LvHCNxxD^vCTF815R6HfKW(ZZ zY(*d+TGRD!^qaOvP=~_s1mmoSSsA{ok?+pObXc+fdAqm;8|J5a`vVC_!lGZ7KcpnV z_w(m9<*gf+JR0t^i5&*PTm7w68dxH?$zG4yXh+$vPlud&nud>)nPG!@m29GI#h4r4 z^Bybxfni1$Q*V!=^8{4-3u0{*i)1nPdRm*e!?PU|i&#Sc(4a=!vQ;6Z02H%Bk71r= zp~PTFj`Snb`p;>@oSEvB)V^!Pf_i*XW_(cyJeD0S3W!A9qCBat((ke6J?t3};#MDp zXFI)mpYjn*oZWqVNN3rK2$2T2y#_&%RO(a9~y`@TWToLN3#@N(Ocz?V{KB{53+Oi;>D7fT_?x zb~o=`ia0A`AK2>%RW(O?s<25irRnW_8N;f;irK7H%=VIAFQmEX%kvj|nZ=r{=rPn* z^Y=NJ;sw3J;?+K{W!K)VILWgptXFl!ZA7mZEW-@^AwgVY|qeI`?4xlzFI|K+|()qtDp`Fu2e?f>d;IsfteIRhQw z??egc6Z6OeK%eN~x7D<6M4uU8`P7b{+bznh!7W4qll@|7VAR(Q)p)M>$lT#$4|j;6%ZRb17du*=jqKgDukZU zyqe1SA-*|0vV)f1twFT|^^0+}p(; z%PDn}D(K=WKX!Li=mO5w&R?!M=R|!R6kf*SCM$ZcC6DLasnB(ho_ZX69{b`pN;lq? z33wYl7_Wr`heV&|rZm=3{>CoVv{}mpT&!udiZr>nzDb_PpTS=Ksh`7Z!F7XOuMLL5 z5q`=+3IJrZBgST7&|@`ezRfU?HtB);s`}u+2v{aMNyt=XGl)LY`ePi@9&f?Iw~_;6 z<&!8Z(dSC7JDAIZg?Nr%5!0g<4E&$^j>q0wYA8QEHFX?>TWTzh7?us{`BfczpKC1M zzDTcwpVe+^KBmpDhW}MtTyH6^={hoSoe1|U-gvBknltp@-BwPn7c*WRZs?Hc<&^FG z_me8Gy2o?xoxf7u+=gOQl&A2?lfplrW4<#EHe)x|cpwlLxEtJ|DwZDzr4~u+zgHxw zifnjx@hZ6J(wLrVbluL1qd&lZ1Inz8&`Ee=0}wkTzl|Xi<69H^#D+nr4ttbNV1Y#| zNVH6GQs}2&!(*}6)^7~n%W5h0r^5!pd}GHqg;L(}&{YkpF0EfqMluvHJ1@uHV<*Rf zQhalB?vxs5q=dCism`rzqK@aYT7FyCJ!fydakVi`Irs!}!avmLUprt5nOhI&ov8QT zAw5%p*}_&zy)*OLf)=*sfHfQ12L)x~1~kPh&{s#NG&<=&^x>f_Sbat(j?83V?0dHg zrplvhkNpqJ0NvrRGJQ>z_76%oLony6@On~o?1$kg>bZq_6Im;Y-vDReef8`3=0#L< z-Tg&k{i=_L#^`w;YqIRl_Yvlgu-3^45UOwUVdvvJs)sZ~7}6Cf%N}e(gD+=%%W=I? zrobM^FysI47#OS{Y5zh@nktsSf=XYXKTUPu)h{7n3U3@$5U&Ygrf$>whJ3OxQ6%n3 z+60x<%nc*vH~Y$q{rtAGWplN&F%009=^P|REsL)3YG{DB>f+1! zH!@pM9c|h+ELfGXGMBHCGgTpf1H_LlxTDPE!o+C=foqt=IbRsfLL4x^z4`?~gi6f$ zz_zYNO3SQPcyxLm9C;XooWQ8vj&{sU(P7p6yG2<;H00oEZsZU-vb;35b01CnhcuOk z{%8li8)RdawWq^${pPa=M;b@nb7C)J>)i`o`dBciL4ctRMI{Nl8TBsy(ozIU4ZqFW zk27gQUCeIWtDAHAmBV+D5aLBR%RN8nZjF?VcxZ*Yo7~i}>`rb19O4 zyvE$S*))Etjn?Oy#SH_$MPm}#u}p&mxpNQ2cfVe&A403AMrzM}W&HNe^IBgyts|tB zlGjA8#XM)D4?-LB*x7Lm&%cfT)P_EWh3KM|RMr@>it?Z-t@?yQScBS3R_~a(X2~F4 zXja0$77dY)Ye({&rY&fXc$h)vm((EI_+RtYPei~5eBkTIzmHg=1xDvC9%A-dR0wASI#~C`tn=@e_wH)oIUj-VlEX)3FTWd~AO_v`5h>wN&RK`;>8lh35WVz-1 zmc%LO7n1Yuevkz=oZSL@3YdgM6Kb3hB==efg%&pIIvR@fu!tWJDaD zC(V>4=V2%z;f2UhH3kgHUknPIKCGE9X2y|^k3_U`>v>Pfn1hS5%wN4qwWCr>0X?L+& zB{h%nQpC~*SN+>xtZDyOBRR#IvVGhz!KrftNaGVC$lZ9omMd`=a(0#s)*l8BCl-4* zNgM&aqRwNM^LIIjbhBGI%fcWSbMjuZg)&WVyP9Gck9K}RAvnxI zBLlV~p+INCAPF<8C_P{2z}bI?{Tk{7=p70A%;jr#|1B*ZVvOaJx<9FegEa!dv&_KQ zs!bO}G`c_tsjd_gL-wDUj!Vy2MDLX;O~{c*)UgRU8wbb4ffTM>1&}?s+Ud-cQi?bm z01X{$?RGj!aqsTX4K$E^$f;e!$?f(T`ZsuR&RpsLO_L1ZV5s>v$3J?U_iCGeY8)m` z$Pd)H3Evj^u_nvhSW2V(gGE@;KTrJ__P!Yd14F2~|MZj7BjB)Lc377_9J|RCcidHl z5zOv$B)*^~bs}5zHVZ1tF0A@vEc+?)cQQNM5~~151diDqSPl)7RiTsOlA0bBP#Wk6 zA?l_kDhPK{k#x{)irVYB2&Lj^a3?V)HghV1os%%#yrx8Q(eKT0l<_jc0->?SQ}4RytJ%H*o8 zrN;4hN#>O3vQzm;7%7Dh*)wTwVdKK_Xq0=6A+%D-@7$i82nh(x*{I2f3_1IZ;0JDG z9#_TdgH}-iC0ral{T<&~-Z_q9hGL$(4!j37)YTPNDF58~Bq^b16pE}v2glKR0()Em z^FpJ4C+Lazvd5jxSLdj+TH=}YUf7Ny3`*-EdxU53VKOl>k+7`PpZz=P;%a_fZg==V zEinnixP~nYO(tv4j66(Yj8&U!(}DY1`V)hT-`cnwB$`C<&L#4wC4Sh-M*TQdqU@%a zD>OJCPiAMuZ~~aCmXI1<_H&m5R)-d=_>%QwbLzsm+*bVp>)EAq>^8BU73tqt%o5(6 z@ypVn+ji*GxuIotBWUGInRB$M6tPBYM0=&?w-I|+k@;WGKUK@G%Vt(3V=fhBOOqG8 ztb`_ilJ;yU?SKHGI8~+r-_R{cQzbA$zha&;=pi3;N4~$xNOunkI;Wd$T_q7@i6PGU zBcjM2i;Btokt+d_&B#7r>mBY<$!@j#f4!S`TKNmE7F7X*V0DXsA!W?q|5O{mOVO@7o8s%ci{X&XT_FA~Q#}fLf-VGEE_ZyZ6Qz z?4_HC2PUIf_Yc7kLQ!g~a7YK-0pF@eL9dV9)w52D;z9M+-Tb*rHFj$mmDTwdnpf{m zuP-dZ6^wp;0{)eUYYDeLNvQ|lt=|PgZ?<&-BcH3*p(49ae4hKOTJOF4HN|n8a@1BP zEKN2>+(@myyujrF27>+a>C*sXZjWR@wCk-%kVvxsKlk&4ncg^GmZFz3LTAIj7N zf@-kfg4~EfC?56IGB{~`b~Qo21_q zPEDQ97zc0F!}YXgRNK1aEzZ8J`_-grk`*i6Kb)l^wKI-dcfarv&yR(Zom)eV<({*(I>WzoW~%Lx5XB>-!yT*W}M{^keUao&yhhG z;Pd*)p~x6g>Eu~G^I%Vq>q%N&(BdYjS*JJnyj!Q?IOw9Lo-AX1O5($}zkB8yM#iHz z?o_LtX$fkXfg`Ycn4PX)vLMLFhp$Qp=*iR-a)4I|)<09L+4f3+iBEaOB=t&u4ny&V zui$`5{tW${i+Yr%C+Qs+!{7po#47vGgVYWkV-x4BR#aY~HdG6exvT1eT^)0B!!JPM zWTZ+F-3>njFWZC0#L2N@c-~)wT+r_e%m|C#80N+}ez!`U?pZ}85 zuRbn{H%^B{*cecS_fvw1g@`hZ^)Yo{d+1s`(Vy4IGFog*h5>vxG)B{TD`WRnJbvD_ zvLX~xhHw{I^wTH#HVvs_zr;S}1`xKmJ>cT`?Zl%oRFR0H-Uiz@Vd@p{D zws5vns7**RbYk_uSn{B53N{oZl!R)E?@ko4nm^Grd_oMK_oECuYk{wwZOMJ%W1Fbs za1lkzw19cvuxMMdJ}bFIxT;4R7cfp z$U_GoFl4#f!{C>Sfdar<=^YQ5Vep$w0JEnA9*c!^SOkHL2LJrHMgQ7|(1<^QZ9+-7j`vV&<`VOvgZz z2`@X%&z+$x)4i4wpH+aBviV57HmhlhmiQ>F`Q*Tj6+|&7-*jcu8qTyTDpLS^2zqcI zyis)opw8%^WTWM;ql6tamgM>_YuR|3>3L{`;4@rs-~!bl!{A(n(PHQs|3Ay>dBP4i zE`G@+Do_iyI*2TFx{3OLF*(^22;c!0huI$Zhip~ox7A5`5D%%FcREZ|{nNM<`pH() zR`@%KLS~qiSmTJOS^fh@X9%t|Hd|Zz%H#)pPKc&BA>pj<7p$fxYDDwSiBU7Gibb8I z6=>D&_fw30*X$KtugV21_1R`UA_RcKVL6Vag)zVje*WDYBXV$2b))MVT7QPUjkhrO zlamyB@K3fz$#KRI0r=qd!8e@))$zp%z6u$8Whf}Bo?B)Dvmhmm&7=kKkv$aj$R zomSQ)5fY&Dg*?kz;|BmxDFhcR(jhuHpznU?g|ozZ@>!;cXrGabU&Jl>$Nc3eIxKK9 z9~c9(qBo~(jn@DNkIpy(xX_~;O$OnhD+Q*`GuDpet&lB2CyQIB zmP=)QQ!*oO&@g)g1g@nZ_$4bw+(Q5flsT3{hIOb&8iRmQ6WcUCt$0(|VdE9>m2SU- z|6_mEM^(KLG*BDI4{ShqzdlhhDm0E!nJ!YunLIv;T^XI9tBGBbX*vXaFe~rHtR{oeuDFInboumf(F!Q`39H zU#|H7GSU}KEJTjQmtDRpM(I@g{Nz%Oo0armgJZ@Jh>mqVBraodvJl!3T$OYgg&Q-1 zRi+sf!>AK5vSo|!WXx)zk((D;ly|Tk1t7E!=JUxuRf|u@B!P$k-nJ*B;DtrW1E|Z# zy#cu3{fDN!G#tdR!a#`F3MCCF^Y5aQAW;z}Bp>z4w8=rx{#=YW-#o5hoI7>#U@n)% zjxZM!DfnT~b>YNvQ?mVrX64`C7DajyF8&`4lKr)8u|x({orqofL+o1mP6NF&C2|Lg z?InJLg3kBU1DHRCiS<;<=Tqu6E@IGaDcmWHac2LHQgXGPLhB|9%_KCk;1%%9zSdh7 zasG5wgjJX#>a7S6*FrI0yeGMbrPzNMU+OaL53b)tOlSBJr+dFs9b4l=x4vEa0JrS7 zs~>~Yl;N;9(ImRRrOz@6dgbId@{H-O1m~N?v}}rxX_9KPIKR9u*yW~4kQrr7&(Q4; z>btMB5XgtUAv5B`!MTged=giev}&|_lQ){Yyy`@4XrQ2HGpugVcRyR?0snT4arI8VBSA9nYe_3IaI(M{uvq=TRWh=)h_>2|qI$I=NImIN%cRE| zdnH6W2|~@NRkiCpppbc1-gRkb%aWij2#r3w zg-szv+c|<-$CWK&u6S{uGq6id0e4b$f2G%%tUE&lHYmN`cqjx*Go18WlMWa*f;L+g zEQDvAToExH*l;UjTI`X@YEg$0h@!{e}hrKsWj=-P;`=bv@KelYP07qGI|u zmOiiWTSsfI8fW45Acg@l!R#*_(J-wF%v$Ejq;T?3Q|Tk$EpyA~8v)E~BM-s|KyK$z zvt#UXVn=*15UwSBUSSA_aaK}==6MLCL%a#Sdxhc2bP(A3kAdPoRBb$UjTF0lK{!md zCkD4pBVisBP7AM3kSzw6`w95|3VLQtzOQLS@CTF361wH60;`HVg(R2Q&n{>i_c^*! zLoRTu;f#0GRjHs$r3pM?ePAdV*%BL(v}=Erul5=q6R0ed4>!y#4CTw zOo_m#U~>LlvlWTVeu229*mgjOn!9U+CSLFL$t}0zIAX9eEHxr>Sx+qQnE;!ge z2;xJx${*ZqQ*`blTY2Q{i*#~Yu+*zh7p(12Ivn^b3SC(9_9DVS)Z7wKj%EbVNnWs)(EnW-k$NkF4}JhmPnehjK>)HHa9)vn`0d$ zxjL=|QucqgB`_m4GrnX(13c+ccy5~+XAm`{-JC<(od{}95zarR3g23t9 zvc%Vj&KyXN#(K!*z1Ln8MACn^1&<|m#AwX^yD8Qog+dw@js$(!+1U$9BJ=mZLbeIE zqm~)D8T*p8jKIkM=umHgW6fLg73dN7RQVN;mYh@IE$dg;!xee+;HO6q-p#@2l&c--UGxz_GIvyFI++Ce&+zbxKBL<+0 z*Z>({y2zyLZ0tq0rtiIo$T3)?$`!(EHv)FK>Ha<5>(` zMY+3nw7s7$jHQ*qIGk*b$%(IM2-EB>k`I10%E7x7uuD*)ib9%tNn<&{_hlGz%C~?# z63WyF7zjf_t3JJvw3h~;x#?R=&POtpi+y%Iu_eyi=M@D_q}zo^Ht!?8&3&0DORB}+`%-yC!w+@tq?(r$?aYG}OcdR&$_ zR1y#7dG`h_GBfyPLPKekGk+UON##V97Zfnr%~csjc^s`8mOuUy2q-@aQzx|0)7RIJ zwbRQ}DsiKk!ta3Cjpa(E>~jJWxruCH{~_`5aOX_*^}tu)UC z&R`MJHI%x3opQ--Cxr9*jg3wDSSYc4>U1L!-zsk(2&H&msrdN#u;sdGb?5!P!PUyf zV)?dbQiuZ|Pj(IFW`Rb}cdHzLf<8Q#Go}7WvW5K_mWHv&-{L!AXciFhV8iCAt~&1J zA_d$Ho8radGgA>4AW#|H4{xjpHsBr&m8a~+ztB2(u{J(~faHu3MMVWV(&b@OHcLs& zxVYf8v$M&5quMbwI}}f$AQ)2Mfk&mgGsNMbL8eGW^Bd9vYgfj-73OI3XzkAae%(oU zkfb*D`OUhlaEyacuA=>w^%dEQ7N8^jnx-S_ASV9`qVxRj$QOlE)Y#bgM(W+*^jU-7(Q3zcyj5RG)uL@u&l$3IH!`#^jDAas?m5l) z`PYn*EVIv=b4AB`7|ocP_j{+e*^CrGV)h7mob|xU;0cxXcQYHe-N>jhVFChzC?Sl4 ze2iXi*@DSa@}M4Aa6A)BH6=-nF0CGe?A+2W_t%{s*2otsqx#_Kg+U6eAoJ!#HB9_F zx_KIXY(rP44W>{=m)I*4I7(~Fkh5KXJb2Kc87BGq2l(FmPifgRLcs_ET>P)4srhvH zXV3n35e6dJPyCCkL>uBG6bdC}_qjaelod3}&g%dod{@7O^;#FgE~vG@Ta>63ObT9Z zwD}-lKp8=@UH_xEw>J?Q6sjeKkkBe%ip695?}}&Pz5PTL8I{3&L2{-Y1(Fzf+LV-( zsoRmkJ>s60>+!+D7{|O@@~Bmg(-s7bU~)&utd04&^k>q!pT|je|PBPc*7+Z z^8qJG#W;v2nnIB|I*h`JJnxO~N9wR1v0g@fY`R3tw=FFXP5#Wj*$(sW zNJx5bQZjwc-jJur&+4n+)FxTIp*qazXB5)Q1Pl}iDPz!xthg4 zh5M>}$e!zDdIY5sLs?@X5htwKdqAF0gmJ5=z^s(DZDD3$HA1>Dt>&Lm(<`;MoF!b0 z0!O7eQmv+`)=6`QAffSyF+X8`y*c%XTj9RgDdA`@94iKF-Z(dU#^2`xKsJ94gl;+*D3FR#3?7@kcm3;}faLUF(~Ik{sc5Q__eG$`{bh*Ff+y z!IGT`X-k2XzS2(yW@@Tmz5LK&2izu8AiL=kuHGc6cc&3YzARL|0DM*Ew^nT_G1&bULLW*ES zk}MhH-Pq{_I1~F7zDUGAVrll1CDn4pu?G3L_)qVMk_&!PaK&@9K5sbd=x0&@yXENV zf^beML+qKC2_B@VRu?i10mG%_xC5^a>&Ltk?9pa%&zD`+u09!yzh~W@ha#Eh%Nw9p z&mTTf@7xNSnf@a|i53+~vi_>fvEu^JJsnS)7GTw>f!t}iE)iowdCDJ?R4iW@Q%q&Ba##-pTh#q4-iwcW7C*j>Nb^>gwZ2`w zkEtFCbNDo7J(XpDUDxhyR?Blg%5JK+_$9+7?WEJih+<=I3?It@t(&h7sG>knXs{;! zhc}ibS=U)SEG#s%|2YP6+~fdO4}#SmGKzD^$>+VD&xPi2{zJ+_Se_*78oG zpgbYgth&yN#iW+rmGBdSOgpt%Il@$Gj(5*V#WCjSJ`*AT&MA(I$YO5!FI@oB za=Uu$d4H}6UXeB!cp%XmAfpe#+%-w$ceqrA)R_f_F&ZjS>26AFidseh3T80izabeS zeamrX`vqn3fC9H|<{$=HK!=lwoQc}Y0u#w}59UXW*XW6I033-0ye zSHSuZRD^u7LWH2fn!D`+76QJ(?ow1Kdw-xope(;!S)a50@I$Ce4B6BgB|3Z3Udt_s07jsVC3qe`8?|XET!Ea|yKnWQPo?Xuv z_RV0bfxU!rE{_}aWBz7spaT!QiE7tZRwKFJ(PvM>di<~u6ir8Si-M_l-+@2dQ-UD? znY)o-JVcKygc3Y`r%Stg?+!lqQ0p*m8hM?X?xu_BJ~50zIqqz-s+?J+@B+;X6Du<3 zoSN^L^@WXbb9&{p7VQCX2&s^E%V+BU%|-fWQe=N9PL3{3s2s18-tn;NE)XCQI;0Dk zZ_$rn;*dUa?Y0JCVF?XMMbG!TW+{SLEdXUtC&ro8{psvED?iR&f7=)T83&^#M2*&< z;(8jM+7VU#FhdEzr>BzCWh6?B5MeW1XKA#zVr*YgwW1yk{UIkH`ufAww7O_2HC26R zoJnUKh@cZy^Q2!nFw=IUE4}_*BJ1*;;c%Ha;*6Ist1{R=Q0^kX6c6++vB`0xxA3|k zEYCNBi8shQ;Le-?K*g(fTrT9#j}5CKO>6|cN4nY7vr=RS_s|4nApbnEJ#TBtP#FiR z(!42SEBGb;S}9q#X{Ua;W3)r`9Ra|v=}4kKW0?LWKu0~HmqMHgqggPi!M2*=FVLiG z6B{8SOe~m$*^!(9Nmo9ruKk&$xt2yf;#!0|eNGBFSPMw@Kl3A!gSX+1Sw~x_e-Hn) z3@*z*Ja{<|-`yXn2f z6`~efPNU=ej`Qe!@e;Kyy!yX%AAw5AsoI9}YWfOOb;xDr*7#$Knw{ zG!5W_K#o_vng9(k0S3A)U@z4-aipR09X3#4ljl$*bPQ9=q zZ0P0(B}t5|3RbatsgaDzVd)|`dlQ)QHs8~y@-99Q6P!4vofu}=JsOZOObH^_Gawv@ z4#UC{Mohg;x8Xhfb6M?Yf3EDb5J|z^&e$PzDuWc{mmG$TQ*e(;?eW(5$FaiJ(EjrP z2K6TFR@A?U@<^cH&6lx97r zV=T?DA%MLJ;9ktx56V`zheNT5LGvP04ZzG*%{7xw43mY|m;j~U5`9$WXLNt8tk{q7 zb-p(60l`>0F`pMYYifJ*SF2CZOpr8LJL3$%*~Niw0Zij>c+zTRb#!0x-1l8$Gw-3z zi~SYl3r=8LJG+ZA3tz#-Zwsgih1na7hQ(b+(9KQ>KS&f&AN>Ae#VcHmcYJ&1f7=x? zP>I)Ck_r-C4{Zo6F}ag!=)~~G8*cjO8dWH{o2nw;Jzx(O*_;R1M#^n7T?-(RgQ@?+x;ZKg+>?jv`XFMjxV zh}0yeQd0dnX#H7}yZ1_r#+(aO5mX%CU1MnFq+qL9Da2XWlEV}F@%(}1Lg{r|o41NE z^+d4+u-OTlH8)wCPC@ysaz{`kw~>g5CROb3P8n%E-=;t2DF#Ij-&ZdQJ1ukX_(K|= zHt8%hm*j4~xLt=Ys1!heST-Qh1T<0e%7B~Kq<5X1&V(ih!RKTyh+6>@r_PW3m0$!g z;T0!}nNM|E7EFHyZit&u=%dujwCnPq$%!+@`0gZd#oEM=1|*tHug+uWZ#qzCP$F?s zX|LtyyE zuOXnP;&X?obQS2|h^)#BpgW+g2Axd5VtEHu9 z<(s1v!}rpXGzvNX)tEDMfY9&C$_%2_wVxs?GI~NiMnT6Kqx7-F0_-Bf(93b`O=5fE z@i-%vT{$)58h2MYdh%H0dfb&=QfS^yU-sJby z@EaOh=M+X?<(PD(`n)1<#F<&jtDY%^mr9HF>mkQ$aR0pbKx?`(nNujZ*eBw7Ff8g;GUM z^FGT`2eronGz0buvVI}kxpT8{QE7u7La8y?>t$R!ms>UfFOQF&Mo)rBeorT?LEq2N zRzGd3HJt=w6KG6Esq65)m(8z&mp&3E>*CeS=TP~1v@+sPo6?t)G2fqHZ9n(HqfOa8h$Et=8 z+SFvR>qwOqOC)70SK##bAC*9uO}CxxG(-}&xsFT($hqaIVnO;2FB3iUy*i(1 zOSB6HkApdL9QHxkXm9VP9(a0P#2BhBu*TT4QuEUpsy;wNhd;~EEr^RM%oIq66^saj zql(2=5nv!%$+gwLb?3*SSxf^&>9E3=DZ0DXzfAP}Vv{7E%8J@c(h6=Yw6U?_j-~=) zKu`HjKJJkjip2BuGVWD8R@k)7@Wodx*s~j*(oBoTTgr<76FeuQUL`}V!5HVRwN~BP z+QB75Lu$W>Yi#-Co~tYze)Sr$)O+C}i9#`Xl(~4{fnbNDAPaA1g8mFVIY){E-w;W` zO<45oF#V-C;+mnr&dj*#iZKVqA2<6E9Ei?F2P-NaD?O0x*6`f>VY3rpZH6jt|p$uRllQ3u_&`&ov~PjXNO0^d3ZR{5JpKMdClSib94ryU2^h8 zDx_UIS`)<2TWjIG0)w z(qrc@UToq}(T+5Xd)y7%MVoowob(HRVpT3S0|N>fs*%=8%>#iXJ_4Gl*8~;3>H`j1 z8=*NGl)zrM;lNaAN0(o{RgXqXJ`dpxvNQh>GuXk^Ft8Y8Tp zh2zI%Q8Dl2SY#2~J2VXK@yv?QhrqsB@NGmA0d$V5f^|sWL5;ugh)B!9G`WB}|H%2i zf_P#0PHlu4h43Nsv*3=A=)pEO*=_QAK*mwGvsge|OEw>GA@93GW{q6`Kg9k|9EMp{ zcuYY{VBX_#{5ZYM$`xuvV=ND%k!@Q$BQt}AR7F6=*SpL3>}`K7w=TN~5~f?&L?#nHdT!+3a%(!iu|W{(%5-ehhO zBCL#?e1R6gHdWW1(;gkakw|jDgeKJpIzIJiV&NLp(9DZuI_X|%=+rL9ZhxCgz#8nX z?PPOb`MFjnCT?+AJ;D8&Tg5K9a=+29T7R2j{E5S_UgNYr&Frxo7Mjj$JVx3Hob-w+ z8}osHc}SIkxE6Sv&(H6!C2#W`8ycd+R*4o6>WJH;lS0R7w##Qv(q+GeB#s^ z#`F;%J&dj`l*1un(oS{wIkjAggQ!r_zC?gBr;Sx-<9Pr*Rg<~06S(gphDwFK)p?X^ zn4`B^PvNT=lKpkuy`ie_BxbK231Nit>?f6S6 za%%Q$ANL}??iX2mh(H<&%!<`W6L`tllGwRaBs)rp=3%!>frOdf1^oS1{_Fag&EKw9 z16pCha#22MC-4!c-&4Oj;^KjQsBG#oR>4ri28K9#;JjAs&*Nul`Xhrebc5)gVGVPZ3 z2HgIiS<)f#VklVCh`GAlh%;ceapm?`_SfHanj;eh;cj>oH?X}GXOz=p`frf0?#F@} z-HkeQDfsT{PfGuPmY)8Bl z+1@Ab+Tz=5C*T5u_}XIZ1N8h{zf1S|hdCX+vkIvD$I+^NOV~KM=@}Qe!c}lYG&k5& zeyTOn6KPqQmHg`ME51#ELSpA2dl!q*C1Xu_rvmbLU5g>G5|pg4(DWsj+AcOo5hK#D z<_Q5n2!Fm=niv#)7|OVbA;t|isYWf*Daf_L)*y!krRuk7ny!8sA)q)WB2W;GWcgbl zO9kfIg8m9qDsi5G!-j=46Dpt&lVBIkFmPCF3B3CAy1w=<}VY%qL?kWt!C)jWXMK{rW0ChSt6&mLM+) z8&T3NSlazHj4s{tE)99=w0|L{En^aDVmIC2 zslPhOZ1iLEYqV%UbKWg)i8YH2dgjh|g9@;ehqpb@08A|dS%lmh+vh%8?X~1zq7Bmi zUTZH)^CoOHew@*}>dyf^YsgjuO;f$9JeF;|1PLHwQ&T@SoyVC3%Rz_Lv`~Q+GONwJ z#vX^5bRHjPCGI?WVB-y!R{4FM(ZI*)MF!v5RC&u^p;SYwd51*bKSB34H4Vl0B%V>h z<_RHUdwL|ys{5IqW;f!TI>?$I<|`Euv#rVx@ixNOWnKMP;dXqI_cRaD;&+Gj8pzKv z(i?$0zJ+R0>fQ8s~-ssK;@IhBn z(;g$uLXplrt~;NZGdv>s*M(bh{^p@f2HcU)qvA3yvG!1poaNU2k_?mC&sJdEW9ozM z)_XhR*;gHemGh#$41dIe=@<-??3iy`*c<8ypqgW!QmgfCz+c+%HW>&H*jn?*2aQ*X zuH{*>Tkyi1B!&2R+C#4EU)Qs}KcPh%+Ca}=0~7%8qWWX%8q_#W5{ey{&C#*JRdMV* ztgvi{2K0RQo2{0*q?bl_h#0QLmw&(6k{Ub{G)iPO7YfT)Ft#82Fo%Sp+zX9f#tLtX zoC|s-I7qEx?@7wlvvka&mwj* zzOmHT)w|Vt&DG}S1i4W&e4DNf=~e!>&m}|=JQFLXB0_m|NK?fMf(z%2zS@p##_ACm zS0!1)lP+^m0b@dMem>cfak`BY;{jH)y0eNiUfm$!*|E0_Rp{3&ZxoBlF_Q5;;Edm( zWn2IplEu2^w>JtEb+>&;ZT$BnJ#N)6$qTK4?GE(&*3>vj>Kr<0)>JW5PSu$HPRoz4 z{bBSCUV8a6{9$TV{o=b-oQFyNtR<+=4|%+!p{ORXnG%ZQy{N>re;ys^=FQSQvh)9* zj-qv9ELQ7@@7*aJeiG`jc?*-G0Z-S>?{;Q?LGV%;P;q2NQ9Gb_G!Yc(V^vw~T7g}^ zGyq8jAP(;CP4|m)ox5NlhG1ICeeK1I7_cOZ-F?I)t z@1Mk9+()DsU^X{8@i&Cs8JxT&R0y7bU1y7Oa&ju*U<=Oi*XVtnr;P{p*cDrfQO3Ai z^m-&FRvA#N_~y^i@BKE_((2AlB5CtasJiFvEjtPhV#Z>cZZ4-z5&k?W?urL3^ub*! z8;N&PC@k}BQNxrw#_QjvPImd-!9kVreDeZJp$jwvKmTBh*0#v3lAz`{Sj z*z991VKPcsNu8~vWUI1m@ySqapbLHqm(U75xqE}d(;$clE(r6=@I{2QW>c#bkm(|of$#ykw3Et3lZ<@f$ibrjH%i45GpS0oWnLueZF8QPU&KL#jU18tL~JyRUV$^&?9OlBFb`aBQwjl>B7u^*zks z0MrTuAn*p3C0k3l`?5otxZIXH&Od`RrP%xSo>t9Sg~`@_Slt+GOtzN7!4CLaa4#+v z8v09xQAnZv*Q9@{PS+#PuN-PzCYZmB1md6G4XG8&=-dtngMRQ}w8{rp>0-eT@P43K z(qY;9VL23Hxg?!Gp{XBzxzV>=5NW6q)bpUXBKjA}Ew=>`M}8N4Xq-&6PBh!}(H|IP4~%lKhEcDXGd> zxV?8GUmENdYkEnm(}kgg34Y7GztqZJP&kEmOz{tIPJ)y7Nu&STv&I z460|aoR)@XmX#=*ITO-1o0A%(y6K0$hw^02VAT#=XVdK-nV=iDF7Z`CRY&?zFv$g8 zfY-WX9C-<312S@wDc!hf4o&G!D?)-uo=m_`O?2dA}ECH z)muWqUcG0*FBrUGFog#!c|A{Dae;>GHSSnVQ?*$H{Y@hYMS^&b)go4?J3bT|^%X>u z*=*{_$n3ELor7_ajL3W+z*n&9h!{4a=8?%CfE{}xqcQ}O(oHFrv}}QD-|M%q><&l$ z=eD6*L7zbt0*{A}BOqd3WUu}^c0+~2RJ~zD$Lhtu-tt?jc$zrDIFQSO(+lroP@dxQq=Ob0mvQ!0SW@y?l%9pN&vs)!e&14qy(I2_}VOROFw1o--bRT z7CAD>HTK^)fe|W@8K*oJPtHvX*uqc@jPnx5|F6yE{8gsN_2VSsjH&^lWE^q&(QI;5 z`XC)GX!+$4b@5=b%CwMhMV2;_Q3aDp7_;`f=LQX}f1e7jp#I{<>Z?KOhq|yaDB%4a z3W3)18-Bje9P;G^`fK$C@lwCI)3aS+Thxy$T-u%{B|w1pYjoER;G^*>Z*#zkIA48$ zcvH|@U9tDi()^yh1L~Ia=pV)k#28xbo|R;r8E1a?59`SX4dF49sI)Im)Ixx*O$|W$ z@&8Vb&nzq~Mku)74`n%YF6b#~Ym=ZR0M=gVn2SOzFAqqHmGA%)TKA1dcur0{5ZvzJ zhk3`{#H5wu}Vpe#u1$|IBmA$UZ( z27I$A5fYxCvnrzdK`&3_7``-5Pp-H}A{gwY27Tqhj7Ez_JYp<98)~wE!d-;4qH-7K z|0Rx5459Yuy=cD%wGY+|=oRHQT$RS-P@=m?v!7;;_vwS&SDL3PBaXpC?Fhn0zqeft zqtgjbI>dwQ)3hf?(})wRi-#KTEQW-DTXq@k!Bsv2{MXxwtZ&WDW6Pgx4shj}L2*+R`1=Cg>8ks#vk;z%r_X7f`3S@SHUh=~22 zbpR@YtFY*;U%>U5ysr!;xUa4xg@+u7@maWU|Go8wEy00b&Dp<~52NrCq#vB0gLr5% zKhzF$^}dJU5$AmW0TU}TFwAXJk!)7_+4D<^_kFT=9JYRAwbF)b2pf8&-$myzQ^9OG!vZkP062^p~DQM0yPU7bG=LRv>f&whQEx& zmW3Z5{DI$O-bUltHQo=1(x-HEyj^vjdT|k8K7_79{8~CsQ$s^Tr48krUZ52js%t#M z`ISMYMNJI8Uz7JG<5Pb=TS>c6YtM^Mhtb{s771Y+VXXM%Zb<+@D5m)>9$nC>pa%p> z^TdtO$fAD=l(1FcUMEhKB}80e2|@)ntY_WcTs&^}la6E_U;vF=v zJfW?l6qjU-KmsP7=xp^vDvXzMeHkaMQ}s1Hkl$fz?2u)@-wHB$`AwdF5CBI`{^~ID z3s~n&`3KbiQUYKv7aBL3U=m4G zkx68OqTC?OzVYleLBEF>J@9Q0fGEK3%u#YawaFO^Ay;u16x&u|2ZsqYhaSNNdaly# z^@P@QgWU%Fd3MnNQ3RKmwc6JeTOEgcBzG2iHrdZcIq<$DCNiMu;J~bw$OfC-PT~Pq zbC75}z+ZmK>owPKacsn{RInQw(8+L%W^S&&tOZ9HXv{Er!I(?TT6%aFH&(O0Fc)eg zlkL~Aek+Xa(rqUn7h62$WfC!6dnQX>HG);PB{vI5X`NFk;$K!E>h*09tF)eLQ z@bw9;V#BXd2tBz|4E6Mg-BQy}6nrD-=@V{zj1F8hG~Sg(bfr@vqGLsSyGegFK^zN? z1!W2CS$zk(Er?`yEdm)x&0+oB?zQT^v$7F(CZE<%dv76*nTY4JaXW`{*WR)SU2I6i zL--C3EK-grm5_`_U?uWJKmkAq;~Vpzsi>BAxbq;TXiLqgDx;GXp#sWTnInR!KE;W3 zKv6$MW=+`q*E4andj3WoEMuW&k%t;kS0vXBkR z7kTLO?9XtT>@_ldZDXIO4=sSPzO1#4eld|(P-~(M5K|j^B|x&6}CPe zwl)8V4SYP|lXD#Zm}EJsSX=4q%g=Jhj1hPwn1|*uO9z@t*#*&P{27EfN8` zyC4%BonCA^Y5sUQpksg3Gj`a|Xb04^_Cn_Er`U>1hN&{#6HM7QFg|{5&@aQF(Q!Xc zE$46sH>@Vx>)a+zdf@$ueTnChpi-lAp%W^1CdWVo{3FMoI4=nVU0&SM^86eFTh`bM zHQ^!RiTnqJ&(eST5#RvSKTrV_r2?O?8?vLJxw{#>7sL_bI(u8_+U1U9{x`1b6sBAS z2a5oE{j591EV=1tvGaooK7{N49w$f+7vOc>u%|lcZ;Y^EfLO9cTSAa8oOrF?G=w|P zBW3SH#nyc)7?yf2&k54H{QBE>PqrjCAA6(HH5_ZJ83OlRG15fg@no-dF@eSsybbCc z7}V@QMxOkmUXt@A9jd6`@AOzpmUQ7ON#_BddtkF}JP-SsM$=FraLqJR<%dT4a}reA_ElEoWnq&Z6jsIs~UvnHBH)7vF@LR z4nM@}9uBM@7Ns3!Mk-2S$v;gs{I$N|bVU z*zeS3!OAY~&>yK0-F^}$-Rh}X!}ippZ}qBN5tD<-^t!ioADBdSVIV%1sXBDXX9|GZ z>q0AdU^$_Eg)9VDw!STLqjM%TRtpmGH@h0}2J~(mT@{_%T&%qW41^ z)Fg4@9Z{JVl6;-q25jR5lHQ{zM6aF^ZV}>M0e-4Zsl;$$5A(n9tlb|qBA6u%LuOq{jRPh;B2mHBQ z>Be4t)EOsQ=Glo-=6H9(PqqBGP*EHj+qvknx}z-ngHSV!ekr*4`t%xF7%86fs1PRiZ=FmDyp5G$8lk^9p^Wj(`mHUk0HVXYWeZ`2*kFa6P3&#AtC9qiU9i>&(b#);lp8a zhKF;?<@rl>Ov8U>i?&b(FY_gQ7bR#7s3f3mD1|g!I^EHfNQ5NZ8R@T(6GZMNrg6OB2%` zfWNw|KTm_mIy-^DYR|7A!X(80nn+mbBr4M-!6ih26l=HbWPp|$;019h*5d89MxM?_ zK|69>Y)V_*y0nqU)Wu54xjLYwU3RHf)=ARq4u2&HRzUDh{ zGI$h6n>Q>==a-TBq@k`Z06c~5S_d6atjKfxa@5&J+XNnE#Jac_$EO@C7AFQCN9IiN z|3Fc`pF;f0(oY`Wh@}3YDjCW9_~e4}3i6-7wR1sICeH9>iy>S|*7{=o>jY8HAx6A+ zZ~5rVs%4DvqXD+6Z~t9!)qTkhh>%S8dR>|ee=fIy>jvUi_CkKAZzmB@QT9EEosFeFAWElylux3W1ITsGPFR3OF)_*w%0^PH08L%+-=(k`fM2l_1ZJB118 z15O0PFYQWY%8uZ($K;`h+P$2qhxb^$jEi~FigdLa91rXoAUN3d?fSRUFMcix_k;!m z5k5m|=a>uisR`Y9Ec*mhe3C)HX-87x4^GuT${X`{w`^PN z3z?v&fOv)&B7q3hc_j)7M!}Cg&&6K2F5r4Ne&1F7Ac%72N|Lqq(*!>Yy&BGxv*vH^ zBOJ@MJR)h}>N|b;lIq9fqyI2zhUE1+Lh$)>qatVdsy$-WWjjBmG|%N-uH);;AhnLWxC{q2phw;{4|^i_M_ReD+pKdl4L^5?5oL+*F^u(hO?vHNFdy8aiF+ zoYYb7-^n8+qu`K72so^w) zac2@Nt8rrwV!}77jxx!HPeUReXL?JCe~@Nv@9ygDxuCcLZ%ai52#~LVrzs3WSG*l( z+n1XqNe+~vIf)4e%HLf_$_7XNW$FRAnVzJT!{tn~FV?{%w)FVqiFk+(nFXn>TNO>s z<_dbzHD4i|j&KT4o&;tn_Xh)dcUeg!OcwHLZQB?-Y>C7og3@c6%RyPebEkO|A93rk z)MTe`u#S5`q!bnwwms&5DKv&;{KrHh=PQEBU1W{SPbNqe$*bU8b+#tgqKe{MaX!sU z6UniP>wPe>M#mX3Uj<3 zX5a4adWs8qCnp(h#`HW0w`Gqtzgds;*c-^xYKPCx_V#vm8m+C(!EEJh z6Al2d%L)Woz5KCRd$Nei!Mqb($NO%Lb3yXr^@%yQE0Lwul+M_x#2T;bcQ?n*ZbmG( zXE;vnC}df(or~Iy=U|FY+-b0rrAwYo=_-(JT?>b1JpqkjRMO}Ric(AefG!l@>hmn=R zIXEz|Nu&mb5z$Lp61tXIGxgn^`)#ANgcBtcP?if1ud*n8{M5BHYc3RsJ<$l^7*db+ z!RDvJ#>S?E82Vkz2y%0ew0da$0<2L{Q2ac^Dd9J2hyGh^R5kKgaTDa{cL3lDFf1Bj z(33m{`Or<(0%dDnbtq%-iGXf>rMd6Xk8%6YHoAi_Q2^UVFo2AUTc6F3HEY%Ho9S8G z*A$g-*KZa3eXS|HTlN|;nk3)`6;M8#Zo(v2v53k+S>(%ab5|TvjD2NPp<+(Pt)BZ4 zlX4lkj|Wo>-%B<9H@EywulOEuE(~+pt6EhbD-Ng^u8!ZOia7cftsN054HC}d zamyJ2q(DCKva_?Zsh(b@L5Fvv+0XG{ISW@;VKa=)aQ~%##K+(wxd`DtYA!o%@n|uH zTZ4l07{e*LR7o7fbwy=R%Lg>G*6f&lHvjDeC39KrkmZu$g@CzW|ud^crAGFLfIUI2e!%`s#VxbNl6 zbq&kR4{u--R0J0#(xeuCFsq*Q6J|&)d-p9?JyrdxHoHt8djxwC6pJg9Q6|yk&s`C| zUfH}#bA}XI?Kx&+ga?S+_n4V6IF1H6NMrS#!6;?qvQdTS&=iW3R5Uqd53SSHWlw;> z%wV4Z2H>V5mxRR9tp+zwIL$g5q6Tc;GmegjlpUW z1~aGs82C`_R{SbAK3PKcbtF^6_WLPc#@|UKF$(?fS7Fc+Unif(Zkiv47w%{k!Klhh zw;C4Fs>qVPqW=Llre7j4S2@AabKT}dj+YvQj%6tN-KSBPDRt402*y8gJ&Wjp)8nX( z86Yf$n`v+78`h|xDa0G?sA>|AFvB`|TOuNufuKdg?iJBD_}vRi1*WF4Oad*y?Au>P?H{B3ispew=L zhCq5)!@44zFuHpxLoZ;TPUv`;XmClmv73cp#3S9LWl7>S^xbT!3fa@V&C9(IF=DL# zatbsJPBdS-6^%E=w~z6y8(n$$kkTNcnlKRX3>)t%f{3*i$+$kjlNm$BTcOXMwq8#i z7W~(DU-gqQDm)q-9bVCLm&2`^$)=?GLh}bquknFy;dUtbK5kEA*n&7GHBKf#<)4?U zioe&OgtOJVW3!Z8z7@gmdt;q<8dU_E=nv8#=gMRb%7}{^tlswUy^?5^4j;o2ocoW< zfZrx+ZM4ejvbv5!g~7HB7xG%Y_!VyE(MkJk1G3@y?z}ROCvlZfg{f~A1Fx6>B(txC z%1M{{J_Q!gvp7}V#+#uE$gcIDrON%K8Te%P7db*y)n!xleIT>sh+P86T#I$~C7FB| z2W(957XX)l(x=L|n=;W)JZ7W9^H3I&Y?WR7KK`VC73}W{402WZi_G~rW$N^J;$7X5 zN7Cu1$A^~t(A%h|JZdRchwo1z2JRM)j5^((rLJeDjjel=%h$3mcn}{|Mp9mIK4=y@ zaQgLEQhj(vPi{p($>V7llHiMW07F4YWY8S$E}aX-19f_0-#*OmgaGv(Su6r9MnX&| zBY2vRTMCB8C;+qS`28hn`*df7cO5Cfuh%d{(;)qHGd4m<`vN+M)qL7d^~qKpx%T6S z%6GpzcN@KSoxG=mZyx}5CKj$fR)s#@c6t@Ux<2*ZUmBwQXlwEhK)4Teh@(+b!Ilq> zD_I4ktqsu+*n|gz_nr%apBm5**F~9n`)*MYVUFl|ewPcW)^A?!b?nz2*XJdFYHd~fFBom~nT(CC_Y~o$ z)ByjPop%Apk*cw%v-#s>^iTzr5rje8$6#x##LHGNE;RswyXmr}`{BPBcDRB*c5{29 zGWudx&$``AZ1YZixW+J@jNiMe`SWksfuA1k6rAUfN;@LF;pTzIorAH%pC0YsKK{&o zUe|JB31eKopWUDQIrx+kz_16asjTE>*T`D=x)Pm0q?6FlsJh(^Xr}O{FFdZ~3nWOZ zdbz$H;2U>zC^Ef{;sRi|RbpkKfP5tl`bRgNy>JmpAzSjr{R}yStA>?A$^lk zm&`{>Az+=O6?H0B%$#3taLnXShYo|fo9p33^+7Yn%7gS|{w^my|N4iT`!fmD`nZ26 zZQo}g9{Kkq&i8biJ4X(Tg|^;2buc|0+<2I-bePorZqmjMaR3?xu@i48xOi+e6iX^Wfbc{a_kDN@2!vP8d|A7FDpOaHkD_YMl|ApO ztr+{At8iu8ELLBSlQ>PZU@*G&w$)HAOYV$oz&Ha+DzPoy_* z>LIpdJUlgF3TbRt*oQo)J(w1-IZ<+yX69Jh;1rqCtwgyL)kpmO`Oaa41&X-Q8V_yTg~~J!kSK*EPvx&tzt= zwb#03=!LY0*Vjv1fwZG!jM_o?pRML7uyLB+uuVh`I*7w1-M$pS3n zk4r)RDuIu!T_nKOE8GhGwE(SvTaz)h!NNFs=rB&T}S;_Gm4W-p|KMo~auGHf*Kb7CrASYqa zAb5YEzSovYDw@MQEf+&KYWxr!UFR~-JiTFl=2}622p#Ul1rRnQ81!RiD&(ms!MOh$ zkrm;eVPQ~s>D|c^X}Y7(L!OcVwdil{hp7urIm@or`tA0((?KgawSKvm$A+h%HZeAu zfX#;MS1s-~1`~15$%mJU*4x--|CUe*EyVD8eTlmti?af+N2>RMk&v-QJX6?$6;8pv zcIfa2cZUC(ZdOEZZ|H$=p8@Cztf5zmc=e-7c|zjV;4p6Un)`DkyXTw>VORc@K@=h9 z&bZjbDj(V{1})~)h;MLZF+(>JYT<;WY7jr_!h=v8O~jAelNCE+Z@CZ~qHqBzzHuRf zB>^l0_~Q)*3bE`f`S0w;EEZ9$`AhuuwU)uk5x91aLJ zfk^A)II3Oh4FrPR2WZg*Lhv0w$|fwl27{ zO)}=wL!O6^f` zq6VoK)#8GtHN?r9TgyefP45d541<22r9&?B9%(x^V4AUJR~i zK1bD`c}g)1d^{tYDsS+(qv3A5zF+e?*mw(MT0q@p0{QQMiz*Em_;4UmvcXz7>{)5y0E%AAenAKgLj?( zkorem{6y;c^PzByhh z3%H-0DFW(KPr_kTC1^Xm0;@nwz^R_^hu_*@@8$rZn4W8%u+-F4-CHW?9)bL`#i58f~1FZk4K%*V}uU=%UDNCx9nB#RZR`==kcWB36hNJJ6 z`$4aO1=wiut`VtIj~Gvko7?2o9xvd;;yiNiglpyQNQO)7itZucLIg9+F+jb69DpAb z-oOYI2LI|1LZp2f^=dUg#(Dt0weXRvF!K0Zf_zVmQm!lX?dsU*j|aXHc36X4o#Tqo zrFe?Sc(F!Pz)0%~8ZLEBD?A&*>qhQ8w!cA=Bc+x2L8kVrED0Dk)mdcO%-FFwL8ne; zB%qGPK2(Nw7IB);>~+7(u*SZ0_fVw{7Q_xWul~M4>?4Cm+q^kzMZ@jr?MXH`-*8ol zwJ%HUdEe6m-mh#|gng7S%MU|EA&Z~SfESZ^EPVcSe=0F`uJ_$#zdO`i3`)c^(G5yW z(iz7Gz1zC^Lb6QLpysSb%MJ>TdhGs$A1L-OY$hIIu5Z?5bNg!3USXMHg@L72W_#d#W>&5gBcN+%sd>Id^|r~7fxO@OZ0mHE09GQNsy zXvN$`fDxCk{{gVn?YYU>Z{2(EpTETw2}y70G<|ObuEf!8yrwN*<6Qe=KLu?;Y7tPR z=(B+O_Ss>g%Msy;mC&ALk?GLhSr0tyrRV#{E8%*To#&_r@cyQrcKxi08gr4Mi2Iic zkgENGiP3bN(p^?owiFWeU)Mo*fmJ#ZspA+EC2D4kQFWQY^Z0qd@z7f(gI&oTXc~>|)q~iyMW@WoViUSG#@b@arX4MA4TZhZNpZ--2S7kJRy#7$kP7Jm3}C zs$0GD7q{UGY`53>mqYh~>6472Tv`H~Xwg+Zg(p8$Scp`q8w^s*$S_J`^m%>09gDFF zE$N2`xvwoks}oO@B{<^ucwMHT0t7e+2~u<%-06IR551=sg?IMb(pwY#y&H|pC=XAI z8rwBvtPn>THdPs(shoo_;3-uM9)PZ~?=XB4Q-C_UQJloE*5(K|!@>U;0L92~B5z`# z` zsH6KntPQ-cRuyl$)Y)qO0B8G!x2TpmSIM|8|3(VamOBfcJgMvdM`>n)NW@$qdIHb! zhK_J^X=`X`c1^aA^V*J3_mnQBDKd&2OK>&UF2nfUpzc8|dfTRm37Vm;@;apFK zi;$MWiUXrT-Hv}uB<=R94mQKe!JzJw_v?>^s$6~-c6agcJ%b?5*HPDOh-hPp`NUj5 zwrlS7L|&82g9R;`Pbt}7&`rZVvbc1W=MEzc{=wO&ym0a*$B=>VgZ@R|V_n2CPA@N< zcWxiDSe+tX2Y5%ge1uoOb5k)?dil02Kq7h9XsPw>TkK0Z22!{Xc4O5Vg2+?i);U^u zCfZ}7P!OEZ8P12BfCc`K`Y7T?ef3lsx{;}c3Lr+9h1;r88Byss=MS#Ewj@#~?#!Pz ziO>7gd*DF3rvAhHkLthUHigrLtojbgw1+8h7 zzekKKfKbK}L*F4pghC`pOI^s*5VSWs-_}KqA#igN#w>kc` zlKf&!0~l6Mhfq=^;FkwF_@Ly&f#DMmLFYfYa*=ZpOb8x8n4UVDzwY zlYvao_pWdo-BXqm*2Z0OpM6UgB9_mdDX2;&77Xs+h|dl%SZuZ(Lq2;93wn8PIWn?j z$-d>Q(9BZ_BSF%edYe{o{&Ct7q1K+dtZNdv;Edb0d-X##iD$~Sb4qCp)m6YkP3?p@ zu=v`-%t%Tpov5eMWIhkcEkKZ&hoSPr&o8ZC<%n{Jz8%*q-rphf8e)C(BxBYxcOjHR z3R`R>Rj~gGs8q*zvukCKwWlNXRkvXf4*7YpHpO$a@WU1f{+R#?uXW$AH`1+aspI#> z2QaXZ5ysFatAEY#IT4=dEvsTOK9`I<%r5`ikT3>MNnS7!5G<_$_Q=yL9cFw@DV*#y zydh0Mfl6JdzFl}8NSUt+O8&d^`!QYnkI%btzDXVYPxhpXtX3RY(cCp0;WHLIM-#f; zxPg_g4%Hmxle*GK^+}I3W^I-J6^M~{ZL5eN=@P^z5>ByzQv7s>U@X9FigX{rL9jD3 z43GBvYt+&^T@Z?CN2qN%DM2@rKdMjBZm3>>lBF@Gaur<)IK-+ zX$n3i$U~J2X6n8|+%$`TU_*n2yI(r8W1%8%@=!t{!)PGncV;G)xI(QwlpyK+W={rW zdXH!Ljp>YqtXhRTpI}_U6%x90yw{5bp2ss9$h2;jbcHwUeh#k%&*a8>L!XTQD=4rM z;01Pr_uqp)J)Rbo!5*KWT{Q+*2#EB&OY6P;SNS?MnH+@(ZDIWNe{C3#qo);Z+l?Gq z_UZDov>VqTAP(ME1FH|4{ZuOj?&=4KHq#RJ149&r&-#V#>qh5agO=%M1MX$clYia> zZd1tpCfU5xJg;z~#EXbp!=v$clin6N&;Rv{&m14)=0QPk!L%~CPQxLG=8?D5J?|aT zj?D)emBT-rKVjN7dDw$$*wq7mD2sRa>w6hmd8M1-Her>HKm)3ehASH$Gw zJPMF(gPdJ&r+DvqB=p-xRD|(ZNYn#Nq{gAgv_M^rFJ{z`*uCw2So27-A=rlnphR&2zZS;X>TxR$cq)mQjuS=UPg_tC# zx_MEde`5~r7<1o3HJQ^AKs;%go=K%8UF6lr;5#fjuFu-v@o8OsU0Ty@;=WHi%Cr-v z$4f=p6u_LtY%A|%+^E}4Ma(zhWFC-GuQY?r)u&V%k<(>Ddph^L0;ej((6Siv{l7K9 zF4K3qwe+Day43^;ac4-oh-SzrmMtim$B~_jP^W$0rPs2$d%sT}*s={YEj2BRHtWw5 zMXI^9NURbXWDualclK^xI@q`}&Ur>K{+o|@`JYwC-&>iW&z|K(TfOC7wDyg2$YBEB zOp5qKE_q$lK+ibHi9|TL?zxps*j}#dE9nCbMKJ6N{S}{Hl>VvhJQw_{um{hponLpq7#sya)lcF600zHZsC83v1f&Ay8kp0^@*Q_da=6S4y+4;XznWEf^&4zwKMb z6uku3Q4yJcbuvVSCLGY6gx1k&Q$Oo|xwl^wKp(J2!{6!dTo@GE(FK~bW%nsIr zi;6GBLuDFlrW|zt!qtDV38QWDi|bFrXyCX=h8K=+{LpC(c9QSdG0S@sDwcom4&v@! z9nb5n2j)CAIebZVrLW&ljh!O^aJ9i!5A8K_v>b~LXoHg>e>ac^0? zu>m}HnT)1Kw&`gKb^j#iLVhqrs#|e1Q30s9$Oz*iDmBCf#$MOaR%Pgk=jfE1=>a4$ zYK@iedeF;Z%dm4cV5FVSFf&V7`h=9uA$bntczJEzJzN-i<5;M7Ugkb&a!N5#|Enrp zqAX%yW!lWZf%(*0hY0&te%0}%=!4vE9W+Jf{jMc{sM5CjCMHJ=8E7rdhNkCbxy z*zBH@RV6OEX6}rsJbk}wASbjuKHPjN#004Qh+%a%Bh#q78*(snxXp|0v;9hvarE8t z5FL0Z1(#zKMZWV>7nW-Y>8Hu_Dn|{I!*z$NellSLwzPSfbXf~XZ?Z`L!I|owmzIwT zWWIWn4C76QDL9@$lkl0^RqG!9xLy~9o3U#f zmtNgJ2!B;Ab7S`YfT`;ipT<7VNPTx0^1$j|?~K4wYjB`71t~j#?B$gQK+LGztr712 zhmzj5&_cZ{Z8`Rlo=!%W5MbD93KS0C4^PyIhR^x4^ek=|n0=iQl7(0bb?k{r%iSBT zHowqh@@TMrsR5ivQkz7CL!SqJTo*01s{K55m?b(C_?^F2IE1N0Ylk5ISP;pk(lR zfZ5EJT5O_$rIS!k1`|5y5QEmusPfM>Fzh#0m;wvgTa&ygyB|%gRo!g=RmB)D(9{(r zzum%|6J%UOdx-c=m;%qEoEh02-mp+Iv2P+4E!jx0eu-2#?WD!zD;$4^b}%*rUvUVh zGg4pzQVn@Oiiw6@?!O%8ybO2pw!JYv-iLxP;a+52cgMV}l&08!KjRY6;xP8d?t_2@ z0F!~8yd8-rJYS=0#ganBX47#-M)Tb+w|d!w{i~LtPF^Qi(#iu@WM{JcpTrhd7r2z^ zNNOhY&?W-A8DZnngp&}21RaV$;pNis!ID{z!T_I69inu3MS}2dezBx3{*$)vkQ>BERv}-QVZs>UfXFqE8jqi5pKL!X|O*8lrAtKCC?e>7ZH`|1sF)q5*`_I;C+ zlezNV)1~B7aGsq@3!w&6an8HcF}bJz|KH;hwKVonJhz?vm(4ZFH`gGZBv=+a-dpwb zSWnfZ3k6e#UvuCAHAD73W_v{o1zId{c&wlpW&RxDnEZ51v7}Fk4oEJ>!J<~F;7zZ% z>nYYTuc4Wl9>uw&gx5a{E^~f4orCqUhin!|*d9a__84<+e(E)u*-*8Rw_AVp6q^x}anz3_EUSz4YF$9)dWY zUypO0tPK}@deJJXvjo|4)h*c@k#md83c2Xf3veI61F;jF~jcxdlYCr$x|J=c}+Dl=fPWbtkHfn8yHjxHX0*jR1NU=6ejkdws z*S%rCw8F!ziBBJ88*fK1+acM1y-sr9yX`Ko1&lpfnVUscz@P7f&|`w@joH(_@kNbC{O-kGCDO!>iWfRi7nAead`ww{j}dx zi`rS^CM%iOPnfaYbPzQx>|2XcA9i3E1p4f(%t5%+sd+v*nex(BTdQ+AH8HVa!ArJx zJ!j(OxYAgZC!jPtG&HnWjUFTmCDqf@^Gdw#K%?28Ypn0Mh(=#ePbXPf^}kfXE(q_) z&KBL;r14G2yWZm z{TN_)gqx2-Spc7q-|JNvGXiHvhZnft8wk&nMsfd0|MrU^7&0?!X=fK;edv@UX*X)I zKNB>H7zQ{2lx=x5u46ow_Pddh0&SJ@uNUXV(mP}i10qp@dOLhAKBko#r9L@GE;%xt zrdrgXqe`(ThQ8)6KPyIfom$=OO03IIJB3bbYFmi%AoW}rEFyKmcp6J*wIYlpT|yOI z`BkfQax}DKbx6A(n0oo4=bz5RT^|=>`?kn2M|j`0t=W z__*Ut_%6|?serBv$pyv0us`qD(GwXi8XO=l3LI%KjFTzD5ijd&lEahHyuUEeieS4`9Et;*Rxj zG)mxM(QW@E;+QsjuRYP7jI&(Red&`h5sxyx~b^5c6iaZvbLzVJ$X)k_vFF>;omiM&5iGCTgP z#8c0E)h~h?=f5mF^M8I+lm?C|4KgwvF#$D;I%wOtY1-F=cbw`!wDStuaYiI$&b_Mb z&%IoHur{lQv;RpZhU&n=@;l(zUQdhfKg0pBWz*5;U6T-It*VdCN1TOPy z8>eJAnqQwv3l)m>meDTOFIBRPD_&M0#njm&knGv<$%8;qU@Jp9mms)} z#{Cepgn8@S)?fdnVW0S&WH`HHftyR9o?}B!13qU)b#(YoR6RBm=y06KPp^ENJy0&v z9JYb`Yk{Qk0g3Lr!i=;aD-&-uWlky3_a}khp7K{z|5iQ!h@*!Q!N#}TX7fw!D|;)w zU`fsp(06~KjvK{=AE+~nY~Th^u`1{dkO06gsun*e(ldkFNh<^TUi@x?UTrQ|&|=K; z&{sFm`FBiczWo0_r<9wcjMIVs7zUQtQRR@^%di1c ztorq1=VmA5jWW%H-wOw#FK=4kU)_X2qSiQIUxQ2Q4b86v?q{q1NIRIadCKIt#t|q&?s5`x@={ zWFsw~nwhCaB)$n>OM<;GcU5Mw8G*au5N?`Ou=lUGCQZ`7JWG>1rOdUg54~Ps`8iJb z!`M(O@+FkuPGVB z)KqGa@&`^;JB;yGrP;i77JPFZND=Gr)q)g`b+TPSX&4TvM{o#+NNjX=hL$q`ormg` zKV7&W2qDlE$H8&BI#L@qH+8ECw|<-57)HILtE5X6MomA4#=jw9z{d678n;1FvXmEp zYSPZX<>7Hj6oub>Y-pjdkortip8zDUgpfK)@H}UFE0sRZ>L^;+#d0*(yE&ahjtiq~ z_jfk>lCv?USP{h~F=ik5RD=t*f{O>brL z;rfFM?Ch)5mzd&E66ZKyiDYbe!_dK01s@;-CLrn_dkzQKNr0Zj&KQgmL_tn|b$I0Y zcynw7s>z5S`|`dJF&@0%l!YUZHfQ-cMY8R?s}%qwJZ#2=@Ljq}0Fiq*n3Rj2R7BF0Yu~AYz>K?AM**{Th5KL~moAROrkx zw_Schsm4m%+~w5ZX^KbE{P6G~I@ZApwax;ix7M!(`iBLxDEa_Dj2BkyHN zB^4x~0Lzxu@1PQ*J;iV>X6$I~S^ z7<1b3IQViz!XGn z{lVy1>+n_U4`it`@~2u@Egq2m7fQN(JzsT-WH9Dx*Kw9OBQRa8kWT@pgZ=3qAP4t^ z=Ir@;Mhu*-qNLK{+fYUJqMY4!awYn4JES2`B?es0ef|nawdF38L=colBV|8|o6BU` z)GSS=prFvX2SUqb-@SXV54e^K@0gURRB^-^yZlMPp`xmqzz(7`Q&T6hGd9NqkVm<}Wj zt3@l4B@>aC0w%b=8yJY_|;#eKm!og2(-D$b}6`B zX1KF~{wZ`!dS7fStf&R=U9~-(wLb@(FRhirb&eR-4N#WuQ?b7?F)=L?0Z0EZKNU&S zyC@iy*o+hv3$$xfu+}7I3v#tRU5tt0tU9Oi+Yb|rMf#G(Wdh>(S916i0d!Jj^*s)Z{dF{kKTLU*s z0GjizH3=1gJ^IgmOP05M2@HL}GnH}2f0?Mlg$OblUqd=RmzQ%HyZ!!$KA~WnRCZcV zQ$3@mq7qXp!JNkzQ*v5K0Ga5l&beH6dY%2bgA{AS9(1cWS}PuC^jKSExg;FK`~9&< zGk`MSh736ju{Ql+nny{QiqQYJPczNHj|IZkCe^4J4__?&o+IqyY~6AYPMBx3*CL0VUYKeVX(}me_%m=RZw}!#$EjAvzQ&47QaHAK8kyR&-X^%5kGlMR<_7V{n@=FEt&E^mKcYr?d>H7 zom91(s!2%T;dk9?=j=Hp7qG;_7n4>xIqV-zps4sphMh7jOo&Vr;hjcwCTW+`T7A^q zFW#{TyWb*363R>hSD~ms!+4gjoX)=8T}^hXGiVANciEPI6e5T%h$U2>sMa==5f?YQ z`l^1%9uK00cbh4&1HYKqJR6zgYo8Gn-@by~HcNR7Q)#_PxI{lu-&7d;9u)0b@D3sB;p-!@dWpD-@l_H<==J}V0cb<)RaWRcgNd*Ithm4@MAqiUY3!i%t0%Nq;PrT~i`HOb9lu#f+SS9Y&ANmlK|H+?7 zpZwy74%(rh3%CgQwqs?4bb5qzeyAa$|79_XMBq>)c_1{++v;+RO=aJy8z_}_*5ed3 zbs&5_xn z&%E4bhGL_;bkd<)@py+=G`a>_$Fa5=uedZnRUC`U!Rp^V--(J+$)-nzm5r+#r& zJ2lJ~@*XR{;1+x!oiEh?_Fxm@vpH&^Uh9Vz@H{=OojToV$Qg97857GCE*bkU<7BRp zqA)klgYpb)SfYiqgU0@n@k{HggHb4P)mNHgu) z&zkhLeds7|9qS&cYO%nvd~Wb|><3FMo2HSGQJGnJg3iB8TY5iqIV*{R053lYmf?P0 zSHd>V;$8`7`Q9LbNBTQ*8k$pyUck&pV)VKyxlra=>K`JU`dr54(-JC0ni|V1#dX2o zf6W>>fl?{`O%)qxW#6=0NFk}BM`(}JRYEj-O>G1RU(gdOpW<|g_ylfB{<;7KMm|!c zhYn#47K-46CQH+wt3U5JWna9*8>J)k`)alk>Wj+$dj1a@nZplv?`Qv_!O=@Bqs(vigwzt+~-bAdyilk){sj zKfh$35i?nDIW$;X|GL!H`sny?@ALbQs}34=O9g6m3vEL+qI2HfOHzmTfSL52CXiWn z=3*6k@!{dK1@HU8)%<2L=%LG80pKX9uZ-!s7<=%7tdyDR>E>536ea2}hq6Wo+=Jlo z-=ff%rP(021V|_BCQW>`OtqGW_BVfemRI}*4~naPW&sjg1B{U%Mh9d#PeG)!5(l@J zvr?$#L+l1WhF=WK$1ByGp_jy{YoAGgvy{uL2GMu+ApRZVx}7Unc2V1AL-KE!2z@n; zsY*PMf(=Q2{4zC`8e`Bx8*Hldt(8gX9zb7n3zHUd_YB zS$DfPVxo|Uc-YSREoZ243OhQa8?e=g4{0D$0 zglaiHH#ZlH#b9p@QciWHQr`J~CUg9=&=C(v$H6#M+Uy877IVAS6(cb82%D|aOPGK> zPd3DX#w4lBEK5PDeSlTySSt#A@~|yyk+~IL5X$UfbQBU~3ZMVGSMzOQ?YG5iZi2obTehlfY)H#5@z-cP1?R6am}?6k}34nnl*=xv>We=`dk2O{h-L}J+l9sj+l z--&!Ga-x+%#X>MRh9h7(_$* zo5y%0H9{Ke=)5n|N<)jXB(e))A2-4o4e5x=n|M0sQ+2*^&} zCn5&Yd1RwR?3-bAI0qE4oGx3|#yV{T%+#%W$F&n~Tcikc(a0JI9qSTZP#zA=0#WLe z5(bNoUWsJxAq}IyNTkN28c(i}Z`NnS?UHNNkP(v#aQ4vjnLQHE%_)kK}~ML~luH`nCev`fHt7`^wf^ z|CBcwtDTnAC4PAPdNJ5~r<&)p%WR+~{=AmQFOaxk?lw*?5cYW0m3$gEW*$(dL36a^ z7*MBQaT>Q)SbJJ9b|V^lecmMl^ zSY(u*IM<`e*WaERd+Sn&a#fiP{NHH4My9LIXd-dOne~{}riR^G#a-?FK)D)!P}E4{ azIuJCjr7cSU literal 0 HcmV?d00001 diff --git a/doc/stress_test_framework.md b/doc/stress_test_framework.md new file mode 100644 index 00000000000..18f545e090e --- /dev/null +++ b/doc/stress_test_framework.md @@ -0,0 +1,92 @@ +# Stress Test framework for gRPC + +(Sree Kuchibhotla - sreek@) + +> Status: This is implemented. More details at [README.md](https://github.com/grpc/grpc/blob/master/tools/run_tests/stress_test/README.md) + + +**I. GOALS** + +1) Build a stress test suite for gRPC: + +* Build a stress test suite that can Identify bugs by testing the system (gRPC server/client) under extreme conditions: + * High load + * High concurrency + * Limited resources + * Intermittent failures +* Should be integrated with Jenkins CI + +2) Make it generic enough (i.e build a generic test framework) that can be used for: + +* Executing M instances of a client against N instances of a server with an arbitrarily defined connection matrix + * Execute heterogenous test configurations - for example: Java stress test clients against C++ servers or Node clients against Python servers or TSAN C++ clients vs ASAN C++ Servers etc. + * Easy and Flexible enough that Devs can use it to recreate complex test scenarios + +The implementation effort is divided into two parts: + +* Building a "Stress Test Framework" to run the stress test suites- More details in **Section II** (The idea is that the Stress Test framework is generic enough that it would be easier to modify it to run other suites like interop-tests or custom test scenarios) +* Building a 'Stress test suite' - More details in **section III** + +**Terminology:** + +GCE - Google compute engine +GKE - Google Container engine +Kubernetes - Google's open source service scheduler / orchestrator. + +**Note:** The terms GKE and Kubernetes are used interchangeably in this document + +# II. STRESS TEST FRAMEWORK + +(The details of each step are explained below)) +![image](images/stress_test_framework.png) +**Figure 1** + +### Step 1 Read the test config, generate base docker images + +**_Test Config:_** The test configuration contains the following information: + +* _GKE info:_ GKE project and cluster info +* _Docker images:_ Instructions to build docker images +* _Client templates:_ One or more client templates each containing the following information: + * Which docker image to use + * Path to the client program to launch (within the docker image) + * Parameters to the client program +* _Server templates:_ Similar to Client templates - except that these are for servers +* Test matrix containing the following: + * _Server groups:_ One or more groups of servers containing the following info for each group + * Which server template to use + * How many instances to launch + * _Client groups:_ One or more groups of clients containing the following (for each group): + * Which client template to use + * How many instances to launch + * Which server group to talk to (all clients in this group will talk to all servers in the server group) + +The first step is to read the test config and build the docker images + +**_Stress server docker image:_** The following are the main files in the server docker images + +* _Interop_server:_ The server program +* `run_server.py`: This is a python script which is the entry point of the docker image (i.e this is the script that is called when the docker image is run in GKE). This script launches the interop server and also updates the status in BigQuery. If the interop_server fails for whatever reason, the script launch_server.py logs that status in BigQuery + +**_Stress client docker image:_** + +* Stress client: The stress test client. In addition to talking to the interop_server, the stress client also exports metrics (which can be queried by the metrics_client described below) +* Metrics client: Metrics client connects to the stress_client to get the current qps metrics. +* `run_client.py`: This is a python script which is the entry point of the docker image (i.e this is the script that is called when the docker image is run in GKE). This script launches the stress client and also updates the status in BigQuery. The script then periodically launches metrics client to query the qps from the stress client and then uploads the qps to BigQuery. + +### Step 2) Upload the docker images to GKE +The docker images are uploaded to the GKE registry + +### Step 3) Launch the tests in GKE +The test driver reads the test matrix (described in step 1) and creates the necessary server and client pods in GKE. + +### Step 4) Tests are run in GKE +GKE starts running the tests by calling the entry points in *each* docker image (i.e `run_server.py` or `run_client.py` depending on whcih docker image it is) + +### Step 5) Upload the status to GKE and Monitor the status in GKE +* 5.1 The tests periodically update their status in BigQuery +* 5.2 The test driver periodically checks the status in Bigquery to see if any tests failed. If any tests failed, the driver immediately stops the tests. If not, the driver continues to run the tests for a configurable amount of time. + +### Step 6) Create a summary report +The test driver creates a final summary report containing details about any test failures and information about how to connect the failed pods in GKE for debugging. + From c1f006e67d7fe348c0e6e95f1204835053da8cb3 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 18 Oct 2016 19:39:48 -0700 Subject: [PATCH 144/286] update image --- doc/images/stress_test_framework.png | Bin 63366 -> 63744 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/images/stress_test_framework.png b/doc/images/stress_test_framework.png index ef8f95ba600474a85159c7405903188e2fc07f05..a5f49f8e1064a36d73bdca40ef25df58bc203068 100644 GIT binary patch literal 63744 zcmY&O;Z;(Q1k>FOWxVux_ic{R7XmElScPs8vio0uW`upzv z<2xrgC&^}a=bf2%=6PmjBR;CU$Hk(+LO?*kRRGC;LO?)@fWPT6(BQu?q|xOgAOs*N z$V#buEFHDu>zQeJo^-O91QF`$SnX)NAF0%1ddud4 z2R|mN!IMTH!`Hj4$Vt0!SK=P|>>9Qy1Eo z?TZ(7>7L`9y?d$caFbIvu>_lYIdN}4ZKVp!XN~;-UQP;3(E7dUl94p7LYGCBgM_5&Wmm3!g{2Riz@R^W#p+JbVslp zPE#+we^49JNat#pbCFD?lZ2!Q(aWh3C(Dy`dl(0MLAVN_90+u+9%-y>j>G6E+1(%9 zlEOmZq6|w$Df)JyL4l*MAl&c@ApdZi7m`I&A;_N?-VySgwea^mqbQ3`pESe?F3S zjhV^6m+#b8K}h^MGJiThppNDbU?VS=^;D?LaVX4~i9X^{6)vnAF;hZY7~sZG z9<=oW7eGzTYH(oUL!@HbPanTL7UTqmdxVtUmg6m)1%J2&*d&I|{G3tbB8MeFRJD;d z-YY+1cSFe}^_YR5h~;)dD6+1zo3q4-)dkCBQ?sc;Wp!(hCDY9A3GH5x;>?&9Xz0Jg zFXArw{TGM&9H?uzu`zGVz?ZU0wb@P|#&RhXh_|Nog zOaSaH5ZbH|b-YKf_N@S~eHb4`n+s#qbq#>P(#cHW%N>tIs&M^(V&q3Is(eo8f-opL z{bi6gkp&Uc_7SDoM}kQXU0%E@DQ1^rB`k&0ZOzkSuzk4Csui2vL9dSCX%W3Q*nJh7)M;E5$LS*6Q z%}l+kXu9C}m=4?rWH|`B#{d95GWjm-QOO@ULbtqGB_d6DIr_!4&E-qJn?(sXq5-S{ z9u=4oaHXeTw-uE}C$!B*n_I3X;wntX=$-Hy`kf}#t-12-*wED0Fm=}wrFBNdgZ|kp zDJL1-vWyPs1cRHsGzsKY$mU7T+NreR5E4lVr#g zb284+JcJPuB3qz96$fJaKJar=TQyUH3>EyXd}2xPfd4f3()NHFGXVeP8Kp8<5-CXjRq6(T_ zD1Xd=@NB$gmE(Vw!D`6dKxd}6l5x^2qBO>locv+>c#4k7k&9U(Z&C25{)ueIThgMs zK_#QkPTa)^k>{)_+F7jw6$q7j?`MxUg2r1-u$*9BjC5I)(SmR}dYZKDoMD|I%4?{Y z?JDk;N8?KqFduTQRC)cgF`)M=)tkBx+=G?%v4)0ewu(s>1c!qiG>`*o2f>P-%Th*8 zZuQ33abW=$8HG|gV?obn?7*SmbKrql=sqLx0UPi>^G&OtstBcwIVMV_aR*S=uy0p8 zK(8yJgI$yg7zwRBrnpPmXCl5_EG*~i{A@E@y|Vp-e8A<^!D*Fs>oqm9$(y;0eoi{a zUk&Xf7Iok1M$S(RP9bw5U&nHqB=B2r`nV7cmefhhdKZ`UzvX|ba$*q;MN=dOlE~J4 zBo_J3S=Bcl>N*q}6wB#Xz3~1q$2xw&=$F>3@pbaQuBKUP%9Ki36>kFXchc+{==caW zGv$MN8LPZfz`tudz)J^^(c?tnEkuKUKC6y5fmUU~U@mq97wb6zdpbvwWjp8YIGj8V zjAU=q64X4~DpT&xsi1YM#@t5I!}L=Puq1n~S2vVpRsZ^1TYVYF?|d0-5xIL(Kr144 zU9)yM$6ZEHpX_iwD&mDV3&e*8f1Zou@Ry9oE7I=)b&D32lp}x7a`mHo-b#a_aRFiC z8$bIOYnYdenj)`J-4uJCm{sRr=o0$)yzP7@LjSS=0y_ zH7c#Tc8a)T*XA2{;HV?drA6g~qLy<3y5(<{@562}I^3?ra`zYjN`!#E6b*}CUJhuL zuEFE-TaK4T)%`94#ZeVu#$l)cG=_sS$$Ee8Y%YFj6PtMQ*H~V&K@Hk*JBf4mN+>`# zaPFVb-h58FscbFe$=b?1CY3*+Q@i=|y#+KNn%GUXY1DB`Aa?*6vwOY!Zb zGb-y{1;U?P&V$=;^9ZsNt6ksvAgvXgqWXWw1BXIz-Y5NSNQ%X7A6M0}bPh{|1% z!vZmGYb~~GroL`Ue<@WGl<6e+xS1?l+C&Cy)O|Dw7y;wD>nwjgTbQT?O6BkW#D{h) zZ`<6Y67Pso{$dwQ5+VfrOA7^N`0R3A(pz8B&`lN6!s-!!f$1Grwr~GpM!XJ_CF0>d zwgFcZihAO}#zcrygS_wuU%5W_e@%)Pjm`Z zB?Cb=j)M6exZx>pDFcN$5x^p`C7EOQIv;d$1?L4M`jmdaqqe{&?ONJ%=>#zMgPvv# z(OmF+EXC@#b+%|^fOn1WdA*=rr5d%9eF0t6Xh1euX*E^s zCM%y$pJ{xKi=8<66DJWswVVcj(o;+*VZYSD6Du6FIaIy?K-av~x%)Bvkc}>^ifgj6mub?b>fR;|t#o zyD8QFf!4?Ae%pqLRcyxkDp2j}#!4~Ka;xK*U{OWJgFw+r%u8NFiSV^Wg){Fv({*<+v74#aw_v`JN~9TRn;5vpbw3i_ z5?&{1eusS@p67Ixu6!N@1Qsg<(`+yVfHU*gQ|U4aNC`k|t$^}{lmh9|k;?@YwX`rx ziH^im!~v$|Qj1np1XK?hA(;ab5lV%|u$nfU+a87k(R~}5S4Cf<)+ey*syAZ;+uzxJ zd>y;xLn>FQdM;>4uDsfWEnv`TYDnay9K6seueG`jNjs|dYnt2!lY}nPI@^+XNSXwe zt1!hjF+qAwbJ}k##y5rAi0Qu%J4~_g)&cR`XZexxUuhSvAO$(Z=rq+C7wOj1G}pdx zq{Os#m?r$7EYE(0RXz9PUBt0#2qMQLz3(*gS4EBm184EGk&3W(GN2c=g|_|hA_%43 z$hOB9M;Xa-|G@xqGk})tc({V+-DQ?t=lO?paRTcQoJOc}WO+|vaf!hjleYHF)J{GN zQt4+Nk^-=P$5QDm9DI!~9y`!h-r;o8FJ|CW?D!$Bx#P`=X=dRKQ@4%~QrzF4~}T?Z;Q1AfmLPsUu*Uklp0Er zgE$}?RRgZDsGl`iudt7B+vY<()A!EqaJfM)dXN6Zm+yJR@i$yJ0yvB>mDSXX*_NRh z==xm=ABs4~0`@lYnrl%B$mt-JtbaFkH*Ijd_cZfR2@u65%ON>#LY7wWG=Q|gdXCV* zY|&#eMT6ytL)s+9a^W#CC25j+NY1a*X@NYhawrN$5@e zU~|Nn^AY}m+F7JI5-MwhWV=klhmR_ac1BJ*W5i?fu8nV^qN1N1=m>Q`Ys@qfTngngDqx$2*sGr z#BSR|Tdga}xJ_51NC7bdE+~)fdp0Pw6`OkXMj3y_exxGqc$CCNpaEhgYzPjkjbMK$ ze#o>hJFHm{87XkcWxcO>-tT_PSw+Sc87Z$EC_@NH#E7J};uv{-7vsj#?ztPuF~~QU zlg)Fexw$D4;i`OV9Oqn|lhyuA*YU+zrHVkUyC?1ku={V?z_@*PIU4hrFx}V_wuGD}qra%?ua|ou2 zaCp%X>#Cc4i&iimY9=u8V;woyHg1aw8mF5&@hwtab#D(&})4N9(uzN*aJwLR_b zTWpz?nTVwHj006Txm!w^2wrvZ>bZ?8bIUSmA{9ju8W^xfPJCfwoEets%J9wrDE)9z zB`rJ?>T|LRa#Ox_py6(@mD*zKDhdo^+y^Kf^W!7;?PAEOwYB`?K(gVl9pGf=KXydC zV-IOf|KHDYHJgxs1k#5MzJDLR|t3Fh%5+VM~=e)Ovcrp&+r+d#UE4hI4$m zzC3+sG_=bM_xKu!P>gPitMnw-pHDk&wxUf7ot8LZhvFQ3`jPKEK`abU+av0cp|TXj z5FqJA{6}Jv;7CNEwWX>iVpPmHRO7p1jG~JbTKsanL|V{I*2I^{__S{iSQOvm&OiS9 z^Vf>h4^~QE_uc#0$s&iE^2jGj(3#70<(xD<2cowRQ?Y=AJxCkS_ckH*(^aWDc5eM z=LI_s8@%y4kDpf2@iH@*TA5ZS%Sk6$-qw7BTL=pP%jlpMbz9lx`7y3)Mm4FTrtUNg z_pSFcX3OKxj@G+c28);XB?iw^+h1>!PrZv0sY&I~kGJztBR$)a%4{^C(2O`sVV{+N zAtfcnnY?yyjYATx($2O6wiM#jlo4*N$MrL`WdEDRyi3P9Z3}VV@w%MVk^Z>+gkl|w z_9#!>oHsgwl62Kq&q6uQ&=sFck?Q*m0Yh)O)4|WxM^H`&*RRVQTBJVb z%S+f)p4|6*K$&qsAE^H{BD7VD>O|}@`2!~{XNNiH`NcIyqt(UpzNDkVVCj`Q%y8cJ z0RNp&qSu)2I_zLoOaI!YeYvDEv|9A)2Ab-(IdI$lQ2p@Uy}{rTDZr#yn?%= zxD+vYv-A!JFy&+cvi-UxPr~`QA%r)F401;C(PfV4_7ib3`C;NvAUJbKlwq>zaqQIN zmc82Yey==3r=#UF^5%FPtYPVTN>_am*S}==rBE;jj+hoE_fS zipeU2F)ll1sf68pgZZrb69L|6bsyEA_%MIG@%vKzZtqC!Hf{-O;SYln9pH-w9kgxC zt1nir*^IoSvD38xtXBXYeoz`zTio3aDlc|+5WBqwL zqtk8OS@r4h&ArS!kK(Cd0lN6R~atG^SIYk zj?h?-i>1Mt?nLH1tg-}dAo1&W9X?H79Ve5^2S}+@Tq$(q*}9Pzai3;a zSD1z33!CXZ%nZI?39Fbe-m$Wgnfc8Bd{gx|E6d_o!r`vZo2#;Ozu{U-?>db3q!rdT z08>l$ztX(E(1j_qA4Sz2nEBtDUOVB2RNqHY&aiviX>mU;fA(67n_-Xh)t+coYkx|? zyskACKaGNEWw|dWu|1djU2hdMiRr)0-L^ST6xl<4CIV#!*sRw*3_^oUM8=P)xSiQD zlGtGA=bdWvO$~%lz8VmX9Dl%vHZxW>W;ip5sJnbqc>z%Vq@fFYPx6S@c{F=%?>z?d zm>BRo%e00Wh&SDqFLUi0z|5{QtGIve`d)>2_37%yol2a|y-PV(Y%zkFabu!XC2c20 zv=DvJDewrjFtf)^ZjBe7TvXT_w&|3Gqnf^Agp<4>oHcaBCTb=vgLMD3Wr?%zbycvR zZ_E7^#jVdC^Ad#a#9d!XItmTW(?zd$Pjj;Up;!J|$Ibg0!~6HpCCBIanW%ODu^FYc zmtF4KPwPj6ABFjU^ozu@48{er!wJYYcs3L%mS2%!sWmcmYx{ZrENXbyS!L+4HXu>$ zclf|vMz+H9(_rlu|EJ5D?$5jG&L&JeRG|CHlkLvRSquT4#38i0l&t-9$zS61qVq0C zn_oT05@okJFdk$U^=T&&1Ofs-sdJT&4drJRB;*%AWO0(Y``tw0`&#|&oDteR(fs@l z*5EZurt;GQ^;F%08dl=UbCfmdaCc2WrRZs}yPM7CJ8!spbI?QUW1NDRZ^?>y41_Z$ z1wsJ4LYjPOo13__Qm=s4H{OPP`qlS1>;bI=cGLRqV6u z)W_p2BH`A+cc7fx|1<|4IDYL4r>|C0skCESvZN!0F#u}`0EwLXi(>kU#9_pRPpA>v z*ZH%Hi=J~Nu-4s{hEtCTxev7W9utN>7jux?^$VeO@l%<0_l~{x`Ph_>%bxaX&ym(D zR_~EkCAY7_qZ`CRBHpoOE2OO%+O;GAQ5UtZt7Osn7zCIzC&*e^y4U?e9ZSmCPt+$z zVy(`WtgzsLj=M~8TCtnV1a{F&Grir_R`++0*XW1rd^W@+aJLY_(K8<61I;8?%$QLH zurd)0H2(ba2u=ElqpT}UNS8p5*nP=u>v4^WjwhEatTVlPB;w(*b&ZZM5x481#EXh2 z2l_$}WF`b?xoS_Ek;a1o1C9M03rV$wBZVfP9N7lw)G7irQfE5tCW^vNCmn=~Mhs6y z9Pa9>MLo_?z42z&H9a@Z>PNkMHhVf*4hfp2b>z%h$ z->)8SQHPDL7B4T&30NF9UfX%Mxa&3SJ@OxcTI%+fu&de$O&T$ukH~+{vPbZ8a()ff zV@9aYMMy+&EFL5ZSC5!vE)$Gw{eBBlvL_7tOFKN%x}Lz*^YR(Nal$O@CsQdCf9AS| zmbk9WCigY;y<1qo`DALJm&dPP4^0QQKEA5QdD#3eejiiNxmqiD1}1pnJ7En(YE1hr15#h}x{?sj=O7oD7)>SLH;Sd-KJ-oV_O-9FCH}KpTv!6T6EK1ea z^gKJ0-6;x#`AqzJkU*5)*Wp_2gi+y!I+Ia}UG>aUSNLn}{1S4vN_&cwELoFx-56%S zyuQG1dzlu}&))QliVz<7kKCAY!bILuEXf!0IWF5`q82`Oz@EcL+7Hg|5399c&kfbK z);WI8yICQ|@-t9jzBGz8yGs}&=0{H%UE(uk9Ae+n~j z+b_Q{IM>TIg=aIqpRL*(hxo7!e3jJQZ11XJIQ$bFvu@vt4EZ(ne*Mwldi>!b{BY3k z`Q|dasZ51W^HuL4r_e6yn;8B#g4&hZ(nnXtRwHz#CBY zS1!q|vqF6d6;clcB#KmElN9==R}n|+4Ki)`-E(WlIj(>N zPfbx@LVPnPr~+A-I>wYTM)0VG!(H$y9U{*z3JW-UhbnV(_V9fkw4o4KY*^ZKGXCc6^kefl11c(NEoco729?0Ghc6XK8+Ob z@ICKzbPx>sLd&fa1x}Y`WDZa#{5zm`LDK`kEz!c)_-J$^E+&nEW4 zLYM^cgS|{XN8-Ax{rdy6iBzwVmqEXwmlnj&bIHekJ1M#|=W#y3E0F;@2to^P)b>K? z{tY$q9qLA+$MDVT8Q3mxYw;m_-><6YDt-jMkRDH;lZMumP4pHjyoWzRobQIzo>DCj zQBz4=QEFIV){T$}-(`r&C%7Irchml*SYDEN)~@UBb=Wh(-amkK{nRaeeUaMsho1)% zeEgale=K#URv8-p4i263;Gc?%9)$tn@D5C8>v{jAQ=q_S!^Nuo1iulcRGR}k(vQg# zcK-7B<7Tt7C7f}ev;tMjnr1%Se7>1)40zeU-=(aHdTid^S{R!P=QJ>zF04faR^=%{ z7lH<{Qi~v6SfS~?wT|vuy!o}eJu_C*4aZ)}s-{q?$>zwaL(kjNHwa^|Dx9YqZ1@vM z-XIRtPj~Sl25pJJo47Ap@+DoE=n*DXj|F7ytY1+1H3czo?zdAr#rP-ggcP%E*fRna z$_*Z-n_DxEbBVn>&2;%V>DaCl?5rpOX4zfqv#0(rX7+pzvZxYeY;r|ve-RN+FT*~Q z`{{&)57(r3Bo0aI;Z5wKWb{)=8Cd}tI$&b!W4$mV;7*DWRd;=4NsCQq?Ep`?1St9l zmZ@+`6q`G3P>5`{DLj*U9&UB0OXtf9kDRu&+M$kr=?F-4nIE>mRKX;RpyCEnbk)(T zZ3ukYh`i%l%4NGIQp)Sfo%uXR5>?RZt^IfXesLnZ>Q)m`X!%>OO8c|w+i~CL*f+&W zJbS|L(OpbSVd$}-V5n%N+yb zeemrAkYfUH&wOF_FhPFKkBe?Q$$1l7t*j$o-W@$BJlDrnk78?;faxK+_Av7SPf6r0 zcLDOoeV9HpbJFZns;B;(i}uV;Ay)wf-QyL^O`qaw_a|L}eT-T45=|wlCy^F{z7*wy zScg5dBo5(>nP)Y2rv$=zX$iY$6ijZj%lj*9>pUM&S z^}F?QUyaL;fE+CLv=Uam4n-uCK4)dM{m-fwh-%_{!g24i@j%2ml8Ef?y!s8FP_USq zwJn(=F`apVvY6oWCGOv@**Kt?%51Na zP-$H6Rit34k<_uhW;De13hC6h`Z})rQvt#iFjYigG8Z;f`H+uc#7w-s@)oJ0f&skdM*0c+45d3J0N*VayJ*7Pl-n#58JYXo%>HhIpqq6ZkIh3B=C2w zWi}E{iucT_tsJ$W=4Wh`WyGl-jQk;Hm>d!cd~|?MMd8XH193}+heIqy5ybDn6mK~} z77w@sU=Y*3bElE{jcS{pz8xrwCv6tc^bxmI}CLM$r^(U55MYRn%qH1^|nFs*{n3Vg|`F zM2!h{OKk;88vPDu-+FHeu*UAPB?F-HeE8A;7CFA|+j{+rli5UPF4;F>{S6}9P=KsR zo{%cL|K%7~zx9(==(5@vz(K1K*HXBFqw}86W*yU_4U+DPo&CnbcY?y#TUD`INn-z#+VYZfif^2FRm=Q^;6THY;rI`?5hi7}a zcIDgg9`>?O*+7;=H2DCf7wp`{sZpeFwWA!VRp!eNtfZnVSH{k`KX%**!->-Beoxz= z13tvcA!^<_`0{ZsH{L2iOIBYy0B|ENM02KDE}GeIjl?wjz(w>thCyam_L|taSQTG| zsb+p}Lo=t%wBc~s+$@_T(e;bIPsx$T&107>Y64Rg>+vTSrVQRthCSc1AOi|sGi$pxW0>!EC!bhBNTG?g8B?F1gui6ZC?PpS zcbc-v>)oeqKUu%ykfNFEEI8A!x#{`FIVTHYi*!}1h_3O9oOJ|f4r+jzERMo$AqL%% z+SBPhgv-W~)ikSPGF4BJx_G#j)uu%cuNqS96`!{i-x_=k-2b`rW)TZ}^Jlp=bdDy4 z5K+Q9%@B|MFBScFcp*sLi-u)dw59FEFe#H*n4^q3ll7u#mQr9?^Pjudfqzvb5-iyuaGvm zx0hLm9g(*1g%4dlet^z1UFa~>h%+>jRfHeE9$hDf_=?5mA=cF#^GQVa4Hl7ixx9h~ zfA~`;y6;gvo26&%N{!B;v=x;6FyP`Zq`mw@rs+z-MTk9FXOIO5@Bgyx$JjI^3o;Pq zriBm-+p)tX(xp3JjJ?D=zmDq9;r?9_c@Danh+UA69aLjC@gAdwaIRjM{QA<{Xd$YF zVQrL*noOkmrS4pcKYr0PaHD?5o4m^*+`6jjh~i0}&9D)Z0N%<|^x96hxWB<+HcC`D z^B3-k1c62YAeTAhcPI~E^IHJDKQRuM^SeG<#6H})>JToI7yY$t4!3Q$k@jKPlo<-Q zJ$0)=faf_`o!tU#FBJVzmPz@P7LF()&8op)#9A5u7d4oOiM^juBeFGRrA=Z`ZunRM;C-ZFKt51h(**0lf@t5I|q`Vj*9de z+4>npO?08<-)Z@5dK+I+@MbVJPLZnUY%6dx?V-M1MWF98{C2H9{rPLwaZ3;ZpsZdX z#5E-+#tO%xVt-hM*_gGq)-6Njafl$58!T3#@+-uU ztTGwKZdeU&3(cV~xX%(Xe@T1dwE4i}kCB;z5~2Sbnl!^slYBMVl&5)NfH{AF%vpIl zB>zhNfwI5m|7j&ZQyKh|ZL3A6cO9=IlDeL)SQ9DeB-|EZyPgChej2;bpSD60y`X{x zjO_b5gOn)H6@e485PVu!SbVkBtQ0p?>#Fj_Kq`U$`)h~NQUu2mftQ2Kz&@VClWr)H zRfQw)pAU`D5w50Ho*M`tu`_$fa_!d&OgOlDA?>Z$&Z9< zVRV4=HF%xB{HLLID@$3pZKx&fEnvR$|}U&)9_ne%Za@u4%76k_Ul-qz8IAO_(7Y+)k8H(14bzc6-hy`D_Q0VtWSWfeW(Up0{NMnsg7EK|n7{jY5VYcvMl$SpyL+BaEedk+lhH(QHS^pN%-$CXFi2 z91~%;= zw5Z%fES$8Qb9^O=qH6rb8QzrT!@F4_Z!7Z%;W1MPH)f9n(w>z^czt^^f4IIijC_Df zU~XWI3=n&gB7H7=rZo4b5V zp<%QJ>=H`2R;eg0xQh`yM4bthRS+?aH4fA$F`iil-84;UpJHXp>T1{=S9kjX*|@Fk z$;rQ9QLz=}g2UUwM>LU+@nBshgOS4ZG2Ecr=6~#e=B^6?kpp?Sq!lV1P>Kk19O#*5 zkU}q`_)Jck5Ke-l*A4m~s8eA_0caz2nH;!{M<-H1lxelRQvZ}HMZ>eYHN$0 zo(28?x;|HGS6VHHlR$;U0Cp>DzlgKRb;)Ke=>lpCyVssyZFv5BhBej0uhkoHEUP+Tt&EDU+Y3_5{ z^W+$W*2%Ks*gT3fath632}@4Cy1J}nTa<36c)wcf*7}}^X%JLUKsZ-nr=Q?{KdkW0 z@z)**5%^=!{5I-y2X+#Jlt~tmKHiLe4cd&K?Aa~WX-3!YLF6?HA>`GZJ`+@Ol} zEp34i({$YU!7dUu2H^1EYyBG5D&r^fL^4Ny%y+M_f&E|Q#I|v7GwUW^9<(j8uIm#? zg1hD|`iyQKe8e^@+%;_P0dx|2TLsDEgQk#ay05O5;WFuJFB)ugy!f^cxpnv1Hi)A; zp5TiWc%7s1z$SJ@z%Tr7tKi0vvqD8-a?QyrNzSg0;|sq|9BrW(ovfGu`1}dK{^HHZ zMory!eR>KIhtfq0yh)&d-fPlj6vs7-MTVX0sLVv~2&p?J7IxGnYzM|9xH#5}z7l7B zLLN!ihsA5;t}UA1R)PV)ZHIz$z_id@>%|`*MX(|m&XJQ&Hb^WAbls*FSFYKOns7W^ zWb%V=7F=Gbnu->Ys{b$}y5ltEr1}MwNuwQ4qnmWcTBebEW@C`d-@`btIpDX}MsEu0 zO%%qvRuD^thef7b;VPvVu461r&1;xc@*f`;s~QIL?ZuIy3|$|<<2>TKW9eI=%1CuC znS3=7_#}sqosz%AUoufjDHa3n)6EV;8&2oAh7RnJ#@dy1HDjbIvfm)aD&lYV`ss#y zOPyI&`)n1v?x24Gg#q{@{I4dMB=xLw4ZT4rl;nGS+I>80nN|PuryOMnnitXsxoUPhzkGpI`^j0n(O_0svJ%L zW?bEjk}?EutFB*)ZpwcOjYe}?Z@Qp?BWn@-2spR1^#T*qDcrUyf0@s@lF)$jJYNFhv6^IKHbQekkJsBdVpPwI+RNo$mt@(ioO=WwF4jX zNx8NFZ5JPE=Z!>jnFhZ;S_-U&+)>@`^Hq*S?wIf?=fLqJ4i;IuG9jRh1F6sW(3m%5 zD>eMDk3Oj-TuymJ!>Hg_TdKdy0&z@FxNr-*B7?bhJP#!dWufIX@ zfGgmXrVXXaM9j^N7cM~{7DPHj_J&X0;7xHK)Dpk)bwTnV>+9|D{&=s}n%IivLmR)7 zaAQe>yDzfI@}r5y5AqPdu)6OEtr!#Eb!-gfWh1^oDjFMqA3v;C9;gSu6);^=>E>i? zblI$1(Xs`*k1l3%H{d!x1eT1zec8%%x2hm%ARaJdJ^B~$R285j()h+?b_$1tbtI_tbGAl_ zRk;d_{=jia-4rqlg2*@MoXPrO<#s&|hON>@i!w2g4^?HHq4(jVcOSXi1h>dkcL44` z)O}p`S?DiCjb`k?jrmE2?_|vaTDgf5U>OO*HW#X`i3jUj;%uZpq~7#>52|l8>nuz* zUUt)^?b@Z;9koGm9`6@`k1I=@{~rJQm`6Yd#ytDX)%?n(&AW^Z(Gt;GwEvo6FH_{H zqE+Qaoc=n!YZqze{YKM5fy9Rebmz?CL-%+$7Cc+=OYK_F~EXjyLB@HGp!52vncL&O}J(2&fUXCxM{RGz3&| zjJn4}GpYJnOf^)DAqh7H-ErRgLS8g%)JojoBc(LCY&@*`Tg)4b0j|f#96GK^+x$r( z&hUq0w(OoVDj;d7q~0W%vBo5<$}$aNG(7+Iw`nN*`SGD*SNo@pA9g6hxWzx&8-JT= z94Q-<@hkIO4i;whAK8GGET$r00NJf$A-`$h5a zGbeWyrUUi?Yf&Mx z_@Me$J6#@IgZ{{@vDGd+I!YHQLjlQ(!G|m_Y=pkl8s2EN?wdDBCz}E`?~Ux|3RE-* z=^$v!x{!|4xYNY}^(Xv+HzP}k2sf*O3gwTUo@i~P)9<)Oa9G0;ohV7okmpf~#6jHv`zu(at@B1g2<=;BJFc=cA=O5Mb?%99pTI(I>92DR+3spJ8X-x=ej0oQS8yo~#L~zXX!L&2VP^ z+mfqT%&vDhC_v>P_-SV$U?0_!1l-w$ERTxNchJNh>6LNpA$MWdq#_sVUZaQD_<6_1 z&x*}uOZClrP$6KgnGBIMX4Zj-qgah}VG>UGl`()fHv{DD+zNlDVxS|6e4SrVohn|_ z0#QOW9Mw{9#%CVbxHg23oW@SOo)ioMMNlLB;sbm2-layo%~1|a3=Z&EYQoT$wgW5g zepCKx9PBX0-UM(-HKrN3WC9i|I#qtS&|^OGnO=wwj%QsRYNx?%4eWD~xO0%2 zjwBy=MKitA*~MQ6b@_8Kg&@Y+=h&IV2r|Q)8toWwWi6=h(t;Gc8Pb%45a*9s_PPYl zj;(}x%GGqBdD_G4D{$WF526~#@GDE*0glZEU&6iFG1J)BVD>qn7v1Ic=rv=0o|PY6 zSU-zOvIZgPtY+$%_bc($w-|9b~|AiOm+ToO-SL$uw!{u7U}=B`UI{|Z@_ zb25^Ap7)6Zn(?mRlrX552wCKAqpmViMj?_X#pfr+A8ol-K0Buh#ZZ*djQ9BRahOkz zwgp*d@H(6iCOi=*$~dHjO%c5%NN)Li(Qpy5qarXBNq);qY`w)-8GeZMR>j%>$%>he zggEM|BW{n+TM6(Sv+7BV7>8|X;ii4bgnpPHU|TZ0d94UqsrvInrO%bIBX)--r;Zv> zMitb{Oh(MsWkP%LE4i>UWp^dK3%gT?(AuHLOw!Zc;_r-r`p*Q{>B5l)e{nJ$u3#r| zhFtH^Pw`Cz;v~c4jF=8dlDQ(-92UZvwDi0|v2VW{+O>u5DTN+U#oz3D0J(U4;acI2 zUx@yMY2mcZuD+9_Bgnnab}ztJi6}&+%1X&{9F}28|Nu*e5<>so3yeal?t6LTPI3&2}QiKKfAG z-4v>i*Wf6wP~-$h1bgC;pD=xV0T<$Jj7uJu#YH=Q`Bo5^B#vbPe{pt@`-?5rb&t zl^K&;k8~&`&(WN;4v6}L(n#|9S8IEWnl+{1q=NWT<*9n}fxY2`3|Jy`U8s}OmDIme zZZ}#A2)_qBgAmf;bhSK{j=U?KFzg6l*Bz^oPacjpWsfL+)JG)ZT~q3j0FjV1T_u)( zeBx)i5KZekd5iK3lkUa{3Sg`qW&HLL0vFn=Vm{pS4M@kJYnj269)j$^qHt7>NP&$| zNTDpG+tq+mnq=`i7uD1(fOSy?^Pr*aC7URyUd*Dd$dSrOE7r9Lujp>oYP7oBouX$( zd_@q>CQrNHj+Iu=*!Bk*eRH)w%P7Co!yr#~Wlx;(0|3fODUQwY-}Oqjjggh_g>ovo zabC{(5>~&!AD6_h_+lyfj_P5amN){M^P_IF>u~!MyQbW8C%2lW92oPGk;A^OH68IA z)=T8)fKlxr6M30@alN88o&_${_Hp^OQNpeSH5$p9?x3UqR10hx0wRQp%C{N8;2#Jc z;s_0&uqE1q^oJR27~#*=6-^#%HDd@1#*;fpS+)+iVMM6wAV3g4lGkVUiW*5#U8#M@ z@Hv7%WjY#U%KnRjB2;q=mA=i$Y!-uIsFp2M#E;2M=uPoFkFC6A85)1%P-?TH?RX`;vh%35(dbh%wrxcw>g`q)~LCL*oFl6Do9r9!!*iYE;5)h z?1f4gf5k6s|Emw12I~d(H(KGt*fbx3cb%9nDV`gm3|I5Ox)su$}rVf1re z*luF5g|8mVr%}FRB@r*8=PnCPqOSB5RIGre+h&-#(9khru6(X1{OHSNzjWG z1w$(<=H#N1j+by^Q{+hnHAh>WBgP?WC(dJ-~-j z;Fv?gU|GOSsS*y>GuEI|tkvM9mEufLZbhVPHeuPEgX!|xqkjLb(Poz5G(m#kfHEDq zz2a6M4@O{3ZZt%aFFaiI`!0&;V7-h4!2QEzDvG4igCLG6t=;9`_m*?6+u;|(W+NdU z;1cqoYyhKUx&0o1j~$ULJa_)bp|Z=K16ZbShLuT$*he88!hZL1*Sr6MV+fznqXjDv z`J8G3TvSPrzj{@MOlI_Rj=K~M{|uK*eWm4~PmNGZDiij%C+wVfsm5nbP@!d4dESgC z)^V88@6=0zK|Pr110t6zp~Fx9GA!Al&JZHvXKCKm?Nh& z!=WducY0YgqtVaDU37CY(#Y&1Ur-pa!k|51Bbv3j_G0ZarZjSjX(1tUn`jAEFU)Yq z9Xaqw^QqL#EHN8cURsA&=Z?@C>Fd_2#2J4)i}7nQNXoB`?@savZ64dt8uQ4p(enxu zm|hi=xLPMjqdTsf`KIFJ_jrG?>@>nU`7A3Q#!yJoo|uk!8P^pCA-KGVAK{xn zEvqDc4eIL}z>=D3`WlP$w+FSJ0N_kOfNUv7w%NJu3?5Aj|0^3DO-6tvY$p`?xq@}N z{X3cYQi_1O0nAu%LMPqgE@UOway}_@&;zGpcp4D}{Uy3C?dGXV^fwpI* zu67J^ni=0Kw$3-QG6H2F7j|a!neO8_nR!lBr0r`}z8FzonWIT~ zmp^Z$(dTJ8_F#jPTPaQ|=^SxBT1^Y!=+?A+X%|r061srAQ2h@}SK$|B*R<)*mF`%2 zNlEFHP&$^DrMp3C=>?=yI;Fc)WGO*Xy1PNT;oIl?y??+x_c;@1X3ktQhvHt$+T9L) z5+2HKs(SqO`J5i1#F;mR6K1(ix3)mm{`)qb6=^vc_BqaTYxVcNHmH_82T-y3DKQ@> zPdIkm)5$)6CX*qo*V53Q<+P1yutTr6*$B7rk0!{Ln}dhn!E%8UX}-qEHK2?N2`0l| zWd1Md&|ROz-d}UN9YYsp6zMdEJmd*>4(D77f-%n4+v@o*A2sWbFlYbi{+v{Ow%b<# z-gCgwbv|r7b_I>5uYFT}G6s}|!xCP|o;^TP`8BD!Ke}_!ukNP@-EHZhd-x}Ys1n}m zRDZ!EOACKG9sjI%SHwbAkUGhlw*oAc9BuoeeHzhn8HHO4T}>EMIzQIK3$79{O?wlO zcH5%I;$;?rY<=|ptPogstoK|NxtxT7qC*sd&yxOJj#IF_bbAWAnSNG``VT;7{_my3 zP;8^OhycS!^DB-YUENAW1?tLpKt02l#Xc%I_mDPH5D~$$Z?MAfaWJ)){Z}d?dm>q!PmJ_Q-lCWs||#ZCs+SKt#HLahkmmORlVDucfz&; zmU&e&LVwOR8Pqe5ZA455~n1L?N57$ivf z0xsXz+rm;lOB>Oy34)1}(8d&1{!(&%*WWFq^g$(@6c-cCv=~q}>5FDdSt$2{_w_>+ z4f#i9zu$iX3#1?KG_86-OIe)-7-R}*tFomEfZcx`xGRBf3l^zZM@w7mPnKKRPu`m=laGF7?Wsh z!>IY(MSTDoFj-GAcK7y>&yEAq{Nv{^iPF_&K~gL4Pc686Zq&XVG_#C&-QYJF*nPHc zyN!FNWubE={QjFT%k-`#`Ec{xaa}X<8+lR#7kc9qoa13JVuTCa<4Y>dAB^Ai;yWCd zduqv=;49Z$w+Pubnzgv76R)P!xntTL{Cw8bzWi<%A(p9AtP{0jvxrLznQecu5#V(8 z%cCjB@@7 z)RB|kgC|GPzSYFN9ED=V2~02WJYAJ#x*X&6*uXFK#;v!>Zvr zHscT`mw=XZ5AG1H;tf6MNI@88g^R|^gZZEsqE_5nx*`oe;P=va(OG*EL(n&PPe>>=fJvLF}^dwyb;NycP*71 zXmQ>#!C0~PaHR~>=#XRCvY>rmhQaIDJ5s^*|2)3u{q&L13@v_63z{C9_g*}p5 zEU@Z0+NZ9rB3#5EV8ZNr7AoLX_O)Mu77;?HzyYa7uMQ278-8yScK|xDhL!nI3_6V3 z35W9p;w>efEzBl*jlLZ@4xNIBQ0!r@PvN$CURI32L*16Pz~}USAGPMqoGh<<=4y7q zU0x1i-F}R{MnTOnm88ts?_=_>({7EjZsRol;-i3OvD(f*XN_C)%IoUyI&R4)Qq1D# zgCo@F+uH{aV|IJBPm{i@4*b7JB+9e~xTLO!-Gqvt8;e^DsxkfHUs=1i4? znLU+yVQ1eJevpk&a4Kf~Y==04TEz?(eZ3bJoggmU00)IOGk zUV4sABNCH%I5z3PC%3;5m#Qg9VJV^?jE@U!?>Mo1#v1h&Wmvj|JL1Ap3vpl+@bk{+ zn1C=c?k;Fhycj)}zeZY4J`va&@g51vnVuSy#?;s)-W&!tLHoDa{o5!S-eaOH1UwDC z=E47_$ruct)pqMZZqZVyV;Fd-9ls_LK0URnqsVdlYWyZ|oEmk-TpAKF_>HD^*7Izx z6&3nX1Or;wi(=&KgO0_+?1FBxna<5CP2rNo04BCha@2vT+_5ucMDx^Oh}fo(|3od0|_Q{tG#)yoyo%jp-i zci8ts;cMEG55OGB;7lmBs#pXx#lI#^loX5`4nhDVD0# zwnUJ#4Ke^JCM)jyfYPoNYAeZt7Vr=p2HHD*No}egH{5|ptT=#Cmddh&!@{TiuJ)r> zCI|}nenj5&P0E#UQ3Fh;J^_-%`q;(xkX{8r91R!KV?NtjMp9AP>^Z#bA#hwF!0QbP z;FCPn#W`LHdxlrX;M0>Q@K-L&B*r@G zX)mFM`cJOp(ww5kOQpp+3GqYbQacYH<1si2z#~}x?I9U_ptbmMv!%2_-M#_sz~F(h zFlPwzx>>NJtS0x3%yxSgeu>S#a7E@l@B*@%vF{bYE8*n42G&?iw zMufofP$M~71>f1|z`qEBjr(WqjjaWNBL-{;rc++1kU(bLk#5qn1Qwf``e@zH#n1Cd zd;?ppdMDdA140QeHf8>z>_mzvpjqZRW3D=_ShEKlMLD4+ByAE%m(meMK77CX)=k0( zWPcf{gfd*+E@}n@I1@Po2vdgu+&nE8tPBECZ!9clOFC;k_L+w5l)usr?hc zC8q|>bmDUmA;6yt)4;+xGLGJr0B>B7ZkK)~T+NNt($fU4si)Eq^|V=GMAz9AtbTCf zen=|Xf2pj7x5D|tsTG$@dzS5pP=aj&2E2gfU8v}$dHL~>0VxaxEeT)sf+ZlpNWzgx5 z4gL5}-oX@nBXo10;$D~zr(h7$PK=G6yp;%p zS#^f7bAzvxI7gE9qg&ssuM5#~$w2%PFWF`r1Do?ExEf;dO@fL#zR(T00PbB^}t3;@coRkYm?{$s4=< zF%6F=%RL=9?@&k^@wm@eL(l-Sxja;9GrO)%-(v_K1$7KXp(0-iUCxQ*PFgzf^mCU+ z`U$eRk$@x>+Pq>3;C*_w@!-ybxP4hg2N_v<=d9xDd)b%aiWCnxQX_w>=E*G-Hm?(I z&SLI{No-SVRucrJ0&@(P`v2x{xPb_*aR((#)!Kx^TF#B0FVB6Q!u%94P z7H%E+Us>4_qg#Zd-4VmqrQ|tDOte^6j@SFq76&2&IkxModnD~ahC{hJB?tJmK2I$5 zU80(izhnDq-AVLRrENgG;q2tb@*TLuGV$Wg_})oi9E+Y;zF@79wwK_w|F($8IrSq6 zh&^xztdc>j0ZgUB{KUotwCZHedK;qcCyE6HCkG!D;=+7PRce*4^!D0y z>Tq@Yi*QxYO#A8Q;{9b?Rgq>pk+#>Vkj2~@Nn{}PIj$>WdN08+OEBf`$x}p7ze1;y z;9XJk0bEnPpWdR-)AI^K8(!>65DG8~Jw7n~lNf*RT_E=K<=G;VpDy*_=#xR(FnF4w z-=zv?VGa{v(nD#SUehO`uo>P@1WM8=3f=o{8ZW$kp;z9pM&qx$q-{X>4Mp)8Fylz) zN{}}MFg_RqN)ZjW_WV;BjXUoiix8-z?6aj48zScJel;9XI# zMzwGIpsKTsWvWBP<~gwa=TCh9UJoI|)IRcLtShN+|0>}WZDJA{g|3vY*np{!yDm5T zeQ~WPJ_Yx8m61;Oy+U>5&W4~Rj!nUMjR0*5G@r-0BkCjnm9S5ZGRjKnJQyICzXvB zl|MT@VMpHJcE_~H(XOs{*D^#|P${`qTBcE_cu;$1ZN6N0#uDw65$O|0Z_L@{5Wh*~ zHN!>FN3_X8(7s6*%SxB*tLwvr(olHKc4V;8B0=c0;?#cH+4MnNDtgzoz*;@`3{gxP zps1_tJWWJI_g-LUGEainjbdd~`v>4sd1QhwMU~UOgm+^nv2>5c)b=N`A*TL36q!w{ z>vu=wRCl0jHlW~!6&LKAxYNqI=5K#ZtsXF;W6A|qfhPU)IxSZ9V?Oi4s;RWvFG8A~ z$}jmg!8-8b7b?EVNMINI+7}dyn_eBJi4)|Tm z+Kvq;{BVS*=S%j)<*S1*yLcYe+7hkQ!1(b=5@mH@!ZbcQ?gC(ou}dX=B`bSEV#M<~ z*`?^OxDOjS&U}3}8;Gl8g_<RZ-8FR8bn$^k8(Bc#`+Oi|mtADfEy|?KnJR5v<;h ztE);EbP8h_@+kK2#g|r6Hmw@yqVyz~>||Q>(Q`mbgx{&$K4tY)TeFMA3op`|A2Ka3 zRhURcM);!oy)pb!)SxB3GJAAn{a+Z3(xkCj5M({fHZsH$WrRlq6{z8&rIV` zVy?SuWW3kQM}%BaNphIwdls|Q`6{Dm<_slFjpTM}0S#`l>c3)EY zXaGCyLm2cV}au$*k_T1ZUhMw!x=eb?UOtj0(1Ro z7Bu+oEdnoXH$$|djyf8dQRCF7zxS213!mg;iWIEH`#Qm-BcD?=CzX*Qw^G3hm9_1N zEKe!Ixynsflwb0J4r%-m$)M^cp#)fJjIO`a~Cd zA6?yS%6<2go3p9at zX55c^X8B&pJ|&Fd=4HD1JO7xw9p&RNE%@%9#d5tg-{HJGHQC_($1bLX-)`#1 z&7(K(tM2=Q2K5aH+1SnLc;{)Yr|j>(dj2$BkW0SUiCF|5xTRKGdq}fza^gO1b5uF) z+AcjK#ef+E$n@| z8%LOKzty%f$o-GdLFPLi<5;5}#>S{OfHK%x4*c95x;+tdxtxgRiA_k~trGL}(sEs8>bnRz|Lf;SmuF0Gm;SeiY50%HCptBB{w*zToOo>?#)(=<-!X z1xX)R(KNa-Pg$qND>D6KezUhKc;|A*PiQ+7)!O-z3&*2-RCKpIZjCAj-Q;7fjDOJn z&=0I*|E(xh%Pz>gzmVd5KbCnuAj0q;-|6UR>IUouC8+LS8i+zGBdO-n3!2%U)lFz1 zEtESoq@=?eB7&_Vbzj8B>y&YJ20et}8~qvt4%)Ag24n7;HJ>$I0w3~9{$u)ayzuH- zhwEIKk?xPJ?cw>&hjyc=8S7Ly3UW9C7L>w8hw#G`aZqbB@3ipye=O!@FEzb;n2V75 zpg<|JCdY2Y)K?CVQp;ch|B8cPY`{N)Tl^~gTdit#N*wS>AL!7;b>WRKxRX{fW<@1@ zG`8#{o`wwl{ozeHB1L`JUQ;% z3MO^_8Kmh>p;7OVALM0CtUNN3<^G8=z;P9{@#zsmyYd|VQfX>-@8SPrlDhau91Wp5 zfe|+1{zeVQ+S=zk%!o4lUvrWL1*Hr_3NugT*R>5IiaW7U?sJMm)^7rEkYfP=8Ory; zU{p5gz{?CNe*W7{ApvGHQ=1oC98ZekWH}s-GKC%~A8FIfiR3N_dMNsT_HEMDRZHSY znjaV=0P9sUl%emgFBMH2sx~WFXZuyr;FCPcioTi=D|}#;Bf8`pfN(Y_Xz)N4{S&RD z;3}t_Y>|vToJRJZl0hHeYm=z~-LYQ`6!XF41Jg%{5>a#km;{}SPF}Gn5edr7_{@i- zV`Vg=f*2k0|7bI!luyG$94!Ng9-oJ^JegKadAYO2erYF~dKj!%C|1C)l9hRYB)<|{ z9pG~$UQXT>{I^L?@;;FqB1S$MuEkhgFhS-dBmK(62Vn? zU-3V7n()HOOBafU~C$StP z*l-B*9RpkLw$C0R92r$7a0Njuy-{+skuNGGDs}fKicZ;bMJeB4a>s) zzX%JC)#BEbH-`6}z=5h6{=ENL92;PuuL_C`u&yG^B3jn}{ZHg4PsDkcMT6u~B&6$4k)B$L;dmxHfgzkZQSGj#6q4AuKyQ~ia! z!_VZ&HSUpl1->U`ZlGY{q|?7IA8r3zoN{I4v+Etcf$>O*2LjoWrbggbo*vq*52fbS zN|F{>*PfEVTC$@4%=q-JAXdDcl_9g;txk>q&XRJbRHElRqm!6IM=851%otSX;7yCG zlIPiTBk@WE#$ZgLpY%mZ|sH+$AL=U#OVa@Yih+KrTkaMt>jgw zXYW@Rl}u^x(HsaTG>_kPHU^?6%7;so#2r!(zU0%)n}m!cMNC- zcdH2oD;}2cMI^kqPfb!xe>?n5>OT<>0x02I7G6xv=HkhEFBSbn`_XEJ5h-0$lZ7N!-SQu)|M}Uu|7bN(<8XK$gw&{qV3YX5Gr9j%?AtFMD;3wq zw>v?7dF1}6mzjywAX3bqH*1vv_G{nb1nm`#CgqvR#F}pB3(v&wFt5dAAUBHb+5P3L zD--{*vw@f()7V%7YivgX+eG92e^S1}Vv~lb>W369a?Umut=K8veEzqAP}!iB-ES)p82Ey^C8tA#V+dR%|hRXMf%~(5eH zZps=X&?@)JUxNv=_4?IJY3RRn77=hXDWwO##9EINhI^gn|BT>3Z^HHaqwLol*CtW- zf3lTQk8gulqoLX|o2Q7^4!BO9?N1=opva4%uE)5lr&qm$HMmaYTChrzPpO69B+FU-8PI53H)bbA4M;Xp8d&*#f6hzQp^yV$Dk{M~_+z$tloL#_j3 z4d;VEZT~~VxC&G8yG8?jox>YiiLz=kKVYMS=+e~A*y3u+<#DnwT;fEPQEw9^l=)By z0Bn-7kT(=NNq44U_lc(^x&?STNbj{3rM|(ni4{I=x&t^HTS(2`bWzK-WvNq;b*Y62 zO`{4d`n*<`!i8&RKZ%fSqSsY+MtFTLsyh?-e8_fvxA^u@2w%MTbY^E`FlRP5SEI%6 z(Y0$VYB3O`tk`L`bMW0ft`V*>``&O4*QgE-Q%-QpB+9U_{^W*x@ehj2VMIg&5MlOI zc~DZdHEq|0r$L~ z2Op2tR_q=%Bc6p;O>H$d;Rb8^?|`^s6YOOGSAz_!2&P?5Y7$w?;vAmZ`ETP)5@iB# zH@G9)J7>4^IdMQ=l^J;2wXwm6Ya{FH?01);h|tn=YvyUOPk22O7$_tDaQD{kVB^Q% zsx>2BbYGIc-KV(~)!dwAlSv$hzp8!zuG*hzWHa8Dn@ZG{~!%{~{U%H(mZZNJv69s+0b>0YTuZ8$F-lvKK|8v zag^5yd^(-Jy!BiweAyMnFHf2IA)DGC7ho$ta})lWt$q*NoF)~ZdG@^Se>^=sIWd;? zkNDHQVe+lfxvk#GzsU3YBIkpl-kM~`w#1?MUe;^rQiC=9r02wRl_AyItXz%nn8)>26Zx1VI}atmuh;|0$)6 z%j@Pf*2eX_@wz8vFfODL0T^@29|6dnhw4<@S4}zm5-oe-O~UWlF32P3V=O(df6l zPxkHeb%D>*u=QWZH51*m)z+ex`%kd7CGX?jo;C03sSz8cQT+-CWn~oSf|U}HZ0MKj zWB5q1v;aKRtA-z#@xlxf_J}T0Y3yB2G&M0-h~|`2YOLJgB4XZ-B4-$$KV$ViAG5Ou zsi~i5vQSk;LIq*O)6`@tUYORP<$M>li6R(={+DUxwzO;RS;5&`j;3HK>mMTw4;(vuE z%K@pJ64D6^cvI1|y6JV8IL;``WFQ->#To$3K!H*Wy|{DyH_11e|IWDF>}(~ZM?3dv z(cf<4g+(^#E(Q&TPV2Aie>#RfL!4`%9^o5E6AT*>lHOeLSzWPnZb9qM!N~i(CF>23 zAq=zi&2(bcSO`xUs}K|pN}O7Z3rn|q%@U}U_JiefalX9gfPjKA0|DK%AH^87*@2A8 z%TdP|A1LR%Er|=E4*=^Wc=-(Bn0@L z)%P#qCbXiWR(`61o9weP;`|~)cOHNXg&05SW6<1sy&8mUB5wrTy28WccHOzEsHFA} z!+S;{axELOlGEX^+yp%ZH^e&qGy(5LN^BB;K$IH%I(S2!s)uF6ejZkB!QLNFHcAvd z*v{m7Uk0W>_s@N?9CEwch994L_?2a90iH_!`|i<)IgdHoY7*Bm2GctafsrWCBPJx) zYIq+UDX95p`TXpGF!@w73rqV#Ky!XXOlm(05(Kd_?2;@=|4VNHzMV1$AJQupN!72*WSMufU^-Isoj;*8|rtutG*oAck$-Y*>7DOo)7=R)(;00YbCJ|u1vfIB-{SrDQw1%{G#aJuo*7> zvp`J~%<4Z`A!0z-7mdi8Oj}HA6rDlvja>QbwEJ4vqtEH1D#jQ?a!41xjiM2zKJu$! zNG`%ggybv7^=dDwz(WZ7%rl35{uiM@N2R{?>BF&C0}WcThp=~UBjYn^Y7(UZowXEE zKHVpVw`D5TGwOGBxjsa=QFC_coi7r`G#{+5j zY+UBa2`_ePJKuP)qbIkDxBIhTw;_{xWl3oXM4oDo9Q$!rn@gI__x6-?YckId4a(Tg zZ-E5tetDxZJ{^D8bF=31`ur$>6V8F|)M@%WbAlfMihz6+d%1qpK53#jY!4_utbWY! z(R&@&*&`*@i4Gr-e9bg1ZC88xFypaOd}H#gb^W5oU78D$fSVuX8N8<4v&-d~5H538 z(BuAx`?RO^QOJ4O-C;un&ggRc1=sJNbdLA0vUPZ`8LR0k2D7;QJ-VWBiAI=w7O;#G zs(0HtyOYpg`vv@jptYYDqsZ15-f0ch_6!Lz!5d2E7isz2?q~s?lnt`TnT%PBHyZkueoa4t`KHc7DgMkkWW$=V3N|*2SEj;vjsb?>- z220>j@P3e0_NxWk^==vzP3j;(KkDYG0L*wTQP-)Rj<>w%zR6v=Azbuu*C8Hmu> z245-hj@^gHquXoHANag86{l9U8EQjK=QC67+?N~wL(*GGa^<4unLvNVE{@M?7%xSg z=MTAMYTw{T@TtGdN)6)q+3Od5YLS4r_QuC*0x=UJLO|eyDFp#HhDW(rM=TNXwdaXw z1;e1z7?9QBuO(7yA59V?VeMz&Z$}JJEZBG!Gh807yGr4liOcGIMl^9~J9@(*N{M#( z^gLr{@vQGYPcw427Fn0M2aZo|wU;XHB<8G@3a!@Wt%}~cU+>U@DwuGiuy4il!++4I zub4hGJ&gO(VC&<*vTdi`xqB|Kz^3lr;076{Hbqx=A0Z25OTHM_ywlWf4A#+DmQY>U z6ix|+T~7|!=)~Z7I|j8AS7d&1?YJkneh9f+C3Ki>2Hi0KcLn8Ry1s%U$F4>6m%9)- zRx6V&etw~Bti0>|1^dP{@J!MP6{>k-{A%BHw%DQLKW=;|%My@(`g9)Ub6596W@X~l z^|tWP-1I5sokyQ>d5Jw2g)mM^bj{0wP(@AG-cD>aHax?f@CS2$wP?S>DRyi%4wPb8 zZY05oTK!~w!GPBX0Ar{W{4{oZD6!SGP0e>MeRD9tSg7FMAXpT`W`bT<<=&Iey;eVvg_^mKM!ot1+y5DP7Uc7H3Zc=#rvngU}m-gtgn zw)8O+Omo*?YZrw!3G2zZCuHd;(}Ip6CFX{S@ndpT6pb;KtRFUP?=2f+XP^`UF@y|q zkpwo%$e{o_$J@ZbabwX15s};HW#92O{i83l?rUR@;(N#A`Za;Ii8{X=8L?HU<{&is z#1T{GI#;nB`XL1rD#(6TqhTFx!5wx>w?Q4fWT{$GBMaQ$!06ZAVZRT7WUoJU~ZDJA}R`gE1y(=`hZWbC;n(f>JmehiL1qnl%DyMrV zm`+TFgpQgzIy$3O;ov7$(XgTXR=M%n3lF5)qmFIzkyGJ%hlSa_fI@ABLKPuN^REyi zmr{@6lQ{9O7I5*u_LEOKz&Ek#pcNEHQO(E@PM-2MS^f>fhOqDKcr<`s$P~&47}vum0XOUj{C=6wNEUfa$A5G)DW4fr<|*jQeC*6f?~ciAGPm+#Hb$@hY}q}Uq{W^_k;%31&mN{ zk#Z<@p4C^4|F-cYmpZQqj92*{NZYmgvaiN&_;UB67Wjbv<1MhhNK@S(L07(*akz=y z=M6yPeS*OP7s$SVFtBt6FB+BqV*t*GLnEhqjYrc90M6E+Rs&l}y(sJR26dcdYu}m( zv8?&owk%TM}H>}v%14`Qsv8`3;ZDr4?j3lpPz~UjAv1g3)a`Rx={mH%7;7w zU1-o5g^Wz(gW@ml57w%UFN`K(6|t)T9ttdj9fZw+MCZVEr< zCk&_}o&MrG5^(npd`v=fOtv^*V2`e2`fOE{WbiEy&oEH#1d0YIcb2K>3KXnc;h|rV#7H@cUq< zH=$_MY7+nCkZPkl0$c~CnkD_8>Z{BjxtA`EJsk3c*(;pzF{6H@^1r?WmS@sDmul5x z!Bw;!#mU;J!9})14`=N$zI0$kR#}g$R5G)@6emI6Re&kW27C-P6XC!F7-I6+?>}n% zHSjP~L0^a>OJ-6@)y`uRIb^t){4`9UC^tII&h2E#j}YD-mKJ!@)}tN&dD_x2_n^~Z zWO`-taOzv&vB}icqlm%Gla1c>Nsp=C%2NkE_v64neJ8l$MrR_Wy)_!&4vw8JXT403 zDD%)h2%VzmK5L-xRw)aB?CQSxdX#4Lv-U|xJ>kfYv7#-dWCVZCGR)}r&cL2S@W<@q zDVd|*N0dkO5sGGpu@Jd2E30AP2<&i-j7AwQy7-IT?n>g5H*F)$Pi1*_ebZ-=Ca?cu z%LjTzq6{Ku{uDaDT;XpYI61+M2vEHeuiL+08FNva@SA7%`dKG_K4eNb0|)Bgybai= zW6JnI;R$g61!5erX_)(AmhiKF&SsBP%gQ6Yibma_Hw{i>0FS@Fba>ZVaof>Czf|U0 zb?K9i9K&}{RVC4f~G_J#U56|ly_2zU4yt~Nm55ifHlV-T0iJ&A~+Bc>{^~2AB&Az6R5PK zUaL;ds(sxQ*N*hXd0xouWBz5JRF>OZti*kfaDDSupa`n)|-p26djyb+AvuCotyk zbsG-3D5hC}=6z#NldZ%lQzLagzy6Y*;)t5(5cWXvcY;B)Dp$w9(EFTPs;$=Th&#zY z=DH+1b)3bXZi5`~PAkoz&x*$5)5^tDrrxM=8m+DY==5@Rv^SHr%vK%_1&pA9R-92u znR959f>EIk<78Ns1xEorYgUy9F)b9834sh4@DZK6P2?Su5$2wYxlwI1OTL4zKzgOD z*$I)eX!Va(@F2$Gnn%ayOsX+Vt)wRZ>&B;UqF1#kG$=w(7yS)2QwqBSzW#&IbR?ql z9D%Cjxg7uawz8$gk z6YU{FG^fT`+WToC@-<5h4v8T1LTtl9UDyH(X$2R9H9xoTf)mb%$010tz5T?U#EQ~~ zYAJ@c@&~Qf6^^aYY=*_XW`0_4T&Q`YxYx(oo0Q3mxndj123y)eSmlgR^ox)ZzIw;O zSIkE-C#nCQ0Yb5$aYK;1%!=Ker^$0{bW_hO7pf?b$pA`9us*haE}^Yqc}pg66%qOx-P z$4nSg|G>}Yv5oLb={gozXDi_xbV3KKejm+PjpVz!P**?yHySw=+wNnGc(S~&bjyP2 zg>KEkuwg&?RPrSv_Ubn6(e~%#>FueT6f$)!=MaQeGDF)AbQ_;(Pm6Xp4hQ5klYlZu z-z#3Wyyt3M*AJHm>6IP`(SGJjmp0$0;6!n^zc2lGO{3V7^mtgiI+N#j?(P#Di^)Lq zlQ#&E2JNAKWI6acjCVH;3HbabRYba{3KJ1}CwUw3KepI$SR00~#km~_R~5L|M8s~; zQJ=Y_>XmV!+?Ui&TV&=U?mb_9T9(Ei;5f+I!ZVjZQlX9$R^Ys+V5Kiv3M+0Po{W!* zib6z%TEcZd*(Q=4*VTNK^wK>4--_81E?J0WbcleB+^F~D%sgHFoZv@p$GD=eLPS8p zs5Y((Tf&7YaHC12Ues>2v*zfxDvp9)#;m2TtZqq%pdel9X~Q!f^^}NtYb9i}9LM_- zQ9arbg+&_oT5PiEnWcc14)!Bl7i!{-m4P~`%}7MP-B&*L-GTk8x@QRssy?43!J9wS zcpyiY^tI4Cw1`WF#9QT>z_vc`d>lZSpj4CWCXM;?NOrD%fkZRn7T79^Xre1GA@Aq2)ZF#j#!bdm#HSpAsAD6_4)JsG>&9nBU*iyDWwi0lfeK;Oom0 zu3i(`0Lq_J2l>YA$S~IR;rEcYmYZe*VavZDan&J3F3A1#hbp#*|de&N0n3In6pDRc-!@@4A+S(F?<1ybt~du9G+7tNnuryf*hN6D8m;CV3#SD ztd(I^As0vLzj@Z}=d+6->TltmpbxIne-BVEX8HU-HtU19F?LZ@W^u>0gD%g z>x9)uQab`|!B!xQOiERqqiV{}3NgV9`=I6i@yurMI zAbnAwf}Iu_n``l~+2e=SgCAi0K6X!yUA=F5T=t2UflI_*zVL2T1_ zk6NcLI1f~G8m5d%kZ#H)y#Ls7X>dN>sv~t9j*K_k;ri}uY2R!>h4XC#Cf(eGz%EK` zU*n0=ZFgB+o8(rfACWJs`N1ED(WOK6ivf8pZbQOsx&+Zmkm3O@BJbjNUZ)TkTHkN0 z2pVzYZeH*b`rr&?R^BF9-XB8|7Zut!;MT}tJJjsZ0bX~FB~WAFs#{p-qWRrrU?z&U z6P_}ZT*pdZmxY$wOYn&R4{$`)tS38XMPh+r14L<2v-tArK6I zfvb-*aDwdT$s=ufybsjHs|{a7EHas5Zoq;}F^l=1J}IQ*k7Jx*Ss6F1X;Yr9&^Ku1 zBruYOj`Z=LNrvp4N!&?y=~=`zgK8ld*mgCgVwfTb{Q$3KsA>%+SCZ{u!qeC2em|El%Vyql4UsO$e2I^uZb(~V&!XMOrH7SxRQ&?$tb2#P}jpoh8-RJMJb zOs-KP0p5hyCbpqM>#|7u>0{r=xip7I1dF`^c+ShGo_u8%4WZ}Fyz!kt3-9uXwKnLI z404G+|5Qp#K^Zo3ZOOsGF~Y&l&iBKSM|veRX3Jtg3{~q zgPyQ*m_5;8P00IETz*wplhgOZp!^v{#MbwP#2GTe1zk zYcXQ>Qhz0-s^MdKze83ICgHgZr0(3*iA9*Aj#HFI5huln7xL4CKR(_5NzL5j>4#A$ z%x&pQ-GDHDUpA=^g>PGyF6G@7Ax^r}-&2fuR)@U_$WrrrcZaZZp0vGu-}lw&l!hWw zw?SbBG9@2ItGsFlt6q<$RJf_PL3<0LUl(fHGTSSE`e%Os-_qhyN>4~RI4 z(WsQrqotbvT-3iG<#seb`>VBGJ8H(;!@R~$Dg2*~p(4g(CQmb5gaAR5{(I5o4z_uqA@d?1GEB-tzPG< z^@reJ!htL?=o6vec!-IKyOfXo+);)!BXPE+5>r={xvZ3GxTvTW;K37)@I5$@4UyNd zQCKqr-S}Utb}0V*Y*=D;PB7{8(|!01EJkTm=qEqj?x4WV1a7MlY{#e8ve3BlFmE~O_myYF+rW#tlZ3ztvv8Q8FrS%{jf-J_zP+hexHw3CX7F&+FYiB=?|NT*&68z8o+r#Yr5!H{e=XB=HPNJo}wi+}s_j4A#t6i@E!1_G# zr&bUO-m(^jZLMm1KMIq}yDs9brg)TU7chaR9&Qbhrh<`i6?&Xb()%Esx$*YvJc%esMF;*o$Kl|1FNcI;i=*UyA5JOmD zFZN}7)5a6NBQWt4=}uK}raS2ky|Ll4=3tOzz*fOfTwXh<5wr$@4w8*g-ih9+!$9u@ z&nvJI0q!5X`TTSEHsAO{jA)ieyA&8k8@U3ve$Cbs^9EaJchHig!u!`EOYqKMK6SO9 zjk{IyE-`4M(&f|c+c{MgN3U^#;Rszc$p5ekv(V3DcEaWB!#|xP^b0WCJezYcU}LM; zXas>*hpXR`q}o_AejUT?HKVADRFzOJttwcf=as?)iEF5uDw0pN<3W-nW*i!}iX3lrh5LQxJ`5Dn;6k79)7ceA7q)@|?P@Mq;Ob>CBs3R3pHKW%|4CjN z5}1ZfO$Y{)5CFUB7)WWYF{7#seVI@Dt*-( ziLh263K>oA%qTFQ*+v5T)TkCD#A~Xa+~HAHZ|D~4LNstjj^FZS+$zo)^41Y2z~9DV zsz<;$BZ7QMBY6GxYcac*rUC>4CD0QB2&9n{V_Rg8S2j`o{9MG|#cX|5<&dY3&3^5# zWx$)*3t;!0ey_wn<%An!wjl6VU*1~owiP+rK_1>EXa)tr3&85?cfm-oxtR)>@0f>` z859%Hw0;?i8#{sKoevD9FCmADwWEue5DKOd_t#wt07)pD@Vzs|zt7m`AbwlGtn3Sw zCq29#M*bg31%l|(Pv_o2a;VXPQhp4y#3ZTd^n}5J{-q-CoPKT!`=>#nX8WRXsfqu` z(pLvG^}cV@ouj)(C|!bd445>cFj5$u(%n5;It6K^yL*%%At@b#ba%e{e1Gq@|6u2w z=j=ImT-SBqH!9R|!W(W)KIC;+Kvyog=Qv&rBsrqz5eP7lU)xp+>gnT{)83Nff?^vG zQvviKP&5TMBPy+XbEV1q-o8G7IM6nD3Ts}g8(D*z(sTN=x714DiqcZoXR}NHfRLf_ zZZl!BW_mVjuA(Myu+$!*poUayakjbg*tiQK?0a(Gyt=$J_w?}KIo{vbpPriHzql-x zYUZSy@|idC{Dr1azPD8HRN3C%J_E7jeIcLyj6V1|QsB8+{MhTqMaM;nczvC^d%#~7 zL_OQIMCq@SyXM61UoBV8hIh@GzJKVqRx`?vVcX)K$75$yz{PJk7A_GEnylCjMBUAb zXj_z>J6RaRJQT9cXT~V9t`A=t>XkqzIurI_;O=P2JUxrIg>%N9?r%3cY*IpY=L19) zr5Pvm@V&9IaUwacy4621ce9)ii`5MVD~u|!$gCPGjHvYOvUTQV`RY)snrj+dl^+Z# z$f3x)RYvVNalR(RlCitKf2kSd3SNbyg*_-ta&ywTC04|#H4sQN^!jF2I3qDaHByoJN)1 z+DI7_M8lh8dw8q2dJqZLU%!6o?RV*w(Em{5^dvsclL`fCBSE6H;Tdt1UBP_oW$q!2 zbqO+6Lz8UsG;ufFO?%f5n;)ogwoUJtZ@Mzu)V^vPb(JraTU7}>yAF)NN2!D-p)FJw)z82DkT6PT)|Fc zD9`iH9+grB50c~bsxY%M3MN}n&Q1@|8oQMvN4(PhN=7|kyOG!M0jU!+G*%$z*l0s# zE5=Ry_$IaE;f=LqQ!I(#TEV!#`j*WCxCpz6gFeCyMp0!J6#$k{00d*)%M8`U$(Ga9 zYckfU5jZq47$_rwq^2z+jQH=-5b|i`wMsX}cQ>XHASsV`!2^Dn5H5Gq5qpJ8ETEj2 zxVRkxs{rXC?$>Yj55^UFvXM+v)it7nwNVHf%&;#aJUo2BH>t>1FjSp7!Dz5GyT7LZ z*8~yMxXCk<`O?Xy(J?6ew~!O;aFo_rj07hB&ctDEw?Z^f6LSd_;Ct>&*&jdx;wa$* z1|hyeh7&xj^?X19;5`c9PxNj9d@(KIt19N~ugDkF{|=LY%UbVNO6-;h3cb>pd<@EM z>hDM3sj|BYmliqE9?NK7KESgRpp9s}w(d=skKbNCQZuzFbq+7G`2M$X!>qAwmOXhZ5oZ%s~4Hi5J^wV)|j4! z-QB>Mx0(%U>@lo;ZS9wSCT0wNtJK`%Fd$w@wO%@BA|RHOzl*w~Co2Em*HeTiwOwCR zQv<{WO!>Y|GQ~`6R6={;DExfE^gj1n9Q`=QUOh!extso2TgJ`gn{V@i$5y*f5{gbZ z3V}O{S>%jwp&bmx?oHF>dT*>7YjfzcnkGdFLK{9uQUN*zJHAURS8Z>tivbngH@}xo zuC^bym4_!}eBL0EoL!22-h1-xpH+*jnCh7n9B--R=H^Nw8gl{5LCRdgjgHOz zZP!$Z)>W>l$N?T;QZ!FHcttoLDKK6X$ss6UdhT7N|KOz>!BRF3_^+==hADv#oK1>g zFBs&m{ioEC=PYMA+^x5gw4R^2Vm!L^2xY#S*8LEh05g@G1gJjxhus?SV4*XY*_9t} zZ#g#|#bCPKW1$?OjIJ2_IIt7dSK9?*fh!16VJm2^4njs|If+_!0_ zmDoZ@K0qqVT$0OpD^MIah=s)!8g(Lg!i@w^6J;bm`2|m#6J_MjTcx1to{j!vZyy0l zkVOP3(|9l~oQeov)%B6?bw9mlSj@Jtd-{lh<9&twbLoMegURk1J}Bs<#g7iANcO_4T`x)%oW5D_O- zu~$%K0VdfY#!U~*{8j)?h#ib+BjxoI-hl6Z^Fquf_spcz{R!PhXsWxFEv@pt%Q|N{ zdN>=L&d5clG$m&1{kC(a9Syc{>8{PuDz5yEUe1n-8}pBqc=9_@eP*BCz@rldFs9<$ z+B~c^m15t4aFn&lq3oLjE)k^9XF*LfU8UP1rqvzr>t^S9dvUPw2rYI;-nlg+n>P71 z_%EESiP;AipmmNhd(XlJt!(l$YCp$$`{t1dH4is>3kxDt5&ZzSzy2hV4=FJE^_xjC zsxI##r7D#e$}&ImUrWgV>H%o=!iZml_6Yot!d(JFK+Ht^G8>a)cl(kFUF6|;pZ zeSQPniMK3Pg`>2-deoEhH;xJqnubWdIo$7xl48xa?bE2%LX7Zn`xV zz^?Fy(v=$Ij^Am+FXGH-Xnz7GU7A&15>}W#aInt|Y-`6+K$>3Jdp0XO<{p~m2iB2& zVU?0?r9p=!TknxV0T5I!ii;|`X8uW5t;hi91iy>yaq)K|nejzN&a$|ss1`C5VVPBN zqq{XArgrR(b*ZshWF`y=LA_pVKrYf0tgwr-mgC z#zGn+dW4pgB5Ty6I~hWO?{6pfXsp;h9}xt?k4lC*YMHtA;KOT;EC?8_ar(sA@VtbZ zU(F-SxK|i7;X6{q+*R$<^3!}JA#&YX8}oLNuRul7_4!52?=r=z2*T~?w5P$67M z%Or5I$xj`%$NS$`R~KkQ0uzq{PWp59jB~eKRG}x%S++X5o$}I&vgsyPYvsSxDcKc; zXq%bi{eG7!@h=t|dc;Etx2I9RiPGRsK^YvtK7cf<+|bR=Qh*?)M};R44KJOBNKA1_ zO0nC0sUk{0J9djtbt&BY(D8F;JOO|9SXvD-da=`S+d&ni0~rtY-zG5(N~D~CMFLQD zuqh&%XZ95oPP|hc-;{geXq7S67OUX%X?CpbC8aXq0TJCW=9aqF34$Cz4Z*)l4e zAs$sZbYQ(l-j?bG5|(KAvW}G`0i%$j4@8v0^bO{+ral9*@k0_83?c;>8w2pLM!5eb zfZ54GFnsYcW)I5LF9P?;5q6$~o`bx-A-6?DF?qvytJG}B9S}NiCS^b@i3&4gqV6@| zmmHwzO#jA>FXsNYRDko~(xz=g)R;X=_rqePjI-e$(^Y``{IV>kF_^0ay4cxta)5<( zqY2A>RR|(j|4i43$#GnKLr0M49aTLX`^6Mf1&WQFHTMb?s0Kz;MWliBfD5BJSW7lB z8-F4QY^XLVqL#m8UT?q1RGS?ypQol|O|>J2V)LxA5(4u5O*|g6avAuqr6w0&i?%!n z?0`aSVA>CkcNQRpwO&=E#k_S4c?keVMP5g@KH2};!;Q1BxcH{_8W_6AY(FrXN>EFg7_2kUe{NN$8_cIqZYXFiQkXZ7ZMf0}Xb45nbmwT=; z$gn>Vqhbj@DhZSSg#8pOW7oSANRvf3kzkf0`C|7~vkG8)k_|Her*$^YW*7*c(Qc%m zOyz)!5Fvqd%aOZs)1U_S%~l*=JWQj(uKh6VMKYxrsK8x;e4r4IBhAiWn6wPPR zQ_weI(M~;oPU3;iXdHfVlP`|B=L=rvn>8ORx%&}!AFI85%xeY;RWplCgq$E{Ut<=4 z7;8ac6OMD-TXpg>n=KCa+ZgudF?al5T7}4u5etoD%5PL1Ym-k#fknOhaB~OQTu#D< z-HVb_KP0>$(?@!U9nTK(&+=DSV%VX@UMRmX$isnZLb+87-;#rT;P#Yoq&;K(V`G|{ z&A{k+mgKYJ9i-fvgWUqUqS8WZ8OQfygLHU*RQDg?%eN_xONcghdy#P#Y6`8-ukN?p z#q+mAICqs$VQL%d*A51AY@J(JKf4$)PO@`V;O zsQugXFgu-KMp{tnZd3?@8@8<_P~9AX-2te?Tp5x=0hPigd=p5K7&MbJOGwqr3r+Ha zo_Y;VmZ?YA1eoOc0emOIRK;*^x^q2^z@GEp$G~Y8OGxGl)A%Hm3;C;cW z-)Q0;P9ij>j1kUsZyE))N7d4ftGjn{%Gk>sGD9ibXRao<4LyLXQzpW)CM0?U*}E6E z_no;?^Hcw*S-NVoD`NcdqPtSK+SoNjbE*qN#)GjE%L4noTzlTEBaq#&qy0C7wZ#4T zle6rm|myL6rml z#du@mQm#AQ!*BoD>s_A#T68McG#w+|bv{4$Syh;6Bcj1dGYjzq!YEN&_5#0n9|8NK z!(FYbuGu*1ShNW3qNJoxI9Sv}!*v;I({uYk@;a$ElYYe^1Jy~0Cn&z2)16Yf@5*s* zuE2$#X3Lmfwy-sjA~9Tf=-YNU(u^OC$v)&BYL;b~{Y`=>lGFw!I2taxIe323n7YA-BDa4_CEAW(uaKxE!MoQ z>8c&cK{uo!;d3Z28{rW!uz|zDZ<$ zQ;Rjwh7Bmj+t|@s;}t29rTt6op;BLS3jpAb@D-Y29AHnHz-1wQH5u-h2XL|)ypHTp zCPw~ruGl3TZ%H8s^0=F6sN-g|Hf>k@C+>GQwJK~tjNSG4KNaQ+chp}VTV$mTs1M-w zq27Ymc19%-3i-xul{diE+Or+1#Eo(8V2dWcBCz9<37PE+ zb?gUUVpf-*scFQgSDMUY%J&_T@D2si_LiSDQcamUid}KFHDSUS@b}p>h{?%>y>#2q zru1e;6%!g+jd{4sz_KG$nyWu@3ro*9bEzZUs??(Z^HpfKl*7#<>TLcn=eZ7rHq^eJ=L94l(9?wUT4Cvk|x z+@>!qxfx0mX_*c`;#y8udLjTKmWM+%_(WyLQX5YQtbr-q+O2O+(zx_wRCbenzayYnHWlxJ~}s9=vq8G!pmc zdGnx#z)ARkK6eYOn~qgv^=HnUcirG}q3A#Q$rb?%>mTHxb9=omBB;`L^q~gPSEv1w zmL386=uS~`E9OSDND>~vNwpAxZ}YD!^V?usMS6om^5)(-MN-q$)Y)=euBm@T9m&Zf zKqoR#!<%CPR3e(&z|*h>ntaIaRh$|b@cLzUiM)uky%#j)FzoV;5eDgooPyB!|ja@Y%kbMYJOMATn) zuv%Pp<5}#JXjLSZ#aI>UFeA=zxtOX8c?oXof003kD5WdOGsjZL`hK?-F+T7Ca45*~ z$3Dcpe;cm@%DP6thO&7VapWPsaeKQIDHu!qal==v<3geIEO#(k zrL}UQXRVkCdmSiGE|2s#=;*gq%B@(0wK&Vi?-py0&3%YB z*bIi#HEdR&1+KqqjeO3l_VH%XMwBhe7tl!N>1}C0F<|v?2Ll1<#tvdIcxBhvJF3aB zVePgED8-OgXl?)Y`%g2{)O-sjeGIKR?C$@_QPfoDW%D?(sM8}|%<5~r)Sz6!EO2`V zld!fkc`frPBLk-~k5X!Y`|=XYqqNuiuca?mof=G2vv9Hq&}Rftj>PjiK(fjV#nXq> zqYPt948@=vW6OwVCP)aNe;#-88Vk#lW^K=S%Hpy$TPk7dAcbe7zb{D^ped$!^X14- zw4n8)-Vn~$fv}`C#M;R9@34E(O*`3Gp-nZdrGmYbfWql6%(jYn{_7hUdF!C_84l3a zISP9@8Jyi|j%&-8H0oD^u{DnN8W(Kv4`@qh-So)Gh(-Ht;*YsSPQk)}MB$bS(;9)E zfNJ7Q*#*=8u~ct+{~c#4vtvv53~IC2j_@+pAq|MU;LAe~6R}$4S7b%f_gKLV$Yxbj zmJ=>#9^Ne&Ws8FYHLt0UFWg~m6UaVj!O1gopEHnZ!UN{3{v8cUMDDf+X&md-xTM6G z43+uJ71=bNPQE2J!=}}?#nTK+tw@V}qUv=oYOhg)3B8%;lZA^6WK#s~Ztk!@;lUi! zd)}b|khKwkz_k8gT3klV8`l%hw#G}L5_dFJnR71O?=<1JuBE5-3IIrYgh&JTQxAkJwEAn%OT*HB|K}W z&kT=S9oweoSj>}5bIR3=S7qbs2l>q$S7=vEb8&zF(@(XVx0{r+53@$jK1O9H7h>;o zS&dY?kBTQ^_FTVepT}UL&*8g8Q@TM_^5IY#@Jm%pw)kD}qd$?hclnI3J zTcko335qcAITAT~nTfHp&Tx!e2 zaHG!}gp{;v@U*^q2>GAQ&E64pz(_PKKGEGm~(&MXU{q|(pReh7X?=D8* zqo^)qMO(sYb77M*FWdDRn}+YY*zQoB2tfwwXVml(|5UMv31{M)JmMb==-6DGaPh8) zUs{QkE*tU^dqvK*C%|ua;hTK=&i(#_?B>;~Ti~E4>re@C>=U>P@Z@w_vwf{$yIe)3Ie|f_!(2)p$n@*asQ# z4^L>H%?5IKzswbK)TG&Akz0vjwtSX`28-k9aqufO`ehupGwZ`Aeo!H((W~sg`^_k4 zAysZb5@m>%5VkKni58>tWi!?^osl?6V@dk|laR*hhD$9wn6Xc}%m+@jN`w1vi9$&1 zx}ED9xfr80n*T1Uj;#>9B%Cl#9RWmJnAlJdqFV@~RwyNx|EJb%*Ykpc8%THL^wOM> zNPV1#aAm;G17SMph)DOIgr1wJiQ+_ne3PNGck7jSN<K+ZuuWwXy95GAAF$@jtFz z{eG+rEqt2+VeiL2=M=)=AIQRxYp9jo-ck0vM~c}ix~uRI(53= zjCN>jFuf)&7b+KzenHCbvYuk5`-+zC@bfheTnmLg$vl~?cFmF-o$t70?J>*RKzS?A ze{FF0;n6L2c1o_`*;OAunSGgoY|QChsu;fk0g?{9aWFZ*`oXX*w*`elM}VpJl7%5d z?|N2OXS6sq&;mJgeWBF+)i~khE6=gTP|kU@8uJ+;H|L72A9?nMSi?c*TO1Ckt`~6ds=5X7PmJ7I`xgK`aXw8BZ!NQ#qX#d?sZBF zG`1;lCQ+;^0P5>p>~^738mbM^%7{`!A0qa8TbSuI57>aV^L_eDd9`^27%Gp))DQwf znjtr4JTx9JFesA}eydlLmb^s`lrwz=lEVThp59YXbSfD`ZpSlm+uF{zbowGQZN~PE zRmnDAZLn#}RIQkcjj?i~1d*|DF8%@tkC5(zr{%6FB9RirpROj23OZF<=x-mdnou@J zt|YkMCyph_VCR6)f<7t|@~)WAWJRyHW-vw_vLqhxH;hawZu!SJwD}9YBxd|#z-pF~ zcx;+#$-A~&bpQ+Pb@qG6L|`+vB3Zg6X$&n2i6l&qBBA-Hn^g zm+M}+vCam7-3dk{m1ogC>`@xSS$e;!ulLARx9(8420Y!jFcHsz1%u^z8A9pPZp!7? zQctiuR`jI+vR-_u{;H`N1{f?q*aKT!$-LZm0m4oip5CIyuqNGklfxSqTzPq}1Wc}8 zzpi_E_s2KLYHhK|dwhK^PM;x1^g!DY zR$CD>RGH&WA!$$hOipz3fK_%&GYMA7vx?~7GqeLQEZRh#%(H=wf;OG0!Dw^@f<#W4a+|U~yeQYBfG=99)B`l8o*U9F&ulm4x81-@Ph{ zi#5kD91hwsdA#JPYu$?bZmToR+^Zl9saE&W(qL^gR`dFHRGA-pjGa4mB-_J1^b#zf zjy1A=F~bn;ORWr;YD}3Ci$>I4T2q!}jPL35XM;-zx5V7{B(D%kfI!12jpvwOKdjkS zW+xxR`yyeTBM~6&w3ya2H%o^?wpuZo?V8hFpwexous86G^MYN`}(CqTEb!YudF<@#(SHYS<@( zZZtq4L^34;(f4xMDKrehP7<@1A`^?~(wj?=XwL#B!lS|{+=r?~NQ}iKbAqhQ-3l?b zfXK(n36~vBNgn~Pvf)`Cc2E&{=&&=<*J=-HC0$FgBA`Ayzm{F*N{+bV&Z_VwFge+D zNId;32la547}L%W3((fW{Wg$G)L#3(?zirUk1jEq0`815vLl+4nj7*VTMrHMdNNuN zDq5Ii!el1h+&ACQgw5kq> z3Q+4+!@HW0D=yE@RKhp^crnU=IvmOh<<>*%Kl;SkYnJx#l3-YTsSwg(;}ibO>mQMQ z!)Mro7Qp?N+W1`+v?bPvxBN@R>Mub$ovyoIMY07Rf)9-hZY8fb*AM_;y*N1`Q#8kh z1!#{E0PdhA#G0?4y6_ofUd(Cx&31~V=PrJib6IM9nkJH0aKOO`QRQ7U7RYkq+$5DN zFmh}2DH>xbie_LgH=sc_$6v{R|B<~Ss3Nx!E#wF-G;-i^QPDE4Fd$^}BlFwPxMWuT z1g`KJz%yu1MLD5_?G1lDBk{;92)zt{TGv>`i0{k!VN#+;0GmgvVpFU>ZiYlTnm#h<$y zbRqVNO(Y0HparBE-Lkj*{My!>dfw{w`e-z!Tm67>-T%_XHcQ}oZNKDvfqSmwQeE1F z(o3WRkOUx^(^6Lh&=w#A6rzs^guL5DNNc$}Uxh7B&zHwpq~M&)vtPLLAAuiI)xjW_ zu>4p{dex3{MXH1p<8sBAPO6)#dGV43quqt)Tv+&_5O)0hRpY+zZeJKkT~!a9*rFNE zG{p*r*G)!i1U{#8H$z72JWWln(x{Ipr^&U^Z>l=Ylp`Zakh8vHu;|IL4-2&YV7~^* zMt~wf406ouCI8b<$SuDP-ogO(L0h)sc_;j;e%!V+a#g(y@_($=KPWScwy4z3oA-LV zF;LdqqDw*L8QqGfm5iY9nD`64O3?`Z|55hg7ws5}< zpiNfYSS252tL%mBcO)-SI7DK6$e-T+r2#d);r=*EzSsG`>&e6VzXJ&X2NA`A>cLk; zof!&IMXdBl-ifZbU8Lqm^QYTaVH6N)t!vD=$@Z`o-OjJ??~{Hn#T}_r0;Xiy(|8oI zuw{vNAu8{`E!?b6be)JY0H*H)FCE?@*q`{DD9wvMWEW;ja;$A}1W#5AKv7!EvAmyE z>Y0SFoQ%H2VZ@sf6S%2p_+M0Qf{<8f8v9?(o~Ic&)~0D28;>LYo z?(ue`cf@#~hB3|06iynA5#jvW&**uiC?|BT>ccHofs;qWa%s_kexKR^x(gf)d7ZgE z*UhxE+<3hJrxOpmw-C%Ghk@;FK@*rw%~1x!v}kTWD?`WRq6jUjn`fKV&0OZ1=ICS& z{iw9pT5dq}J5_CLT6I;JS;e(mE+`Eh1GdK%Txj;^{NkeWuC%nY_|?chYVPaK?UD(7 z9qNY%5H7^Gk~T4qn+fctHMtNLM!^9v_Q1%-^TM%B{i?ZiUEq_ui=!`x9AkzM6&t{0 zm`UeEa&)HX(#|IkHC zJO5jP9_xraq+341fPO!YuIgsOY3SX(ap=)dfS4Y(Gl5ya$|6xJSzY}^L&=Z_63>-; zlp5h78V=eZMG2C&tIqA_*DN)HglB@cc03F*R_Qup;lYT_WTaoY0M7 zD_80eHL#SZ*!&~y^tMe$&M9ED-;e_=L^4ni47ylG_1fr8D3Rt5!ktE?L^igpTSSDl zzu-*r$aXbsh!I7Vsk>VQDom^WNs$h}b2BxyXAKFsB7O8LXu{X}bNd$v9vVx&kqjyH z@3~(gM&*`_av@|0q!C1Ec)_3pD1j!QGs5LQxo}@49TRUhC;V`JzmqHd&9RHU@_9Pg zvx`kd%FA$t@6&scmBRBKUWwAxH7nT-H4#a!hZ#g4t?cIS6RpIU+{;e2#GE=6iQj<4 zV0aG-F7~p1&FdZ<6MdpnV*?C6x>YkVxWWLcYmjlpXzX_Z%#WRtmWQMz&DFT5WlbJE zP*Z*UGkS77yax3-qR04csL{1UZ;)NWjmtgH7un-VIX`TEw-mSFagGPgxdF_4VWljq z(dpf=^rtAROO9Jaj<(}B5&|-EqjL(k=y_fGuivUAvzANS`PdHJFhpw`lh^ueQn2*r zA}uts-nxmb`;Ur)Y5V0_FJ}<>!H`eGz!xUx@r*v$tK-<&Lq}t;#EfVUzm0Dvzdknh6;=fdQ?=5Z`QsWD04*BMVR974|`smuA0JYcAjJvv6o~&j_;zlpniiM%+Ies#8L$e3Dgkae}j-OdsxAi9o ziE+|JxV%LJubNET5B~{vO&`Qz0BX4{>+p_I@Ac=Lux`YvSb2g4tqwQfDVIJ^lz=B( z73|$ta^K-KKG9giOdO)sL|7>?<(YKQ-3pKHPbnoM4OxvIJZP9+&ac?X+AwW z*fItsKCF*@lBwQ4#CyR2ffe9p1;VLQBCep(k4W!6D4f&fcr1x$s0we)im_T+=3rnSO!c6>4 z$aUSK-;)$k0gk=^%;Su^=B!!fFy)i#NJ!uzpEqz)9N^D7V4sCwA3`N&HuOVudyF&I zYz&SPqauZa7@JV5uOmSfg!2VU+s=>J2gM{4=0Xb1Zgfu)msN64)y$cws*g!<6w>+dk z+w`xQ8`w9Qddb|xV4)jg9p;w1F^k?1EKZmt!5D5R?JTdMg2Nu$7bMi1Dxcq6r~PsH zf4(ue;sA^h5|Nt04O*Z-%n_U!sE0 zp2*(mi^jc~Fn~LF%M%=ij_)W0r$ZS=GH{e(M%hA!dWCZm1eMv1gew~&*D%+jp%Tat z=tvrU<^ceq`oJ2K_20*$M=0=T69bc1@PNK;ONOFaI?BU>S0Op$vg5l}%kpP|s7@!V z!oGoL4U^aNHtVxTS6M3>Uhl+#n~&2vF6>vRz)gL^kF!Y5aM7+2BoLyB$$xRvcsQJ1 z--@I&l2t3chJ&L1*s>*-9aN(&`vy5HVhqKHVc*6~ggg7VRPf~JV3@Uh%Qj?G;JyMA z2Wh?Lx9zV#eW7mNCdU;WF zHHf9E=R0v1-YvC2dVywq&%zADZV;Pk&4-8L2LsdJ1}SDKi6Ipg8iI ze&FTLK}$?^>#1*%X!D)g`FUlWlS;5B>rlQiGz@fcFggp%+V)Hun{@`k70rx$_8KzW zHRzb_*yW+SO@5IA!~lwd#VsCrwNSB`0D=x(k*`n)8JW{na_W=_ddI8>ru9-JmX`rQ z)yov2af;=rO-JnH6ruRpuT{yre;pl}=WFTK?{`JC6|J)j^>xb5iG1-VaWN4Bi?1wi z90Z$s0}PQ`?M9;CzDmmDAL-0S3|l+GW-Dnk!ePlwEHfx%x|nt}x^(qm+a!C^@1d!3 zW!XUQSt8top&mE#LgkO)B^T(O8EZN7F6ip>LNERv4}=d{2H5lEwaO@3C=>X~rIWhU!c^H-X8cruyL%YN zhRV7V6sJAgEEH5Zjpn}6_tqIb1fIwgQm2DSaREhn+d1Zp0^-umi}gk;2vUMeH!aL* z$*(0$3eiEYG5%0&w%Ail&AS>-CQ^P!i_iQ({NoY5gp-#S(NjWpyna520oRL$HJHF1 ztupHUUW3nzIE3aqIg32=Cuu~SI&7GJKIW^gdNu+%Qo?#g;+prjG{rh{hwBFQ9ddJNtdZc;9#i|q!38Kt- z1DXetkCDhJuDuNiWnZ$$su$uC30=B~yD3gRrjw#tJ_1EExmomb$s91;%e$?8I($(9 z+w9-f4jX=_r#f!^XVlDblQh=j6*u37g1Zk&QksgHXGLtf<)9f5GFtiav`u6!&^AAFu%Iw#~{QC?5wg)4X&Y6ejwt@$ZA7^hw~0U|_k z>yOd0Tto;?81ebCLUaL|?~L7lM>U2ksuQn>DxscQT+Bm^0>C;xV1)D; z^M_3(tl-&JmPMLX{Jir2_U4%AnG^B}0s^e0sjr`?dv52f?sy-ckf4&bVBzF6iDFMX zOU;+>JZ2%R$V=Dwi zYCPn3cX#Ikg@(N1mCek_$$<^UH=1-d`-;>Tnf{lG!QmUHnCF*2Dysv#>aO4koNw|T z{S^*Il+31n{$dZ*ZQO>h%o>zRf1@-dmWSSdRR<^X$7f}pKT9r2;KQ7*c3mV|Ow-fS zT>L(gM#o+vs!FIJXy!wJu9=p?B;pAPdaZDg^x~8ofLyM ze;2D%nnlN2MS#d75{c?M)O2(lzaCdxOY&EK7%apg{ZzH=Qed}7ekb)Di14XIZUbLF zd-dzFGY3Q47>T*hg%~$2CB?*k?!-}UfAu}igjKeAY?o33NK#1ucjBu+3=tbKCTDy5 zF`xWVwAQmxkInrej5_19uDSL;Z;o&F*Hk)-9U}7ReFXlF!rGXnT)X$I>b5~MYYSlGlbs>I) zGIucOll-(!`5DjsbyXfmUo@mcP{*pO-TTiRi91=g@k?k(hc;O@=^<-DqZ*UmoWZEM5`<*dOSo7EyD&o?AU~c$kckuBKc)a|d2GWL0Sd9GYniA5`JWAt-ptdIEa*IT@_#b^Orx1m35oB7W@nkp+~`kjnwSJ^?JlX&{%dR;t{?ewx{RwQQl@bY9bVr z(T%5@wa-rxkz%qAlE@KABLguMqXh-bqb!N(=~lhWX!((pKV=y6tF8?1)^$5O}?vai2)=$JK+~GN=+2yjSR~m4}wi-=9GFaI}eRrHm~}WqsLGKkc&99P=i^C z^ODI>M-qqo5-Ambh;(=j#8yzwaMyQV;ySmdK&K3{%`8K27DU zWLq~-=_ws#ZDq&ubJ^{aFw2=-ntMHjntf6Hrb3W|7ly zN}OBaOz_1{5YdU6$e**1`h1kg1g18jv#8ZI?-}1Js#sW9{Ki=Q5baofi=a6rhKs>j z{iLTlK9TpwDffP37|~rppy`lE_rCLgXs{Yu<|e{v>w%M&RUx1)^5sVTUees!hUqWE z1aE(~1E~!Q@Lzx^9?T|n`>480sdqVnbfNS3H4x*f_=lP{_vjn7=gb#IEgqdk;tCfA zk<)EXZlFv#)4JVz_;A%`dILCr` zVKo7}8Jwz-ck4WYTQ!%An70yMr|TVS_YV)-o?REYRHIS4o8<@(z|w@WN}|lV=ZqfB zFb)EferTTh8l13)gcz4=TRTy{MT9;e3YEM*bnsiPG3}Q_AgG22SxrKj-Bv?!Wwo%b zW0shH>)yvqJfph3#^)bu)y7qG9$7a`Q!YzYI`=BYO7C7k-DF5(Sd+Hc3t3p}K3Kc= zSf_~P4q_oaU}5naaRx&rgU#Lsn|EQx4~ZS_-UoKP+5A=eHWGVn zrwLl5N>NYV@|Bnq-5TCxq8TcV$B2iEy-r{fWy1&Q-NqONVhCZ$0H&D(aL5VqqJmVh zxT>5!n;{JdY^0fi4JqaLW7$)?DpoZ(oN{!kCz2KT3mJ*$b*-%ajaf<9Bk#MNV^>j- zU`+uCbriW<-fX-dynf?&+V4TR4w>C_N%<4!GkNi)>wV*1>Ssfbp_%p$d>Hv{uY)hC%bV@9bjlHt8J8dm6lL?xzO>vbRwu=rC?VW z48Jz*>1PbXLs(m`n34g)(7aWGBYOGRg7|MJXnpU?(5q}6j(W~jbtwbnO{CHiwyjOV z8i^SZPaOicoB8*KzQ!qFOT<5J{Tq(+V9of!!AKbBX+44x)Wbxo8Px*nq(2CDfAX=@ zyJwo%Lry@HIy3QOyZEO|6#86nij)5Bq$D`6ItciP|Y)UvBlXQg{3JuMJt}cLy_?9}i}fNe`}DSovjY{YcEw;Rmk9l4nUo<#m*p z8!IP%OKw6U!|lFreg!dOU_!=_j9YpS#+0gM3b12pu$Vn?mh1;5|1eF_&aCqcdO(S$ z9fk1nYXszwqL4IcQD-s*1slH1+1r>FYJ1E%`$C&{z6L%&^xyW+2f=lA0*=P~Vr+w&*Bve$&&Y=i{r zqr8txDR_-|WhhhgKlBpZhUC~jl*1ZTz%n>MUhPWR2mtDqDUNSB)`-Ew8zGJ15BFx>Cc-A`Tfj~`RFZKbwi1^=dZ zU9ukdx+kZX>sF^RJS+_TZT3nG7s@>&1>3k%HkSt?1pb1(IT`_Jvqv!8K8#f6Sy zJmQ31JeYa!HGFT>hcz606w}tO+3!XSLfa~~sqQ8^Cpd%r)SeC2Qab9MET~-cl+*3S zp3P@>bfr&fQI@96MM@=g_y!Ue;&Z!9KRT$2r~vC352!@c%6Jlw$iN^jrV8c~M$4aE z^~3}KQ{rBaV?@JlV@`>=zqSYnztGJ%4dna`&BD%Vp4iI&k7yX~J4QRnl}UF9*#5yv zlOSEZe)NH(tlS|`;dz2Veb|?vo9p11vcBi^q$zeJaM9mwM^NVMK{_+VKUCZ0R~3c1 z!f1>Dp4->5MK{0CS94noJ1;}iiBUoKd;e9F{diGYi{FdLtRN3`#6sC8=13?a?uZ=4 zVLxVzX)7gZ%C)v zPUunw4PxJ{_Ng~S(=2k@*amDE-V#+$I?AsBN z6QfykR-}wlEZvg`A?n5SJ8!caVsuzxn&bVA+4;W&wUNOSDPCS1pLm%m?@X09bb)O@ zu5Pa$Us_OM?_xjN3^?mOevA40cOgL#1;7Lb29pu-VTp!iFT@gtEm0A{9AtM&)It0Y z%vM%;HnMojhi524c9&xQhyUtMf_c2Ru5|SfV?cUsN^?ErI-A0308NXG#13_d;HIpq z8?Ne=Kt!z1o72*_nbh9O&B9n@JN@@_x_yqs_YV=j1DBto{T^GB&pFqq((_LI)B~Qn z%+3+C%xi|*fl(KS31V;mq5AWml^UZ}o%!z}uStU)Dwi5CjXbIa}Uz+ul_H|RPdbuXn3pmiOGYsA=W|GlD-W>j|#_PKW zLF8VZ;t3nKT$PWUZ>3zEdS#ip;+QE(C~A8|?e;GbnTGi>&BScz#WP2K^{+x6>;Fi) z|K5ayKu2#=7)sMny1n0C3c{r1*=DD_Ty;;MuYZmoeR-&4aoIxHl(cB$8w5Z!DO zb8DWzDD$q35N-2f%KhbEBnQXy+!5>>$Kl4 z;}$c3%4wBJ>a}P2t6a;Ms-pWm2tRlqizgHP%fVNuBmXXz2=_wrL=1Gn1{lR|H#^Px zem~YoW@q~xbEk4IV8uAF_y1d+oqt9UZgq{L%t1J<%HL}$G<$@vpsc)`<@->ZY+|u;Oy1IS$A#lXJ8k0Pv8Tav-xxEAMBCdw!?Yyv+Y_>_Ro^2eNeSz;83kMQ ztob~I?C!kUOaa-6-hvRx>AbNKBtr4;sBVqLM9vP}S{v|>8p5WC&oAF#n!bN>M+k8K z3~uPxpuGlZi+) zn91(DAoruz;j?r_%5Ju}Uge_2G{qaGP!sI|cB!#{Ra5BQ;2x_(z?#4W|E?>)V{j2p7TS-OUA~~Y zgcS5LCSG`U8@>F;HP@EVR1P*|uiMYkbPGq>-n84D9;eMdTGC_x5f{p(e~|zscNilq z$80alA%&BYh1+$dBx|>|D@G_SPPPI+b$sTcyV}bAGDG!M21E6)8$tKwsKTx4#TS-} zrSpU(XCy2Rt^um%3>71R_i|i~&YL|7cAnK&)!VUN_%tY-{zUB^mR}_M%44JQe|h@^ z!JC?dO4zXLz9WFDv zJJbygj(kW^5e~exsKt@5hP(Gs{6#B8X^h7QhoF_Bp}OZ%lTKJRPPkzBnV2NE@dSKTMlOe z?z~>R&(pA@@-EE-IzKO+%8l&K;a5^|2+-zk*3G$4taj^mkr*UaY1Uo!t3S(4&3_$X z)5>jkX63Hj-`?ieN0u5+h{PRCEZZUM=ad+z|3N1PZG!8ncm3A+WPs#H<RL+1dUR~J-mF+P#(cJ7WDmbKHx|7vmqP^4ez44#)Fmc-GuJ+-N>rzcj%5Gic9;+# zL!qJDOTzN}(ZG>S;`A)Ws?4{xN9xU3!Z7y{0h4q{P-l#WIpclE7ca6CsAuiZPhU+}o0eITV>tH)-~%7CvNaH>fED2RpfAz`Aq9 zNPh1(W?jg6Ua3W9zkbu+-HE!5+cP3o6UTYCPpCcdp;&_O-7Utq)+_wn#Ckm6=dkT> zqu0B($>TjocZDDD8OzO3K`Zv%xEdX;6d3uQ02NVHExlP+J1HDUS1*{^Lps9##cGfA>yai z)@VJudnsEveH_@8I1|)98&m2u*+qhNPbJnruPx5hI-UlXhowu{{#?qrZ}ToxgBY782H3O^^u%lVkoRK25@AWn-&}VvWl}NLw$_ zlrRi93c-v%mtO6Udfy-9+7+$1U5*wf<#MqkPVB}lW~yi1ni1f%zZc0(=ED=$a9`ZW zJkwgU{z4h?k_WF~rja)BLODQXC;P`5xBUmt#>UZ2h;l~ljs&#HriDRG#nSq&?*rM- z8fTqd^Cz-j5MDkzYbaPaLCwt>qhkKtYi|;F17EW?LWwnTq6jUl{)uo_8VwrFD&ci_ zH>gXy*!0^S^mk&pH1qXQwc;Laf>_z5U_Oz2^oEar>V$z9y(mq|x;7+8cqpPiVCI!Z z#3w&ELf>JS7>R$C2gGE^@^Pzj@<}+?>gt<5!`USom)DqZ>C@-Le2#duY-WKZ1S{^t z_RCt*Pq87y1cVR*&P!A*_?XXYup~*`Y|yrLr^KfGsOUU&>z~iDfiIV)hgY_=p=K(HLHzgll-1Z{vR(2 z5C$Ng!qA+op%*C-Dib6_c>L`M{X!UozH-O+=SE_#e~Qm|ay$33vpRH2bKe zQ(;(arUeo?$;m%hW1y5!Y#diM>K3-^agw1DLc2yrkR~#5?EwXMnA`mO1G4H-O*74n zra4{}L|i=qL5855^HoNmovz$95$L9MjmD-#lRC!f58CAa-JUYZ5U{M+bkNJMfT2Wj z`+Ej$o7TKR589;h;Z2|S#PUrybHwu0L{a-^%$$cmUc+|Iv`CzcVe<>N*0M(Tu9})cBN>MHRmF^>)@GOJmMqfAlls?CIFO!4qasMFw zOjhK976TYuX*FD5HMk{c0~zbkj_VPekIbs-zXH48t8h~k?MhbZ&lKt9Sq1Y=zj@u9 zs#^0z*|a=FZj|Vcl~%Ep2S3w#3m2>-5R!3J;)$%R1Jr>dof#KHr?rR=OQ--^fuQerA) zKPe>tXPl044KZd2xRk_iI!Htd@2bvd{DU#xh0%(|(ufv1y518-CG?iFC6pI%`YZn1 zDeWsTg6Ff3RVm?bY#7=!=7jMe&iuByYI&R6>?-shz4t!NYHckU4WOjkW|6P=olCpr z62>n-TLBQeq-PA*<6|)rw0$EC!f+-C^8ECsEDA~P>ciWaR{_?*64UH4dTvhybF>0k zF=wC>t)oL7tK&3)>a79f_bW94$OlPwQb-WVyXk8|N#J@}+O>I1_6jqv-?^-BwJa6cwfV_3e3{w`ne^Yal>{OUeEMMj3V>{2znog- zVLkjz9hD zzVN;931>0NO#}U%FUzR8(5gqg=wF9*Yz2V>U>v9Hn^GjdeisjHT(esT79hW)T##v% z07{D*QA-3u>i`vM$|akyj$alrr5zPWF!)kzvrIsZ%t%SL}$7epu`Z%+LQe6T4yQHmz!$Bf?f5xUR~-(pHT;#Q+`y4IJsC1 z4@0Vxk*CVKGdbjHV-u@+3SXyMWhmLOPfE#XQFIc2{;ab4;_WblZ%06_X;s3&!JNEp zm*f10o^Vmk=BE!XBClx+LA$Z1g0zIm>=&stB$h5AmRJ_!=#Q@=*6MMB!0?^UNX-5K zl&mE`FcPH%4i;noD5~F{^`;J`>T;o!!?9gr8{ zKqyp)O%(yg>wvsQHsg>qlgQ%~WcoR)si@J3-o$Fsd=Iz&NXIN=y)EY0-ADZ(Nh;DY zgrrREaYQ zVo9ZlWgyZ(ZxHhoE|1u|hw5bDkrN;0W0q|_I4+CFSL;(e(z%V`LtNy4zb;u48 zMbDJu$~T9etHS0radi_rK-@GtBBk~d8kKPGq*Wr{=MmX(ER7*hSbK~ZdB+E246H@4Hnne2h3IsJ6 zTfu1Rre^(e)2=$?5MUyBrEhDk=p778n^F`$@;UO5)k0>j$um4d z3aVD@)tcdGxW^11qvK9M?GM&fvd2J@?&_njeyh9zova{9E4-mNyp) zY8c=b!zV1-0-?Z&t%^+Fcy>$VL!fteDyI(hT``{kt^jdSM7@9H#K47WtE${D_>q_KIDMNY=f|eZtUrU?F zVwT4ApjwSvHceRSo7TKpaIUqv$2QfLfoZ=g%NQI}t?qqogp)tUN{v%D5sn3T#RuJI zNEuKf1kHw~h_Bl3@csF~Kg~B!r=lwx9RCA(ub{Bf4?Z2hyHqeFe26kUbiLgeBU&hiN8zGub1$rxBowb>eNYjd(6CiVf z5Y&r$ZJV2{svhH$AXPLt<&I*%{x6G<*>o{uxxh!#9`v1+L1SYZ+|D6l?JlOslnxK( z7zKI|Cx6}drLR9;W5Lj;&8d=9%7}WO&0~AM_=@kDef*G=Yy~QZFcbh*$xL;XU{eO7 zZ%1h}2paoNJ);{)%{>aPp=_D>=t8!ERL$#%fyVj@Krg6->Ay+g?q}P3;?bvT*ge%u z#tssSPp0Rtp|4VailBu)B+wk6%29AHoydQGnUy&`uI#OV#K2#5o2GYW0K@4&D*VApyRO+w1EwFeikdRr~AcWxy!HacRm zToD~!qofGcyOTZZvYWnX4!-T-qvx|GT=zD-@?*?K$bIr4unDZ#IE%hCV}oPM6X zLg2E^jhF^|tT&`da9ddl{BW_OVZwx%qJHDdpMspHJ|lEN-hY|M_m6)S5O&OAo9qHZh3QKXvkJUXZYu2ajYNNRO3ZC#0sO`5nZgSD zrzvXe;4g&$w*(!kXoYV%=36CRt1=0P1>leGAmq`i2bmhtVJv!Orf;-&ELZOAs;fUb z3%8p|nS>IQs6150@B37Pj`j`8oY*tqQi#-OF-~<`rrI5q2w6Mw9pBW?q%zDU8_4(N z83hB1_T~up7TfUP80XKQKh?i~tF1T=aa1=px=S8J@~^NUv{t_vIrNYuH%&(NVgXnM z&AHg2`m*jUq;nNYmno~#_>Nv_`lOux8!uIIPX3X@LJ_k+{ zYtwGjB9!o8yJ0!V4ttaNj!sT$)x(LN$0~g+%zZ+#a|ShC&JZ;tEy)2^n~}7%xM3>- z{I3j`S-pLNf-(JnJ7fCe;6JshCR;br&v@BYS%3O{k_@G!eOcB1U|*Kk(EAiJQx%O~ zqfU(fBOM09wb2_5Snu59U z|KEpY$Z*>Tk;z>#c8^1{hifQ}wzSFD&h-qf19pVQtaH_g zv>I^>E?QaPn7~F*UT2IS*Z$F$siT>vY#toInJ*sf4+s{58L00N!@*v%Ax3YI3eS!p z1H?we;;^mH&!@DU53-qSXv}^}+o+v0U}I)x{#GF9cA90Le(`gcT;_7{GciD%6<&Ww zlRRC*9lh?Sa`PcHTJAi!I}8yCQhh~P`}J%WFF*jLr}fWG$*Gni@;f z#O#4P4Tw@E|7TH_Q__g4=C@1Z@){eZwyKOA`>Ec05B@JIhf)aYfb*Ko zy@B1TP^-AwUtL!SoYaaS6 z?+l1uf$G8=fBg35&UlN}_>;HPda-UqJ*H_p)vEMXwj;-7hSQ)$>tBSAX9^Vs`OnC! zrAq#-B2Z{@9lL%v%Idp}da)xwRi$<=2eW50>i5t7&r2(pPorWd+gEO`+Vix-!#?7Z zZ1d@Ver%a|*!jV8C6EAU}D-H0ATmo0OBmFcT=J!5{JS`7m`9IYf4 zDC}{3&t`E>I9qA5Ts(hZ{G(ylQqPpBv;}}wc<(9HN5%#4sH)@}G}GfK;(sPzWLO}Fi&`0>;ClKji5^6658_>C3bI@f^% zVaK*hV4FMo|SL9QZW(8rtdSe zvpQs42EY0E`H$*aTCAJ@Gj!h~v2t~tTfqkcRC<%S3`a2)r>;use{}NM|1@m%m|1bz z=*3;!(wDbil88N!U^5YZHK2ZyS`i}Ry@|z%cleD zCXChJxL6y$Umih&f}d`j2Ub_jeWHBe=jUG}g*4>T)2%J^aGwf; z^Ien}MDZstBch{qzl~+ozLKW{R$W(BRZY}sN#&W)Hng$=N-QrAleYv3uVuE3vEQ6@ zRC|e$!gLza@P?n_z#Yd@A8gU~`D>tX=$GHn1B#Q8!2=zK`cVoEX^w{N^aJFc)Rf^H zC*XRi{w(NNAV{6h)eVed@O$^IET}iqw4se{gv-RI6rFY8Z z7^$*2vGbNX6k8V~=PMD=#yrf%*S*g=_Ip=>k-a;v|H0si3k&$^<@!~-Yvl2Q&l$Gv ztt{=)M{=OB{t>Tl(wO+dL53mf3eaYP2O zaF){lnjs(j?Yqx@rlwje7<0yAt`)lPq`SWFm zm!_1&ZC=Zks!VqTGgC)OR+P>>RMSQvl8C_obD)=);=TP+g|z;XUG%x zylG4z^9M?y0g5Af&pG+v)Ewd70q4e&inM*I6>Uxa>cnckCfK>6COVwj6W70i@b&{z zU*hpstt+}wqk+H@M2>mX}>*a*#uX*6V!B8PAt5BV)5d;^tK0#g!G>|4Tz>p52YVVg>|^^;D% zM>FgR1K@62Di(q$TD#C0 z7SnO0hX4YpV-lwe*_k-8T$F*Fs^1*MP9e(9MODxZ(+%1UMpP+}XpU)W`G zK6Vs!m^>TcK$^eot9lW`NNAB6)+e&^0|}(6F@^LM8f6VIWCS?-51`g_B#=v=Bh}8$ zFi_m=$-%+^m27@Y4CXl7`H!eKs|8;IbV;$XYzG(s9M9ia0sq0kUZHAl)hA6=K^~5m z2LOL^V?(#s4XKT#{lb;(ne{U35h{+yVQS33xa*Vz^(KsS_4HH+hs@cdN8h`juLLBN z>%NyCNFO?jBv^7Ri20kO2SmW$*@s`Oox{MOX4xNNnCvyrj$*O5v$}TXappg3lVgpj z`kEa!LRzWCon=VWJUY40emH6qA(myK^F5>{+3Vn&4)QT`nH7J3wiQyC^Ex7H7*u$g z^!Pt5s*%(#Y7@fg{7X9G6Y@olsb%&GO*JcGg)ItwbgnV}sZI`Iz!G3RSS~gNKVedu zV<*|bV}R7|mfD0fvzekcMWx!#%WJ88Afno{Xa`4myP~aazo)`(4imvt8%sTmWqN*DJPV*txz>6*7h^}Pn-6FpOn<%61 zCeXj-zqzx~HMd`_aU6of;VG07O?R~Ah$X2L!^$MvpN+t~l1~a}e|BjpjWECsH@l$I zwGeW7XyN*)H=1Hw;t~VlBJ|C_CWhs;0J%X)qL^(y+IHm0H}78a_51uhzfZwz)BnTF za&lxw2!le){drZ{Ve!4!pQl7y$Lwr0YzLY$b`h>xL*Bx>m+l!3z{yf$ytZe`XOIEH z)Uvd+tQI$|tF7e?1N%lg89Q+OcP2tlA{+UGml(D}8kP=FGZ9?Ksv1i>^MPZ!{2}fv zDhsTwehI01;g+)>uDiI!xShqc6}$;~V=?RbWlSa*^upQI1-o_U#fu)|W{pmu@OLsf zH^C<9V0L_Y<&W{E!o^iM{dGFs-d>8eU#lc!ooh+my%lFU_Wvd|wD4EDj>{W+U6qX2 zUjv;`>-8o(Ip)gsOC-y|c%WlKSaQ4bEGgSIWxHx1Z-_lDLkg-1e*0>ZGn?IC>>wj) z=|Jk3^RCxi^O=9<=UE^ilht@;rLXMK`31GLGtcF#KYS8_XGRRVq2PC}=hs*G_B=df zoH9Uq&m7Jc;e8ai$tAjWOa_*%%Bzo1(M_7zhR3-%o2mfJHPua)VYJc!ObtmVp2@is z6s63$A1D}708)t8=%;Ui!~z9K@H2#o{KLJqt<9EpNJNSC1y4(G;+rm&uS{%%um3#P zh9sMvzAra7_e4H;9mTVY2Urzie%EgdgM%_uBVhEZ7WS`yl|sN)K99*ZodIe*An{7& zoC?Lv`vw1pW)GR1bRjE-r&Gvd2mm@I&r%%(q&HKFZOF+`uGYdvbQ8Y#x5cDvea8BEW2=P${$Sp=f(Tu5=T>T{i(D@)EgI3;`{$ z+J4=XtV*gcwUb$=d|O`0j7jeagKN(?<~3CXFe^P@;M01Y9%Jm^uriHuq$=#HX%&PK za@c)-a*$=|x{BZp!~E*MSeHtrw@eVKwNr$)K55vdqGp&Y`n1UW8*=F`&$6^yCy@3v zj7n-r8W_6^HdTrVBMR>cQE!g163$68^gJ5zRgdqDnYN&o-%((|KuTgcxXV~&*JkusG}5wwNf)sN{Rz6PCH*SxC-wJM`Ub5Gz-TP}6eJDV1C)2x=Hj;rXQ_?iui= zw`ZJ9rp|1NI=4>`?;B_#$j_{I}S=lJseQOc^V?%hJ!Nn3eYypI{JUB9^rL$b=z9(b)y+{p?7(zB?}qlA8aKy2SvYyu~8}PlK4-Z;?#-QGxm+D-1Nz_#gm``x;en zIQ&$Po{WBp*k04j7f?I&colYF8Fe?~2=Lm?#_)~6^Yq;24dW)OhtIW@mO;geHLd52 zLbiP4tinoO7qpxmK8j=tzrvy?`3r{;MFuB4#uiS<%$$QI7Tjmi&FDn}^aS25<6HjK zxe~t-v|@G-4;T&}fn>E(#i;%eBY+bA%IX3Q2Du@rNq_n8zpw+sf$Vq)h_C9}xZ(+s z@kyf)ysja%Ab1kw#GbC$O&Xp%T;+x@*|VAxugDao>*{+RP5hP9vR|4N<;<3jI`$aD zf1d5eMA)u<-x#qniXcWGJma*EFtk+yFI|hBFDMNmY*PX@$+bi)H?N-Bj*yS)G2Yf1 zR(3`7*Wzy07v{`r)y369iT@-$@9^7gw{=A}UOA8_JVYbERS)sVs^}B~&!iYe6R18; z$&1je$~JiaU}A&za94fBQDtBFKr86DDe9y+RPj_?d*3Rat1O&XcgOYL?A{j@-8W*V z9j{(Wd@?TlCBS}z0hZw{tHr8xoF#mNE2m8Myt!4(P%CAigJ3Mg>1crFH0hihS-n7_Bsw{}8YN zU#S&G9L!blZyE|KioB!EG*#nqAR&Mfggp?$2xsd0`uZNO1!00cCcNU@#wzdip0r+l z3r`F&d~_FTlQ|eU6E|U#l$J@lSalmM?~CZ5UtTp4O~bj(DGr-qydjBa zB3hRO`MXq?l|`~{K@T{Gy+ap6m{Wf`9|Wq>oNj&#M`DM`$K)N3;A}U2xp*n!*kV4<%Cn?~NH>uc1va1quZ@k(K4oMD&4)>f{D*0x zBPiu>mr6GwPu6x(=C;aMp-^{HtO1|Q-N#VBK)qfAgN{BD`jBd#NY~@ zt#7KfMp@CLj#fz#d_4gWMlJIxz?nEaXvx(u2$WBJL90R756bSHcIPc9ui}4{V<)9j zyEy*f8PGt(U}y4iX#ZEIjbg2W{YP2}c08)BXDzB!wGs*InEN4~Jw0e1rQbU>8b(=4>pIR-ny_Q>Uno>OnpH$f6EQz4Yjz=|N zA>zSCxs(jej0EP$ti6|f31D-4LaC)owZH@cwqo3bjoa-kX5Q>M^+olO_h_4&n`WX0 zR5se-Jq&U_9uH@IFB{!o`q=fl-hkusKlRG8AvYxIv%h>1uB{=EH(&y6aLz(SO+y4BoUKUk zIwIAs`w(kgCYxM?>@>=gY;wV>W*TH-Q^HrMlkmd3&U0WKZ+T!MSZF~9mxB<7gY-rY zao1 zRw)ObR+pi5pxt_{75NZrK~KOu{Fx4J2+o}l!USsp{!qdBJB}js6ls1~Fsuixd?g`U zr}rmM+??0kHDH2gBGQtC+ay@EiqnUNG!=b|k)9Bin#gdXGM{K4ttH>~jcYg+>WPC9 z{xV(ZM4Y!BMWxpG8vSeojpnjI`8TsM&m7Qk*nt|;VW{>Gd-<03EaIf?i0Kz^Mi%kN zpOD=b0m7{E73=h~vF=j9;BJ$eA|2tE+|8Kso-9kU&CdMLCrM0tI2lW<+vuV*(-Bsa zX0c{zKJ$0<#+WdDUt_FF9o4doCrPNd|5eNZ{>NH_$D{t-BAxm^=0lemQc%A+G@g(3 zqI-a%ipFuB4qj;FPC84|l`=UyJKIG=KjXm=q<-R(XUcsBoVy(1-sou34P2LlvUT(P`0M%atl@X74iFkg8O;e zpj#I_oF0=Zg?@jiqvs)^)N!liKH*&ia}gLwcr}2EuX)+>>6GD9w)D086PU5;0f!+O z>+I&SaJ%(0@5_igPf>gfwm)x}V-5Q)ggrzCbPS0*7I>Kgja{j-T_wd2dqN=UPgxnEUIjfK^FxR`FHYwfnp#l+A~(nN zXVv=;0{I~shU8qM-_ay9qq?4y(Sy5t3`RVba+z<%Vd!k)O zJJ_ZqI&+n2__%)i5G|Jac*~R7=*|D8?JRzyFY`|^+*QJ6-0Pw1Y0Ue`TQ~AK{m)oi zwCMHG;%&RnbGGlKc>lP@rMi%p zx9hvYkA=QvO-sb0PplTG?N9BY{&hIn(-NNXWauJ)Jgm;7%N#@?1^I=Fz7)S)%n@ev z#=J88+q0|6Op*+pOSL#AeGq{v=LDe(YBNsd*WXq>YjGg>@mF60DNOpjIH^4S06kTc zvK%9k$Cru`I^bW6bb^%QEq6f1^-&2l36SNtI30e%D?$v7xbc%@ z#s>dy*{`piAtH zt6U0CPK56x=oAXA(TC-&#IUSUREgn*bsWal#(e&x@Ot5Rt#U#~#_M|Men6YBsCjZ0 zOm|(ly#B8f>EUHvRfPk*&bPHXdRd#U9 jzr+9kpZ~w*y?GS(iQ}>3+Z8`XLcBi8D1ytSi~{}#+in=h literal 63366 zcmYg%1yGw!w03X{Qi=qpf?G-{t_6w|*Wg~DXmPjTP@uTGySsaFcXxN!n|}BHGyhC7 zlf0Ac9@}%CBO4?qBZi4ij1B+*FeSuA6aWBtDC|vuiVSbmO*afk%Lj>8sm?RqjL1e(q0Ng@G0c?UiV8FA=znLJZXo~? zOZ78a-I7rHoo^=S#!R^=^MN7Js<#&u(Li zCi7rPvZrZ{v_m@*cpP?Jeo=WmQ6u3TuU1^M1-)fzJB^^T3rTsUWO}%x;ltWu4MJ=* z*iT}hg;OPS4~)-h_}Cbt7Ay_FzS&=1%E{r0$~$MiUk>Bc`_M;s^9!#=Ss(3ax+F2c z2gU(CfYyB6!VC7f^JlxpgoJUCusgd_I7zjf1`~@|aAtmS|Ec*kPj4Gyav~ic}r6{xWmwbi1R{;yrmS!`% zf{}-o5*^&AP#E702)-dDD z^4iL2Z%5|i7zU7mVLa;t45Blic#JHv+4wh?3*QZJDt`7x+ z-XhQbQhXf8G9bzRC|~rp7Bt{6Ei$L_Z$+hb33v&^>i#}qA^8SuXw$jt=EzKYq!-dS zd_W%Hx6S43+kaf6Yp2L?g8yXZlLiR=xqF_k@#+zRWcCIpmlQa4PjII%^8Uxs8kKu@ zL{~cQKo))PqU0w%Ff%B+bIaC?zXCZp#=3Wb9F6!5MkbIXP2{Zv{3#MmO^oJ$GQ$(4 zVhSQn?H{+0r2$I7A5_pGz> zw-bV$P-$7j6*5Vwfxlia#XX9o*XN`fa`P16p1w7M=e#XU#*R@b#d6bvH|qv|r6!>R zk%ucj0AZG%BP0|M+hHdGZ~IXzJUjPKMvY3RZm*Fb)52J}$kp`*@81XuE#JBu6*o`x z!8uCmUHcWEtP@VJUd$}%ndYBnEz5UHL2W_peJWFm-i|QnhR* zitCULBUhs`_988G%hCG`;TN}RZKCxbKr{3En(^kd$IAeA9*0&=E z6hWtKhPAn1*Ofl1KBC#wJ7J=I^;6T!Xh1LFVSybenPk@~JckJ*j%0>atk}Sa?YHS? zrx~Sn&jj`WBkr?#87F~23zOh-i(vwB1*O(KrO?OUnfbsDIU>tmBfE6lk)1JT1V%#J za`oiu^id!g^Lmrep?|87af1)mXsLvzf0zx?D&PJ`!YM(}5*IL5-Af)N{{rr7s9z}} zz-Y}36|6w8&9QM!w1ft1y!33;8>`Trf}{@f+ilpERqb<_-b|kQaFEo~Z#J*&6r0A3 zs0`*~7TiRfTF#!bX`~sKTejJ*TYq*(E^wRivTswsi=hG$e??I@wC|=F-!IGPvH_sj z?r9F&3=(kOG;oVAvYK?Q(K51%n!v$qO>fLUMtnGVQw0N6TEo#>hhEou8p(RRmIoKO z5Zi9k>}w90HPTITXL9V&ZJu4Ui{9Kfui}5?#1oz8Zz%hT237LTAO9OJ&rL5jy|E>> zQfjCt&aJXIt{o=viCe91H5xd}1W7rHD9X|fMnG28YEzX44RHb&2nv4~n`Kv2OU_=8 z0Rsh&H9<#z7=b4hJJZwvsOU(p)k=Pq{hcb?p7{g*!-wh(wszeZ4EAFK)7-^v7KY^E zhdr}5H-G+f0My$dlRqoLc*E+G8=CR_UC6Co7=R5wq5GCZR5Cg}uq}8G0+_ZGn#L0> zBrbms__FI_ivA6*u9Z`7Oaw`F&Cg)G!FtY~25h2(kUP&p@`Ki)XCeHD=3-0fbuKzG znek_^VgG!!4+&VScNgoZE=8n?d=T*iX%n&b1k76(#0*3|ixc=0B$w=e{W)IoJ+Jz} z{8}e+#Ee}66pbp+Q)hsn2W9{}&CLUS<2&tj1qUGkge9hMULir%Us|(}t!I9_-`F*s~(H9jQ}>Gfqd?I(4&Zq#d%){E>=0%!uGlqXL;!=7 zwP~3b5IH^2)wbs$d8Ta%fm1=#m055xxXfL*T(cVEKkSt6X-o7#1qn` z<(N<6+;o{6YxrLGMu{&#hEO#7=q7H>D#C@T3s6&1DJbiMFU!52nQgqA%pcXG-ShG_ zV@Lm5D!(gipH2~bgejMZ5)XV>#r>XwJB?bX`pZ7wLF~(p`9n;@C6GNUD%yxU z(hUdaUo^5&&G8iqzCZ^4P@r}${{z_hFC-M|ih{E9;h{qFGDOq_7}>y@`Fk|9e<9hA zrcppnO;JD(Y=+xL_iH6iTtx@&zfdnKPcGLQpMyc>|M1^0@kHMsV_^7y1dF~;J^t9A zkZ;jI(q@2*-=t9x5cUTVZhE~j-;ueP>{vHRBe{fXOfu_8gZt;kL-O2psIA1wrpmD< zL}lcAu>H}qj6Q+u{Aw5Zs?|V}{!gM{7~lwP%KC+nZYp5Sswn*fesRtA{qEo;`kc}? zP8pjPRo&L?uL<_UX+58=#OCV+iOZJV$8A`1$NHw;SSz1Vy-8Wm|lxU7Sx0AB`OiGUuane6L|>$ak(XNC%Hv z3ZZ--+hN~cY(knQeX*%xTt!{sohUQg+Vk*SN&9#Z!n%AEP9iROmJ(@k!?JLL$HP-+ z64S#;F^;$IxYSodK(@4xy83;}NAu^irM$0!vUy6`@ra-M(efgmDanVFP4UOcV6*TU zAsDmrz8%qK$d6o^i?W}AKJSA(w5z!XO=jLEaO|4b)W>L)>(aZEI=EYnJ&gF&=orjg z{W7llW)bqXLA&HWg?;u4-EL*#<9X%cgt7mZtPWiX-)FX%&qFuA^|f=V5~MU2@LF{Y zncCLPr8$|=`lSn+YG_%^sLvZLN*F7{dYX}rzU65OIuOfgZkelaf0~x~SrSIK#+~|t z+O`>Dy>$Fo-Zft=%&2Qw7*V|Wq}0%AFe6Wqk;V461HX1vQ%vZ{D(7&HaVh^Z9X#Le53 zaPao+UNi#$A_PcTh0o$+t}nD@KfFmqEEb-*au8gi!}wbG>tvZAnZWok!u~^hZ#9I{ z3?ZngM#NhP!O#GJY+D>#K1AN$i35=Ba8WXcYlRxHhuLFt62^XI>}0JfS4d#>C!68F z-qq*iU^81byzqjpVx(=5O2qx9wWBq+ltL>_mPh?s`(_xihY=D;r-M8 zy#|8C7qxO-FT;gO;+V~{$A{HppF}4nC{yX-SVj8~^1i59g8r=IP-AR)NywXf2RQK8b}&NIp;)7s z&}I43A_+oNCUXR6ucSR_@Jm;xkzfZT<6*@W+m7d*N)$utP5f z6#fH^R-Yw1{1VohEzt|s`fbm_ZkQMQAZZ1opU`1rxV@%fOWrtgiK);bM8 z8NU90!?z=fvvempRO4|L;Kk7EFr+tsfv9)(ajkZyW>|3~*A)uacz~!kw(^Q;Jh@?U z8m^|=CJdt+G!(y(+~4JLKUaz5)7!~`j{Y@;kC}qJ!#|BiR&R? zV&5wr-^zomN$mCIPZvh~s@I4c+@Lv${%-sh0)}afV-Gb0&F&NfX$~ARPG2 zILhepEC9X@j`#_oM$L`zGq%CWtzaRW6`S<~Kg@1C=9Ra8F}BVBiA>PVZfr}-qYcuu zQyX;oB;aN5u*Lz6t(k5og?N50RW$fxUQ;Tz>8YLu4f4+diu&i zy7QdvK%E;4i$!$sohOX7y2u_`gFynB>|{TCJct=$?2>@ zd(QNz3@(EnQsKhX&(P-r|0zs@kNefs>ub^Ago?p1_L}3-v0Ys$DuKAGCoxkzZD(zw zfi6WJw-gVWAP{m$(teX{_a3_^7V!S}Yc8gPw?%2Vk+B(N(EUn0QeMx@Cs3aQyY6z# z;#1gTJ!ZpA6XLEl@!`tb^``OC-yX)cPR--?LqoSi?6T{L7@SE$q$TnEMq1%FE=z5C zr53kbwYP1EIDEeiAQoDE13}~xvhw#U6pCEA)a39h{XBALy5;O$R)Y-Xr1#?qWfwM! ze+rYO51k3I#TKTI&DF=~g56O?&%cfE1hpyWX02q~@?qk{Wc0acTk3@X@FED&PDE7W`=GwLjGWW4?S^`27#zz>-2Z|BVV*E(=SF0K(@GSmq!< zkE1v!hX^A7{_i1d7b9&crY@2M*q49H;8_{|-}C=nG2c9}z$m{ssKDr-Cv(<_>|faR zWq1{*YaytuW}|EB$Mu2ju~3oCU#dhBF#u|tI_4+G4bD`cEWop!Lz|t_cI?bSoM)Zf zO5i^*tUaQJ1yNhgv^w(luOnST@=B2`@mb7(rS>Y9UNmf~fj}7!je!L(OSokjuJy)U zb`UdX0!Fo=APvme^_2H+J}x{ubJ7M&3bNuc+P6Uo0O-lp2P(Z?QS!1DUX?lNf=y{f<#}Qt2*!+O@!j94W84L;YSQJ3YmQ+cAv06L?fcBxSvoDu zgTcFpc>SJioZjxyzP>uTczhO}*m@;hB{^Rut=8p>$TjBEi=e-&W2wmBc8OjhlQ|Ka z{K6fYo0Tsm;ZOE^TEhR`;H6RD%Pz_4{bHHhV$rgTPe^n=`v~h z(X!r~sjK8!8kRaat$8&*OqZ!pjk?Sz65yo{)yV{B@@9ToGPrES-@ORa^ytEDQ}|^t z>goKVbM-ts`1LsK_2FV9=~Z@m*juOhsw+)_#dY=gjow*KfD5zpeui+|)*AC7!LpF{ z0G=Kg4*z(;eyZIcu;zHus*!RZ=c#uo?s}H$IwdX}?$S#Y$NM*cOf+ZL2y`1Og0<_G z-v8>>wOE>ew@Pu>e9Bkn@tWi5F?d@PzVz}u__8tgjL(rW=QJ)&Gj;kj&qUas{`znj zqH`W5;M$d1Tlx(%YILAunP8SW>Lu@;=poEFl)>ORY7W_Rs<`~{+Z)_g-lbOeSuLAX z_OtS$&62P3bn+EO$^)jVzzS6Ksb|aYk0c(C&lHcht9y^xg=5D#2%CkKr)5)@0^rOm zJLU5{iUW`Pj5>Z6LnINfg!H9`&iTfl{WkaWzSfInRlAiN7d65sbe4e(;W6*a`mOBV z#z6osz1hH4l6X(4R#R$h(ry&Ts?^$mx5MObj)krsm|C$YcWm9oZkqRxXEkSRHeVZ# zEXdMa*IiLgUXQVnrgA7aGlb5f4jlQx#oBXx*)NZ;L`pHI2dS;a*UNQJC+h+)T`d7v z&no?icQXR_Ix*g!sjXL4t30<88Yd4!r{o^SmqtuvZLb$~D|gML@SX3I#r!TMVVL*$ zYG`AlX)CwkrKXI^WLx}kJ+6(^rz3>9aqkyR-*Y1EfPqR!FX;-lcTI@)RUXIc%c>>! z`QAy=x9J>xOw#+pi{*=1Nk-q%S=~FHKK?xI!bJ@JC%Wrq4gM1CvlWA=w#QfjmmCO+ z&h%AmT#M5d1+|;wYEi1IjW*xqh*jb4&FkuCmZwP#7wy{D;n9%{19>YolqgK+jE1% z^;C25xg)&jyTAoU;YByy_92C0TZZ@9y*?Rfy+(^j9pT>S=;Wl%S?l8K$@b~pB(%(F z*H!x|xK_Zb^y$nvFU@h6kEF-js_gaPSjXe;UhL#f={jjeEd?6TE#gOWDAP5?sx%W_ z5F+cJHC@Egmh2T{aO|~er5iCaj2DyaZ_PsXSJW*1?n%ORyh(uc?zGPBwDv$ahPuS;BDpj3U-UxX^r$Ti;LsxmDMWyxzl#Qi+an}2beXzJn$SSU^>R6)r)C4 zC<d@WI(;odNwZ(fcDZSfo30YTwWLDOQ5e1Nj~nq^nK0zy zdsVA*m*=|_b}TZ!b$i%f=2*Fi;VX0fo>i=syN%eaE(zY zD$T5jph980&>PmQ@uP1&gdOqO?InzQ&JNQIge^7Pm{E|cz8=r{x}2{OejV>_yFRzd zH(qW)gEp}tYF|}=5xJjr3fuMySPky=$pT8dt476UA~;epJsn{SH20dD%5g(%4!rZ_Cm;u zwp~>Hf+$lE@{l)zf9r7)wCZ+iq2s!rwE9f^F@A&wN#QK{BT&Ith#gkr+G zbyfvZ>J9RMrbskO7ftcQ&a!AbzoK7H#E~~{-C~hHq%8PzJkL6%%V$PV5hv`%W&Tr7 zr!F;Rxl*0XvX3OL{>Oyd@1AXH>r}m89Q$FiGgfG9P%PRB4 z)K%ONZpoWZp1+_ZuHcw@_?r5;c_gU&zXw*nK~@An1K_+j?|4$W8{HrQ%RUfCE($WG zcOAO4C~Gy+&_^syj=I}+`>01OHg}b-HT;KHfl1vvSyycGhk?^C>{^$V&yQ&(>!%T^ zFWW7%+P5Vwv*a#O$Q{_NlCe#-1zN2ibZG|af|C{~CKgG-?5A&G4GQ#I4KQGNAJUrjLY_=r% z6kA4+zWo6T-otNsIuIURbUkZ?`^?Cw@)gs*g?Qz}S$UJB6pbouM%t5L?{T9Qp{(si z83p^rpOJ)|+LHLG1v=}_XsE?&z1(z5#%tHL(#tV*+ETl}NsMT<b<BiqR9x!MujHKY;!D~G5phVnj)Eu^Fof zLvxOaNcZV$wwmD@g=+oC;2U|I+TRf7)@_`r*aLwT$m-z`e|M zxy)}7=S(j`Ud8P-XJ?JA+{psPQVH2UoToFVFDXV{s=rAs7_CpdDx?>$Syk@53R!bR*bSB zDLSCcf?(_#H!%BNb5eB(%)j2Nv#){uKk`u|Q9^L1^}uO{-+^iKEz9+F%{Zqnq0n7B-z1V%oPw z>29*M_YbqJ>>G{-9qDQT5MbF--RTqCyyyLI7y$O4VR^-1OuY7dn9-P?Meq(3{(EBw zr(EGR;4tV&em_%JdldB)HXpEg>e=Q3gX!p)$RUxKo$c1;K1kzRBuAaqMubcD8mkzI zdfLF()H+i20xNECcaz@kS413boazmDX}|m(MHT)YtRa?f?E~=bmbBWG1Zm%@Ecppw zg?*I~76kG9V!AxV!EPTRZ=Q;wmW#^4Df`FUA|3Y;+pk@%$f5rLdPc^QYV#IVhP~#& zr62$5Wx}Yhmt-r=BID%Z>QydTS9*0VN3#&Vj?G_ZNR*L|hN|%zJ)+GGxMCiQqkO<4 z{+;oCSg~TQ#?5yxTPu5e)R!X*+`;Up7$bvwzDo9AN}Sx75Zg!KK=n69MY9gI0wmkd z%!BK+{3P+_mHtjN#jEBO>mxOMuJ3^ovPswLRe#GkL-bBC1uY7U)JXfT?16uhqB$h; zHs^PoQ~>!HUuv-QB6j1z;^*J~egp=K$^j&OxQ41JJnjb%8gg>p)qhIAsr=5uC!pgc z4Jf*NIE*5vWDU3r_xa>xp%<@c*(g13UtWd|l+qeUdz2O`M{s>I@h@#;S>n&`@h zLE%)Yu)JmF^PCXWP@(ega)EC;^^weLnZnAur8Ux>2FQ1&Jr6AgGY|{cY=0YlNv@cg zHSS6=;{nn-s87PrJkT$3;V@Bj%ebX>?!tK$@cC*Pt9|`m!IF1u(eWZ~Xs-p|H*Ws@ z`#S*yG$`*spY3J8txK(U#&L4AglS_RaN!UVr<*90BWAY_BdJ}7e2tm@csAp3VoHW!yv^%y4X0J{`1$qdUojUY6ThINXwkILB zN&fKRAtUegA>0fV&4iYItB6FUi5^%}8&CVAJ!%Wzyw`a1Lp@0vCNCCTXDC%AJ2KD# zG6`HdM$T^xD1MHW)oN!-Bjl{irI*)72>S9vLc< z!^;KFpT6P2${K2l$jtmXJhdp~LmzZ$wPds!r!e63{Cb9{KU=fxqybAaqS&d7aa<^!4U| zV9Y{Yc-{2bQMgWddB-kkY!dl;l^HW6010G&c?}>%Cna`F+M2x6#1hm*2FZw^t9MlL zZyKQ9nSVOlt31L~Up1`)j8d3^K!dax;^C0X#AADnwYiN-xzYyjDRnWzn=;^;Gw4yt zr|sUu9S7OjgKnTovPw<;nPqu~Z1-qhsxuwYy`L8@Q+!xkrPv48@ZF0eYqfbhBR-h+ zu+kl{=`A!*J|EWBvKcmJU0z|hK+q0(jKKm;$#Pt?_uXgvH(PqQ{z1iV-Xu1^YUXSF za&Ui440ybHrGasvF(JKQo4HtQx!H)hx6OUM`s2CIAyAoPL|7-(`Iw+M#a|#DO@$6w zsT2+#`@@AZrf~oC8#g?o2I41y;CluTf9+edBxglbxlhid0pL|&42MBr16yZpl2I^| z&H&d_Y-jCkyCgTJ(-4i|M@Cq$rVvMO%qyLDmqKIkBQSAY$#H-ns1!e)m4H)iB$egN zh|&CS=h`yGy|_tg$}N~26irR=9ZtOhXMjCvA6Ml4;oZoxqYe(^<_(b)74T&Ga8kC> zGq%d*tFRw(y)zLjd5^VmbL95v7+EWIAocSz*7Cy_)G#=lIJnRYN94&zBQ7=V*1E~n zK}86opHVq#S7oiN4wa8sG?K&h%oA6;p@6^bXjeu|Sl-0IB;>dA+t{*oO8(IV8&AOG zHRNn(pw7gNju24LOW%NXmh7lTK3MX+&~7y=R-P;=7_O>CfQsSUaoi2dC0jev>1U6F zhWYpZh#W(K)g&KaM*vvqK_ z%VY6?>hF^T%U>|P3G$O;^eYDiZ(9RmySX3)9J;1>A)68vg27Y@jFI{Yys09V9lY?p z7vjQYGv!y@=|2Y~!sNQ+QipPj3M zKpj-ZUvUr>G4TqFrBIAoO~e^R2}H2?K_tOvfD+Ywo@h4m__o(as0mG1ax6eFkEczi z8BDtxbuI1^FaBquGUdhttvvBr5(PN$fc#~=DZu87uX1N0M@oU7wpTuOYhXYR#~c3O zx8;!F(+zGnqP+FRIfk*qyf1-9w%OK`N!>m*)Ck6Ry#9K7Hh1?-2zx)^A_sqn&!t>Y zcQ!8H6a1zsCr|rrWx&ACAr_d-+;L{Z2d^1gW?1rNtGTa`j;zu~Kf#NEZw#at@gAt4 z^rJBjZrP=)0tK5t8VeMfC-D;>F3Th+4hh}JqZ*Hqb(JjU$gg(UBc~BQ2>4d)0w0eP ziX`iXw%B65En!zB!i52Tf1p+zFWd+_d|*;6f3-;q`B5IKc2v)PmFEWSy28zJ7x`Vi zVm$tkEUyMusj~8tK>60gS~g;eZu+?G3am8Du>{&9A;2E7p!Krk)AFfIp8@9Qxb|Qo z`gs)3o)0&T{{i95iCO!8@GtO_YIN!pt9b&0*ezDy{S?^${Jq2)Mr{538;D^uqc$WYBKuX0TBpx&$OV{fy1dot0@7rI{qnz2oiglqRq zbICqwhJPyL8e0z?JJQc(Nh@{Bmn*+w!G@y3Q*>a3eTORt{=`n&CN?d%cSUPnkKf(_ zcbI`MshiC@l%`Fev0wQra2;;8oY?aHTNEmAgKOl9{maQ0=)8I4wKYIQ<*qltT$gIw^ZDzdJv_ z`{^%>tWZ6`7N4`M0?SYM+tc6H1|n^q*Fj~|Aag$gDtF7%-uylHqR@xlQGF9HsPb-) z%jW{!8#b+R?F!=rN&H;)>EE0zCoWZc3D`!Zod@idG(5e1)Dj;1;x#TM%&q4QE49

%rLSm{L#3XB_PhU@*(6dp*C5=(hYfC^oN72WfFy~`&xz@Tw@anKM2=!ke_ z{d=GnkkaM_@nS~)Pk0mqN|r={!LF`ma5S_cLh)ct4OA@&s9o&pCBV6P7ncbzKw=V$ zMj8Ew$Sf$Fa;)7-yOPQ=eaTjw-v*iBe+2HJ0nv;5t&QKSB2TpUTbl|Xu;50eK*wVg zj2B5m?-LbJ#yf>n58`9QmE~+u3ASGHJ1WiR%`SZ8WBo6`gR*fw*6f?e9jHg+?%n1P zG>C@(QTi5y7Z^pmC^A`!8rr^4n+6fM;xq`mhD&c7lM{B%2H*stII}bzwx)jMB(5pIfoRc2R6NqK4gGMTB%%b zfMsoHEgY$9!6;evNQe}J#0Ma24bUDAHbH`3pT;f+GMaxlj%>|+-3T%LCmllIO&Fz) zW~7_~`ry<=M9hbWT{Cn&Dn~+F=6Iwo}JuC^>8aFo+5@iG`GCV;)(#K+^w@Zd}?ZV=fSE z@dRqYe!_RBMbq8 zEbtDKSUO*||0I9j6o$kigA4&^_-~L&;M|+ECI{b$LQv83fBz=;+mi-dsq%$dKZ z{Jju1gUnovFe3yv!90&5>al({E0254{NcmmD^1o9nuaSg%al%MGfJ2s0UZi>8mkIk z%TSF4vH)c{rCPJu(!3Cs1`$~Dod{F+afj=Pyv@kg64wlvfO|g3PFrp7i3*~}OL4gg zo8U=Nph^8-omppdqZr5<5~6c3+O65re-PJz!=qxpTP$bvU6#3`L}lqnPY$2JEBmax z2ts>6g(|7*mLmr#O3QS3oNkYxt0Adwl%xA!6>n^magoxG6gWISt`JtD$MRk#ylz#l zNI2K%BD?tOD=k2XG6gVWwrULXrh;hxo&KsQ($M~#hQhelx2hsFBm_gdO6n!u_To?2 z%V7G_Zx_j>epDCLRi^XUx=Dr)dV`7VzfIkl>!VlWg%9g?Vhpq}%2Rs=25DjfdsD3O zYMx300haK!zf0ZYJJ{_t9w9;Q`|a$~8Y)fSjt+Te;?Oa(-yp*ZWWlJu3Z7M6KAn`2 zvUwBZoIxQhhWJZ=Npg7sO5;6*MFoG}bjJ22L99IwXFZpJZ*=6sA;k^}^eh1bH18PR z9bPHyM@kex-GV>af*TbN;z>gvPI>HIHS5IeUHg4HO~CO3dx~(C_=2&5nk^Vxz;bD> zq}x(>!5V#ajG1*5lfS6#pjZp|BV~gXMvuM@R(MJN<%8t2GdrVbi)g~XA0R3(%m^o$ zm~S2R)4E}jEax&*w+USkT9Kn=C)}zWGr-gG#zCEHG9^B{*GI?6dSf{Q z->F&Jcd)oB=->&T7Y>!w4qr>)y|To_Srl5kuD(i#IKfv_+;mF$UU>h=06AR6Dx=!v zg?XX@n)RMF4vN*6G(k7Yg;SQ=hfo7V;iBJqdj=b=QF}+?L_Hoyh z{qv+RBQ*c{oyK4XgqOrW2G*GTJ|yugDgJ5F?Gy3!%40bP8^*kwMa0~xHW!)k&SKhl zMzgz{p;gnLcnfjn)(11Ga&h-Xb1xZ%KE-$rAOg|dN;ow>%S{2!4oX(Z!r`C_Ggr|@ z(`H`ya=Imi0F#e1y`oQTM+#vK-C>+2T zVECJWt#qU55>m?8TM=QDcV71e9vrUI7a#+9=&+ z1@^+V-Js!2%KZ7EU~WK34e9b6NU-!fw7XSUdyYVY#3!1v>O(;YX?DJ*kI;vTgYVs^ zskAJP@TQCRiw|ed;vW!WBX-SzUDM??McZw%7(3zj6b$p6}PQo?d~La%kN z?a#Db-TMbi4rjH|1Vxm3-~d0}Fi~vyLI@g8m8FkK zfl`ol>1D_MiL|A$*O04-a-=RI0{}~4=m3MNVU}0n%FTNQDB5liX4I?(HuOY{{=ekx0oF(PgV_s!gW!ICcs^Y@du-> zD|Qq+4dMm$ig#qUPCWGJbYAZQe9_({kWz;!W5-`$0Trh1WrT5Mj9CvpA-DS$`!F;r zUk>3Q8%PxUbgln{Z$PcYR4`C`C6mgF!MVM`^Rkw(P?1ZA4RlMMG}s(^7Qny9=O#!V zZfu`+8YzRYyc(@9vPXYVimijC;VvR#aw%wgrq_0GOzVwW?Ztj zQuq=nAK&Gi$!I+4TPc#%Dz~yIs~iE5dmw2N+3ui0X8lLW;#IJHB4Kj3HazUOYSR+{ zgO#m)0s_JHDTtZfR^W&%;Z%L9DZb5o2%1=}!`FSUP68ml?6(BjqIY`MC~=ebdiwXC zxNFq2<o1ybohR^_}UZmZ#x+E5?UL? z#h$%E{7YQn*9(Vq2)xVyIfn9OhLK#B67#6&5;GJ;2f#~cV#+XOZP$#WkrqwLu&cC( zBf_M5O7}$;4ARBe(SW^tt8l+8?O1^RnMwU;(}=`DJGpO#R9!vrzN~Jf;sz@M?ysjR z^4#zF+?S$rmVS`6(D#LN=z+Jv5ToIwU(c~b)GG*cRXR)DOuFa*(%;$*A zMJ5tdpag?N$c4_yh_Cv8i0(`MGyfA1GKxP(K(2!OX|(ZxKDCMr5o_<*FJb?*Hwqzc zxWa!gicNwlHQ&Z^mGG+Dgb$zt7g%s6<#o%E1{)V6kzg|hR&BN!ZF+T8`vk1V=Jw9u zcKm%Kv10qnc$TgXEkL`;BAbPUVx5`RCZL_Qy`+GznZQWP!)#H(8Rmkg!cG_18FIQC zEAaHSp%+pTEb2&TP_z!+P3!24QL+^pqc^$I>#2X^MYW*1CE4kJl-NELFxXI>eliiF zRFlr$G(bwacV2~c4N##MK2-)bmg2(-Pb+4OBXTSB4$TUw~-wb>zcKwuN9Mzbr42vMv07s*6YE zmB4D#jlBKN#JD?My8oMYk(w^f!T4udgm8t<#2C;s$7hgQcodxOyF{ZG>| z{pR}__9U5v|9Qb*K~zi$kya1n5JcdN`t7LRlTMIp4%g(PA3XzxJ{9ROW#~6feoPfM zn;^4PBJGo%7IBbWhc2e>AO!IcPQlizK+Sm4g#fL20WRV*q|fWn@keJj_)u%0>ynL*CAnsi2hj$_tjn57qi zU*l{W9`sMA5*=$};`N*2R~~QT_pA7C*F_7uDg(b58mzk51;9XQ(FZlBwN14OUjw<* zL`P2Ij|$G1P#*aLjEP`?*m>(xw63$`nVpd5f&eieV)gP#~I9<(kFQB zmr_S#S|hQQ&clAE2Tn?41_NN@;q>bPP6eHdc#MARc+7_5^n3n7>PU_r4%dr$4+)ke zjeI4G!hUXS{#QwN)=qQO_SV76L?$W)uja>$leg+dK ziTsw2IGsL_zphc>_;(T_))sJSeM+5_2;vu{$W6;0yaafqg={;YLxclWvX#L>pP%TK zN4#`eHTJ}W6)J%}9GZB?9;RNei`lb9b|yH*Q;$3$3q!4J0%C=5ecxkWe}%X@fku<; zl_6wo|5eIT13I|wFuqA9tiO3BS4WECbii*c*}uuQ6hnVD=?9;S!`WN&>FIRJ+~L;V zW{dYpG}v8 zs1SOh^UODDph7CN1B-m+$+ukrI6uel<8b*EJ@8Wt9aA+rwR>$3_Zn zCOo7p_D$g%<3* zY@R$SG?z1dF*D0zw5QS7M)s5w8B|kMWCiQdsf|>kf$2wWn>Ug&U;j$SV=-iWf&X+O z$!`HKOZg`+I>~Oc^663;a38_;;*O#<3w~E*%q4%| zgA?0#?XLy)q~aN`QFo}F8>;@J$ARzp(-QmmctZti=^&W9Q$JGF=sEP{7@y$;;}EGO znO5E%Ry7cYz>&7d+`0TYG{7&108y*qBx_~Ag?%KliK&{lnZpthe<|lJU?F#2Zbm5<@ z2G7bZ`48vq(BJeGnk1sNXBNDzEK*q4KJeDUqmt2Z_y?guoe_QToyu$5 z3oC-_E{IOEBhf4hL~vvYS80-4SFBl}V-` zuhmuwhYW@y5PWxbH6%q|RJ2VT9VFbmeB-qcS@gTdOGpO~6n!o7nYvoP<-)xJoxOL? z(lgZA60~Ibh%hn}mlzAX(A6fKCPW{`GXd;V`VhCq>u+R8+xy|HriY$$XIxkUG<0sj z0JHV=by9jCyE5g%a9P2+oD4SPeqE7`z##H(ExYMt(xJ`1!OGuRT~_VaZFPRi*lL1l zBiMHzN}B=E9|2H!JV%#PikH8 z8aOdNcr)y(!}O8Ozn1tM9QzYMF45i8L%*k7#b#AZDp0GBPkJ+i5#gAV(I8ap`*6B; z4$MySSzRkc3ZPPHm*CP=m+8!lxYc<$X`(isq+wA6?;*q!0iq5qI_9f!2UmkQ_2eF^ zei>ip=%c0`0-TXw9QwREUi$}ddU=!Faf`OYppAH-2Lu;4J#2%NQbH?(E%Q0js z9vw*8t`WRYeDXQ&x-v?=h!h3&kGdZ`px$hE4{*9qf!WI`hct*Po$o4e!?GLPNVVmD zx9O66V;T`N-<*>{Am%97M6*hYUUjsQnuX)o{+l*auRA7~kLVQWXMulaJYt1eYf6O$ z!V6i#dx$_PE?e?pMbl5{uo59bXF&iCauaAB2F4nLXJF(Bjq}dLaArNW8v;Y#1D{gq5k(Q<{iYRdA88Vx!XeZRns zJO6UL^?jq>e#1>VcfVl(Hm&=C5=7@SS5#xCh{V`xO+n&v7|n(n`6IosoyAwGbFKYs zrrD6kFII*jqjFg#B3EJ}|L$UcD^OI~KlF|6M0{T6y>K zv(ase1=ZWVmG-M|wei2!FJiF0TR4d@uSF2X~1{iy+_?pLJ0XQK_!f0U+HEl4*3vnpT`jkqvQ6gFYp=0R5Qaw##K09Kc;j)8QM7DBHQ91Yn-J6 zJFWh1%I)1Z`|JZ^)r-5dkflhy7SGy}IhwMVY`inECx4Cwzjv#Rvj?}#B<{YLx0ybS zA7w-0e?aJ-$UMV_OXO#fBNHe-5)3 z@DIs5pO3EN*{>WyhHO}h{p@fjELd9fs#2r3nW9^3Tp^FID@TndFb8aTOFc=UAs&^>AWVwURC z-Cf(cyV`!;_g=5T?!<)Q{1&U z6e#Xr?&tmT|H|6z&g`6XW--MCLQhdfi~DB$^)5YetQ)^wj%Qg!cD8ARKiRVafax^5 z7(zsUHXMe2ji$CU9!P}w9&kt-E&*nU>h+O1Z=fMiU38!@DD<01lm>VcQJNI)D;mFB z4|?HFpm-z3{Qa7l?}j6Xjo`rgq~;s-l}>&W5Q}g%k^9K@3&eG|D_I~bRrVuq@bhan z$`3mj#HrFiA+u)6{YgmUa4M71mxJ1U_gFe}iUL83zRnCwgmcHaq&}l~kd_Ll zZ!5WJ23l8stsXWsb-g9Z(xR#g=w>E>*GfbU)P&^yB(i?zb-657ut}%4LfofSr(76W zdD-GVx}0grMoE0#zW-ptu1B!fnINKta0-hyR*-|4zOIU%*&@srC+W`z#X$1|#-wox zt&pOsa0H;ZY?X7q3wGQSn$T}2Z`jv5d2*LAyB8OeW(M-Djmc?S%hRDxDI8bTh=U;> zs;0bxS@W8SIN_1b_y9@sTv}~3{`k%@ItL(4rI92&)F=mUnMSWFSj{>}+>kskI(uSG zm&sTm`#U6mwYF?vc^uNbPfw&AuR=^d^CZ-j(aN6iB>xOxI(IegMxP~cfEk4 z@8gO&QFV|HOxfdMW>%ae1XB=O(VXy!c>IOwvq=KPQNw^8Ehlq)U~L2-K2@O;7WpcL z%=ZHdC1~1U)CN@mRRNY}d5eS}z#10z4!IG!=KEUvEX>0J_^al4t`e%6y>x^31bLLA z{}RrB%zDSB?k8;^tL12r)SQS1fXzo`)t^>8X>YE`DRau@(FZX0ezqz+JA(4gTxS4( z3t?BrD)Pd~h0gv+-M9EOf9U9OvusJ9gV|u%W#U%R&Z}|3ybS63QrKX?8=xWb7~HDSk8seg%L4Jo!)q_9RGyM z#~x+iS4D%<`^2=P1^eAbk>kuxHWyga&%ss!%JvJW0UPnDqx_I3 z-4sqcIAR-MlS$RBFi*KM<53m#kgdzONl(3+7d@mIEIaSGB%5_8yy#H!!MZtutGQ_Hns0Asa6#ETlWQonx2HBPzV`Lac67 zgJ`}8bH+&zSto1hDe;=}`?~>F?cB;C%|s1Yw#S77?&;^06~l z-A$(sp0G(1Uw8LU4WAd+u!^@BInrjZl4{bLA@>rS7Jsvi%wwzySr@i$!PRY!RoZb* z*prxzB|4(3o(ntX&pFXjFhg#Te&OBy^dB?rEOC%2zSM#%4K%@NLmLFwT1p`jM0Y-Z21`%q6R_wQH>9bwT^o6$nmt2Uo{`j4H#?;t|%#Sfpc zt*!Xt?Z=Q3$2;JE-%!+(Qw};dAYsfC4wom;n3~!pGMoO)xg@NU6H!Z&Q?6F$}LCXk)G6&pe-|%!olszx*uLznF$lFCCpBx~ghKmJ}`2R?!e*F1d zytq7$&Y~d8{a0q!;d=-j3bnE-^Y-`n7540&(_+&Tsq0~%9?1k`MHfs~juS1598h}b1q$$z(chU@q%-6$um6-~? ztlEe0^zcmF<5+@OH_@^53ALcjwprlmpkx;zR!kxg%Ohj)k8O1-&8)BD(!5yq5QA$H3p??pG^Z#)3_~1CjV( znbqHLfcxZ$URo*_3?{&RzwD^2021@KfQwFF-#pH~tI-CIjc$PkZ#hEpu&_7M9awMf z))5?do{?DM#}p}eEECn&PZ7?CBIfix^xNZhG7KYD&(q`h+Pv(;7?F? zeP*(e-!E5?oxmv!jN>+cEIujd#>9RPtHIEK-y+~CBo8{tPnN4xxbS1I|L$GWn-|j^ z%#sKq8mp@ZQK4|(+w!#2RZl4pYrg9{lNu+N9^O&;)J<30fb2ovP6V66Bj*EY)KoW`VisUR^?+rfO87@m>jG6~wqYZVr; z9mg@Dv;3r$&4?%ZuA=%o zrr1-P@PcV-(ZEKxQ3G0oJG;WcpF`UXREFJYXO*>g{;3EaC2(AYR|m0flIu4f@hpMT zc{J7PO(r^06RevTFl-%4&C2p1Z%Oa!k}>6~!d@jp#qUdzliG;bj45>E;vM2$qtv`> zq8MbF=_@H^ck7#d#4!$U=-PXH{tj`Az`X$sW^7ze8VryKQ{1HlnW08Pg;Pd9;0lC% z7`ONjQ-C{W)j_kA!fVTz)Ho4%Hu+*L+MoL^9r3Z59GS{3S=ov80iXCxb!MF&;r$cQ z3NcS|-1z7s*TEjdC*NR}NTy-pB$$w&N98k&AA}iZRDRc&<{qU~F^8@RMK0$Q&ipCu zu6@_>m2*9Ma0lg34X%fGF}fGmr{g0&ooM-5C`=)B7<5nx0d}(( zDe|?M=}}Vdu~&}F|3GHZ>XMm_+*S8T1BwIkwecsSKUpJTb3o2x_CJ7R|9q3eC9;zV zvDSb?6wSjZ*NO{cAHgf1T0NE~t) zMi(LI4iX=7X1M8sXa6{zn50Lcv=Da|ze`Rjqw+{T=05%DfoIc*l!5STIal@SA1kjb zCj z(!M>$)BNO=ib~g%DFHRz!0uqV(JW4W&yrlnoTGQzsH?NjLiVk`C|q`Mv!rxFo&0cd zOw~5fDcHYWxBdBifIpSvE>?$y760y@kwP;!q$K$>_LyTSQPIVBRDk=(c7l<^NK>|l z(;rOfYx7Zm`QcF{BSg$USp!PM>s0@JDco=3jGfvOd|HzYa%z=>WABe{8NfFGl*YkE zQ;P-7*P7qAozRjq$3aqPP7rzSu`1!ah%W&<&_y^C06cB+5F_i&e5TBX<28FvE16E^ zmRK|;E)ma0#Nfg;3Ma$Fy*=7C(S%r#g%tnU;sAuJ;KP6S=LU+`zZ<8GjghedN700f zW7%1Y?8DFu!lnB8+FrXp7G@fhlPQ+9(n>h^FUc0KKBLob?^(x-UEdExvES}C3JVDt zf2Lj3-uw@KJT#XPS&_~C=+K)lke>&@W2krRM50&|xnoybbeZ}H>`}g1R zDC-RXvelmEWnb5^cb{?sWIM=U3|mJM?ZDnl)e{rmoR#iOfe+0>EUy3L{a=>ID<)AuF27E0i{Ssa;I70dh zBkD+RcR-5tZTe#qF{S>t^<5Y}5lvM{VwR&4Y2L1%cI3RCm#qEG@x0~lI&RzeKgMk29H?d44q?i_yXS?1Snk+)3y*W zP<&<9h9+=EXINZLcRnr@&S+Bv%gUQzqzWY=gi4Zl{naix8^3VuJjvXSMub7+V#HNa zENtfD#$>c(k3tP884YNHaGbUGW7vSCS-_7?@9H;U9i*>fVu%oV+&ic66f+N?Nbew4 zI!+;FnjeYP^nw5XM~RC>#I+GCxhB+eNW(w3XP}Ou!bYKQsUf7b9N43(jT)uwycBm7 z`;J-vN>O+xMhAIffMr3P^AoIw4xUzM;}M$&;LV%wvIY+B84#V+Ry#%~pC(IR>iNOL z(1Zb>7zzI;#+FKX@x-^e3SS`cD&{Fk?l@5? ziJ(>slVlcaOqUJPIk1I5`ZdmNW63FR9szQwjp`T#Q1?2_y9WSg_!>@C|Bf6n(2ROz zJqTiLqg$KO?}d=sFOo|EH9})pY(e^`aiwpL1whnfjhY=)jqs%8S++%Oqn?Gf z6!Cov%tuP}@LQ6bi9K9M>G%DGBGPNW34zP=YGbA3G^=4v0abV8>}62SpS&_-_69MZI(_i6QeSp<8pn(;?vhGybq$3de3$XBMC?y zGe;+Uus>fnhtI#Hu>FI_=^jd+9Gw_tL9g&T^$@FL0$fj^E)ep&NSy6$%RZL?Y7|9Z z#P8F70f(JhsL{qAN``#QMlADBvn$>_9h>^pLar<_g~M`&fV#njBhtGAp}WVYcR!&& z4qtOOrQp40uxgvumSu&bu#EML%vDg}!~C#<2U@}~i0?mA6fkh$0`;`{N_uG z@CccPK!AxvD386~NC3nIP7kAgsee~J zwlQ<1kIi9)o38n!5q#vFz7RI$C$`=7bsO+9+GIj&4BgU4R=Bs3ufV8+A4p1=}1mCC6m2!hkz+swAM75t9H9 zz%dei$P$$AZd8Y-DMlq2{zcyK=Eny^jl-5xn#z1V+_UA0%1GHX`kZ0uL~;GP9T(_1 z+aW7&i#(h0t8@*)h)U$+LihU{3IuoaHaAV6>N6yd8rE> z`z4i=uv=IHZR@ftXeKfWYg?v!PuV&Mk~DH343A)UkGEM%@;s%^<5`xgz_uNApM6{G z;XznF+~1&Y{TY{xpKi8vPR}|v%GkxovlAK$;U-n=LJSDM{MmxS-*~q5(bScYvV0P| z0j+Qm9Qjfd^;V>6@^UZdL*c<_6S|};^L1s68Zly!_b43 zj-SVu%fdqXK_V82eqk_PX-yHwzZEuSVtlP+^K~zZZlDJO;6$G=NYKUr)&5ZPysJ61 zDyaRM5fYs(+g^-EB~zFSHb4meTVND}IUH?_(i`6${NRnz-1lFW0(pw%nn>+XY9HR0 zZQ-I$Ms_`JigC#dfs?i|K=Q}WKcb)(1f&yB%r3;>&mI@6Vgi9>JKvGwJ^I}byEMQ= zi0}Wzx^G;{|MQx(j4xwul(4{5CQ?vQ4K@^hp(B`8U4!sGmSjJEF^9q`B2yLE@g`MzSnw^0F&)R!eg$t$DWD|bgLhH3}y7#jO#eY%i@bhf)WUghSFS$hQes>ObSIL7g$w; zZ|K8Z+V*>_w!H_q_`*v@>!)3TkT2KX<4xP*a6%wB@@OM2E64;Zf1y;=r-LSq>C};$ zzXux945+~recN67ks^qIs>l8b$LHF<3oec&WX6%tR#hSH#ml(iLsnrh{ z3u7brV@&((AXx($78QYWFnA(~+DZx+P}R!UlOr;ySI+Q#gOynBdy({?dTmcD!P1>X z7U9&egJ73#H6dsyOSxT4#O|wD=07+D1R`Ss@=yZD5pHSrOrKCR)CCO>v(SHhpvUZL zIy8iU>yNk0z|>t1TS5mj^NYo$x=}P1$7>55rLje-{)}PG=V|<9zx4olO->IyL$*+=py)?vZx6;qjo~$U(O8X zx3uCH$>K{2^5m`YH2uI`yP3I|Om`)ye}bV9>o9bZ{8%r#u(-JU!+A1> zP-ss;NmrBj?(URmzz=Jx5#EAbYJZ|_|7`NMOG|L_#kWIApaODwZ;`k4np<6Bwtv*R zkta;hO{g_KeSuDH`Jgi7NxJy6U2)a@-kZnT&u#zk>i(7I~q*jQ`F2Vfz)#wDw9w{NfVl?I%s5?;y+*S!#Jm>_=JWtpdbWI<_HuE6c;nr zMG(XmQ$-{OLG4BkbO+TxUg~TvPw;#qE>7%xc&zd6T9l3NawuUy|UPrEwnaDB5$Mlj@ z7@P6+Ycb+~W6%dL31ojV5bNFIemxH|pVmfS^$01~mgpY)Ec2NsF>s5Hjphd5z{Cm% z##Qn33QRp|k*K7G6>0wDU2{XP{RN~UCEsL0A-LpvZ^KneMli*z4MM+>6|4%WQzzPf zGZ<@i%{9k^k>Fkp@=XX%_nh*}?u$QehvJnzWg1z2jGAmlNKI8^jl59_Wl3>H?xR;9KUbHDtkY#0%Kh~_^$NbL`WrUuNR@x!s272d(O`)PSCCCiv{}GNFk~U zqrigCxw6{Aq|@|oCEb)-Qc%|=wcqaZvb{iRWn9(9Ntnh=_TR)NUu~M_`2?#O0r?h5 zQ5glq=&H_ARYE0sH=<-k8#P=NJLShU*Zg=Otk4E-Pb8~CkYd+E`1c6Nsb9aOo-AzO z4Ae)q;eD>+ETcTfsCuX$jTy|$1dZcIxj~uie^V}gr4Q+)rmrh`TFF@x6qg|}u!y*X z>t%!;gvWL3sB)C-oGn9j5Pk|dNcLqZIrTuo z95<=&jQ*-kC9=YDR<@1S-}^pD97f+j2zg2E*&tA(Lv#uZo;gu+eNEbEQbMzD*nn~<0@UIj)jprt~1Z-seRDaY`YvVvS?nqwJuw7*fHq#I?zw$n8>r-Y*TQ>@=wXK2@d z%cfo-C5q_6)B&rYVMRoT<_y#D5sl%pX|cfA$JUDxyU9l<9{R1Hbzy};)sOQX`#@CQ zR&1`8C7S(rtffosU zHj+|5q>KWFR&JD^ly&^?Yq{);@Wf%1h(9x99=RZ$BMSj}d2@Y}y)P0s48C8VJYnT! z)K5{`gx?EoXIkdhP0;DFX+j8eky%)85;4_q9~m#%%f$pMtp70b{$+&i@MWJ7>*>Xt z25nTt7)K_MstVQCJn;;d81p91{ zjvi4`>HnhWZ({zBVR>!C03sB)*pq&MF~?X~@g$J;b(Mmq059^(h;UV6gH zh^~NYl${#`N-c(o8Zd=zAhpZ{(Cakm&r z)k=X#OS#rc_MAwtV&`gPfaW{$UH#=r3Dvk=e3=>r-?Q4|9u6Ve5Qqd!Vf5*)+N%?` zwP03{Ol(W(wnwh8MdD1H3emOErNC7!oe*X)82)!xR>)>==>Pf}C-hLk7FYdNYqqL^ zNajrjm_x69E%O2xgIgIioqS)WB2yfPoqYcLcb_nb+sTCQWak2m5y-+in`q2^Ss=T8 z^^-V|;fh!yH8qu0!bw~+ZsjI3u(5VY^upuqHSnhWF>vU7-rql2{p0O@&rwewLRh#+ z={uMvv*rKa3P_NZh{tWHZTtHkd~R?Y#A*KPJ4Zo{4fM62dnaFys3M_CZ;B+8+tu`_ z%##w!?CXn4v-ey5O%mw_<*Y(UopATt5@(OcUT@NT`H~{*Q=+%ncZXv>1(@B`#pi<$ z>q-0nb5m|c%HKL#7%%mY+!^Yyw7WxYtWUaH1KI0W=BZxxI(ggH(@d~It)?e;CkyU3 zQdEzeA&_Tf*c?YN2%;s5jGguH(Q?D`7E z$z=MBLT$X{1Z@Z$P;_n(Ee%yf>qHu1UF3IBv$i@oM)7+%do+zRoS!Xn!vS0!=U)6z zI8B#31%;i?CZhRL9O(HC6^I^H^2x`AFtcr70>v>r_qMWx)>_)IT0H=x9p^k82STr5kuT5`smbLTX`xjU%Q%65% zRwtj0-s*WcUUQFVp+>K$;+jb#fBwMy`En41P$UeAWC=Q;ZTO)Zt<}7%4J|iwwL1v`*YuYFe$*_3g1{he8y|rA(tki2%_DL&|GylZn zHoL#klHWj#2N3MqTK%i|^)SQ1M$G#g6ZVpT$CqZnWQFM4T8GzSsegG*=k6(Hf#X@W z{oQHL*(t1|%yZftUuuLYjQV$xO(g=e%?ZXHShi#3ub+-kli&;O_42pz#D{5;RBk)mxjNKNEg zj-|$C+QPi>oqbvORIZw+wx@2+{m{@nmG5ztS58=e<&J)uJ=U41*ZysAYuN!d;L4Eh zhuY8c45xL%t5w(uHqJo&UgL|V@e5n)zDA)(SGeqNm=ajUAnEViPZt~coey(n=A4Jn zrt#z=wd2CdxSZu$$XPh)=%gKr{UWHUoF6ks<@_zn^(G~hX+Dn1L-ytHm1+Lh+e3)` zKTk>D6DhLeL#>7R8~0pP@!b}f1w)GBUWQ&x<0u@xykI*4eZSlK)6OkqH}~CxEHOJ0 z@pZv#T|L5Rykik>?WClh9L#1tXJ>v3{}J$&5s8kPB@iY@2h_eEu3X(x`JOtwkI$JG z`&rmr`9t_;&ByMaf+EhE>%w;-fZozMEWg)~$9_?vLa#wB4Y9YE3nEH&ekGx@*N1D) zc_k_z*_W5QJazvMmvT2KeKr-w)Q=r~XTKY7T7|t9UkjQIVXUej{e?gNoXI^>{=);5 z%S#%?)+5ON^zTYhYRh-TU4W{_+48~;u03%XCPo=IXMh2`4(|K!H@zzuq=SA1#_Wv1 zs1%25Dk?3}`++dPFQ$2-*FCPA$++6G$1MK}T`9kU0&v-nwVQy7r!C*(i>;}-!^Pm^ z@E#9|7qc6dn}>6u0{iD{64x`S7G!A2V^LgJUvVZ4h;R;FBe**}m4TRTD?=m=oPJKt ztm0jY!>k&mA2g7zbruBW`d`ni6F1K}f9*uEeY-v1^cN8;tEs6usy}0Ql}w7Q;jr zSq;VC{Bh7`!49AQPo}-|;}^T8)JtoDs^lIk2BGij?2+bRt*~|^z#XO9RM+Dn-HX=x z?J%8|HFos;hQM`t=F??ZrjAghy}%{9#^Mv6>-@xBdFrmH8r9RNx+`f>{^ z5_T)Or$i9dK}(8brMWT)>!%XVZt!2{XN15GDnVN1LvHCNxxD^vCTF815R6HfKW(ZZ zY(*d+TGRD!^qaOvP=~_s1mmoSSsA{ok?+pObXc+fdAqm;8|J5a`vVC_!lGZ7KcpnV z_w(m9<*gf+JR0t^i5&*PTm7w68dxH?$zG4yXh+$vPlud&nud>)nPG!@m29GI#h4r4 z^Bybxfni1$Q*V!=^8{4-3u0{*i)1nPdRm*e!?PU|i&#Sc(4a=!vQ;6Z02H%Bk71r= zp~PTFj`Snb`p;>@oSEvB)V^!Pf_i*XW_(cyJeD0S3W!A9qCBat((ke6J?t3};#MDp zXFI)mpYjn*oZWqVNN3rK2$2T2y#_&%RO(a9~y`@TWToLN3#@N(Ocz?V{KB{53+Oi;>D7fT_?x zb~o=`ia0A`AK2>%RW(O?s<25irRnW_8N;f;irK7H%=VIAFQmEX%kvj|nZ=r{=rPn* z^Y=NJ;sw3J;?+K{W!K)VILWgptXFl!ZA7mZEW-@^AwgVY|qeI`?4xlzFI|K+|()qtDp`Fu2e?f>d;IsfteIRhQw z??egc6Z6OeK%eN~x7D<6M4uU8`P7b{+bznh!7W4qll@|7VAR(Q)p)M>$lT#$4|j;6%ZRb17du*=jqKgDukZU zyqe1SA-*|0vV)f1twFT|^^0+}p(; z%PDn}D(K=WKX!Li=mO5w&R?!M=R|!R6kf*SCM$ZcC6DLasnB(ho_ZX69{b`pN;lq? z33wYl7_Wr`heV&|rZm=3{>CoVv{}mpT&!udiZr>nzDb_PpTS=Ksh`7Z!F7XOuMLL5 z5q`=+3IJrZBgST7&|@`ezRfU?HtB);s`}u+2v{aMNyt=XGl)LY`ePi@9&f?Iw~_;6 z<&!8Z(dSC7JDAIZg?Nr%5!0g<4E&$^j>q0wYA8QEHFX?>TWTzh7?us{`BfczpKC1M zzDTcwpVe+^KBmpDhW}MtTyH6^={hoSoe1|U-gvBknltp@-BwPn7c*WRZs?Hc<&^FG z_me8Gy2o?xoxf7u+=gOQl&A2?lfplrW4<#EHe)x|cpwlLxEtJ|DwZDzr4~u+zgHxw zifnjx@hZ6J(wLrVbluL1qd&lZ1Inz8&`Ee=0}wkTzl|Xi<69H^#D+nr4ttbNV1Y#| zNVH6GQs}2&!(*}6)^7~n%W5h0r^5!pd}GHqg;L(}&{YkpF0EfqMluvHJ1@uHV<*Rf zQhalB?vxs5q=dCism`rzqK@aYT7FyCJ!fydakVi`Irs!}!avmLUprt5nOhI&ov8QT zAw5%p*}_&zy)*OLf)=*sfHfQ12L)x~1~kPh&{s#NG&<=&^x>f_Sbat(j?83V?0dHg zrplvhkNpqJ0NvrRGJQ>z_76%oLony6@On~o?1$kg>bZq_6Im;Y-vDReef8`3=0#L< z-Tg&k{i=_L#^`w;YqIRl_Yvlgu-3^45UOwUVdvvJs)sZ~7}6Cf%N}e(gD+=%%W=I? zrobM^FysI47#OS{Y5zh@nktsSf=XYXKTUPu)h{7n3U3@$5U&Ygrf$>whJ3OxQ6%n3 z+60x<%nc*vH~Y$q{rtAGWplN&F%009=^P|REsL)3YG{DB>f+1! zH!@pM9c|h+ELfGXGMBHCGgTpf1H_LlxTDPE!o+C=foqt=IbRsfLL4x^z4`?~gi6f$ zz_zYNO3SQPcyxLm9C;XooWQ8vj&{sU(P7p6yG2<;H00oEZsZU-vb;35b01CnhcuOk z{%8li8)RdawWq^${pPa=M;b@nb7C)J>)i`o`dBciL4ctRMI{Nl8TBsy(ozIU4ZqFW zk27gQUCeIWtDAHAmBV+D5aLBR%RN8nZjF?VcxZ*Yo7~i}>`rb19O4 zyvE$S*))Etjn?Oy#SH_$MPm}#u}p&mxpNQ2cfVe&A403AMrzM}W&HNe^IBgyts|tB zlGjA8#XM)D4?-LB*x7Lm&%cfT)P_EWh3KM|RMr@>it?Z-t@?yQScBS3R_~a(X2~F4 zXja0$77dY)Ye({&rY&fXc$h)vm((EI_+RtYPei~5eBkTIzmHg=1xDvC9%A-dR0wASI#~C`tn=@e_wH)oIUj-VlEX)3FTWd~AO_v`5h>wN&RK`;>8lh35WVz-1 zmc%LO7n1Yuevkz=oZSL@3YdgM6Kb3hB==efg%&pIIvR@fu!tWJDaD zC(V>4=V2%z;f2UhH3kgHUknPIKCGE9X2y|^k3_U`>v>Pfn1hS5%wN4qwWCr>0X?L+& zB{h%nQpC~*SN+>xtZDyOBRR#IvVGhz!KrftNaGVC$lZ9omMd`=a(0#s)*l8BCl-4* zNgM&aqRwNM^LIIjbhBGI%fcWSbMjuZg)&WVyP9Gck9K}RAvnxI zBLlV~p+INCAPF<8C_P{2z}bI?{Tk{7=p70A%;jr#|1B*ZVvOaJx<9FegEa!dv&_KQ zs!bO}G`c_tsjd_gL-wDUj!Vy2MDLX;O~{c*)UgRU8wbb4ffTM>1&}?s+Ud-cQi?bm z01X{$?RGj!aqsTX4K$E^$f;e!$?f(T`ZsuR&RpsLO_L1ZV5s>v$3J?U_iCGeY8)m` z$Pd)H3Evj^u_nvhSW2V(gGE@;KTrJ__P!Yd14F2~|MZj7BjB)Lc377_9J|RCcidHl z5zOv$B)*^~bs}5zHVZ1tF0A@vEc+?)cQQNM5~~151diDqSPl)7RiTsOlA0bBP#Wk6 zA?l_kDhPK{k#x{)irVYB2&Lj^a3?V)HghV1os%%#yrx8Q(eKT0l<_jc0->?SQ}4RytJ%H*o8 zrN;4hN#>O3vQzm;7%7Dh*)wTwVdKK_Xq0=6A+%D-@7$i82nh(x*{I2f3_1IZ;0JDG z9#_TdgH}-iC0ral{T<&~-Z_q9hGL$(4!j37)YTPNDF58~Bq^b16pE}v2glKR0()Em z^FpJ4C+Lazvd5jxSLdj+TH=}YUf7Ny3`*-EdxU53VKOl>k+7`PpZz=P;%a_fZg==V zEinnixP~nYO(tv4j66(Yj8&U!(}DY1`V)hT-`cnwB$`C<&L#4wC4Sh-M*TQdqU@%a zD>OJCPiAMuZ~~aCmXI1<_H&m5R)-d=_>%QwbLzsm+*bVp>)EAq>^8BU73tqt%o5(6 z@ypVn+ji*GxuIotBWUGInRB$M6tPBYM0=&?w-I|+k@;WGKUK@G%Vt(3V=fhBOOqG8 ztb`_ilJ;yU?SKHGI8~+r-_R{cQzbA$zha&;=pi3;N4~$xNOunkI;Wd$T_q7@i6PGU zBcjM2i;Btokt+d_&B#7r>mBY<$!@j#f4!S`TKNmE7F7X*V0DXsA!W?q|5O{mOVO@7o8s%ci{X&XT_FA~Q#}fLf-VGEE_ZyZ6Qz z?4_HC2PUIf_Yc7kLQ!g~a7YK-0pF@eL9dV9)w52D;z9M+-Tb*rHFj$mmDTwdnpf{m zuP-dZ6^wp;0{)eUYYDeLNvQ|lt=|PgZ?<&-BcH3*p(49ae4hKOTJOF4HN|n8a@1BP zEKN2>+(@myyujrF27>+a>C*sXZjWR@wCk-%kVvxsKlk&4ncg^GmZFz3LTAIj7N zf@-kfg4~EfC?56IGB{~`b~Qo21_q zPEDQ97zc0F!}YXgRNK1aEzZ8J`_-grk`*i6Kb)l^wKI-dcfarv&yR(Zom)eV<({*(I>WzoW~%Lx5XB>-!yT*W}M{^keUao&yhhG z;Pd*)p~x6g>Eu~G^I%Vq>q%N&(BdYjS*JJnyj!Q?IOw9Lo-AX1O5($}zkB8yM#iHz z?o_LtX$fkXfg`Ycn4PX)vLMLFhp$Qp=*iR-a)4I|)<09L+4f3+iBEaOB=t&u4ny&V zui$`5{tW${i+Yr%C+Qs+!{7po#47vGgVYWkV-x4BR#aY~HdG6exvT1eT^)0B!!JPM zWTZ+F-3>njFWZC0#L2N@c-~)wT+r_e%m|C#80N+}ez!`U?pZ}85 zuRbn{H%^B{*cecS_fvw1g@`hZ^)Yo{d+1s`(Vy4IGFog*h5>vxG)B{TD`WRnJbvD_ zvLX~xhHw{I^wTH#HVvs_zr;S}1`xKmJ>cT`?Zl%oRFR0H-Uiz@Vd@p{D zws5vns7**RbYk_uSn{B53N{oZl!R)E?@ko4nm^Grd_oMK_oECuYk{wwZOMJ%W1Fbs za1lkzw19cvuxMMdJ}bFIxT;4R7cfp z$U_GoFl4#f!{C>Sfdar<=^YQ5Vep$w0JEnA9*c!^SOkHL2LJrHMgQ7|(1<^QZ9+-7j`vV&<`VOvgZz z2`@X%&z+$x)4i4wpH+aBviV57HmhlhmiQ>F`Q*Tj6+|&7-*jcu8qTyTDpLS^2zqcI zyis)opw8%^WTWM;ql6tamgM>_YuR|3>3L{`;4@rs-~!bl!{A(n(PHQs|3Ay>dBP4i zE`G@+Do_iyI*2TFx{3OLF*(^22;c!0huI$Zhip~ox7A5`5D%%FcREZ|{nNM<`pH() zR`@%KLS~qiSmTJOS^fh@X9%t|Hd|Zz%H#)pPKc&BA>pj<7p$fxYDDwSiBU7Gibb8I z6=>D&_fw30*X$KtugV21_1R`UA_RcKVL6Vag)zVje*WDYBXV$2b))MVT7QPUjkhrO zlamyB@K3fz$#KRI0r=qd!8e@))$zp%z6u$8Whf}Bo?B)Dvmhmm&7=kKkv$aj$R zomSQ)5fY&Dg*?kz;|BmxDFhcR(jhuHpznU?g|ozZ@>!;cXrGabU&Jl>$Nc3eIxKK9 z9~c9(qBo~(jn@DNkIpy(xX_~;O$OnhD+Q*`GuDpet&lB2CyQIB zmP=)QQ!*oO&@g)g1g@nZ_$4bw+(Q5flsT3{hIOb&8iRmQ6WcUCt$0(|VdE9>m2SU- z|6_mEM^(KLG*BDI4{ShqzdlhhDm0E!nJ!YunLIv;T^XI9tBGBbX*vXaFe~rHtR{oeuDFInboumf(F!Q`39H zU#|H7GSU}KEJTjQmtDRpM(I@g{Nz%Oo0armgJZ@Jh>mqVBraodvJl!3T$OYgg&Q-1 zRi+sf!>AK5vSo|!WXx)zk((D;ly|Tk1t7E!=JUxuRf|u@B!P$k-nJ*B;DtrW1E|Z# zy#cu3{fDN!G#tdR!a#`F3MCCF^Y5aQAW;z}Bp>z4w8=rx{#=YW-#o5hoI7>#U@n)% zjxZM!DfnT~b>YNvQ?mVrX64`C7DajyF8&`4lKr)8u|x({orqofL+o1mP6NF&C2|Lg z?InJLg3kBU1DHRCiS<;<=Tqu6E@IGaDcmWHac2LHQgXGPLhB|9%_KCk;1%%9zSdh7 zasG5wgjJX#>a7S6*FrI0yeGMbrPzNMU+OaL53b)tOlSBJr+dFs9b4l=x4vEa0JrS7 zs~>~Yl;N;9(ImRRrOz@6dgbId@{H-O1m~N?v}}rxX_9KPIKR9u*yW~4kQrr7&(Q4; z>btMB5XgtUAv5B`!MTged=giev}&|_lQ){Yyy`@4XrQ2HGpugVcRyR?0snT4arI8VBSA9nYe_3IaI(M{uvq=TRWh=)h_>2|qI$I=NImIN%cRE| zdnH6W2|~@NRkiCpppbc1-gRkb%aWij2#r3w zg-szv+c|<-$CWK&u6S{uGq6id0e4b$f2G%%tUE&lHYmN`cqjx*Go18WlMWa*f;L+g zEQDvAToExH*l;UjTI`X@YEg$0h@!{e}hrKsWj=-P;`=bv@KelYP07qGI|u zmOiiWTSsfI8fW45Acg@l!R#*_(J-wF%v$Ejq;T?3Q|Tk$EpyA~8v)E~BM-s|KyK$z zvt#UXVn=*15UwSBUSSA_aaK}==6MLCL%a#Sdxhc2bP(A3kAdPoRBb$UjTF0lK{!md zCkD4pBVisBP7AM3kSzw6`w95|3VLQtzOQLS@CTF361wH60;`HVg(R2Q&n{>i_c^*! zLoRTu;f#0GRjHs$r3pM?ePAdV*%BL(v}=Erul5=q6R0ed4>!y#4CTw zOo_m#U~>LlvlWTVeu229*mgjOn!9U+CSLFL$t}0zIAX9eEHxr>Sx+qQnE;!ge z2;xJx${*ZqQ*`blTY2Q{i*#~Yu+*zh7p(12Ivn^b3SC(9_9DVS)Z7wKj%EbVNnWs)(EnW-k$NkF4}JhmPnehjK>)HHa9)vn`0d$ zxjL=|QucqgB`_m4GrnX(13c+ccy5~+XAm`{-JC<(od{}95zarR3g23t9 zvc%Vj&KyXN#(K!*z1Ln8MACn^1&<|m#AwX^yD8Qog+dw@js$(!+1U$9BJ=mZLbeIE zqm~)D8T*p8jKIkM=umHgW6fLg73dN7RQVN;mYh@IE$dg;!xee+;HO6q-p#@2l&c--UGxz_GIvyFI++Ce&+zbxKBL<+0 z*Z>({y2zyLZ0tq0rtiIo$T3)?$`!(EHv)FK>Ha<5>(` zMY+3nw7s7$jHQ*qIGk*b$%(IM2-EB>k`I10%E7x7uuD*)ib9%tNn<&{_hlGz%C~?# z63WyF7zjf_t3JJvw3h~;x#?R=&POtpi+y%Iu_eyi=M@D_q}zo^Ht!?8&3&0DORB}+`%-yC!w+@tq?(r$?aYG}OcdR&$_ zR1y#7dG`h_GBfyPLPKekGk+UON##V97Zfnr%~csjc^s`8mOuUy2q-@aQzx|0)7RIJ zwbRQ}DsiKk!ta3Cjpa(E>~jJWxruCH{~_`5aOX_*^}tu)UC z&R`MJHI%x3opQ--Cxr9*jg3wDSSYc4>U1L!-zsk(2&H&msrdN#u;sdGb?5!P!PUyf zV)?dbQiuZ|Pj(IFW`Rb}cdHzLf<8Q#Go}7WvW5K_mWHv&-{L!AXciFhV8iCAt~&1J zA_d$Ho8radGgA>4AW#|H4{xjpHsBr&m8a~+ztB2(u{J(~faHu3MMVWV(&b@OHcLs& zxVYf8v$M&5quMbwI}}f$AQ)2Mfk&mgGsNMbL8eGW^Bd9vYgfj-73OI3XzkAae%(oU zkfb*D`OUhlaEyacuA=>w^%dEQ7N8^jnx-S_ASV9`qVxRj$QOlE)Y#bgM(W+*^jU-7(Q3zcyj5RG)uL@u&l$3IH!`#^jDAas?m5l) z`PYn*EVIv=b4AB`7|ocP_j{+e*^CrGV)h7mob|xU;0cxXcQYHe-N>jhVFChzC?Sl4 ze2iXi*@DSa@}M4Aa6A)BH6=-nF0CGe?A+2W_t%{s*2otsqx#_Kg+U6eAoJ!#HB9_F zx_KIXY(rP44W>{=m)I*4I7(~Fkh5KXJb2Kc87BGq2l(FmPifgRLcs_ET>P)4srhvH zXV3n35e6dJPyCCkL>uBG6bdC}_qjaelod3}&g%dod{@7O^;#FgE~vG@Ta>63ObT9Z zwD}-lKp8=@UH_xEw>J?Q6sjeKkkBe%ip695?}}&Pz5PTL8I{3&L2{-Y1(Fzf+LV-( zsoRmkJ>s60>+!+D7{|O@@~Bmg(-s7bU~)&utd04&^k>q!pT|je|PBPc*7+Z z^8qJG#W;v2nnIB|I*h`JJnxO~N9wR1v0g@fY`R3tw=FFXP5#Wj*$(sW zNJx5bQZjwc-jJur&+4n+)FxTIp*qazXB5)Q1Pl}iDPz!xthg4 zh5M>}$e!zDdIY5sLs?@X5htwKdqAF0gmJ5=z^s(DZDD3$HA1>Dt>&Lm(<`;MoF!b0 z0!O7eQmv+`)=6`QAffSyF+X8`y*c%XTj9RgDdA`@94iKF-Z(dU#^2`xKsJ94gl;+*D3FR#3?7@kcm3;}faLUF(~Ik{sc5Q__eG$`{bh*Ff+y z!IGT`X-k2XzS2(yW@@Tmz5LK&2izu8AiL=kuHGc6cc&3YzARL|0DM*Ew^nT_G1&bULLW*ES zk}MhH-Pq{_I1~F7zDUGAVrll1CDn4pu?G3L_)qVMk_&!PaK&@9K5sbd=x0&@yXENV zf^beML+qKC2_B@VRu?i10mG%_xC5^a>&Ltk?9pa%&zD`+u09!yzh~W@ha#Eh%Nw9p z&mTTf@7xNSnf@a|i53+~vi_>fvEu^JJsnS)7GTw>f!t}iE)iowdCDJ?R4iW@Q%q&Ba##-pTh#q4-iwcW7C*j>Nb^>gwZ2`w zkEtFCbNDo7J(XpDUDxhyR?Blg%5JK+_$9+7?WEJih+<=I3?It@t(&h7sG>knXs{;! zhc}ibS=U)SEG#s%|2YP6+~fdO4}#SmGKzD^$>+VD&xPi2{zJ+_Se_*78oG zpgbYgth&yN#iW+rmGBdSOgpt%Il@$Gj(5*V#WCjSJ`*AT&MA(I$YO5!FI@oB za=Uu$d4H}6UXeB!cp%XmAfpe#+%-w$ceqrA)R_f_F&ZjS>26AFidseh3T80izabeS zeamrX`vqn3fC9H|<{$=HK!=lwoQc}Y0u#w}59UXW*XW6I033-0ye zSHSuZRD^u7LWH2fn!D`+76QJ(?ow1Kdw-xope(;!S)a50@I$Ce4B6BgB|3Z3Udt_s07jsVC3qe`8?|XET!Ea|yKnWQPo?Xuv z_RV0bfxU!rE{_}aWBz7spaT!QiE7tZRwKFJ(PvM>di<~u6ir8Si-M_l-+@2dQ-UD? znY)o-JVcKygc3Y`r%Stg?+!lqQ0p*m8hM?X?xu_BJ~50zIqqz-s+?J+@B+;X6Du<3 zoSN^L^@WXbb9&{p7VQCX2&s^E%V+BU%|-fWQe=N9PL3{3s2s18-tn;NE)XCQI;0Dk zZ_$rn;*dUa?Y0JCVF?XMMbG!TW+{SLEdXUtC&ro8{psvED?iR&f7=)T83&^#M2*&< z;(8jM+7VU#FhdEzr>BzCWh6?B5MeW1XKA#zVr*YgwW1yk{UIkH`ufAww7O_2HC26R zoJnUKh@cZy^Q2!nFw=IUE4}_*BJ1*;;c%Ha;*6Ist1{R=Q0^kX6c6++vB`0xxA3|k zEYCNBi8shQ;Le-?K*g(fTrT9#j}5CKO>6|cN4nY7vr=RS_s|4nApbnEJ#TBtP#FiR z(!42SEBGb;S}9q#X{Ua;W3)r`9Ra|v=}4kKW0?LWKu0~HmqMHgqggPi!M2*=FVLiG z6B{8SOe~m$*^!(9Nmo9ruKk&$xt2yf;#!0|eNGBFSPMw@Kl3A!gSX+1Sw~x_e-Hn) z3@*z*Ja{<|-`yXn2f z6`~efPNU=ej`Qe!@e;Kyy!yX%AAw5AsoI9}YWfOOb;xDr*7#$Knw{ zG!5W_K#o_vng9(k0S3A)U@z4-aipR09X3#4ljl$*bPQ9=q zZ0P0(B}t5|3RbatsgaDzVd)|`dlQ)QHs8~y@-99Q6P!4vofu}=JsOZOObH^_Gawv@ z4#UC{Mohg;x8Xhfb6M?Yf3EDb5J|z^&e$PzDuWc{mmG$TQ*e(;?eW(5$FaiJ(EjrP z2K6TFR@A?U@<^cH&6lx97r zV=T?DA%MLJ;9ktx56V`zheNT5LGvP04ZzG*%{7xw43mY|m;j~U5`9$WXLNt8tk{q7 zb-p(60l`>0F`pMYYifJ*SF2CZOpr8LJL3$%*~Niw0Zij>c+zTRb#!0x-1l8$Gw-3z zi~SYl3r=8LJG+ZA3tz#-Zwsgih1na7hQ(b+(9KQ>KS&f&AN>Ae#VcHmcYJ&1f7=x? zP>I)Ck_r-C4{Zo6F}ag!=)~~G8*cjO8dWH{o2nw;Jzx(O*_;R1M#^n7T?-(RgQ@?+x;ZKg+>?jv`XFMjxV zh}0yeQd0dnX#H7}yZ1_r#+(aO5mX%CU1MnFq+qL9Da2XWlEV}F@%(}1Lg{r|o41NE z^+d4+u-OTlH8)wCPC@ysaz{`kw~>g5CROb3P8n%E-=;t2DF#Ij-&ZdQJ1ukX_(K|= zHt8%hm*j4~xLt=Ys1!heST-Qh1T<0e%7B~Kq<5X1&V(ih!RKTyh+6>@r_PW3m0$!g z;T0!}nNM|E7EFHyZit&u=%dujwCnPq$%!+@`0gZd#oEM=1|*tHug+uWZ#qzCP$F?s zX|LtyyE zuOXnP;&X?obQS2|h^)#BpgW+g2Axd5VtEHu9 z<(s1v!}rpXGzvNX)tEDMfY9&C$_%2_wVxs?GI~NiMnT6Kqx7-F0_-Bf(93b`O=5fE z@i-%vT{$)58h2MYdh%H0dfb&=QfS^yU-sJby z@EaOh=M+X?<(PD(`n)1<#F<&jtDY%^mr9HF>mkQ$aR0pbKx?`(nNujZ*eBw7Ff8g;GUM z^FGT`2eronGz0buvVI}kxpT8{QE7u7La8y?>t$R!ms>UfFOQF&Mo)rBeorT?LEq2N zRzGd3HJt=w6KG6Esq65)m(8z&mp&3E>*CeS=TP~1v@+sPo6?t)G2fqHZ9n(HqfOa8h$Et=8 z+SFvR>qwOqOC)70SK##bAC*9uO}CxxG(-}&xsFT($hqaIVnO;2FB3iUy*i(1 zOSB6HkApdL9QHxkXm9VP9(a0P#2BhBu*TT4QuEUpsy;wNhd;~EEr^RM%oIq66^saj zql(2=5nv!%$+gwLb?3*SSxf^&>9E3=DZ0DXzfAP}Vv{7E%8J@c(h6=Yw6U?_j-~=) zKu`HjKJJkjip2BuGVWD8R@k)7@Wodx*s~j*(oBoTTgr<76FeuQUL`}V!5HVRwN~BP z+QB75Lu$W>Yi#-Co~tYze)Sr$)O+C}i9#`Xl(~4{fnbNDAPaA1g8mFVIY){E-w;W` zO<45oF#V-C;+mnr&dj*#iZKVqA2<6E9Ei?F2P-NaD?O0x*6`f>VY3rpZH6jt|p$uRllQ3u_&`&ov~PjXNO0^d3ZR{5JpKMdClSib94ryU2^h8 zDx_UIS`)<2TWjIG0)w z(qrc@UToq}(T+5Xd)y7%MVoowob(HRVpT3S0|N>fs*%=8%>#iXJ_4Gl*8~;3>H`j1 z8=*NGl)zrM;lNaAN0(o{RgXqXJ`dpxvNQh>GuXk^Ft8Y8Tp zh2zI%Q8Dl2SY#2~J2VXK@yv?QhrqsB@NGmA0d$V5f^|sWL5;ugh)B!9G`WB}|H%2i zf_P#0PHlu4h43Nsv*3=A=)pEO*=_QAK*mwGvsge|OEw>GA@93GW{q6`Kg9k|9EMp{ zcuYY{VBX_#{5ZYM$`xuvV=ND%k!@Q$BQt}AR7F6=*SpL3>}`K7w=TN~5~f?&L?#nHdT!+3a%(!iu|W{(%5-ehhO zBCL#?e1R6gHdWW1(;gkakw|jDgeKJpIzIJiV&NLp(9DZuI_X|%=+rL9ZhxCgz#8nX z?PPOb`MFjnCT?+AJ;D8&Tg5K9a=+29T7R2j{E5S_UgNYr&Frxo7Mjj$JVx3Hob-w+ z8}osHc}SIkxE6Sv&(H6!C2#W`8ycd+R*4o6>WJH;lS0R7w##Qv(q+GeB#s^ z#`F;%J&dj`l*1un(oS{wIkjAggQ!r_zC?gBr;Sx-<9Pr*Rg<~06S(gphDwFK)p?X^ zn4`B^PvNT=lKpkuy`ie_BxbK231Nit>?f6S6 za%%Q$ANL}??iX2mh(H<&%!<`W6L`tllGwRaBs)rp=3%!>frOdf1^oS1{_Fag&EKw9 z16pCha#22MC-4!c-&4Oj;^KjQsBG#oR>4ri28K9#;JjAs&*Nul`Xhrebc5)gVGVPZ3 z2HgIiS<)f#VklVCh`GAlh%;ceapm?`_SfHanj;eh;cj>oH?X}GXOz=p`frf0?#F@} z-HkeQDfsT{PfGuPmY)8Bl z+1@Ab+Tz=5C*T5u_}XIZ1N8h{zf1S|hdCX+vkIvD$I+^NOV~KM=@}Qe!c}lYG&k5& zeyTOn6KPqQmHg`ME51#ELSpA2dl!q*C1Xu_rvmbLU5g>G5|pg4(DWsj+AcOo5hK#D z<_Q5n2!Fm=niv#)7|OVbA;t|isYWf*Daf_L)*y!krRuk7ny!8sA)q)WB2W;GWcgbl zO9kfIg8m9qDsi5G!-j=46Dpt&lVBIkFmPCF3B3CAy1w=<}VY%qL?kWt!C)jWXMK{rW0ChSt6&mLM+) z8&T3NSlazHj4s{tE)99=w0|L{En^aDVmIC2 zslPhOZ1iLEYqV%UbKWg)i8YH2dgjh|g9@;ehqpb@08A|dS%lmh+vh%8?X~1zq7Bmi zUTZH)^CoOHew@*}>dyf^YsgjuO;f$9JeF;|1PLHwQ&T@SoyVC3%Rz_Lv`~Q+GONwJ z#vX^5bRHjPCGI?WVB-y!R{4FM(ZI*)MF!v5RC&u^p;SYwd51*bKSB34H4Vl0B%V>h z<_RHUdwL|ys{5IqW;f!TI>?$I<|`Euv#rVx@ixNOWnKMP;dXqI_cRaD;&+Gj8pzKv z(i?$0zJ+R0>fQ8s~-ssK;@IhBn z(;g$uLXplrt~;NZGdv>s*M(bh{^p@f2HcU)qvA3yvG!1poaNU2k_?mC&sJdEW9ozM z)_XhR*;gHemGh#$41dIe=@<-??3iy`*c<8ypqgW!QmgfCz+c+%HW>&H*jn?*2aQ*X zuH{*>Tkyi1B!&2R+C#4EU)Qs}KcPh%+Ca}=0~7%8qWWX%8q_#W5{ey{&C#*JRdMV* ztgvi{2K0RQo2{0*q?bl_h#0QLmw&(6k{Ub{G)iPO7YfT)Ft#82Fo%Sp+zX9f#tLtX zoC|s-I7qEx?@7wlvvka&mwj* zzOmHT)w|Vt&DG}S1i4W&e4DNf=~e!>&m}|=JQFLXB0_m|NK?fMf(z%2zS@p##_ACm zS0!1)lP+^m0b@dMem>cfak`BY;{jH)y0eNiUfm$!*|E0_Rp{3&ZxoBlF_Q5;;Edm( zWn2IplEu2^w>JtEb+>&;ZT$BnJ#N)6$qTK4?GE(&*3>vj>Kr<0)>JW5PSu$HPRoz4 z{bBSCUV8a6{9$TV{o=b-oQFyNtR<+=4|%+!p{ORXnG%ZQy{N>re;ys^=FQSQvh)9* zj-qv9ELQ7@@7*aJeiG`jc?*-G0Z-S>?{;Q?LGV%;P;q2NQ9Gb_G!Yc(V^vw~T7g}^ zGyq8jAP(;CP4|m)ox5NlhG1ICeeK1I7_cOZ-F?I)t z@1Mk9+()DsU^X{8@i&Cs8JxT&R0y7bU1y7Oa&ju*U<=Oi*XVtnr;P{p*cDrfQO3Ai z^m-&FRvA#N_~y^i@BKE_((2AlB5CtasJiFvEjtPhV#Z>cZZ4-z5&k?W?urL3^ub*! z8;N&PC@k}BQNxrw#_QjvPImd-!9kVreDeZJp$jwvKmTBh*0#v3lAz`{Sj z*z991VKPcsNu8~vWUI1m@ySqapbLHqm(U75xqE}d(;$clE(r6=@I{2QW>c#bkm(|of$#ykw3Et3lZ<@f$ibrjH%i45GpS0oWnLueZF8QPU&KL#jU18tL~JyRUV$^&?9OlBFb`aBQwjl>B7u^*zks z0MrTuAn*p3C0k3l`?5otxZIXH&Od`RrP%xSo>t9Sg~`@_Slt+GOtzN7!4CLaa4#+v z8v09xQAnZv*Q9@{PS+#PuN-PzCYZmB1md6G4XG8&=-dtngMRQ}w8{rp>0-eT@P43K z(qY;9VL23Hxg?!Gp{XBzxzV>=5NW6q)bpUXBKjA}Ew=>`M}8N4Xq-&6PBh!}(H|IP4~%lKhEcDXGd> zxV?8GUmENdYkEnm(}kgg34Y7GztqZJP&kEmOz{tIPJ)y7Nu&STv&I z460|aoR)@XmX#=*ITO-1o0A%(y6K0$hw^02VAT#=XVdK-nV=iDF7Z`CRY&?zFv$g8 zfY-WX9C-<312S@wDc!hf4o&G!D?)-uo=m_`O?2dA}ECH z)muWqUcG0*FBrUGFog#!c|A{Dae;>GHSSnVQ?*$H{Y@hYMS^&b)go4?J3bT|^%X>u z*=*{_$n3ELor7_ajL3W+z*n&9h!{4a=8?%CfE{}xqcQ}O(oHFrv}}QD-|M%q><&l$ z=eD6*L7zbt0*{A}BOqd3WUu}^c0+~2RJ~zD$Lhtu-tt?jc$zrDIFQSO(+lroP@dxQq=Ob0mvQ!0SW@y?l%9pN&vs)!e&14qy(I2_}VOROFw1o--bRT z7CAD>HTK^)fe|W@8K*oJPtHvX*uqc@jPnx5|F6yE{8gsN_2VSsjH&^lWE^q&(QI;5 z`XC)GX!+$4b@5=b%CwMhMV2;_Q3aDp7_;`f=LQX}f1e7jp#I{<>Z?KOhq|yaDB%4a z3W3)18-Bje9P;G^`fK$C@lwCI)3aS+Thxy$T-u%{B|w1pYjoER;G^*>Z*#zkIA48$ zcvH|@U9tDi()^yh1L~Ia=pV)k#28xbo|R;r8E1a?59`SX4dF49sI)Im)Ixx*O$|W$ z@&8Vb&nzq~Mku)74`n%YF6b#~Ym=ZR0M=gVn2SOzFAqqHmGA%)TKA1dcur0{5ZvzJ zhk3`{#H5wu}Vpe#u1$|IBmA$UZ( z27I$A5fYxCvnrzdK`&3_7``-5Pp-H}A{gwY27Tqhj7Ez_JYp<98)~wE!d-;4qH-7K z|0Rx5459Yuy=cD%wGY+|=oRHQT$RS-P@=m?v!7;;_vwS&SDL3PBaXpC?Fhn0zqeft zqtgjbI>dwQ)3hf?(})wRi-#KTEQW-DTXq@k!Bsv2{MXxwtZ&WDW6Pgx4shj}L2*+R`1=Cg>8ks#vk;z%r_X7f`3S@SHUh=~22 zbpR@YtFY*;U%>U5ysr!;xUa4xg@+u7@maWU|Go8wEy00b&Dp<~52NrCq#vB0gLr5% zKhzF$^}dJU5$AmW0TU}TFwAXJk!)7_+4D<^_kFT=9JYRAwbF)b2pf8&-$myzQ^9OG!vZkP062^p~DQM0yPU7bG=LRv>f&whQEx& zmW3Z5{DI$O-bUltHQo=1(x-HEyj^vjdT|k8K7_79{8~CsQ$s^Tr48krUZ52js%t#M z`ISMYMNJI8Uz7JG<5Pb=TS>c6YtM^Mhtb{s771Y+VXXM%Zb<+@D5m)>9$nC>pa%p> z^TdtO$fAD=l(1FcUMEhKB}80e2|@)ntY_WcTs&^}la6E_U;vF=v zJfW?l6qjU-KmsP7=xp^vDvXzMeHkaMQ}s1Hkl$fz?2u)@-wHB$`AwdF5CBI`{^~ID z3s~n&`3KbiQUYKv7aBL3U=m4G zkx68OqTC?OzVYleLBEF>J@9Q0fGEK3%u#YawaFO^Ay;u16x&u|2ZsqYhaSNNdaly# z^@P@QgWU%Fd3MnNQ3RKmwc6JeTOEgcBzG2iHrdZcIq<$DCNiMu;J~bw$OfC-PT~Pq zbC75}z+ZmK>owPKacsn{RInQw(8+L%W^S&&tOZ9HXv{Er!I(?TT6%aFH&(O0Fc)eg zlkL~Aek+Xa(rqUn7h62$WfC!6dnQX>HG);PB{vI5X`NFk;$K!E>h*09tF)eLQ z@bw9;V#BXd2tBz|4E6Mg-BQy}6nrD-=@V{zj1F8hG~Sg(bfr@vqGLsSyGegFK^zN? z1!W2CS$zk(Er?`yEdm)x&0+oB?zQT^v$7F(CZE<%dv76*nTY4JaXW`{*WR)SU2I6i zL--C3EK-grm5_`_U?uWJKmkAq;~Vpzsi>BAxbq;TXiLqgDx;GXp#sWTnInR!KE;W3 zKv6$MW=+`q*E4andj3WoEMuW&k%t;kS0vXBkR z7kTLO?9XtT>@_ldZDXIO4=sSPzO1#4eld|(P-~(M5K|j^B|x&6}CPe zwl)8V4SYP|lXD#Zm}EJsSX=4q%g=Jhj1hPwn1|*uO9z@t*#*&P{27EfN8` zyC4%BonCA^Y5sUQpksg3Gj`a|Xb04^_Cn_Er`U>1hN&{#6HM7QFg|{5&@aQF(Q!Xc zE$46sH>@Vx>)a+zdf@$ueTnChpi-lAp%W^1CdWVo{3FMoI4=nVU0&SM^86eFTh`bM zHQ^!RiTnqJ&(eST5#RvSKTrV_r2?O?8?vLJxw{#>7sL_bI(u8_+U1U9{x`1b6sBAS z2a5oE{j591EV=1tvGaooK7{N49w$f+7vOc>u%|lcZ;Y^EfLO9cTSAa8oOrF?G=w|P zBW3SH#nyc)7?yf2&k54H{QBE>PqrjCAA6(HH5_ZJ83OlRG15fg@no-dF@eSsybbCc z7}V@QMxOkmUXt@A9jd6`@AOzpmUQ7ON#_BddtkF}JP-SsM$=FraLqJR<%dT4a}reA_ElEoWnq&Z6jsIs~UvnHBH)7vF@LR z4nM@}9uBM@7Ns3!Mk-2S$v;gs{I$N|bVU z*zeS3!OAY~&>yK0-F^}$-Rh}X!}ippZ}qBN5tD<-^t!ioADBdSVIV%1sXBDXX9|GZ z>q0AdU^$_Eg)9VDw!STLqjM%TRtpmGH@h0}2J~(mT@{_%T&%qW41^ z)Fg4@9Z{JVl6;-q25jR5lHQ{zM6aF^ZV}>M0e-4Zsl;$$5A(n9tlb|qBA6u%LuOq{jRPh;B2mHBQ z>Be4t)EOsQ=Glo-=6H9(PqqBGP*EHj+qvknx}z-ngHSV!ekr*4`t%xF7%86fs1PRiZ=FmDyp5G$8lk^9p^Wj(`mHUk0HVXYWeZ`2*kFa6P3&#AtC9qiU9i>&(b#);lp8a zhKF;?<@rl>Ov8U>i?&b(FY_gQ7bR#7s3f3mD1|g!I^EHfNQ5NZ8R@T(6GZMNrg6OB2%` zfWNw|KTm_mIy-^DYR|7A!X(80nn+mbBr4M-!6ih26l=HbWPp|$;019h*5d89MxM?_ zK|69>Y)V_*y0nqU)Wu54xjLYwU3RHf)=ARq4u2&HRzUDh{ zGI$h6n>Q>==a-TBq@k`Z06c~5S_d6atjKfxa@5&J+XNnE#Jac_$EO@C7AFQCN9IiN z|3Fc`pF;f0(oY`Wh@}3YDjCW9_~e4}3i6-7wR1sICeH9>iy>S|*7{=o>jY8HAx6A+ zZ~5rVs%4DvqXD+6Z~t9!)qTkhh>%S8dR>|ee=fIy>jvUi_CkKAZzmB@QT9EEosFeFAWElylux3W1ITsGPFR3OF)_*w%0^PH08L%+-=(k`fM2l_1ZJB118 z15O0PFYQWY%8uZ($K;`h+P$2qhxb^$jEi~FigdLa91rXoAUN3d?fSRUFMcix_k;!m z5k5m|=a>uisR`Y9Ec*mhe3C)HX-87x4^GuT${X`{w`^PN z3z?v&fOv)&B7q3hc_j)7M!}Cg&&6K2F5r4Ne&1F7Ac%72N|Lqq(*!>Yy&BGxv*vH^ zBOJ@MJR)h}>N|b;lIq9fqyI2zhUE1+Lh$)>qatVdsy$-WWjjBmG|%N-uH);;AhnLWxC{q2phw;{4|^i_M_ReD+pKdl4L^5?5oL+*F^u(hO?vHNFdy8aiF+ zoYYb7-^n8+qu`K72so^w) zac2@Nt8rrwV!}77jxx!HPeUReXL?JCe~@Nv@9ygDxuCcLZ%ai52#~LVrzs3WSG*l( z+n1XqNe+~vIf)4e%HLf_$_7XNW$FRAnVzJT!{tn~FV?{%w)FVqiFk+(nFXn>TNO>s z<_dbzHD4i|j&KT4o&;tn_Xh)dcUeg!OcwHLZQB?-Y>C7og3@c6%RyPebEkO|A93rk z)MTe`u#S5`q!bnwwms&5DKv&;{KrHh=PQEBU1W{SPbNqe$*bU8b+#tgqKe{MaX!sU z6UniP>wPe>M#mX3Uj<3 zX5a4adWs8qCnp(h#`HW0w`Gqtzgds;*c-^xYKPCx_V#vm8m+C(!EEJh z6Al2d%L)Woz5KCRd$Nei!Mqb($NO%Lb3yXr^@%yQE0Lwul+M_x#2T;bcQ?n*ZbmG( zXE;vnC}df(or~Iy=U|FY+-b0rrAwYo=_-(JT?>b1JpqkjRMO}Ric(AefG!l@>hmn=R zIXEz|Nu&mb5z$Lp61tXIGxgn^`)#ANgcBtcP?if1ud*n8{M5BHYc3RsJ<$l^7*db+ z!RDvJ#>S?E82Vkz2y%0ew0da$0<2L{Q2ac^Dd9J2hyGh^R5kKgaTDa{cL3lDFf1Bj z(33m{`Or<(0%dDnbtq%-iGXf>rMd6Xk8%6YHoAi_Q2^UVFo2AUTc6F3HEY%Ho9S8G z*A$g-*KZa3eXS|HTlN|;nk3)`6;M8#Zo(v2v53k+S>(%ab5|TvjD2NPp<+(Pt)BZ4 zlX4lkj|Wo>-%B<9H@EywulOEuE(~+pt6EhbD-Ng^u8!ZOia7cftsN054HC}d zamyJ2q(DCKva_?Zsh(b@L5Fvv+0XG{ISW@;VKa=)aQ~%##K+(wxd`DtYA!o%@n|uH zTZ4l07{e*LR7o7fbwy=R%Lg>G*6f&lHvjDeC39KrkmZu$g@CzW|ud^crAGFLfIUI2e!%`s#VxbNl6 zbq&kR4{u--R0J0#(xeuCFsq*Q6J|&)d-p9?JyrdxHoHt8djxwC6pJg9Q6|yk&s`C| zUfH}#bA}XI?Kx&+ga?S+_n4V6IF1H6NMrS#!6;?qvQdTS&=iW3R5Uqd53SSHWlw;> z%wV4Z2H>V5mxRR9tp+zwIL$g5q6Tc;GmegjlpUW z1~aGs82C`_R{SbAK3PKcbtF^6_WLPc#@|UKF$(?fS7Fc+Unif(Zkiv47w%{k!Klhh zw;C4Fs>qVPqW=Llre7j4S2@AabKT}dj+YvQj%6tN-KSBPDRt402*y8gJ&Wjp)8nX( z86Yf$n`v+78`h|xDa0G?sA>|AFvB`|TOuNufuKdg?iJBD_}vRi1*WF4Oad*y?Au>P?H{B3ispew=L zhCq5)!@44zFuHpxLoZ;TPUv`;XmClmv73cp#3S9LWl7>S^xbT!3fa@V&C9(IF=DL# zatbsJPBdS-6^%E=w~z6y8(n$$kkTNcnlKRX3>)t%f{3*i$+$kjlNm$BTcOXMwq8#i z7W~(DU-gqQDm)q-9bVCLm&2`^$)=?GLh}bquknFy;dUtbK5kEA*n&7GHBKf#<)4?U zioe&OgtOJVW3!Z8z7@gmdt;q<8dU_E=nv8#=gMRb%7}{^tlswUy^?5^4j;o2ocoW< zfZrx+ZM4ejvbv5!g~7HB7xG%Y_!VyE(MkJk1G3@y?z}ROCvlZfg{f~A1Fx6>B(txC z%1M{{J_Q!gvp7}V#+#uE$gcIDrON%K8Te%P7db*y)n!xleIT>sh+P86T#I$~C7FB| z2W(957XX)l(x=L|n=;W)JZ7W9^H3I&Y?WR7KK`VC73}W{402WZi_G~rW$N^J;$7X5 zN7Cu1$A^~t(A%h|JZdRchwo1z2JRM)j5^((rLJeDjjel=%h$3mcn}{|Mp9mIK4=y@ zaQgLEQhj(vPi{p($>V7llHiMW07F4YWY8S$E}aX-19f_0-#*OmgaGv(Su6r9MnX&| zBY2vRTMCB8C;+qS`28hn`*df7cO5Cfuh%d{(;)qHGd4m<`vN+M)qL7d^~qKpx%T6S z%6GpzcN@KSoxG=mZyx}5CKj$fR)s#@c6t@Ux<2*ZUmBwQXlwEhK)4Teh@(+b!Ilq> zD_I4ktqsu+*n|gz_nr%apBm5**F~9n`)*MYVUFl|ewPcW)^A?!b?nz2*XJdFYHd~fFBom~nT(CC_Y~o$ z)ByjPop%Apk*cw%v-#s>^iTzr5rje8$6#x##LHGNE;RswyXmr}`{BPBcDRB*c5{29 zGWudx&$``AZ1YZixW+J@jNiMe`SWksfuA1k6rAUfN;@LF;pTzIorAH%pC0YsKK{&o zUe|JB31eKopWUDQIrx+kz_16asjTE>*T`D=x)Pm0q?6FlsJh(^Xr}O{FFdZ~3nWOZ zdbz$H;2U>zC^Ef{;sRi|RbpkKfP5tl`bRgNy>JmpAzSjr{R}yStA>?A$^lk zm&`{>Az+=O6?H0B%$#3taLnXShYo|fo9p33^+7Yn%7gS|{w^my|N4iT`!fmD`nZ26 zZQo}g9{Kkq&i8biJ4X(Tg|^;2buc|0+<2I-bePorZqmjMaR3?xu@i48xOi+e6iX^Wfbc{a_kDN@2!vP8d|A7FDpOaHkD_YMl|ApO ztr+{At8iu8ELLBSlQ>PZU@*G&w$)HAOYV$oz&Ha+DzPoy_* z>LIpdJUlgF3TbRt*oQo)J(w1-IZ<+yX69Jh;1rqCtwgyL)kpmO`Oaa41&X-Q8V_yTg~~J!kSK*EPvx&tzt= zwb#03=!LY0*Vjv1fwZG!jM_o?pRML7uyLB+uuVh`I*7w1-M$pS3n zk4r)RDuIu!T_nKOE8GhGwE(SvTaz)h!NNFs=rB&T}S;_Gm4W-p|KMo~auGHf*Kb7CrASYqa zAb5YEzSovYDw@MQEf+&KYWxr!UFR~-JiTFl=2}622p#Ul1rRnQ81!RiD&(ms!MOh$ zkrm;eVPQ~s>D|c^X}Y7(L!OcVwdil{hp7urIm@or`tA0((?KgawSKvm$A+h%HZeAu zfX#;MS1s-~1`~15$%mJU*4x--|CUe*EyVD8eTlmti?af+N2>RMk&v-QJX6?$6;8pv zcIfa2cZUC(ZdOEZZ|H$=p8@Cztf5zmc=e-7c|zjV;4p6Un)`DkyXTw>VORc@K@=h9 z&bZjbDj(V{1})~)h;MLZF+(>JYT<;WY7jr_!h=v8O~jAelNCE+Z@CZ~qHqBzzHuRf zB>^l0_~Q)*3bE`f`S0w;EEZ9$`AhuuwU)uk5x91aLJ zfk^A)II3Oh4FrPR2WZg*Lhv0w$|fwl27{ zO)}=wL!O6^f` zq6VoK)#8GtHN?r9TgyefP45d541<22r9&?B9%(x^V4AUJR~i zK1bD`c}g)1d^{tYDsS+(qv3A5zF+e?*mw(MT0q@p0{QQMiz*Em_;4UmvcXz7>{)5y0E%AAenAKgLj?( zkorem{6y;c^PzByhh z3%H-0DFW(KPr_kTC1^Xm0;@nwz^R_^hu_*@@8$rZn4W8%u+-F4-CHW?9)bL`#i58f~1FZk4K%*V}uU=%UDNCx9nB#RZR`==kcWB36hNJJ6 z`$4aO1=wiut`VtIj~Gvko7?2o9xvd;;yiNiglpyQNQO)7itZucLIg9+F+jb69DpAb z-oOYI2LI|1LZp2f^=dUg#(Dt0weXRvF!K0Zf_zVmQm!lX?dsU*j|aXHc36X4o#Tqo zrFe?Sc(F!Pz)0%~8ZLEBD?A&*>qhQ8w!cA=Bc+x2L8kVrED0Dk)mdcO%-FFwL8ne; zB%qGPK2(Nw7IB);>~+7(u*SZ0_fVw{7Q_xWul~M4>?4Cm+q^kzMZ@jr?MXH`-*8ol zwJ%HUdEe6m-mh#|gng7S%MU|EA&Z~SfESZ^EPVcSe=0F`uJ_$#zdO`i3`)c^(G5yW z(iz7Gz1zC^Lb6QLpysSb%MJ>TdhGs$A1L-OY$hIIu5Z?5bNg!3USXMHg@L72W_#d#W>&5gBcN+%sd>Id^|r~7fxO@OZ0mHE09GQNsy zXvN$`fDxCk{{gVn?YYU>Z{2(EpTETw2}y70G<|ObuEf!8yrwN*<6Qe=KLu?;Y7tPR z=(B+O_Ss>g%Msy;mC&ALk?GLhSr0tyrRV#{E8%*To#&_r@cyQrcKxi08gr4Mi2Iic zkgENGiP3bN(p^?owiFWeU)Mo*fmJ#ZspA+EC2D4kQFWQY^Z0qd@z7f(gI&oTXc~>|)q~iyMW@WoViUSG#@b@arX4MA4TZhZNpZ--2S7kJRy#7$kP7Jm3}C zs$0GD7q{UGY`53>mqYh~>6472Tv`H~Xwg+Zg(p8$Scp`q8w^s*$S_J`^m%>09gDFF zE$N2`xvwoks}oO@B{<^ucwMHT0t7e+2~u<%-06IR551=sg?IMb(pwY#y&H|pC=XAI z8rwBvtPn>THdPs(shoo_;3-uM9)PZ~?=XB4Q-C_UQJloE*5(K|!@>U;0L92~B5z`# z` zsH6KntPQ-cRuyl$)Y)qO0B8G!x2TpmSIM|8|3(VamOBfcJgMvdM`>n)NW@$qdIHb! zhK_J^X=`X`c1^aA^V*J3_mnQBDKd&2OK>&UF2nfUpzc8|dfTRm37Vm;@;apFK zi;$MWiUXrT-Hv}uB<=R94mQKe!JzJw_v?>^s$6~-c6agcJ%b?5*HPDOh-hPp`NUj5 zwrlS7L|&82g9R;`Pbt}7&`rZVvbc1W=MEzc{=wO&ym0a*$B=>VgZ@R|V_n2CPA@N< zcWxiDSe+tX2Y5%ge1uoOb5k)?dil02Kq7h9XsPw>TkK0Z22!{Xc4O5Vg2+?i);U^u zCfZ}7P!OEZ8P12BfCc`K`Y7T?ef3lsx{;}c3Lr+9h1;r88Byss=MS#Ewj@#~?#!Pz ziO>7gd*DF3rvAhHkLthUHigrLtojbgw1+8h7 zzekKKfKbK}L*F4pghC`pOI^s*5VSWs-_}KqA#igN#w>kc` zlKf&!0~l6Mhfq=^;FkwF_@Ly&f#DMmLFYfYa*=ZpOb8x8n4UVDzwY zlYvao_pWdo-BXqm*2Z0OpM6UgB9_mdDX2;&77Xs+h|dl%SZuZ(Lq2;93wn8PIWn?j z$-d>Q(9BZ_BSF%edYe{o{&Ct7q1K+dtZNdv;Edb0d-X##iD$~Sb4qCp)m6YkP3?p@ zu=v`-%t%Tpov5eMWIhkcEkKZ&hoSPr&o8ZC<%n{Jz8%*q-rphf8e)C(BxBYxcOjHR z3R`R>Rj~gGs8q*zvukCKwWlNXRkvXf4*7YpHpO$a@WU1f{+R#?uXW$AH`1+aspI#> z2QaXZ5ysFatAEY#IT4=dEvsTOK9`I<%r5`ikT3>MNnS7!5G<_$_Q=yL9cFw@DV*#y zydh0Mfl6JdzFl}8NSUt+O8&d^`!QYnkI%btzDXVYPxhpXtX3RY(cCp0;WHLIM-#f; zxPg_g4%Hmxle*GK^+}I3W^I-J6^M~{ZL5eN=@P^z5>ByzQv7s>U@X9FigX{rL9jD3 z43GBvYt+&^T@Z?CN2qN%DM2@rKdMjBZm3>>lBF@Gaur<)IK-+ zX$n3i$U~J2X6n8|+%$`TU_*n2yI(r8W1%8%@=!t{!)PGncV;G)xI(QwlpyK+W={rW zdXH!Ljp>YqtXhRTpI}_U6%x90yw{5bp2ss9$h2;jbcHwUeh#k%&*a8>L!XTQD=4rM z;01Pr_uqp)J)Rbo!5*KWT{Q+*2#EB&OY6P;SNS?MnH+@(ZDIWNe{C3#qo);Z+l?Gq z_UZDov>VqTAP(ME1FH|4{ZuOj?&=4KHq#RJ149&r&-#V#>qh5agO=%M1MX$clYia> zZd1tpCfU5xJg;z~#EXbp!=v$clin6N&;Rv{&m14)=0QPk!L%~CPQxLG=8?D5J?|aT zj?D)emBT-rKVjN7dDw$$*wq7mD2sRa>w6hmd8M1-Her>HKm)3ehASH$Gw zJPMF(gPdJ&r+DvqB=p-xRD|(ZNYn#Nq{gAgv_M^rFJ{z`*uCw2So27-A=rlnphR&2zZS;X>TxR$cq)mQjuS=UPg_tC# zx_MEde`5~r7<1o3HJQ^AKs;%go=K%8UF6lr;5#fjuFu-v@o8OsU0Ty@;=WHi%Cr-v z$4f=p6u_LtY%A|%+^E}4Ma(zhWFC-GuQY?r)u&V%k<(>Ddph^L0;ej((6Siv{l7K9 zF4K3qwe+Day43^;ac4-oh-SzrmMtim$B~_jP^W$0rPs2$d%sT}*s={YEj2BRHtWw5 zMXI^9NURbXWDualclK^xI@q`}&Ur>K{+o|@`JYwC-&>iW&z|K(TfOC7wDyg2$YBEB zOp5qKE_q$lK+ibHi9|TL?zxps*j}#dE9nCbMKJ6N{S}{Hl>VvhJQw_{um{hponLpq7#sya)lcF600zHZsC83v1f&Ay8kp0^@*Q_da=6S4y+4;XznWEf^&4zwKMb z6uku3Q4yJcbuvVSCLGY6gx1k&Q$Oo|xwl^wKp(J2!{6!dTo@GE(FK~bW%nsIr zi;6GBLuDFlrW|zt!qtDV38QWDi|bFrXyCX=h8K=+{LpC(c9QSdG0S@sDwcom4&v@! z9nb5n2j)CAIebZVrLW&ljh!O^aJ9i!5A8K_v>b~LXoHg>e>ac^0? zu>m}HnT)1Kw&`gKb^j#iLVhqrs#|e1Q30s9$Oz*iDmBCf#$MOaR%Pgk=jfE1=>a4$ zYK@iedeF;Z%dm4cV5FVSFf&V7`h=9uA$bntczJEzJzN-i<5;M7Ugkb&a!N5#|Enrp zqAX%yW!lWZf%(*0hY0&te%0}%=!4vE9W+Jf{jMc{sM5CjCMHJ=8E7rdhNkCbxy z*zBH@RV6OEX6}rsJbk}wASbjuKHPjN#004Qh+%a%Bh#q78*(snxXp|0v;9hvarE8t z5FL0Z1(#zKMZWV>7nW-Y>8Hu_Dn|{I!*z$NellSLwzPSfbXf~XZ?Z`L!I|owmzIwT zWWIWn4C76QDL9@$lkl0^RqG!9xLy~9o3U#f zmtNgJ2!B;Ab7S`YfT`;ipT<7VNPTx0^1$j|?~K4wYjB`71t~j#?B$gQK+LGztr712 zhmzj5&_cZ{Z8`Rlo=!%W5MbD93KS0C4^PyIhR^x4^ek=|n0=iQl7(0bb?k{r%iSBT zHowqh@@TMrsR5ivQkz7CL!SqJTo*01s{K55m?b(C_?^F2IE1N0Ylk5ISP;pk(lR zfZ5EJT5O_$rIS!k1`|5y5QEmusPfM>Fzh#0m;wvgTa&ygyB|%gRo!g=RmB)D(9{(r zzum%|6J%UOdx-c=m;%qEoEh02-mp+Iv2P+4E!jx0eu-2#?WD!zD;$4^b}%*rUvUVh zGg4pzQVn@Oiiw6@?!O%8ybO2pw!JYv-iLxP;a+52cgMV}l&08!KjRY6;xP8d?t_2@ z0F!~8yd8-rJYS=0#ganBX47#-M)Tb+w|d!w{i~LtPF^Qi(#iu@WM{JcpTrhd7r2z^ zNNOhY&?W-A8DZnngp&}21RaV$;pNis!ID{z!T_I69inu3MS}2dezBx3{*$)vkQ>BERv}-QVZs>UfXFqE8jqi5pKL!X|O*8lrAtKCC?e>7ZH`|1sF)q5*`_I;C+ zlezNV)1~B7aGsq@3!w&6an8HcF}bJz|KH;hwKVonJhz?vm(4ZFH`gGZBv=+a-dpwb zSWnfZ3k6e#UvuCAHAD73W_v{o1zId{c&wlpW&RxDnEZ51v7}Fk4oEJ>!J<~F;7zZ% z>nYYTuc4Wl9>uw&gx5a{E^~f4orCqUhin!|*d9a__84<+e(E)u*-*8Rw_AVp6q^x}anz3_EUSz4YF$9)dWY zUypO0tPK}@deJJXvjo|4)h*c@k#md83c2Xf3veI61F;jF~jcxdlYCr$x|J=c}+Dl=fPWbtkHfn8yHjxHX0*jR1NU=6ejkdws z*S%rCw8F!ziBBJ88*fK1+acM1y-sr9yX`Ko1&lpfnVUscz@P7f&|`w@joH(_@kNbC{O-kGCDO!>iWfRi7nAead`ww{j}dx zi`rS^CM%iOPnfaYbPzQx>|2XcA9i3E1p4f(%t5%+sd+v*nex(BTdQ+AH8HVa!ArJx zJ!j(OxYAgZC!jPtG&HnWjUFTmCDqf@^Gdw#K%?28Ypn0Mh(=#ePbXPf^}kfXE(q_) z&KBL;r14G2yWZm z{TN_)gqx2-Spc7q-|JNvGXiHvhZnft8wk&nMsfd0|MrU^7&0?!X=fK;edv@UX*X)I zKNB>H7zQ{2lx=x5u46ow_Pddh0&SJ@uNUXV(mP}i10qp@dOLhAKBko#r9L@GE;%xt zrdrgXqe`(ThQ8)6KPyIfom$=OO03IIJB3bbYFmi%AoW}rEFyKmcp6J*wIYlpT|yOI z`BkfQax}DKbx6A(n0oo4=bz5RT^|=>`?kn2M|j`0t=W z__*Ut_%6|?serBv$pyv0us`qD(GwXi8XO=l3LI%KjFTzD5ijd&lEahHyuUEeieS4`9Et;*Rxj zG)mxM(QW@E;+QsjuRYP7jI&(Red&`h5sxyx~b^5c6iaZvbLzVJ$X)k_vFF>;omiM&5iGCTgP z#8c0E)h~h?=f5mF^M8I+lm?C|4KgwvF#$D;I%wOtY1-F=cbw`!wDStuaYiI$&b_Mb z&%IoHur{lQv;RpZhU&n=@;l(zUQdhfKg0pBWz*5;U6T-It*VdCN1TOPy z8>eJAnqQwv3l)m>meDTOFIBRPD_&M0#njm&knGv<$%8;qU@Jp9mms)} z#{Cepgn8@S)?fdnVW0S&WH`HHftyR9o?}B!13qU)b#(YoR6RBm=y06KPp^ENJy0&v z9JYb`Yk{Qk0g3Lr!i=;aD-&-uWlky3_a}khp7K{z|5iQ!h@*!Q!N#}TX7fw!D|;)w zU`fsp(06~KjvK{=AE+~nY~Th^u`1{dkO06gsun*e(ldkFNh<^TUi@x?UTrQ|&|=K; z&{sFm`FBiczWo0_r<9wcjMIVs7zUQtQRR@^%di1c ztorq1=VmA5jWW%H-wOw#FK=4kU)_X2qSiQIUxQ2Q4b86v?q{q1NIRIadCKIt#t|q&?s5`x@={ zWFsw~nwhCaB)$n>OM<;GcU5Mw8G*au5N?`Ou=lUGCQZ`7JWG>1rOdUg54~Ps`8iJb z!`M(O@+FkuPGVB z)KqGa@&`^;JB;yGrP;i77JPFZND=Gr)q)g`b+TPSX&4TvM{o#+NNjX=hL$q`ormg` zKV7&W2qDlE$H8&BI#L@qH+8ECw|<-57)HILtE5X6MomA4#=jw9z{d678n;1FvXmEp zYSPZX<>7Hj6oub>Y-pjdkortip8zDUgpfK)@H}UFE0sRZ>L^;+#d0*(yE&ahjtiq~ z_jfk>lCv?USP{h~F=ik5RD=t*f{O>brL z;rfFM?Ch)5mzd&E66ZKyiDYbe!_dK01s@;-CLrn_dkzQKNr0Zj&KQgmL_tn|b$I0Y zcynw7s>z5S`|`dJF&@0%l!YUZHfQ-cMY8R?s}%qwJZ#2=@Ljq}0Fiq*n3Rj2R7BF0Yu~AYz>K?AM**{Th5KL~moAROrkx zw_Schsm4m%+~w5ZX^KbE{P6G~I@ZApwax;ix7M!(`iBLxDEa_Dj2BkyHN zB^4x~0Lzxu@1PQ*J;iV>X6$I~S^ z7<1b3IQViz!XGn z{lVy1>+n_U4`it`@~2u@Egq2m7fQN(JzsT-WH9Dx*Kw9OBQRa8kWT@pgZ=3qAP4t^ z=Ir@;Mhu*-qNLK{+fYUJqMY4!awYn4JES2`B?es0ef|nawdF38L=colBV|8|o6BU` z)GSS=prFvX2SUqb-@SXV54e^K@0gURRB^-^yZlMPp`xmqzz(7`Q&T6hGd9NqkVm<}Wj zt3@l4B@>aC0w%b=8yJY_|;#eKm!og2(-D$b}6`B zX1KF~{wZ`!dS7fStf&R=U9~-(wLb@(FRhirb&eR-4N#WuQ?b7?F)=L?0Z0EZKNU&S zyC@iy*o+hv3$$xfu+}7I3v#tRU5tt0tU9Oi+Yb|rMf#G(Wdh>(S916i0d!Jj^*s)Z{dF{kKTLU*s z0GjizH3=1gJ^IgmOP05M2@HL}GnH}2f0?Mlg$OblUqd=RmzQ%HyZ!!$KA~WnRCZcV zQ$3@mq7qXp!JNkzQ*v5K0Ga5l&beH6dY%2bgA{AS9(1cWS}PuC^jKSExg;FK`~9&< zGk`MSh736ju{Ql+nny{QiqQYJPczNHj|IZkCe^4J4__?&o+IqyY~6AYPMBx3*CL0VUYKeVX(}me_%m=RZw}!#$EjAvzQ&47QaHAK8kyR&-X^%5kGlMR<_7V{n@=FEt&E^mKcYr?d>H7 zom91(s!2%T;dk9?=j=Hp7qG;_7n4>xIqV-zps4sphMh7jOo&Vr;hjcwCTW+`T7A^q zFW#{TyWb*363R>hSD~ms!+4gjoX)=8T}^hXGiVANciEPI6e5T%h$U2>sMa==5f?YQ z`l^1%9uK00cbh4&1HYKqJR6zgYo8Gn-@by~HcNR7Q)#_PxI{lu-&7d;9u)0b@D3sB;p-!@dWpD-@l_H<==J}V0cb<)RaWRcgNd*Ithm4@MAqiUY3!i%t0%Nq;PrT~i`HOb9lu#f+SS9Y&ANmlK|H+?7 zpZwy74%(rh3%CgQwqs?4bb5qzeyAa$|79_XMBq>)c_1{++v;+RO=aJy8z_}_*5ed3 zbs&5_xn z&%E4bhGL_;bkd<)@py+=G`a>_$Fa5=uedZnRUC`U!Rp^V--(J+$)-nzm5r+#r& zJ2lJ~@*XR{;1+x!oiEh?_Fxm@vpH&^Uh9Vz@H{=OojToV$Qg97857GCE*bkU<7BRp zqA)klgYpb)SfYiqgU0@n@k{HggHb4P)mNHgu) z&zkhLeds7|9qS&cYO%nvd~Wb|><3FMo2HSGQJGnJg3iB8TY5iqIV*{R053lYmf?P0 zSHd>V;$8`7`Q9LbNBTQ*8k$pyUck&pV)VKyxlra=>K`JU`dr54(-JC0ni|V1#dX2o zf6W>>fl?{`O%)qxW#6=0NFk}BM`(}JRYEj-O>G1RU(gdOpW<|g_ylfB{<;7KMm|!c zhYn#47K-46CQH+wt3U5JWna9*8>J)k`)alk>Wj+$dj1a@nZplv?`Qv_!O=@Bqs(vigwzt+~-bAdyilk){sj zKfh$35i?nDIW$;X|GL!H`sny?@ALbQs}34=O9g6m3vEL+qI2HfOHzmTfSL52CXiWn z=3*6k@!{dK1@HU8)%<2L=%LG80pKX9uZ-!s7<=%7tdyDR>E>536ea2}hq6Wo+=Jlo z-=ff%rP(021V|_BCQW>`OtqGW_BVfemRI}*4~naPW&sjg1B{U%Mh9d#PeG)!5(l@J zvr?$#L+l1WhF=WK$1ByGp_jy{YoAGgvy{uL2GMu+ApRZVx}7Unc2V1AL-KE!2z@n; zsY*PMf(=Q2{4zC`8e`Bx8*Hldt(8gX9zb7n3zHUd_YB zS$DfPVxo|Uc-YSREoZ243OhQa8?e=g4{0D$0 zglaiHH#ZlH#b9p@QciWHQr`J~CUg9=&=C(v$H6#M+Uy877IVAS6(cb82%D|aOPGK> zPd3DX#w4lBEK5PDeSlTySSt#A@~|yyk+~IL5X$UfbQBU~3ZMVGSMzOQ?YG5iZi2obTehlfY)H#5@z-cP1?R6am}?6k}34nnl*=xv>We=`dk2O{h-L}J+l9sj+l z--&!Ga-x+%#X>MRh9h7(_$* zo5y%0H9{Ke=)5n|N<)jXB(e))A2-4o4e5x=n|M0sQ+2*^&} zCn5&Yd1RwR?3-bAI0qE4oGx3|#yV{T%+#%W$F&n~Tcikc(a0JI9qSTZP#zA=0#WLe z5(bNoUWsJxAq}IyNTkN28c(i}Z`NnS?UHNNkP(v#aQ4vjnLQHE%_)kK}~ML~luH`nCev`fHt7`^wf^ z|CBcwtDTnAC4PAPdNJ5~r<&)p%WR+~{=AmQFOaxk?lw*?5cYW0m3$gEW*$(dL36a^ z7*MBQaT>Q)SbJJ9b|V^lecmMl^ zSY(u*IM<`e*WaERd+Sn&a#fiP{NHH4My9LIXd-dOne~{}riR^G#a-?FK)D)!P}E4{ azIuJCjr7cSU From da069a506d927f81fb4e69cd518e934796cd3081 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Wed, 19 Oct 2016 11:22:29 -0700 Subject: [PATCH 145/286] Rename sync_methods_ to sync_requests_ --- include/grpc++/server.h | 2 +- src/cpp/server/server_cc.cc | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index fb04b88148e..2627a09deb8 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -203,7 +203,7 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { grpc::mutex mu_; bool started_; bool shutdown_; - bool shutdown_notified_; + bool shutdown_notified_; // Was notify called on the shutdown_cv_ grpc::condition_variable shutdown_cv_; diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 809e74c95fe..050f593d44f 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -1,5 +1,4 @@ /* - * * Copyright 2015, Google Inc. * All rights reserved. * @@ -304,15 +303,14 @@ class Server::SyncRequestThreadManager : public ThreadManager { } void AddSyncMethod(RpcServiceMethod* method, void* tag) { - sync_methods_.emplace_back(method, tag); + sync_requests_.emplace_back(method, tag); } void AddUnknownSyncMethod() { - // TODO (sreek) - Check if !sync_methods_.empty() is really needed here - if (!sync_methods_.empty()) { + if (!sync_requests_.empty()) { unknown_method_.reset(new RpcServiceMethod( "unknown", RpcMethod::BIDI_STREAMING, new UnknownMethodHandler)); - sync_methods_.emplace_back(unknown_method_.get(), nullptr); + sync_requests_.emplace_back(unknown_method_.get(), nullptr); } } @@ -328,8 +326,8 @@ class Server::SyncRequestThreadManager : public ThreadManager { } void Start() { - if (!sync_methods_.empty()) { - for (auto m = sync_methods_.begin(); m != sync_methods_.end(); m++) { + if (!sync_requests_.empty()) { + for (auto m = sync_requests_.begin(); m != sync_requests_.end(); m++) { m->SetupRequest(); m->Request(server_->c_server(), server_cq_->cq()); } @@ -342,7 +340,7 @@ class Server::SyncRequestThreadManager : public ThreadManager { Server* server_; CompletionQueue* server_cq_; int cq_timeout_msec_; - std::vector sync_methods_; + std::vector sync_requests_; std::unique_ptr unknown_method_; std::shared_ptr global_callbacks_; }; @@ -431,6 +429,7 @@ bool Server::RegisterService(const grpc::string* host, Service* service) { if (it->get() == nullptr) { // Handled by generic service if any. continue; } + RpcServiceMethod* method = it->get(); void* tag = grpc_server_register_method( server_, method->name(), host ? host->c_str() : nullptr, @@ -440,13 +439,15 @@ bool Server::RegisterService(const grpc::string* host, Service* service) { method->name()); return false; } - if (method->handler() == nullptr) { + + if (method->handler() == nullptr) { // Async method method->set_server_tag(tag); } else { for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { (*it)->AddSyncMethod(method, tag); } } + method_name = method->name(); } @@ -499,7 +500,6 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { return true; } -/* TODO (sreek) check if started_ and shutdown_ are needed anymore */ void Server::ShutdownInternal(gpr_timespec deadline) { grpc::unique_lock lock(mu_); if (started_ && !shutdown_) { From abb0f0b306e282dd8a237f30b212388fb42e65ad Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Wed, 19 Oct 2016 11:28:26 -0700 Subject: [PATCH 146/286] Update CronetFramework.podspec license --- src/objective-c/CronetFramework.podspec | 37 +++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/objective-c/CronetFramework.podspec b/src/objective-c/CronetFramework.podspec index fe46d32c1be..2f47b02c0c0 100644 --- a/src/objective-c/CronetFramework.podspec +++ b/src/objective-c/CronetFramework.podspec @@ -33,11 +33,44 @@ Pod::Spec.new do |s| s.version = "0.0.3" s.summary = "Cronet, precompiled and used as a framework." s.homepage = "http://chromium.org" - s.license = { :type => 'BSD' } + s.license = { + :type => 'BSD', + :text => <<-LICENSE + Copyright 2015, Google Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + LICENSE + } s.vendored_framework = "Cronet.framework" s.author = "The Chromium Authors" - s.ios.deployment_target = "7.1" + s.ios.deployment_target = "8.0" s.source = { :http => 'https://storage.googleapis.com/grpc-precompiled-binaries/cronet/Cronet.framework.zip' } s.preserve_paths = "Cronet.framework" s.public_header_files = "Cronet.framework/Headers/**/*{.h}" + s.source_files = "Cronet.framework/Headers/**/*{.h}" end From b2583d89cf073466432943acd76a3e49a58471b5 Mon Sep 17 00:00:00 2001 From: Jorge Canizales Date: Fri, 7 Oct 2016 19:44:03 -0700 Subject: [PATCH 147/286] Upgrade SwiftSample to XCode 8 and Swift 3 --- .../SwiftSample.xcodeproj/project.pbxproj | 18 +++++++++---- .../xcschemes/SwiftSample.xcscheme | 2 +- .../examples/SwiftSample/ViewController.swift | 25 +++++++++---------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj index afc3da71168..55b392e7783 100644 --- a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj +++ b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ @@ -123,16 +123,17 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0730; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = gRPC; TargetAttributes = { 633BFFC11B950B210007E424 = { CreatedOnToolsVersion = 6.4; + LastSwiftMigration = 0800; }; }; }; buildConfigurationList = 633BFFBD1B950B210007E424 /* Build configuration list for PBXProject "SwiftSample" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 8.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -246,8 +247,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -292,8 +295,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -312,6 +317,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.4; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -327,6 +333,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "io.grpc.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_VERSION = 3.0; USER_HEADER_SEARCH_PATHS = ""; }; name = Debug; @@ -341,6 +348,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "io.grpc.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_VERSION = 3.0; USER_HEADER_SEARCH_PATHS = ""; }; name = Release; @@ -355,7 +363,7 @@ 633BFFE01B950B210007E424 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; 633BFFE11B950B210007E424 /* Build configuration list for PBXNativeTarget "SwiftSample" */ = { isa = XCConfigurationList; @@ -364,7 +372,7 @@ 633BFFE31B950B210007E424 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; /* End XCConfigurationList section */ }; diff --git a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/xcshareddata/xcschemes/SwiftSample.xcscheme b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/xcshareddata/xcschemes/SwiftSample.xcscheme index bba6a02b2b4..87bca5ec681 100644 --- a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/xcshareddata/xcschemes/SwiftSample.xcscheme +++ b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/xcshareddata/xcschemes/SwiftSample.xcscheme @@ -1,6 +1,6 @@ Date: Fri, 7 Oct 2016 19:47:03 -0700 Subject: [PATCH 148/286] Update Sample project to XCode 8 --- .../examples/Sample/Sample.xcodeproj/project.pbxproj | 12 +++++++++--- .../xcshareddata/xcschemes/Sample.xcscheme | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj b/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj index ab7159cda2f..8d34b26c4fc 100644 --- a/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj +++ b/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ @@ -129,7 +129,7 @@ 6369A2621A9322E20015FC5C /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0730; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = gRPC; TargetAttributes = { 6369A2691A9322E20015FC5C = { @@ -138,7 +138,7 @@ }; }; buildConfigurationList = 6369A2651A9322E20015FC5C /* Build configuration list for PBXProject "Sample" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 8.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -253,8 +253,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -263,6 +265,7 @@ ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -296,8 +299,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -305,6 +310,7 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; diff --git a/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme b/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme index d399e22e460..881474b111c 100644 --- a/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme +++ b/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme @@ -1,6 +1,6 @@ Date: Wed, 19 Oct 2016 12:00:21 -0700 Subject: [PATCH 149/286] Update tests project to XCode 8 --- src/objective-c/tests/Info.plist | 2 +- .../tests/Tests.xcodeproj/project.pbxproj | 13 ++++++++++--- .../xcshareddata/xcschemes/AllTests.xcscheme | 2 +- .../xcschemes/InteropTestsLocalCleartext.xcscheme | 2 +- .../xcschemes/InteropTestsLocalSSL.xcscheme | 2 +- .../xcschemes/InteropTestsRemote.xcscheme | 2 +- .../xcschemes/RxLibraryUnitTests.xcscheme | 2 +- 7 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/objective-c/tests/Info.plist b/src/objective-c/tests/Info.plist index fbeeb96ba6c..ba72822e872 100644 --- a/src/objective-c/tests/Info.plist +++ b/src/objective-c/tests/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - gRPC.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj index f9389a4977f..75adc6a040d 100644 --- a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj +++ b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ @@ -400,7 +400,7 @@ 635697BF1B14FC11007A7283 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0630; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = gRPC; TargetAttributes = { 63423F431B150A5F006CF63C = { @@ -424,7 +424,7 @@ }; }; buildConfigurationList = 635697C21B14FC11007A7283 /* Build configuration list for PBXProject "Tests" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 8.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -846,6 +846,7 @@ ); INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "gRPC.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -860,6 +861,7 @@ ); INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "gRPC.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -877,13 +879,16 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -920,8 +925,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme index d1d616c4cf2..740a1c0672d 100644 --- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme +++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme @@ -1,6 +1,6 @@ Date: Wed, 19 Oct 2016 14:01:13 -0700 Subject: [PATCH 150/286] Disable a new test from running under libuv --- build.yaml | 2 ++ tools/run_tests/tests.json | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/build.yaml b/build.yaml index 173b2e8e2cb..2c887ce4c9a 100644 --- a/build.yaml +++ b/build.yaml @@ -2674,6 +2674,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 5dd0a5bb07b..2ae61bd2fe5 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -2212,7 +2212,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", From 91d0093e5edccdcf64d8d675b9a2b9596d5db773 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 19 Oct 2016 15:26:13 -0700 Subject: [PATCH 151/286] Fix test --- test/core/end2end/tests/resource_quota_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c index 81850aea58f..02fef94f677 100644 --- a/test/core/end2end/tests/resource_quota_server.c +++ b/test/core/end2end/tests/resource_quota_server.c @@ -53,7 +53,7 @@ static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, gpr_log(GPR_INFO, "%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); + config.init_client(&f, client_args, NULL); return f; } From 920ed0c4187761b55d081e1eed7eb7fbbbe6e757 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Wed, 19 Oct 2016 17:02:16 -0700 Subject: [PATCH 152/286] Modify Thread manager test --- build.yaml | 2 - .../cpp/thread_manager/thread_manager_test.cc | 102 +++++++++++------- test/cpp/thread_manager/thread_manager_test.h | 58 ---------- tools/run_tests/sources_and_headers.json | 7 +- .../thread_manager_test.vcxproj | 3 - .../thread_manager_test.vcxproj.filters | 5 - 6 files changed, 68 insertions(+), 109 deletions(-) delete mode 100644 test/cpp/thread_manager/thread_manager_test.h diff --git a/build.yaml b/build.yaml index b6e17f43a73..6593c416b78 100644 --- a/build.yaml +++ b/build.yaml @@ -3364,8 +3364,6 @@ targets: - name: thread_manager_test build: test language: c++ - headers: - - test/cpp/thread_manager/thread_manager_test.h src: - test/cpp/thread_manager/thread_manager_test.cc deps: diff --git a/test/cpp/thread_manager/thread_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc index 9265c2921ad..326e30e895c 100644 --- a/test/cpp/thread_manager/thread_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -31,7 +31,7 @@ *is % allowed in string */ -#include +#include #include #include @@ -39,63 +39,93 @@ #include #include -#include "test/cpp/thread_manager/thread_manager_test.h" #include "test/cpp/util/test_config.h" -using grpc::testing::ThreadManagerTest; +class ThreadManagerTest GRPC_FINAL : public grpc::ThreadManager { + public: + ThreadManagerTest() + : ThreadManager(kMinPollers, kMaxPollers), + num_do_work_(0), + num_poll_for_work_(0), + num_work_found_(0) {} -static const int kMinPollers = 2; -static const int kMaxPollers = 10; + grpc::ThreadManager::WorkStatus PollForWork(void **tag, + bool *ok) GRPC_OVERRIDE; + void DoWork(void *tag, bool ok) GRPC_OVERRIDE; + void PerformTest(); -static const int kPollingTimeoutMsec = 10; -static const int kDoWorkDurationMsec = 1; + private: + void SleepForMs(int sleep_time_ms); -static const int kNumDoWorkIterations = 10; + static const int kMinPollers = 2; + static const int kMaxPollers = 10; + + static const int kPollingTimeoutMsec = 10; + static const int kDoWorkDurationMsec = 1; + + // PollForWork will return SHUTDOWN after these many number of invocations + static const int kMaxNumPollForWork = 50; + + std::atomic_int num_do_work_; // Number of calls to DoWork + std::atomic_int num_poll_for_work_; // Number of calls to PollForWork + std::atomic_int num_work_found_; // Number of times WORK_FOUND was returned +}; + +void ThreadManagerTest::SleepForMs(int duration_ms) { + gpr_timespec sleep_time = + gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), + gpr_time_from_millis(duration_ms, GPR_TIMESPAN)); + gpr_sleep_until(sleep_time); +} grpc::ThreadManager::WorkStatus ThreadManagerTest::PollForWork(void **tag, bool *ok) { - { - std::unique_lock lock(mu_); - gpr_log(GPR_INFO, "PollForWork: Entered"); + int call_num = num_poll_for_work_.fetch_add(1); + + if (call_num >= kMaxNumPollForWork) { + ThreadManager::Shutdown(); + return SHUTDOWN; } - WorkStatus work_status = WORK_FOUND; + // Simulate "polling for work" by sleeping for sometime + SleepForMs(kPollingTimeoutMsec); + *tag = nullptr; *ok = true; - // Simulate "polling for work" by sleeping for sometime - std::this_thread::sleep_for(std::chrono::milliseconds(kPollingTimeoutMsec)); - - { - std::unique_lock lock(mu_); - num_calls_++; - if (num_calls_ > kNumDoWorkIterations) { - gpr_log(GPR_DEBUG, "PollForWork: Returning shutdown"); - work_status = SHUTDOWN; - ThreadManager::Shutdown(); - } + // Return timeout roughly 1 out of every 3 calls + if (call_num % 3 == 0) { + return TIMEOUT; + } else { + num_work_found_++; + return WORK_FOUND; } - - return work_status; } void ThreadManagerTest::DoWork(void *tag, bool ok) { - { - std::unique_lock lock(mu_); - gpr_log(GPR_DEBUG, "DoWork()"); - } + num_do_work_++; + SleepForMs(kDoWorkDurationMsec); // Simulate doing work by sleeping +} - gpr_timespec sleep_time = - gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), - gpr_time_from_millis(kDoWorkDurationMsec, GPR_TIMESPAN)); - gpr_sleep_until(sleep_time); +void ThreadManagerTest::PerformTest() { + // Initialize() starts the ThreadManager + ThreadManager::Initialize(); + + // Wait for all the threads to gracefully terminate + ThreadManager::Wait(); + + // The number of times DoWork() was called is equal to the number of times + // WORK_FOUND was returned + gpr_log(GPR_DEBUG, "DoWork() called %d times", num_do_work_.load()); + GPR_ASSERT(num_do_work_ == num_work_found_); } int main(int argc, char **argv) { + std::srand(std::time(NULL)); + grpc::testing::InitTest(&argc, &argv, true); - ThreadManagerTest test_rpc_manager(kMinPollers, kMaxPollers); - test_rpc_manager.Initialize(); - test_rpc_manager.Wait(); + ThreadManagerTest test_rpc_manager; + test_rpc_manager.PerformTest(); return 0; } diff --git a/test/cpp/thread_manager/thread_manager_test.h b/test/cpp/thread_manager/thread_manager_test.h deleted file mode 100644 index 176448243b7..00000000000 --- a/test/cpp/thread_manager/thread_manager_test.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * Copyright 2016, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *is % allowed in string - */ -#ifndef GRPC_TEST_CPP_THREAD_MANAGER_TEST_H -#define GRPC_TEST_CPP_THREAD_MANAGER_TEST_H - -#include "src/cpp/thread_manager/thread_manager.h" - -namespace grpc { -namespace testing { - -class ThreadManagerTest GRPC_FINAL : public ThreadManager { - public: - ThreadManagerTest(int min_pollers, int max_pollers) - : ThreadManager(min_pollers, max_pollers), num_calls_(0){}; - - grpc::ThreadManager::WorkStatus PollForWork(void **tag, - bool *ok) GRPC_OVERRIDE; - void DoWork(void *tag, bool ok) GRPC_OVERRIDE; - - private: - grpc::mutex mu_; - int num_calls_; -}; - -} // namespace testing -} // namespace grpc - -#endif // GRPC_TEST_CPP_THREAD_MANAGER_TEST_H diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 471ba5dcafc..b9957427381 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -3154,15 +3154,12 @@ "grpc++", "grpc++_test_config" ], - "headers": [ - "test/cpp/thread_manager/thread_manager_test.h" - ], + "headers": [], "is_filegroup": false, "language": "c++", "name": "thread_manager_test", "src": [ - "test/cpp/thread_manager/thread_manager_test.cc", - "test/cpp/thread_manager/thread_manager_test.h" + "test/cpp/thread_manager/thread_manager_test.cc" ], "third_party": false, "type": "target" diff --git a/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj b/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj index 6de19fbf338..2c35a03a021 100644 --- a/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj +++ b/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj @@ -159,9 +159,6 @@ - - - diff --git a/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj.filters b/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj.filters index a16d1913170..e1741f8316c 100644 --- a/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj.filters +++ b/vsprojects/vcxproj/test/thread_manager_test/thread_manager_test.vcxproj.filters @@ -5,11 +5,6 @@ test\cpp\thread_manager - - - test\cpp\thread_manager - - From 6135535ca77a076652fa3d14ea1619835ec424ae Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 20 Oct 2016 11:17:22 -0700 Subject: [PATCH 153/286] Minor changes and called generate_projects.sh again --- src/cpp/server/server_builder.cc | 4 +- src/cpp/server/server_cc.cc | 4 +- .../cpp/thread_manager/thread_manager_test.cc | 2 +- tools/run_tests/tests.json | 312 +++++++++--------- 4 files changed, 161 insertions(+), 161 deletions(-) diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 9bf3221e6ac..8ca29ee58c3 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -216,8 +216,8 @@ std::unique_ptr ServerBuilder::BuildAndStart() { // ServerBuilder's AddCompletionQueue() method (those completion queues // are in 'cqs_' member variable of ServerBuilder object) std::shared_ptr>> - sync_server_cqs = std::make_shared< - std::vector>>(); + sync_server_cqs(std::make_shared< + std::vector>>()); if (has_sync_methods) { // This is a Sync server diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 050f593d44f..59af7087cfc 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -332,7 +332,7 @@ class Server::SyncRequestThreadManager : public ThreadManager { m->Request(server_->c_server(), server_cq_->cq()); } - ThreadManager::Initialize(); + Initialize(); // ThreadManager's Initialize() } } @@ -513,7 +513,7 @@ void Server::ShutdownInternal(gpr_timespec deadline) { // 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(); + (*it)->Shutdown(); // ThreadManager's Shutdown() } shutdown_cq.Shutdown(); diff --git a/test/cpp/thread_manager/thread_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc index 326e30e895c..1391c387fcf 100644 --- a/test/cpp/thread_manager/thread_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -83,7 +83,7 @@ grpc::ThreadManager::WorkStatus ThreadManagerTest::PollForWork(void **tag, int call_num = num_poll_for_work_.fetch_add(1); if (call_num >= kMaxNumPollForWork) { - ThreadManager::Shutdown(); + Shutdown(); return SHUTDOWN; } diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 8cc7d3c4416..b26bba71be7 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -17023,7 +17023,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17044,7 +17046,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17065,7 +17069,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17086,7 +17092,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17107,7 +17115,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17128,7 +17138,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17149,7 +17161,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17170,7 +17184,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17191,7 +17207,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17212,7 +17230,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17233,7 +17253,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17254,7 +17276,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17275,7 +17299,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17296,7 +17322,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17317,7 +17345,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17338,7 +17368,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17359,7 +17391,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17380,7 +17414,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17401,7 +17437,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17422,7 +17460,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17443,7 +17483,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17464,7 +17506,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17485,7 +17529,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17506,7 +17552,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17527,7 +17575,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17548,7 +17598,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17569,7 +17621,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17590,7 +17644,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17611,7 +17667,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17632,7 +17690,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17653,7 +17713,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17674,7 +17736,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17695,7 +17759,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17716,7 +17782,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17737,7 +17805,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17758,7 +17828,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17779,7 +17851,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17800,7 +17874,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17821,7 +17897,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17843,9 +17921,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17867,9 +17943,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17891,9 +17965,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17915,9 +17987,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17939,9 +18009,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17963,9 +18031,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17987,9 +18053,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18011,9 +18075,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18035,9 +18097,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18059,9 +18119,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18149,9 +18207,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18173,9 +18229,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18197,9 +18251,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18221,9 +18273,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18245,9 +18295,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18269,9 +18317,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18293,9 +18339,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18339,9 +18383,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18363,9 +18405,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18387,9 +18427,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18411,9 +18449,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18435,9 +18471,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18459,9 +18493,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18483,9 +18515,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18507,9 +18537,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18531,9 +18559,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18555,9 +18581,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18579,9 +18603,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18603,9 +18625,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18627,9 +18647,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18651,9 +18669,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18675,9 +18691,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18699,9 +18713,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18723,9 +18735,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18747,9 +18757,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18793,9 +18801,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18817,9 +18823,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18841,9 +18845,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18865,9 +18867,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", From e1443b195e999a6ed39095c71008535915c21889 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Thu, 20 Oct 2016 11:53:13 -0700 Subject: [PATCH 154/286] Flush host when network connectivity changes --- src/objective-c/GRPCClient/GRPCCall.m | 40 +++++++++++-------- .../private/GRPCConnectivityMonitor.h | 3 +- .../private/GRPCConnectivityMonitor.m | 17 +++++++- src/objective-c/GRPCClient/private/GRPCHost.m | 13 ++++++ .../GRPCReachabilityFlagNames.xmacro.h | 1 + .../project.pbxproj | 2 +- 6 files changed, 55 insertions(+), 21 deletions(-) diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index 43204345f55..bbfb5aa45f3 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -375,20 +375,6 @@ static NSMutableDictionary *callFlags; _state = GRXWriterStateStarted; } - // Create a retain cycle so that this instance lives until the RPC finishes (or is cancelled). - // This makes RPCs in which the call isn't externally retained possible (as long as it is started - // before being autoreleased). - // Care is taken not to retain self strongly in any of the blocks used in this implementation, so - // that the life of the instance is determined by this retain cycle. - _retainSelf = self; - - _responseWriteable = [[GRXConcurrentWriteable alloc] initWithWriteable:writeable]; - - _wrappedCall = [[GRPCWrappedCall alloc] initWithHost:_host path:_path]; - NSAssert(_wrappedCall, @"Error allocating RPC objects. Low memory?"); - - [self sendHeaders:_requestHeaders]; - [self invokeCall]; // TODO(jcanizales): Extract this logic somewhere common. NSString *host = [NSURL URLWithString:[@"https://" stringByAppendingString:_host]].host; if (!host) { @@ -397,15 +383,35 @@ static NSMutableDictionary *callFlags; } __weak typeof(self) weakSelf = self; _connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:host]; - [_connectivityMonitor handleLossWithHandler:^{ + void (^handler)() = ^{ typeof(self) strongSelf = weakSelf; if (strongSelf) { [strongSelf finishWithError:[NSError errorWithDomain:kGRPCErrorDomain code:GRPCErrorCodeUnavailable userInfo:@{NSLocalizedDescriptionKey: @"Connectivity lost."}]]; - [[GRPCHost hostWithAddress:strongSelf->_host] disconnect]; } - }]; + }; + [_connectivityMonitor handleLossWithHandler:handler + wifiStatusChangeHandler:handler]; + + // Create a retain cycle so that this instance lives until the RPC finishes + // (or is cancelled). + // This makes RPCs in which the call isn't externally retained possible (as + // long as it is started + // before being autoreleased). + // Care is taken not to retain self strongly in any of the blocks used in this + // implementation, so + // that the life of the instance is determined by this retain cycle. + _retainSelf = self; + + _responseWriteable = + [[GRXConcurrentWriteable alloc] initWithWriteable:writeable]; + + _wrappedCall = [[GRPCWrappedCall alloc] initWithHost:_host path:_path]; + NSAssert(_wrappedCall, @"Error allocating RPC objects. Low memory?"); + + [self sendHeaders:_requestHeaders]; + [self invokeCall]; } - (void)setState:(GRXWriterState)newState { diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h index 2fae4103315..8d5c1b3e68a 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h @@ -73,5 +73,6 @@ * Only one handler is active at a time, so if this method is called again before the previous * handler has been called, it might never be called at all (or yes, if it has already been queued). */ -- (void)handleLossWithHandler:(nonnull void (^)())handler; +- (void)handleLossWithHandler:(void (^)())handler + wifiStatusChangeHandler:(void (^)())wifiStatusChangeHandler; @end diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index b4061bd5ef5..d736c5e6b03 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -120,6 +120,7 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, @implementation GRPCConnectivityMonitor { SCNetworkReachabilityRef _reachabilityRef; + GRPCReachabilityFlags *_previousReachabilityFlags; } - (nullable instancetype)initWithReachability:(nullable SCNetworkReachabilityRef)reachability { @@ -129,6 +130,13 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, if ((self = [super init])) { _reachabilityRef = CFRetain(reachability); _queue = dispatch_get_main_queue(); + SCNetworkReachabilityFlags flags; + if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) { + _previousReachabilityFlags = + [[GRPCReachabilityFlags alloc] initWithFlags:flags]; + } else { + _previousReachabilityFlags = 0; + } } return self; } @@ -149,11 +157,16 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, return returnValue; } -- (void)handleLossWithHandler:(void (^)())handler { +- (void)handleLossWithHandler:(void (^)())handler + wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler { [self startListeningWithHandler:^(GRPCReachabilityFlags *flags) { - if (!flags.isHostReachable) { + if (!flags.reachable && handler) { handler(); + } else if (flags.isWWAN ^ _previousReachabilityFlags.isWWAN && + wifiStatusChangeHandler) { + wifiStatusChangeHandler(); } + _previousReachabilityFlags = flags; }]; } diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index f8634b448e9..ee6045653e9 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -43,6 +43,7 @@ #import "GRPCChannel.h" #import "GRPCCompletionQueue.h" +#import "GRPCConnectivityMonitor.h" #import "NSDictionary+GRPC.h" NS_ASSUME_NONNULL_BEGIN @@ -52,6 +53,7 @@ NS_ASSUME_NONNULL_BEGIN #define GRPC_OBJC_VERSION_STRING @"1.0.0" static NSMutableDictionary *kHostCache; +static GRPCConnectivityMonitor *connectivityMonitor = nil; @implementation GRPCHost { // TODO(mlumish): Investigate whether caching channels with strong links is a good idea. @@ -98,6 +100,16 @@ static NSMutableDictionary *kHostCache; _address = address; _secure = YES; kHostCache[address] = self; + + if (!connectivityMonitor) { + connectivityMonitor = + [GRPCConnectivityMonitor monitorWithHost:hostURL.host]; + void (^handler)() = ^{ + [GRPCHost flushChannelCache]; + }; + [connectivityMonitor handleLossWithHandler:handler + wifiStatusChangeHandler:handler]; + } } } return self; @@ -110,6 +122,7 @@ static NSMutableDictionary *kHostCache; BOOL * _Nonnull stop) { [host disconnect]; }]; + connectivityMonitor = nil; } } diff --git a/src/objective-c/GRPCClient/private/GRPCReachabilityFlagNames.xmacro.h b/src/objective-c/GRPCClient/private/GRPCReachabilityFlagNames.xmacro.h index 4b92504b555..1c907877a0e 100644 --- a/src/objective-c/GRPCClient/private/GRPCReachabilityFlagNames.xmacro.h +++ b/src/objective-c/GRPCClient/private/GRPCReachabilityFlagNames.xmacro.h @@ -65,3 +65,4 @@ GRPC_XMACRO_ITEM(interventionRequired, InterventionRequired) GRPC_XMACRO_ITEM(connectionOnDemand, ConnectionOnDemand) GRPC_XMACRO_ITEM(isLocalAddress, IsLocalAddress) GRPC_XMACRO_ITEM(isDirect, IsDirect) +GRPC_XMACRO_ITEM(isWWAN, IsWWAN) diff --git a/src/objective-c/tests/Connectivity/ConnectivityTestingApp.xcodeproj/project.pbxproj b/src/objective-c/tests/Connectivity/ConnectivityTestingApp.xcodeproj/project.pbxproj index 2a9466c03f1..3f26c985648 100644 --- a/src/objective-c/tests/Connectivity/ConnectivityTestingApp.xcodeproj/project.pbxproj +++ b/src/objective-c/tests/Connectivity/ConnectivityTestingApp.xcodeproj/project.pbxproj @@ -156,7 +156,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; 5347BF6C41E7888C1C05CD88 /* [CP] Copy Pods Resources */ = { From 72e92441f78dd5f51b0c1787b66d3b41e8f8767f Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Thu, 20 Oct 2016 12:03:33 -0700 Subject: [PATCH 155/286] Fix nonnull problem --- src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h | 4 ++-- src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h index 8d5c1b3e68a..8332ffbf288 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h @@ -73,6 +73,6 @@ * Only one handler is active at a time, so if this method is called again before the previous * handler has been called, it might never be called at all (or yes, if it has already been queued). */ -- (void)handleLossWithHandler:(void (^)())handler - wifiStatusChangeHandler:(void (^)())wifiStatusChangeHandler; +- (void)handleLossWithHandler:(nonnull void (^)())handler + wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler; @end diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index d736c5e6b03..afd773c70c4 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -160,10 +160,9 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, - (void)handleLossWithHandler:(void (^)())handler wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler { [self startListeningWithHandler:^(GRPCReachabilityFlags *flags) { - if (!flags.reachable && handler) { + if (!flags.reachable) { handler(); - } else if (flags.isWWAN ^ _previousReachabilityFlags.isWWAN && - wifiStatusChangeHandler) { + } else if (flags.isWWAN ^ _previousReachabilityFlags.isWWAN) { wifiStatusChangeHandler(); } _previousReachabilityFlags = flags; From cb18d7a6b6e457c969cc5a9ef170c7b2a2014b86 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 20 Oct 2016 12:39:30 -0700 Subject: [PATCH 156/286] make gcc 4.6 and earlier versions happy --- src/cpp/server/server_cc.cc | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 59af7087cfc..26557f5c499 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -303,14 +303,15 @@ class Server::SyncRequestThreadManager : public ThreadManager { } void AddSyncMethod(RpcServiceMethod* method, void* tag) { - sync_requests_.emplace_back(method, tag); + sync_requests_.emplace_back(new SyncRequest(method, tag)); } void AddUnknownSyncMethod() { if (!sync_requests_.empty()) { unknown_method_.reset(new RpcServiceMethod( "unknown", RpcMethod::BIDI_STREAMING, new UnknownMethodHandler)); - sync_requests_.emplace_back(unknown_method_.get(), nullptr); + sync_requests_.emplace_back( + new SyncRequest(unknown_method_.get(), nullptr)); } } @@ -328,11 +329,11 @@ class Server::SyncRequestThreadManager : public ThreadManager { void Start() { if (!sync_requests_.empty()) { for (auto m = sync_requests_.begin(); m != sync_requests_.end(); m++) { - m->SetupRequest(); - m->Request(server_->c_server(), server_cq_->cq()); + (*m)->SetupRequest(); + (*m)->Request(server_->c_server(), server_cq_->cq()); } - Initialize(); // ThreadManager's Initialize() + Initialize(); // ThreadManager's Initialize() } } @@ -340,7 +341,7 @@ class Server::SyncRequestThreadManager : public ThreadManager { Server* server_; CompletionQueue* server_cq_; int cq_timeout_msec_; - std::vector sync_requests_; + std::vector> sync_requests_; std::unique_ptr unknown_method_; std::shared_ptr global_callbacks_; }; @@ -440,7 +441,7 @@ bool Server::RegisterService(const grpc::string* host, Service* service) { return false; } - if (method->handler() == nullptr) { // Async method + if (method->handler() == nullptr) { // Async method method->set_server_tag(tag); } else { for (auto it = sync_req_mgrs_.begin(); it != sync_req_mgrs_.end(); it++) { @@ -513,7 +514,7 @@ void Server::ShutdownInternal(gpr_timespec deadline) { // 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() + (*it)->Shutdown(); // ThreadManager's Shutdown() } shutdown_cq.Shutdown(); From aff6936cf7500da3ebf7c2282160405fdf8ec36b Mon Sep 17 00:00:00 2001 From: Masood Malekghassemi Date: Wed, 21 Sep 2016 15:10:36 -0700 Subject: [PATCH 157/286] Partially implement gRPC Python server reflection Some features relating to proto2 extension querying are missing due to missing upstream features required to support them (see https://github.com/google/protobuf/issues/2248). --- src/proto/grpc/testing/proto2/empty2.proto | 37 ++++ .../testing/proto2/empty2_extensions.proto | 43 ++++ src/python/.gitignore | 2 + src/python/grpcio_reflection/.gitignore | 5 + src/python/grpcio_reflection/grpc/__init__.py | 30 +++ .../grpc/reflection/__init__.py | 29 +++ .../grpc/reflection/v1alpha/__init__.py | 29 +++ .../grpc/reflection/v1alpha/reflection.py | 143 ++++++++++++++ src/python/grpcio_reflection/grpc_version.py | 32 +++ .../grpcio_reflection/reflection_commands.py | 78 ++++++++ src/python/grpcio_reflection/setup.py | 73 +++++++ .../grpcio_tests/tests/reflection/__init__.py | 28 +++ .../reflection/_reflection_servicer_test.py | 185 ++++++++++++++++++ src/python/grpcio_tests/tests/tests.json | 37 ++-- .../grpc_version.py.template | 34 ++++ tools/run_tests/artifact_targets.py | 4 +- tools/run_tests/build_artifact_python.sh | 11 +- tools/run_tests/build_python.sh | 9 + 18 files changed, 786 insertions(+), 23 deletions(-) create mode 100644 src/proto/grpc/testing/proto2/empty2.proto create mode 100644 src/proto/grpc/testing/proto2/empty2_extensions.proto create mode 100644 src/python/grpcio_reflection/.gitignore create mode 100644 src/python/grpcio_reflection/grpc/__init__.py create mode 100644 src/python/grpcio_reflection/grpc/reflection/__init__.py create mode 100644 src/python/grpcio_reflection/grpc/reflection/v1alpha/__init__.py create mode 100644 src/python/grpcio_reflection/grpc/reflection/v1alpha/reflection.py create mode 100644 src/python/grpcio_reflection/grpc_version.py create mode 100644 src/python/grpcio_reflection/reflection_commands.py create mode 100644 src/python/grpcio_reflection/setup.py create mode 100644 src/python/grpcio_tests/tests/reflection/__init__.py create mode 100644 src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py create mode 100644 templates/src/python/grpcio_reflection/grpc_version.py.template diff --git a/src/proto/grpc/testing/proto2/empty2.proto b/src/proto/grpc/testing/proto2/empty2.proto new file mode 100644 index 00000000000..51f0fe28b1a --- /dev/null +++ b/src/proto/grpc/testing/proto2/empty2.proto @@ -0,0 +1,37 @@ + +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +package grpc.testing.proto2; + +message EmptyWithExtensions { + extensions 100 to 999; +} diff --git a/src/proto/grpc/testing/proto2/empty2_extensions.proto b/src/proto/grpc/testing/proto2/empty2_extensions.proto new file mode 100644 index 00000000000..0229fe3fbd5 --- /dev/null +++ b/src/proto/grpc/testing/proto2/empty2_extensions.proto @@ -0,0 +1,43 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +import "src/proto/grpc/testing/proto2/empty2.proto"; + +package grpc.testing.proto2; + +// Fill emptiness with music. +extend grpc.testing.proto2.EmptyWithExtensions { + optional int64 Deadmau5 = 124; + optional float Madeon = 125; + optional string AboveAndBeyond = 126; + optional bool Tycho = 127; + optional fixed64 Pendulum = 128; +} diff --git a/src/python/.gitignore b/src/python/.gitignore index f158efa4bf1..7b520579a08 100644 --- a/src/python/.gitignore +++ b/src/python/.gitignore @@ -1 +1,3 @@ gens/ +*_pb2.py +*_pb2_grpc.py diff --git a/src/python/grpcio_reflection/.gitignore b/src/python/grpcio_reflection/.gitignore new file mode 100644 index 00000000000..c0befdc8ead --- /dev/null +++ b/src/python/grpcio_reflection/.gitignore @@ -0,0 +1,5 @@ +*.proto +*_pb2.py +build/ +grpcio_reflection.egg-info/ +dist/ diff --git a/src/python/grpcio_reflection/grpc/__init__.py b/src/python/grpcio_reflection/grpc/__init__.py new file mode 100644 index 00000000000..70ac5edd483 --- /dev/null +++ b/src/python/grpcio_reflection/grpc/__init__.py @@ -0,0 +1,30 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +__import__('pkg_resources').declare_namespace(__name__) diff --git a/src/python/grpcio_reflection/grpc/reflection/__init__.py b/src/python/grpcio_reflection/grpc/reflection/__init__.py new file mode 100644 index 00000000000..d5ad73a74ab --- /dev/null +++ b/src/python/grpcio_reflection/grpc/reflection/__init__.py @@ -0,0 +1,29 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/src/python/grpcio_reflection/grpc/reflection/v1alpha/__init__.py b/src/python/grpcio_reflection/grpc/reflection/v1alpha/__init__.py new file mode 100644 index 00000000000..d5ad73a74ab --- /dev/null +++ b/src/python/grpcio_reflection/grpc/reflection/v1alpha/__init__.py @@ -0,0 +1,29 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/src/python/grpcio_reflection/grpc/reflection/v1alpha/reflection.py b/src/python/grpcio_reflection/grpc/reflection/v1alpha/reflection.py new file mode 100644 index 00000000000..3c399b0d799 --- /dev/null +++ b/src/python/grpcio_reflection/grpc/reflection/v1alpha/reflection.py @@ -0,0 +1,143 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Reference implementation for reflection in gRPC Python.""" + +import threading + +import grpc +from google.protobuf import descriptor_pb2 +from google.protobuf import descriptor_pool + +from grpc.reflection.v1alpha import reflection_pb2 + +_POOL = descriptor_pool.Default() + +def _not_found_error(): + return reflection_pb2.ServerReflectionResponse( + error_response=reflection_pb2.ErrorResponse( + error_code=grpc.StatusCode.NOT_FOUND.value[0], + error_message=grpc.StatusCode.NOT_FOUND.value[1].encode(), + ) + ) + +def _file_descriptor_response(descriptor): + proto = descriptor_pb2.FileDescriptorProto() + descriptor.CopyToProto(proto) + serialized_proto = proto.SerializeToString() + return reflection_pb2.ServerReflectionResponse( + file_descriptor_response=reflection_pb2.FileDescriptorResponse( + file_descriptor_proto=(serialized_proto,) + ), + ) + + +class ReflectionServicer(reflection_pb2.ServerReflectionServicer): + """Servicer handling RPCs for service statuses.""" + + def __init__(self, service_names, pool=None): + """Constructor. + + Args: + service_names: Iterable of fully-qualified service names available. + """ + self._service_names = list(service_names) + self._pool = _POOL if pool is None else pool + + def _file_by_filename(self, filename): + try: + descriptor = self._pool.FindFileByName(filename) + except KeyError: + return _not_found_error() + else: + return _file_descriptor_response(descriptor) + + def _file_containing_symbol(self, fully_qualified_name): + try: + descriptor = self._pool.FindFileContainingSymbol(fully_qualified_name) + except KeyError: + return _not_found_error() + else: + return _file_descriptor_response(descriptor) + + def _file_containing_extension(containing_type, extension_number): + # TODO(atash) Python protobuf currently doesn't support querying extensions. + # https://github.com/google/protobuf/issues/2248 + return reflection_pb2.ServerReflectionResponse( + error_response=reflection_pb2.ErrorResponse( + error_code=grpc.StatusCode.UNIMPLEMENTED.value[0], + error_message=grpc.StatusCode.UNIMPLMENTED.value[1].encode(), + ) + ) + + def _extension_numbers_of_type(fully_qualified_name): + # TODO(atash) We're allowed to leave this unsupported according to the + # protocol, but we should still eventually implement it. Hits the same issue + # as `_file_containing_extension`, however. + # https://github.com/google/protobuf/issues/2248 + return reflection_pb2.ServerReflectionResponse( + error_response=reflection_pb2.ErrorResponse( + error_code=grpc.StatusCode.UNIMPLEMENTED.value[0], + error_message=grpc.StatusCode.UNIMPLMENTED.value[1].encode(), + ) + ) + + def _list_services(self): + return reflection_pb2.ServerReflectionResponse( + list_services_response=reflection_pb2.ListServiceResponse( + service=[ + reflection_pb2.ServiceResponse(name=service_name) + for service_name in self._service_names + ] + ) + ) + + def ServerReflectionInfo(self, request_iterator, context): + for request in request_iterator: + if request.HasField('file_by_filename'): + yield self._file_by_filename(request.file_by_filename) + elif request.HasField('file_containing_symbol'): + yield self._file_containing_symbol(request.file_containing_symbol) + elif request.HasField('file_containing_extension'): + yield self._file_containing_extension( + request.file_containing_extension.containing_type, + request.file_containing_extension.extension_number) + elif request.HasField('all_extension_numbers_of_type'): + yield _all_extension_numbers_of_type( + request.all_extension_numbers_of_type) + elif request.HasField('list_services'): + yield self._list_services() + else: + yield reflection_pb2.ServerReflectionResponse( + error_response=reflection_pb2.ErrorResponse( + error_code=grpc.StatusCode.INVALID_ARGUMENT.value[0], + error_message=grpc.StatusCode.INVALID_ARGUMENT.value[1].encode(), + ) + ) + diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py new file mode 100644 index 00000000000..9b3c44c0221 --- /dev/null +++ b/src/python/grpcio_reflection/grpc_version.py @@ -0,0 +1,32 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!! + +VERSION='1.1.0.dev0' diff --git a/src/python/grpcio_reflection/reflection_commands.py b/src/python/grpcio_reflection/reflection_commands.py new file mode 100644 index 00000000000..d189aee5774 --- /dev/null +++ b/src/python/grpcio_reflection/reflection_commands.py @@ -0,0 +1,78 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Provides distutils command classes for the GRPC Python setup process.""" + +import os +import shutil + +import setuptools + +ROOT_DIR = os.path.abspath(os.path.dirname(os.path.abspath(__file__))) +HEALTH_PROTO = os.path.join(ROOT_DIR, '../../proto/grpc/reflection/v1alpha/reflection.proto') + + +class CopyProtoModules(setuptools.Command): + """Command to copy proto modules from grpc/src/proto.""" + + description = '' + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + if os.path.isfile(HEALTH_PROTO): + shutil.copyfile( + HEALTH_PROTO, + os.path.join(ROOT_DIR, 'grpc/reflection/v1alpha/reflection.proto')) + + +class BuildPackageProtos(setuptools.Command): + """Command to generate project *_pb2.py modules from proto files.""" + + description = 'build grpc protobuf modules' + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + # due to limitations of the proto generator, we require that only *one* + # directory is provided as an 'include' directory. We assume it's the '' key + # to `self.distribution.package_dir` (and get a key error if it's not + # there). + from grpc.tools import command + command.build_package_protos(self.distribution.package_dir['']) diff --git a/src/python/grpcio_reflection/setup.py b/src/python/grpcio_reflection/setup.py new file mode 100644 index 00000000000..df95af4de16 --- /dev/null +++ b/src/python/grpcio_reflection/setup.py @@ -0,0 +1,73 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Setup module for the GRPC Python package's optional reflection.""" + +import os +import sys + +import setuptools + +# Ensure we're in the proper directory whether or not we're being used by pip. +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +# Break import-style to ensure we can actually find our commands module. +import reflection_commands +import grpc_version + +PACKAGE_DIRECTORIES = { + '': '.', +} + +SETUP_REQUIRES = ( + 'grpcio-tools>={version}'.format(version=grpc_version.VERSION), +) + +INSTALL_REQUIRES = ( + 'protobuf>=3.0.0', + 'grpcio>={version}'.format(version=grpc_version.VERSION), +) + +COMMAND_CLASS = { + # Run preprocess from the repository *before* doing any packaging! + 'preprocess': reflection_commands.CopyProtoModules, + 'build_package_protos': reflection_commands.BuildPackageProtos, +} + +setuptools.setup( + name='grpcio-reflection', + version=grpc_version.VERSION, + license='3-clause BSD', + package_dir=PACKAGE_DIRECTORIES, + packages=setuptools.find_packages('.'), + namespace_packages=['grpc'], + install_requires=INSTALL_REQUIRES, + setup_requires=SETUP_REQUIRES, + cmdclass=COMMAND_CLASS +) diff --git a/src/python/grpcio_tests/tests/reflection/__init__.py b/src/python/grpcio_tests/tests/reflection/__init__.py new file mode 100644 index 00000000000..100a624dc9c --- /dev/null +++ b/src/python/grpcio_tests/tests/reflection/__init__.py @@ -0,0 +1,28 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py new file mode 100644 index 00000000000..87264cf9ba9 --- /dev/null +++ b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py @@ -0,0 +1,185 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests of grpc.reflection.v1alpha.reflection.""" + +import unittest + +import grpc +from grpc.framework.foundation import logging_pool +from grpc.reflection.v1alpha import reflection +from grpc.reflection.v1alpha import reflection_pb2 + +from google.protobuf import descriptor_pool +from google.protobuf import descriptor_pb2 + +from src.proto.grpc.testing.proto2 import empty2_extensions_pb2 +from src.proto.grpc.testing import empty_pb2 +from tests.unit.framework.common import test_constants + +_EMPTY_PROTO_FILE_NAME = 'src/proto/grpc/testing/empty.proto' +_EMPTY_PROTO_SYMBOL_NAME = 'grpc.testing.Empty' +_SERVICE_NAMES = ( + 'Angstrom', 'Bohr', 'Curie', 'Dyson', 'Einstein', 'Feynman', 'Galilei') + +def _file_descriptor_to_proto(descriptor): + proto = descriptor_pb2.FileDescriptorProto() + descriptor.CopyToProto(proto) + return proto.SerializeToString() + +class ReflectionServicerTest(unittest.TestCase): + + def setUp(self): + servicer = reflection.ReflectionServicer(service_names=_SERVICE_NAMES) + server_pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY) + self._server = grpc.server(server_pool) + port = self._server.add_insecure_port('[::]:0') + reflection_pb2.add_ServerReflectionServicer_to_server(servicer, self._server) + self._server.start() + + channel = grpc.insecure_channel('localhost:%d' % port) + self._stub = reflection_pb2.ServerReflectionStub(channel) + + def testFileByName(self): + requests = ( + reflection_pb2.ServerReflectionRequest( + file_by_filename=_EMPTY_PROTO_FILE_NAME + ), + reflection_pb2.ServerReflectionRequest( + file_by_filename='i-donut-exist' + ), + ) + responses = tuple(self._stub.ServerReflectionInfo(requests)) + expected_responses = ( + reflection_pb2.ServerReflectionResponse( + valid_host='', + file_descriptor_response=reflection_pb2.FileDescriptorResponse( + file_descriptor_proto=( + _file_descriptor_to_proto(empty_pb2.DESCRIPTOR), + ) + ) + ), + reflection_pb2.ServerReflectionResponse( + valid_host='', + error_response=reflection_pb2.ErrorResponse( + error_code=grpc.StatusCode.NOT_FOUND.value[0], + error_message=grpc.StatusCode.NOT_FOUND.value[1].encode(), + ) + ), + ) + self.assertEqual(expected_responses, responses) + + def testFileBySymbol(self): + requests = ( + reflection_pb2.ServerReflectionRequest( + file_containing_symbol=_EMPTY_PROTO_SYMBOL_NAME + ), + reflection_pb2.ServerReflectionRequest( + file_containing_symbol='i.donut.exist.co.uk.org.net.me.name.foo' + ), + ) + responses = tuple(self._stub.ServerReflectionInfo(requests)) + expected_responses = ( + reflection_pb2.ServerReflectionResponse( + valid_host='', + file_descriptor_response=reflection_pb2.FileDescriptorResponse( + file_descriptor_proto=( + _file_descriptor_to_proto(empty_pb2.DESCRIPTOR), + ) + ) + ), + reflection_pb2.ServerReflectionResponse( + valid_host='', + error_response=reflection_pb2.ErrorResponse( + error_code=grpc.StatusCode.NOT_FOUND.value[0], + error_message=grpc.StatusCode.NOT_FOUND.value[1].encode(), + ) + ), + ) + self.assertEqual(expected_responses, responses) + + @unittest.skip('TODO(atash): implement file-containing-extension reflection ' + '(see https://github.com/google/protobuf/issues/2248)') + def testFileContainingExtension(self): + requests = ( + reflection_pb2.ServerReflectionRequest( + file_containing_extension=reflection_pb2.ExtensionRequest( + containing_type='grpc.testing.proto2.Empty', + extension_number=125, + ), + ), + reflection_pb2.ServerReflectionRequest( + file_containing_extension=reflection_pb2.ExtensionRequest( + containing_type='i.donut.exist.co.uk.org.net.me.name.foo', + extension_number=55, + ), + ), + ) + responses = tuple(self._stub.ServerReflectionInfo(requests)) + expected_responses = ( + reflection_pb2.ServerReflectionResponse( + valid_host='', + file_descriptor_response=reflection_pb2.FileDescriptorResponse( + file_descriptor_proto=( + _file_descriptor_to_proto(empty_extensions_pb2.DESCRIPTOR), + ) + ) + ), + reflection_pb2.ServerReflectionResponse( + valid_host='', + error_response=reflection_pb2.ErrorResponse( + error_code=grpc.StatusCode.NOT_FOUND.value[0], + error_message=grpc.StatusCode.NOT_FOUND.value[1].encode(), + ) + ), + ) + self.assertEqual(expected_responses, responses) + + def testListServices(self): + requests = ( + reflection_pb2.ServerReflectionRequest( + list_services='', + ), + ) + responses = tuple(self._stub.ServerReflectionInfo(requests)) + expected_responses = ( + reflection_pb2.ServerReflectionResponse( + valid_host='', + list_services_response=reflection_pb2.ListServiceResponse( + service=tuple( + reflection_pb2.ServiceResponse(name=name) + for name in _SERVICE_NAMES + ) + ) + ), + ) + self.assertEqual(expected_responses, responses) + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/src/python/grpcio_tests/tests/tests.json b/src/python/grpcio_tests/tests/tests.json index 2071a33e13a..2e85f1f397b 100644 --- a/src/python/grpcio_tests/tests/tests.json +++ b/src/python/grpcio_tests/tests/tests.json @@ -4,41 +4,42 @@ "_api_test.ChannelTest", "_auth_test.AccessTokenCallCredentialsTest", "_auth_test.GoogleCallCredentialsTest", - "_beta_features_test.BetaFeaturesTest", - "_beta_features_test.ContextManagementAndLifecycleTest", + "_beta_features_test.BetaFeaturesTest", + "_beta_features_test.ContextManagementAndLifecycleTest", "_cancel_many_calls_test.CancelManyCallsTest", "_channel_args_test.ChannelArgsTest", "_channel_connectivity_test.ChannelConnectivityTest", "_channel_ready_future_test.ChannelReadyFutureTest", - "_channel_test.ChannelTest", + "_channel_test.ChannelTest", "_compression_test.CompressionTest", "_connectivity_channel_test.ConnectivityStatesTest", "_credentials_test.CredentialsTest", "_empty_message_test.EmptyMessageTest", "_exit_test.ExitTest", - "_face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", - "_face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", - "_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", - "_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", - "_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", + "_face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", + "_face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", + "_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", + "_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", + "_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", "_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", "_health_servicer_test.HealthServicerTest", "_implementations_test.CallCredentialsTest", - "_implementations_test.ChannelCredentialsTest", - "_insecure_interop_test.InsecureInteropTest", - "_logging_pool_test.LoggingPoolTest", + "_implementations_test.ChannelCredentialsTest", + "_insecure_interop_test.InsecureInteropTest", + "_logging_pool_test.LoggingPoolTest", "_metadata_code_details_test.MetadataCodeDetailsTest", "_metadata_test.MetadataTest", - "_not_found_test.NotFoundTest", + "_not_found_test.NotFoundTest", "_python_plugin_test.PythonPluginTest", "_read_some_but_not_all_responses_test.ReadSomeButNotAllResponsesTest", + "_reflection_servicer_test.ReflectionServicerTest", "_rpc_test.RPCTest", - "_sanity_test.Sanity", - "_secure_interop_test.SecureInteropTest", + "_sanity_test.Sanity", + "_secure_interop_test.SecureInteropTest", "_thread_cleanup_test.CleanupThreadTest", - "_utilities_test.ChannelConnectivityTest", - "beta_python_plugin_test.PythonPluginTest", - "cygrpc_test.InsecureServerInsecureClient", - "cygrpc_test.SecureServerSecureClient", + "_utilities_test.ChannelConnectivityTest", + "beta_python_plugin_test.PythonPluginTest", + "cygrpc_test.InsecureServerInsecureClient", + "cygrpc_test.SecureServerSecureClient", "cygrpc_test.TypeSmokeTest" ] diff --git a/templates/src/python/grpcio_reflection/grpc_version.py.template b/templates/src/python/grpcio_reflection/grpc_version.py.template new file mode 100644 index 00000000000..3e84201f5bc --- /dev/null +++ b/templates/src/python/grpcio_reflection/grpc_version.py.template @@ -0,0 +1,34 @@ +%YAML 1.2 +--- | + # Copyright 2016, Google Inc. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are + # met: + # + # * Redistributions of source code must retain the above copyright + # notice, this list of conditions and the following disclaimer. + # * Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following disclaimer + # in the documentation and/or other materials provided with the + # distribution. + # * Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!! + + VERSION='${settings.python_version.pep440()}' diff --git a/tools/run_tests/artifact_targets.py b/tools/run_tests/artifact_targets.py index d36f963a7c6..65d34e17e1c 100644 --- a/tools/run_tests/artifact_targets.py +++ b/tools/run_tests/artifact_targets.py @@ -109,8 +109,8 @@ class PythonArtifact: # TODO(atash) get better platform-detection support in core so we don't # need to do this manually... environ['CFLAGS'] = '-DGPR_MANYLINUX1=1' - environ['BUILD_HEALTH_CHECKING'] = 'TRUE' - environ['BUILD_MANYLINUX_WHEEL'] = 'TRUE' + environ['GRPC_BUILD_GRPCIO_TOOLS_DEPENDENTS'] = 'TRUE' + environ['GRPC_BUILD_MANYLINUX_WHEEL'] = 'TRUE' return create_docker_jobspec(self.name, 'tools/dockerfile/grpc_artifact_python_manylinux_%s' % self.arch, 'tools/run_tests/build_artifact_python.sh', diff --git a/tools/run_tests/build_artifact_python.sh b/tools/run_tests/build_artifact_python.sh index 9fed7c5028a..2a1d41fd686 100755 --- a/tools/run_tests/build_artifact_python.sh +++ b/tools/run_tests/build_artifact_python.sh @@ -66,7 +66,7 @@ ${SETARCH_CMD} ${PYTHON} tools/distrib/python/grpcio_tools/setup.py sdist # Build gRPC tools package binary distribution ${SETARCH_CMD} ${PYTHON} tools/distrib/python/grpcio_tools/setup.py bdist_wheel -if [ "$BUILD_MANYLINUX_WHEEL" != "" ] +if [ "$GRPC_BUILD_MANYLINUX_WHEEL" != "" ] then for wheel in dist/*.whl; do ${AUDITWHEEL} repair $wheel -w "$ARTIFACT_DIR" @@ -82,16 +82,21 @@ fi # Wheels are not supported by setup_requires/dependency_links, so we # manually install the dependency. Note we should only do this if we # are in a docker image or in a virtualenv. -if [ "$BUILD_HEALTH_CHECKING" != "" ] +if [ "$GRPC_BUILD_GRPCIO_TOOLS_DEPENDENTS" != "" ] then ${PIP} install -rrequirements.txt ${PIP} install grpcio --no-index --find-links "file://$ARTIFACT_DIR/" ${PIP} install grpcio-tools --no-index --find-links "file://$ARTIFACT_DIR/" - # Build gRPC health check source distribution + # Build gRPC health-checking source distribution ${SETARCH_CMD} ${PYTHON} src/python/grpcio_health_checking/setup.py \ preprocess build_package_protos sdist cp -r src/python/grpcio_health_checking/dist/* "$ARTIFACT_DIR" + + # Build gRPC reflection source distribution + ${SETARCH_CMD} ${PYTHON} src/python/grpcio_reflection/setup.py \ + preprocess build_package_protos sdist + cp -r src/python/grpcio_reflection/dist/* "$ARTIFACT_DIR" fi cp -r dist/* "$ARTIFACT_DIR" diff --git a/tools/run_tests/build_python.sh b/tools/run_tests/build_python.sh index b786c479f36..cc74996fad8 100755 --- a/tools/run_tests/build_python.sh +++ b/tools/run_tests/build_python.sh @@ -166,9 +166,18 @@ pip_install_dir $ROOT/tools/distrib/python/grpcio_tools # TODO(atash) figure out namespace packages and grpcio-tools and auditwheel # etc... pip_install_dir $ROOT + +# Build/install health checking $VENV_PYTHON $ROOT/src/python/grpcio_health_checking/setup.py preprocess $VENV_PYTHON $ROOT/src/python/grpcio_health_checking/setup.py build_package_protos pip_install_dir $ROOT/src/python/grpcio_health_checking + +# Build/install reflection +$VENV_PYTHON $ROOT/src/python/grpcio_reflection/setup.py preprocess +$VENV_PYTHON $ROOT/src/python/grpcio_reflection/setup.py build_package_protos +pip_install_dir $ROOT/src/python/grpcio_reflection + +# Build/install tests $VENV_PYTHON $ROOT/src/python/grpcio_tests/setup.py preprocess $VENV_PYTHON $ROOT/src/python/grpcio_tests/setup.py build_package_protos pip_install_dir $ROOT/src/python/grpcio_tests From 544c23adea011adde63423ac1975b7a6340da3c2 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Thu, 20 Oct 2016 15:34:16 -0700 Subject: [PATCH 158/286] Reverts PR #8426 --- .../Sample/Sample.xcodeproj/project.pbxproj | 12 +++------ .../xcshareddata/xcschemes/Sample.xcscheme | 2 +- .../SwiftSample.xcodeproj/project.pbxproj | 18 ++++--------- .../xcschemes/SwiftSample.xcscheme | 2 +- .../examples/SwiftSample/ViewController.swift | 25 ++++++++++--------- src/objective-c/tests/Info.plist | 2 +- .../tests/Tests.xcodeproj/project.pbxproj | 13 +++------- .../xcshareddata/xcschemes/AllTests.xcscheme | 2 +- .../InteropTestsLocalCleartext.xcscheme | 2 +- .../xcschemes/InteropTestsLocalSSL.xcscheme | 2 +- .../xcschemes/InteropTestsRemote.xcscheme | 2 +- .../xcschemes/RxLibraryUnitTests.xcscheme | 2 +- 12 files changed, 32 insertions(+), 52 deletions(-) diff --git a/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj b/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj index 8d34b26c4fc..ab7159cda2f 100644 --- a/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj +++ b/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 48; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ @@ -129,7 +129,7 @@ 6369A2621A9322E20015FC5C /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0730; ORGANIZATIONNAME = gRPC; TargetAttributes = { 6369A2691A9322E20015FC5C = { @@ -138,7 +138,7 @@ }; }; buildConfigurationList = 6369A2651A9322E20015FC5C /* Build configuration list for PBXProject "Sample" */; - compatibilityVersion = "Xcode 8.0"; + compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -253,10 +253,8 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -265,7 +263,6 @@ ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -299,10 +296,8 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -310,7 +305,6 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; diff --git a/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme b/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme index 881474b111c..d399e22e460 100644 --- a/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme +++ b/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme @@ -1,6 +1,6 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) + gRPC.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj index 75adc6a040d..f9389a4977f 100644 --- a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj +++ b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 48; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ @@ -400,7 +400,7 @@ 635697BF1B14FC11007A7283 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0630; ORGANIZATIONNAME = gRPC; TargetAttributes = { 63423F431B150A5F006CF63C = { @@ -424,7 +424,7 @@ }; }; buildConfigurationList = 635697C21B14FC11007A7283 /* Build configuration list for PBXProject "Tests" */; - compatibilityVersion = "Xcode 8.0"; + compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -846,7 +846,6 @@ ); INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "gRPC.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -861,7 +860,6 @@ ); INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "gRPC.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -879,16 +877,13 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -925,10 +920,8 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme index 740a1c0672d..d1d616c4cf2 100644 --- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme +++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme @@ -1,6 +1,6 @@ Date: Thu, 20 Oct 2016 15:53:53 -0700 Subject: [PATCH 159/286] Clang format --- src/core/lib/iomgr/workqueue_uv.c | 4 ++-- test/core/iomgr/wakeup_fd_cv_test.c | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/core/lib/iomgr/workqueue_uv.c b/src/core/lib/iomgr/workqueue_uv.c index 914143c081c..e58ca476ccc 100644 --- a/src/core/lib/iomgr/workqueue_uv.c +++ b/src/core/lib/iomgr/workqueue_uv.c @@ -45,8 +45,8 @@ void grpc_workqueue_flush(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {} #ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG -grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file, int line, - const char *reason) { +grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file, + int line, const char *reason) { return workqueue; } void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue, diff --git a/test/core/iomgr/wakeup_fd_cv_test.c b/test/core/iomgr/wakeup_fd_cv_test.c index 96e4a317418..82452d2157e 100644 --- a/test/core/iomgr/wakeup_fd_cv_test.c +++ b/test/core/iomgr/wakeup_fd_cv_test.c @@ -245,8 +245,6 @@ int main(int argc, char **argv) { #else /* GRPC_POSIX_SOCKET */ -int main(int argc, char **argv) { - return 1; -} +int main(int argc, char **argv) { return 1; } #endif /* GRPC_POSIX_SOCKET */ From 18d5fa5ebd46da901b0d6c65a52753bc720d8102 Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Wed, 5 Oct 2016 11:42:55 -0700 Subject: [PATCH 160/286] Create filter for pull request tests --- tools/run_tests/filter_pull_request_tests.py | 95 ++++++++++++++++++++ tools/run_tests/run_tests_matrix.py | 18 ++++ 2 files changed, 113 insertions(+) create mode 100644 tools/run_tests/filter_pull_request_tests.py diff --git a/tools/run_tests/filter_pull_request_tests.py b/tools/run_tests/filter_pull_request_tests.py new file mode 100644 index 00000000000..6cc06d9c409 --- /dev/null +++ b/tools/run_tests/filter_pull_request_tests.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python2.7 +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Filter out tests based on file differences compared to grpc:master""" + +from subprocess import call, check_output + +# triggers to skip c++ tests +run_cpp_starts_with_triggers = ('src/core', + 'src/cpp', + 'test/core', + 'test/cpp') + + +def _get_changed_files(): + """ + Get list of changed files between current branch and gRPC master branch + """ + # git fetch might need to be called on Jenkins slave + # todo(mattkwong): remove or uncomment below after seeing if Jenkins needs this + # call(['git', 'fetch']) + # this also collects files that are changed in the repo but not updated in the branch + return check_output(["git", "diff", "--name-only", "..origin/master"]).split() + + +def _can_skip_tests(file_names, starts_with_triggers=(), ends_with_triggers=()): + """ + Determines if tests are skippable based on if all file names do not match + any begin or end triggers + :param file_names: list of changed files generated by _get_changed_files() + :param starts_with_triggers: tuple of strings to match with beginning of file names + :param ends_with_triggers: tuple of strings to match with end of file names + :return: safe to skip tests + """ + for file_name in file_names: + if starts_with_triggers and file_name.startswith(starts_with_triggers) or \ + ends_with_triggers and file_name.endswith(ends_with_triggers): + return False + return True + + +def _remove_irrelevant_tests(tests, tag): + """ + Filters out tests by config or language + :param tests: list of all tests generated by run_tests_matrix.py + :param tag: string representing language or config to filter - "_(language)_" or "_(config)" + :return: list of relevant tests + """ + return [test for test in tests if not tag in test.shortname] + + +def filter_tests(tests): + """ + Filters out tests that are safe to ignore + :param tests: list of all tests generated by run_tests_matrix.py + :return: list of relevant tests + """ + print("Finding file differences between grpc:master repo and pull request...") + changed_files = _get_changed_files() + for changed_file in changed_files: + print(changed_file) + # C++, tsan, msan, and asan have the same filter + if _can_skip_tests(changed_files, starts_with_triggers=run_cpp_starts_with_triggers): + tests = _remove_irrelevant_tests(tests, '_c++_') # filter out c++ tests + tests = _remove_irrelevant_tests(tests, '_tsan') # filter out tsan tests + tests = _remove_irrelevant_tests(tests, '_msan') # filter out msan tests + tests = _remove_irrelevant_tests(tests, '_asan') # filter out asan tests + return tests diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index 60c21a1e218..235bd162be0 100755 --- a/tools/run_tests/run_tests_matrix.py +++ b/tools/run_tests/run_tests_matrix.py @@ -36,6 +36,7 @@ import multiprocessing import os import report_utils import sys +from filter_pull_request_tests import filter_tests _ROOT = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '../..')) os.chdir(_ROOT) @@ -231,6 +232,11 @@ argp.add_argument('--dry_run', action='store_const', const=True, help='Only print what would be run.') +argp.add_argument('--filter_pr_tests', + default=False, + action='store_const', + const=True, + help='Filters out tests irrelavant to pull request changes.') args = argp.parse_args() extra_args = [] @@ -264,6 +270,18 @@ for job in jobs: print ' %s' % job.shortname print +if args.filter_pr_tests: + print 'IMPORTANT: Test filtering is not active; this is only for testing.' + relevant_jobs = filter_tests(jobs) + print + if len(relevant_jobs) == len(jobs): + print 'No tests were filtered.' + else: + print 'These tests were filtered:' + for job in list(set(jobs) - set(relevant_jobs)): + print ' %s' % job.shortname + print + if args.dry_run: print '--dry_run was used, exiting' sys.exit(1) From 44920d2cc601ccbc7f515fbbce13dd27565c8b77 Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Thu, 6 Oct 2016 18:18:11 -0700 Subject: [PATCH 161/286] Fixed some changes --- tools/run_tests/filter_pull_request_tests.py | 170 +++++++++++++++++-- 1 file changed, 153 insertions(+), 17 deletions(-) diff --git a/tools/run_tests/filter_pull_request_tests.py b/tools/run_tests/filter_pull_request_tests.py index 6cc06d9c409..fe8b8ed0f35 100644 --- a/tools/run_tests/filter_pull_request_tests.py +++ b/tools/run_tests/filter_pull_request_tests.py @@ -28,29 +28,101 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -"""Filter out tests based on file differences compared to grpc:master""" +"""Filter out tests based on file differences compared to merge target branch""" from subprocess import call, check_output -# triggers to skip c++ tests -run_cpp_starts_with_triggers = ('src/core', - 'src/cpp', - 'test/core', - 'test/cpp') +# Whitelist for all tests +# Update all instances in corresponding trigger lists when modifying this +starts_with_whitelist = ['templates/', + 'doc/', + 'examples/', + 'summerofcode/', + 'src/cpp', + 'src/csharp', + 'src/node', + 'src/objective-c', + 'src/php', + 'src/python', + 'src/ruby', + 'test/core', + 'test/cpp', + 'test/distrib/cpp', + 'test/distrib/csharp', + 'test/distrib/node', + 'test/distrib/php', + 'test/distrib/python', + 'test/distrib/ruby'] + +ends_with_whitelist = ['README.md', + 'LICENSE'] + +# Triggers for core tests +core_starts_with_triggers = ['test/core'] + +# Triggers for c++ tests +cpp_starts_with_triggers = ['src/cpp', + 'test/cpp', + 'test/distrib/cpp'] + +# Triggers for c# tests +csharp_starts_with_triggers = ['src/csharp', + 'test/distrib/csharp'] + +# Triggers for node tests +node_starts_with_triggers = ['src/node', + 'test/distrib/node'] + +# Triggers for objective-c tests +objc_starts_with_triggers = ['src/objective-c'] + +# Triggers for php tests +php_starts_with_triggers = ['src/php', + 'test/distrib/php'] + +# Triggers for python tests +python_starts_with_triggers = ['src/python', + 'test/distrib/python'] + +# Triggers for ruby tests +ruby_starts_with_triggers = ['src/ruby', + 'test/distrib/ruby'] + + +def _filter_whitelist(whitelist, triggers): + """ + Removes triggers from whitelist + :param whitelist: list to remove values from + :param triggers: list of values to remove from whitelist + :return: filtered whitelist + """ + filtered_whitelist = list(whitelist) + for trigger in triggers: + if trigger in filtered_whitelist: + filtered_whitelist.remove(trigger) + else: + """ + If the trigger is not found in the whitelist, then there is likely + a mistake in the whitelist or trigger list, which needs to be addressed + to not wrongly skip tests + """ + print("ERROR: '%s' trigger not in whitelist. Please fix this!" % trigger) + return filtered_whitelist def _get_changed_files(): """ - Get list of changed files between current branch and gRPC master branch + Get list of changed files between current branch and base of target merge branch """ # git fetch might need to be called on Jenkins slave # todo(mattkwong): remove or uncomment below after seeing if Jenkins needs this # call(['git', 'fetch']) # this also collects files that are changed in the repo but not updated in the branch - return check_output(["git", "diff", "--name-only", "..origin/master"]).split() + # todo(mattkwong): change this to only collect changes files compared to base and not hardcode branch + return check_output(["git", "diff", "--name-only", "..origin/master"]).splitlines() -def _can_skip_tests(file_names, starts_with_triggers=(), ends_with_triggers=()): +def _can_skip_tests(file_names, starts_with_whitelist=[], ends_with_whitelist=[]): """ Determines if tests are skippable based on if all file names do not match any begin or end triggers @@ -59,9 +131,13 @@ def _can_skip_tests(file_names, starts_with_triggers=(), ends_with_triggers=()): :param ends_with_triggers: tuple of strings to match with end of file names :return: safe to skip tests """ + # convert lists to tuple to pass into str.startswith() and str.endswith() + starts_with_whitelist = tuple(starts_with_whitelist) + ends_with_whitelist = tuple(ends_with_whitelist) + print (starts_with_whitelist) for file_name in file_names: - if starts_with_triggers and file_name.startswith(starts_with_triggers) or \ - ends_with_triggers and file_name.endswith(ends_with_triggers): + if starts_with_whitelist and not file_name.startswith(starts_with_whitelist) and \ + ends_with_whitelist and not file_name.endswith(ends_with_whitelist): return False return True @@ -73,6 +149,7 @@ def _remove_irrelevant_tests(tests, tag): :param tag: string representing language or config to filter - "_(language)_" or "_(config)" :return: list of relevant tests """ + # todo(mattkwong): find a more reliable way to filter tests - don't use shortname return [test for test in tests if not tag in test.shortname] @@ -86,10 +163,69 @@ def filter_tests(tests): changed_files = _get_changed_files() for changed_file in changed_files: print(changed_file) - # C++, tsan, msan, and asan have the same filter - if _can_skip_tests(changed_files, starts_with_triggers=run_cpp_starts_with_triggers): - tests = _remove_irrelevant_tests(tests, '_c++_') # filter out c++ tests - tests = _remove_irrelevant_tests(tests, '_tsan') # filter out tsan tests - tests = _remove_irrelevant_tests(tests, '_msan') # filter out msan tests - tests = _remove_irrelevant_tests(tests, '_asan') # filter out asan tests + + changed_files = ['src/ruby/dgf'] + + # Filter core tests + skip_core = _can_skip_tests(changed_files, + starts_with_whitelist=_filter_whitelist(starts_with_whitelist, core_starts_with_triggers), + ends_with_whitelist=ends_with_whitelist) + if skip_core: + tests = _remove_irrelevant_tests(tests, '_c_') + + # Filter c++ tests + skip_cpp = _can_skip_tests(changed_files, + starts_with_whitelist=_filter_whitelist(starts_with_whitelist, cpp_starts_with_triggers), + ends_with_whitelist=ends_with_whitelist) + if skip_cpp: + tests = _remove_irrelevant_tests(tests, '_cpp_') + + # Tsan, msan, and asan tests skipped if core and c++ are skipped + if skip_core and skip_cpp: + tests = _remove_irrelevant_tests(tests, '_tsan') + tests = _remove_irrelevant_tests(tests, '_msan') + tests = _remove_irrelevant_tests(tests, '_asan') + + # Filter c# tests + skip_csharp = _can_skip_tests(changed_files, + starts_with_whitelist=_filter_whitelist(starts_with_whitelist, csharp_starts_with_triggers), + ends_with_whitelist=ends_with_whitelist) + if skip_csharp: + tests = _remove_irrelevant_tests(tests, '_csharp_') + + # Filter node tests + skip_node = _can_skip_tests(changed_files, + starts_with_whitelist=_filter_whitelist(starts_with_whitelist, node_starts_with_triggers), + ends_with_whitelist=ends_with_whitelist) + if skip_node: + tests = _remove_irrelevant_tests(tests, '_node_') + + # Filter objc tests + skip_objc = _can_skip_tests(changed_files, + starts_with_whitelist=_filter_whitelist(starts_with_whitelist, objc_starts_with_triggers), + ends_with_whitelist=ends_with_whitelist) + if skip_objc: + tests = _remove_irrelevant_tests(tests, '_objc_') + + # Filter php tests + skip_php = _can_skip_tests(changed_files, + starts_with_whitelist=_filter_whitelist(starts_with_whitelist, php_starts_with_triggers), + ends_with_whitelist=ends_with_whitelist) + if skip_php: + tests = _remove_irrelevant_tests(tests, '_php_') + + # Filter python tests + skip_python = _can_skip_tests(changed_files, + starts_with_whitelist=_filter_whitelist(starts_with_whitelist, python_starts_with_triggers), + ends_with_whitelist=ends_with_whitelist) + if skip_python: + tests = _remove_irrelevant_tests(tests, '_python_') + + # Filter ruby tests + skip_ruby = _can_skip_tests(changed_files, + starts_with_whitelist=_filter_whitelist(starts_with_whitelist, ruby_starts_with_triggers), + ends_with_whitelist=ends_with_whitelist) + if skip_ruby: + tests = _remove_irrelevant_tests(tests, '_ruby_') + return tests From 0f546b6f32f4751b7231ee455e92a423005a6bc2 Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Fri, 7 Oct 2016 15:25:56 -0700 Subject: [PATCH 162/286] changed filter to be more conservative - any no-whitelisted file runs all tests --- tools/run_tests/filter_pull_request_tests.py | 58 ++++++++++++++------ tools/run_tests/run_tests_matrix.py | 10 +++- 2 files changed, 47 insertions(+), 21 deletions(-) diff --git a/tools/run_tests/filter_pull_request_tests.py b/tools/run_tests/filter_pull_request_tests.py index fe8b8ed0f35..29dbd978251 100644 --- a/tools/run_tests/filter_pull_request_tests.py +++ b/tools/run_tests/filter_pull_request_tests.py @@ -33,7 +33,8 @@ from subprocess import call, check_output # Whitelist for all tests -# Update all instances in corresponding trigger lists when modifying this +# If whitelist item should only trigger some tests, the item should be +# added to this list and the trigger list of tests that should be run starts_with_whitelist = ['templates/', 'doc/', 'examples/', @@ -110,16 +111,18 @@ def _filter_whitelist(whitelist, triggers): return filtered_whitelist -def _get_changed_files(): +def _get_changed_files(base_branch): """ Get list of changed files between current branch and base of target merge branch """ # git fetch might need to be called on Jenkins slave # todo(mattkwong): remove or uncomment below after seeing if Jenkins needs this # call(['git', 'fetch']) - # this also collects files that are changed in the repo but not updated in the branch - # todo(mattkwong): change this to only collect changes files compared to base and not hardcode branch - return check_output(["git", "diff", "--name-only", "..origin/master"]).splitlines() + + # get file changes between branch and merge-base of specified branch + # not combined to be Windows friendly + base_commit = check_output(["git", "merge-base", base_branch, "HEAD"]).rstrip() + return check_output(["git", "diff", base_commit, "--name-only"]).splitlines() def _can_skip_tests(file_names, starts_with_whitelist=[], ends_with_whitelist=[]): @@ -134,7 +137,6 @@ def _can_skip_tests(file_names, starts_with_whitelist=[], ends_with_whitelist=[] # convert lists to tuple to pass into str.startswith() and str.endswith() starts_with_whitelist = tuple(starts_with_whitelist) ends_with_whitelist = tuple(ends_with_whitelist) - print (starts_with_whitelist) for file_name in file_names: if starts_with_whitelist and not file_name.startswith(starts_with_whitelist) and \ ends_with_whitelist and not file_name.endswith(ends_with_whitelist): @@ -144,28 +146,48 @@ def _can_skip_tests(file_names, starts_with_whitelist=[], ends_with_whitelist=[] def _remove_irrelevant_tests(tests, tag): """ - Filters out tests by config or language + Filters out tests by config or language - will not remove sanitizer tests :param tests: list of all tests generated by run_tests_matrix.py :param tag: string representing language or config to filter - "_(language)_" or "_(config)" :return: list of relevant tests """ # todo(mattkwong): find a more reliable way to filter tests - don't use shortname - return [test for test in tests if not tag in test.shortname] + return [test for test in tests if + tag not in test.shortname or + '_msan' in test.shortname or + '_asan' in test.shortname or + '_tsan' in test.shortname] -def filter_tests(tests): +def _remove_irrelevant_sanitizer_tests(tests, language_tag=""): + """ + Filters out sanitizer tests - can specify a language to filter - this should be c++ only + :param tests: list of all tests generated by run_tests_matrix.py + :param language_tag: string specifying a language from which to filter sanitizer tests - "_(language)_" + :return: list of relevant tests + """ + if language_tag: + return [test for test in tests if not language_tag in test.shortname and + not '_asan' in test.shortname and + not '_msan' in test.shortname and + not '_tsan' in test.shortname] + else: + return [test for test in tests if + '_asan' not in test.shortname and + '_msan' not in test.shortname and + '_tsan' not in test.shortname] + +def filter_tests(tests, base_branch): """ Filters out tests that are safe to ignore :param tests: list of all tests generated by run_tests_matrix.py :return: list of relevant tests """ - print("Finding file differences between grpc:master repo and pull request...") - changed_files = _get_changed_files() + print("Finding file differences between %s repo and current branch..." % base_branch) + changed_files = _get_changed_files(base_branch) for changed_file in changed_files: print(changed_file) - changed_files = ['src/ruby/dgf'] - # Filter core tests skip_core = _can_skip_tests(changed_files, starts_with_whitelist=_filter_whitelist(starts_with_whitelist, core_starts_with_triggers), @@ -178,13 +200,12 @@ def filter_tests(tests): starts_with_whitelist=_filter_whitelist(starts_with_whitelist, cpp_starts_with_triggers), ends_with_whitelist=ends_with_whitelist) if skip_cpp: - tests = _remove_irrelevant_tests(tests, '_cpp_') + tests = _remove_irrelevant_tests(tests, '_c++_') + tests = _remove_irrelevant_sanitizer_tests(tests, language_tag='_c++_') - # Tsan, msan, and asan tests skipped if core and c++ are skipped + # Sanitizer tests skipped if core and c++ are skipped if skip_core and skip_cpp: - tests = _remove_irrelevant_tests(tests, '_tsan') - tests = _remove_irrelevant_tests(tests, '_msan') - tests = _remove_irrelevant_tests(tests, '_asan') + tests = _remove_irrelevant_sanitizer_tests(tests) # Filter c# tests skip_csharp = _can_skip_tests(changed_files, @@ -213,6 +234,7 @@ def filter_tests(tests): ends_with_whitelist=ends_with_whitelist) if skip_php: tests = _remove_irrelevant_tests(tests, '_php_') + tests = _remove_irrelevant_tests(tests, '_php7_') # Filter python tests skip_python = _can_skip_tests(changed_files, diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index 235bd162be0..7548f6d90d9 100755 --- a/tools/run_tests/run_tests_matrix.py +++ b/tools/run_tests/run_tests_matrix.py @@ -237,6 +237,10 @@ argp.add_argument('--filter_pr_tests', action='store_const', const=True, help='Filters out tests irrelavant to pull request changes.') +argp.add_argument('--base_branch', + default='origin/master', + type=str, + help='Branch that pull request is requesting to merge into') args = argp.parse_args() extra_args = [] @@ -272,12 +276,12 @@ print if args.filter_pr_tests: print 'IMPORTANT: Test filtering is not active; this is only for testing.' - relevant_jobs = filter_tests(jobs) + relevant_jobs = filter_tests(jobs, args.base_branch) print if len(relevant_jobs) == len(jobs): - print 'No tests were filtered.' + print '(TESTING) No tests will be skipped.' else: - print 'These tests were filtered:' + print '(TESTING) These tests will be skipped:' for job in list(set(jobs) - set(relevant_jobs)): print ' %s' % job.shortname print From 3020bb792cf84122ddfbbdaf9ab5f222ad7d0dad Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Wed, 12 Oct 2016 18:24:53 -0700 Subject: [PATCH 163/286] Made whitelisting files easier and more intuitive --- tools/run_tests/filter_pull_request_tests.py | 265 +++++++------------ tools/run_tests/run_tests_matrix.py | 1 + 2 files changed, 99 insertions(+), 167 deletions(-) diff --git a/tools/run_tests/filter_pull_request_tests.py b/tools/run_tests/filter_pull_request_tests.py index 29dbd978251..55dab42f8a7 100644 --- a/tools/run_tests/filter_pull_request_tests.py +++ b/tools/run_tests/filter_pull_request_tests.py @@ -30,85 +30,76 @@ """Filter out tests based on file differences compared to merge target branch""" +import re from subprocess import call, check_output -# Whitelist for all tests -# If whitelist item should only trigger some tests, the item should be -# added to this list and the trigger list of tests that should be run -starts_with_whitelist = ['templates/', - 'doc/', - 'examples/', - 'summerofcode/', - 'src/cpp', - 'src/csharp', - 'src/node', - 'src/objective-c', - 'src/php', - 'src/python', - 'src/ruby', - 'test/core', - 'test/cpp', - 'test/distrib/cpp', - 'test/distrib/csharp', - 'test/distrib/node', - 'test/distrib/php', - 'test/distrib/python', - 'test/distrib/ruby'] - -ends_with_whitelist = ['README.md', - 'LICENSE'] - -# Triggers for core tests -core_starts_with_triggers = ['test/core'] - -# Triggers for c++ tests -cpp_starts_with_triggers = ['src/cpp', - 'test/cpp', - 'test/distrib/cpp'] - -# Triggers for c# tests -csharp_starts_with_triggers = ['src/csharp', - 'test/distrib/csharp'] - -# Triggers for node tests -node_starts_with_triggers = ['src/node', - 'test/distrib/node'] - -# Triggers for objective-c tests -objc_starts_with_triggers = ['src/objective-c'] - -# Triggers for php tests -php_starts_with_triggers = ['src/php', - 'test/distrib/php'] - -# Triggers for python tests -python_starts_with_triggers = ['src/python', - 'test/distrib/python'] - -# Triggers for ruby tests -ruby_starts_with_triggers = ['src/ruby', - 'test/distrib/ruby'] - - -def _filter_whitelist(whitelist, triggers): + +class TestSuite: """ - Removes triggers from whitelist - :param whitelist: list to remove values from - :param triggers: list of values to remove from whitelist - :return: filtered whitelist + Contains tag to identify job as belonging to this test suite and + triggers to identify if changed files are relevant """ - filtered_whitelist = list(whitelist) - for trigger in triggers: - if trigger in filtered_whitelist: - filtered_whitelist.remove(trigger) - else: - """ - If the trigger is not found in the whitelist, then there is likely - a mistake in the whitelist or trigger list, which needs to be addressed - to not wrongly skip tests - """ - print("ERROR: '%s' trigger not in whitelist. Please fix this!" % trigger) - return filtered_whitelist + def __init__(self, tags): + """ + Build TestSuite to group tests by their tags + :param tag: string used to identify if a job belongs to this TestSuite + todo(mattkwong): Change the use of tag because do not want to depend on + job.shortname to identify what suite a test belongs to + """ + self.triggers = [] + self.tags = tags + + def add_trigger(self, trigger): + """ + Add a regex to list of triggers that determine if a changed file should run tests + :param trigger: regex matching file relevant to tests + """ + self.triggers.append(trigger) + +# Create test suites +_core_test_suite = TestSuite(['_c_']) +_cpp_test_suite = TestSuite(['_c++_']) +_csharp_test_suite = TestSuite(['_csharp_']) +_node_test_suite = TestSuite(['_node_']) +_objc_test_suite = TestSuite(['_objc_']) +_php_test_suite = TestSuite(['_php_', '_php7_']) +_python_test_suite = TestSuite(['_python_']) +_ruby_test_suite = TestSuite(['_ruby']) +_all_test_suites = [_core_test_suite, _cpp_test_suite, _csharp_test_suite, + _node_test_suite, _objc_test_suite, _php_test_suite, + _python_test_suite, _ruby_test_suite] + +# Dictionary of whitelistable files where the key is a regex matching changed files +# and the value is a list of tests that should be run. An empty list means that +# the changed files should not trigger any tests. Any changed file that does not +# match any of these regexes will trigger all tests +_WHITELIST_DICT = { + '^templates/.*': [], + '^doc/.*': [], + '^examples/.*': [], + '^summerofcode/.*': [], + '.*README.md$': [], + '.*LICENSE$': [], + '^src/cpp.*': [_cpp_test_suite], + '^src/csharp.*': [_csharp_test_suite], + '^src/node.*': [_node_test_suite], + '^src/objective-c.*': [_objc_test_suite], + '^src/php.*': [_php_test_suite], + '^src/python.*': [_python_test_suite], + '^src/ruby.*': [_ruby_test_suite], + '^test/core.*': [_core_test_suite], + '^test/cpp.*': [_cpp_test_suite], + '^test/distrib/cpp.*': [_cpp_test_suite], + '^test/distrib/csharp.*': [_csharp_test_suite], + '^test/distrib/node.*': [_node_test_suite], + '^test/distrib/php.*': [_php_test_suite], + '^test/distrib/python.*': [_python_test_suite], + '^test/distrib/ruby.*': [_ruby_test_suite] +} +# Add all triggers to their respective test suites +for trigger, test_suites in _WHITELIST_DICT.iteritems(): + for test_suite in test_suites: + test_suite.add_trigger(trigger) def _get_changed_files(base_branch): @@ -119,28 +110,22 @@ def _get_changed_files(base_branch): # todo(mattkwong): remove or uncomment below after seeing if Jenkins needs this # call(['git', 'fetch']) - # get file changes between branch and merge-base of specified branch - # not combined to be Windows friendly + # Get file changes between branch and merge-base of specified branch + # Not combined to be Windows friendly base_commit = check_output(["git", "merge-base", base_branch, "HEAD"]).rstrip() return check_output(["git", "diff", base_commit, "--name-only"]).splitlines() -def _can_skip_tests(file_names, starts_with_whitelist=[], ends_with_whitelist=[]): +def _can_skip_tests(file_names, triggers): """ - Determines if tests are skippable based on if all file names do not match - any begin or end triggers + Determines if tests are skippable based on if all files do not match list of regexes :param file_names: list of changed files generated by _get_changed_files() - :param starts_with_triggers: tuple of strings to match with beginning of file names - :param ends_with_triggers: tuple of strings to match with end of file names + :param triggers: list of regexes matching file name that indicates tests should be run :return: safe to skip tests """ - # convert lists to tuple to pass into str.startswith() and str.endswith() - starts_with_whitelist = tuple(starts_with_whitelist) - ends_with_whitelist = tuple(ends_with_whitelist) for file_name in file_names: - if starts_with_whitelist and not file_name.startswith(starts_with_whitelist) and \ - ends_with_whitelist and not file_name.endswith(ends_with_whitelist): - return False + if any(re.match(trigger, file_name) for trigger in triggers): + return False return True @@ -152,30 +137,20 @@ def _remove_irrelevant_tests(tests, tag): :return: list of relevant tests """ # todo(mattkwong): find a more reliable way to filter tests - don't use shortname - return [test for test in tests if - tag not in test.shortname or - '_msan' in test.shortname or - '_asan' in test.shortname or - '_tsan' in test.shortname] + return [test for test in tests if tag not in test.shortname or + any(san_tag in test.shortname for san_tag in ['_asan', '_tsan', '_msan'])] -def _remove_irrelevant_sanitizer_tests(tests, language_tag=""): +def _remove_sanitizer_tests(tests): """ - Filters out sanitizer tests - can specify a language to filter - this should be c++ only + Filters out sanitizer tests :param tests: list of all tests generated by run_tests_matrix.py - :param language_tag: string specifying a language from which to filter sanitizer tests - "_(language)_" :return: list of relevant tests """ - if language_tag: - return [test for test in tests if not language_tag in test.shortname and - not '_asan' in test.shortname and - not '_msan' in test.shortname and - not '_tsan' in test.shortname] - else: - return [test for test in tests if - '_asan' not in test.shortname and - '_msan' not in test.shortname and - '_tsan' not in test.shortname] + # todo(mattkwong): find a more reliable way to filter tests - don't use shortname + return [test for test in tests if + all(san_tag not in test.shortname for san_tag in ['_asan', '_tsan', '_msan'])] + def filter_tests(tests, base_branch): """ @@ -183,71 +158,27 @@ def filter_tests(tests, base_branch): :param tests: list of all tests generated by run_tests_matrix.py :return: list of relevant tests """ - print("Finding file differences between %s repo and current branch..." % base_branch) + print("Finding file differences between %s repo and current branch...\n" % base_branch) changed_files = _get_changed_files(base_branch) for changed_file in changed_files: print(changed_file) + print - # Filter core tests - skip_core = _can_skip_tests(changed_files, - starts_with_whitelist=_filter_whitelist(starts_with_whitelist, core_starts_with_triggers), - ends_with_whitelist=ends_with_whitelist) - if skip_core: - tests = _remove_irrelevant_tests(tests, '_c_') - - # Filter c++ tests - skip_cpp = _can_skip_tests(changed_files, - starts_with_whitelist=_filter_whitelist(starts_with_whitelist, cpp_starts_with_triggers), - ends_with_whitelist=ends_with_whitelist) - if skip_cpp: - tests = _remove_irrelevant_tests(tests, '_c++_') - tests = _remove_irrelevant_sanitizer_tests(tests, language_tag='_c++_') - + # Regex that combines all keys in _WHITELIST_DICT + all_triggers = "(" + ")|(".join(_WHITELIST_DICT.keys()) + ")" + # Check if all tests have to be run + for changed_file in changed_files: + if not re.match(all_triggers, changed_file): + return(tests) + # Filter out tests by language + for test_suite in _all_test_suites: + if _can_skip_tests(changed_files, test_suite.triggers): + for tag in test_suite.tags: + print(" Filtering %s tests" % tag) + tests = _remove_irrelevant_tests(tests, tag) # Sanitizer tests skipped if core and c++ are skipped - if skip_core and skip_cpp: - tests = _remove_irrelevant_sanitizer_tests(tests) - - # Filter c# tests - skip_csharp = _can_skip_tests(changed_files, - starts_with_whitelist=_filter_whitelist(starts_with_whitelist, csharp_starts_with_triggers), - ends_with_whitelist=ends_with_whitelist) - if skip_csharp: - tests = _remove_irrelevant_tests(tests, '_csharp_') - - # Filter node tests - skip_node = _can_skip_tests(changed_files, - starts_with_whitelist=_filter_whitelist(starts_with_whitelist, node_starts_with_triggers), - ends_with_whitelist=ends_with_whitelist) - if skip_node: - tests = _remove_irrelevant_tests(tests, '_node_') - - # Filter objc tests - skip_objc = _can_skip_tests(changed_files, - starts_with_whitelist=_filter_whitelist(starts_with_whitelist, objc_starts_with_triggers), - ends_with_whitelist=ends_with_whitelist) - if skip_objc: - tests = _remove_irrelevant_tests(tests, '_objc_') - - # Filter php tests - skip_php = _can_skip_tests(changed_files, - starts_with_whitelist=_filter_whitelist(starts_with_whitelist, php_starts_with_triggers), - ends_with_whitelist=ends_with_whitelist) - if skip_php: - tests = _remove_irrelevant_tests(tests, '_php_') - tests = _remove_irrelevant_tests(tests, '_php7_') - - # Filter python tests - skip_python = _can_skip_tests(changed_files, - starts_with_whitelist=_filter_whitelist(starts_with_whitelist, python_starts_with_triggers), - ends_with_whitelist=ends_with_whitelist) - if skip_python: - tests = _remove_irrelevant_tests(tests, '_python_') - - # Filter ruby tests - skip_ruby = _can_skip_tests(changed_files, - starts_with_whitelist=_filter_whitelist(starts_with_whitelist, ruby_starts_with_triggers), - ends_with_whitelist=ends_with_whitelist) - if skip_ruby: - tests = _remove_irrelevant_tests(tests, '_ruby_') + if _can_skip_tests(changed_files, _cpp_test_suite.triggers + _core_test_suite.triggers): + print(" Filtering Sanitizer tests") + tests = _remove_sanitizer_tests(tests) return tests diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index 7548f6d90d9..21d3dd4a0bc 100755 --- a/tools/run_tests/run_tests_matrix.py +++ b/tools/run_tests/run_tests_matrix.py @@ -277,6 +277,7 @@ print if args.filter_pr_tests: print 'IMPORTANT: Test filtering is not active; this is only for testing.' relevant_jobs = filter_tests(jobs, args.base_branch) + # todo(mattkwong): add skipped tests to report.xml print if len(relevant_jobs) == len(jobs): print '(TESTING) No tests will be skipped.' From f62140d56a980fde27ceab5ee059cf2450fa5c88 Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Mon, 17 Oct 2016 12:16:14 -0700 Subject: [PATCH 164/286] improve pull request test filtering --- tools/run_tests/filter_pull_request_tests.py | 110 ++++++++++--------- 1 file changed, 59 insertions(+), 51 deletions(-) diff --git a/tools/run_tests/filter_pull_request_tests.py b/tools/run_tests/filter_pull_request_tests.py index 55dab42f8a7..128370e1914 100644 --- a/tools/run_tests/filter_pull_request_tests.py +++ b/tools/run_tests/filter_pull_request_tests.py @@ -57,44 +57,68 @@ class TestSuite: self.triggers.append(trigger) # Create test suites -_core_test_suite = TestSuite(['_c_']) -_cpp_test_suite = TestSuite(['_c++_']) -_csharp_test_suite = TestSuite(['_csharp_']) -_node_test_suite = TestSuite(['_node_']) -_objc_test_suite = TestSuite(['_objc_']) -_php_test_suite = TestSuite(['_php_', '_php7_']) -_python_test_suite = TestSuite(['_python_']) -_ruby_test_suite = TestSuite(['_ruby']) -_all_test_suites = [_core_test_suite, _cpp_test_suite, _csharp_test_suite, - _node_test_suite, _objc_test_suite, _php_test_suite, - _python_test_suite, _ruby_test_suite] +_CORE_TEST_SUITE = TestSuite(['_c_']) +_CPP_TEST_SUITE = TestSuite(['_c++_']) +_CSHARP_TEST_SUITE = TestSuite(['_csharp_']) +_NODE_TEST_SUITE = TestSuite(['_node_']) +_OBJC_TEST_SUITE = TestSuite(['_objc_']) +_PHP_TEST_SUITE = TestSuite(['_php_', '_php7_']) +_PYTHON_TEST_SUITE = TestSuite(['_python_']) +_RUBY_TEST_SUITE = TestSuite(['_ruby']) +_ALL_TEST_SUITES = [_CORE_TEST_SUITE, _CPP_TEST_SUITE, _CSHARP_TEST_SUITE, + _NODE_TEST_SUITE, _OBJC_TEST_SUITE, _PHP_TEST_SUITE, + _PYTHON_TEST_SUITE, _RUBY_TEST_SUITE] # Dictionary of whitelistable files where the key is a regex matching changed files # and the value is a list of tests that should be run. An empty list means that # the changed files should not trigger any tests. Any changed file that does not # match any of these regexes will trigger all tests _WHITELIST_DICT = { - '^templates/.*': [], - '^doc/.*': [], - '^examples/.*': [], - '^summerofcode/.*': [], - '.*README.md$': [], - '.*LICENSE$': [], - '^src/cpp.*': [_cpp_test_suite], - '^src/csharp.*': [_csharp_test_suite], - '^src/node.*': [_node_test_suite], - '^src/objective-c.*': [_objc_test_suite], - '^src/php.*': [_php_test_suite], - '^src/python.*': [_python_test_suite], - '^src/ruby.*': [_ruby_test_suite], - '^test/core.*': [_core_test_suite], - '^test/cpp.*': [_cpp_test_suite], - '^test/distrib/cpp.*': [_cpp_test_suite], - '^test/distrib/csharp.*': [_csharp_test_suite], - '^test/distrib/node.*': [_node_test_suite], - '^test/distrib/php.*': [_php_test_suite], - '^test/distrib/python.*': [_python_test_suite], - '^test/distrib/ruby.*': [_ruby_test_suite] + #'^templates/.*': [_sanity_test_suite], + # todo(mattkwong): add sanity test suite + '^doc/': [], + '^examples/': [], + '^summerofcode/': [], + 'README\.md$': [], + 'CONTRIBUTING\.md$': [], + 'LICENSE$': [], + 'INSTALL\.md$': [], + 'MANIFEST\.md$': [], + 'PATENTS$': [], + 'binding\.grp$': [_NODE_TEST_SUITE], + 'gRPC\-Core\.podspec$': [_OBJC_TEST_SUITE], + 'gRPC\-ProtoRPC\.podspec$': [_OBJC_TEST_SUITE], + 'gRPC\-RxLibrary\.podspec$': [_OBJC_TEST_SUITE], + 'gRPC\.podspec$': [_OBJC_TEST_SUITE], + 'composer\.json$': [_PHP_TEST_SUITE], + 'config\.m4$': [_PHP_TEST_SUITE], + 'package\.json$': [_PHP_TEST_SUITE], + 'package\.xml$': [_PHP_TEST_SUITE], + 'PYTHON\-MANIFEST\.in$': [_PYTHON_TEST_SUITE], + 'requirements\.txt$': [_PYTHON_TEST_SUITE], + 'setup\.cfg$': [_PYTHON_TEST_SUITE], + 'setup\.py$': [_PYTHON_TEST_SUITE], + 'grpc\.gemspec$': [_RUBY_TEST_SUITE], + 'Gemfile$': [_RUBY_TEST_SUITE], + # 'grpc.def$': [_WINDOWS_TEST_SUITE], + '^src/cpp/': [_CPP_TEST_SUITE], + '^src/csharp/': [_CSHARP_TEST_SUITE], + '^src/node/': [_NODE_TEST_SUITE], + '^src/objective\-c/': [_OBJC_TEST_SUITE], + '^src/php/': [_PHP_TEST_SUITE], + '^src/python/': [_PYTHON_TEST_SUITE], + '^src/ruby/': [_RUBY_TEST_SUITE], + '^test/core/': [_CORE_TEST_SUITE], + '^test/cpp/': [_CPP_TEST_SUITE], + '^test/distrib/cpp/': [_CPP_TEST_SUITE], + '^test/distrib/csharp/': [_CSHARP_TEST_SUITE], + '^test/distrib/node/': [_NODE_TEST_SUITE], + '^test/distrib/php/': [_PHP_TEST_SUITE], + '^test/distrib/python/': [_PYTHON_TEST_SUITE], + '^test/distrib/ruby/': [_RUBY_TEST_SUITE], + '^include/grpc\+\+/': [_CPP_TEST_SUITE] + #'^vsprojects/': [_WINDOWS_TEST_SUITE] + # todo(mattkwong): add windows test suite } # Add all triggers to their respective test suites for trigger, test_suites in _WHITELIST_DICT.iteritems(): @@ -108,7 +132,7 @@ def _get_changed_files(base_branch): """ # git fetch might need to be called on Jenkins slave # todo(mattkwong): remove or uncomment below after seeing if Jenkins needs this - # call(['git', 'fetch']) + call(['git', 'fetch']) # Get file changes between branch and merge-base of specified branch # Not combined to be Windows friendly @@ -137,19 +161,7 @@ def _remove_irrelevant_tests(tests, tag): :return: list of relevant tests """ # todo(mattkwong): find a more reliable way to filter tests - don't use shortname - return [test for test in tests if tag not in test.shortname or - any(san_tag in test.shortname for san_tag in ['_asan', '_tsan', '_msan'])] - - -def _remove_sanitizer_tests(tests): - """ - Filters out sanitizer tests - :param tests: list of all tests generated by run_tests_matrix.py - :return: list of relevant tests - """ - # todo(mattkwong): find a more reliable way to filter tests - don't use shortname - return [test for test in tests if - all(san_tag not in test.shortname for san_tag in ['_asan', '_tsan', '_msan'])] + return [test for test in tests if tag not in test.shortname] def filter_tests(tests, base_branch): @@ -171,14 +183,10 @@ def filter_tests(tests, base_branch): if not re.match(all_triggers, changed_file): return(tests) # Filter out tests by language - for test_suite in _all_test_suites: + for test_suite in _ALL_TEST_SUITES: if _can_skip_tests(changed_files, test_suite.triggers): for tag in test_suite.tags: print(" Filtering %s tests" % tag) tests = _remove_irrelevant_tests(tests, tag) - # Sanitizer tests skipped if core and c++ are skipped - if _can_skip_tests(changed_files, _cpp_test_suite.triggers + _core_test_suite.triggers): - print(" Filtering Sanitizer tests") - tests = _remove_sanitizer_tests(tests) return tests From 213793b36aacbb6dca1421c436d8ee14bf449735 Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Wed, 19 Oct 2016 16:35:50 -0700 Subject: [PATCH 165/286] added platform test suites and other fixes --- tools/run_tests/filter_pull_request_tests.py | 119 ++++++++++--------- 1 file changed, 61 insertions(+), 58 deletions(-) diff --git a/tools/run_tests/filter_pull_request_tests.py b/tools/run_tests/filter_pull_request_tests.py index 128370e1914..e2027a23402 100644 --- a/tools/run_tests/filter_pull_request_tests.py +++ b/tools/run_tests/filter_pull_request_tests.py @@ -36,18 +36,16 @@ from subprocess import call, check_output class TestSuite: """ - Contains tag to identify job as belonging to this test suite and + Contains label to identify job as belonging to this test suite and triggers to identify if changed files are relevant """ - def __init__(self, tags): + def __init__(self, labels): """ - Build TestSuite to group tests by their tags - :param tag: string used to identify if a job belongs to this TestSuite - todo(mattkwong): Change the use of tag because do not want to depend on - job.shortname to identify what suite a test belongs to + Build TestSuite to group tests based on labeling + :param label: strings that should match a jobs's platform, config, language, or test group """ self.triggers = [] - self.tags = tags + self.labels = labels def add_trigger(self, trigger): """ @@ -56,51 +54,34 @@ class TestSuite: """ self.triggers.append(trigger) + # Create test suites -_CORE_TEST_SUITE = TestSuite(['_c_']) -_CPP_TEST_SUITE = TestSuite(['_c++_']) -_CSHARP_TEST_SUITE = TestSuite(['_csharp_']) -_NODE_TEST_SUITE = TestSuite(['_node_']) -_OBJC_TEST_SUITE = TestSuite(['_objc_']) -_PHP_TEST_SUITE = TestSuite(['_php_', '_php7_']) -_PYTHON_TEST_SUITE = TestSuite(['_python_']) -_RUBY_TEST_SUITE = TestSuite(['_ruby']) -_ALL_TEST_SUITES = [_CORE_TEST_SUITE, _CPP_TEST_SUITE, _CSHARP_TEST_SUITE, - _NODE_TEST_SUITE, _OBJC_TEST_SUITE, _PHP_TEST_SUITE, - _PYTHON_TEST_SUITE, _RUBY_TEST_SUITE] +_SANITY_TEST_SUITE = TestSuite(['sanity']) +_CORE_TEST_SUITE = TestSuite(['c']) +_CPP_TEST_SUITE = TestSuite(['c++']) +_CSHARP_TEST_SUITE = TestSuite(['csharp']) +_NODE_TEST_SUITE = TestSuite(['node']) +_OBJC_TEST_SUITE = TestSuite(['objc']) +_PHP_TEST_SUITE = TestSuite(['php', 'php7']) +_PYTHON_TEST_SUITE = TestSuite(['python']) +_RUBY_TEST_SUITE = TestSuite(['ruby']) +_LINUX_TEST_SUITE = TestSuite(['linux']) +_WINDOWS_TEST_SUITE = TestSuite(['windows']) +_MACOS_TEST_SUITE = TestSuite(['macos']) +_ALL_TEST_SUITES = [_SANITY_TEST_SUITE, _CORE_TEST_SUITE, _CPP_TEST_SUITE, + _CSHARP_TEST_SUITE, _NODE_TEST_SUITE, _OBJC_TEST_SUITE, + _PHP_TEST_SUITE, _PYTHON_TEST_SUITE, _RUBY_TEST_SUITE, + _LINUX_TEST_SUITE, _WINDOWS_TEST_SUITE, _MACOS_TEST_SUITE] # Dictionary of whitelistable files where the key is a regex matching changed files # and the value is a list of tests that should be run. An empty list means that # the changed files should not trigger any tests. Any changed file that does not # match any of these regexes will trigger all tests _WHITELIST_DICT = { - #'^templates/.*': [_sanity_test_suite], - # todo(mattkwong): add sanity test suite '^doc/': [], '^examples/': [], + '^include/grpc\+\+/': [_CPP_TEST_SUITE], '^summerofcode/': [], - 'README\.md$': [], - 'CONTRIBUTING\.md$': [], - 'LICENSE$': [], - 'INSTALL\.md$': [], - 'MANIFEST\.md$': [], - 'PATENTS$': [], - 'binding\.grp$': [_NODE_TEST_SUITE], - 'gRPC\-Core\.podspec$': [_OBJC_TEST_SUITE], - 'gRPC\-ProtoRPC\.podspec$': [_OBJC_TEST_SUITE], - 'gRPC\-RxLibrary\.podspec$': [_OBJC_TEST_SUITE], - 'gRPC\.podspec$': [_OBJC_TEST_SUITE], - 'composer\.json$': [_PHP_TEST_SUITE], - 'config\.m4$': [_PHP_TEST_SUITE], - 'package\.json$': [_PHP_TEST_SUITE], - 'package\.xml$': [_PHP_TEST_SUITE], - 'PYTHON\-MANIFEST\.in$': [_PYTHON_TEST_SUITE], - 'requirements\.txt$': [_PYTHON_TEST_SUITE], - 'setup\.cfg$': [_PYTHON_TEST_SUITE], - 'setup\.py$': [_PYTHON_TEST_SUITE], - 'grpc\.gemspec$': [_RUBY_TEST_SUITE], - 'Gemfile$': [_RUBY_TEST_SUITE], - # 'grpc.def$': [_WINDOWS_TEST_SUITE], '^src/cpp/': [_CPP_TEST_SUITE], '^src/csharp/': [_CSHARP_TEST_SUITE], '^src/node/': [_NODE_TEST_SUITE], @@ -108,6 +89,7 @@ _WHITELIST_DICT = { '^src/php/': [_PHP_TEST_SUITE], '^src/python/': [_PYTHON_TEST_SUITE], '^src/ruby/': [_RUBY_TEST_SUITE], + '^templates/': [_SANITY_TEST_SUITE], '^test/core/': [_CORE_TEST_SUITE], '^test/cpp/': [_CPP_TEST_SUITE], '^test/distrib/cpp/': [_CPP_TEST_SUITE], @@ -116,10 +98,31 @@ _WHITELIST_DICT = { '^test/distrib/php/': [_PHP_TEST_SUITE], '^test/distrib/python/': [_PYTHON_TEST_SUITE], '^test/distrib/ruby/': [_RUBY_TEST_SUITE], - '^include/grpc\+\+/': [_CPP_TEST_SUITE] - #'^vsprojects/': [_WINDOWS_TEST_SUITE] - # todo(mattkwong): add windows test suite + '^vsprojects/': [_WINDOWS_TEST_SUITE], + 'binding\.gyp$': [_NODE_TEST_SUITE], + 'composer\.json$': [_PHP_TEST_SUITE], + 'config\.m4$': [_PHP_TEST_SUITE], + 'CONTRIBUTING\.md$': [], + 'Gemfile$': [_RUBY_TEST_SUITE], + 'grpc.def$': [_WINDOWS_TEST_SUITE], + 'grpc\.gemspec$': [_RUBY_TEST_SUITE], + 'gRPC\.podspec$': [_OBJC_TEST_SUITE], + 'gRPC\-Core\.podspec$': [_OBJC_TEST_SUITE], + 'gRPC\-ProtoRPC\.podspec$': [_OBJC_TEST_SUITE], + 'gRPC\-RxLibrary\.podspec$': [_OBJC_TEST_SUITE], + 'INSTALL\.md$': [], + 'LICENSE$': [], + 'MANIFEST\.md$': [], + 'package\.json$': [_PHP_TEST_SUITE], + 'package\.xml$': [_PHP_TEST_SUITE], + 'PATENTS$': [], + 'PYTHON\-MANIFEST\.in$': [_PYTHON_TEST_SUITE], + 'README\.md$': [], + 'requirements\.txt$': [_PYTHON_TEST_SUITE], + 'setup\.cfg$': [_PYTHON_TEST_SUITE], + 'setup\.py$': [_PYTHON_TEST_SUITE] } + # Add all triggers to their respective test suites for trigger, test_suites in _WHITELIST_DICT.iteritems(): for test_suite in test_suites: @@ -130,10 +133,6 @@ def _get_changed_files(base_branch): """ Get list of changed files between current branch and base of target merge branch """ - # git fetch might need to be called on Jenkins slave - # todo(mattkwong): remove or uncomment below after seeing if Jenkins needs this - call(['git', 'fetch']) - # Get file changes between branch and merge-base of specified branch # Not combined to be Windows friendly base_commit = check_output(["git", "merge-base", base_branch, "HEAD"]).rstrip() @@ -153,15 +152,17 @@ def _can_skip_tests(file_names, triggers): return True -def _remove_irrelevant_tests(tests, tag): +def _remove_irrelevant_tests(tests, skippable_labels): """ Filters out tests by config or language - will not remove sanitizer tests :param tests: list of all tests generated by run_tests_matrix.py - :param tag: string representing language or config to filter - "_(language)_" or "_(config)" + :param skippable_labels: list of languages and platforms with skippable tests :return: list of relevant tests """ - # todo(mattkwong): find a more reliable way to filter tests - don't use shortname - return [test for test in tests if tag not in test.shortname] + # test.labels[0] is platform and test.labels[2] is language + # We skip a test if both are considered safe to skip + return [test for test in tests if test.labels[0] not in skippable_labels or \ + test.labels[2] not in skippable_labels] def filter_tests(tests, base_branch): @@ -170,7 +171,7 @@ def filter_tests(tests, base_branch): :param tests: list of all tests generated by run_tests_matrix.py :return: list of relevant tests """ - print("Finding file differences between %s repo and current branch...\n" % base_branch) + print("Finding file differences between gRPC %s branch and pull request...\n" % base_branch) changed_files = _get_changed_files(base_branch) for changed_file in changed_files: print(changed_file) @@ -182,11 +183,13 @@ def filter_tests(tests, base_branch): for changed_file in changed_files: if not re.match(all_triggers, changed_file): return(tests) - # Filter out tests by language + # Figure out which language and platform tests to run + skippable_labels = [] for test_suite in _ALL_TEST_SUITES: if _can_skip_tests(changed_files, test_suite.triggers): - for tag in test_suite.tags: - print(" Filtering %s tests" % tag) - tests = _remove_irrelevant_tests(tests, tag) + for label in test_suite.labels: + print(" Filtering %s tests" % label) + skippable_labels.append(label) + tests = _remove_irrelevant_tests(tests, skippable_labels) return tests From 0a18d64fccb9f42a6dd6efcfb1634d541b09af81 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Thu, 20 Oct 2016 18:03:24 -0700 Subject: [PATCH 166/286] Address the comments --- .../GRPCClient/private/GRPCConnectivityMonitor.m | 11 +++-------- src/objective-c/GRPCClient/private/GRPCHost.m | 3 +++ .../private/GRPCReachabilityFlagNames.xmacro.h | 3 +-- src/objective-c/tests/Connectivity/Podfile | 1 + 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index afd773c70c4..b2a10db432a 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -130,13 +130,7 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, if ((self = [super init])) { _reachabilityRef = CFRetain(reachability); _queue = dispatch_get_main_queue(); - SCNetworkReachabilityFlags flags; - if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) { - _previousReachabilityFlags = - [[GRPCReachabilityFlags alloc] initWithFlags:flags]; - } else { - _previousReachabilityFlags = 0; - } + _previousReachabilityFlags = nil; } return self; } @@ -162,7 +156,8 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, [self startListeningWithHandler:^(GRPCReachabilityFlags *flags) { if (!flags.reachable) { handler(); - } else if (flags.isWWAN ^ _previousReachabilityFlags.isWWAN) { + } else if (!_previousReachabilityFlags || + (flags.isWWAN ^ _previousReachabilityFlags.isWAAN)) { wifiStatusChangeHandler(); } _previousReachabilityFlags = flags; diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index ee6045653e9..256278bd49b 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -101,6 +101,9 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; _secure = YES; kHostCache[address] = self; + // When there is host in the cache, keep a single monitor to the network + // to + // flush the cache if the connectivity status changed if (!connectivityMonitor) { connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:hostURL.host]; diff --git a/src/objective-c/GRPCClient/private/GRPCReachabilityFlagNames.xmacro.h b/src/objective-c/GRPCClient/private/GRPCReachabilityFlagNames.xmacro.h index 1c907877a0e..f5b9e7e64c2 100644 --- a/src/objective-c/GRPCClient/private/GRPCReachabilityFlagNames.xmacro.h +++ b/src/objective-c/GRPCClient/private/GRPCReachabilityFlagNames.xmacro.h @@ -55,7 +55,7 @@ #endif #if TARGET_OS_IPHONE -GRPC_XMACRO_ITEM(isCell, IsWWAN) +GRPC_XMACRO_ITEM(isWWAN, IsWWAN) #endif GRPC_XMACRO_ITEM(reachable, Reachable) GRPC_XMACRO_ITEM(transientConnection, TransientConnection) @@ -65,4 +65,3 @@ GRPC_XMACRO_ITEM(interventionRequired, InterventionRequired) GRPC_XMACRO_ITEM(connectionOnDemand, ConnectionOnDemand) GRPC_XMACRO_ITEM(isLocalAddress, IsLocalAddress) GRPC_XMACRO_ITEM(isDirect, IsDirect) -GRPC_XMACRO_ITEM(isWWAN, IsWWAN) diff --git a/src/objective-c/tests/Connectivity/Podfile b/src/objective-c/tests/Connectivity/Podfile index 547a38b1ca2..27ff935c544 100644 --- a/src/objective-c/tests/Connectivity/Podfile +++ b/src/objective-c/tests/Connectivity/Podfile @@ -8,6 +8,7 @@ target 'ConnectivityTestingApp' do pod 'gRPC', :path => GRPC_LOCAL_SRC pod 'gRPC-Core', :path => GRPC_LOCAL_SRC pod 'gRPC-ProtoRPC', :path => GRPC_LOCAL_SRC + pod 'gRPC-RxLibrary', :path => GRPC_LOCAL_SRC pod 'Protobuf', :path => "#{GRPC_LOCAL_SRC}/third_party/protobuf" pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c" end From b93053f868573e24bcc287524f0b361d0afee27e Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Thu, 20 Oct 2016 18:12:23 -0700 Subject: [PATCH 167/286] bug fix --- src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index b2a10db432a..2c5f21684d9 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -157,7 +157,7 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, if (!flags.reachable) { handler(); } else if (!_previousReachabilityFlags || - (flags.isWWAN ^ _previousReachabilityFlags.isWAAN)) { + (flags.isWWAN ^ _previousReachabilityFlags.isWWAN)) { wifiStatusChangeHandler(); } _previousReachabilityFlags = flags; From e9255d04e572a058189a63cf23c8475f1b3fb2dd Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Thu, 20 Oct 2016 19:08:57 -0700 Subject: [PATCH 168/286] fix sanity --- gRPC-Core.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index e59404932cd..1ca8119a109 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -191,7 +191,7 @@ Pod::Spec.new do |s| ss.header_mappings_dir = '.' ss.libraries = 'z' ss.dependency "#{s.name}/Interface", version - ss.dependency 'BoringSSL', '~> 7.0' + ss.dependency 'BoringSSL', '~> 6.0' # To save you from scrolling, this is the last part of the podspec. ss.source_files = 'src/core/lib/profiling/timers.h', From 56551301710e6439e07f35d093e2b7c179013880 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 21 Oct 2016 00:15:07 -0700 Subject: [PATCH 169/286] Break retain cycle and fix bug --- src/objective-c/GRPCClient/GRPCCall.m | 2 +- .../GRPCClient/private/GRPCConnectivityMonitor.m | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index bbfb5aa45f3..e5a90f2caec 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -382,7 +382,7 @@ static NSMutableDictionary *callFlags; [NSException raise:NSInvalidArgumentException format:@"host of %@ is nil", _host]; } __weak typeof(self) weakSelf = self; - _connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:host]; + _connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:host]; void (^handler)() = ^{ typeof(self) strongSelf = weakSelf; if (strongSelf) { diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index 2c5f21684d9..8376744e289 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -153,14 +153,18 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, - (void)handleLossWithHandler:(void (^)())handler wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler { + __weak typeof(self) weakSelf = self; [self startListeningWithHandler:^(GRPCReachabilityFlags *flags) { - if (!flags.reachable) { - handler(); - } else if (!_previousReachabilityFlags || - (flags.isWWAN ^ _previousReachabilityFlags.isWWAN)) { - wifiStatusChangeHandler(); + typeof(self) strongSelf = weakSelf; + if (strongSelf) { + if (!flags.reachable) { + handler(); + } else if (strongSelf->_previousReachabilityFlags && + (flags.isWWAN ^ strongSelf->_previousReachabilityFlags.isWWAN)) { + wifiStatusChangeHandler(); + } + strongSelf->_previousReachabilityFlags = flags; } - _previousReachabilityFlags = flags; }]; } From 484836973cc9f63f99f5dd6d29a290c9b39c1f92 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 21 Oct 2016 00:27:32 -0700 Subject: [PATCH 170/286] Clean cache thoroughly --- src/objective-c/GRPCClient/private/GRPCHost.m | 1 + 1 file changed, 1 insertion(+) diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index 256278bd49b..9d7b3a7f0bf 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -125,6 +125,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; BOOL * _Nonnull stop) { [host disconnect]; }]; + [kHostCache removeAllObjects]; connectivityMonitor = nil; } } From 95d75ea4f9924fb3dc03fcf38c63e4b4ba2ef8c8 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 21 Oct 2016 00:28:11 -0700 Subject: [PATCH 171/286] clean with clang-format --- .../private/GRPCConnectivityMonitor.h | 15 ++-- .../private/GRPCConnectivityMonitor.m | 76 +++++++++++-------- 2 files changed, 54 insertions(+), 37 deletions(-) diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h index 8332ffbf288..383225fb724 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h @@ -45,7 +45,7 @@ */ #define GRPC_XMACRO_ITEM(methodName, FlagName) \ -@property(nonatomic, readonly) BOOL methodName; + @property(nonatomic, readonly) BOOL methodName; #include "GRPCReachabilityFlagNames.xmacro.h" #undef GRPC_XMACRO_ITEM @@ -53,7 +53,6 @@ @property(nonatomic, readonly) BOOL isHostReachable; @end - @interface GRPCConnectivityMonitor : NSObject + (nullable instancetype)monitorWithHost:(nonnull NSString *)hostName; @@ -61,17 +60,21 @@ - (nonnull instancetype)init NS_UNAVAILABLE; /** - * Queue on which callbacks will be dispatched. Default is the main queue. Set it before calling + * Queue on which callbacks will be dispatched. Default is the main queue. Set + * it before calling * handleLossWithHandler:. */ // TODO(jcanizales): Default to a serial background queue instead. @property(nonatomic, strong, null_resettable) dispatch_queue_t queue; /** - * Calls handler every time the connectivity to this instance's host is lost. If this instance is + * Calls handler every time the connectivity to this instance's host is lost. If + * this instance is * released before that happens, the handler won't be called. - * Only one handler is active at a time, so if this method is called again before the previous - * handler has been called, it might never be called at all (or yes, if it has already been queued). + * Only one handler is active at a time, so if this method is called again + * before the previous + * handler has been called, it might never be called at all (or yes, if it has + * already been queued). */ - (void)handleLossWithHandler:(nonnull void (^)())handler wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler; diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index 8376744e289..b5c43075ee8 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -58,45 +58,50 @@ } */ -#define GRPC_XMACRO_ITEM(methodName, FlagName) \ -- (BOOL)methodName { \ - return !!(_flags & kSCNetworkReachabilityFlags ## FlagName); \ -} +#define GRPC_XMACRO_ITEM(methodName, FlagName) \ + -(BOOL)methodName { \ + return !!(_flags & kSCNetworkReachabilityFlags##FlagName); \ + } #include "GRPCReachabilityFlagNames.xmacro.h" #undef GRPC_XMACRO_ITEM - (BOOL)isHostReachable { - // Note: connectionOnDemand means it'll be reachable only if using the CFSocketStream API or APIs + // Note: connectionOnDemand means it'll be reachable only if using the + // CFSocketStream API or APIs // on top of it. - // connectionRequired means we can't tell until a connection is attempted (e.g. for VPN on + // connectionRequired means we can't tell until a connection is attempted + // (e.g. for VPN on // demand). - return self.reachable && !self.interventionRequired && !self.connectionOnDemand; + return self.reachable && !self.interventionRequired && + !self.connectionOnDemand; } - (NSString *)description { NSMutableArray *activeOptions = [NSMutableArray arrayWithCapacity:9]; - /* - * For each flag, add its name to the array if it's ON. Example: +/* + * For each flag, add its name to the array if it's ON. Example: - if (self.isCell) { - [activeOptions addObject:@"isCell"]; - } +if (self.isCell) { + [activeOptions addObject:@"isCell"]; +} - */ + */ #define GRPC_XMACRO_ITEM(methodName, FlagName) \ - if (self.methodName) { \ - [activeOptions addObject:@#methodName]; \ + if (self.methodName) { \ + [activeOptions addObject:@ #methodName]; \ } #include "GRPCReachabilityFlagNames.xmacro.h" #undef GRPC_XMACRO_ITEM - return activeOptions.count == 0 ? @"(none)" : [activeOptions componentsJoinedByString:@", "]; + return activeOptions.count == 0 + ? @"(none)" + : [activeOptions componentsJoinedByString:@", "]; } - (BOOL)isEqual:(id)object { return [object isKindOfClass:[GRPCReachabilityFlags class]] && - _flags == ((GRPCReachabilityFlags *)object)->_flags; + _flags == ((GRPCReachabilityFlags *)object)->_flags; } - (NSUInteger)hash { @@ -106,15 +111,18 @@ #pragma mark Connectivity Monitor -// Assumes the third argument is a block that accepts a GRPCReachabilityFlags object, and passes the +// Assumes the third argument is a block that accepts a GRPCReachabilityFlags +// object, and passes the // received ones to it. static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info) { - #pragma unused (target) - // This can be called many times with the same info. The info is retained by SCNetworkReachability +#pragma unused(target) + // This can be called many times with the same info. The info is retained by + // SCNetworkReachability // while this function is being executed. - void (^handler)(GRPCReachabilityFlags *) = (__bridge void (^)(GRPCReachabilityFlags *))info; + void (^handler)(GRPCReachabilityFlags *) = + (__bridge void (^)(GRPCReachabilityFlags *))info; handler([[GRPCReachabilityFlags alloc] initWithFlags:flags]); } @@ -123,7 +131,8 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, GRPCReachabilityFlags *_previousReachabilityFlags; } -- (nullable instancetype)initWithReachability:(nullable SCNetworkReachabilityRef)reachability { +- (nullable instancetype)initWithReachability: + (nullable SCNetworkReachabilityRef)reachability { if (!reachability) { return nil; } @@ -144,7 +153,8 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, hostName); - GRPCConnectivityMonitor *returnValue = [[self alloc] initWithReachability:reachability]; + GRPCConnectivityMonitor *returnValue = + [[self alloc] initWithReachability:reachability]; if (reachability) { CFRelease(reachability); } @@ -160,7 +170,8 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, if (!flags.reachable) { handler(); } else if (strongSelf->_previousReachabilityFlags && - (flags.isWWAN ^ strongSelf->_previousReachabilityFlags.isWWAN)) { + (flags.isWWAN ^ + strongSelf->_previousReachabilityFlags.isWWAN)) { wifiStatusChangeHandler(); } strongSelf->_previousReachabilityFlags = flags; @@ -169,17 +180,20 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, } - (void)startListeningWithHandler:(void (^)(GRPCReachabilityFlags *))handler { - // Copy to ensure the handler block is in the heap (and so can't be deallocated when this method + // Copy to ensure the handler block is in the heap (and so can't be + // deallocated when this method // returns). void (^copiedHandler)(GRPCReachabilityFlags *) = [handler copy]; SCNetworkReachabilityContext context = { - .version = 0, - .info = (__bridge void *)copiedHandler, - .retain = CFRetain, - .release = CFRelease, + .version = 0, + .info = (__bridge void *)copiedHandler, + .retain = CFRetain, + .release = CFRelease, }; - // The following will retain context.info, and release it when the callback is set to NULL. - SCNetworkReachabilitySetCallback(_reachabilityRef, PassFlagsToContextInfoBlock, &context); + // The following will retain context.info, and release it when the callback is + // set to NULL. + SCNetworkReachabilitySetCallback(_reachabilityRef, + PassFlagsToContextInfoBlock, &context); SCNetworkReachabilitySetDispatchQueue(_reachabilityRef, _queue); } From ff1ef244ede08a507ef913c81988650cc976fa83 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 21 Oct 2016 00:34:25 -0700 Subject: [PATCH 172/286] Do not finish call with error when switching between wifi and cellular --- src/objective-c/GRPCClient/GRPCCall.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index e5a90f2caec..15cec45d15c 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -392,7 +392,7 @@ static NSMutableDictionary *callFlags; } }; [_connectivityMonitor handleLossWithHandler:handler - wifiStatusChangeHandler:handler]; + wifiStatusChangeHandler:nil]; // Create a retain cycle so that this instance lives until the RPC finishes // (or is cancelled). From 98abfd3d64d6a887f56f3dd78eec6c32bde369df Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 21 Oct 2016 08:10:51 -0700 Subject: [PATCH 173/286] Pass channel args through resolver. --- src/core/ext/client_config/client_channel.c | 6 +- .../ext/client_config/lb_policy_factory.h | 3 +- src/core/ext/client_config/resolver_factory.h | 5 +- .../ext/client_config/resolver_registry.c | 12 ++-- .../ext/client_config/resolver_registry.h | 3 +- src/core/ext/client_config/resolver_result.c | 12 ++-- src/core/ext/client_config/resolver_result.h | 6 +- src/core/ext/lb_policy/grpclb/grpclb.c | 6 +- .../ext/lb_policy/pick_first/pick_first.c | 2 +- .../ext/lb_policy/round_robin/round_robin.c | 2 +- .../ext/resolver/dns/native/dns_resolver.c | 10 ++- .../ext/resolver/sockaddr/sockaddr_resolver.c | 6 +- .../chttp2/client/insecure/channel_create.c | 57 ++++++---------- .../client/secure/secure_channel_create.c | 66 ++++++++----------- 14 files changed, 91 insertions(+), 105 deletions(-) diff --git a/src/core/ext/client_config/client_channel.c b/src/core/ext/client_config/client_channel.c index beaa9637c3b..d02dd5aacf1 100644 --- a/src/core/ext/client_config/client_channel.c +++ b/src/core/ext/client_config/client_channel.c @@ -188,8 +188,8 @@ static void on_resolver_result_changed(grpc_exec_ctx *exec_ctx, void *arg, grpc_resolver_result_get_server_name(chand->resolver_result); lb_policy_args.addresses = grpc_resolver_result_get_addresses(chand->resolver_result); - lb_policy_args.additional_args = - grpc_resolver_result_get_lb_policy_args(chand->resolver_result); + lb_policy_args.args = + grpc_resolver_result_get_channel_args(chand->resolver_result); lb_policy_args.client_channel_factory = chand->client_channel_factory; // Special case: If all of the addresses are balancer addresses, @@ -227,7 +227,7 @@ static void on_resolver_result_changed(grpc_exec_ctx *exec_ctx, void *arg, grpc_lb_policy_check_connectivity(exec_ctx, lb_policy, &state_error); } const grpc_arg *channel_arg = grpc_channel_args_find( - lb_policy_args.additional_args, GRPC_ARG_SERVICE_CONFIG); + lb_policy_args.args, GRPC_ARG_SERVICE_CONFIG); if (channel_arg != NULL) { GPR_ASSERT(channel_arg->type == GRPC_ARG_POINTER); method_config_table = grpc_method_config_table_ref( diff --git a/src/core/ext/client_config/lb_policy_factory.h b/src/core/ext/client_config/lb_policy_factory.h index ade55704f25..4e11501e019 100644 --- a/src/core/ext/client_config/lb_policy_factory.h +++ b/src/core/ext/client_config/lb_policy_factory.h @@ -93,8 +93,7 @@ typedef struct grpc_lb_policy_args { const char *server_name; grpc_lb_addresses *addresses; grpc_client_channel_factory *client_channel_factory; - /* Can be used to pass implementation-specific parameters to the LB policy. */ - grpc_channel_args *additional_args; + grpc_channel_args *args; } grpc_lb_policy_args; struct grpc_lb_policy_factory_vtable { diff --git a/src/core/ext/client_config/resolver_factory.h b/src/core/ext/client_config/resolver_factory.h index 9ec5b9a70e7..e70e0565772 100644 --- a/src/core/ext/client_config/resolver_factory.h +++ b/src/core/ext/client_config/resolver_factory.h @@ -47,7 +47,10 @@ struct grpc_resolver_factory { const grpc_resolver_factory_vtable *vtable; }; -typedef struct grpc_resolver_args { grpc_uri *uri; } grpc_resolver_args; +typedef struct grpc_resolver_args { + grpc_uri *uri; + const grpc_channel_args *args; +} grpc_resolver_args; struct grpc_resolver_factory_vtable { void (*ref)(grpc_resolver_factory *factory); diff --git a/src/core/ext/client_config/resolver_registry.c b/src/core/ext/client_config/resolver_registry.c index bd5c683878d..0a168efbc94 100644 --- a/src/core/ext/client_config/resolver_registry.c +++ b/src/core/ext/client_config/resolver_registry.c @@ -131,14 +131,16 @@ static grpc_resolver_factory *resolve_factory(const char *target, return factory; } -grpc_resolver *grpc_resolver_create(const char *target) { +grpc_resolver *grpc_resolver_create(const char *target, + const grpc_channel_args *args) { grpc_uri *uri = NULL; grpc_resolver_factory *factory = resolve_factory(target, &uri); grpc_resolver *resolver; - grpc_resolver_args args; - memset(&args, 0, sizeof(args)); - args.uri = uri; - resolver = grpc_resolver_factory_create_resolver(factory, &args); + grpc_resolver_args resolver_args; + memset(&resolver_args, 0, sizeof(resolver_args)); + resolver_args.uri = uri; + resolver_args.args = args; + resolver = grpc_resolver_factory_create_resolver(factory, &resolver_args); grpc_uri_destroy(uri); return resolver; } diff --git a/src/core/ext/client_config/resolver_registry.h b/src/core/ext/client_config/resolver_registry.h index 4c6279b9789..dfe95b4a11d 100644 --- a/src/core/ext/client_config/resolver_registry.h +++ b/src/core/ext/client_config/resolver_registry.h @@ -58,7 +58,8 @@ void grpc_register_resolver_type(grpc_resolver_factory *factory); If a resolver factory was found, use it to instantiate a resolver and return it. If a resolver factory was not found, return NULL. */ -grpc_resolver *grpc_resolver_create(const char *target); +grpc_resolver *grpc_resolver_create(const char *target, + const grpc_channel_args* args); /** Find a resolver factory given a name and return an (owned-by-the-caller) * reference to it */ diff --git a/src/core/ext/client_config/resolver_result.c b/src/core/ext/client_config/resolver_result.c index 63480d152b7..5f3600e7d96 100644 --- a/src/core/ext/client_config/resolver_result.c +++ b/src/core/ext/client_config/resolver_result.c @@ -43,19 +43,19 @@ struct grpc_resolver_result { char* server_name; grpc_lb_addresses* addresses; char* lb_policy_name; - grpc_channel_args* lb_policy_args; + grpc_channel_args* channel_args; }; grpc_resolver_result* grpc_resolver_result_create( const char* server_name, grpc_lb_addresses* addresses, - const char* lb_policy_name, grpc_channel_args* lb_policy_args) { + const char* lb_policy_name, grpc_channel_args* args) { grpc_resolver_result* result = gpr_malloc(sizeof(*result)); memset(result, 0, sizeof(*result)); gpr_ref_init(&result->refs, 1); result->server_name = gpr_strdup(server_name); result->addresses = addresses; result->lb_policy_name = gpr_strdup(lb_policy_name); - result->lb_policy_args = lb_policy_args; + result->channel_args = args; return result; } @@ -69,7 +69,7 @@ void grpc_resolver_result_unref(grpc_exec_ctx* exec_ctx, gpr_free(result->server_name); grpc_lb_addresses_destroy(result->addresses, NULL /* user_data_destroy */); gpr_free(result->lb_policy_name); - grpc_channel_args_destroy(result->lb_policy_args); + grpc_channel_args_destroy(result->channel_args); gpr_free(result); } } @@ -88,7 +88,7 @@ const char* grpc_resolver_result_get_lb_policy_name( return result->lb_policy_name; } -grpc_channel_args* grpc_resolver_result_get_lb_policy_args( +grpc_channel_args* grpc_resolver_result_get_channel_args( grpc_resolver_result* result) { - return result->lb_policy_args; + return result->channel_args; } diff --git a/src/core/ext/client_config/resolver_result.h b/src/core/ext/client_config/resolver_result.h index a7ea7c0f4b8..f081c0448a6 100644 --- a/src/core/ext/client_config/resolver_result.h +++ b/src/core/ext/client_config/resolver_result.h @@ -48,10 +48,10 @@ /// Results reported from a grpc_resolver. typedef struct grpc_resolver_result grpc_resolver_result; -/// Takes ownership of \a addresses and \a lb_policy_args. +/// Takes ownership of \a addresses and \a args. grpc_resolver_result* grpc_resolver_result_create( const char* server_name, grpc_lb_addresses* addresses, - const char* lb_policy_name, grpc_channel_args* lb_policy_args); + const char* lb_policy_name, grpc_channel_args* args); void grpc_resolver_result_ref(grpc_resolver_result* result); void grpc_resolver_result_unref(grpc_exec_ctx* exec_ctx, @@ -63,7 +63,7 @@ grpc_lb_addresses* grpc_resolver_result_get_addresses( grpc_resolver_result* result); const char* grpc_resolver_result_get_lb_policy_name( grpc_resolver_result* result); -grpc_channel_args* grpc_resolver_result_get_lb_policy_args( +grpc_channel_args* grpc_resolver_result_get_channel_args( grpc_resolver_result* result); #endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H */ diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index b24b522449d..663f1d33004 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -459,7 +459,7 @@ static grpc_lb_policy *create_rr_locked( args.server_name = glb_policy->server_name; args.client_channel_factory = glb_policy->cc_factory; args.addresses = process_serverlist(serverlist); - args.additional_args = glb_policy->args; + args.args = glb_policy->args; grpc_lb_policy *rr = grpc_lb_policy_create(exec_ctx, "round_robin", &args); @@ -587,7 +587,7 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, * Create a client channel over them to communicate with a LB service */ glb_policy->server_name = gpr_strdup(args->server_name); glb_policy->cc_factory = args->client_channel_factory; - glb_policy->args = grpc_channel_args_copy(args->additional_args); + glb_policy->args = grpc_channel_args_copy(args->args); GPR_ASSERT(glb_policy->cc_factory != NULL); /* construct a target from the addresses in args, given in the form @@ -621,7 +621,7 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, /* will pick using pick_first */ glb_policy->lb_channel = grpc_client_channel_factory_create_channel( exec_ctx, glb_policy->cc_factory, target_uri_str, - GRPC_CLIENT_CHANNEL_TYPE_LOAD_BALANCING, NULL); + GRPC_CLIENT_CHANNEL_TYPE_LOAD_BALANCING, args->args); gpr_free(target_uri_str); for (size_t i = 0; i < num_grpclb_addrs; i++) { diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c index da20b9281ba..3683079cf46 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -466,7 +466,7 @@ static grpc_lb_policy *create_pick_first(grpc_exec_ctx *exec_ctx, sc_args.addr = (struct sockaddr *)(&args->addresses->addresses[i].address.addr); sc_args.addr_len = args->addresses->addresses[i].address.len; - sc_args.args = args->additional_args; + sc_args.args = args->args; grpc_subchannel *subchannel = grpc_client_channel_factory_create_subchannel( exec_ctx, args->client_channel_factory, &sc_args); diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c index b8f4f67aeba..00a18974dfc 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -629,7 +629,7 @@ static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx, sc_args.addr = (struct sockaddr *)(&args->addresses->addresses[i].address.addr); sc_args.addr_len = args->addresses->addresses[i].address.len; - sc_args.args = args->additional_args; + sc_args.args = args->args; grpc_subchannel *subchannel = grpc_client_channel_factory_create_subchannel( exec_ctx, args->client_channel_factory, &sc_args); diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index fa33ffd7bd5..a4f6ed8c4e3 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -40,6 +40,7 @@ #include "src/core/ext/client_config/http_connect_handshaker.h" #include "src/core/ext/client_config/lb_policy_registry.h" #include "src/core/ext/client_config/resolver_registry.h" +#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/timer.h" #include "src/core/lib/support/backoff.h" @@ -59,6 +60,8 @@ typedef struct { char *name_to_resolve; /** default port to use */ char *default_port; + /** channel args. */ + grpc_channel_args *channel_args; /** mutex guarding the rest of the state */ gpr_mu mu; @@ -176,8 +179,9 @@ static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, NULL /* balancer_name */, NULL /* user_data */); } grpc_resolved_addresses_destroy(r->addresses); - result = grpc_resolver_result_create(r->target_name, addresses, - NULL /* lb_policy_name */, NULL); + result = grpc_resolver_result_create( + r->target_name, addresses, NULL /* lb_policy_name */, + grpc_channel_args_copy(r->channel_args)); } else { gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC); gpr_timespec next_try = gpr_backoff_step(&r->backoff_state, now); @@ -241,6 +245,7 @@ static void dns_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) { gpr_free(r->target_name); gpr_free(r->name_to_resolve); gpr_free(r->default_port); + grpc_channel_args_destroy(r->channel_args); gpr_free(r); } @@ -263,6 +268,7 @@ static grpc_resolver *dns_create(grpc_resolver_args *args, r->target_name = gpr_strdup(path); r->name_to_resolve = proxy_name == NULL ? gpr_strdup(path) : proxy_name; r->default_port = gpr_strdup(default_port); + r->channel_args = grpc_channel_args_copy(args->args); gpr_backoff_init(&r->backoff_state, BACKOFF_MULTIPLIER, BACKOFF_JITTER, BACKOFF_MIN_SECONDS * 1000, BACKOFF_MAX_SECONDS * 1000); return &r->base; diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index 28dd2569e81..eaaa2e47c28 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -55,6 +55,8 @@ typedef struct { char *target_name; /** the addresses that we've 'resolved' */ grpc_lb_addresses *addresses; + /** channel args */ + grpc_channel_args *channel_args; /** mutex guarding the rest of the state */ gpr_mu mu; /** have we published? */ @@ -121,7 +123,7 @@ static void sockaddr_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, *r->target_result = grpc_resolver_result_create( r->target_name, grpc_lb_addresses_copy(r->addresses, NULL /* user_data_copy */), - NULL /* lb_policy_name */, NULL /* lb_policy_args */); + NULL /* lb_policy_name */, grpc_channel_args_copy(r->channel_args)); grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; } @@ -132,6 +134,7 @@ static void sockaddr_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) { gpr_mu_destroy(&r->mu); gpr_free(r->target_name); grpc_lb_addresses_destroy(r->addresses, NULL /* user_data_destroy */); + grpc_channel_args_destroy(r->channel_args); gpr_free(r); } @@ -201,6 +204,7 @@ static grpc_resolver *sockaddr_create(grpc_resolver_args *args, memset(r, 0, sizeof(*r)); r->target_name = gpr_strdup(args->uri->path); r->addresses = addresses; + r->channel_args = grpc_channel_args_copy(args->args); gpr_mu_init(&r->mu); grpc_resolver_init(&r->base, &sockaddr_resolver_vtable); return &r->base; diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c index c2b59569fd3..df1bb161665 100644 --- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c +++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c @@ -52,6 +52,10 @@ #include "src/core/lib/surface/api_trace.h" #include "src/core/lib/surface/channel.h" +// +// connector +// + typedef struct { grpc_connector base; gpr_refcount refs; @@ -157,35 +161,20 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, static const grpc_connector_vtable connector_vtable = { connector_ref, connector_unref, connector_shutdown, connector_connect}; -typedef struct { - grpc_client_channel_factory base; - gpr_refcount refs; - grpc_channel_args *merge_args; -} client_channel_factory; +// +// client_channel_factory +// static void client_channel_factory_ref( - grpc_client_channel_factory *cc_factory) { - client_channel_factory *f = (client_channel_factory *)cc_factory; - gpr_ref(&f->refs); -} + grpc_client_channel_factory *cc_factory) {} static void client_channel_factory_unref( - grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory) { - client_channel_factory *f = (client_channel_factory *)cc_factory; - if (gpr_unref(&f->refs)) { - grpc_channel_args_destroy(f->merge_args); - gpr_free(f); - } -} + grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory) {} static grpc_subchannel *client_channel_factory_create_subchannel( grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory, grpc_subchannel_args *args) { - client_channel_factory *f = (client_channel_factory *)cc_factory; connector *c = gpr_malloc(sizeof(*c)); - grpc_channel_args *final_args = - grpc_channel_args_merge(args->args, f->merge_args); - grpc_subchannel *s; memset(c, 0, sizeof(*c)); c->base.vtable = &connector_vtable; gpr_ref_init(&c->refs, 1); @@ -197,10 +186,8 @@ static grpc_subchannel *client_channel_factory_create_subchannel( grpc_http_connect_handshaker_create(proxy_name, args->server_name)); gpr_free(proxy_name); } - args->args = final_args; - s = grpc_subchannel_create(exec_ctx, &c->base, args); + grpc_subchannel *s = grpc_subchannel_create(exec_ctx, &c->base, args); grpc_connector_unref(exec_ctx, &c->base); - grpc_channel_args_destroy(final_args); return s; } @@ -208,12 +195,9 @@ static grpc_channel *client_channel_factory_create_channel( grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory, const char *target, grpc_client_channel_type type, grpc_channel_args *args) { - client_channel_factory *f = (client_channel_factory *)cc_factory; - grpc_channel_args *final_args = grpc_channel_args_merge(args, f->merge_args); - grpc_channel *channel = grpc_channel_create(exec_ctx, target, final_args, + grpc_channel *channel = grpc_channel_create(exec_ctx, target, args, GRPC_CLIENT_CHANNEL, NULL); - grpc_channel_args_destroy(final_args); - grpc_resolver *resolver = grpc_resolver_create(target); + grpc_resolver *resolver = grpc_resolver_create(target, args); if (!resolver) { GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, "client_channel_factory_create_channel"); @@ -221,7 +205,7 @@ static grpc_channel *client_channel_factory_create_channel( } grpc_client_channel_finish_initialization( - exec_ctx, grpc_channel_get_channel_stack(channel), resolver, &f->base); + exec_ctx, grpc_channel_get_channel_stack(channel), resolver, cc_factory); GRPC_RESOLVER_UNREF(exec_ctx, resolver, "create_channel"); return channel; @@ -232,6 +216,9 @@ static const grpc_client_channel_factory_vtable client_channel_factory_vtable = client_channel_factory_create_subchannel, client_channel_factory_create_channel}; +static grpc_client_channel_factory client_channel_factory = { + &client_channel_factory_vtable}; + /* Create a client channel: Asynchronously: - resolve target - connect to it (trying alternatives as presented) @@ -245,16 +232,12 @@ grpc_channel *grpc_insecure_channel_create(const char *target, (target, args, reserved)); GPR_ASSERT(!reserved); - client_channel_factory *f = gpr_malloc(sizeof(*f)); - memset(f, 0, sizeof(*f)); - f->base.vtable = &client_channel_factory_vtable; - gpr_ref_init(&f->refs, 1); - f->merge_args = grpc_channel_args_copy(args); - + grpc_client_channel_factory *factory = + (grpc_client_channel_factory*)&client_channel_factory; grpc_channel *channel = client_channel_factory_create_channel( - &exec_ctx, &f->base, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, NULL); + &exec_ctx, factory, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, NULL); - grpc_client_channel_factory_unref(&exec_ctx, &f->base); + grpc_client_channel_factory_unref(&exec_ctx, factory); grpc_exec_ctx_finish(&exec_ctx); return channel != NULL ? channel : grpc_lame_client_channel_create( diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c index 31c54ff74c6..ac0a929de66 100644 --- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c @@ -54,6 +54,10 @@ #include "src/core/lib/surface/channel.h" #include "src/core/lib/tsi/transport_security_interface.h" +// +// connector +// + typedef struct { grpc_connector base; gpr_refcount refs; @@ -216,10 +220,13 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, static const grpc_connector_vtable connector_vtable = { connector_ref, connector_unref, connector_shutdown, connector_connect}; +// +// client_channel_factory +// + typedef struct { grpc_client_channel_factory base; gpr_refcount refs; - grpc_channel_args *merge_args; grpc_channel_security_connector *security_connector; } client_channel_factory; @@ -235,7 +242,6 @@ static void client_channel_factory_unref( if (gpr_unref(&f->refs)) { GRPC_SECURITY_CONNECTOR_UNREF(&f->security_connector->base, "client_channel_factory"); - grpc_channel_args_destroy(f->merge_args); gpr_free(f); } } @@ -245,9 +251,6 @@ static grpc_subchannel *client_channel_factory_create_subchannel( grpc_subchannel_args *args) { client_channel_factory *f = (client_channel_factory *)cc_factory; connector *c = gpr_malloc(sizeof(*c)); - grpc_channel_args *final_args = - grpc_channel_args_merge(args->args, f->merge_args); - grpc_subchannel *s; memset(c, 0, sizeof(*c)); c->base.vtable = &connector_vtable; c->security_connector = f->security_connector; @@ -261,10 +264,8 @@ static grpc_subchannel *client_channel_factory_create_subchannel( } gpr_mu_init(&c->mu); gpr_ref_init(&c->refs, 1); - args->args = final_args; - s = grpc_subchannel_create(exec_ctx, &c->base, args); + grpc_subchannel *s = grpc_subchannel_create(exec_ctx, &c->base, args); grpc_connector_unref(exec_ctx, &c->base); - grpc_channel_args_destroy(final_args); return s; } @@ -273,13 +274,9 @@ static grpc_channel *client_channel_factory_create_channel( const char *target, grpc_client_channel_type type, grpc_channel_args *args) { client_channel_factory *f = (client_channel_factory *)cc_factory; - - grpc_channel_args *final_args = grpc_channel_args_merge(args, f->merge_args); - grpc_channel *channel = grpc_channel_create(exec_ctx, target, final_args, + grpc_channel *channel = grpc_channel_create(exec_ctx, target, args, GRPC_CLIENT_CHANNEL, NULL); - grpc_channel_args_destroy(final_args); - - grpc_resolver *resolver = grpc_resolver_create(target); + grpc_resolver *resolver = grpc_resolver_create(target, args); if (resolver != NULL) { grpc_client_channel_finish_initialization( exec_ctx, grpc_channel_get_channel_stack(channel), resolver, &f->base); @@ -289,7 +286,6 @@ static grpc_channel *client_channel_factory_create_channel( "client_channel_factory_create_channel"); channel = NULL; } - GRPC_SECURITY_CONNECTOR_UNREF(&f->security_connector->base, "client_channel_factory_create_channel"); return channel; @@ -308,19 +304,13 @@ grpc_channel *grpc_secure_channel_create(grpc_channel_credentials *creds, const char *target, const grpc_channel_args *args, void *reserved) { - grpc_arg connector_arg; - grpc_channel_args *args_copy; - grpc_channel_args *new_args_from_connector; - grpc_channel_security_connector *security_connector; - client_channel_factory *f; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - GRPC_API_TRACE( "grpc_secure_channel_create(creds=%p, target=%s, args=%p, " "reserved=%p)", 4, (creds, target, args, reserved)); GPR_ASSERT(reserved == NULL); - + // Make sure security connector does not already exist in args. if (grpc_find_security_connector_in_args(args) != NULL) { gpr_log(GPR_ERROR, "Cannot set security context in channel args."); grpc_exec_ctx_finish(&exec_ctx); @@ -328,7 +318,9 @@ grpc_channel *grpc_secure_channel_create(grpc_channel_credentials *creds, target, GRPC_STATUS_INTERNAL, "Security connector exists in channel args."); } - + // Create security connector and construct new channel args. + grpc_channel_security_connector *security_connector; + grpc_channel_args *new_args_from_connector; if (grpc_channel_credentials_create_security_connector( creds, target, args, &security_connector, &new_args_from_connector) != GRPC_SECURITY_OK) { @@ -336,32 +328,28 @@ grpc_channel *grpc_secure_channel_create(grpc_channel_credentials *creds, return grpc_lame_client_channel_create( target, GRPC_STATUS_INTERNAL, "Failed to create security connector."); } - - connector_arg = grpc_security_connector_to_arg(&security_connector->base); - args_copy = grpc_channel_args_copy_and_add( + grpc_arg connector_arg = + grpc_security_connector_to_arg(&security_connector->base); + grpc_channel_args *new_args = grpc_channel_args_copy_and_add( new_args_from_connector != NULL ? new_args_from_connector : args, &connector_arg, 1); - - f = gpr_malloc(sizeof(*f)); - memset(f, 0, sizeof(*f)); - f->base.vtable = &client_channel_factory_vtable; - gpr_ref_init(&f->refs, 1); - - f->merge_args = grpc_channel_args_copy(args_copy); - grpc_channel_args_destroy(args_copy); if (new_args_from_connector != NULL) { grpc_channel_args_destroy(new_args_from_connector); } - + // Create client channel factory. + client_channel_factory *f = gpr_malloc(sizeof(*f)); + memset(f, 0, sizeof(*f)); + f->base.vtable = &client_channel_factory_vtable; + gpr_ref_init(&f->refs, 1); GRPC_SECURITY_CONNECTOR_REF(&security_connector->base, "grpc_secure_channel_create"); f->security_connector = security_connector; - + // Create channel. grpc_channel *channel = client_channel_factory_create_channel( - &exec_ctx, &f->base, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, NULL); - + &exec_ctx, &f->base, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, new_args); + // Clean up. + grpc_channel_args_destroy(new_args); grpc_client_channel_factory_unref(&exec_ctx, &f->base); grpc_exec_ctx_finish(&exec_ctx); - return channel; /* may be NULL */ } From 5124452ae5f8fe126e2fe4aed5bd997649418d2d Mon Sep 17 00:00:00 2001 From: Tim Ryan Date: Mon, 26 Sep 2016 19:11:06 -0400 Subject: [PATCH 174/286] Compiles with npm install --debug option. --- src/node/ext/node_grpc.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc index 745b5023d59..848c601587f 100644 --- a/src/node/ext/node_grpc.cc +++ b/src/node/ext/node_grpc.cc @@ -261,10 +261,10 @@ void InitLogConstants(Local exports) { Nan::HandleScope scope; Local log_verbosity = Nan::New(); Nan::Set(exports, Nan::New("logVerbosity").ToLocalChecked(), log_verbosity); - Local DEBUG(Nan::New(GPR_LOG_SEVERITY_DEBUG)); - Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), DEBUG); - Local INFO(Nan::New(GPR_LOG_SEVERITY_INFO)); - Nan::Set(log_verbosity, Nan::New("INFO").ToLocalChecked(), INFO); + Local LOG_DEBUG(Nan::New(GPR_LOG_SEVERITY_DEBUG)); + Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), LOG_DEBUG); + Local LOG_INFO(Nan::New(GPR_LOG_SEVERITY_INFO)); + Nan::Set(log_verbosity, Nan::New("INFO").ToLocalChecked(), LOG_INFO); Local LOG_ERROR(Nan::New(GPR_LOG_SEVERITY_ERROR)); Nan::Set(log_verbosity, Nan::New("ERROR").ToLocalChecked(), LOG_ERROR); } From dbb58b8c1d64824404dfaec267c44313cf2bef7d Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 21 Oct 2016 10:29:38 -0700 Subject: [PATCH 175/286] Fix BoringSSL podspec template --- templates/gRPC-Core.podspec.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template index dff7ce07d6d..3c8e7edab87 100644 --- a/templates/gRPC-Core.podspec.template +++ b/templates/gRPC-Core.podspec.template @@ -147,7 +147,7 @@ ss.header_mappings_dir = '.' ss.libraries = 'z' ss.dependency "#{s.name}/Interface", version - ss.dependency 'BoringSSL', '~> 6.0' + ss.dependency 'BoringSSL', '~> 7.0' # To save you from scrolling, this is the last part of the podspec. ss.source_files = ${ruby_multiline_list(grpc_private_files(libs), 22)} From 16883a37efa49ef2d58ea57c6dbbba66497f2232 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 21 Oct 2016 10:30:58 -0700 Subject: [PATCH 176/286] Set user data vtable when creating grpc_lb_addresses. --- .../ext/client_config/lb_policy_factory.c | 55 +++++++++++++++---- .../ext/client_config/lb_policy_factory.h | 23 ++++++-- src/core/ext/client_config/resolver_result.c | 2 +- src/core/ext/lb_policy/grpclb/grpclb.c | 27 ++++++--- .../ext/resolver/dns/native/dns_resolver.c | 4 +- .../ext/resolver/sockaddr/sockaddr_resolver.c | 10 ++-- test/core/end2end/fake_resolver.c | 10 ++-- 7 files changed, 93 insertions(+), 38 deletions(-) diff --git a/src/core/ext/client_config/lb_policy_factory.c b/src/core/ext/client_config/lb_policy_factory.c index c17af91a09e..55e346180de 100644 --- a/src/core/ext/client_config/lb_policy_factory.c +++ b/src/core/ext/client_config/lb_policy_factory.c @@ -38,19 +38,20 @@ #include "src/core/ext/client_config/lb_policy_factory.h" -grpc_lb_addresses* grpc_lb_addresses_create(size_t num_addresses) { +grpc_lb_addresses* grpc_lb_addresses_create( + size_t num_addresses, const grpc_lb_user_data_vtable* user_data_vtable) { grpc_lb_addresses* addresses = gpr_malloc(sizeof(grpc_lb_addresses)); addresses->num_addresses = num_addresses; + addresses->user_data_vtable = user_data_vtable; const size_t addresses_size = sizeof(grpc_lb_address) * num_addresses; addresses->addresses = gpr_malloc(addresses_size); memset(addresses->addresses, 0, addresses_size); return addresses; } -grpc_lb_addresses* grpc_lb_addresses_copy(grpc_lb_addresses* addresses, - void* (*user_data_copy)(void*)) { - grpc_lb_addresses* new_addresses = - grpc_lb_addresses_create(addresses->num_addresses); +grpc_lb_addresses* grpc_lb_addresses_copy(const grpc_lb_addresses* addresses) { + grpc_lb_addresses* new_addresses = grpc_lb_addresses_create( + addresses->num_addresses, addresses->user_data_vtable); memcpy(new_addresses->addresses, addresses->addresses, sizeof(grpc_lb_address) * addresses->num_addresses); for (size_t i = 0; i < addresses->num_addresses; ++i) { @@ -58,9 +59,10 @@ grpc_lb_addresses* grpc_lb_addresses_copy(grpc_lb_addresses* addresses, new_addresses->addresses[i].balancer_name = gpr_strdup(new_addresses->addresses[i].balancer_name); } - if (user_data_copy != NULL) { + if (new_addresses->addresses[i].user_data != NULL) { new_addresses->addresses[i].user_data = - user_data_copy(new_addresses->addresses[i].user_data); + addresses->user_data_vtable->copy( + new_addresses->addresses[i].user_data); } } return new_addresses; @@ -71,6 +73,7 @@ void grpc_lb_addresses_set_address(grpc_lb_addresses* addresses, size_t index, bool is_balancer, char* balancer_name, void* user_data) { GPR_ASSERT(index < addresses->num_addresses); + if (user_data != NULL) GPR_ASSERT(addresses->user_data_vtable != NULL); grpc_lb_address* target = &addresses->addresses[index]; memcpy(target->address.addr, address, address_len); target->address.len = address_len; @@ -79,12 +82,42 @@ void grpc_lb_addresses_set_address(grpc_lb_addresses* addresses, size_t index, target->user_data = user_data; } -void grpc_lb_addresses_destroy(grpc_lb_addresses* addresses, - void (*user_data_destroy)(void*)) { +int grpc_lb_addresses_cmp(const grpc_lb_addresses* addresses1, + const grpc_lb_addresses* addresses2) { + if (addresses1->num_addresses > addresses2->num_addresses) return 1; + if (addresses1->num_addresses < addresses2->num_addresses) return -1; + if (addresses1->user_data_vtable > addresses2->user_data_vtable) return 1; + if (addresses1->user_data_vtable < addresses2->user_data_vtable) return -1; + for (size_t i = 0; i < addresses1->num_addresses; ++i) { + const grpc_lb_address* target1 = &addresses1->addresses[i]; + const grpc_lb_address* target2 = &addresses2->addresses[i]; + if (target1->address.len > target2->address.len) return 1; + if (target1->address.len < target2->address.len) return -1; + int retval = memcmp( + target1->address.addr, target2->address.addr, target1->address.len); + if (retval != 0) return retval; + if (target1->is_balancer > target2->is_balancer) return 1; + if (target1->is_balancer < target2->is_balancer) return -1; + const char* balancer_name1 = target1->balancer_name != NULL + ? target1->balancer_name : ""; + const char* balancer_name2 = target2->balancer_name != NULL + ? target2->balancer_name : ""; + retval = strcmp(balancer_name1, balancer_name2); + if (retval != 0) return retval; + if (addresses1->user_data_vtable != NULL) { + retval = addresses1->user_data_vtable->cmp(target1->user_data, + target2->user_data); + if (retval != 0) return retval; + } + } + return 0; +} + +void grpc_lb_addresses_destroy(grpc_lb_addresses* addresses) { for (size_t i = 0; i < addresses->num_addresses; ++i) { gpr_free(addresses->addresses[i].balancer_name); - if (user_data_destroy != NULL) { - user_data_destroy(addresses->addresses[i].user_data); + if (addresses->addresses[i].user_data != NULL) { + addresses->user_data_vtable->destroy(addresses->addresses[i].user_data); } } gpr_free(addresses->addresses); diff --git a/src/core/ext/client_config/lb_policy_factory.h b/src/core/ext/client_config/lb_policy_factory.h index 4e11501e019..61c3f419d13 100644 --- a/src/core/ext/client_config/lb_policy_factory.h +++ b/src/core/ext/client_config/lb_policy_factory.h @@ -59,19 +59,27 @@ typedef struct grpc_lb_address { void *user_data; } grpc_lb_address; +typedef struct grpc_lb_user_data_vtable { + void* (*copy)(void*); + void (*destroy)(void*); + int (*cmp)(void*, void*); +} grpc_lb_user_data_vtable; + typedef struct grpc_lb_addresses { size_t num_addresses; grpc_lb_address *addresses; + const grpc_lb_user_data_vtable *user_data_vtable; } grpc_lb_addresses; /** Returns a grpc_addresses struct with enough space for - * \a num_addresses addresses. */ -grpc_lb_addresses *grpc_lb_addresses_create(size_t num_addresses); + \a num_addresses addresses. The \a user_data_vtable argument may be + NULL if no user data will be added. */ +grpc_lb_addresses *grpc_lb_addresses_create( + size_t num_addresses, const grpc_lb_user_data_vtable* user_data_vtable); /** Creates a copy of \a addresses. If \a user_data_copy is not NULL, * it will be invoked to copy the \a user_data field of each address. */ -grpc_lb_addresses *grpc_lb_addresses_copy(grpc_lb_addresses *addresses, - void *(*user_data_copy)(void *)); +grpc_lb_addresses *grpc_lb_addresses_copy(const grpc_lb_addresses *addresses); /** Sets the value of the address at index \a index of \a addresses. * \a address is a socket address of length \a address_len. @@ -81,10 +89,13 @@ void grpc_lb_addresses_set_address(grpc_lb_addresses *addresses, size_t index, bool is_balancer, char *balancer_name, void *user_data); +/** Compares \a addresses1 and \a addresses2. */ +int grpc_lb_addresses_cmp(const grpc_lb_addresses *addresses1, + const grpc_lb_addresses *addresses2); + /** Destroys \a addresses. If \a user_data_destroy is not NULL, it will * be invoked to destroy the \a user_data field of each address. */ -void grpc_lb_addresses_destroy(grpc_lb_addresses *addresses, - void (*user_data_destroy)(void *)); +void grpc_lb_addresses_destroy(grpc_lb_addresses *addresses); /** Arguments passed to LB policies. */ /* TODO(roth, ctiller): Consider replacing this struct with diff --git a/src/core/ext/client_config/resolver_result.c b/src/core/ext/client_config/resolver_result.c index 5f3600e7d96..e6a6f2da620 100644 --- a/src/core/ext/client_config/resolver_result.c +++ b/src/core/ext/client_config/resolver_result.c @@ -67,7 +67,7 @@ void grpc_resolver_result_unref(grpc_exec_ctx* exec_ctx, grpc_resolver_result* result) { if (gpr_unref(&result->refs)) { gpr_free(result->server_name); - grpc_lb_addresses_destroy(result->addresses, NULL /* user_data_destroy */); + grpc_lb_addresses_destroy(result->addresses); gpr_free(result->lb_policy_name); grpc_channel_args_destroy(result->channel_args); gpr_free(result); diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index 663f1d33004..1467508d6d0 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -338,6 +338,21 @@ static bool is_server_valid(const grpc_grpclb_server *server, size_t idx, return true; } +/* vtable for LB tokens in grpc_lb_addresses. */ +static void* lb_token_copy(void *token) { + return token == NULL ? NULL : GRPC_MDELEM_REF(token); +} +static void lb_token_destroy(void *token) { + if (token != NULL) GRPC_MDELEM_UNREF(token); +} +static int lb_token_cmp(void* token1, void* token2) { + if (token1 > token2) return 1; + if (token1 < token2) return -1; + return 0; +} +static const grpc_lb_user_data_vtable lb_token_vtable = { + lb_token_copy, lb_token_destroy, lb_token_cmp}; + /* Returns addresses extracted from \a serverlist. */ static grpc_lb_addresses *process_serverlist( const grpc_grpclb_serverlist *serverlist) { @@ -349,7 +364,8 @@ static grpc_lb_addresses *process_serverlist( } if (num_valid == 0) return NULL; - grpc_lb_addresses *lb_addresses = grpc_lb_addresses_create(num_valid); + grpc_lb_addresses *lb_addresses = + grpc_lb_addresses_create(num_valid, &lb_token_vtable); /* second pass: actually populate the addresses and LB tokens (aka user data * to the outside world) to be read by the RR policy during its creation. @@ -410,11 +426,6 @@ static grpc_lb_addresses *process_serverlist( return lb_addresses; } -/* A plugin for grpc_lb_addresses_destroy that unrefs the LB token metadata. */ -static void lb_token_destroy(void *token) { - if (token != NULL) GRPC_MDELEM_UNREF(token); -} - /* perform a pick over \a rr_policy. Given that a pick can return immediately * (ignoring its completion callback) we need to perform the cleanups this * callback would be otherwise resposible for */ @@ -465,7 +476,7 @@ static grpc_lb_policy *create_rr_locked( if (glb_policy->addresses != NULL) { /* dispose of the previous version */ - grpc_lb_addresses_destroy(glb_policy->addresses, lb_token_destroy); + grpc_lb_addresses_destroy(glb_policy->addresses); } glb_policy->addresses = args.addresses; @@ -662,7 +673,7 @@ static void glb_destroy(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { grpc_grpclb_destroy_serverlist(glb_policy->serverlist); } gpr_mu_destroy(&glb_policy->mu); - grpc_lb_addresses_destroy(glb_policy->addresses, lb_token_destroy); + grpc_lb_addresses_destroy(glb_policy->addresses); gpr_free(glb_policy); } diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index a4f6ed8c4e3..0694d8b6b77 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -170,8 +170,8 @@ static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, GPR_ASSERT(r->resolving); r->resolving = false; if (r->addresses != NULL) { - grpc_lb_addresses *addresses = - grpc_lb_addresses_create(r->addresses->naddrs); + grpc_lb_addresses *addresses = grpc_lb_addresses_create( + r->addresses->naddrs, NULL /* user_data_vtable */); for (size_t i = 0; i < r->addresses->naddrs; ++i) { grpc_lb_addresses_set_address( addresses, i, &r->addresses->addrs[i].addr, diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index eaaa2e47c28..d34094f8e8b 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -121,8 +121,7 @@ static void sockaddr_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, if (r->next_completion != NULL && !r->published) { r->published = true; *r->target_result = grpc_resolver_result_create( - r->target_name, - grpc_lb_addresses_copy(r->addresses, NULL /* user_data_copy */), + r->target_name, grpc_lb_addresses_copy(r->addresses), NULL /* lb_policy_name */, grpc_channel_args_copy(r->channel_args)); grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; @@ -133,7 +132,7 @@ static void sockaddr_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) { sockaddr_resolver *r = (sockaddr_resolver *)gr; gpr_mu_destroy(&r->mu); gpr_free(r->target_name); - grpc_lb_addresses_destroy(r->addresses, NULL /* user_data_destroy */); + grpc_lb_addresses_destroy(r->addresses); grpc_channel_args_destroy(r->channel_args); gpr_free(r); } @@ -178,7 +177,8 @@ static grpc_resolver *sockaddr_create(grpc_resolver_args *args, gpr_slice_buffer path_parts; gpr_slice_buffer_init(&path_parts); gpr_slice_split(path_slice, ",", &path_parts); - grpc_lb_addresses *addresses = grpc_lb_addresses_create(path_parts.count); + grpc_lb_addresses *addresses = grpc_lb_addresses_create( + path_parts.count, NULL /* user_data_vtable */); bool errors_found = false; for (size_t i = 0; i < addresses->num_addresses; i++) { grpc_uri ith_uri = *args->uri; @@ -196,7 +196,7 @@ static grpc_resolver *sockaddr_create(grpc_resolver_args *args, gpr_slice_buffer_destroy(&path_parts); gpr_slice_unref(path_slice); if (errors_found) { - grpc_lb_addresses_destroy(addresses, NULL /* user_data_destroy */); + grpc_lb_addresses_destroy(addresses); return NULL; } /* Instantiate resolver. */ diff --git a/test/core/end2end/fake_resolver.c b/test/core/end2end/fake_resolver.c index 32dc9e2711d..67337f4f841 100644 --- a/test/core/end2end/fake_resolver.c +++ b/test/core/end2end/fake_resolver.c @@ -78,7 +78,7 @@ static void fake_resolver_destroy(grpc_exec_ctx* exec_ctx, grpc_resolver* gr) { fake_resolver* r = (fake_resolver*)gr; gpr_mu_destroy(&r->mu); gpr_free(r->target_name); - grpc_lb_addresses_destroy(r->addresses, NULL /* user_data_destroy */); + grpc_lb_addresses_destroy(r->addresses); gpr_free(r->lb_policy_name); grpc_method_config_table_unref(r->method_config_table); gpr_free(r); @@ -107,8 +107,7 @@ static void fake_resolver_maybe_finish_next_locked(grpc_exec_ctx* exec_ctx, lb_policy_args = grpc_channel_args_copy_and_add(NULL /* src */, &arg, 1); } *r->target_result = grpc_resolver_result_create( - r->target_name, - grpc_lb_addresses_copy(r->addresses, NULL /* user_data_copy */), + r->target_name, grpc_lb_addresses_copy(r->addresses), r->lb_policy_name, lb_policy_args); grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; @@ -168,7 +167,8 @@ static grpc_resolver* fake_resolver_create(grpc_resolver_factory* factory, gpr_slice_buffer path_parts; gpr_slice_buffer_init(&path_parts); gpr_slice_split(path_slice, ",", &path_parts); - grpc_lb_addresses* addresses = grpc_lb_addresses_create(path_parts.count); + grpc_lb_addresses* addresses = grpc_lb_addresses_create( + path_parts.count, NULL /* user_data_vtable */); bool errors_found = false; for (size_t i = 0; i < addresses->num_addresses; i++) { grpc_uri ith_uri = *args->uri; @@ -187,7 +187,7 @@ static grpc_resolver* fake_resolver_create(grpc_resolver_factory* factory, gpr_slice_buffer_destroy(&path_parts); gpr_slice_unref(path_slice); if (errors_found) { - grpc_lb_addresses_destroy(addresses, NULL /* user_data_destroy */); + grpc_lb_addresses_destroy(addresses); return NULL; } // Construct method config table. From 3686996786faa2671e487707c78b32c0e4a63d80 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 21 Oct 2016 10:43:45 -0700 Subject: [PATCH 177/286] Encode server name, LB policy name, and addresses in channel args. --- include/grpc/impl/codegen/grpc_types.h | 7 +++++ .../ext/client_config/lb_policy_factory.c | 22 ++++++++++++++++ .../ext/client_config/lb_policy_factory.h | 4 +++ .../ext/resolver/dns/native/dns_resolver.c | 14 +++++++--- .../ext/resolver/sockaddr/sockaddr_resolver.c | 13 ++++++++-- test/core/end2end/fake_resolver.c | 26 ++++++++++++++++--- 6 files changed, 77 insertions(+), 9 deletions(-) diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index a3fc683e579..0be7ab2ad23 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -204,6 +204,13 @@ typedef struct { /** Service config data, to be passed to subchannels. Not intended for external use. */ #define GRPC_ARG_SERVICE_CONFIG "grpc.service_config" +/** LB policy name. */ +#define GRPC_ARG_LB_POLICY_NAME "grpc.lb_policy_name" +/** Server name. Not intended for external use. */ +#define GRPC_ARG_SERVER_NAME "grpc.server_name" +/** Resolved addresses in a form used by the LB policy. + Not intended for external use. */ +#define GRPC_ARG_LB_ADDRESSES "grpc.lb_addresses" /** \} */ /** Result of a grpc call. If the caller satisfies the prerequisites of a diff --git a/src/core/ext/client_config/lb_policy_factory.c b/src/core/ext/client_config/lb_policy_factory.c index 55e346180de..676fdaf555f 100644 --- a/src/core/ext/client_config/lb_policy_factory.c +++ b/src/core/ext/client_config/lb_policy_factory.c @@ -124,6 +124,28 @@ void grpc_lb_addresses_destroy(grpc_lb_addresses* addresses) { gpr_free(addresses); } +static void* lb_addresses_copy(void* addresses) { + return grpc_lb_addresses_copy(addresses); +} +static void lb_addresses_destroy(void* addresses) { + grpc_lb_addresses_destroy(addresses); +} +static int lb_addresses_cmp(void* addresses1, void* addresses2) { + return grpc_lb_addresses_cmp(addresses1, addresses2); +} +static const grpc_arg_pointer_vtable lb_addresses_arg_vtable = { + lb_addresses_copy, lb_addresses_destroy, lb_addresses_cmp}; + +grpc_arg grpc_lb_addresses_create_channel_arg( + const grpc_lb_addresses *addresses) { + grpc_arg arg; + arg.type = GRPC_ARG_POINTER; + arg.key = GRPC_ARG_LB_ADDRESSES; + arg.value.pointer.p = (void*)addresses; + arg.value.pointer.vtable = &lb_addresses_arg_vtable; + return arg; +} + void grpc_lb_policy_factory_ref(grpc_lb_policy_factory* factory) { factory->vtable->ref(factory); } diff --git a/src/core/ext/client_config/lb_policy_factory.h b/src/core/ext/client_config/lb_policy_factory.h index 61c3f419d13..f0798a31674 100644 --- a/src/core/ext/client_config/lb_policy_factory.h +++ b/src/core/ext/client_config/lb_policy_factory.h @@ -97,6 +97,10 @@ int grpc_lb_addresses_cmp(const grpc_lb_addresses *addresses1, * be invoked to destroy the \a user_data field of each address. */ void grpc_lb_addresses_destroy(grpc_lb_addresses *addresses); +/** Returns a channel arg containing \a addresses. */ +grpc_arg grpc_lb_addresses_create_channel_arg( + const grpc_lb_addresses *addresses); + /** Arguments passed to LB policies. */ /* TODO(roth, ctiller): Consider replacing this struct with grpc_channel_args. See comment in resolver_result.h for details. */ diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index 0694d8b6b77..039fb2225d5 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -55,6 +55,7 @@ typedef struct { /** base class: must be first */ grpc_resolver base; /** target name */ +// FIXME: remove target_name when resolver_result goes away char *target_name; /** name to resolve (usually the same as target_name) */ char *name_to_resolve; @@ -178,10 +179,12 @@ static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, r->addresses->addrs[i].len, false /* is_balancer */, NULL /* balancer_name */, NULL /* user_data */); } + grpc_arg new_arg = grpc_lb_addresses_create_channel_arg(addresses); + grpc_channel_args* args = + grpc_channel_args_copy_and_add(r->channel_args, &new_arg, 1); grpc_resolved_addresses_destroy(r->addresses); result = grpc_resolver_result_create( - r->target_name, addresses, NULL /* lb_policy_name */, - grpc_channel_args_copy(r->channel_args)); + r->target_name, addresses, NULL /* lb_policy_name */, args); } else { gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC); gpr_timespec next_try = gpr_backoff_step(&r->backoff_state, now); @@ -268,7 +271,12 @@ static grpc_resolver *dns_create(grpc_resolver_args *args, r->target_name = gpr_strdup(path); r->name_to_resolve = proxy_name == NULL ? gpr_strdup(path) : proxy_name; r->default_port = gpr_strdup(default_port); - r->channel_args = grpc_channel_args_copy(args->args); + grpc_arg server_name_arg; + server_name_arg.type = GRPC_ARG_STRING; + server_name_arg.key = GRPC_ARG_SERVER_NAME; + server_name_arg.value.string = (char*)path; + r->channel_args = + grpc_channel_args_copy_and_add(args->args, &server_name_arg, 1); gpr_backoff_init(&r->backoff_state, BACKOFF_MULTIPLIER, BACKOFF_JITTER, BACKOFF_MIN_SECONDS * 1000, BACKOFF_MAX_SECONDS * 1000); return &r->base; diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index d34094f8e8b..93a34bf305f 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -52,6 +52,7 @@ typedef struct { /** base class: must be first */ grpc_resolver base; /** the path component of the uri passed in */ +// FIXME: remove target_name when resolver_result goes away char *target_name; /** the addresses that we've 'resolved' */ grpc_lb_addresses *addresses; @@ -120,9 +121,12 @@ static void sockaddr_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, sockaddr_resolver *r) { if (r->next_completion != NULL && !r->published) { r->published = true; + grpc_arg arg = grpc_lb_addresses_create_channel_arg(r->addresses); + grpc_channel_args* args = + grpc_channel_args_copy_and_add(r->channel_args, &arg, 1); *r->target_result = grpc_resolver_result_create( r->target_name, grpc_lb_addresses_copy(r->addresses), - NULL /* lb_policy_name */, grpc_channel_args_copy(r->channel_args)); + NULL /* lb_policy_name */, args); grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; } @@ -204,7 +208,12 @@ static grpc_resolver *sockaddr_create(grpc_resolver_args *args, memset(r, 0, sizeof(*r)); r->target_name = gpr_strdup(args->uri->path); r->addresses = addresses; - r->channel_args = grpc_channel_args_copy(args->args); + grpc_arg server_name_arg; + server_name_arg.type = GRPC_ARG_STRING; + server_name_arg.key = GRPC_ARG_SERVER_NAME; + server_name_arg.value.string = args->uri->path; + r->channel_args = + grpc_channel_args_copy_and_add(args->args, &server_name_arg, 1); gpr_mu_init(&r->mu); grpc_resolver_init(&r->base, &sockaddr_resolver_vtable); return &r->base; diff --git a/test/core/end2end/fake_resolver.c b/test/core/end2end/fake_resolver.c index 67337f4f841..f77f3eb27d2 100644 --- a/test/core/end2end/fake_resolver.c +++ b/test/core/end2end/fake_resolver.c @@ -59,7 +59,9 @@ typedef struct { grpc_resolver base; // passed-in parameters +// FIXME: remove target_name once resolver_result is removed char* target_name; // the path component of the uri passed in + grpc_channel_args* channel_args; grpc_lb_addresses* addresses; char* lb_policy_name; grpc_method_config_table* method_config_table; @@ -78,6 +80,7 @@ static void fake_resolver_destroy(grpc_exec_ctx* exec_ctx, grpc_resolver* gr) { fake_resolver* r = (fake_resolver*)gr; gpr_mu_destroy(&r->mu); gpr_free(r->target_name); + grpc_channel_args_destroy(r->channel_args); grpc_lb_addresses_destroy(r->addresses); gpr_free(r->lb_policy_name); grpc_method_config_table_unref(r->method_config_table); @@ -100,15 +103,24 @@ static void fake_resolver_maybe_finish_next_locked(grpc_exec_ctx* exec_ctx, fake_resolver* r) { if (r->next_completion != NULL && !r->published) { r->published = true; - grpc_channel_args* lb_policy_args = NULL; + grpc_arg new_args[3]; + size_t num_args = 0; + new_args[num_args++] = grpc_lb_addresses_create_channel_arg(r->addresses); if (r->method_config_table != NULL) { - const grpc_arg arg = + new_args[num_args++] = grpc_method_config_table_create_channel_arg(r->method_config_table); - lb_policy_args = grpc_channel_args_copy_and_add(NULL /* src */, &arg, 1); } + if (r->lb_policy_name != NULL) { + new_args[num_args].type = GRPC_ARG_STRING; + new_args[num_args].key = GRPC_ARG_LB_POLICY_NAME; + new_args[num_args].value.string = r->lb_policy_name; + ++num_args; + } + grpc_channel_args* args = + grpc_channel_args_copy_and_add(r->channel_args, new_args, num_args); *r->target_result = grpc_resolver_result_create( r->target_name, grpc_lb_addresses_copy(r->addresses), - r->lb_policy_name, lb_policy_args); + r->lb_policy_name, args); grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; } @@ -233,6 +245,12 @@ static grpc_resolver* fake_resolver_create(grpc_resolver_factory* factory, fake_resolver* r = gpr_malloc(sizeof(fake_resolver)); memset(r, 0, sizeof(*r)); r->target_name = gpr_strdup(args->uri->path); + grpc_arg server_name_arg; + server_name_arg.type = GRPC_ARG_STRING; + server_name_arg.key = GRPC_ARG_SERVER_NAME; + server_name_arg.value.string = r->target_name; + r->channel_args = + grpc_channel_args_copy_and_add(args->args, &server_name_arg, 1); r->addresses = addresses; r->lb_policy_name = gpr_strdup(grpc_uri_get_query_arg(args->uri, "lb_policy")); From 153eaa7abac3a2e056f7a351dd03faf7f13b60f2 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 21 Oct 2016 13:52:36 -0700 Subject: [PATCH 178/286] s/BUFFER_POOL/RESOURCE_QUOTA/g --- include/grpc/impl/codegen/grpc_types.h | 2 +- src/core/lib/http/httpcli.c | 2 +- src/core/lib/iomgr/resource_quota.c | 4 ++-- src/core/lib/iomgr/tcp_client_posix.c | 3 ++- src/core/lib/iomgr/tcp_server_posix.c | 4 ++-- src/cpp/common/channel_arguments.cc | 3 ++- src/cpp/server/server_builder.cc | 2 +- test/core/end2end/tests/buffer_pool_server.c | 2 +- test/core/end2end/tests/resource_quota_server.c | 2 +- 9 files changed, 13 insertions(+), 11 deletions(-) diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index c04c2cfa59c..d2dce0d5113 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -203,7 +203,7 @@ typedef struct { #define GRPC_ARG_ALLOW_REUSEPORT "grpc.so_reuseport" /** If non-zero, a pointer to a buffer pool (use grpc_resource_quota_arg_vtable to fetch an appropriate pointer arg vtable */ -#define GRPC_ARG_BUFFER_POOL "grpc.resource_quota" +#define GRPC_ARG_RESOURCE_QUOTA "grpc.resource_quota" /** Service config data, to be passed to subchannels. Not intended for external use. */ #define GRPC_ARG_SERVICE_CONFIG "grpc.service_config" diff --git a/src/core/lib/http/httpcli.c b/src/core/lib/http/httpcli.c index bdc18ac4bff..26baae1eaba 100644 --- a/src/core/lib/http/httpcli.c +++ b/src/core/lib/http/httpcli.c @@ -227,7 +227,7 @@ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, addr = &req->addresses->addrs[req->next_address++]; grpc_closure_init(&req->connected, on_connected, req); grpc_arg arg; - arg.key = GRPC_ARG_BUFFER_POOL; + arg.key = GRPC_ARG_RESOURCE_QUOTA; arg.type = GRPC_ARG_POINTER; arg.value.pointer.p = req->resource_quota; arg.value.pointer.vtable = grpc_resource_quota_arg_vtable(); diff --git a/src/core/lib/iomgr/resource_quota.c b/src/core/lib/iomgr/resource_quota.c index 89c795c0ec1..6be9bb48566 100644 --- a/src/core/lib/iomgr/resource_quota.c +++ b/src/core/lib/iomgr/resource_quota.c @@ -497,12 +497,12 @@ void grpc_resource_quota_resize(grpc_resource_quota *resource_quota, grpc_resource_quota *grpc_resource_quota_from_channel_args( const grpc_channel_args *channel_args) { for (size_t i = 0; i < channel_args->num_args; i++) { - if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_BUFFER_POOL)) { + if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) { if (channel_args->args[i].type == GRPC_ARG_POINTER) { return grpc_resource_quota_internal_ref( channel_args->args[i].value.pointer.p); } else { - gpr_log(GPR_DEBUG, GRPC_ARG_BUFFER_POOL " should be a pointer"); + gpr_log(GPR_DEBUG, GRPC_ARG_RESOURCE_QUOTA " should be a pointer"); } } } diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index e74a696c2fd..500c9881460 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -134,7 +134,8 @@ grpc_endpoint *grpc_tcp_client_create_from_fd( 8 * 1024 * 1024}; tcp_read_chunk_size = (size_t)grpc_channel_arg_get_integer( &channel_args->args[i], options); - } else if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_BUFFER_POOL)) { + } else if (0 == + strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) { grpc_resource_quota_internal_unref(exec_ctx, resource_quota); resource_quota = grpc_resource_quota_internal_ref( channel_args->args[i].value.pointer.p); diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index b2eb89f429a..648736caa9b 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -175,7 +175,7 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, return GRPC_ERROR_CREATE(GRPC_ARG_ALLOW_REUSEPORT " must be an integer"); } - } else if (0 == strcmp(GRPC_ARG_BUFFER_POOL, args->args[i].key)) { + } else if (0 == strcmp(GRPC_ARG_RESOURCE_QUOTA, args->args[i].key)) { if (args->args[i].type == GRPC_ARG_POINTER) { grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); s->resource_quota = @@ -183,7 +183,7 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, } else { grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); gpr_free(s); - return GRPC_ERROR_CREATE(GRPC_ARG_BUFFER_POOL + return GRPC_ERROR_CREATE(GRPC_ARG_RESOURCE_QUOTA " must be a pointer to a buffer pool"); } } diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc index 5462e0d72ab..d136d49c89f 100644 --- a/src/cpp/common/channel_arguments.cc +++ b/src/cpp/common/channel_arguments.cc @@ -116,7 +116,8 @@ void ChannelArguments::SetUserAgentPrefix( void ChannelArguments::SetResourceQuota( const grpc::ResourceQuota& resource_quota) { - SetPointerWithVtable(GRPC_ARG_BUFFER_POOL, resource_quota.c_resource_quota(), + SetPointerWithVtable(GRPC_ARG_RESOURCE_QUOTA, + resource_quota.c_resource_quota(), grpc_resource_quota_arg_vtable()); } diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 68df1d11e1e..953a4337ece 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -197,7 +197,7 @@ std::unique_ptr ServerBuilder::BuildAndStart() { maybe_default_compression_algorithm_.algorithm); } if (resource_quota_ != nullptr) { - args.SetPointerWithVtable(GRPC_ARG_BUFFER_POOL, resource_quota_, + args.SetPointerWithVtable(GRPC_ARG_RESOURCE_QUOTA, resource_quota_, grpc_resource_quota_arg_vtable()); } std::unique_ptr server(new Server(thread_pool.release(), true, diff --git a/test/core/end2end/tests/buffer_pool_server.c b/test/core/end2end/tests/buffer_pool_server.c index 81850aea58f..beda4f7487a 100644 --- a/test/core/end2end/tests/buffer_pool_server.c +++ b/test/core/end2end/tests/buffer_pool_server.c @@ -119,7 +119,7 @@ void resource_quota_server(grpc_end2end_test_config config) { #define SERVER_END_BASE_TAG 4000 grpc_arg arg; - arg.key = GRPC_ARG_BUFFER_POOL; + arg.key = GRPC_ARG_RESOURCE_QUOTA; arg.type = GRPC_ARG_POINTER; arg.value.pointer.p = resource_quota; arg.value.pointer.vtable = grpc_resource_quota_arg_vtable(); diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c index 02fef94f677..a2431eed7e5 100644 --- a/test/core/end2end/tests/resource_quota_server.c +++ b/test/core/end2end/tests/resource_quota_server.c @@ -119,7 +119,7 @@ void resource_quota_server(grpc_end2end_test_config config) { #define SERVER_END_BASE_TAG 4000 grpc_arg arg; - arg.key = GRPC_ARG_BUFFER_POOL; + arg.key = GRPC_ARG_RESOURCE_QUOTA; arg.type = GRPC_ARG_POINTER; arg.value.pointer.p = resource_quota; arg.value.pointer.vtable = grpc_resource_quota_arg_vtable(); From 5bd7be0c55d4149cc6e2d5ee90f33fe5f7f6a7de Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 21 Oct 2016 14:19:50 -0700 Subject: [PATCH 179/286] Change LB policies to get their input from channel args. --- src/core/ext/client_config/client_channel.c | 10 ++- src/core/ext/lb_policy/grpclb/grpclb.c | 61 +++++++++++++++---- .../ext/lb_policy/pick_first/pick_first.c | 31 +++++++--- .../ext/lb_policy/round_robin/round_robin.c | 30 ++++++--- src/core/lib/channel/channel_args.c | 55 ++++++++++++++--- src/core/lib/channel/channel_args.h | 11 ++++ 6 files changed, 155 insertions(+), 43 deletions(-) diff --git a/src/core/ext/client_config/client_channel.c b/src/core/ext/client_config/client_channel.c index d02dd5aacf1..f23da5f35d2 100644 --- a/src/core/ext/client_config/client_channel.c +++ b/src/core/ext/client_config/client_channel.c @@ -192,11 +192,17 @@ static void on_resolver_result_changed(grpc_exec_ctx *exec_ctx, void *arg, grpc_resolver_result_get_channel_args(chand->resolver_result); lb_policy_args.client_channel_factory = chand->client_channel_factory; + // Find LB policy name. + const char *lb_policy_name = NULL; + const grpc_arg *lb_policy_name_arg = + grpc_channel_args_find(lb_policy_args.args, GRPC_ARG_LB_POLICY_NAME); + if (lb_policy_name_arg != NULL) { + GPR_ASSERT(lb_policy_name_arg->type == GRPC_ARG_STRING); + lb_policy_name = lb_policy_name_arg->value.string; + } // Special case: If all of the addresses are balancer addresses, // assume that we should use the grpclb policy, regardless of what the // resolver actually specified. - const char *lb_policy_name = - grpc_resolver_result_get_lb_policy_name(chand->resolver_result); bool found_backend_address = false; for (size_t i = 0; i < lb_policy_args.addresses->num_addresses; ++i) { if (!lb_policy_args.addresses->addresses[i].is_balancer) { diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index 1467508d6d0..fdc0bec9968 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -470,9 +470,17 @@ static grpc_lb_policy *create_rr_locked( args.server_name = glb_policy->server_name; args.client_channel_factory = glb_policy->cc_factory; args.addresses = process_serverlist(serverlist); - args.args = glb_policy->args; + + // Replace the LB addresses in the channel args that we pass down to + // the subchannel. + static const char* keys_to_remove[] = {GRPC_ARG_LB_ADDRESSES}; + const grpc_arg arg = grpc_lb_addresses_create_channel_arg(args.addresses); + args.args = grpc_channel_args_copy_and_add_and_remove( + glb_policy->args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove), &arg, + 1); grpc_lb_policy *rr = grpc_lb_policy_create(exec_ctx, "round_robin", &args); + grpc_channel_args_destroy(args.args); if (glb_policy->addresses != NULL) { /* dispose of the previous version */ @@ -574,6 +582,13 @@ static void glb_rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, grpc_lb_policy_factory *factory, grpc_lb_policy_args *args) { + /* Get server name. */ + const grpc_arg* arg = + grpc_channel_args_find(args->args, GRPC_ARG_SERVER_NAME); + const char* server_name = + arg != NULL && arg->type == GRPC_ARG_STRING + ? arg->value.string : NULL; + /* Count the number of gRPC-LB addresses. There must be at least one. * TODO(roth): For now, we ignore non-balancer addresses, but in the * future, we may change the behavior such that we fall back to using @@ -581,22 +596,25 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, * time, this should be changed to allow a list with no balancer addresses, * since the resolver might fail to return a balancer address even when * this is the right LB policy to use. */ + arg = grpc_channel_args_find(args->args, GRPC_ARG_LB_ADDRESSES); + GPR_ASSERT(arg != NULL && arg->type == GRPC_ARG_POINTER); + grpc_lb_addresses* addresses = arg->value.pointer.p; size_t num_grpclb_addrs = 0; - for (size_t i = 0; i < args->addresses->num_addresses; ++i) { - if (args->addresses->addresses[i].is_balancer) ++num_grpclb_addrs; + for (size_t i = 0; i < addresses->num_addresses; ++i) { + if (addresses->addresses[i].is_balancer) ++num_grpclb_addrs; } if (num_grpclb_addrs == 0) return NULL; glb_lb_policy *glb_policy = gpr_malloc(sizeof(*glb_policy)); memset(glb_policy, 0, sizeof(*glb_policy)); - /* All input addresses in args->addresses come from a resolver that claims + /* All input addresses in addresses come from a resolver that claims * they are LB services. It's the resolver's responsibility to make sure * this * policy is only instantiated and used in that case. * * Create a client channel over them to communicate with a LB service */ - glb_policy->server_name = gpr_strdup(args->server_name); + glb_policy->server_name = gpr_strdup(server_name); glb_policy->cc_factory = args->client_channel_factory; glb_policy->args = grpc_channel_args_copy(args->args); GPR_ASSERT(glb_policy->cc_factory != NULL); @@ -606,20 +624,20 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, * TODO(dgq): support mixed ip version */ char **addr_strs = gpr_malloc(sizeof(char *) * num_grpclb_addrs); size_t addr_index = 0; - for (size_t i = 0; i < args->addresses->num_addresses; i++) { - if (args->addresses->addresses[i].user_data != NULL) { + for (size_t i = 0; i < addresses->num_addresses; i++) { + if (addresses->addresses[i].user_data != NULL) { gpr_log(GPR_ERROR, "This LB policy doesn't support user data. It will be ignored"); } - if (args->addresses->addresses[i].is_balancer) { + if (addresses->addresses[i].is_balancer) { if (addr_index == 0) { addr_strs[addr_index++] = grpc_sockaddr_to_uri( - (const struct sockaddr *)&args->addresses->addresses[i] + (const struct sockaddr *)&addresses->addresses[i] .address.addr); } else { GPR_ASSERT(grpc_sockaddr_to_string( &addr_strs[addr_index++], - (const struct sockaddr *)&args->addresses->addresses[i] + (const struct sockaddr *)&addresses->addresses[i] .address.addr, true) > 0); } @@ -629,10 +647,29 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, char *target_uri_str = gpr_strjoin_sep((const char **)addr_strs, num_grpclb_addrs, ",", &uri_path_len); - /* will pick using pick_first */ + /* Create a channel to talk to the LBs. + * + * We strip out the channel arg for the LB policy name, since we want + * to use the default (pick_first) in this case. + * + * We also strip out the channel arg for the resolved addresses, since + * that will be generated by the name resolver used in the LB channel. + * Note that the LB channel will use the sockaddr resolver, so this + * won't actually generate a query to DNS (or some other name service). + * However, the addresses returned by the sockaddr resolver will have + * is_balancer=false, whereas our own addresses have is_balancer=true. + * We need the LB channel to return addresses with is_balancer=false + * so that it does not wind up recursively using the grpclb LB policy, + * as per the special case logic in client_channel.c. + */ + static const char* keys_to_remove[] = { + GRPC_ARG_LB_POLICY_NAME, GRPC_ARG_LB_ADDRESSES}; + grpc_channel_args *new_args = grpc_channel_args_copy_and_remove( + args->args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove)); glb_policy->lb_channel = grpc_client_channel_factory_create_channel( exec_ctx, glb_policy->cc_factory, target_uri_str, - GRPC_CLIENT_CHANNEL_TYPE_LOAD_BALANCING, args->args); + GRPC_CLIENT_CHANNEL_TYPE_LOAD_BALANCING, new_args); + grpc_channel_args_destroy(new_args); gpr_free(target_uri_str); for (size_t i = 0; i < num_grpclb_addrs; i++) { diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c index 3683079cf46..d95f0310b62 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -34,7 +34,9 @@ #include #include + #include "src/core/ext/client_config/lb_policy_registry.h" +#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/transport/connectivity_state.h" typedef struct pending_pick { @@ -432,14 +434,23 @@ static void pick_first_factory_unref(grpc_lb_policy_factory *factory) {} static grpc_lb_policy *create_pick_first(grpc_exec_ctx *exec_ctx, grpc_lb_policy_factory *factory, grpc_lb_policy_args *args) { - GPR_ASSERT(args->addresses != NULL); GPR_ASSERT(args->client_channel_factory != NULL); + /* Get server name. */ + const grpc_arg* arg = + grpc_channel_args_find(args->args, GRPC_ARG_SERVER_NAME); + const char* server_name = + arg != NULL && arg->type == GRPC_ARG_STRING + ? arg->value.string : NULL; + /* Find the number of backend addresses. We ignore balancer * addresses, since we don't know how to handle them. */ + arg = grpc_channel_args_find(args->args, GRPC_ARG_LB_ADDRESSES); + GPR_ASSERT(arg != NULL && arg->type == GRPC_ARG_POINTER); + grpc_lb_addresses* addresses = arg->value.pointer.p; size_t num_addrs = 0; - for (size_t i = 0; i < args->addresses->num_addresses; i++) { - if (!args->addresses->addresses[i].is_balancer) ++num_addrs; + for (size_t i = 0; i < addresses->num_addresses; i++) { + if (!addresses->addresses[i].is_balancer) ++num_addrs; } if (num_addrs == 0) return NULL; @@ -450,22 +461,22 @@ static grpc_lb_policy *create_pick_first(grpc_exec_ctx *exec_ctx, memset(p->subchannels, 0, sizeof(*p->subchannels) * num_addrs); grpc_subchannel_args sc_args; size_t subchannel_idx = 0; - for (size_t i = 0; i < args->addresses->num_addresses; i++) { + for (size_t i = 0; i < addresses->num_addresses; i++) { /* Skip balancer addresses, since we only know how to handle backends. */ - if (args->addresses->addresses[i].is_balancer) continue; + if (addresses->addresses[i].is_balancer) continue; - if (args->addresses->addresses[i].user_data != NULL) { + if (addresses->addresses[i].user_data != NULL) { gpr_log(GPR_ERROR, "This LB policy doesn't support user data. It will be ignored"); } memset(&sc_args, 0, sizeof(grpc_subchannel_args)); /* server_name will be copied as part of the subchannel creation. This makes - * the copying of args->server_name (a borrowed pointer) OK. */ - sc_args.server_name = args->server_name; + * the copying of server_name (a borrowed pointer) OK. */ + sc_args.server_name = server_name; sc_args.addr = - (struct sockaddr *)(&args->addresses->addresses[i].address.addr); - sc_args.addr_len = args->addresses->addresses[i].address.len; + (struct sockaddr *)(&addresses->addresses[i].address.addr); + sc_args.addr_len = addresses->addresses[i].address.len; sc_args.args = args->args; grpc_subchannel *subchannel = grpc_client_channel_factory_create_subchannel( diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c index 00a18974dfc..2deb0af99cf 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -64,6 +64,7 @@ #include #include "src/core/ext/client_config/lb_policy_registry.h" +#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/transport/connectivity_state.h" #include "src/core/lib/transport/static_metadata.h" @@ -598,14 +599,23 @@ static void round_robin_factory_unref(grpc_lb_policy_factory *factory) {} static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx, grpc_lb_policy_factory *factory, grpc_lb_policy_args *args) { - GPR_ASSERT(args->addresses != NULL); GPR_ASSERT(args->client_channel_factory != NULL); + /* Get server name. */ + const grpc_arg* arg = + grpc_channel_args_find(args->args, GRPC_ARG_SERVER_NAME); + const char* server_name = + arg != NULL && arg->type == GRPC_ARG_STRING + ? arg->value.string : NULL; + /* Find the number of backend addresses. We ignore balancer * addresses, since we don't know how to handle them. */ + arg = grpc_channel_args_find(args->args, GRPC_ARG_LB_ADDRESSES); + GPR_ASSERT(arg != NULL && arg->type == GRPC_ARG_POINTER); + grpc_lb_addresses* addresses = arg->value.pointer.p; size_t num_addrs = 0; - for (size_t i = 0; i < args->addresses->num_addresses; i++) { - if (!args->addresses->addresses[i].is_balancer) ++num_addrs; + for (size_t i = 0; i < addresses->num_addresses; i++) { + if (!addresses->addresses[i].is_balancer) ++num_addrs; } if (num_addrs == 0) return NULL; @@ -618,17 +628,17 @@ static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx, grpc_subchannel_args sc_args; size_t subchannel_idx = 0; - for (size_t i = 0; i < args->addresses->num_addresses; i++) { + for (size_t i = 0; i < addresses->num_addresses; i++) { /* Skip balancer addresses, since we only know how to handle backends. */ - if (args->addresses->addresses[i].is_balancer) continue; + if (addresses->addresses[i].is_balancer) continue; memset(&sc_args, 0, sizeof(grpc_subchannel_args)); /* server_name will be copied as part of the subchannel creation. This makes - * the copying of args->server_name (a borrowed pointer) OK. */ - sc_args.server_name = args->server_name; + * the copying of server_name (a borrowed pointer) OK. */ + sc_args.server_name = server_name; sc_args.addr = - (struct sockaddr *)(&args->addresses->addresses[i].address.addr); - sc_args.addr_len = args->addresses->addresses[i].address.len; + (struct sockaddr *)(&addresses->addresses[i].address.addr); + sc_args.addr_len = addresses->addresses[i].address.len; sc_args.args = args->args; grpc_subchannel *subchannel = grpc_client_channel_factory_create_subchannel( @@ -641,7 +651,7 @@ static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx, sd->policy = p; sd->index = subchannel_idx; sd->subchannel = subchannel; - sd->user_data = args->addresses->addresses[i].user_data; + sd->user_data = addresses->addresses[i].user_data; ++subchannel_idx; grpc_closure_init(&sd->connectivity_changed_closure, rr_connectivity_changed, sd); diff --git a/src/core/lib/channel/channel_args.c b/src/core/lib/channel/channel_args.c index 2957d2c8188..0270d6f2246 100644 --- a/src/core/lib/channel/channel_args.c +++ b/src/core/lib/channel/channel_args.c @@ -66,22 +66,59 @@ static grpc_arg copy_arg(const grpc_arg *src) { grpc_channel_args *grpc_channel_args_copy_and_add(const grpc_channel_args *src, const grpc_arg *to_add, size_t num_to_add) { + return grpc_channel_args_copy_and_add_and_remove(src, NULL, 0, to_add, + num_to_add); +} + +grpc_channel_args *grpc_channel_args_copy_and_remove( + const grpc_channel_args *src, const char** to_remove, + size_t num_to_remove) { + return grpc_channel_args_copy_and_add_and_remove(src, to_remove, + num_to_remove, NULL, 0); +} + +static bool should_remove_arg(const grpc_arg* arg, const char** to_remove, + size_t num_to_remove) { + for (size_t i = 0; i < num_to_remove; ++i) { + if (strcmp(arg->key, to_remove[i]) == 0) return true; + } + return false; +} + +grpc_channel_args *grpc_channel_args_copy_and_add_and_remove( + const grpc_channel_args *src, const char** to_remove, size_t num_to_remove, + const grpc_arg *to_add, size_t num_to_add) { + // Figure out how many args we'll be copying. + size_t num_args_to_copy = 0; + if (src != NULL) { + for (size_t i = 0; i < src->num_args; ++i) { + if (!should_remove_arg(&src->args[i], to_remove, num_to_remove)) { + ++num_args_to_copy; + } + } + } + // Create result. grpc_channel_args *dst = gpr_malloc(sizeof(grpc_channel_args)); - size_t i; - size_t src_num_args = (src == NULL) ? 0 : src->num_args; - if (!src && !to_add) { - dst->num_args = 0; + dst->num_args = num_args_to_copy + num_to_add; + if (dst->num_args == 0) { dst->args = NULL; return dst; } - dst->num_args = src_num_args + num_to_add; dst->args = gpr_malloc(sizeof(grpc_arg) * dst->num_args); - for (i = 0; i < src_num_args; i++) { - dst->args[i] = copy_arg(&src->args[i]); + // Copy args from src that are not being removed. + size_t dst_idx = 0; + if (src != NULL) { + for (size_t i = 0; i < src->num_args; ++i) { + if (!should_remove_arg(&src->args[i], to_remove, num_to_remove)) { + dst->args[dst_idx++] = copy_arg(&src->args[i]); + } + } } - for (i = 0; i < num_to_add; i++) { - dst->args[i + src_num_args] = copy_arg(&to_add[i]); + // Add args from to_add. + for (size_t i = 0; i < num_to_add; ++i) { + dst->args[dst_idx++] = copy_arg(&to_add[i]); } + GPR_ASSERT(dst_idx == dst->num_args); return dst; } diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h index a80340c0faf..1508d237484 100644 --- a/src/core/lib/channel/channel_args.h +++ b/src/core/lib/channel/channel_args.h @@ -51,6 +51,17 @@ grpc_channel_args *grpc_channel_args_copy_and_add(const grpc_channel_args *src, const grpc_arg *to_add, size_t num_to_add); +/** Copies the arguments in \a src except for those whose keys are in + \a to_remove. */ +grpc_channel_args *grpc_channel_args_copy_and_remove( + const grpc_channel_args *src, const char** to_remove, size_t num_to_remove); + +/** Copies the arguments from \a src except for those whose keys are in + \a to_remove and appends the arguments in \a to_add. */ +grpc_channel_args *grpc_channel_args_copy_and_add_and_remove( + const grpc_channel_args *src, const char** to_remove, size_t num_to_remove, + const grpc_arg *to_add, size_t num_to_add); + /** Concatenate args from \a a and \a b into a new instance */ grpc_channel_args *grpc_channel_args_merge(const grpc_channel_args *a, const grpc_channel_args *b); From 3798e607cc7a947ee64124ba147ab404692b851b Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 21 Oct 2016 14:39:27 -0700 Subject: [PATCH 180/286] Address review comments --- .../chttp2/transport/chttp2_transport.c | 6 +- src/core/lib/iomgr/resource_quota.c | 266 +++++++++--------- src/core/lib/iomgr/resource_quota.h | 100 ++++++- src/core/lib/iomgr/tcp_client.h | 2 + test/core/end2end/gen_build_yaml.py | 2 +- test/core/iomgr/resource_quota_test.c | 2 +- 6 files changed, 233 insertions(+), 145 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index b2fdf88a87f..a2668474be0 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -2160,13 +2160,13 @@ static void benign_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, gpr_slice_from_static_string("Buffers full")); } else if (error == GRPC_ERROR_NONE && grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, - "HTTP2: %s - skip benign reclaimation, there are still %" PRIdPTR + "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR " streams", t->peer_string, grpc_chttp2_stream_map_size(&t->stream_map)); } t->benign_reclaimer_registered = false; if (error != GRPC_ERROR_CANCELLED) { - grpc_resource_user_finish_reclaimation( + grpc_resource_user_finish_reclamation( exec_ctx, grpc_endpoint_get_resource_user(t->ep)); } GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "benign_reclaimer"); @@ -2192,7 +2192,7 @@ static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, } } if (error != GRPC_ERROR_CANCELLED) { - grpc_resource_user_finish_reclaimation( + grpc_resource_user_finish_reclamation( exec_ctx, grpc_endpoint_get_resource_user(t->ep)); } GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "destructive_reclaimer"); diff --git a/src/core/lib/iomgr/resource_quota.c b/src/core/lib/iomgr/resource_quota.c index 6be9bb48566..54669734081 100644 --- a/src/core/lib/iomgr/resource_quota.c +++ b/src/core/lib/iomgr/resource_quota.c @@ -44,27 +44,29 @@ int grpc_resource_quota_trace = 0; -typedef bool (*bpstate_func)(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota); - -typedef struct { - grpc_resource_user *head; - grpc_resource_user *tail; -} grpc_resource_user_list; - struct grpc_resource_quota { + /* refcount */ gpr_refcount refs; + /* Master combiner lock: all activity on a quota executes under this combiner + */ grpc_combiner *combiner; + /* Size of the resource quota */ int64_t size; + /* Amount of free memory in the resource quota */ int64_t free_pool; + /* Has rq_step been scheduled to occur? */ bool step_scheduled; + /* Are we currently reclaiming memory */ bool reclaiming; - grpc_closure bpstep_closure; - grpc_closure bpreclaimation_done_closure; + /* Closure around rq_step */ + grpc_closure rq_step_closure; + /* Closure around rq_reclamation_done */ + grpc_closure rq_reclamation_done_closure; - grpc_resource_user *roots[GRPC_BULIST_COUNT]; + /* Roots of all resource user lists */ + grpc_resource_user *roots[GRPC_RULIST_COUNT]; char *name; }; @@ -73,8 +75,8 @@ struct grpc_resource_quota { * list management */ -static void bulist_add_tail(grpc_resource_user *resource_user, - grpc_bulist list) { +static void rulist_add_tail(grpc_resource_user *resource_user, + grpc_rulist list) { grpc_resource_quota *resource_quota = resource_user->resource_quota; grpc_resource_user **root = &resource_quota->roots[list]; if (*root == NULL) { @@ -89,8 +91,8 @@ static void bulist_add_tail(grpc_resource_user *resource_user, } } -static void bulist_add_head(grpc_resource_user *resource_user, - grpc_bulist list) { +static void rulist_add_head(grpc_resource_user *resource_user, + grpc_rulist list) { grpc_resource_quota *resource_quota = resource_user->resource_quota; grpc_resource_user **root = &resource_quota->roots[list]; if (*root == NULL) { @@ -106,13 +108,13 @@ static void bulist_add_head(grpc_resource_user *resource_user, } } -static bool bulist_empty(grpc_resource_quota *resource_quota, - grpc_bulist list) { +static bool rulist_empty(grpc_resource_quota *resource_quota, + grpc_rulist list) { return resource_quota->roots[list] == NULL; } -static grpc_resource_user *bulist_pop(grpc_resource_quota *resource_quota, - grpc_bulist list) { +static grpc_resource_user *rulist_pop(grpc_resource_quota *resource_quota, + grpc_rulist list) { grpc_resource_user **root = &resource_quota->roots[list]; grpc_resource_user *resource_user = *root; if (resource_user == NULL) { @@ -131,7 +133,7 @@ static grpc_resource_user *bulist_pop(grpc_resource_quota *resource_quota, return resource_user; } -static void bulist_remove(grpc_resource_user *resource_user, grpc_bulist list) { +static void rulist_remove(grpc_resource_user *resource_user, grpc_rulist list) { if (resource_user->links[list].next == NULL) return; grpc_resource_quota *resource_quota = resource_user->resource_quota; if (resource_quota->roots[list] == resource_user) { @@ -150,41 +152,41 @@ static void bulist_remove(grpc_resource_user *resource_user, grpc_bulist list) { * buffer pool state machine */ -static bool bpalloc(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota); -static bool bpscavenge(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota); -static bool bpreclaim(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota, bool destructive); +static bool rq_alloc(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota); +static bool rq_scavenge(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota); +static bool rq_reclaim(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota, bool destructive); -static void bpstep(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { +static void rq_step(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { grpc_resource_quota *resource_quota = bp; resource_quota->step_scheduled = false; do { - if (bpalloc(exec_ctx, resource_quota)) goto done; - } while (bpscavenge(exec_ctx, resource_quota)); - bpreclaim(exec_ctx, resource_quota, false) || - bpreclaim(exec_ctx, resource_quota, true); + if (rq_alloc(exec_ctx, resource_quota)) goto done; + } while (rq_scavenge(exec_ctx, resource_quota)); + rq_reclaim(exec_ctx, resource_quota, false) || + rq_reclaim(exec_ctx, resource_quota, true); done: grpc_resource_quota_internal_unref(exec_ctx, resource_quota); } -static void bpstep_sched(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota) { +static void rq_step_sched(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota) { if (resource_quota->step_scheduled) return; resource_quota->step_scheduled = true; grpc_resource_quota_internal_ref(resource_quota); grpc_combiner_execute_finally(exec_ctx, resource_quota->combiner, - &resource_quota->bpstep_closure, + &resource_quota->rq_step_closure, GRPC_ERROR_NONE, false); } /* returns true if all allocations are completed */ -static bool bpalloc(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota) { +static bool rq_alloc(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota) { grpc_resource_user *resource_user; while ((resource_user = - bulist_pop(resource_quota, GRPC_BULIST_AWAITING_ALLOCATION))) { + rulist_pop(resource_quota, GRPC_RULIST_AWAITING_ALLOCATION))) { gpr_mu_lock(&resource_user->mu); if (resource_user->free_pool < 0 && -resource_user->free_pool <= resource_quota->free_pool) { @@ -193,7 +195,7 @@ static bool bpalloc(grpc_exec_ctx *exec_ctx, resource_quota->free_pool -= amt; if (grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, "BP %s %s: grant alloc %" PRId64 - " bytes; bp_free_pool -> %" PRId64, + " bytes; rq_free_pool -> %" PRId64, resource_quota->name, resource_user->name, amt, resource_quota->free_pool); } @@ -206,7 +208,7 @@ static bool bpalloc(grpc_exec_ctx *exec_ctx, grpc_exec_ctx_enqueue_list(exec_ctx, &resource_user->on_allocated, NULL); gpr_mu_unlock(&resource_user->mu); } else { - bulist_add_head(resource_user, GRPC_BULIST_AWAITING_ALLOCATION); + rulist_add_head(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); gpr_mu_unlock(&resource_user->mu); return false; } @@ -215,11 +217,11 @@ static bool bpalloc(grpc_exec_ctx *exec_ctx, } /* returns true if any memory could be reclaimed from buffers */ -static bool bpscavenge(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota) { +static bool rq_scavenge(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota) { grpc_resource_user *resource_user; while ((resource_user = - bulist_pop(resource_quota, GRPC_BULIST_NON_EMPTY_FREE_POOL))) { + rulist_pop(resource_quota, GRPC_RULIST_NON_EMPTY_FREE_POOL))) { gpr_mu_lock(&resource_user->mu); if (resource_user->free_pool > 0) { int64_t amt = resource_user->free_pool; @@ -227,7 +229,7 @@ static bool bpscavenge(grpc_exec_ctx *exec_ctx, resource_quota->free_pool += amt; if (grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, "BP %s %s: scavenge %" PRId64 - " bytes; bp_free_pool -> %" PRId64, + " bytes; rq_free_pool -> %" PRId64, resource_quota->name, resource_user->name, amt, resource_quota->free_pool); } @@ -240,16 +242,16 @@ static bool bpscavenge(grpc_exec_ctx *exec_ctx, return false; } -/* returns true if reclaimation is proceeding */ -static bool bpreclaim(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota, bool destructive) { +/* returns true if reclamation is proceeding */ +static bool rq_reclaim(grpc_exec_ctx *exec_ctx, + grpc_resource_quota *resource_quota, bool destructive) { if (resource_quota->reclaiming) return true; - grpc_bulist list = destructive ? GRPC_BULIST_RECLAIMER_DESTRUCTIVE - : GRPC_BULIST_RECLAIMER_BENIGN; - grpc_resource_user *resource_user = bulist_pop(resource_quota, list); + grpc_rulist list = destructive ? GRPC_RULIST_RECLAIMER_DESTRUCTIVE + : GRPC_RULIST_RECLAIMER_BENIGN; + grpc_resource_user *resource_user = rulist_pop(resource_quota, list); if (resource_user == NULL) return false; if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: initiate %s reclaimation", + gpr_log(GPR_DEBUG, "BP %s %s: initiate %s reclamation", resource_quota->name, resource_user->name, destructive ? "destructive" : "benign"); } @@ -262,7 +264,7 @@ static bool bpreclaim(grpc_exec_ctx *exec_ctx, } /******************************************************************************* - * bu_slice: a slice implementation that is backed by a grpc_resource_user + * ru_slice: a slice implementation that is backed by a grpc_resource_user */ typedef struct { @@ -270,22 +272,24 @@ typedef struct { gpr_refcount refs; grpc_resource_user *resource_user; size_t size; -} bu_slice_refcount; +} ru_slice_refcount; -static void bu_slice_ref(void *p) { - bu_slice_refcount *rc = p; +static void ru_slice_ref(void *p) { + ru_slice_refcount *rc = p; gpr_ref(&rc->refs); } -static void bu_slice_unref(void *p) { - bu_slice_refcount *rc = p; +static void ru_slice_unref(void *p) { + ru_slice_refcount *rc = p; if (gpr_unref(&rc->refs)) { /* TODO(ctiller): this is dangerous, but I think safe for now: we have no guarantee here that we're at a safe point for creating an execution context, but we have no way of writing this code otherwise. In the future: consider lifting gpr_slice to grpc, and offering an - internal_{ref,unref} pair that is execution context aware. Alternatively, - make exec_ctx be thread local and 'do the right thing' (whatever that is) + internal_{ref,unref} pair that is execution context aware. + Alternatively, + make exec_ctx be thread local and 'do the right thing' (whatever that + is) if NULL */ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_resource_user_free(&exec_ctx, rc->resource_user, rc->size); @@ -294,11 +298,11 @@ static void bu_slice_unref(void *p) { } } -static gpr_slice bu_slice_create(grpc_resource_user *resource_user, +static gpr_slice ru_slice_create(grpc_resource_user *resource_user, size_t size) { - bu_slice_refcount *rc = gpr_malloc(sizeof(bu_slice_refcount) + size); - rc->base.ref = bu_slice_ref; - rc->base.unref = bu_slice_unref; + ru_slice_refcount *rc = gpr_malloc(sizeof(ru_slice_refcount) + size); + rc->base.ref = ru_slice_ref; + rc->base.unref = ru_slice_unref; gpr_ref_init(&rc->refs, 1); rc->resource_user = resource_user; rc->size = size; @@ -313,62 +317,62 @@ static gpr_slice bu_slice_create(grpc_resource_user *resource_user, * grpc_resource_quota internal implementation */ -static void bu_allocate(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { +static void ru_allocate(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { grpc_resource_user *resource_user = bu; - if (bulist_empty(resource_user->resource_quota, - GRPC_BULIST_AWAITING_ALLOCATION)) { - bpstep_sched(exec_ctx, resource_user->resource_quota); + if (rulist_empty(resource_user->resource_quota, + GRPC_RULIST_AWAITING_ALLOCATION)) { + rq_step_sched(exec_ctx, resource_user->resource_quota); } - bulist_add_tail(resource_user, GRPC_BULIST_AWAITING_ALLOCATION); + rulist_add_tail(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); } -static void bu_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, +static void ru_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { grpc_resource_user *resource_user = bu; - if (!bulist_empty(resource_user->resource_quota, - GRPC_BULIST_AWAITING_ALLOCATION) && - bulist_empty(resource_user->resource_quota, - GRPC_BULIST_NON_EMPTY_FREE_POOL)) { - bpstep_sched(exec_ctx, resource_user->resource_quota); + if (!rulist_empty(resource_user->resource_quota, + GRPC_RULIST_AWAITING_ALLOCATION) && + rulist_empty(resource_user->resource_quota, + GRPC_RULIST_NON_EMPTY_FREE_POOL)) { + rq_step_sched(exec_ctx, resource_user->resource_quota); } - bulist_add_tail(resource_user, GRPC_BULIST_NON_EMPTY_FREE_POOL); + rulist_add_tail(resource_user, GRPC_RULIST_NON_EMPTY_FREE_POOL); } -static void bu_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, +static void ru_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { grpc_resource_user *resource_user = bu; - if (!bulist_empty(resource_user->resource_quota, - GRPC_BULIST_AWAITING_ALLOCATION) && - bulist_empty(resource_user->resource_quota, - GRPC_BULIST_NON_EMPTY_FREE_POOL) && - bulist_empty(resource_user->resource_quota, - GRPC_BULIST_RECLAIMER_BENIGN)) { - bpstep_sched(exec_ctx, resource_user->resource_quota); + if (!rulist_empty(resource_user->resource_quota, + GRPC_RULIST_AWAITING_ALLOCATION) && + rulist_empty(resource_user->resource_quota, + GRPC_RULIST_NON_EMPTY_FREE_POOL) && + rulist_empty(resource_user->resource_quota, + GRPC_RULIST_RECLAIMER_BENIGN)) { + rq_step_sched(exec_ctx, resource_user->resource_quota); } - bulist_add_tail(resource_user, GRPC_BULIST_RECLAIMER_BENIGN); + rulist_add_tail(resource_user, GRPC_RULIST_RECLAIMER_BENIGN); } -static void bu_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, +static void ru_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { grpc_resource_user *resource_user = bu; - if (!bulist_empty(resource_user->resource_quota, - GRPC_BULIST_AWAITING_ALLOCATION) && - bulist_empty(resource_user->resource_quota, - GRPC_BULIST_NON_EMPTY_FREE_POOL) && - bulist_empty(resource_user->resource_quota, - GRPC_BULIST_RECLAIMER_BENIGN) && - bulist_empty(resource_user->resource_quota, - GRPC_BULIST_RECLAIMER_DESTRUCTIVE)) { - bpstep_sched(exec_ctx, resource_user->resource_quota); + if (!rulist_empty(resource_user->resource_quota, + GRPC_RULIST_AWAITING_ALLOCATION) && + rulist_empty(resource_user->resource_quota, + GRPC_RULIST_NON_EMPTY_FREE_POOL) && + rulist_empty(resource_user->resource_quota, + GRPC_RULIST_RECLAIMER_BENIGN) && + rulist_empty(resource_user->resource_quota, + GRPC_RULIST_RECLAIMER_DESTRUCTIVE)) { + rq_step_sched(exec_ctx, resource_user->resource_quota); } - bulist_add_tail(resource_user, GRPC_BULIST_RECLAIMER_DESTRUCTIVE); + rulist_add_tail(resource_user, GRPC_RULIST_RECLAIMER_DESTRUCTIVE); } -static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { +static void ru_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { grpc_resource_user *resource_user = bu; GPR_ASSERT(resource_user->allocated == 0); - for (int i = 0; i < GRPC_BULIST_COUNT; i++) { - bulist_remove(resource_user, (grpc_bulist)i); + for (int i = 0; i < GRPC_RULIST_COUNT; i++) { + rulist_remove(resource_user, (grpc_rulist)i); } grpc_exec_ctx_sched(exec_ctx, resource_user->reclaimers[0], GRPC_ERROR_CANCELLED, NULL); @@ -379,17 +383,17 @@ static void bu_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { GRPC_ERROR_NONE, NULL); if (resource_user->free_pool != 0) { resource_user->resource_quota->free_pool += resource_user->free_pool; - bpstep_sched(exec_ctx, resource_user->resource_quota); + rq_step_sched(exec_ctx, resource_user->resource_quota); } } -static void bu_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, +static void ru_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, grpc_error *error) { grpc_resource_user_slice_allocator *slice_allocator = ts; if (error == GRPC_ERROR_NONE) { for (size_t i = 0; i < slice_allocator->count; i++) { gpr_slice_buffer_add_indexed( - slice_allocator->dest, bu_slice_create(slice_allocator->resource_user, + slice_allocator->dest, ru_slice_create(slice_allocator->resource_user, slice_allocator->length)); } } @@ -400,29 +404,29 @@ typedef struct { int64_t size; grpc_resource_quota *resource_quota; grpc_closure closure; -} bp_resize_args; +} rq_resize_args; -static void bp_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { - bp_resize_args *a = args; +static void rq_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { + rq_resize_args *a = args; int64_t delta = a->size - a->resource_quota->size; a->resource_quota->size += delta; a->resource_quota->free_pool += delta; if (delta < 0 && a->resource_quota->free_pool < 0) { - bpstep_sched(exec_ctx, a->resource_quota); + rq_step_sched(exec_ctx, a->resource_quota); } else if (delta > 0 && - !bulist_empty(a->resource_quota, - GRPC_BULIST_AWAITING_ALLOCATION)) { - bpstep_sched(exec_ctx, a->resource_quota); + !rulist_empty(a->resource_quota, + GRPC_RULIST_AWAITING_ALLOCATION)) { + rq_step_sched(exec_ctx, a->resource_quota); } grpc_resource_quota_internal_unref(exec_ctx, a->resource_quota); gpr_free(a); } -static void bp_reclaimation_done(grpc_exec_ctx *exec_ctx, void *bp, - grpc_error *error) { +static void rq_reclamation_done(grpc_exec_ctx *exec_ctx, void *bp, + grpc_error *error) { grpc_resource_quota *resource_quota = bp; resource_quota->reclaiming = false; - bpstep_sched(exec_ctx, resource_quota); + rq_step_sched(exec_ctx, resource_quota); grpc_resource_quota_internal_unref(exec_ctx, resource_quota); } @@ -444,10 +448,10 @@ grpc_resource_quota *grpc_resource_quota_create(const char *name) { gpr_asprintf(&resource_quota->name, "anonymous_pool_%" PRIxPTR, (intptr_t)resource_quota); } - grpc_closure_init(&resource_quota->bpstep_closure, bpstep, resource_quota); - grpc_closure_init(&resource_quota->bpreclaimation_done_closure, - bp_reclaimation_done, resource_quota); - for (int i = 0; i < GRPC_BULIST_COUNT; i++) { + grpc_closure_init(&resource_quota->rq_step_closure, rq_step, resource_quota); + grpc_closure_init(&resource_quota->rq_reclamation_done_closure, + rq_reclamation_done, resource_quota); + for (int i = 0; i < GRPC_RULIST_COUNT; i++) { resource_quota->roots[i] = NULL; } return resource_quota; @@ -481,10 +485,10 @@ void grpc_resource_quota_ref(grpc_resource_quota *resource_quota) { void grpc_resource_quota_resize(grpc_resource_quota *resource_quota, size_t size) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - bp_resize_args *a = gpr_malloc(sizeof(*a)); + rq_resize_args *a = gpr_malloc(sizeof(*a)); a->resource_quota = grpc_resource_quota_internal_ref(resource_quota); a->size = (int64_t)size; - grpc_closure_init(&a->closure, bp_resize, a); + grpc_closure_init(&a->closure, rq_resize, a); grpc_combiner_execute(&exec_ctx, resource_quota->combiner, &a->closure, GRPC_ERROR_NONE, false); grpc_exec_ctx_finish(&exec_ctx); @@ -509,17 +513,17 @@ grpc_resource_quota *grpc_resource_quota_from_channel_args( return grpc_resource_quota_create(NULL); } -static void *bp_copy(void *bp) { +static void *rq_copy(void *bp) { grpc_resource_quota_ref(bp); return bp; } -static void bp_destroy(void *bp) { grpc_resource_quota_unref(bp); } +static void rq_destroy(void *bp) { grpc_resource_quota_unref(bp); } -static int bp_cmp(void *a, void *b) { return GPR_ICMP(a, b); } +static int rq_cmp(void *a, void *b) { return GPR_ICMP(a, b); } const grpc_arg_pointer_vtable *grpc_resource_quota_arg_vtable(void) { - static const grpc_arg_pointer_vtable vtable = {bp_copy, bp_destroy, bp_cmp}; + static const grpc_arg_pointer_vtable vtable = {rq_copy, rq_destroy, rq_cmp}; return &vtable; } @@ -532,15 +536,15 @@ void grpc_resource_user_init(grpc_resource_user *resource_user, const char *name) { resource_user->resource_quota = grpc_resource_quota_internal_ref(resource_quota); - grpc_closure_init(&resource_user->allocate_closure, &bu_allocate, + grpc_closure_init(&resource_user->allocate_closure, &ru_allocate, resource_user); grpc_closure_init(&resource_user->add_to_free_pool_closure, - &bu_add_to_free_pool, resource_user); + &ru_add_to_free_pool, resource_user); grpc_closure_init(&resource_user->post_reclaimer_closure[0], - &bu_post_benign_reclaimer, resource_user); + &ru_post_benign_reclaimer, resource_user); grpc_closure_init(&resource_user->post_reclaimer_closure[1], - &bu_post_destructive_reclaimer, resource_user); - grpc_closure_init(&resource_user->destroy_closure, &bu_destroy, + &ru_post_destructive_reclaimer, resource_user); + grpc_closure_init(&resource_user->destroy_closure, &ru_destroy, resource_user); gpr_mu_init(&resource_user->mu); resource_user->allocated = 0; @@ -551,7 +555,7 @@ void grpc_resource_user_init(grpc_resource_user *resource_user, gpr_atm_no_barrier_store(&resource_user->on_done_destroy_closure, 0); resource_user->reclaimers[0] = NULL; resource_user->reclaimers[1] = NULL; - for (int i = 0; i < GRPC_BULIST_COUNT; i++) { + for (int i = 0; i < GRPC_RULIST_COUNT; i++) { resource_user->links[i].next = resource_user->links[i].prev = NULL; } #ifndef NDEBUG @@ -678,22 +682,22 @@ void grpc_resource_user_post_reclaimer(grpc_exec_ctx *exec_ctx, } } -void grpc_resource_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, - grpc_resource_user *resource_user) { +void grpc_resource_user_finish_reclamation(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user) { if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: reclaimation complete", + gpr_log(GPR_DEBUG, "BP %s %s: reclamation complete", resource_user->resource_quota->name, resource_user->name); } grpc_combiner_execute( exec_ctx, resource_user->resource_quota->combiner, - &resource_user->resource_quota->bpreclaimation_done_closure, + &resource_user->resource_quota->rq_reclamation_done_closure, GRPC_ERROR_NONE, false); } void grpc_resource_user_slice_allocator_init( grpc_resource_user_slice_allocator *slice_allocator, grpc_resource_user *resource_user, grpc_iomgr_cb_func cb, void *p) { - grpc_closure_init(&slice_allocator->on_allocated, bu_allocated_slices, + grpc_closure_init(&slice_allocator->on_allocated, ru_allocated_slices, slice_allocator); grpc_closure_init(&slice_allocator->on_done, cb, p); slice_allocator->resource_user = resource_user; diff --git a/src/core/lib/iomgr/resource_quota.h b/src/core/lib/iomgr/resource_quota.h index c4015b42cc4..af94a199115 100644 --- a/src/core/lib/iomgr/resource_quota.h +++ b/src/core/lib/iomgr/resource_quota.h @@ -38,6 +38,37 @@ #include "src/core/lib/iomgr/exec_ctx.h" +/** \file Tracks resource usage against a pool. + + The current implementation tracks only memory usage, but in the future + this may be extended to (for example) threads and file descriptors. + + A grpc_resource_quota represents the pooled resources, and + grpc_resource_user instances attach to the quota and consume those + resources. They also offer a vector for reclamation: if we become + resource constrained, grpc_resource_user instances are asked (in turn) to + free up whatever they can so that the system as a whole can make progress. + + There are three kinds of reclamation that take place: + - an internal reclamation, where cached resource at the resource user level + is returned to the quota + - a benign reclamation phase, whereby resources that are in use but are not + helping anything make progress are reclaimed + - a destructive reclamation, whereby resources that are helping something + make progress may be enacted so that at least one part of the system can + complete. + + These reclamations are tried in priority order, and only one reclamation + is outstanding for a quota at any given time (meaning that if a destructive + reclamation makes progress, we may follow up with a benign reclamation). + + Future work will be to expose the current resource pressure so that back + pressure can be applied to avoid reclamation phases starting. + + Resource users own references to resource quotas, and resource quotas + maintain lists of users (which users arrange to leave before they are + destroyed) */ + extern int grpc_resource_quota_trace; grpc_resource_quota *grpc_resource_quota_internal_ref( @@ -47,46 +78,83 @@ void grpc_resource_quota_internal_unref(grpc_exec_ctx *exec_ctx, grpc_resource_quota *grpc_resource_quota_from_channel_args( const grpc_channel_args *channel_args); +/* Resource users are kept in (potentially) several intrusive linked lists + at once. These are the list names. */ typedef enum { - GRPC_BULIST_AWAITING_ALLOCATION, - GRPC_BULIST_NON_EMPTY_FREE_POOL, - GRPC_BULIST_RECLAIMER_BENIGN, - GRPC_BULIST_RECLAIMER_DESTRUCTIVE, - GRPC_BULIST_COUNT -} grpc_bulist; + /* Resource users that are waiting for an allocation */ + GRPC_RULIST_AWAITING_ALLOCATION, + /* Resource users that have free memory available for internal reclamation */ + GRPC_RULIST_NON_EMPTY_FREE_POOL, + /* Resource users that have published a benign reclamation is available */ + GRPC_RULIST_RECLAIMER_BENIGN, + /* Resource users that have published a destructive reclamation is + available */ + GRPC_RULIST_RECLAIMER_DESTRUCTIVE, + /* Number of lists: must be last */ + GRPC_RULIST_COUNT +} grpc_rulist; typedef struct grpc_resource_user grpc_resource_user; +/* Internal linked list pointers for a resource user */ typedef struct { grpc_resource_user *next; grpc_resource_user *prev; } grpc_resource_user_link; struct grpc_resource_user { + /* The quota this resource user consumes from */ grpc_resource_quota *resource_quota; + /* Closure to schedule an allocation onder the resource quota combiner lock */ grpc_closure allocate_closure; + /* Closure to publish a non empty free pool under the resource quota combiner + lock */ grpc_closure add_to_free_pool_closure; #ifndef NDEBUG + /* Canary object to detect leaked resource users with ASAN */ void *asan_canary; #endif gpr_mu mu; + /* Total allocated memory outstanding by this resource user; + always positive */ int64_t allocated; + /* The amount of memory this user has cached for its own use: to avoid quota + contention, each resource user can keep some memory aside from the quota, + and the quota can pull it back under memory pressure. + This value can become negative if more memory has been requested than + existed in the free pool, at which point the quota is consulted to bring + this value non-negative (asynchronously). */ int64_t free_pool; + /* A list of closures to call once free_pool becomes non-negative - ie when + all outstanding allocations have been granted. */ grpc_closure_list on_allocated; + /* True if we are currently trying to allocate from the quota, false if not */ bool allocating; + /* True if we are currently trying to add ourselves to the non-free quota + list, false otherwise */ bool added_to_free_pool; + /* Reclaimers: index 0 is the benign reclaimer, 1 is the destructive reclaimer + */ grpc_closure *reclaimers[2]; + /* Trampoline closures to finish reclamation and re-enter the quota combiner + lock */ grpc_closure post_reclaimer_closure[2]; + /* Closure to execute under the quota combiner to de-register and shutdown the + resource user */ grpc_closure destroy_closure; + /* User supplied closure to call once the user has finished shutting down AND + all outstanding allocations have been freed */ gpr_atm on_done_destroy_closure; - grpc_resource_user_link links[GRPC_BULIST_COUNT]; + /* Links in the various grpc_rulist lists */ + grpc_resource_user_link links[GRPC_RULIST_COUNT]; + /* The name of this resource user, for debugging/tracing */ char *name; }; @@ -99,17 +167,29 @@ void grpc_resource_user_shutdown(grpc_exec_ctx *exec_ctx, void grpc_resource_user_destroy(grpc_exec_ctx *exec_ctx, grpc_resource_user *resource_user); +/* Allocate from the resource user (and it's quota). + If optional_on_done is NULL, then allocate immediately. This may push the + quota over-limit, at which point reclamation will kick in. + If optional_on_done is non-NULL, it will be scheduled when the allocation has + been granted by the quota. */ void grpc_resource_user_alloc(grpc_exec_ctx *exec_ctx, grpc_resource_user *resource_user, size_t size, grpc_closure *optional_on_done); +/* Release memory back to the quota */ void grpc_resource_user_free(grpc_exec_ctx *exec_ctx, grpc_resource_user *resource_user, size_t size); +/* Post a memory reclaimer to the resource user. Only one benign and one + destructive reclaimer can be posted at once. When executed, the reclaimer + MUST call grpc_resource_user_finish_reclamation before it completes, to + return control to the resource quota. */ void grpc_resource_user_post_reclaimer(grpc_exec_ctx *exec_ctx, grpc_resource_user *resource_user, bool destructive, grpc_closure *closure); -void grpc_resource_user_finish_reclaimation(grpc_exec_ctx *exec_ctx, - grpc_resource_user *resource_user); +/* Finish a reclamation step */ +void grpc_resource_user_finish_reclamation(grpc_exec_ctx *exec_ctx, + grpc_resource_user *resource_user); +/* Helper to allocate slices from a resource user */ typedef struct grpc_resource_user_slice_allocator { grpc_closure on_allocated; grpc_closure on_done; @@ -119,10 +199,12 @@ typedef struct grpc_resource_user_slice_allocator { grpc_resource_user *resource_user; } grpc_resource_user_slice_allocator; +/* Initialize a slice allocator */ void grpc_resource_user_slice_allocator_init( grpc_resource_user_slice_allocator *slice_allocator, grpc_resource_user *resource_user, grpc_iomgr_cb_func cb, void *p); +/* Allocate \a count slices of length \a length into \a dest. */ void grpc_resource_user_alloc_slices( grpc_exec_ctx *exec_ctx, grpc_resource_user_slice_allocator *slice_allocator, size_t length, diff --git a/src/core/lib/iomgr/tcp_client.h b/src/core/lib/iomgr/tcp_client.h index b854e5aadc6..d1b0e9cd19f 100644 --- a/src/core/lib/iomgr/tcp_client.h +++ b/src/core/lib/iomgr/tcp_client.h @@ -39,6 +39,8 @@ #include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/iomgr/sockaddr.h" +/* Channel arg (integer) setting how large a slice to try and read from the wire + each time recvmsg (or equivalent) is called */ #define GRPC_ARG_TCP_READ_CHUNK_SIZE "grpc.experimental.tcp_read_chunk_size" /* Asynchronously connect to an address (specified as (addr, len)), and call diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index cc04b14577a..b9acdc1d4a7 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -90,7 +90,7 @@ END2END_TESTS = { 'bad_hostname': default_test_options, 'binary_metadata': default_test_options, 'resource_quota_server': default_test_options._replace(large_writes=True, - proxyable=False), + proxyable=False), 'call_creds': default_test_options._replace(secure=True), 'cancel_after_accept': default_test_options._replace(cpu_cost=LOWCPU), 'cancel_after_client_done': default_test_options, diff --git a/test/core/iomgr/resource_quota_test.c b/test/core/iomgr/resource_quota_test.c index 5963ed089b4..0fb94a495d9 100644 --- a/test/core/iomgr/resource_quota_test.c +++ b/test/core/iomgr/resource_quota_test.c @@ -57,7 +57,7 @@ static void reclaimer_cb(grpc_exec_ctx *exec_ctx, void *args, GPR_ASSERT(error == GRPC_ERROR_NONE); reclaimer_args *a = args; grpc_resource_user_free(exec_ctx, a->resource_user, a->size); - grpc_resource_user_finish_reclaimation(exec_ctx, a->resource_user); + grpc_resource_user_finish_reclamation(exec_ctx, a->resource_user); grpc_closure_run(exec_ctx, a->then, GRPC_ERROR_NONE); gpr_free(a); } From 6fd881e1839fcccb687d3fee69167f5e3e7fb395 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 21 Oct 2016 14:46:01 -0700 Subject: [PATCH 181/286] Advance versions of BoringSSL in podspec and template --- gRPC-Core.podspec | 2 +- templates/gRPC-Core.podspec.template | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 1ca8119a109..e59404932cd 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -191,7 +191,7 @@ Pod::Spec.new do |s| ss.header_mappings_dir = '.' ss.libraries = 'z' ss.dependency "#{s.name}/Interface", version - ss.dependency 'BoringSSL', '~> 6.0' + ss.dependency 'BoringSSL', '~> 7.0' # To save you from scrolling, this is the last part of the podspec. ss.source_files = 'src/core/lib/profiling/timers.h', diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template index dff7ce07d6d..3c8e7edab87 100644 --- a/templates/gRPC-Core.podspec.template +++ b/templates/gRPC-Core.podspec.template @@ -147,7 +147,7 @@ ss.header_mappings_dir = '.' ss.libraries = 'z' ss.dependency "#{s.name}/Interface", version - ss.dependency 'BoringSSL', '~> 6.0' + ss.dependency 'BoringSSL', '~> 7.0' # To save you from scrolling, this is the last part of the podspec. ss.source_files = ${ruby_multiline_list(grpc_private_files(libs), 22)} From 6ac6a52dcf4f4fbc01d88832e5e1559fd94f8921 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 21 Oct 2016 15:00:46 -0700 Subject: [PATCH 182/286] Fix stupid compiler error --- src/objective-c/GRPCClient/GRPCCall.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index 15cec45d15c..d9778665656 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -392,7 +392,7 @@ static NSMutableDictionary *callFlags; } }; [_connectivityMonitor handleLossWithHandler:handler - wifiStatusChangeHandler:nil]; + wifiStatusChangeHandler:^{}]; // Create a retain cycle so that this instance lives until the RPC finishes // (or is cancelled). From af842451318f73d0fd2dcb55f02baaa70c82f3f9 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 21 Oct 2016 15:05:15 -0700 Subject: [PATCH 183/286] Remove resolver_result. --- BUILD | 8 - CMakeLists.txt | 3 - Makefile | 3 - binding.gyp | 1 - build.yaml | 2 - config.m4 | 1 - gRPC-Core.podspec | 3 - grpc.gemspec | 2 - package.xml | 2 - src/core/ext/client_config/README.md | 21 +- src/core/ext/client_config/client_channel.c | 57 ++-- .../ext/client_config/lb_policy_factory.h | 4 - src/core/ext/client_config/resolver.c | 2 +- src/core/ext/client_config/resolver.h | 13 +- src/core/ext/client_config/resolver_factory.h | 2 - src/core/ext/client_config/resolver_result.c | 94 ------ src/core/ext/client_config/resolver_result.h | 69 ---- src/core/ext/lb_policy/grpclb/grpclb.c | 17 +- .../ext/resolver/dns/native/dns_resolver.c | 36 +- .../ext/resolver/sockaddr/sockaddr_resolver.c | 17 +- src/python/grpcio/grpc_core_dependencies.py | 1 - test/core/end2end/fake_resolver.c | 16 +- tools/doxygen/Doxyfile.core.internal | 2 - tools/run_tests/sources_and_headers.json | 3 - tools/run_tests/tests.json | 312 +++++++++--------- vsprojects/vcxproj/grpc/grpc.vcxproj | 3 - vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 6 - .../grpc_unsecure/grpc_unsecure.vcxproj | 3 - .../grpc_unsecure.vcxproj.filters | 6 - 29 files changed, 232 insertions(+), 477 deletions(-) delete mode 100644 src/core/ext/client_config/resolver_result.c delete mode 100644 src/core/ext/client_config/resolver_result.h diff --git a/BUILD b/BUILD index 5c4333463c6..801310422e6 100644 --- a/BUILD +++ b/BUILD @@ -304,7 +304,6 @@ cc_library( "src/core/ext/client_config/resolver.h", "src/core/ext/client_config/resolver_factory.h", "src/core/ext/client_config/resolver_registry.h", - "src/core/ext/client_config/resolver_result.h", "src/core/ext/client_config/subchannel.h", "src/core/ext/client_config/subchannel_index.h", "src/core/ext/client_config/uri_parser.h", @@ -486,7 +485,6 @@ cc_library( "src/core/ext/client_config/resolver.c", "src/core/ext/client_config/resolver_factory.c", "src/core/ext/client_config/resolver_registry.c", - "src/core/ext/client_config/resolver_result.c", "src/core/ext/client_config/subchannel.c", "src/core/ext/client_config/subchannel_index.c", "src/core/ext/client_config/uri_parser.c", @@ -686,7 +684,6 @@ cc_library( "src/core/ext/client_config/resolver.h", "src/core/ext/client_config/resolver_factory.h", "src/core/ext/client_config/resolver_registry.h", - "src/core/ext/client_config/resolver_result.h", "src/core/ext/client_config/subchannel.h", "src/core/ext/client_config/subchannel_index.h", "src/core/ext/client_config/uri_parser.h", @@ -850,7 +847,6 @@ cc_library( "src/core/ext/client_config/resolver.c", "src/core/ext/client_config/resolver_factory.c", "src/core/ext/client_config/resolver_registry.c", - "src/core/ext/client_config/resolver_result.c", "src/core/ext/client_config/subchannel.c", "src/core/ext/client_config/subchannel_index.c", "src/core/ext/client_config/uri_parser.c", @@ -1045,7 +1041,6 @@ cc_library( "src/core/ext/client_config/resolver.h", "src/core/ext/client_config/resolver_factory.h", "src/core/ext/client_config/resolver_registry.h", - "src/core/ext/client_config/resolver_result.h", "src/core/ext/client_config/subchannel.h", "src/core/ext/client_config/subchannel_index.h", "src/core/ext/client_config/uri_parser.h", @@ -1202,7 +1197,6 @@ cc_library( "src/core/ext/client_config/resolver.c", "src/core/ext/client_config/resolver_factory.c", "src/core/ext/client_config/resolver_registry.c", - "src/core/ext/client_config/resolver_result.c", "src/core/ext/client_config/subchannel.c", "src/core/ext/client_config/subchannel_index.c", "src/core/ext/client_config/uri_parser.c", @@ -1993,7 +1987,6 @@ objc_library( "src/core/ext/client_config/resolver.c", "src/core/ext/client_config/resolver_factory.c", "src/core/ext/client_config/resolver_registry.c", - "src/core/ext/client_config/resolver_result.c", "src/core/ext/client_config/subchannel.c", "src/core/ext/client_config/subchannel_index.c", "src/core/ext/client_config/uri_parser.c", @@ -2195,7 +2188,6 @@ objc_library( "src/core/ext/client_config/resolver.h", "src/core/ext/client_config/resolver_factory.h", "src/core/ext/client_config/resolver_registry.h", - "src/core/ext/client_config/resolver_result.h", "src/core/ext/client_config/subchannel.h", "src/core/ext/client_config/subchannel_index.h", "src/core/ext/client_config/uri_parser.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index 893aac36fbb..09febb191ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -451,7 +451,6 @@ add_library(grpc src/core/ext/client_config/resolver.c src/core/ext/client_config/resolver_factory.c src/core/ext/client_config/resolver_registry.c - src/core/ext/client_config/resolver_result.c src/core/ext/client_config/subchannel.c src/core/ext/client_config/subchannel_index.c src/core/ext/client_config/uri_parser.c @@ -686,7 +685,6 @@ add_library(grpc_cronet src/core/ext/client_config/resolver.c src/core/ext/client_config/resolver_factory.c src/core/ext/client_config/resolver_registry.c - src/core/ext/client_config/resolver_result.c src/core/ext/client_config/subchannel.c src/core/ext/client_config/subchannel_index.c src/core/ext/client_config/uri_parser.c @@ -919,7 +917,6 @@ add_library(grpc_unsecure src/core/ext/client_config/resolver.c src/core/ext/client_config/resolver_factory.c src/core/ext/client_config/resolver_registry.c - src/core/ext/client_config/resolver_result.c src/core/ext/client_config/subchannel.c src/core/ext/client_config/subchannel_index.c src/core/ext/client_config/uri_parser.c diff --git a/Makefile b/Makefile index 38be9e658ce..7c3feedd4e6 100644 --- a/Makefile +++ b/Makefile @@ -2708,7 +2708,6 @@ LIBGRPC_SRC = \ src/core/ext/client_config/resolver.c \ src/core/ext/client_config/resolver_factory.c \ src/core/ext/client_config/resolver_registry.c \ - src/core/ext/client_config/resolver_result.c \ src/core/ext/client_config/subchannel.c \ src/core/ext/client_config/subchannel_index.c \ src/core/ext/client_config/uri_parser.c \ @@ -2961,7 +2960,6 @@ LIBGRPC_CRONET_SRC = \ src/core/ext/client_config/resolver.c \ src/core/ext/client_config/resolver_factory.c \ src/core/ext/client_config/resolver_registry.c \ - src/core/ext/client_config/resolver_result.c \ src/core/ext/client_config/subchannel.c \ src/core/ext/client_config/subchannel_index.c \ src/core/ext/client_config/uri_parser.c \ @@ -3425,7 +3423,6 @@ LIBGRPC_UNSECURE_SRC = \ src/core/ext/client_config/resolver.c \ src/core/ext/client_config/resolver_factory.c \ src/core/ext/client_config/resolver_registry.c \ - src/core/ext/client_config/resolver_result.c \ src/core/ext/client_config/subchannel.c \ src/core/ext/client_config/subchannel_index.c \ src/core/ext/client_config/uri_parser.c \ diff --git a/binding.gyp b/binding.gyp index 397bb1b639b..03239060161 100644 --- a/binding.gyp +++ b/binding.gyp @@ -726,7 +726,6 @@ 'src/core/ext/client_config/resolver.c', 'src/core/ext/client_config/resolver_factory.c', 'src/core/ext/client_config/resolver_registry.c', - 'src/core/ext/client_config/resolver_result.c', 'src/core/ext/client_config/subchannel.c', 'src/core/ext/client_config/subchannel_index.c', 'src/core/ext/client_config/uri_parser.c', diff --git a/build.yaml b/build.yaml index 2a066531036..ee3d2727431 100644 --- a/build.yaml +++ b/build.yaml @@ -363,7 +363,6 @@ filegroups: - src/core/ext/client_config/resolver.h - src/core/ext/client_config/resolver_factory.h - src/core/ext/client_config/resolver_registry.h - - src/core/ext/client_config/resolver_result.h - src/core/ext/client_config/subchannel.h - src/core/ext/client_config/subchannel_index.h - src/core/ext/client_config/uri_parser.h @@ -384,7 +383,6 @@ filegroups: - src/core/ext/client_config/resolver.c - src/core/ext/client_config/resolver_factory.c - src/core/ext/client_config/resolver_registry.c - - src/core/ext/client_config/resolver_result.c - src/core/ext/client_config/subchannel.c - src/core/ext/client_config/subchannel_index.c - src/core/ext/client_config/uri_parser.c diff --git a/config.m4 b/config.m4 index d8716753b66..49dc222fac9 100644 --- a/config.m4 +++ b/config.m4 @@ -245,7 +245,6 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/client_config/resolver.c \ src/core/ext/client_config/resolver_factory.c \ src/core/ext/client_config/resolver_registry.c \ - src/core/ext/client_config/resolver_result.c \ src/core/ext/client_config/subchannel.c \ src/core/ext/client_config/subchannel_index.c \ src/core/ext/client_config/uri_parser.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index bb1bbc5f0eb..91358feab66 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -391,7 +391,6 @@ Pod::Spec.new do |s| 'src/core/ext/client_config/resolver.h', 'src/core/ext/client_config/resolver_factory.h', 'src/core/ext/client_config/resolver_registry.h', - 'src/core/ext/client_config/resolver_result.h', 'src/core/ext/client_config/subchannel.h', 'src/core/ext/client_config/subchannel_index.h', 'src/core/ext/client_config/uri_parser.h', @@ -577,7 +576,6 @@ Pod::Spec.new do |s| 'src/core/ext/client_config/resolver.c', 'src/core/ext/client_config/resolver_factory.c', 'src/core/ext/client_config/resolver_registry.c', - 'src/core/ext/client_config/resolver_result.c', 'src/core/ext/client_config/subchannel.c', 'src/core/ext/client_config/subchannel_index.c', 'src/core/ext/client_config/uri_parser.c', @@ -768,7 +766,6 @@ Pod::Spec.new do |s| 'src/core/ext/client_config/resolver.h', 'src/core/ext/client_config/resolver_factory.h', 'src/core/ext/client_config/resolver_registry.h', - 'src/core/ext/client_config/resolver_result.h', 'src/core/ext/client_config/subchannel.h', 'src/core/ext/client_config/subchannel_index.h', 'src/core/ext/client_config/uri_parser.h', diff --git a/grpc.gemspec b/grpc.gemspec index 85172922cc8..dbf8502b7d0 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -311,7 +311,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_config/resolver.h ) s.files += %w( src/core/ext/client_config/resolver_factory.h ) s.files += %w( src/core/ext/client_config/resolver_registry.h ) - s.files += %w( src/core/ext/client_config/resolver_result.h ) s.files += %w( src/core/ext/client_config/subchannel.h ) s.files += %w( src/core/ext/client_config/subchannel_index.h ) s.files += %w( src/core/ext/client_config/uri_parser.h ) @@ -497,7 +496,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_config/resolver.c ) s.files += %w( src/core/ext/client_config/resolver_factory.c ) s.files += %w( src/core/ext/client_config/resolver_registry.c ) - s.files += %w( src/core/ext/client_config/resolver_result.c ) s.files += %w( src/core/ext/client_config/subchannel.c ) s.files += %w( src/core/ext/client_config/subchannel_index.c ) s.files += %w( src/core/ext/client_config/uri_parser.c ) diff --git a/package.xml b/package.xml index 31a2822a758..d7517c01adf 100644 --- a/package.xml +++ b/package.xml @@ -318,7 +318,6 @@ - @@ -504,7 +503,6 @@ - diff --git a/src/core/ext/client_config/README.md b/src/core/ext/client_config/README.md index eda01e3e715..7c209db12e3 100644 --- a/src/core/ext/client_config/README.md +++ b/src/core/ext/client_config/README.md @@ -5,28 +5,27 @@ This library provides high level configuration machinery to construct client channels and load balance between them. Each grpc_channel is created with a grpc_resolver. It is the resolver's duty -to resolve a name into configuration data for the channel. Such configuration -data might include: +to resolve a name into a set of arguments for the channel. Such arguments +might include: - a list of (ip, port) addresses to connect to - a load balancing policy to decide which server to send a request to - a set of filters to mutate outgoing requests (say, by adding metadata) -The resolver provides this data as a stream of grpc_resolver_result objects to -the channel. We represent configuration as a stream so that it can be changed -by the resolver during execution, by reacting to external events (such as a -new configuration file being pushed to some store). +The resolver provides this data as a stream of grpc_channel_args objects to +the channel. We represent arguments as a stream so that they can be changed +by the resolver during execution, by reacting to external events (such as +new service configuration data being pushed to some store). Load Balancing -------------- -Load balancing configuration is provided by a grpc_lb_policy object, stored as -part of grpc_resolver_result. +Load balancing configuration is provided by a grpc_lb_policy object. -The primary job of the load balancing policies is to pick a target server given only the -initial metadata for a request. It does this by providing a grpc_subchannel -object to the owning channel. +The primary job of the load balancing policies is to pick a target server +given only the initial metadata for a request. It does this by providing +a grpc_subchannel object to the owning channel. Sub-Channels diff --git a/src/core/ext/client_config/client_channel.c b/src/core/ext/client_config/client_channel.c index f23da5f35d2..f1fca822e8a 100644 --- a/src/core/ext/client_config/client_channel.c +++ b/src/core/ext/client_config/client_channel.c @@ -79,7 +79,7 @@ typedef struct client_channel_channel_data { /** method config table */ grpc_method_config_table *method_config_table; /** incoming resolver result - set by resolver.next() */ - grpc_resolver_result *resolver_result; + grpc_channel_args *resolver_result; /** a list of closures that are all waiting for config to come in */ grpc_closure_list waiting_for_config_closures; /** resolver callback */ @@ -184,41 +184,42 @@ static void on_resolver_result_changed(grpc_exec_ctx *exec_ctx, void *arg, if (chand->resolver_result != NULL) { grpc_lb_policy_args lb_policy_args; - lb_policy_args.server_name = - grpc_resolver_result_get_server_name(chand->resolver_result); - lb_policy_args.addresses = - grpc_resolver_result_get_addresses(chand->resolver_result); - lb_policy_args.args = - grpc_resolver_result_get_channel_args(chand->resolver_result); + lb_policy_args.args = chand->resolver_result; lb_policy_args.client_channel_factory = chand->client_channel_factory; // Find LB policy name. const char *lb_policy_name = NULL; - const grpc_arg *lb_policy_name_arg = + const grpc_arg *channel_arg = grpc_channel_args_find(lb_policy_args.args, GRPC_ARG_LB_POLICY_NAME); - if (lb_policy_name_arg != NULL) { - GPR_ASSERT(lb_policy_name_arg->type == GRPC_ARG_STRING); - lb_policy_name = lb_policy_name_arg->value.string; + if (channel_arg != NULL) { + GPR_ASSERT(channel_arg->type == GRPC_ARG_STRING); + lb_policy_name = channel_arg->value.string; } // Special case: If all of the addresses are balancer addresses, // assume that we should use the grpclb policy, regardless of what the // resolver actually specified. - bool found_backend_address = false; - for (size_t i = 0; i < lb_policy_args.addresses->num_addresses; ++i) { - if (!lb_policy_args.addresses->addresses[i].is_balancer) { - found_backend_address = true; - break; + channel_arg = + grpc_channel_args_find(lb_policy_args.args, GRPC_ARG_LB_ADDRESSES); + if (channel_arg != NULL) { + GPR_ASSERT(channel_arg->type == GRPC_ARG_POINTER); + grpc_lb_addresses* addresses = channel_arg->value.pointer.p; + bool found_backend_address = false; + for (size_t i = 0; i < addresses->num_addresses; ++i) { + if (!addresses->addresses[i].is_balancer) { + found_backend_address = true; + break; + } } - } - if (!found_backend_address) { - if (lb_policy_name != NULL && strcmp(lb_policy_name, "grpclb") != 0) { - gpr_log(GPR_INFO, - "resolver requested LB policy %s but provided only balancer " - "addresses, no backend addresses -- forcing use of grpclb LB " - "policy", - (lb_policy_name == NULL ? "(none)" : lb_policy_name)); + if (!found_backend_address) { + if (lb_policy_name != NULL && strcmp(lb_policy_name, "grpclb") != 0) { + gpr_log(GPR_INFO, + "resolver requested LB policy %s but provided only balancer " + "addresses, no backend addresses -- forcing use of grpclb LB " + "policy", + (lb_policy_name == NULL ? "(none)" : lb_policy_name)); + } + lb_policy_name = "grpclb"; } - lb_policy_name = "grpclb"; } // Use pick_first if nothing was specified and we didn't select grpclb // above. @@ -232,14 +233,14 @@ static void on_resolver_result_changed(grpc_exec_ctx *exec_ctx, void *arg, state = grpc_lb_policy_check_connectivity(exec_ctx, lb_policy, &state_error); } - const grpc_arg *channel_arg = grpc_channel_args_find( - lb_policy_args.args, GRPC_ARG_SERVICE_CONFIG); + channel_arg = + grpc_channel_args_find(lb_policy_args.args, GRPC_ARG_SERVICE_CONFIG); if (channel_arg != NULL) { GPR_ASSERT(channel_arg->type == GRPC_ARG_POINTER); method_config_table = grpc_method_config_table_ref( (grpc_method_config_table *)channel_arg->value.pointer.p); } - grpc_resolver_result_unref(exec_ctx, chand->resolver_result); + grpc_channel_args_destroy(chand->resolver_result); chand->resolver_result = NULL; } diff --git a/src/core/ext/client_config/lb_policy_factory.h b/src/core/ext/client_config/lb_policy_factory.h index f0798a31674..26fe8f17ae4 100644 --- a/src/core/ext/client_config/lb_policy_factory.h +++ b/src/core/ext/client_config/lb_policy_factory.h @@ -102,11 +102,7 @@ grpc_arg grpc_lb_addresses_create_channel_arg( const grpc_lb_addresses *addresses); /** Arguments passed to LB policies. */ -/* TODO(roth, ctiller): Consider replacing this struct with - grpc_channel_args. See comment in resolver_result.h for details. */ typedef struct grpc_lb_policy_args { - const char *server_name; - grpc_lb_addresses *addresses; grpc_client_channel_factory *client_channel_factory; grpc_channel_args *args; } grpc_lb_policy_args; diff --git a/src/core/ext/client_config/resolver.c b/src/core/ext/client_config/resolver.c index 7534ea62af5..d3ca12484f4 100644 --- a/src/core/ext/client_config/resolver.c +++ b/src/core/ext/client_config/resolver.c @@ -76,7 +76,7 @@ void grpc_resolver_channel_saw_error(grpc_exec_ctx *exec_ctx, } void grpc_resolver_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, - grpc_resolver_result **result, + grpc_channel_args **result, grpc_closure *on_complete) { resolver->vtable->next(exec_ctx, resolver, result, on_complete); } diff --git a/src/core/ext/client_config/resolver.h b/src/core/ext/client_config/resolver.h index 88ac262d513..b5979a5bfd1 100644 --- a/src/core/ext/client_config/resolver.h +++ b/src/core/ext/client_config/resolver.h @@ -34,15 +34,13 @@ #ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_H #define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_H -#include "src/core/ext/client_config/resolver_result.h" #include "src/core/ext/client_config/subchannel.h" #include "src/core/lib/iomgr/iomgr.h" typedef struct grpc_resolver grpc_resolver; typedef struct grpc_resolver_vtable grpc_resolver_vtable; -/** grpc_resolver provides grpc_resolver_result objects to grpc_channel - objects */ +/** grpc_resolver provides grpc_channel_args objects to grpc_channel objects */ struct grpc_resolver { const grpc_resolver_vtable *vtable; gpr_refcount refs; @@ -53,7 +51,7 @@ struct grpc_resolver_vtable { void (*shutdown)(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver); void (*channel_saw_error)(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver); void (*next)(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, - grpc_resolver_result **result, grpc_closure *on_complete); + grpc_channel_args **result, grpc_closure *on_complete); }; #ifdef GRPC_RESOLVER_REFCOUNT_DEBUG @@ -81,14 +79,13 @@ void grpc_resolver_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver); void grpc_resolver_channel_saw_error(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver); -/** Get the next client config. Called by the channel to fetch a new - configuration. Expected to set *result with a new configuration, - and then schedule on_complete for execution. +/** Get the next result from the resolver. Expected to set *result with + new channel args and then schedule on_complete for execution. If resolution is fatally broken, set *result to NULL and schedule on_complete. */ void grpc_resolver_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, - grpc_resolver_result **result, + grpc_channel_args **result, grpc_closure *on_complete); #endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_H */ diff --git a/src/core/ext/client_config/resolver_factory.h b/src/core/ext/client_config/resolver_factory.h index e70e0565772..e97281c922b 100644 --- a/src/core/ext/client_config/resolver_factory.h +++ b/src/core/ext/client_config/resolver_factory.h @@ -41,8 +41,6 @@ typedef struct grpc_resolver_factory grpc_resolver_factory; typedef struct grpc_resolver_factory_vtable grpc_resolver_factory_vtable; -/** grpc_resolver provides grpc_resolver_result objects to grpc_channel - objects */ struct grpc_resolver_factory { const grpc_resolver_factory_vtable *vtable; }; diff --git a/src/core/ext/client_config/resolver_result.c b/src/core/ext/client_config/resolver_result.c deleted file mode 100644 index e6a6f2da620..00000000000 --- a/src/core/ext/client_config/resolver_result.c +++ /dev/null @@ -1,94 +0,0 @@ -// -// Copyright 2015, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -#include "src/core/ext/client_config/resolver_result.h" - -#include - -#include -#include - -#include "src/core/lib/channel/channel_args.h" - -struct grpc_resolver_result { - gpr_refcount refs; - char* server_name; - grpc_lb_addresses* addresses; - char* lb_policy_name; - grpc_channel_args* channel_args; -}; - -grpc_resolver_result* grpc_resolver_result_create( - const char* server_name, grpc_lb_addresses* addresses, - const char* lb_policy_name, grpc_channel_args* args) { - grpc_resolver_result* result = gpr_malloc(sizeof(*result)); - memset(result, 0, sizeof(*result)); - gpr_ref_init(&result->refs, 1); - result->server_name = gpr_strdup(server_name); - result->addresses = addresses; - result->lb_policy_name = gpr_strdup(lb_policy_name); - result->channel_args = args; - return result; -} - -void grpc_resolver_result_ref(grpc_resolver_result* result) { - gpr_ref(&result->refs); -} - -void grpc_resolver_result_unref(grpc_exec_ctx* exec_ctx, - grpc_resolver_result* result) { - if (gpr_unref(&result->refs)) { - gpr_free(result->server_name); - grpc_lb_addresses_destroy(result->addresses); - gpr_free(result->lb_policy_name); - grpc_channel_args_destroy(result->channel_args); - gpr_free(result); - } -} - -const char* grpc_resolver_result_get_server_name(grpc_resolver_result* result) { - return result->server_name; -} - -grpc_lb_addresses* grpc_resolver_result_get_addresses( - grpc_resolver_result* result) { - return result->addresses; -} - -const char* grpc_resolver_result_get_lb_policy_name( - grpc_resolver_result* result) { - return result->lb_policy_name; -} - -grpc_channel_args* grpc_resolver_result_get_channel_args( - grpc_resolver_result* result) { - return result->channel_args; -} diff --git a/src/core/ext/client_config/resolver_result.h b/src/core/ext/client_config/resolver_result.h deleted file mode 100644 index f081c0448a6..00000000000 --- a/src/core/ext/client_config/resolver_result.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// Copyright 2015, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H -#define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H - -#include "src/core/ext/client_config/lb_policy_factory.h" -#include "src/core/lib/iomgr/resolve_address.h" - -// TODO(roth, ctiller): In the long term, we are considering replacing -// the resolver_result data structure with grpc_channel_args. The idea is -// that the resolver will return a set of channel args that contains the -// information that is currently in the resolver_result struct. For -// example, there will be specific args indicating the set of addresses -// and the name of the LB policy to instantiate. Note that if we did -// this, we would probably want to change the data structure of -// grpc_channel_args such to a hash table or AVL or some other data -// structure that does not require linear search to find keys. - -/// Results reported from a grpc_resolver. -typedef struct grpc_resolver_result grpc_resolver_result; - -/// Takes ownership of \a addresses and \a args. -grpc_resolver_result* grpc_resolver_result_create( - const char* server_name, grpc_lb_addresses* addresses, - const char* lb_policy_name, grpc_channel_args* args); - -void grpc_resolver_result_ref(grpc_resolver_result* result); -void grpc_resolver_result_unref(grpc_exec_ctx* exec_ctx, - grpc_resolver_result* result); - -/// Accessors. Caller does NOT take ownership of results. -const char* grpc_resolver_result_get_server_name(grpc_resolver_result* result); -grpc_lb_addresses* grpc_resolver_result_get_addresses( - grpc_resolver_result* result); -const char* grpc_resolver_result_get_lb_policy_name( - grpc_resolver_result* result); -grpc_channel_args* grpc_resolver_result_get_channel_args( - grpc_resolver_result* result); - -#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H */ diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index fdc0bec9968..9784150eef7 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -465,16 +465,21 @@ static grpc_lb_policy *create_rr_locked( glb_lb_policy *glb_policy) { GPR_ASSERT(serverlist != NULL && serverlist->num_servers > 0); + if (glb_policy->addresses != NULL) { + /* dispose of the previous version */ + grpc_lb_addresses_destroy(glb_policy->addresses); + } + glb_policy->addresses = process_serverlist(serverlist); + grpc_lb_policy_args args; memset(&args, 0, sizeof(args)); - args.server_name = glb_policy->server_name; args.client_channel_factory = glb_policy->cc_factory; - args.addresses = process_serverlist(serverlist); // Replace the LB addresses in the channel args that we pass down to // the subchannel. static const char* keys_to_remove[] = {GRPC_ARG_LB_ADDRESSES}; - const grpc_arg arg = grpc_lb_addresses_create_channel_arg(args.addresses); + const grpc_arg arg = + grpc_lb_addresses_create_channel_arg(glb_policy->addresses); args.args = grpc_channel_args_copy_and_add_and_remove( glb_policy->args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove), &arg, 1); @@ -482,12 +487,6 @@ static grpc_lb_policy *create_rr_locked( grpc_lb_policy *rr = grpc_lb_policy_create(exec_ctx, "round_robin", &args); grpc_channel_args_destroy(args.args); - if (glb_policy->addresses != NULL) { - /* dispose of the previous version */ - grpc_lb_addresses_destroy(glb_policy->addresses); - } - glb_policy->addresses = args.addresses; - return rr; } diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index 039fb2225d5..cb3d8cea27d 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -54,10 +54,7 @@ typedef struct { /** base class: must be first */ grpc_resolver base; - /** target name */ -// FIXME: remove target_name when resolver_result goes away - char *target_name; - /** name to resolve (usually the same as target_name) */ + /** name to resolve */ char *name_to_resolve; /** default port to use */ char *default_port; @@ -75,9 +72,9 @@ typedef struct { /** pending next completion, or NULL */ grpc_closure *next_completion; /** target result address for next completion */ - grpc_resolver_result **target_result; + grpc_channel_args **target_result; /** current (fully resolved) result */ - grpc_resolver_result *resolved_result; + grpc_channel_args *resolved_result; /** retry timer */ bool have_retry_timer; grpc_timer retry_timer; @@ -98,7 +95,7 @@ static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, static void dns_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *r); static void dns_channel_saw_error(grpc_exec_ctx *exec_ctx, grpc_resolver *r); static void dns_next(grpc_exec_ctx *exec_ctx, grpc_resolver *r, - grpc_resolver_result **target_result, + grpc_channel_args **target_result, grpc_closure *on_complete); static const grpc_resolver_vtable dns_resolver_vtable = { @@ -131,7 +128,7 @@ static void dns_channel_saw_error(grpc_exec_ctx *exec_ctx, } static void dns_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, - grpc_resolver_result **target_result, + grpc_channel_args **target_result, grpc_closure *on_complete) { dns_resolver *r = (dns_resolver *)resolver; gpr_mu_lock(&r->mu); @@ -166,7 +163,7 @@ static void dns_on_retry_timer(grpc_exec_ctx *exec_ctx, void *arg, static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { dns_resolver *r = arg; - grpc_resolver_result *result = NULL; + grpc_channel_args *result = NULL; gpr_mu_lock(&r->mu); GPR_ASSERT(r->resolving); r->resolving = false; @@ -180,11 +177,9 @@ static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, NULL /* balancer_name */, NULL /* user_data */); } grpc_arg new_arg = grpc_lb_addresses_create_channel_arg(addresses); - grpc_channel_args* args = - grpc_channel_args_copy_and_add(r->channel_args, &new_arg, 1); + result = grpc_channel_args_copy_and_add(r->channel_args, &new_arg, 1); grpc_resolved_addresses_destroy(r->addresses); - result = grpc_resolver_result_create( - r->target_name, addresses, NULL /* lb_policy_name */, args); + grpc_lb_addresses_destroy(addresses); } else { gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC); gpr_timespec next_try = gpr_backoff_step(&r->backoff_state, now); @@ -204,8 +199,8 @@ static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_timer_init(exec_ctx, &r->retry_timer, next_try, dns_on_retry_timer, r, now); } - if (r->resolved_result) { - grpc_resolver_result_unref(exec_ctx, r->resolved_result); + if (r->resolved_result != NULL) { + grpc_channel_args_destroy(r->resolved_result); } r->resolved_result = result; r->resolved_version++; @@ -229,10 +224,7 @@ static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, dns_resolver *r) { if (r->next_completion != NULL && r->resolved_version != r->published_version) { - *r->target_result = r->resolved_result; - if (r->resolved_result) { - grpc_resolver_result_ref(r->resolved_result); - } + *r->target_result = grpc_channel_args_copy(r->resolved_result); grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; r->published_version = r->resolved_version; @@ -242,10 +234,9 @@ static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, static void dns_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) { dns_resolver *r = (dns_resolver *)gr; gpr_mu_destroy(&r->mu); - if (r->resolved_result) { - grpc_resolver_result_unref(exec_ctx, r->resolved_result); + if (r->resolved_result != NULL) { + grpc_channel_args_destroy(r->resolved_result); } - gpr_free(r->target_name); gpr_free(r->name_to_resolve); gpr_free(r->default_port); grpc_channel_args_destroy(r->channel_args); @@ -268,7 +259,6 @@ static grpc_resolver *dns_create(grpc_resolver_args *args, memset(r, 0, sizeof(*r)); gpr_mu_init(&r->mu); grpc_resolver_init(&r->base, &dns_resolver_vtable); - r->target_name = gpr_strdup(path); r->name_to_resolve = proxy_name == NULL ? gpr_strdup(path) : proxy_name; r->default_port = gpr_strdup(default_port); grpc_arg server_name_arg; diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index 93a34bf305f..3f161f2ebdf 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -41,6 +41,7 @@ #include #include +#include "src/core/ext/client_config/lb_policy_factory.h" #include "src/core/ext/client_config/parse_address.h" #include "src/core/ext/client_config/resolver_registry.h" #include "src/core/lib/channel/channel_args.h" @@ -51,9 +52,6 @@ typedef struct { /** base class: must be first */ grpc_resolver base; - /** the path component of the uri passed in */ -// FIXME: remove target_name when resolver_result goes away - char *target_name; /** the addresses that we've 'resolved' */ grpc_lb_addresses *addresses; /** channel args */ @@ -65,7 +63,7 @@ typedef struct { /** pending next completion, or NULL */ grpc_closure *next_completion; /** target result address for next completion */ - grpc_resolver_result **target_result; + grpc_channel_args **target_result; } sockaddr_resolver; static void sockaddr_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *r); @@ -77,7 +75,7 @@ static void sockaddr_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *r); static void sockaddr_channel_saw_error(grpc_exec_ctx *exec_ctx, grpc_resolver *r); static void sockaddr_next(grpc_exec_ctx *exec_ctx, grpc_resolver *r, - grpc_resolver_result **target_result, + grpc_channel_args **target_result, grpc_closure *on_complete); static const grpc_resolver_vtable sockaddr_resolver_vtable = { @@ -106,7 +104,7 @@ static void sockaddr_channel_saw_error(grpc_exec_ctx *exec_ctx, } static void sockaddr_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, - grpc_resolver_result **target_result, + grpc_channel_args **target_result, grpc_closure *on_complete) { sockaddr_resolver *r = (sockaddr_resolver *)resolver; gpr_mu_lock(&r->mu); @@ -122,11 +120,8 @@ static void sockaddr_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, if (r->next_completion != NULL && !r->published) { r->published = true; grpc_arg arg = grpc_lb_addresses_create_channel_arg(r->addresses); - grpc_channel_args* args = + *r->target_result = grpc_channel_args_copy_and_add(r->channel_args, &arg, 1); - *r->target_result = grpc_resolver_result_create( - r->target_name, grpc_lb_addresses_copy(r->addresses), - NULL /* lb_policy_name */, args); grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; } @@ -135,7 +130,6 @@ static void sockaddr_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, static void sockaddr_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) { sockaddr_resolver *r = (sockaddr_resolver *)gr; gpr_mu_destroy(&r->mu); - gpr_free(r->target_name); grpc_lb_addresses_destroy(r->addresses); grpc_channel_args_destroy(r->channel_args); gpr_free(r); @@ -206,7 +200,6 @@ static grpc_resolver *sockaddr_create(grpc_resolver_args *args, /* Instantiate resolver. */ sockaddr_resolver *r = gpr_malloc(sizeof(sockaddr_resolver)); memset(r, 0, sizeof(*r)); - r->target_name = gpr_strdup(args->uri->path); r->addresses = addresses; grpc_arg server_name_arg; server_name_arg.type = GRPC_ARG_STRING; diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index a40edfb0905..d44b826fb80 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -239,7 +239,6 @@ CORE_SOURCE_FILES = [ 'src/core/ext/client_config/resolver.c', 'src/core/ext/client_config/resolver_factory.c', 'src/core/ext/client_config/resolver_registry.c', - 'src/core/ext/client_config/resolver_result.c', 'src/core/ext/client_config/subchannel.c', 'src/core/ext/client_config/subchannel_index.c', 'src/core/ext/client_config/uri_parser.c', diff --git a/test/core/end2end/fake_resolver.c b/test/core/end2end/fake_resolver.c index f77f3eb27d2..8e0d8a45b3b 100644 --- a/test/core/end2end/fake_resolver.c +++ b/test/core/end2end/fake_resolver.c @@ -42,6 +42,7 @@ #include #include +#include "src/core/ext/client_config/lb_policy_factory.h" #include "src/core/ext/client_config/method_config.h" #include "src/core/ext/client_config/parse_address.h" #include "src/core/ext/client_config/resolver_registry.h" @@ -59,8 +60,6 @@ typedef struct { grpc_resolver base; // passed-in parameters -// FIXME: remove target_name once resolver_result is removed - char* target_name; // the path component of the uri passed in grpc_channel_args* channel_args; grpc_lb_addresses* addresses; char* lb_policy_name; @@ -73,13 +72,12 @@ typedef struct { // pending next completion, or NULL grpc_closure* next_completion; // target result address for next completion - grpc_resolver_result** target_result; + grpc_channel_args** target_result; } fake_resolver; static void fake_resolver_destroy(grpc_exec_ctx* exec_ctx, grpc_resolver* gr) { fake_resolver* r = (fake_resolver*)gr; gpr_mu_destroy(&r->mu); - gpr_free(r->target_name); grpc_channel_args_destroy(r->channel_args); grpc_lb_addresses_destroy(r->addresses); gpr_free(r->lb_policy_name); @@ -116,11 +114,8 @@ static void fake_resolver_maybe_finish_next_locked(grpc_exec_ctx* exec_ctx, new_args[num_args].value.string = r->lb_policy_name; ++num_args; } - grpc_channel_args* args = + *r->target_result = grpc_channel_args_copy_and_add(r->channel_args, new_args, num_args); - *r->target_result = grpc_resolver_result_create( - r->target_name, grpc_lb_addresses_copy(r->addresses), - r->lb_policy_name, args); grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; } @@ -136,7 +131,7 @@ static void fake_resolver_channel_saw_error(grpc_exec_ctx* exec_ctx, } static void fake_resolver_next(grpc_exec_ctx* exec_ctx, grpc_resolver* resolver, - grpc_resolver_result** target_result, + grpc_channel_args** target_result, grpc_closure* on_complete) { fake_resolver* r = (fake_resolver*)resolver; gpr_mu_lock(&r->mu); @@ -244,11 +239,10 @@ static grpc_resolver* fake_resolver_create(grpc_resolver_factory* factory, // Instantiate resolver. fake_resolver* r = gpr_malloc(sizeof(fake_resolver)); memset(r, 0, sizeof(*r)); - r->target_name = gpr_strdup(args->uri->path); grpc_arg server_name_arg; server_name_arg.type = GRPC_ARG_STRING; server_name_arg.key = GRPC_ARG_SERVER_NAME; - server_name_arg.value.string = r->target_name; + server_name_arg.value.string = args->uri->path; r->channel_args = grpc_channel_args_copy_and_add(args->args, &server_name_arg, 1); r->addresses = addresses; diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index e5c91cbb131..63d5b04ecc6 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -928,7 +928,6 @@ src/core/ext/client_config/parse_address.h \ src/core/ext/client_config/resolver.h \ src/core/ext/client_config/resolver_factory.h \ src/core/ext/client_config/resolver_registry.h \ -src/core/ext/client_config/resolver_result.h \ src/core/ext/client_config/subchannel.h \ src/core/ext/client_config/subchannel_index.h \ src/core/ext/client_config/uri_parser.h \ @@ -1114,7 +1113,6 @@ src/core/ext/client_config/parse_address.c \ src/core/ext/client_config/resolver.c \ src/core/ext/client_config/resolver_factory.c \ src/core/ext/client_config/resolver_registry.c \ -src/core/ext/client_config/resolver_result.c \ src/core/ext/client_config/subchannel.c \ src/core/ext/client_config/subchannel_index.c \ src/core/ext/client_config/uri_parser.c \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 7cfb1d4c17e..e8ceb294ef7 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6735,7 +6735,6 @@ "src/core/ext/client_config/resolver.h", "src/core/ext/client_config/resolver_factory.h", "src/core/ext/client_config/resolver_registry.h", - "src/core/ext/client_config/resolver_result.h", "src/core/ext/client_config/subchannel.h", "src/core/ext/client_config/subchannel_index.h", "src/core/ext/client_config/uri_parser.h" @@ -6773,8 +6772,6 @@ "src/core/ext/client_config/resolver_factory.h", "src/core/ext/client_config/resolver_registry.c", "src/core/ext/client_config/resolver_registry.h", - "src/core/ext/client_config/resolver_result.c", - "src/core/ext/client_config/resolver_result.h", "src/core/ext/client_config/subchannel.c", "src/core/ext/client_config/subchannel.h", "src/core/ext/client_config/subchannel_index.c", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 9ca4908ecac..d831d6df0c3 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -17002,7 +17002,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17023,7 +17025,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17044,7 +17048,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17065,7 +17071,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17086,7 +17094,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17107,7 +17117,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17128,7 +17140,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17149,7 +17163,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17170,7 +17186,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17191,7 +17209,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17212,7 +17232,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17233,7 +17255,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17254,7 +17278,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17275,7 +17301,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17296,7 +17324,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17317,7 +17347,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17338,7 +17370,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17359,7 +17393,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17380,7 +17416,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17401,7 +17439,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17422,7 +17462,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17443,7 +17485,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17464,7 +17508,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17485,7 +17531,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17506,7 +17554,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17527,7 +17577,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17548,7 +17600,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17569,7 +17623,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17590,7 +17646,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17611,7 +17669,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17632,7 +17692,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17653,7 +17715,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17674,7 +17738,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17695,7 +17761,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17716,7 +17784,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17737,7 +17807,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17758,7 +17830,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17779,7 +17853,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17800,7 +17876,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_test", @@ -17822,9 +17900,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17846,9 +17922,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17870,9 +17944,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17894,9 +17966,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17918,9 +17988,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17942,9 +18010,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17966,9 +18032,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -17990,9 +18054,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18014,9 +18076,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18038,9 +18098,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18128,9 +18186,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18152,9 +18208,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18176,9 +18230,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18200,9 +18252,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18224,9 +18274,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18248,9 +18296,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18272,9 +18318,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18318,9 +18362,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18342,9 +18384,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18366,9 +18406,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18390,9 +18428,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18414,9 +18450,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18438,9 +18472,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18462,9 +18494,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18486,9 +18516,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18510,9 +18538,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18534,9 +18560,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18558,9 +18582,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18582,9 +18604,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18606,9 +18626,7 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18630,9 +18648,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18654,9 +18670,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18678,9 +18692,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18702,9 +18714,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18726,9 +18736,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18772,9 +18780,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18796,9 +18802,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18820,9 +18824,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", @@ -18844,9 +18846,7 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], + "exclude_configs": [], "flaky": false, "language": "c", "name": "h2_ssl_test", diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index b8c0049db50..d7bbc43828d 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -437,7 +437,6 @@ - @@ -787,8 +786,6 @@ - - diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index fb1f904811d..2c19b37099c 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -487,9 +487,6 @@ src\core\ext\client_config - - src\core\ext\client_config - src\core\ext\client_config @@ -1100,9 +1097,6 @@ src\core\ext\client_config - - src\core\ext\client_config - src\core\ext\client_config diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 519d7317bad..8ee7471e2ce 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -403,7 +403,6 @@ - @@ -703,8 +702,6 @@ - - diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index d30df5c03d5..c0582e8a4fc 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -412,9 +412,6 @@ src\core\ext\client_config - - src\core\ext\client_config - src\core\ext\client_config @@ -938,9 +935,6 @@ src\core\ext\client_config - - src\core\ext\client_config - src\core\ext\client_config From 6134d1d4c8b4e8965e7a4ec59621b1e9e9360e5a Mon Sep 17 00:00:00 2001 From: Noah Eisen Date: Fri, 21 Oct 2016 17:07:01 -0700 Subject: [PATCH 184/286] change unimplemented_method to unimplemented_service. Add real unimplemented_method test --- src/php/tests/interop/interop_client.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/php/tests/interop/interop_client.php b/src/php/tests/interop/interop_client.php index 72012a49d0a..3d62e86ab04 100755 --- a/src/php/tests/interop/interop_client.php +++ b/src/php/tests/interop/interop_client.php @@ -500,6 +500,16 @@ function statusCodeAndMessage($stub) $status->details); } +# NOTE: the stub input to this function is from UnimplementedService +function unimplementedService($stub) +{ + $call = $stub->UnimplementedCall(new grpc\testing\EmptyMessage()); + list($result, $status) = $call->wait(); + hardAssert($status->code === Grpc\STATUS_UNIMPLEMENTED, + 'Received unexpected status code'); +} + +# NOTE: the stub input to this function is from TestService function unimplementedMethod($stub) { $call = $stub->UnimplementedCall(new grpc\testing\EmptyMessage()); @@ -592,7 +602,7 @@ function _makeStub($args) $opts['update_metadata'] = $update_metadata; } - if ($test_case === 'unimplemented_method') { + if ($test_case === 'unimplemented_service') { $stub = new grpc\testing\UnimplementedServiceClient($server_address, $opts); } else { @@ -645,6 +655,9 @@ function interop_main($args, $stub = false) case 'status_code_and_message': statusCodeAndMessage($stub); break; + case 'unimplemented_service': + unimplementedService($stub); + break; case 'unimplemented_method': unimplementedMethod($stub); break; From ad93106da012bcd2080d229ab5b6c61dd2f59fed Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Sat, 22 Oct 2016 12:00:37 -0700 Subject: [PATCH 185/286] Keep a singleton of connectivity monitor in GRPCHost --- src/objective-c/GRPCClient/private/GRPCHost.m | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index 9d7b3a7f0bf..7031e01eb11 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -100,19 +100,16 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; _address = address; _secure = YES; kHostCache[address] = self; - - // When there is host in the cache, keep a single monitor to the network - // to - // flush the cache if the connectivity status changed - if (!connectivityMonitor) { - connectivityMonitor = - [GRPCConnectivityMonitor monitorWithHost:hostURL.host]; - void (^handler)() = ^{ - [GRPCHost flushChannelCache]; - }; - [connectivityMonitor handleLossWithHandler:handler - wifiStatusChangeHandler:handler]; - } + } + // Keep a single monitor to flush the cache if the connectivity status changed + if (!connectivityMonitor) { + connectivityMonitor = + [GRPCConnectivityMonitor monitorWithHost:hostURL.host]; + void (^handler)() = ^{ + [GRPCHost flushChannelCache]; + }; + [connectivityMonitor handleLossWithHandler:handler + wifiStatusChangeHandler:handler]; } } return self; @@ -125,8 +122,6 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; BOOL * _Nonnull stop) { [host disconnect]; }]; - [kHostCache removeAllObjects]; - connectivityMonitor = nil; } } From 8cdf17a620a2d0909c1785717d5b3d8cff1248fd Mon Sep 17 00:00:00 2001 From: Harvey Tuch Date: Tue, 11 Oct 2016 10:04:53 -0400 Subject: [PATCH 186/286] Introduce a grpc-exp ALPN protocol identifier. This patch introduces an additional ALPN protocol, grpc-exp, intended to take preference to h2 and indicate to the server that the connection contains only gRPC traffic. This allows servers and intermediate boxes to distinguish gRPC from other HTTP/2 traffic. The choice of grpc-exp as a protocol identifier indicates that this scheme is currently experimental and should not be relied upon. The protocol is not in the IANA TLS registry. This patch also introduces client/server handshake tests that validate the preferential treatment of grpc-exp in an end-to-end manner. --- CMakeLists.txt | 62 +++++ Makefile | 68 ++++- build.yaml | 22 ++ src/core/ext/transport/chttp2/alpn/alpn.c | 2 +- test/core/handshake/client_ssl.c | 292 ++++++++++++++++++++++ test/core/handshake/server_ssl.c | 264 +++++++++++++++++++ test/core/transport/chttp2/alpn_test.c | 19 ++ tools/run_tests/sources_and_headers.json | 34 +++ tools/run_tests/tests.json | 38 +++ vsprojects/buildtests_c.sln | 54 ++++ vsprojects/grpc.sln | 54 ++++ 11 files changed, 907 insertions(+), 2 deletions(-) create mode 100644 test/core/handshake/client_ssl.c create mode 100644 test/core/handshake/server_ssl.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f352aa73e7..567af2c2762 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1665,6 +1665,68 @@ if (gRPC_INSTALL) endif() +add_executable(handshake_client + test/core/handshake/client_ssl.c +) + +target_include_directories(handshake_client + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include + PRIVATE ${BORINGSSL_ROOT_DIR}/include + PRIVATE ${PROTOBUF_ROOT_DIR}/src + PRIVATE ${ZLIB_ROOT_DIR} + PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib +) + +target_link_libraries(handshake_client + ${_gRPC_SSL_LIBRARIES} + grpc_test_util + grpc + gpr_test_util + gpr +) + + +if (gRPC_INSTALL) + install(TARGETS handshake_client EXPORT gRPCTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) +endif() + + +add_executable(handshake_server + test/core/handshake/server_ssl.c +) + +target_include_directories(handshake_server + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include + PRIVATE ${BORINGSSL_ROOT_DIR}/include + PRIVATE ${PROTOBUF_ROOT_DIR}/src + PRIVATE ${ZLIB_ROOT_DIR} + PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib +) + +target_link_libraries(handshake_server + ${_gRPC_SSL_LIBRARIES} + grpc_test_util + grpc + gpr_test_util + gpr +) + + +if (gRPC_INSTALL) + install(TARGETS handshake_server EXPORT gRPCTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) +endif() + + add_executable(grpc_cpp_plugin src/compiler/cpp_plugin.cc ) diff --git a/Makefile b/Makefile index 2729e3ba8eb..e634c1a16ea 100644 --- a/Makefile +++ b/Makefile @@ -969,6 +969,8 @@ grpc_jwt_verifier_test: $(BINDIR)/$(CONFIG)/grpc_jwt_verifier_test grpc_print_google_default_creds_token: $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token grpc_security_connector_test: $(BINDIR)/$(CONFIG)/grpc_security_connector_test grpc_verify_jwt: $(BINDIR)/$(CONFIG)/grpc_verify_jwt +handshake_client: $(BINDIR)/$(CONFIG)/handshake_client +handshake_server: $(BINDIR)/$(CONFIG)/handshake_server hpack_parser_fuzzer_test: $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test hpack_parser_test: $(BINDIR)/$(CONFIG)/hpack_parser_test hpack_table_test: $(BINDIR)/$(CONFIG)/hpack_table_test @@ -1864,7 +1866,7 @@ test_python: static_c tools: tools_c tools_cxx -tools_c: privatelibs_c $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token $(BINDIR)/$(CONFIG)/grpc_verify_jwt +tools_c: privatelibs_c $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token $(BINDIR)/$(CONFIG)/grpc_verify_jwt $(BINDIR)/$(CONFIG)/handshake_client $(BINDIR)/$(CONFIG)/handshake_server tools_cxx: privatelibs_cxx @@ -9034,6 +9036,70 @@ endif endif +HANDSHAKE_CLIENT_SRC = \ + test/core/handshake/client_ssl.c \ + +HANDSHAKE_CLIENT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HANDSHAKE_CLIENT_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/handshake_client: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/handshake_client: $(HANDSHAKE_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(HANDSHAKE_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/handshake_client + +endif + +$(OBJDIR)/$(CONFIG)/test/core/handshake/client_ssl.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_handshake_client: $(HANDSHAKE_CLIENT_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(HANDSHAKE_CLIENT_OBJS:.o=.dep) +endif +endif + + +HANDSHAKE_SERVER_SRC = \ + test/core/handshake/server_ssl.c \ + +HANDSHAKE_SERVER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HANDSHAKE_SERVER_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/handshake_server: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/handshake_server: $(HANDSHAKE_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(HANDSHAKE_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/handshake_server + +endif + +$(OBJDIR)/$(CONFIG)/test/core/handshake/server_ssl.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_handshake_server: $(HANDSHAKE_SERVER_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(HANDSHAKE_SERVER_OBJS:.o=.dep) +endif +endif + + HPACK_PARSER_FUZZER_TEST_SRC = \ test/core/transport/chttp2/hpack_parser_fuzzer_test.c \ diff --git a/build.yaml b/build.yaml index 8594380658b..1ac6e51d4d7 100644 --- a/build.yaml +++ b/build.yaml @@ -1968,6 +1968,28 @@ targets: deps: - grpc - gpr +- name: handshake_client + build: tool + language: c + src: + - test/core/handshake/client_ssl.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr + secure: true +- name: handshake_server + build: tool + language: c + src: + - test/core/handshake/server_ssl.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr + secure: true - name: hpack_parser_fuzzer_test build: fuzzer language: c diff --git a/src/core/ext/transport/chttp2/alpn/alpn.c b/src/core/ext/transport/chttp2/alpn/alpn.c index 48b02172651..55710dc5ae2 100644 --- a/src/core/ext/transport/chttp2/alpn/alpn.c +++ b/src/core/ext/transport/chttp2/alpn/alpn.c @@ -36,7 +36,7 @@ #include /* in order of preference */ -static const char *const supported_versions[] = {"h2"}; +static const char *const supported_versions[] = {"grpc-exp", "h2"}; int grpc_chttp2_is_alpn_version_supported(const char *version, size_t size) { size_t i; diff --git a/test/core/handshake/client_ssl.c b/test/core/handshake/client_ssl.c new file mode 100644 index 00000000000..7cce77fb97d --- /dev/null +++ b/test/core/handshake/client_ssl.c @@ -0,0 +1,292 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include "src/core/lib/iomgr/load_file.h" +#include "test/core/util/port.h" +#include "test/core/util/test_config.h" + +#define SSL_CERT_PATH "src/core/lib/tsi/test_creds/server1.pem" +#define SSL_KEY_PATH "src/core/lib/tsi/test_creds/server1.key" +#define SSL_CA_PATH "src/core/lib/tsi/test_creds/ca.pem" + +// Arguments for TLS server thread. +typedef struct { + int port; + char *alpn_preferred; +} server_args; + +// From https://wiki.openssl.org/index.php/Simple_TLS_Server. +int create_socket(int port) { + int s; + struct sockaddr_in addr; + + addr.sin_family = AF_INET; + addr.sin_port = htons((uint16_t)port); + addr.sin_addr.s_addr = htonl(INADDR_ANY); + + s = socket(AF_INET, SOCK_STREAM, 0); + if (s < 0) { + perror("Unable to create socket"); + abort(); + } + + if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + perror("Unable to bind"); + abort(); + } + + if (listen(s, 1) < 0) { + perror("Unable to listen"); + abort(); + } + + return s; +} + +// Server callback during ALPN negotiation. See man page for +// SSL_CTX_set_alpn_select_cb. +static int alpn_select_cb(SSL *ssl, const uint8_t **out, uint8_t *out_len, + const uint8_t *in, unsigned in_len, void *arg) { + const uint8_t *alpn_preferred = (const uint8_t *)arg; + + *out = alpn_preferred; + *out_len = (uint8_t)strlen((char *)alpn_preferred); + + // Validate that the ALPN list includes "h2" and "grpc-exp", that "grpc-exp" + // precedes "h2". + bool grpc_exp_seen = false; + bool h2_seen = false; + const char *inp = (const char *)in; + for (int i = 0; i < (int)in_len; ++i) { + const size_t length = (size_t)*inp++; + if (length == strlen("grpc-exp") && strncmp(inp, "grpc-exp", length) == 0) { + grpc_exp_seen = true; + GPR_ASSERT(!h2_seen); + } + if (length == strlen("h2") && strncmp(inp, "h2", length) == 0) { + h2_seen = true; + GPR_ASSERT(grpc_exp_seen); + } + inp += length; + } + + GPR_ASSERT(grpc_exp_seen); + GPR_ASSERT(h2_seen); + + return SSL_TLSEXT_ERR_OK; +} + +// Minimal TLS server. This is largely based on the example at +// https://wiki.openssl.org/index.php/Simple_TLS_Server and the gRPC core +// internals in src/core/lib/tsi/ssl_transport_security.c. +static void server_thread(void *arg) { + const server_args *args = (server_args *)arg; + + SSL_load_error_strings(); + OpenSSL_add_ssl_algorithms(); + + const SSL_METHOD *method = TLSv1_2_server_method(); + SSL_CTX *ctx = SSL_CTX_new(method); + if (!ctx) { + perror("Unable to create SSL context"); + ERR_print_errors_fp(stderr); + abort(); + } + + // Load key pair. + if (SSL_CTX_use_certificate_file(ctx, SSL_CERT_PATH, SSL_FILETYPE_PEM) < 0) { + ERR_print_errors_fp(stderr); + abort(); + } + if (SSL_CTX_use_PrivateKey_file(ctx, SSL_KEY_PATH, SSL_FILETYPE_PEM) < 0) { + ERR_print_errors_fp(stderr); + abort(); + } + + // Set the cipher list to match the one expressed in + // src/core/lib/tsi/ssl_transport_security.c. + const char *cipher_list = + "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-" + "SHA384:ECDHE-RSA-AES256-GCM-SHA384"; + if (!SSL_CTX_set_cipher_list(ctx, cipher_list)) { + ERR_print_errors_fp(stderr); + gpr_log(GPR_ERROR, "Couldn't set server cipher list."); + abort(); + } + + // Register the ALPN selection callback. + SSL_CTX_set_alpn_select_cb(ctx, alpn_select_cb, args->alpn_preferred); + + // bind/list/accept at TCP layer. + const int sock = create_socket(args->port); + gpr_log(GPR_INFO, "Server listening on port %d", args->port); + struct sockaddr_in addr; + socklen_t len = sizeof(addr); + const int client = accept(sock, (struct sockaddr *)&addr, &len); + if (client < 0) { + perror("Unable to accept"); + abort(); + } + + // Establish a SSL* and accept at SSL layer. + SSL *ssl = SSL_new(ctx); + GPR_ASSERT(ssl); + SSL_set_fd(ssl, client); + if (SSL_accept(ssl) <= 0) { + ERR_print_errors_fp(stderr); + gpr_log(GPR_ERROR, "Handshake failed."); + } else { + gpr_log(GPR_INFO, "Handshake successful."); + } + + // Wait until the client drops its connection. + char buf; + while (SSL_read(ssl, &buf, sizeof(buf)) > 0); + + SSL_free(ssl); + close(client); + close(sock); + SSL_CTX_free(ctx); + EVP_cleanup(); +} + +// This test launches a minimal TLS server on a separate thread and then +// establishes a TLS handshake via the core library to the server. The TLS +// server validates ALPN aspects of the handshake and supplies the protocol +// specified in the server_alpn_preferred argument to the client. +static bool client_ssl_test(char *server_alpn_preferred) { + bool success = true; + + grpc_init(); + const int port = grpc_pick_unused_port_or_die(); + + // Launch the TLS server thread. + gpr_thd_options thdopt = gpr_thd_options_default(); + gpr_thd_id thdid; + gpr_thd_options_set_joinable(&thdopt); + server_args args = { .port = port, .alpn_preferred = server_alpn_preferred }; + GPR_ASSERT(gpr_thd_new(&thdid, server_thread, &args, &thdopt)); + + // Load key pair and establish client SSL credentials. + grpc_ssl_pem_key_cert_pair pem_key_cert_pair; + gpr_slice ca_slice, cert_slice, key_slice; + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_CA_PATH, 1, &ca_slice))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_CERT_PATH, 1, &cert_slice))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_KEY_PATH, 1, &key_slice))); + const char *ca_cert = (const char*)GPR_SLICE_START_PTR(ca_slice); + pem_key_cert_pair.private_key = (const char *)GPR_SLICE_START_PTR(key_slice); + pem_key_cert_pair.cert_chain = (const char *)GPR_SLICE_START_PTR(cert_slice); + grpc_channel_credentials *ssl_creds = + grpc_ssl_credentials_create(ca_cert, &pem_key_cert_pair, NULL); + + // Establish a channel pointing at the TLS server. Since the gRPC runtime is + // lazy, this won't necessarily establish a connection yet. + char *target; + gpr_asprintf(&target, "127.0.0.1:%d", port); + grpc_arg ssl_name_override = {GRPC_ARG_STRING, + GRPC_SSL_TARGET_NAME_OVERRIDE_ARG, + {"foo.test.google.fr"}}; + grpc_channel_args grpc_args; + grpc_args.num_args = 1; + grpc_args.args = &ssl_name_override; + grpc_channel *channel = grpc_secure_channel_create(ssl_creds, target, &grpc_args, NULL); + GPR_ASSERT(channel); + gpr_free(target); + + // Initially the channel will be idle, the + // grpc_channel_check_connectivity_state triggers an attempt to connect. + GPR_ASSERT(grpc_channel_check_connectivity_state( + channel, 1 /* try_to_connect */) == GRPC_CHANNEL_IDLE); + + // Wait a bounded number of times for the channel to be ready. When the + // channel is ready, the initial TLS handshake will have successfully + // completed and we know that the client's ALPN list satisfied the server. + int retries = 10; + grpc_connectivity_state state = GRPC_CHANNEL_IDLE; + grpc_completion_queue *cq = grpc_completion_queue_create(NULL); + while (state != GRPC_CHANNEL_READY && retries-- > 0) { + grpc_channel_watch_connectivity_state( + channel, state, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3), cq, NULL); + gpr_timespec cq_deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5); + grpc_event ev = grpc_completion_queue_next(cq, cq_deadline, NULL); + GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); + state = + grpc_channel_check_connectivity_state(channel, 0 /* try_to_connect */); + } + grpc_completion_queue_destroy(cq); + if (retries < 0) { + success = false; + } + + grpc_channel_destroy(channel); + grpc_channel_credentials_release(ssl_creds); + gpr_slice_unref(cert_slice); + gpr_slice_unref(key_slice); + gpr_slice_unref(ca_slice); + + gpr_thd_join(thdid); + + grpc_shutdown(); + + return success; +} + +int main(int argc, char *argv[]) { + // Handshake succeeeds when the server has grpc-exp as the ALPN preference. + GPR_ASSERT(client_ssl_test("grpc-exp")); + // Handshake succeeeds when the server has h2 as the ALPN preference. This + // covers legacy gRPC servers which don't support grpc-exp. + GPR_ASSERT(client_ssl_test("h2")); + // Handshake fails when the server uses a fake protocol as its ALPN + // preference. This validates the client is correctly validating ALPN returns + // and sanity checks the client_ssl_test. + GPR_ASSERT(!client_ssl_test("foo")); + return 0; +} diff --git a/test/core/handshake/server_ssl.c b/test/core/handshake/server_ssl.c new file mode 100644 index 00000000000..b05d168a932 --- /dev/null +++ b/test/core/handshake/server_ssl.c @@ -0,0 +1,264 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include "src/core/lib/iomgr/load_file.h" +#include "test/core/util/port.h" +#include "test/core/util/test_config.h" + +#define SSL_CERT_PATH "src/core/lib/tsi/test_creds/server1.pem" +#define SSL_KEY_PATH "src/core/lib/tsi/test_creds/server1.key" +#define SSL_CA_PATH "src/core/lib/tsi/test_creds/ca.pem" + +// Handshake completed signal to server thread. +static bool client_handshake_complete = false; + +static int create_socket(int port) { + int s; + struct sockaddr_in addr; + + addr.sin_family = AF_INET; + addr.sin_port = htons((uint16_t)port); + addr.sin_addr.s_addr = htonl(INADDR_ANY); + + s = socket(AF_INET, SOCK_STREAM, 0); + if (s < 0) { + perror("Unable to create socket"); + return -1; + } + + if (connect(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + perror("Unable to connect"); + return -1; + } + + return s; +} + +// Simple gRPC server. This listens until client_handshake_complete occurs. +static void server_thread(void *arg) { + const int port = *(int *)arg; + + // Load key pair and establish server SSL credentials. + grpc_ssl_pem_key_cert_pair pem_key_cert_pair; + gpr_slice ca_slice, cert_slice, key_slice; + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_CA_PATH, 1, &ca_slice))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_CERT_PATH, 1, &cert_slice))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_KEY_PATH, 1, &key_slice))); + const char *ca_cert = (const char *)GPR_SLICE_START_PTR(ca_slice); + pem_key_cert_pair.private_key = (const char *)GPR_SLICE_START_PTR(key_slice); + pem_key_cert_pair.cert_chain = (const char *)GPR_SLICE_START_PTR(cert_slice); + grpc_server_credentials *ssl_creds = grpc_ssl_server_credentials_create( + ca_cert, &pem_key_cert_pair, 1, 0, NULL); + + // Start server listening on local port. + char *addr; + gpr_asprintf(&addr, "127.0.0.1:%d", port); + grpc_server *server = grpc_server_create(NULL, NULL); + GPR_ASSERT(grpc_server_add_secure_http2_port(server, addr, ssl_creds)); + + grpc_completion_queue *cq = grpc_completion_queue_create(NULL); + + grpc_server_register_completion_queue(server, cq, NULL); + grpc_server_start(server); + + // Wait a bounded number of time until client_handshake_complete is set, + // sleeping between polls. + int retries = 10; + while (!client_handshake_complete && retries-- > 0) { + const gpr_timespec cq_deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1); + grpc_event ev = grpc_completion_queue_next(cq, cq_deadline, NULL); + GPR_ASSERT(ev.type == GRPC_QUEUE_TIMEOUT); + } + + gpr_log(GPR_INFO, "Shutting down server"); + grpc_server_shutdown_and_notify(server, cq, NULL); + grpc_completion_queue_shutdown(cq); + + const gpr_timespec cq_deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5); + grpc_event ev = grpc_completion_queue_next(cq, cq_deadline, NULL); + GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); + + grpc_completion_queue_destroy(cq); + grpc_server_credentials_release(ssl_creds); + gpr_slice_unref(cert_slice); + gpr_slice_unref(key_slice); + gpr_slice_unref(ca_slice); +} + +// This test launches a gRPC server on a separate thread and then establishes a +// TLS handshake via a minimal TLS client. The TLS client has configurable (via +// alpn_list) ALPN settings and can probe at the supported ALPN preferences +// using this (via alpn_expected). +static bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, + const char *alpn_expected) { + bool success = true; + + grpc_init(); + int port = grpc_pick_unused_port_or_die(); + client_handshake_complete = false; + + // Launch the gRPC server thread. + gpr_thd_options thdopt = gpr_thd_options_default(); + gpr_thd_id thdid; + gpr_thd_options_set_joinable(&thdopt); + GPR_ASSERT(gpr_thd_new(&thdid, server_thread, &port, &thdopt)); + + SSL_load_error_strings(); + OpenSSL_add_ssl_algorithms(); + + const SSL_METHOD *method = TLSv1_2_client_method(); + SSL_CTX *ctx = SSL_CTX_new(method); + if (!ctx) { + perror("Unable to create SSL context"); + ERR_print_errors_fp(stderr); + abort(); + } + + // Load key pair. + if (SSL_CTX_use_certificate_file(ctx, SSL_CERT_PATH, SSL_FILETYPE_PEM) < 0) { + ERR_print_errors_fp(stderr); + abort(); + } + if (SSL_CTX_use_PrivateKey_file(ctx, SSL_KEY_PATH, SSL_FILETYPE_PEM) < 0) { + ERR_print_errors_fp(stderr); + abort(); + } + + // Set the cipher list to match the one expressed in + // src/core/lib/tsi/ssl_transport_security.c. + const char *cipher_list = + "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-" + "SHA384:ECDHE-RSA-AES256-GCM-SHA384"; + if (!SSL_CTX_set_cipher_list(ctx, cipher_list)) { + ERR_print_errors_fp(stderr); + gpr_log(GPR_ERROR, "Couldn't set server cipher list."); + abort(); + } + + // Configure ALPN list the client will send to the server. This must match the + // wire format, see documentation for SSL_CTX_set_alpn_protos. + unsigned int alpn_protos_len = alpn_list_len; + for (unsigned int i = 0; i < alpn_list_len; ++i) { + alpn_protos_len += (unsigned int)strlen(alpn_list[i]); + } + unsigned char *alpn_protos = gpr_malloc(alpn_protos_len); + unsigned char *p = alpn_protos; + for (unsigned int i = 0; i < alpn_list_len; ++i) { + const uint8_t len = (uint8_t)strlen(alpn_list[i]); + *p++ = len; + memcpy(p, alpn_list[i], len); + p += len; + } + GPR_ASSERT(SSL_CTX_set_alpn_protos(ctx, alpn_protos, alpn_protos_len) == 0); + + // Try and connect to server. We allow a bounded number of retries as we might + // be racing with the server setup on its separate thread. + int retries = 10; + int sock = -1; + while (sock == -1 && retries-- > 0) { + sock = create_socket(port); + if (sock < 0) { + sleep(1); + } + } + GPR_ASSERT(sock > 0); + gpr_log(GPR_INFO, "Connected to server on port %d", port); + + // Establish a SSL* and connect at SSL layer. + SSL *ssl = SSL_new(ctx); + GPR_ASSERT(ssl); + SSL_set_fd(ssl, sock); + if (SSL_connect(ssl) <= 0) { + ERR_print_errors_fp(stderr); + gpr_log(GPR_ERROR, "Handshake failed."); + success = false; + } else { + gpr_log(GPR_INFO, "Handshake successful."); + // Validate ALPN preferred by server matches alpn_expected. + const unsigned char *alpn_selected; + unsigned int alpn_selected_len; + SSL_get0_alpn_selected(ssl, &alpn_selected, &alpn_selected_len); + if (strlen(alpn_expected) != alpn_selected_len || + strncmp((const char *)alpn_selected, alpn_expected, alpn_selected_len) != 0) { + gpr_log(GPR_ERROR, "Unexpected ALPN protocol preference"); + success = false; + } + } + client_handshake_complete = true; + + gpr_free(alpn_protos); + SSL_CTX_free(ctx); + EVP_cleanup(); + + gpr_thd_join(thdid); + + grpc_shutdown(); + + return success; +} + +int main(int argc, char *argv[]) { + // Handshake succeeeds when the client supplies the standard ALPN list. + const char *full_alpn_list[] = {"grpc-exp", "h2"}; + GPR_ASSERT(server_ssl_test(full_alpn_list, 2, "grpc-exp")); + // Handshake succeeeds when the client supplies only h2 as the ALPN list. This + // covers legacy gRPC clients which don't support grpc-exp. + const char *h2_only_alpn_list[] = {"h2"}; + GPR_ASSERT(server_ssl_test(h2_only_alpn_list, 1, "h2")); + // Handshake succeeds when the client supplies superfluous ALPN entries and + // also when h2 precedes gprc-exp. + const char *extra_alpn_list[] = {"foo", "h2", "bar", "grpc-exp"}; + GPR_ASSERT(server_ssl_test(extra_alpn_list, 4, "h2")); + // Handshake fails when the client uses a fake protocol as its only ALPN + // preference. This validates the server is correctly validating ALPN + // and sanity checks the server_ssl_test. + const char *fake_alpn_list[] = {"foo"}; + GPR_ASSERT(!server_ssl_test(fake_alpn_list, 1, "foo")); + return 0; +} diff --git a/test/core/transport/chttp2/alpn_test.c b/test/core/transport/chttp2/alpn_test.c index 48064ec9b34..cde891cd5d6 100644 --- a/test/core/transport/chttp2/alpn_test.c +++ b/test/core/transport/chttp2/alpn_test.c @@ -38,6 +38,7 @@ static void test_alpn_success(void) { GPR_ASSERT(grpc_chttp2_is_alpn_version_supported("h2", 2)); + GPR_ASSERT(grpc_chttp2_is_alpn_version_supported("grpc-exp", 8)); } static void test_alpn_failure(void) { @@ -45,9 +46,27 @@ static void test_alpn_failure(void) { GPR_ASSERT(!grpc_chttp2_is_alpn_version_supported("h1-15", 5)); } +// First index in ALPN supported version list of a given protocol. Returns a +// value one beyond the last valid element index if not found. +static size_t alpn_version_index(const char *version, size_t size) { + size_t i; + for (i = 0; i < grpc_chttp2_num_alpn_versions(); ++i) { + if (!strncmp(version, grpc_chttp2_get_alpn_version_index(i), size)) { + return i; + } + } + return i; +} + +static void test_alpn_grpc_before_h2(void) { + // grpc-exp is preferred over h2. + GPR_ASSERT(alpn_version_index("grpc-exp", 8) < alpn_version_index("h2", 2)); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); test_alpn_success(); test_alpn_failure(); + test_alpn_grpc_before_h2(); return 0; } diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 5e8290ad907..e8e17c53560 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -1130,6 +1130,40 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "handshake_client", + "src": [ + "test/core/handshake/client_ssl.c" + ], + "third_party": false, + "type": "target" + }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "handshake_server", + "src": [ + "test/core/handshake/server_ssl.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 938aa2edde2..6b231f0dcbf 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -1220,6 +1220,44 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c", + "name": "handshake_client", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c", + "name": "handshake_server", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, { "args": [], "ci_platforms": [ diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index 339b42f9d7c..2d70e65f6cc 100644 --- a/vsprojects/buildtests_c.sln +++ b/vsprojects/buildtests_c.sln @@ -1031,6 +1031,28 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h2_ssl_test", "vcxproj\test {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_client", "vcxproj\.\handshake_client\handshake_client.vcxproj", "{C3F19761-48E0-AE1F-1155-CF4CEB143B6A}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_server", "vcxproj\.\handshake_server\handshake_server.vcxproj", "{BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "head_of_line_blocking_bad_client_test", "vcxproj\test\head_of_line_blocking_bad_client_test\head_of_line_blocking_bad_client_test.vcxproj", "{23DF0572-DBF1-08DA-8EAD-8508354C90A4}" ProjectSection(myProperties) = preProject lib = "False" @@ -3122,6 +3144,38 @@ Global {EA78D290-4098-FF04-C647-013F6B81E4E7}.Release-DLL|Win32.Build.0 = Release|Win32 {EA78D290-4098-FF04-C647-013F6B81E4E7}.Release-DLL|x64.ActiveCfg = Release|x64 {EA78D290-4098-FF04-C647-013F6B81E4E7}.Release-DLL|x64.Build.0 = Release|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|x64.ActiveCfg = Debug|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|Win32.ActiveCfg = Release|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|x64.ActiveCfg = Release|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|Win32.Build.0 = Debug|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|x64.Build.0 = Debug|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|Win32.Build.0 = Release|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|x64.Build.0 = Release|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|x64.Build.0 = Debug|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|Win32.Build.0 = Release|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|x64.ActiveCfg = Release|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|x64.Build.0 = Release|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|Win32.ActiveCfg = Debug|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|x64.ActiveCfg = Debug|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|Win32.ActiveCfg = Release|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|x64.ActiveCfg = Release|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|Win32.Build.0 = Debug|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|x64.Build.0 = Debug|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|Win32.Build.0 = Release|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|x64.Build.0 = Release|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|x64.Build.0 = Debug|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|Win32.Build.0 = Release|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|x64.ActiveCfg = Release|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|x64.Build.0 = Release|x64 {23DF0572-DBF1-08DA-8EAD-8508354C90A4}.Debug|Win32.ActiveCfg = Debug|Win32 {23DF0572-DBF1-08DA-8EAD-8508354C90A4}.Debug|x64.ActiveCfg = Debug|x64 {23DF0572-DBF1-08DA-8EAD-8508354C90A4}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/grpc.sln b/vsprojects/grpc.sln index 63be171c6ef..12e7f1f2b4d 100644 --- a/vsprojects/grpc.sln +++ b/vsprojects/grpc.sln @@ -138,6 +138,28 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_verify_jwt", "vcxproj\ {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_client", "vcxproj\.\handshake_client\handshake_client.vcxproj", "{C3F19761-48E0-AE1F-1155-CF4CEB143B6A}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_server", "vcxproj\.\handshake_server\handshake_server.vcxproj", "{BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reconnect_server", "vcxproj\.\reconnect_server\reconnect_server.vcxproj", "{929C90AE-483F-AC80-EF93-226199F9E428}" ProjectSection(myProperties) = preProject lib = "True" @@ -450,6 +472,38 @@ Global {02FAC25F-5FF6-34A0-00AE-B82BFBA851A9}.Release-DLL|Win32.Build.0 = Release|Win32 {02FAC25F-5FF6-34A0-00AE-B82BFBA851A9}.Release-DLL|x64.ActiveCfg = Release|x64 {02FAC25F-5FF6-34A0-00AE-B82BFBA851A9}.Release-DLL|x64.Build.0 = Release|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|x64.ActiveCfg = Debug|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|Win32.ActiveCfg = Release|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|x64.ActiveCfg = Release|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|Win32.Build.0 = Debug|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|x64.Build.0 = Debug|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|Win32.Build.0 = Release|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|x64.Build.0 = Release|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|x64.Build.0 = Debug|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|Win32.Build.0 = Release|Win32 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|x64.ActiveCfg = Release|x64 + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|x64.Build.0 = Release|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|Win32.ActiveCfg = Debug|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|x64.ActiveCfg = Debug|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|Win32.ActiveCfg = Release|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|x64.ActiveCfg = Release|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|Win32.Build.0 = Debug|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|x64.Build.0 = Debug|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|Win32.Build.0 = Release|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|x64.Build.0 = Release|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|x64.Build.0 = Debug|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|Win32.Build.0 = Release|Win32 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|x64.ActiveCfg = Release|x64 + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|x64.Build.0 = Release|x64 {929C90AE-483F-AC80-EF93-226199F9E428}.Debug|Win32.ActiveCfg = Debug|Win32 {929C90AE-483F-AC80-EF93-226199F9E428}.Debug|x64.ActiveCfg = Debug|x64 {929C90AE-483F-AC80-EF93-226199F9E428}.Release|Win32.ActiveCfg = Release|Win32 From 27c876ecbec0d17e5b03c582d48a05145d1aa25a Mon Sep 17 00:00:00 2001 From: Harvey Tuch Date: Fri, 21 Oct 2016 09:59:20 -0400 Subject: [PATCH 187/286] Fix memory leak detected by ASAN and clang-format variance. --- test/core/handshake/client_ssl.c | 16 +++++++++------- test/core/handshake/server_ssl.c | 6 +++++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/test/core/handshake/client_ssl.c b/test/core/handshake/client_ssl.c index 7cce77fb97d..3184ff125a5 100644 --- a/test/core/handshake/client_ssl.c +++ b/test/core/handshake/client_ssl.c @@ -34,9 +34,9 @@ #include #include #include -#include #include #include +#include #include #include @@ -50,8 +50,8 @@ #include "test/core/util/test_config.h" #define SSL_CERT_PATH "src/core/lib/tsi/test_creds/server1.pem" -#define SSL_KEY_PATH "src/core/lib/tsi/test_creds/server1.key" -#define SSL_CA_PATH "src/core/lib/tsi/test_creds/ca.pem" +#define SSL_KEY_PATH "src/core/lib/tsi/test_creds/server1.key" +#define SSL_CA_PATH "src/core/lib/tsi/test_creds/ca.pem" // Arguments for TLS server thread. typedef struct { @@ -185,7 +185,8 @@ static void server_thread(void *arg) { // Wait until the client drops its connection. char buf; - while (SSL_read(ssl, &buf, sizeof(buf)) > 0); + while (SSL_read(ssl, &buf, sizeof(buf)) > 0) + ; SSL_free(ssl); close(client); @@ -208,7 +209,7 @@ static bool client_ssl_test(char *server_alpn_preferred) { gpr_thd_options thdopt = gpr_thd_options_default(); gpr_thd_id thdid; gpr_thd_options_set_joinable(&thdopt); - server_args args = { .port = port, .alpn_preferred = server_alpn_preferred }; + server_args args = {.port = port, .alpn_preferred = server_alpn_preferred}; GPR_ASSERT(gpr_thd_new(&thdid, server_thread, &args, &thdopt)); // Load key pair and establish client SSL credentials. @@ -220,7 +221,7 @@ static bool client_ssl_test(char *server_alpn_preferred) { grpc_load_file(SSL_CERT_PATH, 1, &cert_slice))); GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", grpc_load_file(SSL_KEY_PATH, 1, &key_slice))); - const char *ca_cert = (const char*)GPR_SLICE_START_PTR(ca_slice); + const char *ca_cert = (const char *)GPR_SLICE_START_PTR(ca_slice); pem_key_cert_pair.private_key = (const char *)GPR_SLICE_START_PTR(key_slice); pem_key_cert_pair.cert_chain = (const char *)GPR_SLICE_START_PTR(cert_slice); grpc_channel_credentials *ssl_creds = @@ -236,7 +237,8 @@ static bool client_ssl_test(char *server_alpn_preferred) { grpc_channel_args grpc_args; grpc_args.num_args = 1; grpc_args.args = &ssl_name_override; - grpc_channel *channel = grpc_secure_channel_create(ssl_creds, target, &grpc_args, NULL); + grpc_channel *channel = + grpc_secure_channel_create(ssl_creds, target, &grpc_args, NULL); GPR_ASSERT(channel); gpr_free(target); diff --git a/test/core/handshake/server_ssl.c b/test/core/handshake/server_ssl.c index b05d168a932..5c21eea4764 100644 --- a/test/core/handshake/server_ssl.c +++ b/test/core/handshake/server_ssl.c @@ -101,6 +101,7 @@ static void server_thread(void *arg) { gpr_asprintf(&addr, "127.0.0.1:%d", port); grpc_server *server = grpc_server_create(NULL, NULL); GPR_ASSERT(grpc_server_add_secure_http2_port(server, addr, ssl_creds)); + free(addr); grpc_completion_queue *cq = grpc_completion_queue_create(NULL); @@ -124,6 +125,7 @@ static void server_thread(void *arg) { grpc_event ev = grpc_completion_queue_next(cq, cq_deadline, NULL); GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); + grpc_server_destroy(server); grpc_completion_queue_destroy(cq); grpc_server_credentials_release(ssl_creds); gpr_slice_unref(cert_slice); @@ -225,13 +227,15 @@ static bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, unsigned int alpn_selected_len; SSL_get0_alpn_selected(ssl, &alpn_selected, &alpn_selected_len); if (strlen(alpn_expected) != alpn_selected_len || - strncmp((const char *)alpn_selected, alpn_expected, alpn_selected_len) != 0) { + strncmp((const char *)alpn_selected, alpn_expected, + alpn_selected_len) != 0) { gpr_log(GPR_ERROR, "Unexpected ALPN protocol preference"); success = false; } } client_handshake_complete = true; + SSL_free(ssl); gpr_free(alpn_protos); SSL_CTX_free(ctx); EVP_cleanup(); From a92a13c4066f99e68f4911503232e716bf87c88a Mon Sep 17 00:00:00 2001 From: Harvey Tuch Date: Fri, 21 Oct 2016 17:56:54 -0400 Subject: [PATCH 188/286] Fix server_ssl.c thread race exposed by tsan by using gpr_event. --- test/core/handshake/server_ssl.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/core/handshake/server_ssl.c b/test/core/handshake/server_ssl.c index 5c21eea4764..bcfdf7524aa 100644 --- a/test/core/handshake/server_ssl.c +++ b/test/core/handshake/server_ssl.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include "src/core/lib/iomgr/load_file.h" #include "test/core/util/port.h" @@ -53,7 +54,7 @@ #define SSL_CA_PATH "src/core/lib/tsi/test_creds/ca.pem" // Handshake completed signal to server thread. -static bool client_handshake_complete = false; +static gpr_event client_handshake_complete; static int create_socket(int port) { int s; @@ -111,7 +112,7 @@ static void server_thread(void *arg) { // Wait a bounded number of time until client_handshake_complete is set, // sleeping between polls. int retries = 10; - while (!client_handshake_complete && retries-- > 0) { + while (!gpr_event_get(&client_handshake_complete) && retries-- > 0) { const gpr_timespec cq_deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1); grpc_event ev = grpc_completion_queue_next(cq, cq_deadline, NULL); GPR_ASSERT(ev.type == GRPC_QUEUE_TIMEOUT); @@ -143,7 +144,7 @@ static bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, grpc_init(); int port = grpc_pick_unused_port_or_die(); - client_handshake_complete = false; + gpr_event_init(&client_handshake_complete); // Launch the gRPC server thread. gpr_thd_options thdopt = gpr_thd_options_default(); @@ -233,7 +234,7 @@ static bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, success = false; } } - client_handshake_complete = true; + gpr_event_set(&client_handshake_complete, &client_handshake_complete); SSL_free(ssl); gpr_free(alpn_protos); From 85399f082442c290be81fc6d3323e53acceaa66a Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 24 Oct 2016 09:41:20 -0700 Subject: [PATCH 189/286] clang formatting fixes --- src/cpp/thread_manager/thread_manager.cc | 7 ++----- test/cpp/thread_manager/thread_manager_test.cc | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/cpp/thread_manager/thread_manager.cc b/src/cpp/thread_manager/thread_manager.cc index c4bf842fbb4..caae4c457d8 100644 --- a/src/cpp/thread_manager/thread_manager.cc +++ b/src/cpp/thread_manager/thread_manager.cc @@ -41,17 +41,14 @@ namespace grpc { ThreadManager::WorkerThread::WorkerThread(ThreadManager* thd_mgr) - : thd_mgr_(thd_mgr), - thd_(&ThreadManager::WorkerThread::Run, this) {} + : thd_mgr_(thd_mgr), thd_(&ThreadManager::WorkerThread::Run, this) {} void ThreadManager::WorkerThread::Run() { thd_mgr_->MainWorkLoop(); thd_mgr_->MarkAsCompleted(this); } -ThreadManager::WorkerThread::~WorkerThread() { - thd_.join(); -} +ThreadManager::WorkerThread::~WorkerThread() { thd_.join(); } ThreadManager::ThreadManager(int min_pollers, int max_pollers) : shutdown_(false), diff --git a/test/cpp/thread_manager/thread_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc index 1391c387fcf..ffeffd2e655 100644 --- a/test/cpp/thread_manager/thread_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -104,7 +104,7 @@ grpc::ThreadManager::WorkStatus ThreadManagerTest::PollForWork(void **tag, void ThreadManagerTest::DoWork(void *tag, bool ok) { num_do_work_++; - SleepForMs(kDoWorkDurationMsec); // Simulate doing work by sleeping + SleepForMs(kDoWorkDurationMsec); // Simulate doing work by sleeping } void ThreadManagerTest::PerformTest() { From 085f9afaf0bf96a42ba57f5ea739898ec26831ac Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 24 Oct 2016 09:55:44 -0700 Subject: [PATCH 190/286] Added import order comments, resolved other minor issues --- src/core/ext/lb_policy/grpclb/grpclb.c | 4 ++++ src/core/lib/iomgr/tcp_server_posix.c | 7 ------- test/core/client_channel/set_initial_connect_string_test.c | 5 +++++ test/core/end2end/bad_server_response_test.c | 5 +++++ test/core/iomgr/sockaddr_utils_test.c | 4 ++++ test/core/surface/concurrent_connectivity_test.c | 4 ++++ 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index 3a37001dfbd..36f0a90bb86 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -96,6 +96,10 @@ * - Implement LB service forwarding (point 2c. in the doc's diagram). */ +/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when + using that endpoint. Because of various transitive includes in uv.h, + including windows.h on Windows, uv.h must be included before other system + headers. Therefore, sockaddr.h must always be included first */ #include "src/core/lib/iomgr/sockaddr.h" #include diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index 35c072090c1..127f8595d1b 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -81,13 +81,6 @@ struct grpc_tcp_listener { grpc_fd *emfd; grpc_tcp_server *server; grpc_resolved_address addr; - /* - union { - uint8_t untyped[GRPC_MAX_SOCKADDR_SIZE]; - struct sockaddr sockaddr; - } addr; - size_t addr_len; - */ int port; unsigned port_index; unsigned fd_index; diff --git a/test/core/client_channel/set_initial_connect_string_test.c b/test/core/client_channel/set_initial_connect_string_test.c index 875acea96b0..379f30fb9f2 100644 --- a/test/core/client_channel/set_initial_connect_string_test.c +++ b/test/core/client_channel/set_initial_connect_string_test.c @@ -30,6 +30,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ + +/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when + using that endpoint. Because of various transitive includes in uv.h, + including windows.h on Windows, uv.h must be included before other system + headers. Therefore, sockaddr.h must always be included first */ #include "src/core/lib/iomgr/sockaddr.h" #include diff --git a/test/core/end2end/bad_server_response_test.c b/test/core/end2end/bad_server_response_test.c index 2fe3963b40f..9a3e1301f90 100644 --- a/test/core/end2end/bad_server_response_test.c +++ b/test/core/end2end/bad_server_response_test.c @@ -30,6 +30,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ + +/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when + using that endpoint. Because of various transitive includes in uv.h, + including windows.h on Windows, uv.h must be included before other system + headers. Therefore, sockaddr.h must always be included first */ #include "src/core/lib/iomgr/sockaddr.h" #include diff --git a/test/core/iomgr/sockaddr_utils_test.c b/test/core/iomgr/sockaddr_utils_test.c index bb81ebe575d..8569c697fe9 100644 --- a/test/core/iomgr/sockaddr_utils_test.c +++ b/test/core/iomgr/sockaddr_utils_test.c @@ -31,6 +31,10 @@ * */ +/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when + using that endpoint. Because of various transitive includes in uv.h, + including windows.h on Windows, uv.h must be included before other system + headers. Therefore, sockaddr.h must always be included first */ #include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr_utils.h" diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c index a2470a5a57b..f9f723baaa1 100644 --- a/test/core/surface/concurrent_connectivity_test.c +++ b/test/core/surface/concurrent_connectivity_test.c @@ -31,6 +31,10 @@ * */ +/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when + using that endpoint. Because of various transitive includes in uv.h, + including windows.h on Windows, uv.h must be included before other system + headers. Therefore, sockaddr.h must always be included first */ #include "src/core/lib/iomgr/sockaddr.h" #include From 62b2a9051cb6c077334658a68d46ccc97a63dd97 Mon Sep 17 00:00:00 2001 From: Harvey Tuch Date: Mon, 24 Oct 2016 09:39:41 -0400 Subject: [PATCH 191/286] Fix handshake_client bind flakes and build issues. * Add port picking retries to handshake_client. * Track vsprojects for new tests. * Place tests in 'test' build target. --- CMakeLists.txt | 62 ------ Makefile | 8 +- build.yaml | 4 +- test/core/handshake/client_ssl.c | 37 +++- test/core/handshake/server_ssl.c | 1 + tools/run_tests/tests.json | 12 +- vsprojects/buildtests_c.sln | 4 +- vsprojects/grpc.sln | 54 ----- .../handshake_client/handshake_client.vcxproj | 199 ++++++++++++++++++ .../handshake_client.vcxproj.filters | 21 ++ .../handshake_server/handshake_server.vcxproj | 199 ++++++++++++++++++ .../handshake_server.vcxproj.filters | 21 ++ 12 files changed, 487 insertions(+), 135 deletions(-) create mode 100644 vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj create mode 100644 vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj.filters create mode 100644 vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj create mode 100644 vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj.filters diff --git a/CMakeLists.txt b/CMakeLists.txt index 567af2c2762..8f352aa73e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1665,68 +1665,6 @@ if (gRPC_INSTALL) endif() -add_executable(handshake_client - test/core/handshake/client_ssl.c -) - -target_include_directories(handshake_client - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include - PRIVATE ${BORINGSSL_ROOT_DIR}/include - PRIVATE ${PROTOBUF_ROOT_DIR}/src - PRIVATE ${ZLIB_ROOT_DIR} - PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib -) - -target_link_libraries(handshake_client - ${_gRPC_SSL_LIBRARIES} - grpc_test_util - grpc - gpr_test_util - gpr -) - - -if (gRPC_INSTALL) - install(TARGETS handshake_client EXPORT gRPCTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - ) -endif() - - -add_executable(handshake_server - test/core/handshake/server_ssl.c -) - -target_include_directories(handshake_server - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include - PRIVATE ${BORINGSSL_ROOT_DIR}/include - PRIVATE ${PROTOBUF_ROOT_DIR}/src - PRIVATE ${ZLIB_ROOT_DIR} - PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib -) - -target_link_libraries(handshake_server - ${_gRPC_SSL_LIBRARIES} - grpc_test_util - grpc - gpr_test_util - gpr -) - - -if (gRPC_INSTALL) - install(TARGETS handshake_server EXPORT gRPCTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - ) -endif() - - add_executable(grpc_cpp_plugin src/compiler/cpp_plugin.cc ) diff --git a/Makefile b/Makefile index e634c1a16ea..9d8206015ca 100644 --- a/Makefile +++ b/Makefile @@ -1301,6 +1301,8 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/grpc_json_token_test \ $(BINDIR)/$(CONFIG)/grpc_jwt_verifier_test \ $(BINDIR)/$(CONFIG)/grpc_security_connector_test \ + $(BINDIR)/$(CONFIG)/handshake_client \ + $(BINDIR)/$(CONFIG)/handshake_server \ $(BINDIR)/$(CONFIG)/hpack_parser_test \ $(BINDIR)/$(CONFIG)/hpack_table_test \ $(BINDIR)/$(CONFIG)/http_parser_test \ @@ -1671,6 +1673,10 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/grpc_jwt_verifier_test || ( echo test grpc_jwt_verifier_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_security_connector_test" $(Q) $(BINDIR)/$(CONFIG)/grpc_security_connector_test || ( echo test grpc_security_connector_test failed ; exit 1 ) + $(E) "[RUN] Testing handshake_client" + $(Q) $(BINDIR)/$(CONFIG)/handshake_client || ( echo test handshake_client failed ; exit 1 ) + $(E) "[RUN] Testing handshake_server" + $(Q) $(BINDIR)/$(CONFIG)/handshake_server || ( echo test handshake_server failed ; exit 1 ) $(E) "[RUN] Testing hpack_parser_test" $(Q) $(BINDIR)/$(CONFIG)/hpack_parser_test || ( echo test hpack_parser_test failed ; exit 1 ) $(E) "[RUN] Testing hpack_table_test" @@ -1866,7 +1872,7 @@ test_python: static_c tools: tools_c tools_cxx -tools_c: privatelibs_c $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token $(BINDIR)/$(CONFIG)/grpc_verify_jwt $(BINDIR)/$(CONFIG)/handshake_client $(BINDIR)/$(CONFIG)/handshake_server +tools_c: privatelibs_c $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token $(BINDIR)/$(CONFIG)/grpc_verify_jwt tools_cxx: privatelibs_cxx diff --git a/build.yaml b/build.yaml index 1ac6e51d4d7..e4b6b24e1a2 100644 --- a/build.yaml +++ b/build.yaml @@ -1969,7 +1969,7 @@ targets: - grpc - gpr - name: handshake_client - build: tool + build: test language: c src: - test/core/handshake/client_ssl.c @@ -1980,7 +1980,7 @@ targets: - gpr secure: true - name: handshake_server - build: tool + build: test language: c src: - test/core/handshake/server_ssl.c diff --git a/test/core/handshake/client_ssl.c b/test/core/handshake/client_ssl.c index 3184ff125a5..ee90f0b0bcb 100644 --- a/test/core/handshake/client_ssl.c +++ b/test/core/handshake/client_ssl.c @@ -55,12 +55,12 @@ // Arguments for TLS server thread. typedef struct { - int port; + int socket; char *alpn_preferred; } server_args; // From https://wiki.openssl.org/index.php/Simple_TLS_Server. -int create_socket(int port) { +static int create_socket(int port) { int s; struct sockaddr_in addr; @@ -71,17 +71,20 @@ int create_socket(int port) { s = socket(AF_INET, SOCK_STREAM, 0); if (s < 0) { perror("Unable to create socket"); - abort(); + return -1; } if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("Unable to bind"); - abort(); + gpr_log(GPR_ERROR, "Unable to bind to %d", port); + close(s); + return -1; } if (listen(s, 1) < 0) { perror("Unable to listen"); - abort(); + close(s); + return -1; } return s; @@ -161,9 +164,9 @@ static void server_thread(void *arg) { // Register the ALPN selection callback. SSL_CTX_set_alpn_select_cb(ctx, alpn_select_cb, args->alpn_preferred); - // bind/list/accept at TCP layer. - const int sock = create_socket(args->port); - gpr_log(GPR_INFO, "Server listening on port %d", args->port); + // bind/listen/accept at TCP layer. + const int sock = args->socket; + gpr_log(GPR_INFO, "Server listening"); struct sockaddr_in addr; socklen_t len = sizeof(addr); const int client = accept(sock, (struct sockaddr *)&addr, &len); @@ -203,13 +206,27 @@ static bool client_ssl_test(char *server_alpn_preferred) { bool success = true; grpc_init(); - const int port = grpc_pick_unused_port_or_die(); + + // Find a port we can bind to. Retries added to handle flakes in port server + // and port picking. + int port = -1; + int server_socket = -1; + int socket_retries = 10; + while (server_socket == -1 && socket_retries-- > 0) { + port = grpc_pick_unused_port_or_die(); + server_socket = create_socket(port); + if (server_socket == -1) { + sleep(1); + } + } + GPR_ASSERT(server_socket > 0); // Launch the TLS server thread. gpr_thd_options thdopt = gpr_thd_options_default(); gpr_thd_id thdid; gpr_thd_options_set_joinable(&thdopt); - server_args args = {.port = port, .alpn_preferred = server_alpn_preferred}; + server_args args = {.socket = server_socket, + .alpn_preferred = server_alpn_preferred}; GPR_ASSERT(gpr_thd_new(&thdid, server_thread, &args, &thdopt)); // Load key pair and establish client SSL credentials. diff --git a/test/core/handshake/server_ssl.c b/test/core/handshake/server_ssl.c index bcfdf7524aa..3e89f8e265f 100644 --- a/test/core/handshake/server_ssl.c +++ b/test/core/handshake/server_ssl.c @@ -240,6 +240,7 @@ static bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, gpr_free(alpn_protos); SSL_CTX_free(ctx); EVP_cleanup(); + close(sock); gpr_thd_join(thdid); diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 6b231f0dcbf..c603c7dce8f 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -1225,7 +1225,8 @@ "ci_platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ], "cpu_cost": 1.0, "exclude_configs": [], @@ -1236,7 +1237,8 @@ "platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ] }, { @@ -1244,7 +1246,8 @@ "ci_platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ], "cpu_cost": 1.0, "exclude_configs": [], @@ -1255,7 +1258,8 @@ "platforms": [ "linux", "mac", - "posix" + "posix", + "windows" ] }, { diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index 2d70e65f6cc..eda6795ab73 100644 --- a/vsprojects/buildtests_c.sln +++ b/vsprojects/buildtests_c.sln @@ -1031,7 +1031,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h2_ssl_test", "vcxproj\test {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_client", "vcxproj\.\handshake_client\handshake_client.vcxproj", "{C3F19761-48E0-AE1F-1155-CF4CEB143B6A}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_client", "vcxproj\test\handshake_client\handshake_client.vcxproj", "{C3F19761-48E0-AE1F-1155-CF4CEB143B6A}" ProjectSection(myProperties) = preProject lib = "False" EndProjectSection @@ -1042,7 +1042,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_client", "vcxproj {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_server", "vcxproj\.\handshake_server\handshake_server.vcxproj", "{BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_server", "vcxproj\test\handshake_server\handshake_server.vcxproj", "{BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}" ProjectSection(myProperties) = preProject lib = "False" EndProjectSection diff --git a/vsprojects/grpc.sln b/vsprojects/grpc.sln index 12e7f1f2b4d..63be171c6ef 100644 --- a/vsprojects/grpc.sln +++ b/vsprojects/grpc.sln @@ -138,28 +138,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_verify_jwt", "vcxproj\ {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_client", "vcxproj\.\handshake_client\handshake_client.vcxproj", "{C3F19761-48E0-AE1F-1155-CF4CEB143B6A}" - ProjectSection(myProperties) = preProject - lib = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} - {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} - {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} - {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_server", "vcxproj\.\handshake_server\handshake_server.vcxproj", "{BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}" - ProjectSection(myProperties) = preProject - lib = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} - {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} - {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} - {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reconnect_server", "vcxproj\.\reconnect_server\reconnect_server.vcxproj", "{929C90AE-483F-AC80-EF93-226199F9E428}" ProjectSection(myProperties) = preProject lib = "True" @@ -472,38 +450,6 @@ Global {02FAC25F-5FF6-34A0-00AE-B82BFBA851A9}.Release-DLL|Win32.Build.0 = Release|Win32 {02FAC25F-5FF6-34A0-00AE-B82BFBA851A9}.Release-DLL|x64.ActiveCfg = Release|x64 {02FAC25F-5FF6-34A0-00AE-B82BFBA851A9}.Release-DLL|x64.Build.0 = Release|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|x64.ActiveCfg = Debug|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|Win32.ActiveCfg = Release|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|x64.ActiveCfg = Release|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|Win32.Build.0 = Debug|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|x64.Build.0 = Debug|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|Win32.Build.0 = Release|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|x64.Build.0 = Release|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|Win32.Build.0 = Debug|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|x64.ActiveCfg = Debug|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|x64.Build.0 = Debug|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|Win32.ActiveCfg = Release|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|Win32.Build.0 = Release|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|x64.ActiveCfg = Release|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|x64.Build.0 = Release|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|Win32.ActiveCfg = Debug|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|x64.ActiveCfg = Debug|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|Win32.ActiveCfg = Release|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|x64.ActiveCfg = Release|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|Win32.Build.0 = Debug|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|x64.Build.0 = Debug|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|Win32.Build.0 = Release|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|x64.Build.0 = Release|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|Win32.Build.0 = Debug|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|x64.ActiveCfg = Debug|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|x64.Build.0 = Debug|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|Win32.ActiveCfg = Release|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|Win32.Build.0 = Release|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|x64.ActiveCfg = Release|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|x64.Build.0 = Release|x64 {929C90AE-483F-AC80-EF93-226199F9E428}.Debug|Win32.ActiveCfg = Debug|Win32 {929C90AE-483F-AC80-EF93-226199F9E428}.Debug|x64.ActiveCfg = Debug|x64 {929C90AE-483F-AC80-EF93-226199F9E428}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj b/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj new file mode 100644 index 00000000000..53994184b49 --- /dev/null +++ b/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj @@ -0,0 +1,199 @@ + + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {C3F19761-48E0-AE1F-1155-CF4CEB143B6A} + true + $(SolutionDir)IntDir\$(MSBuildProjectName)\ + + + + v100 + + + v110 + + + v120 + + + v140 + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + handshake_client + static + Debug + static + Debug + + + handshake_client + static + Release + static + Release + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + + + + + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + + + {29D16885-7228-4C31-81ED-5F9187C7F2A9} + + + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + + + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + diff --git a/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj.filters b/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj.filters new file mode 100644 index 00000000000..5ab9d558340 --- /dev/null +++ b/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj.filters @@ -0,0 +1,21 @@ + + + + + test\core\handshake + + + + + + {12736a84-5ad0-99e6-e337-c0fad767ce45} + + + {532702cb-b33d-9aa1-67d0-8bd5d9992edf} + + + {62ea9f20-390c-5c3e-97fc-054ca3d45f15} + + + + diff --git a/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj b/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj new file mode 100644 index 00000000000..379a34f93a4 --- /dev/null +++ b/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj @@ -0,0 +1,199 @@ + + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1} + true + $(SolutionDir)IntDir\$(MSBuildProjectName)\ + + + + v100 + + + v110 + + + v120 + + + v140 + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + handshake_server + static + Debug + static + Debug + + + handshake_server + static + Release + static + Release + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + + + + + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + + + {29D16885-7228-4C31-81ED-5F9187C7F2A9} + + + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + + + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + diff --git a/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj.filters b/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj.filters new file mode 100644 index 00000000000..954066bede3 --- /dev/null +++ b/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj.filters @@ -0,0 +1,21 @@ + + + + + test\core\handshake + + + + + + {1cb218e5-cff0-6347-00f6-5910714d39ce} + + + {869e7645-9441-8315-dd44-3ea0d6916adb} + + + {ba4cba39-097b-d31e-bdfb-13df801b07bf} + + + + From 77c483b70717425bb93648055bb31020a0b31a3c Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 24 Oct 2016 11:01:02 -0700 Subject: [PATCH 192/286] remove unused fields --- src/cpp/server/server_cc.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 26557f5c499..ca89743efa9 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -232,7 +232,6 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { void* const tag_; bool in_flight_; const bool has_request_payload_; - uint32_t incoming_flags_; grpc_call* call_; grpc_call_details* call_details_; gpr_timespec deadline_; From f72ec6b37b0eb730f0fa20361d55a54a9077ccda Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 24 Oct 2016 11:09:43 -0700 Subject: [PATCH 193/286] Move thread_manager.h header from server.h to server_cc.cc --- include/grpc++/server.h | 2 -- src/cpp/server/server_cc.cc | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 2627a09deb8..a6deb5ee6b3 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -50,8 +50,6 @@ #include #include -#include "src/cpp/thread_manager/thread_manager.h" - struct grpc_server; namespace grpc { diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index ca89743efa9..d46942d2573 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -51,7 +51,7 @@ #include #include "src/core/lib/profiling/timers.h" -#include "src/cpp/server/thread_pool_interface.h" +#include "src/cpp/thread_manager/thread_manager.h" namespace grpc { From 557c990c36dd281812016ad81fa79309078e807d Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Mon, 24 Oct 2016 11:12:05 -0700 Subject: [PATCH 194/286] clang-format --- src/core/ext/client_channel/client_channel.c | 2 +- .../ext/client_channel/lb_policy_factory.c | 19 ++++++----- .../ext/client_channel/lb_policy_factory.h | 8 ++--- src/core/ext/client_channel/resolver.c | 3 +- src/core/ext/client_channel/resolver.h | 3 +- .../ext/client_channel/resolver_registry.h | 2 +- src/core/ext/lb_policy/grpclb/grpclb.c | 32 +++++++++---------- .../ext/lb_policy/pick_first/pick_first.c | 14 ++++---- .../ext/lb_policy/round_robin/round_robin.c | 12 +++---- .../ext/resolver/dns/native/dns_resolver.c | 2 +- .../ext/resolver/sockaddr/sockaddr_resolver.c | 4 +-- .../chttp2/client/insecure/channel_create.c | 6 ++-- .../client/secure/secure_channel_create.c | 4 +-- src/core/lib/channel/channel_args.c | 6 ++-- src/core/lib/channel/channel_args.h | 4 +-- test/core/end2end/fake_resolver.c | 4 +-- 16 files changed, 58 insertions(+), 67 deletions(-) diff --git a/src/core/ext/client_channel/client_channel.c b/src/core/ext/client_channel/client_channel.c index 48459de44d6..acebabe8b02 100644 --- a/src/core/ext/client_channel/client_channel.c +++ b/src/core/ext/client_channel/client_channel.c @@ -202,7 +202,7 @@ static void on_resolver_result_changed(grpc_exec_ctx *exec_ctx, void *arg, grpc_channel_args_find(lb_policy_args.args, GRPC_ARG_LB_ADDRESSES); if (channel_arg != NULL) { GPR_ASSERT(channel_arg->type == GRPC_ARG_POINTER); - grpc_lb_addresses* addresses = channel_arg->value.pointer.p; + grpc_lb_addresses *addresses = channel_arg->value.pointer.p; bool found_backend_address = false; for (size_t i = 0; i < addresses->num_addresses; ++i) { if (!addresses->addresses[i].is_balancer) { diff --git a/src/core/ext/client_channel/lb_policy_factory.c b/src/core/ext/client_channel/lb_policy_factory.c index 67ff71fdaec..8a474c88185 100644 --- a/src/core/ext/client_channel/lb_policy_factory.c +++ b/src/core/ext/client_channel/lb_policy_factory.c @@ -60,9 +60,8 @@ grpc_lb_addresses* grpc_lb_addresses_copy(const grpc_lb_addresses* addresses) { gpr_strdup(new_addresses->addresses[i].balancer_name); } if (new_addresses->addresses[i].user_data != NULL) { - new_addresses->addresses[i].user_data = - addresses->user_data_vtable->copy( - new_addresses->addresses[i].user_data); + new_addresses->addresses[i].user_data = addresses->user_data_vtable->copy( + new_addresses->addresses[i].user_data); } } return new_addresses; @@ -93,15 +92,15 @@ int grpc_lb_addresses_cmp(const grpc_lb_addresses* addresses1, const grpc_lb_address* target2 = &addresses2->addresses[i]; if (target1->address.len > target2->address.len) return 1; if (target1->address.len < target2->address.len) return -1; - int retval = memcmp( - target1->address.addr, target2->address.addr, target1->address.len); + int retval = memcmp(target1->address.addr, target2->address.addr, + target1->address.len); if (retval != 0) return retval; if (target1->is_balancer > target2->is_balancer) return 1; if (target1->is_balancer < target2->is_balancer) return -1; - const char* balancer_name1 = target1->balancer_name != NULL - ? target1->balancer_name : ""; - const char* balancer_name2 = target2->balancer_name != NULL - ? target2->balancer_name : ""; + const char* balancer_name1 = + target1->balancer_name != NULL ? target1->balancer_name : ""; + const char* balancer_name2 = + target2->balancer_name != NULL ? target2->balancer_name : ""; retval = strcmp(balancer_name1, balancer_name2); if (retval != 0) return retval; if (addresses1->user_data_vtable != NULL) { @@ -137,7 +136,7 @@ static const grpc_arg_pointer_vtable lb_addresses_arg_vtable = { lb_addresses_copy, lb_addresses_destroy, lb_addresses_cmp}; grpc_arg grpc_lb_addresses_create_channel_arg( - const grpc_lb_addresses *addresses) { + const grpc_lb_addresses* addresses) { grpc_arg arg; arg.type = GRPC_ARG_POINTER; arg.key = GRPC_ARG_LB_ADDRESSES; diff --git a/src/core/ext/client_channel/lb_policy_factory.h b/src/core/ext/client_channel/lb_policy_factory.h index 27b0a4de015..c19126d04fd 100644 --- a/src/core/ext/client_channel/lb_policy_factory.h +++ b/src/core/ext/client_channel/lb_policy_factory.h @@ -60,9 +60,9 @@ typedef struct grpc_lb_address { } grpc_lb_address; typedef struct grpc_lb_user_data_vtable { - void* (*copy)(void*); - void (*destroy)(void*); - int (*cmp)(void*, void*); + void *(*copy)(void *); + void (*destroy)(void *); + int (*cmp)(void *, void *); } grpc_lb_user_data_vtable; typedef struct grpc_lb_addresses { @@ -75,7 +75,7 @@ typedef struct grpc_lb_addresses { \a num_addresses addresses. The \a user_data_vtable argument may be NULL if no user data will be added. */ grpc_lb_addresses *grpc_lb_addresses_create( - size_t num_addresses, const grpc_lb_user_data_vtable* user_data_vtable); + size_t num_addresses, const grpc_lb_user_data_vtable *user_data_vtable); /** Creates a copy of \a addresses. If \a user_data_copy is not NULL, * it will be invoked to copy the \a user_data field of each address. */ diff --git a/src/core/ext/client_channel/resolver.c b/src/core/ext/client_channel/resolver.c index 3b9b6d56414..2ae4fe862e9 100644 --- a/src/core/ext/client_channel/resolver.c +++ b/src/core/ext/client_channel/resolver.c @@ -76,7 +76,6 @@ void grpc_resolver_channel_saw_error(grpc_exec_ctx *exec_ctx, } void grpc_resolver_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, - grpc_channel_args **result, - grpc_closure *on_complete) { + grpc_channel_args **result, grpc_closure *on_complete) { resolver->vtable->next(exec_ctx, resolver, result, on_complete); } diff --git a/src/core/ext/client_channel/resolver.h b/src/core/ext/client_channel/resolver.h index a7097935d2d..0bebcf00b36 100644 --- a/src/core/ext/client_channel/resolver.h +++ b/src/core/ext/client_channel/resolver.h @@ -85,7 +85,6 @@ void grpc_resolver_channel_saw_error(grpc_exec_ctx *exec_ctx, If resolution is fatally broken, set *result to NULL and schedule on_complete. */ void grpc_resolver_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, - grpc_channel_args **result, - grpc_closure *on_complete); + grpc_channel_args **result, grpc_closure *on_complete); #endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_H */ diff --git a/src/core/ext/client_channel/resolver_registry.h b/src/core/ext/client_channel/resolver_registry.h index 60e6d003fb3..ca57bef6fbe 100644 --- a/src/core/ext/client_channel/resolver_registry.h +++ b/src/core/ext/client_channel/resolver_registry.h @@ -59,7 +59,7 @@ void grpc_register_resolver_type(grpc_resolver_factory *factory); return it. If a resolver factory was not found, return NULL. */ grpc_resolver *grpc_resolver_create(const char *target, - const grpc_channel_args* args); + const grpc_channel_args *args); /** Find a resolver factory given a name and return an (owned-by-the-caller) * reference to it */ diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index 45947935189..b0ec5633a72 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -339,13 +339,13 @@ static bool is_server_valid(const grpc_grpclb_server *server, size_t idx, } /* vtable for LB tokens in grpc_lb_addresses. */ -static void* lb_token_copy(void *token) { +static void *lb_token_copy(void *token) { return token == NULL ? NULL : GRPC_MDELEM_REF(token); } static void lb_token_destroy(void *token) { if (token != NULL) GRPC_MDELEM_UNREF(token); } -static int lb_token_cmp(void* token1, void* token2) { +static int lb_token_cmp(void *token1, void *token2) { if (token1 > token2) return 1; if (token1 < token2) return -1; return 0; @@ -477,7 +477,7 @@ static grpc_lb_policy *create_rr_locked( // Replace the LB addresses in the channel args that we pass down to // the subchannel. - static const char* keys_to_remove[] = {GRPC_ARG_LB_ADDRESSES}; + static const char *keys_to_remove[] = {GRPC_ARG_LB_ADDRESSES}; const grpc_arg arg = grpc_lb_addresses_create_channel_arg(glb_policy->addresses); args.args = grpc_channel_args_copy_and_add_and_remove( @@ -582,11 +582,10 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, grpc_lb_policy_factory *factory, grpc_lb_policy_args *args) { /* Get server name. */ - const grpc_arg* arg = + const grpc_arg *arg = grpc_channel_args_find(args->args, GRPC_ARG_SERVER_NAME); - const char* server_name = - arg != NULL && arg->type == GRPC_ARG_STRING - ? arg->value.string : NULL; + const char *server_name = + arg != NULL && arg->type == GRPC_ARG_STRING ? arg->value.string : NULL; /* Count the number of gRPC-LB addresses. There must be at least one. * TODO(roth): For now, we ignore non-balancer addresses, but in the @@ -597,7 +596,7 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, * this is the right LB policy to use. */ arg = grpc_channel_args_find(args->args, GRPC_ARG_LB_ADDRESSES); GPR_ASSERT(arg != NULL && arg->type == GRPC_ARG_POINTER); - grpc_lb_addresses* addresses = arg->value.pointer.p; + grpc_lb_addresses *addresses = arg->value.pointer.p; size_t num_grpclb_addrs = 0; for (size_t i = 0; i < addresses->num_addresses; ++i) { if (addresses->addresses[i].is_balancer) ++num_grpclb_addrs; @@ -631,14 +630,13 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, if (addresses->addresses[i].is_balancer) { if (addr_index == 0) { addr_strs[addr_index++] = grpc_sockaddr_to_uri( - (const struct sockaddr *)&addresses->addresses[i] - .address.addr); + (const struct sockaddr *)&addresses->addresses[i].address.addr); } else { - GPR_ASSERT(grpc_sockaddr_to_string( - &addr_strs[addr_index++], - (const struct sockaddr *)&addresses->addresses[i] - .address.addr, - true) > 0); + GPR_ASSERT( + grpc_sockaddr_to_string( + &addr_strs[addr_index++], + (const struct sockaddr *)&addresses->addresses[i].address.addr, + true) > 0); } } } @@ -661,8 +659,8 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, * so that it does not wind up recursively using the grpclb LB policy, * as per the special case logic in client_channel.c. */ - static const char* keys_to_remove[] = { - GRPC_ARG_LB_POLICY_NAME, GRPC_ARG_LB_ADDRESSES}; + static const char *keys_to_remove[] = {GRPC_ARG_LB_POLICY_NAME, + GRPC_ARG_LB_ADDRESSES}; grpc_channel_args *new_args = grpc_channel_args_copy_and_remove( args->args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove)); glb_policy->lb_channel = grpc_client_channel_factory_create_channel( diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c index d3166f34168..da4341d30de 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -35,8 +35,8 @@ #include -#include "src/core/lib/channel/channel_args.h" #include "src/core/ext/client_channel/lb_policy_registry.h" +#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/transport/connectivity_state.h" typedef struct pending_pick { @@ -437,17 +437,16 @@ static grpc_lb_policy *create_pick_first(grpc_exec_ctx *exec_ctx, GPR_ASSERT(args->client_channel_factory != NULL); /* Get server name. */ - const grpc_arg* arg = + const grpc_arg *arg = grpc_channel_args_find(args->args, GRPC_ARG_SERVER_NAME); - const char* server_name = - arg != NULL && arg->type == GRPC_ARG_STRING - ? arg->value.string : NULL; + const char *server_name = + arg != NULL && arg->type == GRPC_ARG_STRING ? arg->value.string : NULL; /* Find the number of backend addresses. We ignore balancer * addresses, since we don't know how to handle them. */ arg = grpc_channel_args_find(args->args, GRPC_ARG_LB_ADDRESSES); GPR_ASSERT(arg != NULL && arg->type == GRPC_ARG_POINTER); - grpc_lb_addresses* addresses = arg->value.pointer.p; + grpc_lb_addresses *addresses = arg->value.pointer.p; size_t num_addrs = 0; for (size_t i = 0; i < addresses->num_addresses; i++) { if (!addresses->addresses[i].is_balancer) ++num_addrs; @@ -474,8 +473,7 @@ static grpc_lb_policy *create_pick_first(grpc_exec_ctx *exec_ctx, /* server_name will be copied as part of the subchannel creation. This makes * the copying of server_name (a borrowed pointer) OK. */ sc_args.server_name = server_name; - sc_args.addr = - (struct sockaddr *)(&addresses->addresses[i].address.addr); + sc_args.addr = (struct sockaddr *)(&addresses->addresses[i].address.addr); sc_args.addr_len = addresses->addresses[i].address.len; sc_args.args = args->args; diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c index 9f35ebf8be8..b2676a7c869 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -602,17 +602,16 @@ static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx, GPR_ASSERT(args->client_channel_factory != NULL); /* Get server name. */ - const grpc_arg* arg = + const grpc_arg *arg = grpc_channel_args_find(args->args, GRPC_ARG_SERVER_NAME); - const char* server_name = - arg != NULL && arg->type == GRPC_ARG_STRING - ? arg->value.string : NULL; + const char *server_name = + arg != NULL && arg->type == GRPC_ARG_STRING ? arg->value.string : NULL; /* Find the number of backend addresses. We ignore balancer * addresses, since we don't know how to handle them. */ arg = grpc_channel_args_find(args->args, GRPC_ARG_LB_ADDRESSES); GPR_ASSERT(arg != NULL && arg->type == GRPC_ARG_POINTER); - grpc_lb_addresses* addresses = arg->value.pointer.p; + grpc_lb_addresses *addresses = arg->value.pointer.p; size_t num_addrs = 0; for (size_t i = 0; i < addresses->num_addresses; i++) { if (!addresses->addresses[i].is_balancer) ++num_addrs; @@ -636,8 +635,7 @@ static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx, /* server_name will be copied as part of the subchannel creation. This makes * the copying of server_name (a borrowed pointer) OK. */ sc_args.server_name = server_name; - sc_args.addr = - (struct sockaddr *)(&addresses->addresses[i].address.addr); + sc_args.addr = (struct sockaddr *)(&addresses->addresses[i].address.addr); sc_args.addr_len = addresses->addresses[i].address.len; sc_args.args = args->args; diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index fa6a254c595..4ca8a29b3a6 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -264,7 +264,7 @@ static grpc_resolver *dns_create(grpc_resolver_args *args, grpc_arg server_name_arg; server_name_arg.type = GRPC_ARG_STRING; server_name_arg.key = GRPC_ARG_SERVER_NAME; - server_name_arg.value.string = (char*)path; + server_name_arg.value.string = (char *)path; r->channel_args = grpc_channel_args_copy_and_add(args->args, &server_name_arg, 1); gpr_backoff_init(&r->backoff_state, BACKOFF_MULTIPLIER, BACKOFF_JITTER, diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index b81b44099e0..921e8f8f15f 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -175,8 +175,8 @@ static grpc_resolver *sockaddr_create(grpc_resolver_args *args, gpr_slice_buffer path_parts; gpr_slice_buffer_init(&path_parts); gpr_slice_split(path_slice, ",", &path_parts); - grpc_lb_addresses *addresses = grpc_lb_addresses_create( - path_parts.count, NULL /* user_data_vtable */); + grpc_lb_addresses *addresses = + grpc_lb_addresses_create(path_parts.count, NULL /* user_data_vtable */); bool errors_found = false; for (size_t i = 0; i < addresses->num_addresses; i++) { grpc_uri ith_uri = *args->uri; diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c index cf017d0ea5d..b3e1a71987e 100644 --- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c +++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c @@ -195,8 +195,8 @@ static grpc_channel *client_channel_factory_create_channel( grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory, const char *target, grpc_client_channel_type type, grpc_channel_args *args) { - grpc_channel *channel = grpc_channel_create(exec_ctx, target, args, - GRPC_CLIENT_CHANNEL, NULL); + grpc_channel *channel = + grpc_channel_create(exec_ctx, target, args, GRPC_CLIENT_CHANNEL, NULL); grpc_resolver *resolver = grpc_resolver_create(target, args); if (!resolver) { GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, @@ -233,7 +233,7 @@ grpc_channel *grpc_insecure_channel_create(const char *target, GPR_ASSERT(!reserved); grpc_client_channel_factory *factory = - (grpc_client_channel_factory*)&client_channel_factory; + (grpc_client_channel_factory *)&client_channel_factory; grpc_channel *channel = client_channel_factory_create_channel( &exec_ctx, factory, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, NULL); diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c index 99929eb123a..37e7b0bcf93 100644 --- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c @@ -274,8 +274,8 @@ static grpc_channel *client_channel_factory_create_channel( const char *target, grpc_client_channel_type type, grpc_channel_args *args) { client_channel_factory *f = (client_channel_factory *)cc_factory; - grpc_channel *channel = grpc_channel_create(exec_ctx, target, args, - GRPC_CLIENT_CHANNEL, NULL); + grpc_channel *channel = + grpc_channel_create(exec_ctx, target, args, GRPC_CLIENT_CHANNEL, NULL); grpc_resolver *resolver = grpc_resolver_create(target, args); if (resolver != NULL) { grpc_client_channel_finish_initialization( diff --git a/src/core/lib/channel/channel_args.c b/src/core/lib/channel/channel_args.c index 0270d6f2246..cfc072c0b56 100644 --- a/src/core/lib/channel/channel_args.c +++ b/src/core/lib/channel/channel_args.c @@ -71,13 +71,13 @@ grpc_channel_args *grpc_channel_args_copy_and_add(const grpc_channel_args *src, } grpc_channel_args *grpc_channel_args_copy_and_remove( - const grpc_channel_args *src, const char** to_remove, + const grpc_channel_args *src, const char **to_remove, size_t num_to_remove) { return grpc_channel_args_copy_and_add_and_remove(src, to_remove, num_to_remove, NULL, 0); } -static bool should_remove_arg(const grpc_arg* arg, const char** to_remove, +static bool should_remove_arg(const grpc_arg *arg, const char **to_remove, size_t num_to_remove) { for (size_t i = 0; i < num_to_remove; ++i) { if (strcmp(arg->key, to_remove[i]) == 0) return true; @@ -86,7 +86,7 @@ static bool should_remove_arg(const grpc_arg* arg, const char** to_remove, } grpc_channel_args *grpc_channel_args_copy_and_add_and_remove( - const grpc_channel_args *src, const char** to_remove, size_t num_to_remove, + const grpc_channel_args *src, const char **to_remove, size_t num_to_remove, const grpc_arg *to_add, size_t num_to_add) { // Figure out how many args we'll be copying. size_t num_args_to_copy = 0; diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h index 1508d237484..1e05303471d 100644 --- a/src/core/lib/channel/channel_args.h +++ b/src/core/lib/channel/channel_args.h @@ -54,12 +54,12 @@ grpc_channel_args *grpc_channel_args_copy_and_add(const grpc_channel_args *src, /** Copies the arguments in \a src except for those whose keys are in \a to_remove. */ grpc_channel_args *grpc_channel_args_copy_and_remove( - const grpc_channel_args *src, const char** to_remove, size_t num_to_remove); + const grpc_channel_args *src, const char **to_remove, size_t num_to_remove); /** Copies the arguments from \a src except for those whose keys are in \a to_remove and appends the arguments in \a to_add. */ grpc_channel_args *grpc_channel_args_copy_and_add_and_remove( - const grpc_channel_args *src, const char** to_remove, size_t num_to_remove, + const grpc_channel_args *src, const char **to_remove, size_t num_to_remove, const grpc_arg *to_add, size_t num_to_add); /** Concatenate args from \a a and \a b into a new instance */ diff --git a/test/core/end2end/fake_resolver.c b/test/core/end2end/fake_resolver.c index 0dcfdcf43b0..c5a916ef8b3 100644 --- a/test/core/end2end/fake_resolver.c +++ b/test/core/end2end/fake_resolver.c @@ -174,8 +174,8 @@ static grpc_resolver* fake_resolver_create(grpc_resolver_factory* factory, gpr_slice_buffer path_parts; gpr_slice_buffer_init(&path_parts); gpr_slice_split(path_slice, ",", &path_parts); - grpc_lb_addresses* addresses = grpc_lb_addresses_create( - path_parts.count, NULL /* user_data_vtable */); + grpc_lb_addresses* addresses = + grpc_lb_addresses_create(path_parts.count, NULL /* user_data_vtable */); bool errors_found = false; for (size_t i = 0; i < addresses->num_addresses; i++) { grpc_uri ith_uri = *args->uri; From b6becb950ce7606f0b3a5a28b663f3843f0a05c1 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Mon, 24 Oct 2016 11:13:49 -0700 Subject: [PATCH 195/286] Adjust version of protobuf and point zip file in mxyan's repo --- src/objective-c/!ProtoCompiler-gRPCPlugin.podspec | 4 ++-- src/objective-c/!ProtoCompiler.podspec | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec index 3ec4a313e88..fc506b38d28 100644 --- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec +++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec @@ -81,7 +81,7 @@ Pod::Spec.new do |s| } s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' } - repo = 'grpc/grpc' + repo = 'muxi/grpc' file = "grpc_objective_c_plugin-#{v}-macos-x86_64.zip" s.source = { :http => "https://github.com/#{repo}/releases/download/v#{v}/#{file}", @@ -95,7 +95,7 @@ Pod::Spec.new do |s| s.preserve_paths = plugin # Restrict the protoc version to the one supported by this plugin. - s.dependency '!ProtoCompiler', '3.0.0' + s.dependency '!ProtoCompiler', '3.0.2' # For the Protobuf dependency not to complain: s.ios.deployment_target = '7.1' s.osx.deployment_target = '10.9' diff --git a/src/objective-c/!ProtoCompiler.podspec b/src/objective-c/!ProtoCompiler.podspec index 5018dedc066..b55f6c93c62 100644 --- a/src/objective-c/!ProtoCompiler.podspec +++ b/src/objective-c/!ProtoCompiler.podspec @@ -36,7 +36,7 @@ Pod::Spec.new do |s| # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed # before them. s.name = '!ProtoCompiler' - v = '3.0.0' + v = '3.0.2' s.version = v s.summary = 'The Protobuf Compiler (protoc) generates Objective-C files from .proto files' s.description = <<-DESC From 7be1322b869243d02ec4983ff5c8027761c3ff61 Mon Sep 17 00:00:00 2001 From: Harvey Tuch Date: Mon, 24 Oct 2016 15:00:49 -0400 Subject: [PATCH 196/286] Restrict handshake_{client,server} to linux platform. --- build.yaml | 4 + tools/run_tests/tests.json | 20 +- vsprojects/buildtests_c.sln | 54 ----- .../handshake_client/handshake_client.vcxproj | 199 ------------------ .../handshake_client.vcxproj.filters | 21 -- .../handshake_server/handshake_server.vcxproj | 199 ------------------ .../handshake_server.vcxproj.filters | 21 -- 7 files changed, 8 insertions(+), 510 deletions(-) delete mode 100644 vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj delete mode 100644 vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj.filters delete mode 100644 vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj delete mode 100644 vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj.filters diff --git a/build.yaml b/build.yaml index e4b6b24e1a2..6ddeb5e402c 100644 --- a/build.yaml +++ b/build.yaml @@ -1978,6 +1978,8 @@ targets: - grpc - gpr_test_util - gpr + platforms: + - linux secure: true - name: handshake_server build: test @@ -1989,6 +1991,8 @@ targets: - grpc - gpr_test_util - gpr + platforms: + - linux secure: true - name: hpack_parser_fuzzer_test build: fuzzer diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index c603c7dce8f..4c9832706e4 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -1223,10 +1223,7 @@ { "args": [], "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ], "cpu_cost": 1.0, "exclude_configs": [], @@ -1235,19 +1232,13 @@ "language": "c", "name": "handshake_client", "platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ] }, { "args": [], "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ], "cpu_cost": 1.0, "exclude_configs": [], @@ -1256,10 +1247,7 @@ "language": "c", "name": "handshake_server", "platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ] }, { diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index eda6795ab73..339b42f9d7c 100644 --- a/vsprojects/buildtests_c.sln +++ b/vsprojects/buildtests_c.sln @@ -1031,28 +1031,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h2_ssl_test", "vcxproj\test {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_client", "vcxproj\test\handshake_client\handshake_client.vcxproj", "{C3F19761-48E0-AE1F-1155-CF4CEB143B6A}" - ProjectSection(myProperties) = preProject - lib = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} - {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} - {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} - {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "handshake_server", "vcxproj\test\handshake_server\handshake_server.vcxproj", "{BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}" - ProjectSection(myProperties) = preProject - lib = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} - {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} - {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} - {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "head_of_line_blocking_bad_client_test", "vcxproj\test\head_of_line_blocking_bad_client_test\head_of_line_blocking_bad_client_test.vcxproj", "{23DF0572-DBF1-08DA-8EAD-8508354C90A4}" ProjectSection(myProperties) = preProject lib = "False" @@ -3144,38 +3122,6 @@ Global {EA78D290-4098-FF04-C647-013F6B81E4E7}.Release-DLL|Win32.Build.0 = Release|Win32 {EA78D290-4098-FF04-C647-013F6B81E4E7}.Release-DLL|x64.ActiveCfg = Release|x64 {EA78D290-4098-FF04-C647-013F6B81E4E7}.Release-DLL|x64.Build.0 = Release|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|x64.ActiveCfg = Debug|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|Win32.ActiveCfg = Release|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|x64.ActiveCfg = Release|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|Win32.Build.0 = Debug|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug|x64.Build.0 = Debug|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|Win32.Build.0 = Release|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release|x64.Build.0 = Release|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|Win32.Build.0 = Debug|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|x64.ActiveCfg = Debug|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Debug-DLL|x64.Build.0 = Debug|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|Win32.ActiveCfg = Release|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|Win32.Build.0 = Release|Win32 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|x64.ActiveCfg = Release|x64 - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A}.Release-DLL|x64.Build.0 = Release|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|Win32.ActiveCfg = Debug|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|x64.ActiveCfg = Debug|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|Win32.ActiveCfg = Release|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|x64.ActiveCfg = Release|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|Win32.Build.0 = Debug|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug|x64.Build.0 = Debug|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|Win32.Build.0 = Release|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release|x64.Build.0 = Release|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|Win32.Build.0 = Debug|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|x64.ActiveCfg = Debug|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Debug-DLL|x64.Build.0 = Debug|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|Win32.ActiveCfg = Release|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|Win32.Build.0 = Release|Win32 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|x64.ActiveCfg = Release|x64 - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1}.Release-DLL|x64.Build.0 = Release|x64 {23DF0572-DBF1-08DA-8EAD-8508354C90A4}.Debug|Win32.ActiveCfg = Debug|Win32 {23DF0572-DBF1-08DA-8EAD-8508354C90A4}.Debug|x64.ActiveCfg = Debug|x64 {23DF0572-DBF1-08DA-8EAD-8508354C90A4}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj b/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj deleted file mode 100644 index 53994184b49..00000000000 --- a/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {C3F19761-48E0-AE1F-1155-CF4CEB143B6A} - true - $(SolutionDir)IntDir\$(MSBuildProjectName)\ - - - - v100 - - - v110 - - - v120 - - - v140 - - - Application - true - Unicode - - - Application - false - true - Unicode - - - - - - - - - - - - - - handshake_client - static - Debug - static - Debug - - - handshake_client - static - Release - static - Release - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreadedDebug - true - None - false - - - Console - true - false - - - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreadedDebug - true - None - false - - - Console - true - false - - - - - - NotUsing - Level3 - MaxSpeed - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - true - true - MultiThreaded - true - None - false - - - Console - true - false - true - true - - - - - - NotUsing - Level3 - MaxSpeed - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - true - true - MultiThreaded - true - None - false - - - Console - true - false - true - true - - - - - - - - - - {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} - - - {29D16885-7228-4C31-81ED-5F9187C7F2A9} - - - {EAB0A629-17A9-44DB-B5FF-E91A721FE037} - - - {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} - - - - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - - diff --git a/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj.filters b/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj.filters deleted file mode 100644 index 5ab9d558340..00000000000 --- a/vsprojects/vcxproj/test/handshake_client/handshake_client.vcxproj.filters +++ /dev/null @@ -1,21 +0,0 @@ - - - - - test\core\handshake - - - - - - {12736a84-5ad0-99e6-e337-c0fad767ce45} - - - {532702cb-b33d-9aa1-67d0-8bd5d9992edf} - - - {62ea9f20-390c-5c3e-97fc-054ca3d45f15} - - - - diff --git a/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj b/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj deleted file mode 100644 index 379a34f93a4..00000000000 --- a/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {BABC32EE-A852-0303-70EC-5C9E3AD6AEF1} - true - $(SolutionDir)IntDir\$(MSBuildProjectName)\ - - - - v100 - - - v110 - - - v120 - - - v140 - - - Application - true - Unicode - - - Application - false - true - Unicode - - - - - - - - - - - - - - handshake_server - static - Debug - static - Debug - - - handshake_server - static - Release - static - Release - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreadedDebug - true - None - false - - - Console - true - false - - - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreadedDebug - true - None - false - - - Console - true - false - - - - - - NotUsing - Level3 - MaxSpeed - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - true - true - MultiThreaded - true - None - false - - - Console - true - false - true - true - - - - - - NotUsing - Level3 - MaxSpeed - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - true - true - MultiThreaded - true - None - false - - - Console - true - false - true - true - - - - - - - - - - {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} - - - {29D16885-7228-4C31-81ED-5F9187C7F2A9} - - - {EAB0A629-17A9-44DB-B5FF-E91A721FE037} - - - {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} - - - - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - - diff --git a/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj.filters b/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj.filters deleted file mode 100644 index 954066bede3..00000000000 --- a/vsprojects/vcxproj/test/handshake_server/handshake_server.vcxproj.filters +++ /dev/null @@ -1,21 +0,0 @@ - - - - - test\core\handshake - - - - - - {1cb218e5-cff0-6347-00f6-5910714d39ce} - - - {869e7645-9441-8315-dd44-3ea0d6916adb} - - - {ba4cba39-097b-d31e-bdfb-13df801b07bf} - - - - From 93fc27735bef37a72054f6ffb7b18c80fee31de6 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Mon, 24 Oct 2016 12:13:51 -0700 Subject: [PATCH 197/286] Use the v1.0.0 plugin --- src/objective-c/!ProtoCompiler-gRPCPlugin.podspec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec index fc506b38d28..384641854fc 100644 --- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec +++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec @@ -84,7 +84,9 @@ Pod::Spec.new do |s| repo = 'muxi/grpc' file = "grpc_objective_c_plugin-#{v}-macos-x86_64.zip" s.source = { - :http => "https://github.com/#{repo}/releases/download/v#{v}/#{file}", + # TODO(mxyan): Reverse this change when v1.0.1 is released + # :http => "https://github.com/#{repo}/releases/download/v#{v}/#{file}", + :http => "https://github.com/grpc/grpc/releases/download/v1.0.0/grpc_objective_c_plugin-1.0.0-macos-x86_64.zip" # TODO(jcanizales): Add sha1 or sha256 # :sha1 => '??', } From 94d40cbd5a0b827e28b6bd1dd91022c3557c063f Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Mon, 24 Oct 2016 21:06:40 +0200 Subject: [PATCH 198/286] make benchmarks create report.xml --- tools/run_tests/run_performance_tests.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tools/run_tests/run_performance_tests.py b/tools/run_tests/run_performance_tests.py index 099ab89ddff..7cb827ecea9 100755 --- a/tools/run_tests/run_performance_tests.py +++ b/tools/run_tests/run_performance_tests.py @@ -42,6 +42,7 @@ import os import performance.scenario_config as scenario_config import pipes import re +import report_utils import subprocess import sys import tempfile @@ -453,6 +454,7 @@ if not scenarios: total_scenario_failures = 0 qps_workers_killed = 0 +merged_resultset = {} for scenario in scenarios: if args.dry_run: print(scenario.name) @@ -460,14 +462,20 @@ for scenario in scenarios: try: for worker in scenario.workers: worker.start() - scenario_failures, _ = jobset.run([scenario.jobspec, - create_quit_jobspec(scenario.workers, remote_host=args.remote_driver_host)], - newline_on_success=True, maxjobs=1) + scenario_failures, resultset = jobset.run([scenario.jobspec, + create_quit_jobspec(scenario.workers, remote_host=args.remote_driver_host)], + newline_on_success=True, maxjobs=1) total_scenario_failures += scenario_failures + merged_resultset = dict(itertools.chain(merged_resultset.iteritems(), + resultset.iteritems())) finally: # Consider qps workers that need to be killed as failures qps_workers_killed += finish_qps_workers(scenario.workers) + +report_utils.render_junit_xml_report(merged_resultset, 'report.xml', + suite_name='benchmarks') + if total_scenario_failures > 0 or qps_workers_killed > 0: print ("%s scenarios failed and %s qps worker jobs killed" % (total_scenario_failures, qps_workers_killed)) sys.exit(1) From 069c12de238b86299d14887dfa5c87902ad6117d Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 24 Oct 2016 12:36:52 -0700 Subject: [PATCH 199/286] Fix thread_manager_test --- test/cpp/thread_manager/thread_manager_test.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/test/cpp/thread_manager/thread_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc index ffeffd2e655..2b3110e057c 100644 --- a/test/cpp/thread_manager/thread_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -39,6 +39,7 @@ #include #include +#include "src/cpp/thread_manager/thread_manager.h" #include "test/cpp/util/test_config.h" class ThreadManagerTest GRPC_FINAL : public grpc::ThreadManager { From 26ef574874323e2ba480767d2bdfbd17e35d7339 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 24 Oct 2016 12:39:04 -0700 Subject: [PATCH 200/286] clang format issues --- include/grpc++/server.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/grpc++/server.h b/include/grpc++/server.h index a6deb5ee6b3..a6d70c7577b 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -201,7 +201,7 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { grpc::mutex mu_; bool started_; bool shutdown_; - bool shutdown_notified_; // Was notify called on the shutdown_cv_ + bool shutdown_notified_; // Was notify called on the shutdown_cv_ grpc::condition_variable shutdown_cv_; From 25db523baa162b6b5d0fa2a652aca2d37dfa6dba Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Mon, 24 Oct 2016 12:53:01 -0700 Subject: [PATCH 201/286] Fix sockaddr_resolver_test. --- .../resolvers/sockaddr_resolver_test.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/core/client_channel/resolvers/sockaddr_resolver_test.c b/test/core/client_channel/resolvers/sockaddr_resolver_test.c index c39052cd9dd..20c42b7387e 100644 --- a/test/core/client_channel/resolvers/sockaddr_resolver_test.c +++ b/test/core/client_channel/resolvers/sockaddr_resolver_test.c @@ -38,21 +38,23 @@ #include #include "src/core/ext/client_channel/resolver_registry.h" -#include "src/core/ext/client_channel/resolver_result.h" +#include "src/core/lib/channel/channel_args.h" #include "test/core/util/test_config.h" typedef struct on_resolution_arg { char *expected_server_name; - grpc_resolver_result *resolver_result; + grpc_channel_args *resolver_result; } on_resolution_arg; void on_resolution_cb(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { on_resolution_arg *res = arg; - const char *server_name = - grpc_resolver_result_get_server_name(res->resolver_result); - GPR_ASSERT(strcmp(res->expected_server_name, server_name) == 0); - grpc_resolver_result_unref(exec_ctx, res->resolver_result); + const grpc_arg* channel_arg = + grpc_channel_args_find(res->resolver_result, GRPC_ARG_SERVER_NAME); + GPR_ASSERT(channel_arg != NULL); + GPR_ASSERT(channel_arg->type == GRPC_ARG_STRING); + GPR_ASSERT(strcmp(res->expected_server_name, channel_arg->value.string) == 0); + grpc_channel_args_destroy(res->resolver_result); } static void test_succeeds(grpc_resolver_factory *factory, const char *string) { From d54e1bc6600add81276533c16210ab5f65d9bad6 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Mon, 24 Oct 2016 12:54:54 -0700 Subject: [PATCH 202/286] bug fix --- src/objective-c/!ProtoCompiler-gRPCPlugin.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec index 384641854fc..57f5cc91d18 100644 --- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec +++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec @@ -81,7 +81,7 @@ Pod::Spec.new do |s| } s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' } - repo = 'muxi/grpc' + repo = 'grpc/grpc' file = "grpc_objective_c_plugin-#{v}-macos-x86_64.zip" s.source = { # TODO(mxyan): Reverse this change when v1.0.1 is released From b367c1bed706bf408ac4c8f3664e1213505ddc3c Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Mon, 24 Oct 2016 12:59:07 -0700 Subject: [PATCH 203/286] Fix dns_resolver_connectivity_test. --- src/core/ext/resolver/dns/native/dns_resolver.c | 4 +++- .../resolvers/dns_resolver_connectivity_test.c | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index 4ca8a29b3a6..958b8af8b28 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -224,7 +224,9 @@ static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, dns_resolver *r) { if (r->next_completion != NULL && r->resolved_version != r->published_version) { - *r->target_result = grpc_channel_args_copy(r->resolved_result); + *r->target_result = r->resolved_result == NULL + ? NULL + : grpc_channel_args_copy(r->resolved_result); grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; r->published_version = r->resolved_version; diff --git a/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c index 07723c229d2..ffa167a0e78 100644 --- a/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c +++ b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c @@ -37,6 +37,7 @@ #include #include "src/core/ext/client_channel/resolver_registry.h" +#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/timer.h" #include "test/core/util/test_config.h" @@ -103,7 +104,7 @@ int main(int argc, char **argv) { grpc_resolver *resolver = create_resolver("dns:test"); - grpc_resolver_result *result = (grpc_resolver_result *)1; + grpc_channel_args *result = (grpc_channel_args *)1; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; gpr_event ev1; @@ -122,7 +123,7 @@ int main(int argc, char **argv) { GPR_ASSERT(wait_loop(30, &ev2)); GPR_ASSERT(result != NULL); - grpc_resolver_result_unref(&exec_ctx, result); + grpc_channel_args_destroy(result); GRPC_RESOLVER_UNREF(&exec_ctx, resolver, "test"); grpc_exec_ctx_finish(&exec_ctx); From 5f40e5ddf597169a5cf88d1b0471831f1db1edc0 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Mon, 24 Oct 2016 13:09:05 -0700 Subject: [PATCH 204/286] Minor clean-up. --- src/core/ext/client_channel/client_channel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/ext/client_channel/client_channel.c b/src/core/ext/client_channel/client_channel.c index acebabe8b02..dfa84b0d770 100644 --- a/src/core/ext/client_channel/client_channel.c +++ b/src/core/ext/client_channel/client_channel.c @@ -216,7 +216,7 @@ static void on_resolver_result_changed(grpc_exec_ctx *exec_ctx, void *arg, "resolver requested LB policy %s but provided only balancer " "addresses, no backend addresses -- forcing use of grpclb LB " "policy", - (lb_policy_name == NULL ? "(none)" : lb_policy_name)); + lb_policy_name); } lb_policy_name = "grpclb"; } From e3a21005bfa42d974ee2b8a0776797ae2b7eea23 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Mon, 24 Oct 2016 13:29:05 -0700 Subject: [PATCH 205/286] Fix propagation of channel args for insecure channels. --- src/core/ext/client_channel/client_channel_factory.c | 4 ++-- src/core/ext/client_channel/client_channel_factory.h | 9 +++++---- src/core/ext/client_channel/subchannel.c | 2 +- src/core/ext/client_channel/subchannel.h | 2 +- src/core/ext/client_channel/subchannel_index.c | 6 +++--- src/core/ext/client_channel/subchannel_index.h | 4 ++-- .../transport/chttp2/client/insecure/channel_create.c | 6 +++--- .../chttp2/client/secure/secure_channel_create.c | 4 ++-- test/cpp/end2end/end2end_test.cc | 2 +- 9 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/core/ext/client_channel/client_channel_factory.c b/src/core/ext/client_channel/client_channel_factory.c index db1cc9093c6..4900832d573 100644 --- a/src/core/ext/client_channel/client_channel_factory.c +++ b/src/core/ext/client_channel/client_channel_factory.c @@ -44,14 +44,14 @@ void grpc_client_channel_factory_unref(grpc_exec_ctx* exec_ctx, grpc_subchannel* grpc_client_channel_factory_create_subchannel( grpc_exec_ctx* exec_ctx, grpc_client_channel_factory* factory, - grpc_subchannel_args* args) { + const grpc_subchannel_args* args) { return factory->vtable->create_subchannel(exec_ctx, factory, args); } grpc_channel* grpc_client_channel_factory_create_channel( grpc_exec_ctx* exec_ctx, grpc_client_channel_factory* factory, const char* target, grpc_client_channel_type type, - grpc_channel_args* args) { + const grpc_channel_args* args) { return factory->vtable->create_client_channel(exec_ctx, factory, target, type, args); } diff --git a/src/core/ext/client_channel/client_channel_factory.h b/src/core/ext/client_channel/client_channel_factory.h index 28828c2eb60..2b8fc577b3b 100644 --- a/src/core/ext/client_channel/client_channel_factory.h +++ b/src/core/ext/client_channel/client_channel_factory.h @@ -60,12 +60,12 @@ struct grpc_client_channel_factory_vtable { void (*unref)(grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *factory); grpc_subchannel *(*create_subchannel)(grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *factory, - grpc_subchannel_args *args); + const grpc_subchannel_args *args); grpc_channel *(*create_client_channel)(grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *factory, const char *target, grpc_client_channel_type type, - grpc_channel_args *args); + const grpc_channel_args *args); }; void grpc_client_channel_factory_ref(grpc_client_channel_factory *factory); @@ -75,11 +75,12 @@ void grpc_client_channel_factory_unref(grpc_exec_ctx *exec_ctx, /** Create a new grpc_subchannel */ grpc_subchannel *grpc_client_channel_factory_create_subchannel( grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *factory, - grpc_subchannel_args *args); + const grpc_subchannel_args *args); /** Create a new grpc_channel */ grpc_channel *grpc_client_channel_factory_create_channel( grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *factory, - const char *target, grpc_client_channel_type type, grpc_channel_args *args); + const char *target, grpc_client_channel_type type, + const grpc_channel_args *args); #endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H */ diff --git a/src/core/ext/client_channel/subchannel.c b/src/core/ext/client_channel/subchannel.c index 672e5c3a913..b35bb79bc7f 100644 --- a/src/core/ext/client_channel/subchannel.c +++ b/src/core/ext/client_channel/subchannel.c @@ -298,7 +298,7 @@ void grpc_subchannel_weak_unref(grpc_exec_ctx *exec_ctx, grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx, grpc_connector *connector, - grpc_subchannel_args *args) { + const grpc_subchannel_args *args) { grpc_subchannel_key *key = grpc_subchannel_key_create(connector, args); grpc_subchannel *c = grpc_subchannel_index_find(exec_ctx, key); if (c) { diff --git a/src/core/ext/client_channel/subchannel.h b/src/core/ext/client_channel/subchannel.h index c4a7da0c24a..0f34cff14b9 100644 --- a/src/core/ext/client_channel/subchannel.h +++ b/src/core/ext/client_channel/subchannel.h @@ -174,6 +174,6 @@ struct grpc_subchannel_args { /** create a subchannel given a connector */ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx, grpc_connector *connector, - grpc_subchannel_args *args); + const grpc_subchannel_args *args); #endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_H */ diff --git a/src/core/ext/client_channel/subchannel_index.c b/src/core/ext/client_channel/subchannel_index.c index bf22975fba4..7c547f8edb8 100644 --- a/src/core/ext/client_channel/subchannel_index.c +++ b/src/core/ext/client_channel/subchannel_index.c @@ -73,7 +73,7 @@ static grpc_exec_ctx *current_ctx() { } static grpc_subchannel_key *create_key( - grpc_connector *connector, grpc_subchannel_args *args, + grpc_connector *connector, const grpc_subchannel_args *args, grpc_channel_args *(*copy_channel_args)(const grpc_channel_args *args)) { grpc_subchannel_key *k = gpr_malloc(sizeof(*k)); k->connector = grpc_connector_ref(connector); @@ -96,8 +96,8 @@ static grpc_subchannel_key *create_key( return k; } -grpc_subchannel_key *grpc_subchannel_key_create(grpc_connector *connector, - grpc_subchannel_args *args) { +grpc_subchannel_key *grpc_subchannel_key_create( + grpc_connector *connector, const grpc_subchannel_args *args) { return create_key(connector, args, grpc_channel_args_normalize); } diff --git a/src/core/ext/client_channel/subchannel_index.h b/src/core/ext/client_channel/subchannel_index.h index 5b3af6b0546..a67bd5e2195 100644 --- a/src/core/ext/client_channel/subchannel_index.h +++ b/src/core/ext/client_channel/subchannel_index.h @@ -43,8 +43,8 @@ typedef struct grpc_subchannel_key grpc_subchannel_key; /** Create a key that can be used to uniquely identify a subchannel */ -grpc_subchannel_key *grpc_subchannel_key_create(grpc_connector *con, - grpc_subchannel_args *args); +grpc_subchannel_key *grpc_subchannel_key_create( + grpc_connector *con, const grpc_subchannel_args *args); /** Destroy a subchannel key */ void grpc_subchannel_key_destroy(grpc_exec_ctx *exec_ctx, diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c index b3e1a71987e..6dc73169918 100644 --- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c +++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c @@ -173,7 +173,7 @@ static void client_channel_factory_unref( static grpc_subchannel *client_channel_factory_create_subchannel( grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory, - grpc_subchannel_args *args) { + const grpc_subchannel_args *args) { connector *c = gpr_malloc(sizeof(*c)); memset(c, 0, sizeof(*c)); c->base.vtable = &connector_vtable; @@ -194,7 +194,7 @@ static grpc_subchannel *client_channel_factory_create_subchannel( static grpc_channel *client_channel_factory_create_channel( grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory, const char *target, grpc_client_channel_type type, - grpc_channel_args *args) { + const grpc_channel_args *args) { grpc_channel *channel = grpc_channel_create(exec_ctx, target, args, GRPC_CLIENT_CHANNEL, NULL); grpc_resolver *resolver = grpc_resolver_create(target, args); @@ -235,7 +235,7 @@ grpc_channel *grpc_insecure_channel_create(const char *target, grpc_client_channel_factory *factory = (grpc_client_channel_factory *)&client_channel_factory; grpc_channel *channel = client_channel_factory_create_channel( - &exec_ctx, factory, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, NULL); + &exec_ctx, factory, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, args); grpc_client_channel_factory_unref(&exec_ctx, factory); grpc_exec_ctx_finish(&exec_ctx); diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c index 37e7b0bcf93..a4f1858aa2b 100644 --- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c @@ -248,7 +248,7 @@ static void client_channel_factory_unref( static grpc_subchannel *client_channel_factory_create_subchannel( grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory, - grpc_subchannel_args *args) { + const grpc_subchannel_args *args) { client_channel_factory *f = (client_channel_factory *)cc_factory; connector *c = gpr_malloc(sizeof(*c)); memset(c, 0, sizeof(*c)); @@ -272,7 +272,7 @@ static grpc_subchannel *client_channel_factory_create_subchannel( static grpc_channel *client_channel_factory_create_channel( grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory, const char *target, grpc_client_channel_type type, - grpc_channel_args *args) { + const grpc_channel_args *args) { client_channel_factory *f = (client_channel_factory *)cc_factory; grpc_channel *channel = grpc_channel_create(exec_ctx, target, args, GRPC_CLIENT_CHANNEL, NULL); diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index b1d3ce92f6a..7af0fb997e2 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -636,7 +636,7 @@ TEST_P(End2endTest, SimpleRpcWithCustomeUserAgentPrefix) { auto iter = trailing_metadata.find("user-agent"); EXPECT_TRUE(iter != trailing_metadata.end()); grpc::string expected_prefix = user_agent_prefix_ + " grpc-c++/"; - EXPECT_TRUE(iter->second.starts_with(expected_prefix)); + EXPECT_TRUE(iter->second.starts_with(expected_prefix)) << iter->second; } TEST_P(End2endTest, MultipleRpcsWithVariedBinaryMetadataValue) { From 3620287bbe5fc9a955b0f176b48c527d931aa679 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 24 Oct 2016 16:02:29 -0700 Subject: [PATCH 206/286] Sanitize --- package.json | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 30b4b6787c2..c6b2600209b 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,7 @@ "coverage": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha src/node/test", "install": "./node_modules/.bin/node-pre-gyp install --fallback-to-build" }, - "bundledDependencies": [ - "node-pre-gyp" - ], + "bundledDependencies": ["node-pre-gyp"], "dependencies": { "arguejs": "^0.2.3", "lodash": "^3.9.3", @@ -54,10 +52,11 @@ }, "binary": { "module_name": "grpc_node", - "module_path": "src/node/extension_binary", + "module_path": "./build/Release/", "host": "https://storage.googleapis.com/", "remote_path": "grpc-precompiled-binaries/node/{name}/v{version}", - "package_name": "{node_abi}-{platform}-{arch}.tar.gz" + "package_name": "{node_abi}-{platform}-{arch}.tar.gz", + "module_path": "src/node/extension_binary" }, "files": [ "LICENSE", @@ -78,7 +77,7 @@ ], "main": "src/node/index.js", "license": "BSD-3-Clause", - "jshintConfig": { + "jshintConfig" : { "bitwise": true, "curly": true, "eqeqeq": true, From 3fc578345d32df35feee769b2ab64141db04b6f7 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 24 Oct 2016 16:18:13 -0700 Subject: [PATCH 207/286] Change std::atomic_int to gpr_atm since gcc4.4 is complaining --- .../cpp/thread_manager/thread_manager_test.cc | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/test/cpp/thread_manager/thread_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc index 2b3110e057c..6c1255e9136 100644 --- a/test/cpp/thread_manager/thread_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -31,13 +31,13 @@ *is % allowed in string */ -#include #include #include #include #include #include +#include #include "src/cpp/thread_manager/thread_manager.h" #include "test/cpp/util/test_config.h" @@ -67,9 +67,9 @@ class ThreadManagerTest GRPC_FINAL : public grpc::ThreadManager { // PollForWork will return SHUTDOWN after these many number of invocations static const int kMaxNumPollForWork = 50; - std::atomic_int num_do_work_; // Number of calls to DoWork - std::atomic_int num_poll_for_work_; // Number of calls to PollForWork - std::atomic_int num_work_found_; // Number of times WORK_FOUND was returned + gpr_atm num_do_work_; // Number of calls to DoWork + gpr_atm num_poll_for_work_; // Number of calls to PollForWork + gpr_atm num_work_found_; // Number of times WORK_FOUND was returned }; void ThreadManagerTest::SleepForMs(int duration_ms) { @@ -81,7 +81,7 @@ void ThreadManagerTest::SleepForMs(int duration_ms) { grpc::ThreadManager::WorkStatus ThreadManagerTest::PollForWork(void **tag, bool *ok) { - int call_num = num_poll_for_work_.fetch_add(1); + int call_num = gpr_atm_no_barrier_fetch_add(&num_poll_for_work_, 1); if (call_num >= kMaxNumPollForWork) { Shutdown(); @@ -98,27 +98,29 @@ grpc::ThreadManager::WorkStatus ThreadManagerTest::PollForWork(void **tag, if (call_num % 3 == 0) { return TIMEOUT; } else { - num_work_found_++; + gpr_atm_no_barrier_fetch_add(&num_work_found_, 1); return WORK_FOUND; } } void ThreadManagerTest::DoWork(void *tag, bool ok) { - num_do_work_++; + gpr_atm_no_barrier_fetch_add(&num_do_work_, 1); SleepForMs(kDoWorkDurationMsec); // Simulate doing work by sleeping } void ThreadManagerTest::PerformTest() { // Initialize() starts the ThreadManager - ThreadManager::Initialize(); + Initialize(); // Wait for all the threads to gracefully terminate - ThreadManager::Wait(); + Wait(); // The number of times DoWork() was called is equal to the number of times // WORK_FOUND was returned - gpr_log(GPR_DEBUG, "DoWork() called %d times", num_do_work_.load()); - GPR_ASSERT(num_do_work_ == num_work_found_); + gpr_log(GPR_DEBUG, "DoWork() called %ld times", + gpr_atm_no_barrier_load(&num_do_work_)); + GPR_ASSERT(gpr_atm_no_barrier_load(&num_do_work_) == + gpr_atm_no_barrier_load(&num_work_found_)); } int main(int argc, char **argv) { From e917f5d96a58cdfc0aceaa1337d505eef1cef885 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Tue, 25 Oct 2016 07:48:28 -0700 Subject: [PATCH 208/286] Update comments. --- src/core/ext/client_channel/lb_policy_factory.h | 6 ++---- src/core/ext/client_channel/resolver.h | 10 +++++----- src/core/ext/client_channel/resolver_registry.h | 4 +++- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/core/ext/client_channel/lb_policy_factory.h b/src/core/ext/client_channel/lb_policy_factory.h index c19126d04fd..e2b8080a329 100644 --- a/src/core/ext/client_channel/lb_policy_factory.h +++ b/src/core/ext/client_channel/lb_policy_factory.h @@ -77,8 +77,7 @@ typedef struct grpc_lb_addresses { grpc_lb_addresses *grpc_lb_addresses_create( size_t num_addresses, const grpc_lb_user_data_vtable *user_data_vtable); -/** Creates a copy of \a addresses. If \a user_data_copy is not NULL, - * it will be invoked to copy the \a user_data field of each address. */ +/** Creates a copy of \a addresses. */ grpc_lb_addresses *grpc_lb_addresses_copy(const grpc_lb_addresses *addresses); /** Sets the value of the address at index \a index of \a addresses. @@ -93,8 +92,7 @@ void grpc_lb_addresses_set_address(grpc_lb_addresses *addresses, size_t index, int grpc_lb_addresses_cmp(const grpc_lb_addresses *addresses1, const grpc_lb_addresses *addresses2); -/** Destroys \a addresses. If \a user_data_destroy is not NULL, it will - * be invoked to destroy the \a user_data field of each address. */ +/** Destroys \a addresses. */ void grpc_lb_addresses_destroy(grpc_lb_addresses *addresses); /** Returns a channel arg containing \a addresses. */ diff --git a/src/core/ext/client_channel/resolver.h b/src/core/ext/client_channel/resolver.h index 0bebcf00b36..96ece92b9d8 100644 --- a/src/core/ext/client_channel/resolver.h +++ b/src/core/ext/client_channel/resolver.h @@ -40,7 +40,7 @@ typedef struct grpc_resolver grpc_resolver; typedef struct grpc_resolver_vtable grpc_resolver_vtable; -/** grpc_resolver provides grpc_channel_args objects to grpc_channel objects */ +/** \a grpc_resolver provides \a grpc_channel_args objects to its caller */ struct grpc_resolver { const grpc_resolver_vtable *vtable; gpr_refcount refs; @@ -79,11 +79,11 @@ void grpc_resolver_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver); void grpc_resolver_channel_saw_error(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver); -/** Get the next result from the resolver. Expected to set *result with - new channel args and then schedule on_complete for execution. +/** Get the next result from the resolver. Expected to set \a *result with + new channel args and then schedule \a on_complete for execution. - If resolution is fatally broken, set *result to NULL and - schedule on_complete. */ + If resolution is fatally broken, set \a *result to NULL and + schedule \a on_complete. */ void grpc_resolver_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, grpc_channel_args **result, grpc_closure *on_complete); diff --git a/src/core/ext/client_channel/resolver_registry.h b/src/core/ext/client_channel/resolver_registry.h index ca57bef6fbe..2a95a669f0d 100644 --- a/src/core/ext/client_channel/resolver_registry.h +++ b/src/core/ext/client_channel/resolver_registry.h @@ -57,7 +57,9 @@ void grpc_register_resolver_type(grpc_resolver_factory *factory); was not NULL). If a resolver factory was found, use it to instantiate a resolver and return it. - If a resolver factory was not found, return NULL. */ + If a resolver factory was not found, return NULL. + \a args is a set of channel arguments to be included in the result + (typically the set of arguments passed in from the client API). */ grpc_resolver *grpc_resolver_create(const char *target, const grpc_channel_args *args); From f0b2ec0435aebf64c6c4f8c2fe39917acfb23ef1 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Tue, 25 Oct 2016 07:49:36 -0700 Subject: [PATCH 209/286] clang-format --- test/core/client_channel/resolvers/sockaddr_resolver_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/core/client_channel/resolvers/sockaddr_resolver_test.c b/test/core/client_channel/resolvers/sockaddr_resolver_test.c index 20c42b7387e..ebf311ab83f 100644 --- a/test/core/client_channel/resolvers/sockaddr_resolver_test.c +++ b/test/core/client_channel/resolvers/sockaddr_resolver_test.c @@ -49,7 +49,7 @@ typedef struct on_resolution_arg { void on_resolution_cb(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { on_resolution_arg *res = arg; - const grpc_arg* channel_arg = + const grpc_arg *channel_arg = grpc_channel_args_find(res->resolver_result, GRPC_ARG_SERVER_NAME); GPR_ASSERT(channel_arg != NULL); GPR_ASSERT(channel_arg->type == GRPC_ARG_STRING); From b477cebbe77fca069fb2a4bb1e9806e0891ead83 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Tue, 25 Oct 2016 08:04:54 -0700 Subject: [PATCH 210/286] Fix asan bug. --- .../ext/transport/chttp2/client/secure/secure_channel_create.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c index a4f1858aa2b..00eb82e12a3 100644 --- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c @@ -346,6 +346,8 @@ grpc_channel *grpc_secure_channel_create(grpc_channel_credentials *creds, grpc_channel *channel = client_channel_factory_create_channel( &exec_ctx, &f->base, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, new_args); // Clean up. + GRPC_SECURITY_CONNECTOR_UNREF(&f->security_connector->base, + "client_channel_factory_create_channel"); grpc_channel_args_destroy(new_args); grpc_client_channel_factory_unref(&exec_ctx, &f->base); grpc_exec_ctx_finish(&exec_ctx); From 33d5494f8c4133713223d41d1a1dfd543c6c6201 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 25 Oct 2016 10:03:52 -0700 Subject: [PATCH 211/286] generate_projects.sh and also add config.h header so that gcc4.4 can recognize nullptr --- BUILD | 2 ++ CMakeLists.txt | 1 + Makefile | 1 + src/cpp/thread_manager/thread_manager.h | 1 + 4 files changed, 5 insertions(+) diff --git a/BUILD b/BUILD index e9d8c4328cb..67a33f6f9c2 100644 --- a/BUILD +++ b/BUILD @@ -1438,6 +1438,7 @@ cc_library( "src/cpp/common/channel_filter.h", "src/cpp/server/dynamic_thread_pool.h", "src/cpp/server/thread_pool_interface.h", + "src/cpp/thread_manager/thread_manager.h", "src/cpp/client/cronet_credentials.cc", "src/cpp/client/insecure_credentials.cc", "src/cpp/common/insecure_create_auth_context.cc", @@ -1462,6 +1463,7 @@ cc_library( "src/cpp/server/server_context.cc", "src/cpp/server/server_credentials.cc", "src/cpp/server/server_posix.cc", + "src/cpp/thread_manager/thread_manager.cc", "src/cpp/util/byte_buffer_cc.cc", "src/cpp/util/slice_cc.cc", "src/cpp/util/status.cc", diff --git a/CMakeLists.txt b/CMakeLists.txt index 27b2135ff33..6f3c6031210 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1203,6 +1203,7 @@ add_library(grpc++_cronet src/cpp/server/server_context.cc src/cpp/server/server_credentials.cc src/cpp/server/server_posix.cc + src/cpp/thread_manager/thread_manager.cc src/cpp/util/byte_buffer_cc.cc src/cpp/util/slice_cc.cc src/cpp/util/status.cc diff --git a/Makefile b/Makefile index bdec3275669..7febbd538bd 100644 --- a/Makefile +++ b/Makefile @@ -3842,6 +3842,7 @@ LIBGRPC++_CRONET_SRC = \ src/cpp/server/server_context.cc \ src/cpp/server/server_credentials.cc \ src/cpp/server/server_posix.cc \ + src/cpp/thread_manager/thread_manager.cc \ src/cpp/util/byte_buffer_cc.cc \ src/cpp/util/slice_cc.cc \ src/cpp/util/status.cc \ diff --git a/src/cpp/thread_manager/thread_manager.h b/src/cpp/thread_manager/thread_manager.h index 1bb13a67dd9..9cfdb8af25f 100644 --- a/src/cpp/thread_manager/thread_manager.h +++ b/src/cpp/thread_manager/thread_manager.h @@ -39,6 +39,7 @@ #include #include +#include namespace grpc { From 39cb9a9acaad9982644d160237c56ae01f2a09a6 Mon Sep 17 00:00:00 2001 From: Maciej Lasyk Date: Tue, 25 Oct 2016 01:12:47 +0200 Subject: [PATCH 212/286] Updated C_PYTHON_DEV_ERROR_MESSAGE err msg w/RHEL+Fedora Added RHEL/Fedora specific information about lacking of python.h - because Linux doesn't mean Ubuntu ;) --- src/python/grpcio/support.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/python/grpcio/support.py b/src/python/grpcio/support.py index 7730374df08..f363f5fdc50 100644 --- a/src/python/grpcio/support.py +++ b/src/python/grpcio/support.py @@ -45,7 +45,10 @@ int main(int argc, char **argv) { return 0; } """ C_PYTHON_DEV_ERROR_MESSAGE = """ Could not find . This could mean the following: - * You're on Ubuntu and haven't `apt-get install`ed `python-dev`. + * You're on Ubuntu and haven't run `apt-get install python-dev`. + * You're on RHEL/Fedora and haven't run `yum install python-devel` or + `dnf install python-devel` (make sure you also have redhat-rpm-config + installed) * You're on Mac OS X and the usual Python framework was somehow corrupted (check your environment variables or try re-installing?) * You're on Windows and your Python installation was somehow corrupted From 99058575be6f6a0146ea9ebd2cd1a698756bd8d5 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 25 Oct 2016 10:51:20 -0700 Subject: [PATCH 213/286] Remove unnecessary #ifdef in credentials code --- .../security/credentials/google_default/credentials_generic.c | 4 ---- .../credentials/google_default/google_default_credentials.h | 2 -- 2 files changed, 6 deletions(-) diff --git a/src/core/lib/security/credentials/google_default/credentials_generic.c b/src/core/lib/security/credentials/google_default/credentials_generic.c index 013e3b54518..d13d8c52008 100644 --- a/src/core/lib/security/credentials/google_default/credentials_generic.c +++ b/src/core/lib/security/credentials/google_default/credentials_generic.c @@ -33,8 +33,6 @@ #include "src/core/lib/security/credentials/google_default/google_default_credentials.h" -#ifdef GRPC_GOOGLE_CREDENTIALS_GENERIC - #include #include #include @@ -54,5 +52,3 @@ char *grpc_get_well_known_google_credentials_file_path_impl(void) { gpr_free(base); return result; } - -#endif /* GRPC_GOOGLE_CREDENTIALS_GENERIC */ diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.h b/src/core/lib/security/credentials/google_default/google_default_credentials.h index 0a5a6605e54..b55546ded0e 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.h +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.h @@ -47,13 +47,11 @@ #define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX \ GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY \ "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE -#define GRPC_GOOGLE_CREDENTIALS_GENERIC 1 #else #define GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR "HOME" #define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX \ ".config/" GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY \ "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE -#define GRPC_GOOGLE_CREDENTIALS_GENERIC 1 #endif void grpc_flush_cached_google_default_credentials(void); From cb4cd3dc5d160c2070320c74feabb2a7351fa897 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 25 Oct 2016 12:06:04 -0700 Subject: [PATCH 214/286] make gcc4.4 happy --- test/cpp/thread_manager/thread_manager_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cpp/thread_manager/thread_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc index 6c1255e9136..50c33f7162a 100644 --- a/test/cpp/thread_manager/thread_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -91,7 +91,7 @@ grpc::ThreadManager::WorkStatus ThreadManagerTest::PollForWork(void **tag, // Simulate "polling for work" by sleeping for sometime SleepForMs(kPollingTimeoutMsec); - *tag = nullptr; + *tag = NULL; *ok = true; // Return timeout roughly 1 out of every 3 calls From bd19fc7e30abcd9ea7cb2bad8217e1b405e8e14f Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Tue, 25 Oct 2016 13:28:12 -0700 Subject: [PATCH 215/286] clang-format format clean --- .../GRPCClient/GRPCCall+ChannelArg.h | 17 +- .../GRPCClient/GRPCCall+ChannelCredentials.h | 16 +- src/objective-c/GRPCClient/GRPCCall+OAuth2.h | 14 +- src/objective-c/GRPCClient/GRPCCall+Tests.h | 25 ++- src/objective-c/GRPCClient/GRPCCall.h | 189 +++++++++------- src/objective-c/GRPCClient/GRPCCall.m | 202 +++++++++++------- .../GRPCClient/private/GRPCCompletionQueue.h | 17 +- .../private/GRPCConnectivityMonitor.h | 11 +- .../private/GRPCConnectivityMonitor.m | 15 +- src/objective-c/GRPCClient/private/GRPCHost.m | 106 +++++---- .../GRPCClient/private/GRPCRequestHeaders.m | 41 ++-- .../GRPCClient/private/GRPCWrappedCall.m | 86 ++++---- .../GRPCClient/private/NSError+GRPC.h | 7 +- 13 files changed, 424 insertions(+), 322 deletions(-) diff --git a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h index 4a3f3fa4a1a..c1623a00687 100644 --- a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h +++ b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h @@ -40,15 +40,18 @@ @interface GRPCCall (ChannelArg) /** - * Use the provided @c userAgentPrefix at the beginning of the HTTP User Agent string for all calls - * to the specified @c host. + * Use the provided @c userAgentPrefix at the beginning of the HTTP User Agent + * string for all calls to the specified @c host. */ -+ (void)setUserAgentPrefix:(nonnull NSString *)userAgentPrefix forHost:(nonnull NSString *)host; ++ (void)setUserAgentPrefix:(nonnull NSString *)userAgentPrefix + forHost:(nonnull NSString *)host; -/** The default response size limit is 4MB. Set this to override that default. */ +/** The default response size limit is 4MB. Set this to override that default. + */ + (void)setResponseSizeLimit:(NSUInteger)limit forHost:(nonnull NSString *)host; -+ (void)closeOpenConnections DEPRECATED_MSG_ATTRIBUTE("The API for this feature is experimental, " - "and might be removed or modified at any " - "time."); ++ (void)closeOpenConnections DEPRECATED_MSG_ATTRIBUTE( + "The API for this feature is experimental, " + "and might be removed or modified at any " + "time."); @end diff --git a/src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h b/src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h index ac2a37d75f2..beae0d11a23 100644 --- a/src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h +++ b/src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h @@ -33,24 +33,26 @@ #import "GRPCCall.h" -/** Helpers for setting TLS Trusted Roots, Client Certificates, and Private Key */ +/** Helpers for setting TLS Trusted Roots, Client Certificates, and Private Key + */ @interface GRPCCall (ChannelCredentials) /** - * Use the provided @c pemRootCert as the set of trusted root Certificate Authorities for @c host. + * Use the provided @c pemRootCert as the set of trusted root Certificate + * Authorities for @c host. */ + (BOOL)setTLSPEMRootCerts:(nullable NSString *)pemRootCert forHost:(nonnull NSString *)host - error:(NSError * _Nullable * _Nullable)errorPtr; + error:(NSError *_Nullable *_Nullable)errorPtr; /** - * Configures @c host with TLS/SSL Client Credentials and optionally trusted root Certificate - * Authorities. If @c pemRootCerts is nil, the default CA Certificates bundled with gRPC will be - * used. + * Configures @c host with TLS/SSL Client Credentials and optionally trusted + * root Certificate Authorities. If @c pemRootCerts is nil, the default CA + * Certificates bundled with gRPC will be used. */ + (BOOL)setTLSPEMRootCerts:(nullable NSString *)pemRootCerts withPrivateKey:(nullable NSString *)pemPrivateKey withCertChain:(nullable NSString *)pemCertChain forHost:(nonnull NSString *)host - error:(NSError * _Nullable * _Nullable)errorPtr; + error:(NSError *_Nullable *_Nullable)errorPtr; @end diff --git a/src/objective-c/GRPCClient/GRPCCall+OAuth2.h b/src/objective-c/GRPCClient/GRPCCall+OAuth2.h index 6b443877e9b..467c6332c1e 100644 --- a/src/objective-c/GRPCClient/GRPCCall+OAuth2.h +++ b/src/objective-c/GRPCClient/GRPCCall+OAuth2.h @@ -37,15 +37,17 @@ @interface GRPCCall (OAuth2) /** - * Setting this property is equivalent to setting "Bearer " as the value of the - * request header with key "authorization" (the authorization header). Setting it to nil removes the - * authorization header from the request. - * The value obtained by getting the property is the OAuth2 bearer token if the authorization header - * of the request has the form "Bearer ", or nil otherwise. + * Setting this property is equivalent to setting "Bearer " as the + * value of the request header with key "authorization" (the authorization + * header). Setting it to nil removes the authorization header from the request. + * The value obtained by getting the property is the OAuth2 bearer token if the + * authorization header of the request has the form "Bearer ", or nil + * otherwise. */ @property(atomic, copy) NSString *oauth2AccessToken; -/** Returns the value (if any) of the "www-authenticate" response header (the challenge header). */ +/** Returns the value (if any) of the "www-authenticate" response header (the + * challenge header). */ @property(atomic, readonly) NSString *oauth2ChallengeHeader; @end diff --git a/src/objective-c/GRPCClient/GRPCCall+Tests.h b/src/objective-c/GRPCClient/GRPCCall+Tests.h index 184ad09c5c8..f517f3aac8a 100644 --- a/src/objective-c/GRPCClient/GRPCCall+Tests.h +++ b/src/objective-c/GRPCClient/GRPCCall+Tests.h @@ -34,33 +34,36 @@ #import "GRPCCall.h" /** - * Methods to let tune down the security of gRPC connections for specific hosts. These shouldn't be - * used in releases, but are sometimes needed for testing. + * Methods to let tune down the security of gRPC connections for specific hosts. + * These shouldn't be used in releases, but are sometimes needed for testing. */ @interface GRPCCall (Tests) /** - * Establish all SSL connections to the provided host using the passed SSL target name and the root - * certificates found in the file at |certsPath|. + * Establish all SSL connections to the provided host using the passed SSL + * target name and the root certificates found in the file at |certsPath|. * - * Must be called before any gRPC call to that host is made. It's illegal to pass the same host to - * more than one invocation of the methods of this category. + * Must be called before any gRPC call to that host is made. It's illegal to + * pass the same host to more than one invocation of the methods of this + * category. */ + (void)useTestCertsPath:(NSString *)certsPath testName:(NSString *)testName forHost:(NSString *)host; /** - * Establish all connections to the provided host using cleartext instead of SSL. + * Establish all connections to the provided host using cleartext instead of + * SSL. * - * Must be called before any gRPC call to that host is made. It's illegal to pass the same host to - * more than one invocation of the methods of this category. + * Must be called before any gRPC call to that host is made. It's illegal to + * pass the same host to more than one invocation of the methods of this + * category. */ + (void)useInsecureConnectionsForHost:(NSString *)host; /** - * Resets all host configurations to their default values, and flushes all connections from the - * cache. + * Resets all host configurations to their default values, and flushes all + * connections from the cache. */ + (void)resetHostSettings; @end diff --git a/src/objective-c/GRPCClient/GRPCCall.h b/src/objective-c/GRPCClient/GRPCCall.h index 7645bb1d34a..5ed160d7a01 100644 --- a/src/objective-c/GRPCClient/GRPCCall.h +++ b/src/objective-c/GRPCClient/GRPCCall.h @@ -34,17 +34,18 @@ /** * The gRPC protocol is an RPC protocol on top of HTTP2. * - * While the most common type of RPC receives only one request message and returns only one response - * message, the protocol also supports RPCs that return multiple individual messages in a streaming - * fashion, RPCs that accept a stream of request messages, or RPCs with both streaming requests and + * While the most common type of RPC receives only one request message and + * returns only one response message, the protocol also supports RPCs that + * return multiple individual messages in a streaming fashion, RPCs that accept + * a stream of request messages, or RPCs with both streaming requests and * responses. * - * Conceptually, each gRPC call consists of a bidirectional stream of binary messages, with RPCs of - * the "non-streaming type" sending only one message in the corresponding direction (the protocol - * doesn't make any distinction). + * Conceptually, each gRPC call consists of a bidirectional stream of binary + * messages, with RPCs of the "non-streaming type" sending only one message in + * the corresponding direction (the protocol doesn't make any distinction). * - * Each RPC uses a different HTTP2 stream, and thus multiple simultaneous RPCs can be multiplexed - * transparently on the same TCP connection. + * Each RPC uses a different HTTP2 stream, and thus multiple simultaneous RPCs + * can be multiplexed transparently on the same TCP connection. */ #import @@ -59,51 +60,56 @@ extern NSString *const kGRPCErrorDomain; /** * gRPC error codes. - * Note that a few of these are never produced by the gRPC libraries, but are of general utility for - * server applications to produce. + * Note that a few of these are never produced by the gRPC libraries, but are of + * general utility for server applications to produce. */ typedef NS_ENUM(NSUInteger, GRPCErrorCode) { /** The operation was cancelled (typically by the caller). */ GRPCErrorCodeCancelled = 1, /** - * Unknown error. Errors raised by APIs that do not return enough error information may be + * Unknown error. Errors raised by APIs that do not return enough error + * information may be * converted to this error. */ GRPCErrorCodeUnknown = 2, /** - * The client specified an invalid argument. Note that this differs from FAILED_PRECONDITION. - * INVALID_ARGUMENT indicates arguments that are problematic regardless of the state of the - * server (e.g., a malformed file name). + * The client specified an invalid argument. Note that this differs from + * FAILED_PRECONDITION. + * INVALID_ARGUMENT indicates arguments that are problematic regardless of the + * state of the server (e.g., a malformed file name). */ GRPCErrorCodeInvalidArgument = 3, /** - * Deadline expired before operation could complete. For operations that change the state of the - * server, this error may be returned even if the operation has completed successfully. For - * example, a successful response from the server could have been delayed long enough for the - * deadline to expire. + * Deadline expired before operation could complete. For operations that + * change the state of the server, this error may be returned even if the + * operation has completed successfully. For example, a successful response + * from the server could have been delayed long enough for the deadline to + * expire. */ GRPCErrorCodeDeadlineExceeded = 4, /** Some requested entity (e.g., file or directory) was not found. */ GRPCErrorCodeNotFound = 5, - /** Some entity that we attempted to create (e.g., file or directory) already exists. */ + /** Some entity that we attempted to create (e.g., file or directory) already + exists. */ GRPCErrorCodeAlreadyExists = 6, /** - * The caller does not have permission to execute the specified operation. PERMISSION_DENIED isn't - * used for rejections caused by exhausting some resource (RESOURCE_EXHAUSTED is used instead for - * those errors). PERMISSION_DENIED doesn't indicate a failure to identify the caller + * The caller does not have permission to execute the specified operation. + * PERMISSION_DENIED isn't used for rejections caused by exhausting some + * resource (RESOURCE_EXHAUSTED is used instead for those errors). + * PERMISSION_DENIED doesn't indicate a failure to identify the caller * (UNAUTHENTICATED is used instead for those errors). */ GRPCErrorCodePermissionDenied = 7, /** - * The request does not have valid authentication credentials for the operation (e.g. the caller's - * identity can't be verified). + * The request does not have valid authentication credentials for the + * operation (e.g. the caller's identity can't be verified). */ GRPCErrorCodeUnauthenticated = 16, @@ -111,42 +117,47 @@ typedef NS_ENUM(NSUInteger, GRPCErrorCode) { GRPCErrorCodeResourceExhausted = 8, /** - * The RPC was rejected because the server is not in a state required for the procedure's + * The RPC was rejected because the server is not in a state required for the + * procedure's * execution. For example, a directory to be deleted may be non-empty, etc. - * The client should not retry until the server state has been explicitly fixed (e.g. by - * performing another RPC). The details depend on the service being called, and should be found in - * the NSError's userInfo. + * The client should not retry until the server state has been explicitly + * fixed (e.g. by + * performing another RPC). The details depend on the service being called, + * and should be found in the NSError's userInfo. */ GRPCErrorCodeFailedPrecondition = 9, /** - * The RPC was aborted, typically due to a concurrency issue like sequencer check failures, - * transaction aborts, etc. The client should retry at a higher-level (e.g., restarting a read- - * modify-write sequence). + * The RPC was aborted, typically due to a concurrency issue like sequencer + * check failures, transaction aborts, etc. The client should retry at a + * higher-level (e.g., restarting a read-modify-write sequence). */ GRPCErrorCodeAborted = 10, /** - * The RPC was attempted past the valid range. E.g., enumerating past the end of a list. - * Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed if the system state - * changes. For example, an RPC to get elements of a list will generate INVALID_ARGUMENT if asked - * to return the element at a negative index, but it will generate OUT_OF_RANGE if asked to return - * the element at an index past the current size of the list. + * The RPC was attempted past the valid range. E.g., enumerating past the end + * of a list. + * Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed + * if the system state changes. For example, an RPC to get elements of a list + * will generate INVALID_ARGUMENT if asked to return the element at a negative + * index, but it will generate OUT_OF_RANGE if asked to return the element at + * an index past the current size of the list. */ GRPCErrorCodeOutOfRange = 11, - /** The procedure is not implemented or not supported/enabled in this server. */ + /** The procedure is not implemented or not supported/enabled in this server. + */ GRPCErrorCodeUnimplemented = 12, /** - * Internal error. Means some invariant expected by the server application or the gRPC library has - * been broken. + * Internal error. Means some invariant expected by the server application or + * the gRPC library has been broken. */ GRPCErrorCodeInternal = 13, /** - * The server is currently unavailable. This is most likely a transient condition and may be - * corrected by retrying with a backoff. + * The server is currently unavailable. This is most likely a transient + * condition and may be corrected by retrying with a backoff. */ GRPCErrorCodeUnavailable = 14, @@ -158,17 +169,19 @@ typedef NS_ENUM(NSUInteger, GRPCErrorCode) { * Safety remark of a gRPC method as defined in RFC 2616 Section 9.1 */ typedef NS_ENUM(NSUInteger, GRPCCallSafety) { - /** Signal that there is no guarantees on how the call affects the server state. */ + /** Signal that there is no guarantees on how the call affects the server + state. */ GRPCCallSafetyDefault = 0, /** Signal that the call is idempotent. gRPC is free to use PUT verb. */ GRPCCallSafetyIdempotentRequest = 1, - /** Signal that the call is cacheable and will not affect server state. gRPC is free to use GET verb. */ + /** Signal that the call is cacheable and will not affect server state. gRPC + is free to use GET verb. */ GRPCCallSafetyCacheableRequest = 2, }; /** - * Keys used in |NSError|'s |userInfo| dictionary to store the response headers and trailers sent by - * the server. + * Keys used in |NSError|'s |userInfo| dictionary to store the response headers + * and trailers sent by the server. */ extern id const kGRPCHeadersKey; extern id const kGRPCTrailersKey; @@ -179,20 +192,24 @@ extern id const kGRPCTrailersKey; @interface GRPCCall : GRXWriter /** - * The container of the request headers of an RPC conforms to this protocol, which is a subset of - * NSMutableDictionary's interface. It will become a NSMutableDictionary later on. - * The keys of this container are the header names, which per the HTTP standard are case- - * insensitive. They are stored in lowercase (which is how HTTP/2 mandates them on the wire), and - * can only consist of ASCII characters. - * A header value is a NSString object (with only ASCII characters), unless the header name has the - * suffix "-bin", in which case the value has to be a NSData object. + * The container of the request headers of an RPC conforms to this protocol, + * which is a subset of NSMutableDictionary's interface. It will become a + * NSMutableDictionary later on. The keys of this container are the header + * names, which per the HTTP standard are case-insensitive. They are stored in + * lowercase (which is how HTTP/2 mandates them on the wire), and can only + * consist of ASCII characters. + * A header value is a NSString object (with only ASCII characters), unless the + * header name has the suffix "-bin", in which case the value has to be a NSData + * object. */ /** - * These HTTP headers will be passed to the server as part of this call. Each HTTP header is a - * name-value pair with string names and either string or binary values. + * These HTTP headers will be passed to the server as part of this call. Each + * HTTP header is a name-value pair with string names and either string or + * binary values. * - * The passed dictionary has to use NSString keys, corresponding to the header names. The value - * associated to each can be a NSString object or a NSData object. E.g.: + * The passed dictionary has to use NSString keys, corresponding to the header + * names. The value associated to each can be a NSString object or a NSData + * object. E.g.: * * call.requestHeaders = @{@"authorization": @"Bearer ..."}; * @@ -205,53 +222,61 @@ extern id const kGRPCTrailersKey; @property(atomic, readonly) NSMutableDictionary *requestHeaders; /** - * This dictionary is populated with the HTTP headers received from the server. This happens before - * any response message is received from the server. It has the same structure as the request - * headers dictionary: Keys are NSString header names; names ending with the suffix "-bin" have a - * NSData value; the others have a NSString value. + * This dictionary is populated with the HTTP headers received from the server. + * This happens before any response message is received from the server. It has + * the same structure as the request headers dictionary: Keys are NSString + * header names; names ending with the suffix "-bin" have a NSData value; the + * others have a NSString value. * - * The value of this property is nil until all response headers are received, and will change before - * any of -writeValue: or -writesFinishedWithError: are sent to the writeable. + * The value of this property is nil until all response headers are received, + * and will change before any of -writeValue: or -writesFinishedWithError: are + * sent to the writeable. */ @property(atomic, readonly) NSDictionary *responseHeaders; /** - * Same as responseHeaders, but populated with the HTTP trailers received from the server before the - * call finishes. + * Same as responseHeaders, but populated with the HTTP trailers received from + * the server before the call finishes. * - * The value of this property is nil until all response trailers are received, and will change - * before -writesFinishedWithError: is sent to the writeable. + * The value of this property is nil until all response trailers are received, + * and will change before -writesFinishedWithError: is sent to the writeable. */ @property(atomic, readonly) NSDictionary *responseTrailers; /** - * The request writer has to write NSData objects into the provided Writeable. The server will - * receive each of those separately and in order as distinct messages. - * A gRPC call might not complete until the request writer finishes. On the other hand, the request - * finishing doesn't necessarily make the call to finish, as the server might continue sending - * messages to the response side of the call indefinitely (depending on the semantics of the - * specific remote method called). + * The request writer has to write NSData objects into the provided Writeable. + * The server will receive each of those separately and in order as distinct + * messages. + * A gRPC call might not complete until the request writer finishes. On the + * other hand, the request finishing doesn't necessarily make the call to + * finish, as the server might continue sending messages to the response side of + * the call indefinitely (depending on the semantics of the specific remote + * method called). * To finish a call right away, invoke cancel. - * host parameter should not contain the scheme (http:// or https://), only the name or IP addr - * and the port number, for example @"localhost:5050". + * host parameter should not contain the scheme (http:// or https://), only the + * name or IP addr and the port number, for example @"localhost:5050". */ - (instancetype)initWithHost:(NSString *)host path:(NSString *)path - requestsWriter:(GRXWriter *)requestsWriter NS_DESIGNATED_INITIALIZER; + requestsWriter:(GRXWriter *)requestsWriter + NS_DESIGNATED_INITIALIZER; /** - * Finishes the request side of this call, notifies the server that the RPC should be cancelled, and - * finishes the response side of the call with an error of code CANCELED. + * Finishes the request side of this call, notifies the server that the RPC + * should be cancelled, and finishes the response side of the call with an error + * of code CANCELED. */ - (void)cancel; /** * Set the call flag for a specific host path. * - * Host parameter should not contain the scheme (http:// or https://), only the name or IP addr - * and the port number, for example @"localhost:5050". + * Host parameter should not contain the scheme (http:// or https://), only the + * name or IP addr and the port number, for example @"localhost:5050". */ -+ (void)setCallSafety:(GRPCCallSafety)callSafety host:(NSString *)host path:(NSString *)path; ++ (void)setCallSafety:(GRPCCallSafety)callSafety + host:(NSString *)host + path:(NSString *)path; // TODO(jcanizales): Let specify a deadline. As a category of GRXWriter? @end @@ -260,7 +285,7 @@ extern id const kGRPCTrailersKey; /** This protocol is kept for backwards compatibility with existing code. */ DEPRECATED_MSG_ATTRIBUTE("Use NSDictionary or NSMutableDictionary instead.") -@protocol GRPCRequestHeaders +@protocol GRPCRequestHeaders @property(nonatomic, readonly) NSUInteger count; - (id)objectForKeyedSubscript:(id)key; @@ -273,6 +298,6 @@ DEPRECATED_MSG_ATTRIBUTE("Use NSDictionary or NSMutableDictionary instead.") #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated" /** This is only needed for backwards-compatibility. */ -@interface NSMutableDictionary (GRPCRequestHeaders) +@interface NSMutableDictionary (GRPCRequestHeaders) @end #pragma clang diagnostic pop diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index d9778665656..470d4f4c761 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -33,9 +33,9 @@ #import "GRPCCall.h" +#import #include #include -#import #import "private/GRPCConnectivityMonitor.h" #import "private/GRPCHost.h" @@ -45,11 +45,11 @@ #import "private/NSDictionary+GRPC.h" #import "private/NSError+GRPC.h" -NSString * const kGRPCHeadersKey = @"io.grpc.HeadersKey"; -NSString * const kGRPCTrailersKey = @"io.grpc.TrailersKey"; +NSString *const kGRPCHeadersKey = @"io.grpc.HeadersKey"; +NSString *const kGRPCTrailersKey = @"io.grpc.TrailersKey"; static NSMutableDictionary *callFlags; -@interface GRPCCall () +@interface GRPCCall () // Make them read-write. @property(atomic, strong) NSDictionary *responseHeaders; @property(atomic, strong) NSDictionary *responseTrailers; @@ -85,17 +85,21 @@ static NSMutableDictionary *callFlags; // correct ordering. GRXConcurrentWriteable *_responseWriteable; - // The network thread wants the requestWriter to resume (when the server is ready for more input), - // or to stop (on errors), concurrently with user threads that want to start it, pause it or stop - // it. Because a writer isn't thread-safe, we'll synchronize those operations on it. - // We don't use a dispatch queue for that purpose, because the writer can call writeValue: or - // writesFinishedWithError: on this GRPCCall as part of those operations. We want to be able to - // pause the writer immediately on writeValue:, so we need our locking to be recursive. + // The network thread wants the requestWriter to resume (when the server is + // ready for more input), or to stop (on errors), concurrently with user + // threads that want to start it, pause it or stop it. Because a writer isn't + // thread-safe, we'll synchronize those operations on it. + // We don't use a dispatch queue for that purpose, because the writer can call + // writeValue: or writesFinishedWithError: on this GRPCCall as part of those + // operations. We want to be able to pause the writer immediately on + // writeValue:, so we need our locking to be recursive. GRXWriter *_requestWriter; // To create a retain cycle when a call is started, up until it finishes. See - // |startWithWriteable:| and |finishWithError:|. This saves users from having to retain a - // reference to the call object if all they're interested in is the handler being executed when + // |startWithWriteable:| and |finishWithError:|. This saves users from having + // to retain a + // reference to the call object if all they're interested in is the handler + // being executed when // the response arrives. GRPCCall *_retainSelf; @@ -104,13 +108,16 @@ static NSMutableDictionary *callFlags; @synthesize state = _state; -// TODO(jcanizales): If grpc_init is idempotent, this should be changed from load to initialize. +// TODO(jcanizales): If grpc_init is idempotent, this should be changed from +// load to initialize. + (void)load { grpc_init(); callFlags = [NSMutableDictionary dictionary]; } -+ (void)setCallSafety:(GRPCCallSafety)callSafety host:(NSString *)host path:(NSString *)path { ++ (void)setCallSafety:(GRPCCallSafety)callSafety + host:(NSString *)host + path:(NSString *)path { NSString *hostAndPath = [NSString stringWithFormat:@"%@/%@", host, path]; switch (callSafety) { case GRPCCallSafetyDefault: @@ -141,7 +148,8 @@ static NSMutableDictionary *callFlags; path:(NSString *)path requestsWriter:(GRXWriter *)requestWriter { if (!host || !path) { - [NSException raise:NSInvalidArgumentException format:@"Neither host nor path can be nil."]; + [NSException raise:NSInvalidArgumentException + format:@"Neither host nor path can be nil."]; } if (requestWriter.state != GRXWriterStateNotStarted) { [NSException raise:NSInvalidArgumentException @@ -191,7 +199,10 @@ static NSMutableDictionary *callFlags; - (void)cancel { [self finishWithError:[NSError errorWithDomain:kGRPCErrorDomain code:GRPCErrorCodeCancelled - userInfo:@{NSLocalizedDescriptionKey: @"Canceled by app"}]]; + userInfo:@{ + NSLocalizedDescriptionKey : + @"Canceled by app" + }]]; [self cancelCall]; } @@ -206,15 +217,18 @@ static NSMutableDictionary *callFlags; // Only called from the call queue. // The handler will be called from the network queue. -- (void)startReadWithHandler:(void(^)(grpc_byte_buffer *))handler { +- (void)startReadWithHandler:(void (^)(grpc_byte_buffer *))handler { // TODO(jcanizales): Add error handlers for async failures - [_wrappedCall startBatchWithOperations:@[[[GRPCOpRecvMessage alloc] initWithHandler:handler]]]; + [_wrappedCall startBatchWithOperations:@[ [[GRPCOpRecvMessage alloc] + initWithHandler:handler] ]]; } // Called initially from the network queue once response headers are received, -// then "recursively" from the responseWriteable queue after each response from the +// then "recursively" from the responseWriteable queue after each response from +// the // server has been written. -// If the call is currently paused, this is a noop. Restarting the call will invoke this +// If the call is currently paused, this is a noop. Restarting the call will +// invoke this // method. // TODO(jcanizales): Rename to readResponseIfNotPaused. - (void)startNextRead { @@ -237,15 +251,23 @@ static NSMutableDictionary *callFlags; // don't want to throw, because the app shouldn't crash for a behavior // that's on the hands of any server to have. Instead we finish and ask // the server to cancel. - [weakSelf finishWithError:[NSError errorWithDomain:kGRPCErrorDomain - code:GRPCErrorCodeResourceExhausted - userInfo:@{NSLocalizedDescriptionKey: @"Client does not have enough memory to hold the server response."}]]; + [weakSelf + finishWithError:[NSError + errorWithDomain:kGRPCErrorDomain + code:GRPCErrorCodeResourceExhausted + userInfo:@{ + NSLocalizedDescriptionKey : + @"Client does not have enough " + @"memory to hold the server " + @"response." + }]]; [weakSelf cancelCall]; return; } - [weakWriteable enqueueValue:data completionHandler:^{ - [weakSelf startNextRead]; - }]; + [weakWriteable enqueueValue:data + completionHandler:^{ + [weakSelf startNextRead]; + }]; }]; }); } @@ -254,19 +276,22 @@ static NSMutableDictionary *callFlags; - (void)sendHeaders:(NSDictionary *)headers { // TODO(jcanizales): Add error handlers for async failures - [_wrappedCall startBatchWithOperations:@[[[GRPCOpSendMetadata alloc] initWithMetadata:headers - flags:[GRPCCall callFlagsForHost:_host path:_path] - handler:nil]]]; + [_wrappedCall startBatchWithOperations:@[ + [[GRPCOpSendMetadata alloc] + initWithMetadata:headers + flags:[GRPCCall callFlagsForHost:_host path:_path] + handler:nil] + ]]; } #pragma mark GRXWriteable implementation // Only called from the call queue. The error handler will be called from the // network queue if the write didn't succeed. -- (void)writeMessage:(NSData *)message withErrorHandler:(void (^)())errorHandler { - +- (void)writeMessage:(NSData *)message + withErrorHandler:(void (^)())errorHandler { __weak GRPCCall *weakSelf = self; - void(^resumingHandler)(void) = ^{ + void (^resumingHandler)(void) = ^{ // Resume the request writer. GRPCCall *strongSelf = weakSelf; if (strongSelf) { @@ -275,8 +300,9 @@ static NSMutableDictionary *callFlags; } } }; - [_wrappedCall startBatchWithOperations:@[[[GRPCOpSendMessage alloc] initWithMessage:message - handler:resumingHandler]] + [_wrappedCall startBatchWithOperations:@[ [[GRPCOpSendMessage alloc] + initWithMessage:message + handler:resumingHandler] ] errorHandler:errorHandler]; } @@ -291,18 +317,20 @@ static NSMutableDictionary *callFlags; __weak GRPCCall *weakSelf = self; dispatch_async(_callQueue, ^{ - [weakSelf writeMessage:value withErrorHandler:^{ - [weakSelf finishWithError:[NSError errorWithDomain:kGRPCErrorDomain + [weakSelf writeMessage:value + withErrorHandler:^{ + [weakSelf + finishWithError:[NSError errorWithDomain:kGRPCErrorDomain code:GRPCErrorCodeInternal userInfo:nil]]; - }]; + }]; }); } // Only called from the call queue. The error handler will be called from the // network queue if the requests stream couldn't be closed successfully. - (void)finishRequestWithErrorHandler:(void (^)())errorHandler { - [_wrappedCall startBatchWithOperations:@[[[GRPCOpSendClose alloc] init]] + [_wrappedCall startBatchWithOperations:@[ [[GRPCOpSendClose alloc] init] ] errorHandler:errorHandler]; } @@ -323,17 +351,19 @@ static NSMutableDictionary *callFlags; #pragma mark Invoke -// Both handlers will eventually be called, from the network queue. Writes can start immediately -// after this. +// Both handlers will eventually be called, from the network queue. Writes can +// start immediately after this. // The first one (headersHandler), when the response headers are received. // The second one (completionHandler), whenever the RPC finishes for any reason. -- (void)invokeCallWithHeadersHandler:(void(^)(NSDictionary *))headersHandler - completionHandler:(void(^)(NSError *, NSDictionary *))completionHandler { +- (void)invokeCallWithHeadersHandler:(void (^)(NSDictionary *))headersHandler + completionHandler: + (void (^)(NSError *, NSDictionary *))completionHandler { // TODO(jcanizales): Add error handlers for async failures - [_wrappedCall startBatchWithOperations:@[[[GRPCOpRecvMetadata alloc] - initWithHandler:headersHandler]]]; - [_wrappedCall startBatchWithOperations:@[[[GRPCOpRecvStatus alloc] - initWithHandler:completionHandler]]]; + [_wrappedCall startBatchWithOperations:@[ [[GRPCOpRecvMetadata alloc] + initWithHandler:headersHandler] ]]; + [_wrappedCall + startBatchWithOperations:@[ [[GRPCOpRecvStatus alloc] + initWithHandler:completionHandler] ]]; } - (void)invokeCall { @@ -341,27 +371,31 @@ static NSMutableDictionary *callFlags; // Response headers received. self.responseHeaders = headers; [self startNextRead]; - } completionHandler:^(NSError *error, NSDictionary *trailers) { - self.responseTrailers = trailers; - - if (error) { - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - if (error.userInfo) { - [userInfo addEntriesFromDictionary:error.userInfo]; - } - userInfo[kGRPCTrailersKey] = self.responseTrailers; - // TODO(jcanizales): The C gRPC library doesn't guarantee that the headers block will be - // called before this one, so an error might end up with trailers but no headers. We - // shouldn't call finishWithError until ater both blocks are called. It is also when this is - // done that we can provide a merged view of response headers and trailers in a thread-safe - // way. - if (self.responseHeaders) { - userInfo[kGRPCHeadersKey] = self.responseHeaders; - } - error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo]; - } - [self finishWithError:error]; - }]; + } + completionHandler:^(NSError *error, NSDictionary *trailers) { + self.responseTrailers = trailers; + + if (error) { + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + if (error.userInfo) { + [userInfo addEntriesFromDictionary:error.userInfo]; + } + userInfo[kGRPCTrailersKey] = self.responseTrailers; + // TODO(jcanizales): The C gRPC library doesn't guarantee that the + // headers block will be called before this one, so an error might end + // up with trailers but no headers. We shouldn't call finishWithError + // until ater both blocks are called. It is also when this is done + // that we can provide a merged view of response headers and trailers + // in a thread-safe way. + if (self.responseHeaders) { + userInfo[kGRPCHeadersKey] = self.responseHeaders; + } + error = [NSError errorWithDomain:error.domain + code:error.code + userInfo:userInfo]; + } + [self finishWithError:error]; + }]; // Now that the RPC has been initiated, request writes can start. @synchronized(_requestWriter) { [_requestWriter startWithWriteable:self]; @@ -376,32 +410,37 @@ static NSMutableDictionary *callFlags; } // TODO(jcanizales): Extract this logic somewhere common. - NSString *host = [NSURL URLWithString:[@"https://" stringByAppendingString:_host]].host; + NSString *host = + [NSURL URLWithString:[@"https://" stringByAppendingString:_host]].host; if (!host) { // TODO(jcanizales): Check this on init. - [NSException raise:NSInvalidArgumentException format:@"host of %@ is nil", _host]; + [NSException raise:NSInvalidArgumentException + format:@"host of %@ is nil", _host]; } __weak typeof(self) weakSelf = self; - _connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:host]; + _connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:host]; void (^handler)() = ^{ typeof(self) strongSelf = weakSelf; if (strongSelf) { - [strongSelf finishWithError:[NSError errorWithDomain:kGRPCErrorDomain - code:GRPCErrorCodeUnavailable - userInfo:@{NSLocalizedDescriptionKey: @"Connectivity lost."}]]; + [strongSelf + finishWithError:[NSError errorWithDomain:kGRPCErrorDomain + code:GRPCErrorCodeUnavailable + userInfo:@{ + NSLocalizedDescriptionKey : + @"Connectivity lost." + }]]; } }; [_connectivityMonitor handleLossWithHandler:handler - wifiStatusChangeHandler:^{}]; + wifiStatusChangeHandler:^{ + }]; // Create a retain cycle so that this instance lives until the RPC finishes - // (or is cancelled). - // This makes RPCs in which the call isn't externally retained possible (as - // long as it is started - // before being autoreleased). + // (or is cancelled). This makes RPCs in which the call isn't externally + // retained possible (as long as it is started before being autoreleased). // Care is taken not to retain self strongly in any of the blocks used in this - // implementation, so - // that the life of the instance is determined by this retain cycle. + // implementation, so that the life of the instance is determined by this + // retain cycle. _retainSelf = self; _responseWriteable = @@ -417,7 +456,8 @@ static NSMutableDictionary *callFlags; - (void)setState:(GRXWriterState)newState { @synchronized(self) { // Manual transitions are only allowed from the started or paused states. - if (_state == GRXWriterStateNotStarted || _state == GRXWriterStateFinished) { + if (_state == GRXWriterStateNotStarted || + _state == GRXWriterStateFinished) { return; } diff --git a/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h b/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h index fe3b8f39d12..c0bbf22c747 100644 --- a/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h +++ b/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h @@ -34,18 +34,19 @@ #import #include -typedef void(^GRPCQueueCompletionHandler)(bool success); +typedef void (^GRPCQueueCompletionHandler)(bool success); /** - * This class lets one more easily use |grpc_completion_queue|. To use it, pass the value of the - * |unmanagedQueue| property of an instance of this class to |grpc_channel_create_call|. Then for - * every |grpc_call_*| method that accepts a tag, you can pass a block of type - * |GRPCQueueCompletionHandler| (remembering to cast it using |__bridge_retained|). The block is - * guaranteed to eventually be called, by a concurrent queue, and then released. Each such block is + * This class lets one more easily use |grpc_completion_queue|. To use it, pass + * the value of the |unmanagedQueue| property of an instance of this class to + * |grpc_channel_create_call|. Then for every |grpc_call_*| method that accepts + * a tag, you can pass a block of type |GRPCQueueCompletionHandler| (remembering + * to cast it using |__bridge_retained|). The block is guaranteed to eventually + * be called, by a concurrent queue, and then released. Each such block is * passed a |bool| that tells if the operation was successful. * - * Release the GRPCCompletionQueue object only after you are not going to pass any more blocks to - * the |grpc_call| that's using it. + * Release the GRPCCompletionQueue object only after you are not going to pass + * any more blocks to the |grpc_call| that's using it. */ @interface GRPCCompletionQueue : NSObject @property(nonatomic, readonly) grpc_completion_queue *unmanagedQueue; diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h index 383225fb724..941b596d2c8 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h @@ -61,20 +61,17 @@ /** * Queue on which callbacks will be dispatched. Default is the main queue. Set - * it before calling - * handleLossWithHandler:. + * it before calling handleLossWithHandler:. */ // TODO(jcanizales): Default to a serial background queue instead. @property(nonatomic, strong, null_resettable) dispatch_queue_t queue; /** * Calls handler every time the connectivity to this instance's host is lost. If - * this instance is - * released before that happens, the handler won't be called. + * this instance is released before that happens, the handler won't be called. * Only one handler is active at a time, so if this method is called again - * before the previous - * handler has been called, it might never be called at all (or yes, if it has - * already been queued). + * before the previous handler has been called, it might never be called at all + * (or yes, if it has already been queued). */ - (void)handleLossWithHandler:(nonnull void (^)())handler wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler; diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index b5c43075ee8..e829f84469d 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -67,11 +67,9 @@ - (BOOL)isHostReachable { // Note: connectionOnDemand means it'll be reachable only if using the - // CFSocketStream API or APIs - // on top of it. + // CFSocketStream API or APIs on top of it. // connectionRequired means we can't tell until a connection is attempted - // (e.g. for VPN on - // demand). + // (e.g. for VPN on demand). return self.reachable && !self.interventionRequired && !self.connectionOnDemand; } @@ -112,15 +110,13 @@ if (self.isCell) { #pragma mark Connectivity Monitor // Assumes the third argument is a block that accepts a GRPCReachabilityFlags -// object, and passes the -// received ones to it. +// object, and passes the received ones to it. static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info) { #pragma unused(target) // This can be called many times with the same info. The info is retained by - // SCNetworkReachability - // while this function is being executed. + // SCNetworkReachability while this function is being executed. void (^handler)(GRPCReachabilityFlags *) = (__bridge void (^)(GRPCReachabilityFlags *))info; handler([[GRPCReachabilityFlags alloc] initWithFlags:flags]); @@ -181,8 +177,7 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, - (void)startListeningWithHandler:(void (^)(GRPCReachabilityFlags *))handler { // Copy to ensure the handler block is in the heap (and so can't be - // deallocated when this method - // returns). + // deallocated when this method returns). void (^copiedHandler)(GRPCReachabilityFlags *) = [handler copy]; SCNetworkReachabilityContext context = { .version = 0, diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index 7031e01eb11..4737e451680 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -33,9 +33,9 @@ #import "GRPCHost.h" +#import #include #include -#import #ifdef GRPC_COMPILE_WITH_CRONET #import #import @@ -48,7 +48,8 @@ NS_ASSUME_NONNULL_BEGIN -// TODO(jcanizales): Generate the version in a standalone header, from templates. Like +// TODO(jcanizales): Generate the version in a standalone header, from +// templates. Like // templates/src/core/surface/version.c.template . #define GRPC_OBJC_VERSION_STRING @"1.0.0" @@ -56,7 +57,8 @@ static NSMutableDictionary *kHostCache; static GRPCConnectivityMonitor *connectivityMonitor = nil; @implementation GRPCHost { - // TODO(mlumish): Investigate whether caching channels with strong links is a good idea. + // TODO(mlumish): Investigate whether caching channels with strong links is a + // good idea. GRPCChannel *_channel; } @@ -76,11 +78,13 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; return nil; } - // To provide a default port, we try to interpret the address. If it's just a host name without - // scheme and without port, we'll use port 443. If it has a scheme, we pass it untouched to the C - // gRPC library. - // TODO(jcanizales): Add unit tests for the types of addresses we want to let pass untouched. - NSURL *hostURL = [NSURL URLWithString:[@"https://" stringByAppendingString:address]]; + // To provide a default port, we try to interpret the address. If it's just a + // host name without scheme and without port, we'll use port 443. If it has a + // scheme, we pass it untouched to the C gRPC library. + // TODO(jcanizales): Add unit tests for the types of addresses we want to let + // pass untouched. + NSURL *hostURL = + [NSURL URLWithString:[@"https://" stringByAppendingString:address]]; if (hostURL.host && !hostURL.port) { address = [hostURL.host stringByAppendingString:@":443"]; } @@ -126,7 +130,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; } + (void)resetAllHostSettings { - @synchronized (kHostCache) { + @synchronized(kHostCache) { kHostCache = [NSMutableDictionary dictionary]; } } @@ -152,16 +156,19 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; static NSError *kDefaultRootsError; static dispatch_once_t loading; dispatch_once(&loading, ^{ - NSString *defaultPath = @"gRPCCertificates.bundle/roots"; // .pem - // Do not use NSBundle.mainBundle, as it's nil for tests of library projects. + NSString *defaultPath = @"gRPCCertificates.bundle/roots"; // .pem + // Do not use NSBundle.mainBundle, as it's nil for tests of library + // projects. NSBundle *bundle = [NSBundle bundleForClass:self.class]; NSString *path = [bundle pathForResource:defaultPath ofType:@"pem"]; NSError *error; - // Files in PEM format can have non-ASCII characters in their comments (e.g. for the name of the - // issuer). Load them as UTF8 and produce an ASCII equivalent. - NSString *contentInUTF8 = [NSString stringWithContentsOfFile:path - encoding:NSUTF8StringEncoding - error:&error]; + // Files in PEM format can have non-ASCII characters in their comments (e.g. + // for the name of the issuer). Load them as UTF8 and produce an ASCII + // equivalent. + NSString *contentInUTF8 = + [NSString stringWithContentsOfFile:path + encoding:NSUTF8StringEncoding + error:&error]; if (contentInUTF8 == nil) { kDefaultRootsError = error; return; @@ -173,17 +180,21 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; NSData *rootsASCII; if (pemRootCerts != nil) { rootsASCII = [pemRootCerts dataUsingEncoding:NSASCIIStringEncoding - allowLossyConversion:YES]; + allowLossyConversion:YES]; } else { if (kDefaultRootsASCII == nil) { if (errorPtr) { *errorPtr = kDefaultRootsError; } - NSAssert(kDefaultRootsASCII, @"Could not read gRPCCertificates.bundle/roots.pem. This file, " - "with the root certificates, is needed to establish secure (TLS) connections. " - "Because the file is distributed with the gRPC library, this error is usually a sign " - "that the library wasn't configured correctly for your project. Error: %@", - kDefaultRootsError); + NSAssert(kDefaultRootsASCII, + @"Could not read gRPCCertificates.bundle/roots.pem. This file, " + "with the root certificates, is needed to establish secure " + "(TLS) connections. " + "Because the file is distributed with the gRPC library, this " + "error is usually a sign " + "that the library wasn't configured correctly for your " + "project. Error: %@", + kDefaultRootsError); return NO; } rootsASCII = kDefaultRootsASCII; @@ -194,10 +205,12 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; creds = grpc_ssl_credentials_create(rootsASCII.bytes, NULL, NULL); } else { grpc_ssl_pem_key_cert_pair key_cert_pair; - NSData *privateKeyASCII = [pemPrivateKey dataUsingEncoding:NSASCIIStringEncoding - allowLossyConversion:YES]; - NSData *certChainASCII = [pemCertChain dataUsingEncoding:NSASCIIStringEncoding - allowLossyConversion:YES]; + NSData *privateKeyASCII = + [pemPrivateKey dataUsingEncoding:NSASCIIStringEncoding + allowLossyConversion:YES]; + NSData *certChainASCII = + [pemCertChain dataUsingEncoding:NSASCIIStringEncoding + allowLossyConversion:YES]; key_cert_pair.private_key = privateKeyASCII.bytes; key_cert_pair.cert_chain = certChainASCII.bytes; creds = grpc_ssl_credentials_create(rootsASCII.bytes, &key_cert_pair, NULL); @@ -217,7 +230,8 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; NSMutableDictionary *args = [NSMutableDictionary dictionary]; // TODO(jcanizales): Add OS and device information (see - // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#user-agents ). + // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#user-agents + // ). NSString *userAgent = @"grpc-objc/" GRPC_OBJC_VERSION_STRING; if (_userAgentPrefix) { userAgent = [_userAgentPrefix stringByAppendingFormat:@" %@", userAgent]; @@ -231,7 +245,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; if (_responseSizeLimitOverride) { args[@GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH] = _responseSizeLimitOverride; } - // Use 10000ms initial backoff time for correct behavior on bad/slow networks + // Use 10000ms initial backoff time for correct behavior on bad/slow networks args[@GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS] = @10000; return args; } @@ -242,31 +256,35 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; BOOL useCronet = [GRPCCall isUsingCronet]; #endif if (_secure) { - GRPCChannel *channel; - @synchronized(self) { - if (_channelCreds == nil) { - [self setTLSPEMRootCerts:nil withPrivateKey:nil withCertChain:nil error:nil]; - } + GRPCChannel *channel; + @synchronized(self) { + if (_channelCreds == nil) { + [self setTLSPEMRootCerts:nil + withPrivateKey:nil + withCertChain:nil + error:nil]; + } #ifdef GRPC_COMPILE_WITH_CRONET - if (useCronet) { - channel = [GRPCChannel secureCronetChannelWithHost:_address - channelArgs:args]; - } else + if (useCronet) { + channel = + [GRPCChannel secureCronetChannelWithHost:_address channelArgs:args]; + } else #endif - { - channel = [GRPCChannel secureChannelWithHost:_address - credentials:_channelCreds - channelArgs:args]; - } + { + channel = [GRPCChannel secureChannelWithHost:_address + credentials:_channelCreds + channelArgs:args]; } - return channel; + } + return channel; } else { return [GRPCChannel insecureChannelWithHost:_address channelArgs:args]; } } - (NSString *)hostName { - // TODO(jcanizales): Default to nil instead of _address when Issue #2635 is clarified. + // TODO(jcanizales): Default to nil instead of _address when Issue #2635 is + // clarified. return _hostNameOverride ?: _address; } diff --git a/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m b/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m index c6a03c145ea..58c6032e804 100644 --- a/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m +++ b/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m @@ -38,9 +38,10 @@ #import "NSDictionary+GRPC.h" // Used by the setter. -static void CheckIsNonNilASCII(NSString *name, NSString* value) { +static void CheckIsNonNilASCII(NSString *name, NSString *value) { if (!value) { - [NSException raise:NSInvalidArgumentException format:@"%@ cannot be nil", name]; + [NSException raise:NSInvalidArgumentException + format:@"%@ cannot be nil", name]; } if (![value canBeConvertedToEncoding:NSASCIIStringEncoding]) { [NSException raise:NSInvalidArgumentException @@ -52,15 +53,20 @@ static void CheckIsNonNilASCII(NSString *name, NSString* value) { static void CheckKeyValuePairIsValid(NSString *key, id value) { if ([key hasSuffix:@"-bin"]) { if (![value isKindOfClass:NSData.class]) { - [NSException raise:NSInvalidArgumentException - format:@"Expected NSData value for header %@ ending in \"-bin\", " - @"instead got %@", key, value]; + [NSException + raise:NSInvalidArgumentException + format:@"Expected NSData value for header %@ ending in \"-bin\", " + @"instead got %@", + key, value]; } } else { if (![value isKindOfClass:NSString.class]) { - [NSException raise:NSInvalidArgumentException - format:@"Expected NSString value for header %@ not ending in \"-bin\", " - @"instead got %@", key, value]; + [NSException + raise:NSInvalidArgumentException + format: + @"Expected NSString value for header %@ not ending in \"-bin\", " + @"instead got %@", + key, value]; } CheckIsNonNilASCII(@"Text header value", (NSString *)value); } @@ -68,9 +74,10 @@ static void CheckKeyValuePairIsValid(NSString *key, id value) { @implementation GRPCRequestHeaders { __weak GRPCCall *_call; - // The NSMutableDictionary superclass doesn't hold any storage (so that people can implement their - // own in subclasses). As that's not the reason we're subclassing, we just delegate storage to the - // default NSMutableDictionary subclass returned by the cluster (e.g. __NSDictionaryM on iOS 9). + // The NSMutableDictionary superclass doesn't hold any storage (so that people + // can implement their own in subclasses). As that's not the reason we're + // subclassing, we just delegate storage to the default NSMutableDictionary + // subclass returned by the cluster (e.g. __NSDictionaryM on iOS 9). NSMutableDictionary *_delegate; } @@ -91,7 +98,8 @@ static void CheckKeyValuePairIsValid(NSString *key, id value) { } // Designated initializer -- (instancetype)initWithCall:(GRPCCall *)call storage:(NSMutableDictionary *)storage { +- (instancetype)initWithCall:(GRPCCall *)call + storage:(NSMutableDictionary *)storage { // TODO(jcanizales): Throw if call or storage are nil. if ((self = [super init])) { _call = call; @@ -100,9 +108,10 @@ static void CheckKeyValuePairIsValid(NSString *key, id value) { return self; } -- (instancetype)initWithObjects:(const id _Nonnull __unsafe_unretained *)objects - forKeys:(const id _Nonnull __unsafe_unretained *)keys - count:(NSUInteger)cnt { +- (instancetype) +initWithObjects:(const id _Nonnull __unsafe_unretained *)objects + forKeys:(const id _Nonnull __unsafe_unretained *)keys + count:(NSUInteger)cnt { return [self init]; } @@ -134,7 +143,7 @@ static void CheckKeyValuePairIsValid(NSString *key, id value) { return _delegate.count; } -- (NSEnumerator * _Nonnull)keyEnumerator { +- (NSEnumerator *_Nonnull)keyEnumerator { return [_delegate keyEnumerator]; } diff --git a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m index 627b6aa86dd..bbda9f2f647 100644 --- a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m +++ b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m @@ -34,27 +34,27 @@ #import "GRPCWrappedCall.h" #import -#include #include +#include #include #import "GRPCCompletionQueue.h" #import "GRPCHost.h" -#import "NSDictionary+GRPC.h" #import "NSData+GRPC.h" +#import "NSDictionary+GRPC.h" #import "NSError+GRPC.h" @implementation GRPCOperation { -@protected - // Most operation subclasses don't set any flags in the grpc_op, and rely on the flag member being - // initialized to zero. + @protected + // Most operation subclasses don't set any flags in the grpc_op, and rely on + // the flag member being initialized to zero. grpc_op _op; - void(^_handler)(); + void (^_handler)(); } - (void)finish { if (_handler) { - void(^handler)() = _handler; + void (^handler)() = _handler; _handler = nil; handler(); } @@ -101,7 +101,8 @@ - (instancetype)initWithMessage:(NSData *)message handler:(void (^)())handler { if (!message) { - [NSException raise:NSInvalidArgumentException format:@"message cannot be nil"]; + [NSException raise:NSInvalidArgumentException + format:@"message cannot be nil"]; } if (self = [super init]) { _op.op = GRPC_OP_SEND_MESSAGE; @@ -137,11 +138,11 @@ grpc_metadata_array _headers; } -- (instancetype) init { +- (instancetype)init { return [self initWithHandler:nil]; } -- (instancetype) initWithHandler:(void (^)(NSDictionary *))handler { +- (instancetype)initWithHandler:(void (^)(NSDictionary *))handler { if (self = [super init]) { _op.op = GRPC_OP_RECV_INITIAL_METADATA; grpc_metadata_array_init(&_headers); @@ -152,7 +153,7 @@ _handler = ^{ __strong typeof(self) strongSelf = weakSelf; NSDictionary *metadata = [NSDictionary - grpc_dictionaryFromMetadataArray:strongSelf->_headers]; + grpc_dictionaryFromMetadataArray:strongSelf->_headers]; handler(metadata); }; } @@ -166,7 +167,7 @@ @end -@implementation GRPCOpRecvMessage{ +@implementation GRPCOpRecvMessage { grpc_byte_buffer *_receivedMessage; } @@ -192,18 +193,18 @@ @end -@implementation GRPCOpRecvStatus{ +@implementation GRPCOpRecvStatus { grpc_status_code _statusCode; char *_details; size_t _detailsCapacity; grpc_metadata_array _trailers; } -- (instancetype) init { +- (instancetype)init { return [self initWithHandler:nil]; } -- (instancetype) initWithHandler:(void (^)(NSError *, NSDictionary *))handler { +- (instancetype)initWithHandler:(void (^)(NSError *, NSDictionary *))handler { if (self = [super init]) { _op.op = GRPC_OP_RECV_STATUS_ON_CLIENT; _op.data.recv_status_on_client.status = &_statusCode; @@ -216,10 +217,11 @@ __weak typeof(self) weakSelf = self; _handler = ^{ __strong typeof(self) strongSelf = weakSelf; - NSError *error = [NSError grpc_errorFromStatusCode:strongSelf->_statusCode - details:strongSelf->_details]; + NSError *error = + [NSError grpc_errorFromStatusCode:strongSelf->_statusCode + details:strongSelf->_details]; NSDictionary *trailers = [NSDictionary - grpc_dictionaryFromMetadataArray:strongSelf->_trailers]; + grpc_dictionaryFromMetadataArray:strongSelf->_trailers]; handler(error, trailers); }; } @@ -245,20 +247,21 @@ return [self initWithHost:nil path:nil]; } -- (instancetype)initWithHost:(NSString *)host - path:(NSString *)path { +- (instancetype)initWithHost:(NSString *)host path:(NSString *)path { if (!path || !host) { [NSException raise:NSInvalidArgumentException format:@"path and host cannot be nil."]; } if (self = [super init]) { - // Each completion queue consumes one thread. There's a trade to be made between creating and - // consuming too many threads and having contention of multiple calls in a single completion - // queue. Currently we use a singleton queue. + // Each completion queue consumes one thread. There's a trade to be made + // between creating and consuming too many threads and having contention of + // multiple calls in a single completion queue. Currently we use a singleton + // queue. _queue = [GRPCCompletionQueue completionQueue]; - _call = [[GRPCHost hostWithAddress:host] unmanagedCallWithPath:path completionQueue:_queue]; + _call = [[GRPCHost hostWithAddress:host] unmanagedCallWithPath:path + completionQueue:_queue]; if (_call == NULL) { return nil; } @@ -270,32 +273,35 @@ [self startBatchWithOperations:operations errorHandler:nil]; } -- (void)startBatchWithOperations:(NSArray *)operations errorHandler:(void (^)())errorHandler { +- (void)startBatchWithOperations:(NSArray *)operations + errorHandler:(void (^)())errorHandler { size_t nops = operations.count; grpc_op *ops_array = gpr_malloc(nops * sizeof(grpc_op)); size_t i = 0; for (GRPCOperation *operation in operations) { ops_array[i++] = operation.op; } - grpc_call_error error = grpc_call_start_batch(_call, ops_array, nops, - (__bridge_retained void *)(^(bool success){ - if (!success) { - if (errorHandler) { - errorHandler(); - } else { - return; - } - } - for (GRPCOperation *operation in operations) { - [operation finish]; - } - }), NULL); + grpc_call_error error = grpc_call_start_batch( + _call, ops_array, nops, (__bridge_retained void *)(^(bool success) { + if (!success) { + if (errorHandler) { + errorHandler(); + } else { + return; + } + } + for (GRPCOperation *operation in operations) { + [operation finish]; + } + }), + NULL); gpr_free(ops_array); if (error != GRPC_CALL_OK) { [NSException raise:NSInternalInconsistencyException - format:@"A precondition for calling grpc_call_start_batch wasn't met. Error %i", - error]; + format:@"A precondition for calling grpc_call_start_batch " + @"wasn't met. Error %i", + error]; } } diff --git a/src/objective-c/GRPCClient/private/NSError+GRPC.h b/src/objective-c/GRPCClient/private/NSError+GRPC.h index e0c1efc1f91..a9a321470c3 100644 --- a/src/objective-c/GRPCClient/private/NSError+GRPC.h +++ b/src/objective-c/GRPCClient/private/NSError+GRPC.h @@ -36,8 +36,9 @@ @interface NSError (GRPC) /** - * Returns nil if the status code is OK. Otherwise, a NSError whose code is one of |GRPCErrorCode| - * and whose domain is |kGRPCErrorDomain|. + * Returns nil if the status code is OK. Otherwise, a NSError whose code is one + * of |GRPCErrorCode| and whose domain is |kGRPCErrorDomain|. */ -+ (instancetype)grpc_errorFromStatusCode:(grpc_status_code)statusCode details:(char *)details; ++ (instancetype)grpc_errorFromStatusCode:(grpc_status_code)statusCode + details:(char *)details; @end From 7f7731025507cf9df3c44c05be24d65e86755a23 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Tue, 25 Oct 2016 13:53:15 -0700 Subject: [PATCH 216/286] Override clang-format indent --- .../private/GRPCConnectivityMonitor.m | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index e829f84469d..fec6391d399 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -77,20 +77,20 @@ - (NSString *)description { NSMutableArray *activeOptions = [NSMutableArray arrayWithCapacity:9]; -/* - * For each flag, add its name to the array if it's ON. Example: + /* + * For each flag, add its name to the array if it's ON. Example: -if (self.isCell) { - [activeOptions addObject:@"isCell"]; -} + if (self.isCell) { + [activeOptions addObject:@"isCell"]; + } - */ -#define GRPC_XMACRO_ITEM(methodName, FlagName) \ - if (self.methodName) { \ - [activeOptions addObject:@ #methodName]; \ - } -#include "GRPCReachabilityFlagNames.xmacro.h" -#undef GRPC_XMACRO_ITEM + */ + #define GRPC_XMACRO_ITEM(methodName, FlagName) \ + if (self.methodName) { \ + [activeOptions addObject:@ #methodName]; \ + } + #include "GRPCReachabilityFlagNames.xmacro.h" + #undef GRPC_XMACRO_ITEM return activeOptions.count == 0 ? @"(none)" From a83ee60b932a5cbb0a575f18036fc2a88bd7ed55 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 25 Oct 2016 11:54:52 -0700 Subject: [PATCH 217/286] New streaming scenario --- .../run_tests/performance/scenario_config.py | 9 ++++ tools/run_tests/tests.json | 42 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index e1c1bc65b6b..d0c28f28b15 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -229,6 +229,15 @@ class CXXLanguage: secure=secure, categories=smoketest_categories + [SCALABLE]) + yield _ping_pong_scenario( + 'cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_%s' % secstr, + rpc_type='STREAMING', + client_type='ASYNC_CLIENT', + server_type='SYNC_SERVER', + unconstrained_client='async', + secure=secure, + categories=smoketest_categories+[SCALABLE]) + for rpc_type in ['unary', 'streaming']: for synchronicity in ['sync', 'async']: yield _ping_pong_scenario( diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 938aa2edde2..4171dbc4786 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -33595,6 +33595,27 @@ "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_secure", + "timeout_seconds": 180 + }, { "args": [ "--scenarios_json", @@ -33847,6 +33868,27 @@ "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure", "timeout_seconds": 180 }, + { + "args": [ + "--scenarios_json", + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}" + ], + "boringssl": true, + "ci_platforms": [ + "linux" + ], + "cpu_cost": 8, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure", + "timeout_seconds": 180 + }, { "args": [ "--scenarios_json", From 447d0a22e67a6ce5e2fd99ca7bc8ce5a4f47e09a Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Tue, 25 Oct 2016 14:14:12 -0700 Subject: [PATCH 218/286] Advance versions of gRPC from v1.0.1-pre1 to v1.0.1 --- gRPC-Core.podspec | 2 +- gRPC-ProtoRPC.podspec | 2 +- gRPC-RxLibrary.podspec | 2 +- gRPC.podspec | 2 +- src/objective-c/!ProtoCompiler-gRPCPlugin.podspec | 6 ++---- templates/gRPC-Core.podspec.template | 2 +- 6 files changed, 7 insertions(+), 9 deletions(-) diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index e59404932cd..b81b2eacda9 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -35,7 +35,7 @@ Pod::Spec.new do |s| s.name = 'gRPC-Core' - version = '1.0.1-pre1' + version = '1.0.1' s.version = version s.summary = 'Core cross-platform gRPC library, written in C' s.homepage = 'http://www.grpc.io' diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec index 186a8665605..61d4b62d391 100644 --- a/gRPC-ProtoRPC.podspec +++ b/gRPC-ProtoRPC.podspec @@ -30,7 +30,7 @@ Pod::Spec.new do |s| s.name = 'gRPC-ProtoRPC' - version = '1.0.1-pre1' + version = '1.0.1' s.version = version s.summary = 'RPC library for Protocol Buffers, based on gRPC' s.homepage = 'http://www.grpc.io' diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec index 59ecb8232d8..d59385c039a 100644 --- a/gRPC-RxLibrary.podspec +++ b/gRPC-RxLibrary.podspec @@ -30,7 +30,7 @@ Pod::Spec.new do |s| s.name = 'gRPC-RxLibrary' - version = '1.0.1-pre1' + version = '1.0.1' s.version = version s.summary = 'Reactive Extensions library for iOS/OSX.' s.homepage = 'http://www.grpc.io' diff --git a/gRPC.podspec b/gRPC.podspec index a326d814018..76410b17d28 100644 --- a/gRPC.podspec +++ b/gRPC.podspec @@ -30,7 +30,7 @@ Pod::Spec.new do |s| s.name = 'gRPC' - version = '1.0.1-pre1' + version = '1.0.1' s.version = version s.summary = 'gRPC client library for iOS/OSX' s.homepage = 'http://www.grpc.io' diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec index 57f5cc91d18..6e594fd3edc 100644 --- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec +++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec @@ -36,7 +36,7 @@ Pod::Spec.new do |s| # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed # before them. s.name = '!ProtoCompiler-gRPCPlugin' - v = '1.0.1-pre1' + v = '1.0.1' s.version = v s.summary = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.' s.description = <<-DESC @@ -84,9 +84,7 @@ Pod::Spec.new do |s| repo = 'grpc/grpc' file = "grpc_objective_c_plugin-#{v}-macos-x86_64.zip" s.source = { - # TODO(mxyan): Reverse this change when v1.0.1 is released - # :http => "https://github.com/#{repo}/releases/download/v#{v}/#{file}", - :http => "https://github.com/grpc/grpc/releases/download/v1.0.0/grpc_objective_c_plugin-1.0.0-macos-x86_64.zip" + :http => "https://github.com/#{repo}/releases/download/v#{v}/#{file}", # TODO(jcanizales): Add sha1 or sha256 # :sha1 => '??', } diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template index 3c8e7edab87..f3bb7347b4e 100644 --- a/templates/gRPC-Core.podspec.template +++ b/templates/gRPC-Core.podspec.template @@ -62,7 +62,7 @@ %> Pod::Spec.new do |s| s.name = 'gRPC-Core' - version = '1.0.1-pre1' + version = '1.0.1' s.version = version s.summary = 'Core cross-platform gRPC library, written in C' s.homepage = 'http://www.grpc.io' From 59792a39b0faa065e29ff4bc0bf6bbb9e8a369fa Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 25 Oct 2016 14:15:38 -0700 Subject: [PATCH 219/286] Build Node artifacts and allow Node tests for Node 7 --- tools/run_tests/build_artifact_node.bat | 4 ++-- tools/run_tests/build_artifact_node.sh | 2 +- tools/run_tests/run_tests.py | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/run_tests/build_artifact_node.bat b/tools/run_tests/build_artifact_node.bat index c5bd726db7e..2e0ecd21d0f 100644 --- a/tools/run_tests/build_artifact_node.bat +++ b/tools/run_tests/build_artifact_node.bat @@ -27,7 +27,7 @@ @rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -set node_versions=0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 +set node_versions=0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 7.0.0 set PATH=%PATH%;C:\Program Files\nodejs\;%APPDATA%\npm @@ -52,4 +52,4 @@ if %errorlevel% neq 0 exit /b %errorlevel% goto :EOF :error -exit /b 1 \ No newline at end of file +exit /b 1 diff --git a/tools/run_tests/build_artifact_node.sh b/tools/run_tests/build_artifact_node.sh index 9d06472aa49..778a5c95d4a 100755 --- a/tools/run_tests/build_artifact_node.sh +++ b/tools/run_tests/build_artifact_node.sh @@ -42,7 +42,7 @@ mkdir -p artifacts npm update -node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 ) +node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 7.0.0 ) for version in ${node_versions[@]} do diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index c286d4d6236..55092377a98 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -297,7 +297,8 @@ class NodeLanguage(object): self.config = config self.args = args _check_compiler(self.args.compiler, ['default', 'node0.12', - 'node4', 'node5', 'node6']) + 'node4', 'node5', 'node6', + 'node7']) if self.args.compiler == 'default': self.node_version = '4' else: @@ -932,7 +933,7 @@ argp.add_argument('--compiler', 'clang3.4', 'clang3.5', 'clang3.6', 'clang3.7', 'vs2010', 'vs2013', 'vs2015', 'python2.7', 'python3.4', - 'node0.12', 'node4', 'node5', 'node6', + 'node0.12', 'node4', 'node5', 'node6', 'node7' 'coreclr'], default='default', help='Selects compiler to use. Allowed values depend on the platform and language.') From 7d897feea994e72913ab63eb824369461930ddb1 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 25 Oct 2016 12:54:55 -0700 Subject: [PATCH 220/286] Fix merge issue in udp_server.c --- src/core/lib/iomgr/udp_server.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c index a465c2815af..fd0c7a0f9dc 100644 --- a/src/core/lib/iomgr/udp_server.c +++ b/src/core/lib/iomgr/udp_server.c @@ -168,7 +168,7 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) { if (s->head) { grpc_udp_listener *sp; for (sp = s->head; sp; sp = sp->next) { - grpc_unlink_if_unix_domain_socket(&sp->addr.sockaddr); + grpc_unlink_if_unix_domain_socket(&sp->addr); sp->destroyed_closure.cb = destroyed_port; sp->destroyed_closure.cb_arg = s; @@ -363,8 +363,7 @@ int grpc_udp_server_add_port(grpc_udp_server *s, if (grpc_sockaddr_get_port(addr) == 0) { for (sp = s->head; sp; sp = sp->next) { sockname_temp.len = sizeof(struct sockaddr_storage); - if (0 == getsockname(sp->fd, - (struct sockaddr *)sockname_temp.addr, + if (0 == getsockname(sp->fd, (struct sockaddr *)sockname_temp.addr, (socklen_t *)&sockname_temp.len)) { port = grpc_sockaddr_get_port(&sockname_temp); if (port > 0) { From 1d424216fbe762405d1ba92aef98627fb3209f8b Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Tue, 25 Oct 2016 14:26:43 -0700 Subject: [PATCH 221/286] advance OBJC_VERSION_STRING in GRPCHost.m --- src/objective-c/GRPCClient/private/GRPCHost.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index b57c54b6cea..4e09b39da56 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -49,7 +49,7 @@ NS_ASSUME_NONNULL_BEGIN // TODO(jcanizales): Generate the version in a standalone header, from templates. Like // templates/src/core/surface/version.c.template . -#define GRPC_OBJC_VERSION_STRING @"1.0.0" +#define GRPC_OBJC_VERSION_STRING @"1.0.1" static NSMutableDictionary *kHostCache; From 14b701c11431d828b01ffb9aa39b7ad47659c904 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Tue, 25 Oct 2016 14:29:10 -0700 Subject: [PATCH 222/286] Use nullptr instead of NULL. Move test to grpc namespace so that when using gcc4.4, we use nullptr definition in grpc++/impl/codegen/config.h --- test/cpp/thread_manager/thread_manager_test.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/cpp/thread_manager/thread_manager_test.cc b/test/cpp/thread_manager/thread_manager_test.cc index 50c33f7162a..5c70103947d 100644 --- a/test/cpp/thread_manager/thread_manager_test.cc +++ b/test/cpp/thread_manager/thread_manager_test.cc @@ -42,6 +42,7 @@ #include "src/cpp/thread_manager/thread_manager.h" #include "test/cpp/util/test_config.h" +namespace grpc { class ThreadManagerTest GRPC_FINAL : public grpc::ThreadManager { public: ThreadManagerTest() @@ -91,7 +92,7 @@ grpc::ThreadManager::WorkStatus ThreadManagerTest::PollForWork(void **tag, // Simulate "polling for work" by sleeping for sometime SleepForMs(kPollingTimeoutMsec); - *tag = NULL; + *tag = nullptr; *ok = true; // Return timeout roughly 1 out of every 3 calls @@ -122,12 +123,13 @@ void ThreadManagerTest::PerformTest() { GPR_ASSERT(gpr_atm_no_barrier_load(&num_do_work_) == gpr_atm_no_barrier_load(&num_work_found_)); } +} // namespace grpc int main(int argc, char **argv) { std::srand(std::time(NULL)); grpc::testing::InitTest(&argc, &argv, true); - ThreadManagerTest test_rpc_manager; + grpc::ThreadManagerTest test_rpc_manager; test_rpc_manager.PerformTest(); return 0; From 4f6a19b292ee90ede7a074352d9c73640f73a450 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Tue, 25 Oct 2016 14:40:06 -0700 Subject: [PATCH 223/286] Create connectivityMonitor after call is set up --- src/objective-c/GRPCClient/GRPCCall.m | 48 +++++++++++++-------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index 470d4f4c761..85d141aa097 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -409,9 +409,26 @@ static NSMutableDictionary *callFlags; _state = GRXWriterStateStarted; } + // Create a retain cycle so that this instance lives until the RPC finishes + // (or is cancelled). This makes RPCs in which the call isn't externally + // retained possible (as long as it is started before being autoreleased). + // Care is taken not to retain self strongly in any of the blocks used in this + // implementation, so that the life of the instance is determined by this + // retain cycle. + _retainSelf = self; + + _responseWriteable = + [[GRXConcurrentWriteable alloc] initWithWriteable:writeable]; + + _wrappedCall = [[GRPCWrappedCall alloc] initWithHost:_host path:_path]; + NSAssert(_wrappedCall, @"Error allocating RPC objects. Low memory?"); + + [self sendHeaders:_requestHeaders]; + [self invokeCall]; + // TODO(jcanizales): Extract this logic somewhere common. NSString *host = - [NSURL URLWithString:[@"https://" stringByAppendingString:_host]].host; + [NSURL URLWithString:[@"https://" stringByAppendingString:_host]].host; if (!host) { // TODO(jcanizales): Check this on init. [NSException raise:NSInvalidArgumentException @@ -423,34 +440,17 @@ static NSMutableDictionary *callFlags; typeof(self) strongSelf = weakSelf; if (strongSelf) { [strongSelf - finishWithError:[NSError errorWithDomain:kGRPCErrorDomain - code:GRPCErrorCodeUnavailable - userInfo:@{ - NSLocalizedDescriptionKey : - @"Connectivity lost." - }]]; + finishWithError:[NSError errorWithDomain:kGRPCErrorDomain + code:GRPCErrorCodeUnavailable + userInfo:@{ + NSLocalizedDescriptionKey : + @"Connectivity lost." + }]]; } }; [_connectivityMonitor handleLossWithHandler:handler wifiStatusChangeHandler:^{ }]; - - // Create a retain cycle so that this instance lives until the RPC finishes - // (or is cancelled). This makes RPCs in which the call isn't externally - // retained possible (as long as it is started before being autoreleased). - // Care is taken not to retain self strongly in any of the blocks used in this - // implementation, so that the life of the instance is determined by this - // retain cycle. - _retainSelf = self; - - _responseWriteable = - [[GRXConcurrentWriteable alloc] initWithWriteable:writeable]; - - _wrappedCall = [[GRPCWrappedCall alloc] initWithHost:_host path:_path]; - NSAssert(_wrappedCall, @"Error allocating RPC objects. Low memory?"); - - [self sendHeaders:_requestHeaders]; - [self invokeCall]; } - (void)setState:(GRXWriterState)newState { From 6f5cfedfd56caddc1f1e99b9341c771d03f15b11 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Tue, 25 Oct 2016 15:04:41 -0700 Subject: [PATCH 224/286] Add comments for GRPCHost --- src/objective-c/GRPCClient/private/GRPCHost.m | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index 4737e451680..c41cb81ee17 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -54,6 +54,10 @@ NS_ASSUME_NONNULL_BEGIN #define GRPC_OBJC_VERSION_STRING @"1.0.0" static NSMutableDictionary *kHostCache; + +// This connectivity monitor flushes the host cache when connectivity status +// changes. Otherwise, a new call might still use the cached channel which is +// no longer available and will call gRPC to hang static GRPCConnectivityMonitor *connectivityMonitor = nil; @implementation GRPCHost { @@ -94,6 +98,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; dispatch_once(&cacheInitialization, ^{ kHostCache = [NSMutableDictionary dictionary]; }); + @synchronized(kHostCache) { GRPCHost *cachedHost = kHostCache[address]; if (cachedHost) { @@ -106,6 +111,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; kHostCache[address] = self; } // Keep a single monitor to flush the cache if the connectivity status changed + // Thread safety guarded by @synchronized(kHostCache) if (!connectivityMonitor) { connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:hostURL.host]; From e53707c481dea15ade9d02eeab6c23d18d5f8a04 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Tue, 25 Oct 2016 15:35:09 -0700 Subject: [PATCH 225/286] Update GRPCHost comments --- src/objective-c/GRPCClient/private/GRPCHost.m | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index c41cb81ee17..0524472f530 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -56,8 +56,9 @@ NS_ASSUME_NONNULL_BEGIN static NSMutableDictionary *kHostCache; // This connectivity monitor flushes the host cache when connectivity status -// changes. Otherwise, a new call might still use the cached channel which is -// no longer available and will call gRPC to hang +// changes or when connection switch between Wifi and Cellular data, so that a +// new call will use a new channel. Otherwise, a new call will still use the +// cached channel which is no longer available and will cause gRPC to hang. static GRPCConnectivityMonitor *connectivityMonitor = nil; @implementation GRPCHost { @@ -110,7 +111,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; _secure = YES; kHostCache[address] = self; } - // Keep a single monitor to flush the cache if the connectivity status changed + // Keep a single monitor to flush the cache if the connectivity status changes // Thread safety guarded by @synchronized(kHostCache) if (!connectivityMonitor) { connectivityMonitor = From 6b5d682c981f365d1f3c1bf771f113bd727d5ee0 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 25 Oct 2016 16:13:26 -0700 Subject: [PATCH 226/286] Review feedback --- .../chttp2/transport/chttp2_transport.c | 8 +- src/core/lib/iomgr/resource_quota.c | 117 +++--- src/core/lib/iomgr/resource_quota.h | 28 +- test/core/end2end/tests/buffer_pool_server.c | 353 ------------------ .../end2end/tests/resource_quota_server.c | 6 + test/core/iomgr/resource_quota_test.c | 162 ++++---- 6 files changed, 175 insertions(+), 499 deletions(-) delete mode 100644 test/core/end2end/tests/buffer_pool_server.c diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index a2668474be0..562f498d887 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -2108,7 +2108,7 @@ grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create( } /******************************************************************************* - * BUFFER POOLS + * RESOURCE QUOTAS */ static void post_benign_reclaimer(grpc_exec_ctx *exec_ctx, @@ -2152,6 +2152,8 @@ static void benign_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, grpc_chttp2_transport *t = arg; if (error == GRPC_ERROR_NONE && grpc_chttp2_stream_map_size(&t->stream_map) == 0) { + /* Channel with no active streams: send a goaway to try and make it + * disconnect cleanly */ if (grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, "HTTP2: %s - send goaway to free memory", t->peer_string); @@ -2188,6 +2190,10 @@ static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, GRPC_ERROR_INT_HTTP2_ERROR, GRPC_CHTTP2_ENHANCE_YOUR_CALM)); if (n > 1) { + /* Since we cancel one stream per destructive reclaimation, if + there are more streams left, we can immediately post a new + reclaimer in case the resource quota needs to free more + memory */ post_destructive_reclaimer(exec_ctx, t); } } diff --git a/src/core/lib/iomgr/resource_quota.c b/src/core/lib/iomgr/resource_quota.c index 54669734081..4f0d16ca7ee 100644 --- a/src/core/lib/iomgr/resource_quota.c +++ b/src/core/lib/iomgr/resource_quota.c @@ -49,6 +49,7 @@ struct grpc_resource_quota { gpr_refcount refs; /* Master combiner lock: all activity on a quota executes under this combiner + * (so no mutex is needed for this data structure) */ grpc_combiner *combiner; /* Size of the resource quota */ @@ -75,7 +76,7 @@ struct grpc_resource_quota { * list management */ -static void rulist_add_tail(grpc_resource_user *resource_user, +static void rulist_add_head(grpc_resource_user *resource_user, grpc_rulist list) { grpc_resource_quota *resource_quota = resource_user->resource_quota; grpc_resource_user **root = &resource_quota->roots[list]; @@ -91,7 +92,7 @@ static void rulist_add_tail(grpc_resource_user *resource_user, } } -static void rulist_add_head(grpc_resource_user *resource_user, +static void rulist_add_tail(grpc_resource_user *resource_user, grpc_rulist list) { grpc_resource_quota *resource_quota = resource_user->resource_quota; grpc_resource_user **root = &resource_quota->roots[list]; @@ -113,8 +114,8 @@ static bool rulist_empty(grpc_resource_quota *resource_quota, return resource_quota->roots[list] == NULL; } -static grpc_resource_user *rulist_pop(grpc_resource_quota *resource_quota, - grpc_rulist list) { +static grpc_resource_user *rulist_pop_tail(grpc_resource_quota *resource_quota, + grpc_rulist list) { grpc_resource_user **root = &resource_quota->roots[list]; grpc_resource_user *resource_user = *root; if (resource_user == NULL) { @@ -149,22 +150,22 @@ static void rulist_remove(grpc_resource_user *resource_user, grpc_rulist list) { } /******************************************************************************* - * buffer pool state machine + * resource quota state machine */ static bool rq_alloc(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota); -static bool rq_scavenge(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota); +static bool rq_reclaim_from_per_user_free_pool( + grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota); static bool rq_reclaim(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota, bool destructive); -static void rq_step(grpc_exec_ctx *exec_ctx, void *bp, grpc_error *error) { - grpc_resource_quota *resource_quota = bp; +static void rq_step(grpc_exec_ctx *exec_ctx, void *rq, grpc_error *error) { + grpc_resource_quota *resource_quota = rq; resource_quota->step_scheduled = false; do { if (rq_alloc(exec_ctx, resource_quota)) goto done; - } while (rq_scavenge(exec_ctx, resource_quota)); + } while (rq_reclaim_from_per_user_free_pool(exec_ctx, resource_quota)); rq_reclaim(exec_ctx, resource_quota, false) || rq_reclaim(exec_ctx, resource_quota, true); done: @@ -185,8 +186,8 @@ static void rq_step_sched(grpc_exec_ctx *exec_ctx, static bool rq_alloc(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota) { grpc_resource_user *resource_user; - while ((resource_user = - rulist_pop(resource_quota, GRPC_RULIST_AWAITING_ALLOCATION))) { + while ((resource_user = rulist_pop_tail(resource_quota, + GRPC_RULIST_AWAITING_ALLOCATION))) { gpr_mu_lock(&resource_user->mu); if (resource_user->free_pool < 0 && -resource_user->free_pool <= resource_quota->free_pool) { @@ -194,13 +195,13 @@ static bool rq_alloc(grpc_exec_ctx *exec_ctx, resource_user->free_pool = 0; resource_quota->free_pool -= amt; if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: grant alloc %" PRId64 + gpr_log(GPR_DEBUG, "RQ %s %s: grant alloc %" PRId64 " bytes; rq_free_pool -> %" PRId64, resource_quota->name, resource_user->name, amt, resource_quota->free_pool); } } else if (grpc_resource_quota_trace && resource_user->free_pool >= 0) { - gpr_log(GPR_DEBUG, "BP %s %s: discard already satisfied alloc request", + gpr_log(GPR_DEBUG, "RQ %s %s: discard already satisfied alloc request", resource_quota->name, resource_user->name); } if (resource_user->free_pool >= 0) { @@ -208,7 +209,7 @@ static bool rq_alloc(grpc_exec_ctx *exec_ctx, grpc_exec_ctx_enqueue_list(exec_ctx, &resource_user->on_allocated, NULL); gpr_mu_unlock(&resource_user->mu); } else { - rulist_add_head(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); + rulist_add_tail(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); gpr_mu_unlock(&resource_user->mu); return false; } @@ -217,18 +218,18 @@ static bool rq_alloc(grpc_exec_ctx *exec_ctx, } /* returns true if any memory could be reclaimed from buffers */ -static bool rq_scavenge(grpc_exec_ctx *exec_ctx, - grpc_resource_quota *resource_quota) { +static bool rq_reclaim_from_per_user_free_pool( + grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota) { grpc_resource_user *resource_user; - while ((resource_user = - rulist_pop(resource_quota, GRPC_RULIST_NON_EMPTY_FREE_POOL))) { + while ((resource_user = rulist_pop_tail(resource_quota, + GRPC_RULIST_NON_EMPTY_FREE_POOL))) { gpr_mu_lock(&resource_user->mu); if (resource_user->free_pool > 0) { int64_t amt = resource_user->free_pool; resource_user->free_pool = 0; resource_quota->free_pool += amt; if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: scavenge %" PRId64 + gpr_log(GPR_DEBUG, "RQ %s %s: reclaim_from_per_user_free_pool %" PRId64 " bytes; rq_free_pool -> %" PRId64, resource_quota->name, resource_user->name, amt, resource_quota->free_pool); @@ -248,10 +249,10 @@ static bool rq_reclaim(grpc_exec_ctx *exec_ctx, if (resource_quota->reclaiming) return true; grpc_rulist list = destructive ? GRPC_RULIST_RECLAIMER_DESTRUCTIVE : GRPC_RULIST_RECLAIMER_BENIGN; - grpc_resource_user *resource_user = rulist_pop(resource_quota, list); + grpc_resource_user *resource_user = rulist_pop_tail(resource_quota, list); if (resource_user == NULL) return false; if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: initiate %s reclamation", + gpr_log(GPR_DEBUG, "RQ %s %s: initiate %s reclamation", resource_quota->name, resource_user->name, destructive ? "destructive" : "benign"); } @@ -314,33 +315,34 @@ static gpr_slice ru_slice_create(grpc_resource_user *resource_user, } /******************************************************************************* - * grpc_resource_quota internal implementation + * grpc_resource_quota internal implementation: resource user manipulation under + * the combiner */ -static void ru_allocate(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { - grpc_resource_user *resource_user = bu; +static void ru_allocate(grpc_exec_ctx *exec_ctx, void *ru, grpc_error *error) { + grpc_resource_user *resource_user = ru; if (rulist_empty(resource_user->resource_quota, GRPC_RULIST_AWAITING_ALLOCATION)) { rq_step_sched(exec_ctx, resource_user->resource_quota); } - rulist_add_tail(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); + rulist_add_head(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); } -static void ru_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *bu, +static void ru_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *ru, grpc_error *error) { - grpc_resource_user *resource_user = bu; + grpc_resource_user *resource_user = ru; if (!rulist_empty(resource_user->resource_quota, GRPC_RULIST_AWAITING_ALLOCATION) && rulist_empty(resource_user->resource_quota, GRPC_RULIST_NON_EMPTY_FREE_POOL)) { rq_step_sched(exec_ctx, resource_user->resource_quota); } - rulist_add_tail(resource_user, GRPC_RULIST_NON_EMPTY_FREE_POOL); + rulist_add_head(resource_user, GRPC_RULIST_NON_EMPTY_FREE_POOL); } -static void ru_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, +static void ru_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *ru, grpc_error *error) { - grpc_resource_user *resource_user = bu; + grpc_resource_user *resource_user = ru; if (!rulist_empty(resource_user->resource_quota, GRPC_RULIST_AWAITING_ALLOCATION) && rulist_empty(resource_user->resource_quota, @@ -349,12 +351,12 @@ static void ru_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, GRPC_RULIST_RECLAIMER_BENIGN)) { rq_step_sched(exec_ctx, resource_user->resource_quota); } - rulist_add_tail(resource_user, GRPC_RULIST_RECLAIMER_BENIGN); + rulist_add_head(resource_user, GRPC_RULIST_RECLAIMER_BENIGN); } -static void ru_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, +static void ru_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *ru, grpc_error *error) { - grpc_resource_user *resource_user = bu; + grpc_resource_user *resource_user = ru; if (!rulist_empty(resource_user->resource_quota, GRPC_RULIST_AWAITING_ALLOCATION) && rulist_empty(resource_user->resource_quota, @@ -365,11 +367,11 @@ static void ru_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *bu, GRPC_RULIST_RECLAIMER_DESTRUCTIVE)) { rq_step_sched(exec_ctx, resource_user->resource_quota); } - rulist_add_tail(resource_user, GRPC_RULIST_RECLAIMER_DESTRUCTIVE); + rulist_add_head(resource_user, GRPC_RULIST_RECLAIMER_DESTRUCTIVE); } -static void ru_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { - grpc_resource_user *resource_user = bu; +static void ru_destroy(grpc_exec_ctx *exec_ctx, void *ru, grpc_error *error) { + grpc_resource_user *resource_user = ru; GPR_ASSERT(resource_user->allocated == 0); for (int i = 0; i < GRPC_RULIST_COUNT; i++) { rulist_remove(resource_user, (grpc_rulist)i); @@ -387,9 +389,9 @@ static void ru_destroy(grpc_exec_ctx *exec_ctx, void *bu, grpc_error *error) { } } -static void ru_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, +static void ru_allocated_slices(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { - grpc_resource_user_slice_allocator *slice_allocator = ts; + grpc_resource_user_slice_allocator *slice_allocator = arg; if (error == GRPC_ERROR_NONE) { for (size_t i = 0; i < slice_allocator->count; i++) { gpr_slice_buffer_add_indexed( @@ -400,6 +402,11 @@ static void ru_allocated_slices(grpc_exec_ctx *exec_ctx, void *ts, grpc_closure_run(exec_ctx, &slice_allocator->on_done, GRPC_ERROR_REF(error)); } +/******************************************************************************* + * grpc_resource_quota internal implementation: quota manipulation under the + * combiner + */ + typedef struct { int64_t size; grpc_resource_quota *resource_quota; @@ -411,20 +418,14 @@ static void rq_resize(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { int64_t delta = a->size - a->resource_quota->size; a->resource_quota->size += delta; a->resource_quota->free_pool += delta; - if (delta < 0 && a->resource_quota->free_pool < 0) { - rq_step_sched(exec_ctx, a->resource_quota); - } else if (delta > 0 && - !rulist_empty(a->resource_quota, - GRPC_RULIST_AWAITING_ALLOCATION)) { - rq_step_sched(exec_ctx, a->resource_quota); - } + rq_step_sched(exec_ctx, a->resource_quota); grpc_resource_quota_internal_unref(exec_ctx, a->resource_quota); gpr_free(a); } -static void rq_reclamation_done(grpc_exec_ctx *exec_ctx, void *bp, +static void rq_reclamation_done(grpc_exec_ctx *exec_ctx, void *rq, grpc_error *error) { - grpc_resource_quota *resource_quota = bp; + grpc_resource_quota *resource_quota = rq; resource_quota->reclaiming = false; rq_step_sched(exec_ctx, resource_quota); grpc_resource_quota_internal_unref(exec_ctx, resource_quota); @@ -434,6 +435,7 @@ static void rq_reclamation_done(grpc_exec_ctx *exec_ctx, void *bp, * grpc_resource_quota api */ +/* Public API */ grpc_resource_quota *grpc_resource_quota_create(const char *name) { grpc_resource_quota *resource_quota = gpr_malloc(sizeof(*resource_quota)); gpr_ref_init(&resource_quota->refs, 1); @@ -466,6 +468,7 @@ void grpc_resource_quota_internal_unref(grpc_exec_ctx *exec_ctx, } } +/* Public API */ void grpc_resource_quota_unref(grpc_resource_quota *resource_quota) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); @@ -478,10 +481,12 @@ grpc_resource_quota *grpc_resource_quota_internal_ref( return resource_quota; } +/* Public API */ void grpc_resource_quota_ref(grpc_resource_quota *resource_quota) { grpc_resource_quota_internal_ref(resource_quota); } +/* Public API */ void grpc_resource_quota_resize(grpc_resource_quota *resource_quota, size_t size) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -513,12 +518,12 @@ grpc_resource_quota *grpc_resource_quota_from_channel_args( return grpc_resource_quota_create(NULL); } -static void *rq_copy(void *bp) { - grpc_resource_quota_ref(bp); - return bp; +static void *rq_copy(void *rq) { + grpc_resource_quota_ref(rq); + return rq; } -static void rq_destroy(void *bp) { grpc_resource_quota_unref(bp); } +static void rq_destroy(void *rq) { grpc_resource_quota_unref(rq); } static int rq_cmp(void *a, void *b) { return GPR_ICMP(a, b); } @@ -604,7 +609,7 @@ void grpc_resource_user_alloc(grpc_exec_ctx *exec_ctx, if (on_done_destroy != NULL) { /* already shutdown */ if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: alloc %" PRIdPTR " after shutdown", + gpr_log(GPR_DEBUG, "RQ %s %s: alloc %" PRIdPTR " after shutdown", resource_user->resource_quota->name, resource_user->name, size); } grpc_exec_ctx_sched( @@ -616,7 +621,7 @@ void grpc_resource_user_alloc(grpc_exec_ctx *exec_ctx, resource_user->allocated += (int64_t)size; resource_user->free_pool -= (int64_t)size; if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: alloc %" PRIdPTR "; allocated -> %" PRId64 + gpr_log(GPR_DEBUG, "RQ %s %s: alloc %" PRIdPTR "; allocated -> %" PRId64 ", free_pool -> %" PRId64, resource_user->resource_quota->name, resource_user->name, size, resource_user->allocated, resource_user->free_pool); @@ -644,7 +649,7 @@ void grpc_resource_user_free(grpc_exec_ctx *exec_ctx, resource_user->free_pool += (int64_t)size; resource_user->allocated -= (int64_t)size; if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: free %" PRIdPTR "; allocated -> %" PRId64 + gpr_log(GPR_DEBUG, "RQ %s %s: free %" PRIdPTR "; allocated -> %" PRId64 ", free_pool -> %" PRId64, resource_user->resource_quota->name, resource_user->name, size, resource_user->allocated, resource_user->free_pool); @@ -685,7 +690,7 @@ void grpc_resource_user_post_reclaimer(grpc_exec_ctx *exec_ctx, void grpc_resource_user_finish_reclamation(grpc_exec_ctx *exec_ctx, grpc_resource_user *resource_user) { if (grpc_resource_quota_trace) { - gpr_log(GPR_DEBUG, "BP %s %s: reclamation complete", + gpr_log(GPR_DEBUG, "RQ %s %s: reclamation complete", resource_user->resource_quota->name, resource_user->name); } grpc_combiner_execute( diff --git a/src/core/lib/iomgr/resource_quota.h b/src/core/lib/iomgr/resource_quota.h index af94a199115..c15cb68310b 100644 --- a/src/core/lib/iomgr/resource_quota.h +++ b/src/core/lib/iomgr/resource_quota.h @@ -106,7 +106,7 @@ struct grpc_resource_user { /* The quota this resource user consumes from */ grpc_resource_quota *resource_quota; - /* Closure to schedule an allocation onder the resource quota combiner lock */ + /* Closure to schedule an allocation under the resource quota combiner lock */ grpc_closure allocate_closure; /* Closure to publish a non empty free pool under the resource quota combiner lock */ @@ -118,12 +118,13 @@ struct grpc_resource_user { #endif gpr_mu mu; - /* Total allocated memory outstanding by this resource user; + /* Total allocated memory outstanding by this resource user in bytes; always positive */ int64_t allocated; - /* The amount of memory this user has cached for its own use: to avoid quota - contention, each resource user can keep some memory aside from the quota, - and the quota can pull it back under memory pressure. + /* The amount of memory (in bytes) this user has cached for its own use: to + avoid quota contention, each resource user can keep some memory in + addition to what it is immediately using (e.g., for caching), and the quota + can pull it back under memory pressure. This value can become negative if more memory has been requested than existed in the free pool, at which point the quota is consulted to bring this value non-negative (asynchronously). */ @@ -148,7 +149,8 @@ struct grpc_resource_user { resource user */ grpc_closure destroy_closure; /* User supplied closure to call once the user has finished shutting down AND - all outstanding allocations have been freed */ + all outstanding allocations have been freed. Real type is grpc_closure*, + but it's stored as an atomic to avoid a mutex on some fast paths. */ gpr_atm on_done_destroy_closure; /* Links in the various grpc_rulist lists */ @@ -167,7 +169,7 @@ void grpc_resource_user_shutdown(grpc_exec_ctx *exec_ctx, void grpc_resource_user_destroy(grpc_exec_ctx *exec_ctx, grpc_resource_user *resource_user); -/* Allocate from the resource user (and it's quota). +/* Allocate from the resource user (and its quota). If optional_on_done is NULL, then allocate immediately. This may push the quota over-limit, at which point reclamation will kick in. If optional_on_done is non-NULL, it will be scheduled when the allocation has @@ -191,20 +193,28 @@ void grpc_resource_user_finish_reclamation(grpc_exec_ctx *exec_ctx, /* Helper to allocate slices from a resource user */ typedef struct grpc_resource_user_slice_allocator { + /* Closure for when a resource user allocation completes */ grpc_closure on_allocated; + /* Closure to call when slices have been allocated */ grpc_closure on_done; + /* Length of slices to allocate on the current request */ size_t length; + /* Number of slices to allocate on the current request */ size_t count; + /* Destination for slices to allocate on the current request */ gpr_slice_buffer *dest; + /* Parent resource user */ grpc_resource_user *resource_user; } grpc_resource_user_slice_allocator; -/* Initialize a slice allocator */ +/* Initialize a slice allocator. + When an allocation is completed, calls \a cb with arg \p. */ void grpc_resource_user_slice_allocator_init( grpc_resource_user_slice_allocator *slice_allocator, grpc_resource_user *resource_user, grpc_iomgr_cb_func cb, void *p); -/* Allocate \a count slices of length \a length into \a dest. */ +/* Allocate \a count slices of length \a length into \a dest. Only one request + can be outstanding at a time. */ void grpc_resource_user_alloc_slices( grpc_exec_ctx *exec_ctx, grpc_resource_user_slice_allocator *slice_allocator, size_t length, diff --git a/test/core/end2end/tests/buffer_pool_server.c b/test/core/end2end/tests/buffer_pool_server.c deleted file mode 100644 index beda4f7487a..00000000000 --- a/test/core/end2end/tests/buffer_pool_server.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * - * Copyright 2016, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include "test/core/end2end/end2end_tests.h" - -#include -#include - -#include -#include -#include -#include -#include -#include "test/core/end2end/cq_verifier.h" - -static void *tag(intptr_t t) { return (void *)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, "%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_time(int n) { - return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(n); -} - -static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } - -static void drain_cq(grpc_completion_queue *cq) { - grpc_event ev; - do { - ev = grpc_completion_queue_next(cq, five_seconds_time(), NULL); - } 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)); - GPR_ASSERT(grpc_completion_queue_pluck( - f->cq, tag(1000), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5), NULL) - .type == GRPC_OP_COMPLETE); - grpc_server_destroy(f->server); - f->server = NULL; -} - -static void shutdown_client(grpc_end2end_test_fixture *f) { - if (!f->client) return; - grpc_channel_destroy(f->client); - f->client = NULL; -} - -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); -} - -/* Creates and returns a gpr_slice containing random alphanumeric characters. */ -static gpr_slice generate_random_slice() { - size_t i; - static const char chars[] = "abcdefghijklmnopqrstuvwxyz1234567890"; - char output[1024 * 1024]; - for (i = 0; i < GPR_ARRAY_SIZE(output) - 1; ++i) { - output[i] = chars[rand() % (int)(sizeof(chars) - 1)]; - } - output[GPR_ARRAY_SIZE(output) - 1] = '\0'; - return gpr_slice_from_copied_string(output); -} - -void resource_quota_server(grpc_end2end_test_config config) { - grpc_resource_quota *resource_quota = - grpc_resource_quota_create("test_server"); - grpc_resource_quota_resize(resource_quota, 5 * 1024 * 1024); - -#define NUM_CALLS 100 -#define CLIENT_BASE_TAG 1000 -#define SERVER_START_BASE_TAG 2000 -#define SERVER_RECV_BASE_TAG 3000 -#define SERVER_END_BASE_TAG 4000 - - grpc_arg arg; - arg.key = GRPC_ARG_RESOURCE_QUOTA; - arg.type = GRPC_ARG_POINTER; - arg.value.pointer.p = resource_quota; - arg.value.pointer.vtable = grpc_resource_quota_arg_vtable(); - grpc_channel_args args = {1, &arg}; - - grpc_end2end_test_fixture f = - begin_test(config, "resource_quota_server", NULL, &args); - - /* Create large request and response bodies. These are big enough to require - * 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_call *client_calls[NUM_CALLS]; - grpc_call *server_calls[NUM_CALLS]; - grpc_metadata_array initial_metadata_recv[NUM_CALLS]; - grpc_metadata_array trailing_metadata_recv[NUM_CALLS]; - grpc_metadata_array request_metadata_recv[NUM_CALLS]; - grpc_call_details call_details[NUM_CALLS]; - grpc_status_code status[NUM_CALLS]; - char *details[NUM_CALLS]; - size_t details_capacity[NUM_CALLS]; - grpc_byte_buffer *request_payload_recv[NUM_CALLS]; - int was_cancelled[NUM_CALLS]; - grpc_call_error error; - int pending_client_calls = 0; - int pending_server_start_calls = 0; - int pending_server_recv_calls = 0; - 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); - - grpc_op ops[6]; - grpc_op *op; - - for (int i = 0; i < NUM_CALLS; i++) { - grpc_metadata_array_init(&initial_metadata_recv[i]); - grpc_metadata_array_init(&trailing_metadata_recv[i]); - grpc_metadata_array_init(&request_metadata_recv[i]); - grpc_call_details_init(&call_details[i]); - details[i] = NULL; - details_capacity[i] = 0; - request_payload_recv[i] = NULL; - was_cancelled[i] = 0; - } - - 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)); - GPR_ASSERT(GRPC_CALL_OK == error); - - pending_server_start_calls++; - } - - for (int i = 0; i < NUM_CALLS; i++) { - client_calls[i] = grpc_channel_create_call( - f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq, "/foo", - "foo.test.google.fr", n_seconds_time(60), NULL); - - 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_SEND_MESSAGE; - op->data.send_message = request_payload; - op->flags = 0; - op->reserved = NULL; - op++; - op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; - op->flags = 0; - op->reserved = NULL; - op++; - op->op = GRPC_OP_RECV_INITIAL_METADATA; - op->data.recv_initial_metadata = &initial_metadata_recv[i]; - op->flags = 0; - op->reserved = NULL; - op++; - op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; - op->data.recv_status_on_client.trailing_metadata = - &trailing_metadata_recv[i]; - op->data.recv_status_on_client.status = &status[i]; - op->data.recv_status_on_client.status_details = &details[i]; - op->data.recv_status_on_client.status_details_capacity = - &details_capacity[i]; - op->flags = 0; - op->reserved = NULL; - op++; - error = grpc_call_start_batch(client_calls[i], ops, (size_t)(op - ops), - tag(CLIENT_BASE_TAG + i), NULL); - GPR_ASSERT(GRPC_CALL_OK == error); - - pending_client_calls++; - } - - 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_ASSERT(ev.type == GRPC_OP_COMPLETE); - - int ev_tag = (int)(intptr_t)ev.tag; - if (ev_tag < CLIENT_BASE_TAG) { - abort(); /* illegal tag */ - } else if (ev_tag < SERVER_START_BASE_TAG) { - /* client call finished */ - int call_id = ev_tag - CLIENT_BASE_TAG; - GPR_ASSERT(call_id >= 0); - GPR_ASSERT(call_id < NUM_CALLS); - switch (status[call_id]) { - case GRPC_STATUS_RESOURCE_EXHAUSTED: - cancelled_calls_on_client++; - break; - case GRPC_STATUS_OK: - break; - default: - gpr_log(GPR_ERROR, "Unexpected status code: %d", status[call_id]); - abort(); - } - GPR_ASSERT(pending_client_calls > 0); - - grpc_metadata_array_destroy(&initial_metadata_recv[call_id]); - grpc_metadata_array_destroy(&trailing_metadata_recv[call_id]); - grpc_call_destroy(client_calls[call_id]); - gpr_free(details[call_id]); - - pending_client_calls--; - } else if (ev_tag < SERVER_RECV_BASE_TAG) { - /* new incoming call to the server */ - int call_id = ev_tag - SERVER_START_BASE_TAG; - 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); - - GPR_ASSERT(pending_server_start_calls > 0); - pending_server_start_calls--; - pending_server_recv_calls++; - - grpc_call_details_destroy(&call_details[call_id]); - grpc_metadata_array_destroy(&request_metadata_recv[call_id]); - } else if (ev_tag < SERVER_END_BASE_TAG) { - /* finished read on the server */ - int call_id = ev_tag - SERVER_RECV_BASE_TAG; - GPR_ASSERT(call_id >= 0); - GPR_ASSERT(call_id < NUM_CALLS); - - if (ev.success) { - if (request_payload_recv[call_id] != NULL) { - grpc_byte_buffer_destroy(request_payload_recv[call_id]); - request_payload_recv[call_id] = NULL; - } - } else { - GPR_ASSERT(request_payload_recv[call_id] == NULL); - } - - memset(ops, 0, sizeof(ops)); - op = ops; - op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; - op->data.recv_close_on_server.cancelled = &was_cancelled[call_id]; - op->flags = 0; - op->reserved = NULL; - 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 = "xyz"; - op->flags = 0; - op->reserved = NULL; - op++; - 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++; - } else { - int call_id = ev_tag - SERVER_END_BASE_TAG; - GPR_ASSERT(call_id >= 0); - GPR_ASSERT(call_id < NUM_CALLS); - - if (was_cancelled[call_id]) { - cancelled_calls_on_server++; - } - GPR_ASSERT(pending_server_end_calls > 0); - pending_server_end_calls--; - - grpc_call_destroy(server_calls[call_id]); - } - } - - gpr_log( - 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); - grpc_resource_quota_unref(resource_quota); - - end_test(&f); - config.tear_down_data(&f); -} - -void resource_quota_server_pre_init(void) {} diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c index a2431eed7e5..6170444373c 100644 --- a/test/core/end2end/tests/resource_quota_server.c +++ b/test/core/end2end/tests/resource_quota_server.c @@ -339,7 +339,13 @@ void resource_quota_server(grpc_end2end_test_config config) { "Done. %d total calls: %d cancelled at server, %d cancelled at client.", NUM_CALLS, cancelled_calls_on_server, cancelled_calls_on_client); + /* The server call may be cancelled after it's received it's status, but + * before the client does: this means that we should see strictly more + * failures on the client than on the server */ GPR_ASSERT(cancelled_calls_on_client >= cancelled_calls_on_server); + /* However, we shouldn't see radically more... 0.9 is a guessed bound on what + * we'd want that ratio to be... to at least trigger some investigation should + * that ratio become much higher. */ GPR_ASSERT(cancelled_calls_on_server >= 0.9 * cancelled_calls_on_client); grpc_byte_buffer_destroy(request_payload); diff --git a/test/core/iomgr/resource_quota_test.c b/test/core/iomgr/resource_quota_test.c index 0fb94a495d9..5e2f9f8359f 100644 --- a/test/core/iomgr/resource_quota_test.c +++ b/test/core/iomgr/resource_quota_test.c @@ -96,29 +96,29 @@ static void test_no_op(void) { static void test_resize_then_destroy(void) { gpr_log(GPR_INFO, "** test_resize_then_destroy **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_resize_then_destroy"); - grpc_resource_quota_resize(p, 1024 * 1024); - grpc_resource_quota_unref(p); + grpc_resource_quota_resize(q, 1024 * 1024); + grpc_resource_quota_unref(q); } static void test_resource_user_no_op(void) { gpr_log(GPR_INFO, "** test_resource_user_no_op **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_resource_user_no_op"); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); - grpc_resource_quota_unref(p); + grpc_resource_user_init(&usr, q, "usr"); + grpc_resource_quota_unref(q); destroy_user(&usr); } static void test_instant_alloc_then_free(void) { gpr_log(GPR_INFO, "** test_instant_alloc_then_free **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_instant_alloc_then_free"); - grpc_resource_quota_resize(p, 1024 * 1024); + grpc_resource_quota_resize(q, 1024 * 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_resource_user_alloc(&exec_ctx, &usr, 1024, NULL); @@ -129,34 +129,34 @@ static void test_instant_alloc_then_free(void) { grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr); } static void test_instant_alloc_free_pair(void) { gpr_log(GPR_INFO, "** test_instant_alloc_free_pair **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_instant_alloc_free_pair"); - grpc_resource_quota_resize(p, 1024 * 1024); + grpc_resource_quota_resize(q, 1024 * 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_resource_user_alloc(&exec_ctx, &usr, 1024, NULL); grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr); } static void test_simple_async_alloc(void) { gpr_log(GPR_INFO, "** test_simple_async_alloc **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_simple_async_alloc"); - grpc_resource_quota_resize(p, 1024 * 1024); + grpc_resource_quota_resize(q, 1024 * 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -169,17 +169,17 @@ static void test_simple_async_alloc(void) { grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr); } static void test_async_alloc_blocked_by_size(void) { gpr_log(GPR_INFO, "** test_async_alloc_blocked_by_size **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_async_alloc_blocked_by_size"); - grpc_resource_quota_resize(p, 1); + grpc_resource_quota_resize(q, 1); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); bool done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -187,25 +187,25 @@ static void test_async_alloc_blocked_by_size(void) { grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(!done); } - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); GPR_ASSERT(done); { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr); } static void test_scavenge(void) { gpr_log(GPR_INFO, "** test_scavenge **"); - grpc_resource_quota *p = grpc_resource_quota_create("test_scavenge"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota *q = grpc_resource_quota_create("test_scavenge"); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr1; grpc_resource_user usr2; - grpc_resource_user_init(&usr1, p, "usr1"); - grpc_resource_user_init(&usr2, p, "usr2"); + grpc_resource_user_init(&usr1, q, "usr1"); + grpc_resource_user_init(&usr2, q, "usr2"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -230,19 +230,19 @@ static void test_scavenge(void) { grpc_resource_user_free(&exec_ctx, &usr2, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr1); destroy_user(&usr2); } static void test_scavenge_blocked(void) { gpr_log(GPR_INFO, "** test_scavenge_blocked **"); - grpc_resource_quota *p = grpc_resource_quota_create("test_scavenge_blocked"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota *q = grpc_resource_quota_create("test_scavenge_blocked"); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr1; grpc_resource_user usr2; - grpc_resource_user_init(&usr1, p, "usr1"); - grpc_resource_user_init(&usr2, p, "usr2"); + grpc_resource_user_init(&usr1, q, "usr1"); + grpc_resource_user_init(&usr2, q, "usr2"); bool done; { done = false; @@ -269,18 +269,18 @@ static void test_scavenge_blocked(void) { grpc_resource_user_free(&exec_ctx, &usr2, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr1); destroy_user(&usr2); } static void test_blocked_until_scheduled_reclaim(void) { gpr_log(GPR_INFO, "** test_blocked_until_scheduled_reclaim **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_blocked_until_scheduled_reclaim"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -309,19 +309,19 @@ static void test_blocked_until_scheduled_reclaim(void) { grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr); } static void test_blocked_until_scheduled_reclaim_and_scavenge(void) { gpr_log(GPR_INFO, "** test_blocked_until_scheduled_reclaim_and_scavenge **"); - grpc_resource_quota *p = grpc_resource_quota_create( + grpc_resource_quota *q = grpc_resource_quota_create( "test_blocked_until_scheduled_reclaim_and_scavenge"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr1; grpc_resource_user usr2; - grpc_resource_user_init(&usr1, p, "usr1"); - grpc_resource_user_init(&usr2, p, "usr2"); + grpc_resource_user_init(&usr1, q, "usr1"); + grpc_resource_user_init(&usr2, q, "usr2"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -350,18 +350,18 @@ static void test_blocked_until_scheduled_reclaim_and_scavenge(void) { grpc_resource_user_free(&exec_ctx, &usr2, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr1); destroy_user(&usr2); } static void test_blocked_until_scheduled_destructive_reclaim(void) { gpr_log(GPR_INFO, "** test_blocked_until_scheduled_destructive_reclaim **"); - grpc_resource_quota *p = grpc_resource_quota_create( + grpc_resource_quota *q = grpc_resource_quota_create( "test_blocked_until_scheduled_destructive_reclaim"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); { bool done = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -390,17 +390,17 @@ static void test_blocked_until_scheduled_destructive_reclaim(void) { grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr); } static void test_unused_reclaim_is_cancelled(void) { gpr_log(GPR_INFO, "** test_unused_reclaim_is_cancelled **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_unused_reclaim_is_cancelled"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); bool benign_done = false; bool destructive_done = false; { @@ -414,7 +414,7 @@ static void test_unused_reclaim_is_cancelled(void) { GPR_ASSERT(!benign_done); GPR_ASSERT(!destructive_done); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr); GPR_ASSERT(benign_done); GPR_ASSERT(destructive_done); @@ -422,11 +422,11 @@ static void test_unused_reclaim_is_cancelled(void) { static void test_benign_reclaim_is_preferred(void) { gpr_log(GPR_INFO, "** test_benign_reclaim_is_preferred **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_benign_reclaim_is_preferred"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); bool benign_done = false; bool destructive_done = false; { @@ -462,7 +462,7 @@ static void test_benign_reclaim_is_preferred(void) { grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr); GPR_ASSERT(benign_done); GPR_ASSERT(destructive_done); @@ -470,11 +470,11 @@ static void test_benign_reclaim_is_preferred(void) { static void test_multiple_reclaims_can_be_triggered(void) { gpr_log(GPR_INFO, "** test_multiple_reclaims_can_be_triggered **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_multiple_reclaims_can_be_triggered"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); bool benign_done = false; bool destructive_done = false; { @@ -510,7 +510,7 @@ static void test_multiple_reclaims_can_be_triggered(void) { grpc_resource_user_free(&exec_ctx, &usr, 1024); grpc_exec_ctx_finish(&exec_ctx); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); destroy_user(&usr); GPR_ASSERT(benign_done); GPR_ASSERT(destructive_done); @@ -519,11 +519,11 @@ static void test_multiple_reclaims_can_be_triggered(void) { static void test_resource_user_stays_allocated_until_memory_released(void) { gpr_log(GPR_INFO, "** test_resource_user_stays_allocated_until_memory_released **"); - grpc_resource_quota *p = grpc_resource_quota_create( + grpc_resource_quota *q = grpc_resource_quota_create( "test_resource_user_stays_allocated_until_memory_released"); - grpc_resource_quota_resize(p, 1024 * 1024); + grpc_resource_quota_resize(q, 1024 * 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); bool done = false; { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -532,7 +532,7 @@ static void test_resource_user_stays_allocated_until_memory_released(void) { } { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); grpc_resource_user_shutdown(&exec_ctx, &usr, set_bool(&done)); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(!done); @@ -550,14 +550,16 @@ static void test_resource_user_stays_allocated_until_memory_released(void) { } } -static void test_pools_merged_on_resource_user_deletion(void) { +static void +test_resource_user_stays_allocated_and_reclaimers_unrun_until_memory_released( + void) { gpr_log(GPR_INFO, "** test_pools_merged_on_resource_user_deletion **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_pools_merged_on_resource_user_deletion"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); for (int i = 0; i < 10; i++) { grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); bool done = false; bool reclaimer_cancelled = false; { @@ -596,16 +598,16 @@ static void test_pools_merged_on_resource_user_deletion(void) { grpc_exec_ctx_finish(&exec_ctx); } } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); } static void test_reclaimers_can_be_posted_repeatedly(void) { gpr_log(GPR_INFO, "** test_reclaimers_can_be_posted_repeatedly **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_reclaimers_can_be_posted_repeatedly"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); { bool allocated = false; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -638,17 +640,17 @@ static void test_reclaimers_can_be_posted_repeatedly(void) { grpc_exec_ctx_finish(&exec_ctx); } destroy_user(&usr); - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); } static void test_one_slice(void) { gpr_log(GPR_INFO, "** test_one_slice **"); - grpc_resource_quota *p = grpc_resource_quota_create("test_one_slice"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota *q = grpc_resource_quota_create("test_one_slice"); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); grpc_resource_user_slice_allocator alloc; int num_allocs = 0; @@ -668,18 +670,18 @@ static void test_one_slice(void) { gpr_slice_buffer_destroy(&buffer); destroy_user(&usr); - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); } static void test_one_slice_deleted_late(void) { gpr_log(GPR_INFO, "** test_one_slice_deleted_late **"); - grpc_resource_quota *p = + grpc_resource_quota *q = grpc_resource_quota_create("test_one_slice_deleted_late"); - grpc_resource_quota_resize(p, 1024); + grpc_resource_quota_resize(q, 1024); grpc_resource_user usr; - grpc_resource_user_init(&usr, p, "usr"); + grpc_resource_user_init(&usr, q, "usr"); grpc_resource_user_slice_allocator alloc; int num_allocs = 0; @@ -705,7 +707,7 @@ static void test_one_slice_deleted_late(void) { GPR_ASSERT(!done); } - grpc_resource_quota_unref(p); + grpc_resource_quota_unref(q); gpr_slice_buffer_destroy(&buffer); GPR_ASSERT(done); { @@ -734,7 +736,7 @@ int main(int argc, char **argv) { test_benign_reclaim_is_preferred(); test_multiple_reclaims_can_be_triggered(); test_resource_user_stays_allocated_until_memory_released(); - test_pools_merged_on_resource_user_deletion(); + test_resource_user_stays_allocated_and_reclaimers_unrun_until_memory_released(); test_reclaimers_can_be_posted_repeatedly(); test_one_slice(); test_one_slice_deleted_late(); From 0d34499bed969d80251f6db60997f7089efec9c2 Mon Sep 17 00:00:00 2001 From: Noah Eisen Date: Tue, 25 Oct 2016 12:01:58 -0700 Subject: [PATCH 227/286] Remove status message check from node interop client The node interop client was checking that the status message for the test unimplemented_method was an empty string. This behavior is not guaranteed, and thus the check should be removed. --- src/node/interop/interop_client.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/node/interop/interop_client.js b/src/node/interop/interop_client.js index a59a66b2aa9..46ddecfb1f6 100644 --- a/src/node/interop/interop_client.js +++ b/src/node/interop/interop_client.js @@ -380,7 +380,6 @@ function unimplementedService(client, done) { client.unimplementedCall({}, function(err, resp) { assert(err); assert.strictEqual(err.code, grpc.status.UNIMPLEMENTED); - assert(!err.message); done(); }); } From 9785c8f9c43bddebb4e01162f2f0e702521b861c Mon Sep 17 00:00:00 2001 From: Noah Eisen Date: Tue, 25 Oct 2016 12:04:24 -0700 Subject: [PATCH 228/286] Implement the advanced interop tests for Python Add the code for three new interop tests: unimplemented_method, unimplemented_service, and custom_metadata. Fix and refactor the code for status_code_and_message. --- .../grpcio_tests/tests/interop/client.py | 5 +- .../grpcio_tests/tests/interop/methods.py | 188 +++++++++++++----- tools/run_tests/run_interop_tests.py | 4 +- 3 files changed, 145 insertions(+), 52 deletions(-) diff --git a/src/python/grpcio_tests/tests/interop/client.py b/src/python/grpcio_tests/tests/interop/client.py index 9d61d189759..4fbf58f7d93 100644 --- a/src/python/grpcio_tests/tests/interop/client.py +++ b/src/python/grpcio_tests/tests/interop/client.py @@ -106,7 +106,10 @@ def _stub(args): (('grpc.ssl_target_name_override', args.server_host_override,),)) else: channel = grpc.insecure_channel(target) - return test_pb2.TestServiceStub(channel) + if args.test_case == "unimplemented_service": + return test_pb2.UnimplementedServiceStub(channel) + else: + return test_pb2.TestServiceStub(channel) def _test_case_from_arg(test_case_arg): diff --git a/src/python/grpcio_tests/tests/interop/methods.py b/src/python/grpcio_tests/tests/interop/methods.py index 7edd75c56c9..52e56f35022 100644 --- a/src/python/grpcio_tests/tests/interop/methods.py +++ b/src/python/grpcio_tests/tests/interop/methods.py @@ -44,25 +44,43 @@ from src.proto.grpc.testing import empty_pb2 from src.proto.grpc.testing import messages_pb2 from src.proto.grpc.testing import test_pb2 +_INITIAL_METADATA_KEY = "x-grpc-test-echo-initial" +_TRAILING_METADATA_KEY = "x-grpc-test-echo-trailing-bin" + +def _maybe_echo_metadata(servicer_context): + """Copies metadata from request to response if it is present.""" + invocation_metadata = dict(servicer_context.invocation_metadata()) + if _INITIAL_METADATA_KEY in invocation_metadata: + initial_metadatum = ( + _INITIAL_METADATA_KEY, invocation_metadata[_INITIAL_METADATA_KEY]) + servicer_context.send_initial_metadata((initial_metadatum,)) + if _TRAILING_METADATA_KEY in invocation_metadata: + trailing_metadatum = ( + _TRAILING_METADATA_KEY, invocation_metadata[_TRAILING_METADATA_KEY]) + servicer_context.set_trailing_metadata((trailing_metadatum,)) + +def _maybe_echo_status_and_message(request, servicer_context): + """Sets the response context code and details if the request asks for them""" + if request.HasField('response_status'): + servicer_context.set_code(request.response_status.code) + servicer_context.set_details(request.response_status.message) class TestService(test_pb2.TestServiceServicer): def EmptyCall(self, request, context): + _maybe_echo_metadata(context) return empty_pb2.Empty() def UnaryCall(self, request, context): - if request.HasField('response_status'): - context.set_code(request.response_status.code) - context.set_details(request.response_status.message) + _maybe_echo_metadata(context) + _maybe_echo_status_and_message(request, context) return messages_pb2.SimpleResponse( payload=messages_pb2.Payload( type=messages_pb2.COMPRESSABLE, body=b'\x00' * request.response_size)) def StreamingOutputCall(self, request, context): - if request.HasField('response_status'): - context.set_code(request.response_status.code) - context.set_details(request.response_status.message) + _maybe_echo_status_and_message(request, context) for response_parameters in request.response_parameters: yield messages_pb2.StreamingOutputCallResponse( payload=messages_pb2.Payload( @@ -78,10 +96,9 @@ class TestService(test_pb2.TestServiceServicer): aggregated_payload_size=aggregate_size) def FullDuplexCall(self, request_iterator, context): + _maybe_echo_metadata(context) for request in request_iterator: - if request.HasField('response_status'): - context.set_code(request.response_status.code) - context.set_details(request.response_status.message) + _maybe_echo_status_and_message(request, context) for response_parameters in request.response_parameters: yield messages_pb2.StreamingOutputCallResponse( payload=messages_pb2.Payload( @@ -94,23 +111,46 @@ class TestService(test_pb2.TestServiceServicer): return self.FullDuplexCall(request_iterator, context) +def _expect_status_code(call, expected_code): + if call.code() != expected_code: + raise ValueError( + 'expected code %s, got %s' % (expected_code, call.code())) + + +def _expect_status_details(call, expected_details): + if call.details() != expected_details: + raise ValueError( + 'expected message %s, got %s' % (expected_details, call.details())) + + +def _validate_status_code_and_details(call, expected_code, expected_details): + _expect_status_code(call, expected_code) + _expect_status_details(call, expected_details) + + +def _validate_payload_type_and_length(response, expected_type, expected_length): + if response.payload.type is not expected_type: + raise ValueError( + 'expected payload type %s, got %s' % + (expected_type, type(response.payload.type))) + elif len(response.payload.body) != expected_length: + raise ValueError( + 'expected payload body size %d, got %d' % + (expected_length, len(response.payload.body))) + + def _large_unary_common_behavior( stub, fill_username, fill_oauth_scope, call_credentials): + size = 314159 request = messages_pb2.SimpleRequest( - response_type=messages_pb2.COMPRESSABLE, response_size=314159, + response_type=messages_pb2.COMPRESSABLE, response_size=size, payload=messages_pb2.Payload(body=b'\x00' * 271828), fill_username=fill_username, fill_oauth_scope=fill_oauth_scope) response_future = stub.UnaryCall.future( request, credentials=call_credentials) response = response_future.result() - if response.payload.type is not messages_pb2.COMPRESSABLE: - raise ValueError( - 'response payload type is "%s"!' % type(response.payload.type)) - elif len(response.payload.body) != 314159: - raise ValueError( - 'response body of incorrect size %d!' % len(response.payload.body)) - else: - return response + _validate_payload_type_and_length(response, messages_pb2.COMPRESSABLE, size) + return response def _empty_unary(stub): @@ -152,12 +192,9 @@ def _server_streaming(stub): ) response_iterator = stub.StreamingOutputCall(request) for index, response in enumerate(response_iterator): - if response.payload.type != messages_pb2.COMPRESSABLE: - raise ValueError( - 'response body of invalid type %s!' % response.payload.type) - elif len(response.payload.body) != sizes[index]: - raise ValueError( - 'response body of invalid size %d!' % len(response.payload.body)) + _validate_payload_type_and_length( + response, messages_pb2.COMPRESSABLE, sizes[index]) + def _cancel_after_begin(stub): sizes = (27182, 8, 1828, 45904,) @@ -224,12 +261,8 @@ def _ping_pong(stub): payload=messages_pb2.Payload(body=b'\x00' * payload_size)) pipe.add(request) response = next(response_iterator) - if response.payload.type != messages_pb2.COMPRESSABLE: - raise ValueError( - 'response body of invalid type %s!' % response.payload.type) - if len(response.payload.body) != response_size: - raise ValueError( - 'response body of invalid size %d!' % len(response.payload.body)) + _validate_payload_type_and_length( + response, messages_pb2.COMPRESSABLE, response_size) def _cancel_after_first_response(stub): @@ -291,36 +324,84 @@ def _empty_stream(stub): def _status_code_and_message(stub): - message = 'test status message' + details = 'test status message' code = 2 status = grpc.StatusCode.UNKNOWN # code = 2 + + # Test with a UnaryCall request = messages_pb2.SimpleRequest( response_type=messages_pb2.COMPRESSABLE, response_size=1, payload=messages_pb2.Payload(body=b'\x00'), - response_status=messages_pb2.EchoStatus(code=code, message=message) + response_status=messages_pb2.EchoStatus(code=code, message=details) ) response_future = stub.UnaryCall.future(request) - if response_future.code() != status: - raise ValueError( - 'expected code %s, got %s' % (status, response_future.code())) - elif response_future.details() != message: - raise ValueError( - 'expected message %s, got %s' % (message, response_future.details())) + _validate_status_code_and_details(response_future, status, details) - request = messages_pb2.StreamingOutputCallRequest( + # Test with a FullDuplexCall + with _Pipe() as pipe: + response_iterator = stub.FullDuplexCall(pipe) + request = messages_pb2.StreamingOutputCallRequest( + response_type=messages_pb2.COMPRESSABLE, + response_parameters=( + messages_pb2.ResponseParameters(size=1),), + payload=messages_pb2.Payload(body=b'\x00'), + response_status=messages_pb2.EchoStatus(code=code, message=details)) + pipe.add(request) # sends the initial request. + # Dropping out of with block closes the pipe + _validate_status_code_and_details(response_iterator, status, details) + + +def _unimplemented_method(test_service_stub): + response_future = ( + test_service_stub.UnimplementedCall.future(empty_pb2.Empty())) + _expect_status_code(response_future, grpc.StatusCode.UNIMPLEMENTED) + + +def _unimplemented_service(unimplemented_service_stub): + response_future = ( + unimplemented_service_stub.UnimplementedCall.future(empty_pb2.Empty())) + _expect_status_code(response_future, grpc.StatusCode.UNIMPLEMENTED) + + +def _custom_metadata(stub): + initial_metadata_value = "test_initial_metadata_value" + trailing_metadata_value = "\x0a\x0b\x0a\x0b\x0a\x0b" + metadata = ( + (_INITIAL_METADATA_KEY, initial_metadata_value), + (_TRAILING_METADATA_KEY, trailing_metadata_value)) + + def _validate_metadata(response): + initial_metadata = dict(response.initial_metadata()) + if initial_metadata[_INITIAL_METADATA_KEY] != initial_metadata_value: + raise ValueError( + 'expected initial metadata %s, got %s' % ( + initial_metadata_value, initial_metadata[_INITIAL_METADATA_KEY])) + trailing_metadata = dict(response.trailing_metadata()) + if trailing_metadata[_TRAILING_METADATA_KEY] != trailing_metadata_value: + raise ValueError( + 'expected trailing metadata %s, got %s' % ( + trailing_metadata_value, initial_metadata[_TRAILING_METADATA_KEY])) + + # Testing with UnaryCall + request = messages_pb2.SimpleRequest( response_type=messages_pb2.COMPRESSABLE, - response_parameters=( - messages_pb2.ResponseParameters(size=1),), - response_status=messages_pb2.EchoStatus(code=code, message=message)) - response_iterator = stub.StreamingOutputCall(request) - if response_future.code() != status: - raise ValueError( - 'expected code %s, got %s' % (status, response_iterator.code())) - elif response_future.details() != message: - raise ValueError( - 'expected message %s, got %s' % (message, response_iterator.details())) + response_size=1, + payload=messages_pb2.Payload(body=b'\x00')) + response_future = stub.UnaryCall.future(request, metadata=metadata) + _validate_metadata(response_future) + # Testing with FullDuplexCall + with _Pipe() as pipe: + response_iterator = stub.FullDuplexCall(pipe, metadata=metadata) + request = messages_pb2.StreamingOutputCallRequest( + response_type=messages_pb2.COMPRESSABLE, + response_parameters=( + messages_pb2.ResponseParameters(size=1),)) + pipe.add(request) # Sends the request + next(response_iterator) # Causes server to send trailing metadata + # Dropping out of the with block closes the pipe + _validate_metadata(response_iterator) def _compute_engine_creds(stub, args): response = _large_unary_common_behavior(stub, True, True, None) @@ -381,6 +462,9 @@ class TestCase(enum.Enum): CANCEL_AFTER_FIRST_RESPONSE = 'cancel_after_first_response' EMPTY_STREAM = 'empty_stream' STATUS_CODE_AND_MESSAGE = 'status_code_and_message' + UNIMPLEMENTED_METHOD = 'unimplemented_method' + UNIMPLEMENTED_SERVICE = 'unimplemented_service' + CUSTOM_METADATA = "custom_metadata" COMPUTE_ENGINE_CREDS = 'compute_engine_creds' OAUTH2_AUTH_TOKEN = 'oauth2_auth_token' JWT_TOKEN_CREDS = 'jwt_token_creds' @@ -408,6 +492,12 @@ class TestCase(enum.Enum): _empty_stream(stub) elif self is TestCase.STATUS_CODE_AND_MESSAGE: _status_code_and_message(stub) + elif self is TestCase.UNIMPLEMENTED_METHOD: + _unimplemented_method(stub) + elif self is TestCase.UNIMPLEMENTED_SERVICE: + _unimplemented_service(stub) + elif self is TestCase.CUSTOM_METADATA: + _custom_metadata(stub) elif self is TestCase.COMPUTE_ENGINE_CREDS: _compute_engine_creds(stub, args) elif self is TestCase.OAUTH2_AUTH_TOKEN: diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 29f65333983..0c6efda1f47 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -385,10 +385,10 @@ class PythonLanguage: 'PYTHONPATH': '{}/src/python/gens'.format(DOCKER_WORKDIR_ROOT)} def unimplemented_test_cases(self): - return _SKIP_ADVANCED + _SKIP_COMPRESSION + return _SKIP_COMPRESSION def unimplemented_test_cases_server(self): - return _SKIP_ADVANCED + _SKIP_COMPRESSION + return _SKIP_COMPRESSION def __str__(self): return 'python' From 2da4666bdd0a1da32521ef86c23b20c3b2608954 Mon Sep 17 00:00:00 2001 From: Masood Malekghassemi Date: Tue, 25 Oct 2016 15:57:48 -0700 Subject: [PATCH 229/286] Don't set up Python doc packages every time --- setup.py | 8 +++++++- tools/distrib/python/docgen.py | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 7a65698cbb4..cdd3bb3f0dd 100644 --- a/setup.py +++ b/setup.py @@ -79,6 +79,11 @@ BUILD_WITH_CYTHON = os.environ.get('GRPC_PYTHON_BUILD_WITH_CYTHON', False) ENABLE_CYTHON_TRACING = os.environ.get( 'GRPC_PYTHON_ENABLE_CYTHON_TRACING', False) +# Environment variable specifying whether or not there's interest in setting up +# documentation building. +ENABLE_DOCUMENTATION_BUILD = os.environ.get( + 'GRPC_PYTHON_ENABLE_DOCUMENTATION_BUILD', False) + # There are some situations (like on Windows) where CC, CFLAGS, and LDFLAGS are # entirely ignored/dropped/forgotten by distutils and its Cygwin/MinGW support. # We use these environment variables to thus get around that without locking @@ -210,7 +215,8 @@ SETUP_REQUIRES = INSTALL_REQUIRES + ( 'sphinx>=1.3', 'sphinx_rtd_theme>=0.1.8', 'six>=1.10', -) + ) if ENABLE_DOCUMENTATION_BUILD else () + if BUILD_WITH_CYTHON: sys.stderr.write( "You requested a Cython build via GRPC_PYTHON_BUILD_WITH_CYTHON, " diff --git a/tools/distrib/python/docgen.py b/tools/distrib/python/docgen.py index 15bd8d855f6..622317920d4 100755 --- a/tools/distrib/python/docgen.py +++ b/tools/distrib/python/docgen.py @@ -67,6 +67,7 @@ environment.update({ 'LDFLAGS': '-L{}'.format(LIBRARY_PATH), 'LD_LIBRARY_PATH': LIBRARY_PATH, 'GRPC_PYTHON_BUILD_WITH_CYTHON': '1', + 'GRPC_PYTHON_ENABLE_DOCUMENTATION_BUILD': '1', }) subprocess_arguments_list = [ From d148e8e6741f167aeff3294128e2476031363f8b Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Wed, 26 Oct 2016 15:28:35 +0200 Subject: [PATCH 230/286] Make ServerCallContext.Peer lazy --- src/csharp/Grpc.Core/Internal/ServerCallHandler.cs | 12 ++++++------ src/csharp/Grpc.Core/ServerCallContext.cs | 9 +++++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs b/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs index 1dbd4bbdc17..600811ddd62 100644 --- a/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs +++ b/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs @@ -76,7 +76,7 @@ namespace Grpc.Core.Internal Status status; Tuple responseTuple = null; - var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); + var context = HandlerUtils.NewContext(newRpc, responseStream, asyncCall.CancellationToken); try { GrpcPreconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false)); @@ -134,7 +134,7 @@ namespace Grpc.Core.Internal var responseStream = new ServerResponseStream(asyncCall); Status status; - var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); + var context = HandlerUtils.NewContext(newRpc, responseStream, asyncCall.CancellationToken); try { GrpcPreconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false)); @@ -193,7 +193,7 @@ namespace Grpc.Core.Internal Status status; Tuple responseTuple = null; - var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); + var context = HandlerUtils.NewContext(newRpc, responseStream, asyncCall.CancellationToken); try { var response = await handler(requestStream, context).ConfigureAwait(false); @@ -250,7 +250,7 @@ namespace Grpc.Core.Internal var responseStream = new ServerResponseStream(asyncCall); Status status; - var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); + var context = HandlerUtils.NewContext(newRpc, responseStream, asyncCall.CancellationToken); try { await handler(requestStream, responseStream, context).ConfigureAwait(false); @@ -324,13 +324,13 @@ namespace Grpc.Core.Internal return writeOptions != null ? writeOptions.Flags : default(WriteFlags); } - public static ServerCallContext NewContext(ServerRpcNew newRpc, string peer, ServerResponseStream serverResponseStream, CancellationToken cancellationToken) + public static ServerCallContext NewContext(ServerRpcNew newRpc, ServerResponseStream serverResponseStream, CancellationToken cancellationToken) where TRequest : class where TResponse : class { DateTime realtimeDeadline = newRpc.Deadline.ToClockType(ClockType.Realtime).ToDateTime(); - return new ServerCallContext(newRpc.Call, newRpc.Method, newRpc.Host, peer, realtimeDeadline, + return new ServerCallContext(newRpc.Call, newRpc.Method, newRpc.Host, realtimeDeadline, newRpc.RequestMetadata, cancellationToken, serverResponseStream.WriteResponseHeadersAsync, serverResponseStream); } } diff --git a/src/csharp/Grpc.Core/ServerCallContext.cs b/src/csharp/Grpc.Core/ServerCallContext.cs index 09a6b882a62..8f28fbc0453 100644 --- a/src/csharp/Grpc.Core/ServerCallContext.cs +++ b/src/csharp/Grpc.Core/ServerCallContext.cs @@ -48,7 +48,6 @@ namespace Grpc.Core private readonly CallSafeHandle callHandle; private readonly string method; private readonly string host; - private readonly string peer; private readonly DateTime deadline; private readonly Metadata requestHeaders; private readonly CancellationToken cancellationToken; @@ -58,13 +57,12 @@ namespace Grpc.Core private Func writeHeadersFunc; private IHasWriteOptions writeOptionsHolder; - internal ServerCallContext(CallSafeHandle callHandle, string method, string host, string peer, DateTime deadline, Metadata requestHeaders, CancellationToken cancellationToken, + internal ServerCallContext(CallSafeHandle callHandle, string method, string host, DateTime deadline, Metadata requestHeaders, CancellationToken cancellationToken, Func writeHeadersFunc, IHasWriteOptions writeOptionsHolder) { this.callHandle = callHandle; this.method = method; this.host = host; - this.peer = peer; this.deadline = deadline; this.requestHeaders = requestHeaders; this.cancellationToken = cancellationToken; @@ -115,7 +113,10 @@ namespace Grpc.Core { get { - return this.peer; + // Getting the peer lazily is fine as the native call is guaranteed + // not to be disposed before user-supplied server side handler returns. + // Most users won't need to read this field anyway. + return this.callHandle.GetPeer(); } } From 13339bf7ea5e0ac687dc290b3225effc9f99bfd5 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Wed, 26 Oct 2016 16:38:00 +0200 Subject: [PATCH 231/286] SafeHandleZeroIsInvalid cleanup --- .../Grpc.Core/Internal/SafeHandleZeroIsInvalid.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/csharp/Grpc.Core/Internal/SafeHandleZeroIsInvalid.cs b/src/csharp/Grpc.Core/Internal/SafeHandleZeroIsInvalid.cs index 230faacff63..a637a54f588 100644 --- a/src/csharp/Grpc.Core/Internal/SafeHandleZeroIsInvalid.cs +++ b/src/csharp/Grpc.Core/Internal/SafeHandleZeroIsInvalid.cs @@ -45,10 +45,6 @@ namespace Grpc.Core.Internal { } - public SafeHandleZeroIsInvalid(bool ownsHandle) : base(IntPtr.Zero, ownsHandle) - { - } - public override bool IsInvalid { get @@ -56,11 +52,5 @@ namespace Grpc.Core.Internal return handle == IntPtr.Zero; } } - - protected override bool ReleaseHandle() - { - // handle is not owned. - return true; - } } } From e5293c3f7b77c2ff7bef602e830e87794b12cdc2 Mon Sep 17 00:00:00 2001 From: Alex Polcyn Date: Sun, 31 Jul 2016 19:08:56 -0700 Subject: [PATCH 232/286] combine more core batch ops --- src/ruby/lib/grpc/generic/active_call.rb | 146 ++++++++++++++-------- src/ruby/lib/grpc/generic/client_stub.rb | 12 +- src/ruby/lib/grpc/generic/rpc_desc.rb | 43 +++++-- src/ruby/spec/generic/active_call_spec.rb | 22 ++-- src/ruby/spec/generic/client_stub_spec.rb | 123 ++++++++++++------ src/ruby/spec/generic/rpc_desc_spec.rb | 24 ++-- src/ruby/spec/generic/rpc_server_spec.rb | 1 + src/ruby/spec/pb/health/checker_spec.rb | 38 +++--- 8 files changed, 272 insertions(+), 137 deletions(-) diff --git a/src/ruby/lib/grpc/generic/active_call.rb b/src/ruby/lib/grpc/generic/active_call.rb index dfc2644c460..f5c426ebfc6 100644 --- a/src/ruby/lib/grpc/generic/active_call.rb +++ b/src/ruby/lib/grpc/generic/active_call.rb @@ -43,7 +43,8 @@ class Struct GRPC.logger.debug("Failing with status #{status}") # raise BadStatus, propagating the metadata if present. md = status.metadata - fail GRPC::BadStatus.new(status.code, status.details, md) + fail GRPC::BadStatus.new(status.code, status.details, md), + "status code: #{status.code}, details: #{status.details}" end status end @@ -156,41 +157,25 @@ module GRPC Operation.new(self) end - # writes_done indicates that all writes are completed. - # - # It blocks until the remote endpoint acknowledges with at status unless - # assert_finished is set to false. Any calls to #remote_send after this - # call will fail. - # - # @param assert_finished [true, false] when true(default), waits for - # FINISHED. - def writes_done(assert_finished = true) - ops = { - SEND_CLOSE_FROM_CLIENT => nil - } - ops[RECV_STATUS_ON_CLIENT] = nil if assert_finished - batch_result = @call.run_batch(ops) - return unless assert_finished - unless batch_result.status.nil? - @call.trailing_metadata = batch_result.status.metadata - end - @call.status = batch_result.status - op_is_done - batch_result.check_status - end - # finished waits until a client call is completed. # # It blocks until the remote endpoint acknowledges by sending a status. def finished batch_result = @call.run_batch(RECV_STATUS_ON_CLIENT => nil) - unless batch_result.status.nil? - @call.trailing_metadata = batch_result.status.metadata + attach_status_results_and_complete_call(batch_result) + end + + def attach_status_results_and_complete_call(recv_status_batch_result) + unless recv_status_batch_result.status.nil? + @call.trailing_metadata = recv_status_batch_result.status.metadata end - @call.status = batch_result.status - op_is_done - batch_result.check_status + @call.status = recv_status_batch_result.status @call.close + op_is_done + + # The RECV_STATUS in run_batch always succeeds + # Check the status for a bad status or failed run batch + recv_status_batch_result.check_status end # remote_send sends a request to the remote endpoint. @@ -226,6 +211,23 @@ module GRPC nil end + def server_unary_response(req, trailing_metadata: {}, + code: Core::StatusCodes::OK, details: 'OK') + ops = {} + @send_initial_md_mutex.synchronize do + ops[SEND_INITIAL_METADATA] = @metadata_to_send unless @metadata_sent + @metadata_sent = true + end + + payload = @marshal.call(req) + ops[SEND_MESSAGE] = payload + ops[SEND_STATUS_FROM_SERVER] = Struct::Status.new( + code, details, trailing_metadata) + ops[RECV_CLOSE_ON_SERVER] = nil + + @call.run_batch(ops) + end + # remote_read reads a response from the remote endpoint. # # It blocks until the remote endpoint replies with a message or status. @@ -240,9 +242,13 @@ module GRPC @call.metadata = batch_result.metadata @metadata_received = true end - unless batch_result.nil? || batch_result.message.nil? - res = @unmarshal.call(batch_result.message) - return res + get_message_from_batch_result(batch_result) + end + + def get_message_from_batch_result(recv_message_batch_result) + unless recv_message_batch_result.nil? || + recv_message_batch_result.message.nil? + return @unmarshal.call(recv_message_batch_result.message) end GRPC.logger.debug('found nil; the final response has been sent') nil @@ -298,7 +304,6 @@ module GRPC return enum_for(:each_remote_read_then_finish) unless block_given? loop do resp = remote_read - break if resp.is_a? Struct::Status # is an OK status if resp.nil? # the last response was received, but not finished yet finished break @@ -315,15 +320,25 @@ module GRPC # a list, multiple metadata for its key are sent # @return [Object] the response received from the server def request_response(req, metadata: {}) - merge_metadata_to_send(metadata) && send_initial_metadata - remote_send(req) - writes_done(false) - response = remote_read - finished unless response.is_a? Struct::Status - response - rescue GRPC::Core::CallError => e - finished # checks for Cancelled - raise e + ops = { + SEND_MESSAGE => @marshal.call(req), + SEND_CLOSE_FROM_CLIENT => nil, + RECV_INITIAL_METADATA => nil, + RECV_MESSAGE => nil, + RECV_STATUS_ON_CLIENT => nil + } + @send_initial_md_mutex.synchronize do + # Metadata might have already been sent if this is an operation view + unless @metadata_sent + ops[SEND_INITIAL_METADATA] = @metadata_to_send.merge!(metadata) + end + @metadata_sent = true + end + batch_result = @call.run_batch(ops) + + @call.metadata = batch_result.metadata + attach_status_results_and_complete_call(batch_result) + get_message_from_batch_result(batch_result) end # client_streamer sends a stream of requests to a GRPC server, and @@ -339,12 +354,20 @@ module GRPC # a list, multiple metadata for its key are sent # @return [Object] the response received from the server def client_streamer(requests, metadata: {}) - merge_metadata_to_send(metadata) && send_initial_metadata - requests.each { |r| remote_send(r) } - writes_done(false) - response = remote_read - finished unless response.is_a? Struct::Status - response + # Metadata might have already been sent if this is an operation view + merge_metadata_and_send_if_not_already_sent(metadata) + + requests.each { |r| @call.run_batch(SEND_MESSAGE => @marshal.call(r)) } + batch_result = @call.run_batch( + SEND_CLOSE_FROM_CLIENT => nil, + RECV_INITIAL_METADATA => nil, + RECV_MESSAGE => nil, + RECV_STATUS_ON_CLIENT => nil + ) + + @call.metadata = batch_result.metadata + attach_status_results_and_complete_call(batch_result) + get_message_from_batch_result(batch_result) rescue GRPC::Core::CallError => e finished # checks for Cancelled raise e @@ -365,9 +388,18 @@ module GRPC # a list, multiple metadata for its key are sent # @return [Enumerator|nil] a response Enumerator def server_streamer(req, metadata: {}) - merge_metadata_to_send(metadata) && send_initial_metadata - remote_send(req) - writes_done(false) + ops = { + SEND_MESSAGE => @marshal.call(req), + SEND_CLOSE_FROM_CLIENT => nil + } + @send_initial_md_mutex.synchronize do + # Metadata might have already been sent if this is an operation view + unless @metadata_sent + ops[SEND_INITIAL_METADATA] = @metadata_to_send.merge!(metadata) + end + @metadata_sent = true + end + @call.run_batch(ops) replies = enum_for(:each_remote_read_then_finish) return replies unless block_given? replies.each { |r| yield r } @@ -404,7 +436,8 @@ module GRPC # a list, multiple metadata for its key are sent # @return [Enumerator, nil] a response Enumerator def bidi_streamer(requests, metadata: {}, &blk) - merge_metadata_to_send(metadata) && send_initial_metadata + # Metadata might have already been sent if this is an operation view + merge_metadata_and_send_if_not_already_sent(metadata) bd = BidiCall.new(@call, @marshal, @unmarshal, @@ -457,6 +490,15 @@ module GRPC end end + def merge_metadata_and_send_if_not_already_sent(new_metadata = {}) + @send_initial_md_mutex.synchronize do + return if @metadata_sent + @metadata_to_send.merge!(new_metadata) + @call.run_batch(SEND_INITIAL_METADATA => @metadata_to_send) + @metadata_sent = true + end + end + private # Starts the call if not already started diff --git a/src/ruby/lib/grpc/generic/client_stub.rb b/src/ruby/lib/grpc/generic/client_stub.rb index 0d7c1f7805e..6934257cbc0 100644 --- a/src/ruby/lib/grpc/generic/client_stub.rb +++ b/src/ruby/lib/grpc/generic/client_stub.rb @@ -168,6 +168,7 @@ module GRPC # return the operation view of the active_call; define #execute as a # new method for this instance that invokes #request_response. + c.merge_metadata_to_send(metadata) op = c.operation op.define_singleton_method(:execute) do c.request_response(req, metadata: metadata) @@ -231,9 +232,10 @@ module GRPC # return the operation view of the active_call; define #execute as a # new method for this instance that invokes #client_streamer. + c.merge_metadata_to_send(metadata) op = c.operation op.define_singleton_method(:execute) do - c.client_streamer(requests, metadata: metadata) + c.client_streamer(requests) end op end @@ -309,9 +311,10 @@ module GRPC # return the operation view of the active_call; define #execute # as a new method for this instance that invokes #server_streamer + c.merge_metadata_to_send(metadata) op = c.operation op.define_singleton_method(:execute) do - c.server_streamer(req, metadata: metadata, &blk) + c.server_streamer(req, &blk) end op end @@ -417,15 +420,15 @@ module GRPC deadline: deadline, parent: parent, credentials: credentials) - return c.bidi_streamer(requests, metadata: metadata, &blk) unless return_op # return the operation view of the active_call; define #execute # as a new method for this instance that invokes #bidi_streamer + c.merge_metadata_to_send(metadata) op = c.operation op.define_singleton_method(:execute) do - c.bidi_streamer(requests, metadata: metadata, &blk) + c.bidi_streamer(requests, &blk) end op end @@ -445,7 +448,6 @@ module GRPC deadline: nil, parent: nil, credentials: nil) - deadline = from_relative_time(@timeout) if deadline.nil? # Provide each new client call with its own completion queue call = @ch.create_call(parent, # parent call diff --git a/src/ruby/lib/grpc/generic/rpc_desc.rb b/src/ruby/lib/grpc/generic/rpc_desc.rb index 584fe781698..cd17aed8e7c 100644 --- a/src/ruby/lib/grpc/generic/rpc_desc.rb +++ b/src/ruby/lib/grpc/generic/rpc_desc.rb @@ -62,25 +62,44 @@ module GRPC proc { |o| unmarshal_class.method(unmarshal_method).call(o) } end + def handle_request_response(active_call, mth) + req = active_call.remote_read + resp = mth.call(req, active_call.single_req_view) + active_call.server_unary_response( + resp, trailing_metadata: active_call.output_metadata) + end + + def handle_client_streamer(active_call, mth) + resp = mth.call(active_call.multi_req_view) + active_call.server_unary_response( + resp, trailing_metadata: active_call.output_metadata) + end + + def handle_server_streamer(active_call, mth) + req = active_call.remote_read + replys = mth.call(req, active_call.single_req_view) + replys.each { |r| active_call.remote_send(r) } + send_status(active_call, OK, 'OK', active_call.output_metadata) + end + + def handle_bidi_streamer(active_call, mth) + active_call.run_server_bidi(mth) + send_status(active_call, OK, 'OK', active_call.output_metadata) + end + def run_server_method(active_call, mth) # While a server method is running, it might be cancelled, its deadline # might be reached, the handler could throw an unknown error, or a # well-behaved handler could throw a StatusError. if request_response? - req = active_call.remote_read - resp = mth.call(req, active_call.single_req_view) - active_call.remote_send(resp) + handle_request_response(active_call, mth) elsif client_streamer? - resp = mth.call(active_call.multi_req_view) - active_call.remote_send(resp) + handle_client_streamer(active_call, mth) elsif server_streamer? - req = active_call.remote_read - replys = mth.call(req, active_call.single_req_view) - replys.each { |r| active_call.remote_send(r) } + handle_server_streamer(active_call, mth) else # is a bidi_stream - active_call.run_server_bidi(mth) + handle_bidi_streamer(active_call, mth) end - send_status(active_call, OK, 'OK', active_call.output_metadata) rescue BadStatus => e # this is raised by handlers that want GRPC to send an application error # code and detail message and some additional app-specific metadata. @@ -91,7 +110,7 @@ module GRPC # Log it, but don't notify the other endpoint.. GRPC.logger.warn("failed call: #{active_call}\n#{e}") rescue Core::OutOfTime - # This is raised when active_call#method.call exceeeds the deadline + # This is raised when active_call#method.call exceeds the deadline # event. Send a status of deadline exceeded GRPC.logger.warn("late call: #{active_call}") send_status(active_call, DEADLINE_EXCEEDED, 'late') @@ -100,7 +119,7 @@ module GRPC # Send back a UNKNOWN status to the client GRPC.logger.warn("failed handler: #{active_call}; sending status:UNKNOWN") GRPC.logger.warn(e) - send_status(active_call, UNKNOWN, 'no reason given') + send_status(active_call, UNKNOWN, 'unkown error handling call on server') end def assert_arity_matches(mth) diff --git a/src/ruby/spec/generic/active_call_spec.rb b/src/ruby/spec/generic/active_call_spec.rb index 5ae4f255374..aa51d9d7b17 100644 --- a/src/ruby/spec/generic/active_call_spec.rb +++ b/src/ruby/spec/generic/active_call_spec.rb @@ -402,7 +402,7 @@ describe GRPC::ActiveCall do @pass_through, deadline) msg = 'message is a string' client_call.remote_send(msg) - client_call.writes_done(false) + call.run_batch(CallOps::SEND_CLOSE_FROM_CLIENT => nil) server_call = expect_server_to_receive(msg) server_call.remote_send('server_response') server_call.send_status(OK, 'OK') @@ -460,7 +460,7 @@ describe GRPC::ActiveCall do msg = 'message is a string' reply = 'server_response' client_call.remote_send(msg) - client_call.writes_done(false) + call.run_batch(CallOps::SEND_CLOSE_FROM_CLIENT => nil) server_call = expect_server_to_receive(msg) e = client_call.each_remote_read n = 3 # arbitrary value > 1 @@ -473,7 +473,7 @@ describe GRPC::ActiveCall do end end - describe '#writes_done' do + describe '#closing the call from the client' do it 'finishes ok if the server sends a status response' do call = make_test_call ActiveCall.client_invoke(call) @@ -481,7 +481,9 @@ describe GRPC::ActiveCall do @pass_through, deadline) msg = 'message is a string' client_call.remote_send(msg) - expect { client_call.writes_done(false) }.to_not raise_error + expect do + call.run_batch(CallOps::SEND_CLOSE_FROM_CLIENT => nil) + end.to_not raise_error server_call = expect_server_to_receive(msg) server_call.remote_send('server_response') expect(client_call.remote_read).to eq('server_response') @@ -500,11 +502,13 @@ describe GRPC::ActiveCall do server_call.remote_send('server_response') server_call.send_status(OK, 'status code is OK') expect(client_call.remote_read).to eq('server_response') - expect { client_call.writes_done(false) }.to_not raise_error + expect do + call.run_batch(CallOps::SEND_CLOSE_FROM_CLIENT => nil) + end.to_not raise_error expect { client_call.finished }.to_not raise_error end - it 'finishes ok if writes_done is true' do + it 'finishes ok if SEND_CLOSE and RECV_STATUS has been sent' do call = make_test_call ActiveCall.client_invoke(call) client_call = ActiveCall.new(call, @pass_through, @@ -515,7 +519,11 @@ describe GRPC::ActiveCall do server_call.remote_send('server_response') server_call.send_status(OK, 'status code is OK') expect(client_call.remote_read).to eq('server_response') - expect { client_call.writes_done(true) }.to_not raise_error + expect do + call.run_batch( + CallOps::SEND_CLOSE_FROM_CLIENT => nil, + CallOps::RECV_STATUS_ON_CLIENT => nil) + end.to_not raise_error end end diff --git a/src/ruby/spec/generic/client_stub_spec.rb b/src/ruby/spec/generic/client_stub_spec.rb index 6034b5419c9..e68b8db7ab7 100644 --- a/src/ruby/spec/generic/client_stub_spec.rb +++ b/src/ruby/spec/generic/client_stub_spec.rb @@ -180,30 +180,44 @@ describe 'ClientStub' do end describe 'via a call operation' do - def get_response(stub) + def get_response(stub, run_start_call_first: false) op = stub.request_response(@method, @sent_msg, noop, noop, return_op: true, metadata: { k1: 'v1', k2: 'v2' }, deadline: from_relative_time(2)) expect(op).to be_a(GRPC::ActiveCall::Operation) - op.execute + op.start_call if run_start_call_first + result = op.execute + op.wait # make sure wait doesn't hang + result end it_behaves_like 'request response' - end - end - describe '#client_streamer' do - shared_examples 'client streaming' do - before(:each) do + it 'sends metadata to the server ok when running start_call first' do server_port = create_test_server host = "localhost:#{server_port}" - @stub = GRPC::ClientStub.new(host, :this_channel_is_insecure) - @metadata = { k1: 'v1', k2: 'v2' } - @sent_msgs = Array.new(3) { |i| 'msg_' + (i + 1).to_s } - @resp = 'a_reply' + th = run_request_response(@sent_msg, @resp, @pass, + k1: 'v1', k2: 'v2') + stub = GRPC::ClientStub.new(host, :this_channel_is_insecure) + expect(get_response(stub)).to eq(@resp) + th.join end + end + end + + describe '#client_streamer' do + before(:each) do + Thread.abort_on_exception = true + server_port = create_test_server + host = "localhost:#{server_port}" + @stub = GRPC::ClientStub.new(host, :this_channel_is_insecure) + @metadata = { k1: 'v1', k2: 'v2' } + @sent_msgs = Array.new(3) { |i| 'msg_' + (i + 1).to_s } + @resp = 'a_reply' + end + shared_examples 'client streaming' do it 'should send requests to/receive a reply from a server' do th = run_client_streamer(@sent_msgs, @resp, @pass) expect(get_response(@stub)).to eq(@resp) @@ -242,24 +256,33 @@ describe 'ClientStub' do end describe 'via a call operation' do - def get_response(stub) + def get_response(stub, run_start_call_first: false) op = stub.client_streamer(@method, @sent_msgs, noop, noop, return_op: true, metadata: @metadata) expect(op).to be_a(GRPC::ActiveCall::Operation) - op.execute + op.start_call if run_start_call_first + result = op.execute + op.wait # make sure wait doesn't hang + result end it_behaves_like 'client streaming' + + it 'sends metadata to the server ok when running start_call first' do + th = run_client_streamer(@sent_msgs, @resp, @pass, **@metadata) + expect(get_response(@stub, run_start_call_first: true)).to eq(@resp) + th.join + end end end describe '#server_streamer' do - shared_examples 'server streaming' do - before(:each) do - @sent_msg = 'a_msg' - @replys = Array.new(3) { |i| 'reply_' + (i + 1).to_s } - end + before(:each) do + @sent_msg = 'a_msg' + @replys = Array.new(3) { |i| 'reply_' + (i + 1).to_s } + end + shared_examples 'server streaming' do it 'should send a request to/receive replies from a server' do server_port = create_test_server host = "localhost:#{server_port}" @@ -303,29 +326,44 @@ describe 'ClientStub' do end describe 'via a call operation' do - def get_responses(stub) - op = stub.server_streamer(@method, @sent_msg, noop, noop, - return_op: true, - metadata: { k1: 'v1', k2: 'v2' }) - expect(op).to be_a(GRPC::ActiveCall::Operation) - e = op.execute + after(:each) do + @op.wait # make sure wait doesn't hang + end + def get_responses(stub, run_start_call_first: false) + @op = stub.server_streamer(@method, @sent_msg, noop, noop, + return_op: true, + metadata: { k1: 'v1', k2: 'v2' }) + expect(@op).to be_a(GRPC::ActiveCall::Operation) + @op.start_call if run_start_call_first + e = @op.execute expect(e).to be_a(Enumerator) e end it_behaves_like 'server streaming' + + it 'should send metadata to the server ok when start_call is run first' do + server_port = create_test_server + host = "localhost:#{server_port}" + th = run_server_streamer(@sent_msg, @replys, @fail, + k1: 'v1', k2: 'v2') + stub = GRPC::ClientStub.new(host, :this_channel_is_insecure) + e = get_responses(stub, run_start_call_first: true) + expect { e.collect { |r| r } }.to raise_error(GRPC::BadStatus) + th.join + end end end describe '#bidi_streamer' do - shared_examples 'bidi streaming' do - before(:each) do - @sent_msgs = Array.new(3) { |i| 'msg_' + (i + 1).to_s } - @replys = Array.new(3) { |i| 'reply_' + (i + 1).to_s } - server_port = create_test_server - @host = "localhost:#{server_port}" - end + before(:each) do + @sent_msgs = Array.new(3) { |i| 'msg_' + (i + 1).to_s } + @replys = Array.new(3) { |i| 'reply_' + (i + 1).to_s } + server_port = create_test_server + @host = "localhost:#{server_port}" + end + shared_examples 'bidi streaming' do it 'supports sending all the requests first', bidi: true do th = run_bidi_streamer_handle_inputs_first(@sent_msgs, @replys, @pass) @@ -363,16 +401,29 @@ describe 'ClientStub' do end describe 'via a call operation' do - def get_responses(stub) - op = stub.bidi_streamer(@method, @sent_msgs, noop, noop, - return_op: true) - expect(op).to be_a(GRPC::ActiveCall::Operation) - e = op.execute + after(:each) do + @op.wait # make sure wait doesn't hang + end + def get_responses(stub, run_start_call_first: false) + @op = stub.bidi_streamer(@method, @sent_msgs, noop, noop, + return_op: true) + expect(@op).to be_a(GRPC::ActiveCall::Operation) + @op.start_call if run_start_call_first + e = @op.execute expect(e).to be_a(Enumerator) e end it_behaves_like 'bidi streaming' + + it 'can run start_call before executing the call' do + th = run_bidi_streamer_handle_inputs_first(@sent_msgs, @replys, + @pass) + stub = GRPC::ClientStub.new(@host, :this_channel_is_insecure) + e = get_responses(stub, run_start_call_first: true) + expect(e.collect { |r| r }).to eq(@replys) + th.join + end end end diff --git a/src/ruby/spec/generic/rpc_desc_spec.rb b/src/ruby/spec/generic/rpc_desc_spec.rb index 1a895005bc3..a3f0efa6036 100644 --- a/src/ruby/spec/generic/rpc_desc_spec.rb +++ b/src/ruby/spec/generic/rpc_desc_spec.rb @@ -48,7 +48,7 @@ describe GRPC::RpcDesc do @bidi_streamer = RpcDesc.new('ss', Stream.new(Object.new), Stream.new(Object.new), 'encode', 'decode') @bs_code = INTERNAL - @no_reason = 'no reason given' + @no_reason = 'unkown error handling call on server' @ok_response = Object.new end @@ -83,6 +83,7 @@ describe GRPC::RpcDesc do before(:each) do @call = double('active_call') allow(@call).to receive(:single_req_view).and_return(@call) + allow(@call).to receive(:output_metadata).and_return(@call) end it_behaves_like 'it handles errors' @@ -90,10 +91,10 @@ describe GRPC::RpcDesc do it 'sends a response and closes the stream if there no errors' do req = Object.new expect(@call).to receive(:remote_read).once.and_return(req) - expect(@call).to receive(:remote_send).once.with(@ok_response) - expect(@call).to receive(:output_metadata).and_return(fake_md) - expect(@call).to receive(:send_status).once.with(OK, 'OK', true, - metadata: fake_md) + expect(@call).to receive(:output_metadata).once.and_return(fake_md) + expect(@call).to receive(:server_unary_response).once + .with(@ok_response, trailing_metadata: fake_md) + this_desc.run_server_method(@call, method(:fake_reqresp)) end end @@ -117,7 +118,9 @@ describe GRPC::RpcDesc do end it 'absorbs CallError with no further action' do - expect(@call).to receive(:remote_send).once.and_raise(CallError) + expect(@call).to receive(:server_unary_response).once.and_raise( + CallError) + allow(@call).to receive(:output_metadata).and_return({}) blk = proc do @client_streamer.run_server_method(@call, method(:fake_clstream)) end @@ -125,10 +128,11 @@ describe GRPC::RpcDesc do end it 'sends a response and closes the stream if there no errors' do - expect(@call).to receive(:remote_send).once.with(@ok_response) - expect(@call).to receive(:output_metadata).and_return(fake_md) - expect(@call).to receive(:send_status).once.with(OK, 'OK', true, - metadata: fake_md) + expect(@call).to receive(:output_metadata).and_return( + fake_md) + expect(@call).to receive(:server_unary_response).once + .with(@ok_response, trailing_metadata: fake_md) + @client_streamer.run_server_method(@call, method(:fake_clstream)) end end diff --git a/src/ruby/spec/generic/rpc_server_spec.rb b/src/ruby/spec/generic/rpc_server_spec.rb index d362e48deee..c5694790fdf 100644 --- a/src/ruby/spec/generic/rpc_server_spec.rb +++ b/src/ruby/spec/generic/rpc_server_spec.rb @@ -462,6 +462,7 @@ describe GRPC::RpcServer do 'connect_k1' => 'connect_v1' } wanted_md.each do |key, value| + puts "key: #{key}" expect(op.metadata[key]).to eq(value) end @srv.stop diff --git a/src/ruby/spec/pb/health/checker_spec.rb b/src/ruby/spec/pb/health/checker_spec.rb index 1b2fa968271..4711e09e88a 100644 --- a/src/ruby/spec/pb/health/checker_spec.rb +++ b/src/ruby/spec/pb/health/checker_spec.rb @@ -97,15 +97,17 @@ describe Grpc::Health::Checker do context 'initialization' do it 'can be constructed with no args' do - expect(subject).to_not be(nil) + checker = Grpc::Health::Checker.new + expect(checker).to_not be(nil) end end context 'method `add_status` and `check`' do success_tests.each do |t| it "should succeed when #{t[:desc]}" do - subject.add_status(t[:service], ServingStatus::NOT_SERVING) - got = subject.check(HCReq.new(service: t[:service]), nil) + checker = Grpc::Health::Checker.new + checker.add_status(t[:service], ServingStatus::NOT_SERVING) + got = checker.check(HCReq.new(service: t[:service]), nil) want = HCResp.new(status: ServingStatus::NOT_SERVING) expect(got).to eq(want) end @@ -115,8 +117,9 @@ describe Grpc::Health::Checker do context 'method `check`' do success_tests.each do |t| it "should fail with NOT_FOUND when #{t[:desc]}" do + checker = Grpc::Health::Checker.new blk = proc do - subject.check(HCReq.new(service: t[:service]), nil) + checker.check(HCReq.new(service: t[:service]), nil) end expected_msg = /#{StatusCodes::NOT_FOUND}/ expect(&blk).to raise_error GRPC::BadStatus, expected_msg @@ -127,14 +130,15 @@ describe Grpc::Health::Checker do context 'method `clear_status`' do success_tests.each do |t| it "should fail after clearing status when #{t[:desc]}" do - subject.add_status(t[:service], ServingStatus::NOT_SERVING) - got = subject.check(HCReq.new(service: t[:service]), nil) + checker = Grpc::Health::Checker.new + checker.add_status(t[:service], ServingStatus::NOT_SERVING) + got = checker.check(HCReq.new(service: t[:service]), nil) want = HCResp.new(status: ServingStatus::NOT_SERVING) expect(got).to eq(want) - subject.clear_status(t[:service]) + checker.clear_status(t[:service]) blk = proc do - subject.check(HCReq.new(service: t[:service]), nil) + checker.check(HCReq.new(service: t[:service]), nil) end expected_msg = /#{StatusCodes::NOT_FOUND}/ expect(&blk).to raise_error GRPC::BadStatus, expected_msg @@ -144,18 +148,19 @@ describe Grpc::Health::Checker do context 'method `clear_all`' do it 'should return NOT_FOUND after being invoked' do + checker = Grpc::Health::Checker.new success_tests.each do |t| - subject.add_status(t[:service], ServingStatus::NOT_SERVING) - got = subject.check(HCReq.new(service: t[:service]), nil) + checker.add_status(t[:service], ServingStatus::NOT_SERVING) + got = checker.check(HCReq.new(service: t[:service]), nil) want = HCResp.new(status: ServingStatus::NOT_SERVING) expect(got).to eq(want) end - subject.clear_all + checker.clear_all success_tests.each do |t| blk = proc do - subject.check(HCReq.new(service: t[:service]), nil) + checker.check(HCReq.new(service: t[:service]), nil) end expected_msg = /#{StatusCodes::NOT_FOUND}/ expect(&blk).to raise_error GRPC::BadStatus, expected_msg @@ -184,8 +189,10 @@ describe Grpc::Health::Checker do end it 'should receive the correct status', server: true do - @srv.handle(subject) - subject.add_status('', ServingStatus::NOT_SERVING) + Thread.abort_on_exception = true + checker = Grpc::Health::Checker.new + @srv.handle(checker) + checker.add_status('', ServingStatus::NOT_SERVING) t = Thread.new { @srv.run } @srv.wait_till_running @@ -198,7 +205,8 @@ describe Grpc::Health::Checker do end it 'should fail on unknown services', server: true do - @srv.handle(subject) + checker = Grpc::Health::Checker.new + @srv.handle(checker) t = Thread.new { @srv.run } @srv.wait_till_running blk = proc do From 49f89f0c05e25e0b01fc12844ff88b62579a5501 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Wed, 26 Oct 2016 11:16:59 -0700 Subject: [PATCH 233/286] clang-format --- src/core/ext/lb_policy/grpclb/grpclb.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index 6d73c48cc3d..6da4febf266 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -637,9 +637,9 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, addr_strs[addr_index++] = grpc_sockaddr_to_uri(&addresses->addresses[i].address); } else { - GPR_ASSERT(grpc_sockaddr_to_string( - &addr_strs[addr_index++], - &addresses->addresses[i].address, true) > 0); + GPR_ASSERT(grpc_sockaddr_to_string(&addr_strs[addr_index++], + &addresses->addresses[i].address, + true) > 0); } } } From 49607a8afa2fa58e3546c6e3b7b3cf90bb74414b Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Wed, 26 Oct 2016 11:17:37 -0700 Subject: [PATCH 234/286] Ran generate_projects.sh --- tools/run_tests/tests.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index c86b14f63eb..5cb50cc999c 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -1306,6 +1306,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1321,6 +1322,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", From 50a730bd1c5dd96c1b5069c5287c047700c00255 Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Wed, 26 Oct 2016 21:42:29 +0200 Subject: [PATCH 235/286] Going 1.0.1. --- CMakeLists.txt | 2 +- Makefile | 2 +- build.yaml | 2 +- package.json | 2 +- package.xml | 8 ++++---- src/core/lib/surface/version.c | 2 +- src/csharp/Grpc.Auth/project.json | 4 ++-- src/csharp/Grpc.Core/VersionInfo.cs | 2 +- src/csharp/Grpc.Core/project.json | 2 +- src/csharp/Grpc.HealthCheck/project.json | 4 ++-- src/csharp/build_packages.bat | 2 +- src/csharp/build_packages_dotnetcli.sh | 4 ++-- src/node/health_check/package.json | 4 ++-- src/node/tools/package.json | 2 +- src/python/grpcio/grpc_version.py | 2 +- src/python/grpcio_health_checking/grpc_version.py | 2 +- src/python/grpcio_tests/grpc_version.py | 2 +- src/ruby/lib/grpc/version.rb | 2 +- src/ruby/tools/version.rb | 2 +- tools/distrib/python/grpcio_tools/grpc_version.py | 2 +- tools/doxygen/Doxyfile.c++ | 2 +- tools/doxygen/Doxyfile.c++.internal | 2 +- tools/doxygen/Doxyfile.core | 2 +- tools/doxygen/Doxyfile.core.internal | 2 +- 24 files changed, 31 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 283c95be5e3..e47fa55430d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,7 @@ cmake_minimum_required(VERSION 2.8) set(PACKAGE_NAME "grpc") -set(PACKAGE_VERSION "1.0.1-pre1") +set(PACKAGE_VERSION "1.0.1") set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") set(PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}") set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/") diff --git a/Makefile b/Makefile index c1b24d55050..1d396aef53a 100644 --- a/Makefile +++ b/Makefile @@ -415,7 +415,7 @@ E = @echo Q = @ endif -VERSION = 1.0.1-pre1 +VERSION = 1.0.1 CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES)) CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS) diff --git a/build.yaml b/build.yaml index 68c9adae38d..12d7f855de7 100644 --- a/build.yaml +++ b/build.yaml @@ -7,7 +7,7 @@ settings: '#3': Use "-preN" suffixes to identify pre-release versions '#4': Per-language overrides are possible with (eg) ruby_version tag here '#5': See the expand_version.py for all the quirks here - version: 1.0.1-pre1 + version: 1.0.1 filegroups: - name: census public_headers: diff --git a/package.json b/package.json index cabb34ea332..b21e1305571 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grpc", - "version": "1.0.1-pre1", + "version": "1.0.1", "author": "Google Inc.", "description": "gRPC Library for Node", "homepage": "http://www.grpc.io/", diff --git a/package.xml b/package.xml index 7da3d48a073..8e42cc669ad 100644 --- a/package.xml +++ b/package.xml @@ -13,8 +13,8 @@ 2016-08-22 - 1.0.1RC1 - 1.0.1RC1 + 1.0.1 + 1.0.1 stable @@ -1163,8 +1163,8 @@ Update to wrap gRPC C Core version 0.10.0 - 1.0.1RC1 - 1.0.1RC1 + 1.0.1 + 1.0.1 stable diff --git a/src/core/lib/surface/version.c b/src/core/lib/surface/version.c index 9463436ada5..b15505cdbf1 100644 --- a/src/core/lib/surface/version.c +++ b/src/core/lib/surface/version.c @@ -36,4 +36,4 @@ #include -const char *grpc_version_string(void) { return "1.0.1-pre1"; } +const char *grpc_version_string(void) { return "1.0.1"; } diff --git a/src/csharp/Grpc.Auth/project.json b/src/csharp/Grpc.Auth/project.json index dd72e8239ec..6b0df9045a1 100644 --- a/src/csharp/Grpc.Auth/project.json +++ b/src/csharp/Grpc.Auth/project.json @@ -1,5 +1,5 @@ { - "version": "1.0.1-pre1", + "version": "1.0.1", "title": "gRPC C# Auth", "authors": [ "Google Inc." ], "copyright": "Copyright 2015, Google Inc.", @@ -22,7 +22,7 @@ } }, "dependencies": { - "Grpc.Core": "1.0.1-pre1", + "Grpc.Core": "1.0.1", "Google.Apis.Auth": "1.16.0" }, "frameworks": { diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs index febd7a23feb..2436da3dec3 100644 --- a/src/csharp/Grpc.Core/VersionInfo.cs +++ b/src/csharp/Grpc.Core/VersionInfo.cs @@ -53,6 +53,6 @@ namespace Grpc.Core /// /// Current version of gRPC C# /// - public const string CurrentVersion = "1.0.1-pre1"; + public const string CurrentVersion = "1.0.1"; } } diff --git a/src/csharp/Grpc.Core/project.json b/src/csharp/Grpc.Core/project.json index 8cdb1720a43..29d35555c07 100644 --- a/src/csharp/Grpc.Core/project.json +++ b/src/csharp/Grpc.Core/project.json @@ -1,5 +1,5 @@ { - "version": "1.0.1-pre1", + "version": "1.0.1", "title": "gRPC C# Core", "authors": [ "Google Inc." ], "copyright": "Copyright 2015, Google Inc.", diff --git a/src/csharp/Grpc.HealthCheck/project.json b/src/csharp/Grpc.HealthCheck/project.json index 2d06cb3eab1..62aa361efa2 100644 --- a/src/csharp/Grpc.HealthCheck/project.json +++ b/src/csharp/Grpc.HealthCheck/project.json @@ -1,5 +1,5 @@ { - "version": "1.0.1-pre1", + "version": "1.0.1", "title": "gRPC C# Healthchecking", "authors": [ "Google Inc." ], "copyright": "Copyright 2015, Google Inc.", @@ -22,7 +22,7 @@ } }, "dependencies": { - "Grpc.Core": "1.0.1-pre1", + "Grpc.Core": "1.0.1", "Google.Protobuf": "3.0.0" }, "frameworks": { diff --git a/src/csharp/build_packages.bat b/src/csharp/build_packages.bat index 2b0e9042251..9dabe20e02a 100644 --- a/src/csharp/build_packages.bat +++ b/src/csharp/build_packages.bat @@ -34,7 +34,7 @@ @rem in build_packages_dotnetcli.sh @rem Current package versions -set VERSION=1.0.1-pre1 +set VERSION=1.0.1 set PROTOBUF_VERSION=3.0.0 @rem Adjust the location of nuget.exe diff --git a/src/csharp/build_packages_dotnetcli.sh b/src/csharp/build_packages_dotnetcli.sh index 2f26fd89111..c92f49e6287 100755 --- a/src/csharp/build_packages_dotnetcli.sh +++ b/src/csharp/build_packages_dotnetcli.sh @@ -64,7 +64,7 @@ dotnet pack --configuration Release Grpc.Core/project.json --output ../../artifa dotnet pack --configuration Release Grpc.Auth/project.json --output ../../artifacts dotnet pack --configuration Release Grpc.HealthCheck/project.json --output ../../artifacts -nuget pack Grpc.nuspec -Version "1.0.1-pre1" -OutputDirectory ../../artifacts -nuget pack Grpc.Tools.nuspec -Version "1.0.1-pre1" -OutputDirectory ../../artifacts +nuget pack Grpc.nuspec -Version "1.0.1" -OutputDirectory ../../artifacts +nuget pack Grpc.Tools.nuspec -Version "1.0.1" -OutputDirectory ../../artifacts (cd ../../artifacts && zip csharp_nugets_dotnetcli.zip *.nupkg) diff --git a/src/node/health_check/package.json b/src/node/health_check/package.json index 7e5dbb556b5..77462529869 100644 --- a/src/node/health_check/package.json +++ b/src/node/health_check/package.json @@ -1,6 +1,6 @@ { "name": "grpc-health-check", - "version": "1.0.1-pre1", + "version": "1.0.1", "author": "Google Inc.", "description": "Health check service for use with gRPC", "repository": { @@ -15,7 +15,7 @@ } ], "dependencies": { - "grpc": "^1.0.1-pre1", + "grpc": "^1.0.1", "lodash": "^3.9.3", "google-protobuf": "^3.0.0" }, diff --git a/src/node/tools/package.json b/src/node/tools/package.json index fd22e752cf1..0144b04dae7 100644 --- a/src/node/tools/package.json +++ b/src/node/tools/package.json @@ -1,6 +1,6 @@ { "name": "grpc-tools", - "version": "1.0.1-pre1", + "version": "1.0.1", "author": "Google Inc.", "description": "Tools for developing with gRPC on Node.js", "homepage": "http://www.grpc.io/", diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py index efa94a02283..5e35a7770de 100644 --- a/src/python/grpcio/grpc_version.py +++ b/src/python/grpcio/grpc_version.py @@ -29,4 +29,4 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!! -VERSION='1.0.1rc1' +VERSION='1.0.1' diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py index 082453c1acc..14cb881237c 100644 --- a/src/python/grpcio_health_checking/grpc_version.py +++ b/src/python/grpcio_health_checking/grpc_version.py @@ -29,4 +29,4 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!! -VERSION='1.0.1rc1' +VERSION='1.0.1' diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py index 79c479cccdb..0f39afb37f5 100644 --- a/src/python/grpcio_tests/grpc_version.py +++ b/src/python/grpcio_tests/grpc_version.py @@ -29,4 +29,4 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!! -VERSION='1.0.1rc1' +VERSION='1.0.1' diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb index 6de123492db..126d0010775 100644 --- a/src/ruby/lib/grpc/version.rb +++ b/src/ruby/lib/grpc/version.rb @@ -29,5 +29,5 @@ # GRPC contains the General RPC module. module GRPC - VERSION = '1.0.1.pre1' + VERSION = '1.0.1' end diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb index 205eca0daac..c3bd13a36fd 100644 --- a/src/ruby/tools/version.rb +++ b/src/ruby/tools/version.rb @@ -29,6 +29,6 @@ module GRPC module Tools - VERSION = '1.0.1.pre1' + VERSION = '1.0.1' end end diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py index 510c26b2e02..4f7fe9d5874 100644 --- a/tools/distrib/python/grpcio_tools/grpc_version.py +++ b/tools/distrib/python/grpcio_tools/grpc_version.py @@ -29,4 +29,4 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!! -VERSION='1.0.1rc1' +VERSION='1.0.1' diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++ index 98939107447..902fae1f5b2 100644 --- a/tools/doxygen/Doxyfile.c++ +++ b/tools/doxygen/Doxyfile.c++ @@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.0.1-pre1 +PROJECT_NUMBER = 1.0.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 83c06e997a1..5f11dd199a3 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.0.1-pre1 +PROJECT_NUMBER = 1.0.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core index 991531fccc4..d22999ba194 100644 --- a/tools/doxygen/Doxyfile.core +++ b/tools/doxygen/Doxyfile.core @@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC Core" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.0.1-pre1 +PROJECT_NUMBER = 1.0.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index c8d53eb9ab7..49f50bb358e 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC Core" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.0.1-pre1 +PROJECT_NUMBER = 1.0.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a From bfe56801ad916248f43c2dcfaa96bd7442a65ae2 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Wed, 26 Oct 2016 12:45:20 -0700 Subject: [PATCH 236/286] Move method_config module from ext/client_channel to lib/transport. --- BUILD | 16 ++++++++-------- CMakeLists.txt | 6 +++--- Makefile | 7 ++++--- binding.gyp | 2 +- build.yaml | 4 ++-- config.m4 | 2 +- gRPC-Core.podspec | 6 +++--- grpc.gemspec | 4 ++-- package.xml | 4 ++-- src/core/ext/client_channel/client_channel.c | 2 +- src/core/lib/channel/message_size_filter.c | 2 +- .../transport}/method_config.c | 2 +- .../transport}/method_config.h | 6 +++--- src/python/grpcio/grpc_core_dependencies.py | 2 +- test/core/end2end/fake_resolver.c | 2 +- tools/doxygen/Doxyfile.core.internal | 4 ++-- tools/run_tests/sources_and_headers.json | 6 +++--- tools/run_tests/tests.json | 2 ++ vsprojects/vcxproj/grpc/grpc.vcxproj | 6 +++--- vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 12 ++++++------ .../grpc_test_util/grpc_test_util.vcxproj | 3 +++ .../grpc_test_util.vcxproj.filters | 6 ++++++ .../vcxproj/grpc_unsecure/grpc_unsecure.vcxproj | 6 +++--- .../grpc_unsecure/grpc_unsecure.vcxproj.filters | 12 ++++++------ 24 files changed, 68 insertions(+), 56 deletions(-) rename src/core/{ext/client_channel => lib/transport}/method_config.c (99%) rename src/core/{ext/client_channel => lib/transport}/method_config.h (97%) diff --git a/BUILD b/BUILD index e4ee8e93f71..241215e0d64 100644 --- a/BUILD +++ b/BUILD @@ -249,6 +249,7 @@ cc_library( "src/core/lib/transport/mdstr_hash_table.h", "src/core/lib/transport/metadata.h", "src/core/lib/transport/metadata_batch.h", + "src/core/lib/transport/method_config.h", "src/core/lib/transport/static_metadata.h", "src/core/lib/transport/timeout_encoding.h", "src/core/lib/transport/transport.h", @@ -306,7 +307,6 @@ cc_library( "src/core/ext/client_channel/lb_policy.h", "src/core/ext/client_channel/lb_policy_factory.h", "src/core/ext/client_channel/lb_policy_registry.h", - "src/core/ext/client_channel/method_config.h", "src/core/ext/client_channel/parse_address.h", "src/core/ext/client_channel/resolver.h", "src/core/ext/client_channel/resolver_factory.h", @@ -433,6 +433,7 @@ cc_library( "src/core/lib/transport/mdstr_hash_table.c", "src/core/lib/transport/metadata.c", "src/core/lib/transport/metadata_batch.c", + "src/core/lib/transport/method_config.c", "src/core/lib/transport/static_metadata.c", "src/core/lib/transport/timeout_encoding.c", "src/core/lib/transport/transport.c", @@ -499,7 +500,6 @@ cc_library( "src/core/ext/client_channel/lb_policy.c", "src/core/ext/client_channel/lb_policy_factory.c", "src/core/ext/client_channel/lb_policy_registry.c", - "src/core/ext/client_channel/method_config.c", "src/core/ext/client_channel/parse_address.c", "src/core/ext/client_channel/resolver.c", "src/core/ext/client_channel/resolver_factory.c", @@ -672,6 +672,7 @@ cc_library( "src/core/lib/transport/mdstr_hash_table.h", "src/core/lib/transport/metadata.h", "src/core/lib/transport/metadata_batch.h", + "src/core/lib/transport/method_config.h", "src/core/lib/transport/static_metadata.h", "src/core/lib/transport/timeout_encoding.h", "src/core/lib/transport/transport.h", @@ -706,7 +707,6 @@ cc_library( "src/core/ext/client_channel/lb_policy.h", "src/core/ext/client_channel/lb_policy_factory.h", "src/core/ext/client_channel/lb_policy_registry.h", - "src/core/ext/client_channel/method_config.h", "src/core/ext/client_channel/parse_address.h", "src/core/ext/client_channel/resolver.h", "src/core/ext/client_channel/resolver_factory.h", @@ -841,6 +841,7 @@ cc_library( "src/core/lib/transport/mdstr_hash_table.c", "src/core/lib/transport/metadata.c", "src/core/lib/transport/metadata_batch.c", + "src/core/lib/transport/method_config.c", "src/core/lib/transport/static_metadata.c", "src/core/lib/transport/timeout_encoding.c", "src/core/lib/transport/transport.c", @@ -882,7 +883,6 @@ cc_library( "src/core/ext/client_channel/lb_policy.c", "src/core/ext/client_channel/lb_policy_factory.c", "src/core/ext/client_channel/lb_policy_registry.c", - "src/core/ext/client_channel/method_config.c", "src/core/ext/client_channel/parse_address.c", "src/core/ext/client_channel/resolver.c", "src/core/ext/client_channel/resolver_factory.c", @@ -1050,6 +1050,7 @@ cc_library( "src/core/lib/transport/mdstr_hash_table.h", "src/core/lib/transport/metadata.h", "src/core/lib/transport/metadata_batch.h", + "src/core/lib/transport/method_config.h", "src/core/lib/transport/static_metadata.h", "src/core/lib/transport/timeout_encoding.h", "src/core/lib/transport/transport.h", @@ -1083,7 +1084,6 @@ cc_library( "src/core/ext/client_channel/lb_policy.h", "src/core/ext/client_channel/lb_policy_factory.h", "src/core/ext/client_channel/lb_policy_registry.h", - "src/core/ext/client_channel/method_config.h", "src/core/ext/client_channel/parse_address.h", "src/core/ext/client_channel/resolver.h", "src/core/ext/client_channel/resolver_factory.h", @@ -1211,6 +1211,7 @@ cc_library( "src/core/lib/transport/mdstr_hash_table.c", "src/core/lib/transport/metadata.c", "src/core/lib/transport/metadata_batch.c", + "src/core/lib/transport/method_config.c", "src/core/lib/transport/static_metadata.c", "src/core/lib/transport/timeout_encoding.c", "src/core/lib/transport/transport.c", @@ -1252,7 +1253,6 @@ cc_library( "src/core/ext/client_channel/lb_policy.c", "src/core/ext/client_channel/lb_policy_factory.c", "src/core/ext/client_channel/lb_policy_registry.c", - "src/core/ext/client_channel/method_config.c", "src/core/ext/client_channel/parse_address.c", "src/core/ext/client_channel/resolver.c", "src/core/ext/client_channel/resolver_factory.c", @@ -2136,6 +2136,7 @@ objc_library( "src/core/lib/transport/mdstr_hash_table.c", "src/core/lib/transport/metadata.c", "src/core/lib/transport/metadata_batch.c", + "src/core/lib/transport/method_config.c", "src/core/lib/transport/static_metadata.c", "src/core/lib/transport/timeout_encoding.c", "src/core/lib/transport/transport.c", @@ -2202,7 +2203,6 @@ objc_library( "src/core/ext/client_channel/lb_policy.c", "src/core/ext/client_channel/lb_policy_factory.c", "src/core/ext/client_channel/lb_policy_registry.c", - "src/core/ext/client_channel/method_config.c", "src/core/ext/client_channel/parse_address.c", "src/core/ext/client_channel/resolver.c", "src/core/ext/client_channel/resolver_factory.c", @@ -2354,6 +2354,7 @@ objc_library( "src/core/lib/transport/mdstr_hash_table.h", "src/core/lib/transport/metadata.h", "src/core/lib/transport/metadata_batch.h", + "src/core/lib/transport/method_config.h", "src/core/lib/transport/static_metadata.h", "src/core/lib/transport/timeout_encoding.h", "src/core/lib/transport/transport.h", @@ -2411,7 +2412,6 @@ objc_library( "src/core/ext/client_channel/lb_policy.h", "src/core/ext/client_channel/lb_policy_factory.h", "src/core/ext/client_channel/lb_policy_registry.h", - "src/core/ext/client_channel/method_config.h", "src/core/ext/client_channel/parse_address.h", "src/core/ext/client_channel/resolver.h", "src/core/ext/client_channel/resolver_factory.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f301f54b9d..707efd78115 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -391,6 +391,7 @@ add_library(grpc src/core/lib/transport/mdstr_hash_table.c src/core/lib/transport/metadata.c src/core/lib/transport/metadata_batch.c + src/core/lib/transport/method_config.c src/core/lib/transport/static_metadata.c src/core/lib/transport/timeout_encoding.c src/core/lib/transport/transport.c @@ -457,7 +458,6 @@ add_library(grpc src/core/ext/client_channel/lb_policy.c src/core/ext/client_channel/lb_policy_factory.c src/core/ext/client_channel/lb_policy_registry.c - src/core/ext/client_channel/method_config.c src/core/ext/client_channel/parse_address.c src/core/ext/client_channel/resolver.c src/core/ext/client_channel/resolver_factory.c @@ -663,6 +663,7 @@ add_library(grpc_cronet src/core/lib/transport/mdstr_hash_table.c src/core/lib/transport/metadata.c src/core/lib/transport/metadata_batch.c + src/core/lib/transport/method_config.c src/core/lib/transport/static_metadata.c src/core/lib/transport/timeout_encoding.c src/core/lib/transport/transport.c @@ -704,7 +705,6 @@ add_library(grpc_cronet src/core/ext/client_channel/lb_policy.c src/core/ext/client_channel/lb_policy_factory.c src/core/ext/client_channel/lb_policy_registry.c - src/core/ext/client_channel/method_config.c src/core/ext/client_channel/parse_address.c src/core/ext/client_channel/resolver.c src/core/ext/client_channel/resolver_factory.c @@ -907,6 +907,7 @@ add_library(grpc_unsecure src/core/lib/transport/mdstr_hash_table.c src/core/lib/transport/metadata.c src/core/lib/transport/metadata_batch.c + src/core/lib/transport/method_config.c src/core/lib/transport/static_metadata.c src/core/lib/transport/timeout_encoding.c src/core/lib/transport/transport.c @@ -948,7 +949,6 @@ add_library(grpc_unsecure src/core/ext/client_channel/lb_policy.c src/core/ext/client_channel/lb_policy_factory.c src/core/ext/client_channel/lb_policy_registry.c - src/core/ext/client_channel/method_config.c src/core/ext/client_channel/parse_address.c src/core/ext/client_channel/resolver.c src/core/ext/client_channel/resolver_factory.c diff --git a/Makefile b/Makefile index f0dec1a4a36..d5c92077247 100644 --- a/Makefile +++ b/Makefile @@ -2676,6 +2676,7 @@ LIBGRPC_SRC = \ src/core/lib/transport/mdstr_hash_table.c \ src/core/lib/transport/metadata.c \ src/core/lib/transport/metadata_batch.c \ + src/core/lib/transport/method_config.c \ src/core/lib/transport/static_metadata.c \ src/core/lib/transport/timeout_encoding.c \ src/core/lib/transport/transport.c \ @@ -2742,7 +2743,6 @@ LIBGRPC_SRC = \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ - src/core/ext/client_channel/method_config.c \ src/core/ext/client_channel/parse_address.c \ src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ @@ -2966,6 +2966,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/transport/mdstr_hash_table.c \ src/core/lib/transport/metadata.c \ src/core/lib/transport/metadata_batch.c \ + src/core/lib/transport/method_config.c \ src/core/lib/transport/static_metadata.c \ src/core/lib/transport/timeout_encoding.c \ src/core/lib/transport/transport.c \ @@ -3007,7 +3008,6 @@ LIBGRPC_CRONET_SRC = \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ - src/core/ext/client_channel/method_config.c \ src/core/ext/client_channel/parse_address.c \ src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ @@ -3247,6 +3247,7 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/transport/mdstr_hash_table.c \ src/core/lib/transport/metadata.c \ src/core/lib/transport/metadata_batch.c \ + src/core/lib/transport/method_config.c \ src/core/lib/transport/static_metadata.c \ src/core/lib/transport/timeout_encoding.c \ src/core/lib/transport/transport.c \ @@ -3455,6 +3456,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/transport/mdstr_hash_table.c \ src/core/lib/transport/metadata.c \ src/core/lib/transport/metadata_batch.c \ + src/core/lib/transport/method_config.c \ src/core/lib/transport/static_metadata.c \ src/core/lib/transport/timeout_encoding.c \ src/core/lib/transport/transport.c \ @@ -3496,7 +3498,6 @@ LIBGRPC_UNSECURE_SRC = \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ - src/core/ext/client_channel/method_config.c \ src/core/ext/client_channel/parse_address.c \ src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ diff --git a/binding.gyp b/binding.gyp index 390cc52c8f3..a752d4c6b33 100644 --- a/binding.gyp +++ b/binding.gyp @@ -669,6 +669,7 @@ 'src/core/lib/transport/mdstr_hash_table.c', 'src/core/lib/transport/metadata.c', 'src/core/lib/transport/metadata_batch.c', + 'src/core/lib/transport/method_config.c', 'src/core/lib/transport/static_metadata.c', 'src/core/lib/transport/timeout_encoding.c', 'src/core/lib/transport/transport.c', @@ -735,7 +736,6 @@ 'src/core/ext/client_channel/lb_policy.c', 'src/core/ext/client_channel/lb_policy_factory.c', 'src/core/ext/client_channel/lb_policy_registry.c', - 'src/core/ext/client_channel/method_config.c', 'src/core/ext/client_channel/parse_address.c', 'src/core/ext/client_channel/resolver.c', 'src/core/ext/client_channel/resolver_factory.c', diff --git a/build.yaml b/build.yaml index 17828ae8eb6..149514f9c10 100644 --- a/build.yaml +++ b/build.yaml @@ -253,6 +253,7 @@ filegroups: - src/core/lib/transport/mdstr_hash_table.h - src/core/lib/transport/metadata.h - src/core/lib/transport/metadata_batch.h + - src/core/lib/transport/method_config.h - src/core/lib/transport/static_metadata.h - src/core/lib/transport/timeout_encoding.h - src/core/lib/transport/transport.h @@ -359,6 +360,7 @@ filegroups: - src/core/lib/transport/mdstr_hash_table.c - src/core/lib/transport/metadata.c - src/core/lib/transport/metadata_batch.c + - src/core/lib/transport/method_config.c - src/core/lib/transport/static_metadata.c - src/core/lib/transport/timeout_encoding.c - src/core/lib/transport/transport.c @@ -377,7 +379,6 @@ filegroups: - src/core/ext/client_channel/lb_policy.h - src/core/ext/client_channel/lb_policy_factory.h - src/core/ext/client_channel/lb_policy_registry.h - - src/core/ext/client_channel/method_config.h - src/core/ext/client_channel/parse_address.h - src/core/ext/client_channel/resolver.h - src/core/ext/client_channel/resolver_factory.h @@ -398,7 +399,6 @@ filegroups: - src/core/ext/client_channel/lb_policy.c - src/core/ext/client_channel/lb_policy_factory.c - src/core/ext/client_channel/lb_policy_registry.c - - src/core/ext/client_channel/method_config.c - src/core/ext/client_channel/parse_address.c - src/core/ext/client_channel/resolver.c - src/core/ext/client_channel/resolver_factory.c diff --git a/config.m4 b/config.m4 index 298708a8397..854ec569c80 100644 --- a/config.m4 +++ b/config.m4 @@ -185,6 +185,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/transport/mdstr_hash_table.c \ src/core/lib/transport/metadata.c \ src/core/lib/transport/metadata_batch.c \ + src/core/lib/transport/method_config.c \ src/core/lib/transport/static_metadata.c \ src/core/lib/transport/timeout_encoding.c \ src/core/lib/transport/transport.c \ @@ -251,7 +252,6 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ - src/core/ext/client_channel/method_config.c \ src/core/ext/client_channel/parse_address.c \ src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 6fc65f6c693..8735a350310 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -336,6 +336,7 @@ Pod::Spec.new do |s| 'src/core/lib/transport/mdstr_hash_table.h', 'src/core/lib/transport/metadata.h', 'src/core/lib/transport/metadata_batch.h', + 'src/core/lib/transport/method_config.h', 'src/core/lib/transport/static_metadata.h', 'src/core/lib/transport/timeout_encoding.h', 'src/core/lib/transport/transport.h', @@ -393,7 +394,6 @@ Pod::Spec.new do |s| 'src/core/ext/client_channel/lb_policy.h', 'src/core/ext/client_channel/lb_policy_factory.h', 'src/core/ext/client_channel/lb_policy_registry.h', - 'src/core/ext/client_channel/method_config.h', 'src/core/ext/client_channel/parse_address.h', 'src/core/ext/client_channel/resolver.h', 'src/core/ext/client_channel/resolver_factory.h', @@ -524,6 +524,7 @@ Pod::Spec.new do |s| 'src/core/lib/transport/mdstr_hash_table.c', 'src/core/lib/transport/metadata.c', 'src/core/lib/transport/metadata_batch.c', + 'src/core/lib/transport/method_config.c', 'src/core/lib/transport/static_metadata.c', 'src/core/lib/transport/timeout_encoding.c', 'src/core/lib/transport/transport.c', @@ -590,7 +591,6 @@ Pod::Spec.new do |s| 'src/core/ext/client_channel/lb_policy.c', 'src/core/ext/client_channel/lb_policy_factory.c', 'src/core/ext/client_channel/lb_policy_registry.c', - 'src/core/ext/client_channel/method_config.c', 'src/core/ext/client_channel/parse_address.c', 'src/core/ext/client_channel/resolver.c', 'src/core/ext/client_channel/resolver_factory.c', @@ -731,6 +731,7 @@ Pod::Spec.new do |s| 'src/core/lib/transport/mdstr_hash_table.h', 'src/core/lib/transport/metadata.h', 'src/core/lib/transport/metadata_batch.h', + 'src/core/lib/transport/method_config.h', 'src/core/lib/transport/static_metadata.h', 'src/core/lib/transport/timeout_encoding.h', 'src/core/lib/transport/transport.h', @@ -788,7 +789,6 @@ Pod::Spec.new do |s| 'src/core/ext/client_channel/lb_policy.h', 'src/core/ext/client_channel/lb_policy_factory.h', 'src/core/ext/client_channel/lb_policy_registry.h', - 'src/core/ext/client_channel/method_config.h', 'src/core/ext/client_channel/parse_address.h', 'src/core/ext/client_channel/resolver.h', 'src/core/ext/client_channel/resolver_factory.h', diff --git a/grpc.gemspec b/grpc.gemspec index d991d561f4d..f70ffb7fdaa 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -256,6 +256,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/transport/mdstr_hash_table.h ) s.files += %w( src/core/lib/transport/metadata.h ) s.files += %w( src/core/lib/transport/metadata_batch.h ) + s.files += %w( src/core/lib/transport/method_config.h ) s.files += %w( src/core/lib/transport/static_metadata.h ) s.files += %w( src/core/lib/transport/timeout_encoding.h ) s.files += %w( src/core/lib/transport/transport.h ) @@ -313,7 +314,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_channel/lb_policy.h ) s.files += %w( src/core/ext/client_channel/lb_policy_factory.h ) s.files += %w( src/core/ext/client_channel/lb_policy_registry.h ) - s.files += %w( src/core/ext/client_channel/method_config.h ) s.files += %w( src/core/ext/client_channel/parse_address.h ) s.files += %w( src/core/ext/client_channel/resolver.h ) s.files += %w( src/core/ext/client_channel/resolver_factory.h ) @@ -444,6 +444,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/transport/mdstr_hash_table.c ) s.files += %w( src/core/lib/transport/metadata.c ) s.files += %w( src/core/lib/transport/metadata_batch.c ) + s.files += %w( src/core/lib/transport/method_config.c ) s.files += %w( src/core/lib/transport/static_metadata.c ) s.files += %w( src/core/lib/transport/timeout_encoding.c ) s.files += %w( src/core/lib/transport/transport.c ) @@ -510,7 +511,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_channel/lb_policy.c ) s.files += %w( src/core/ext/client_channel/lb_policy_factory.c ) s.files += %w( src/core/ext/client_channel/lb_policy_registry.c ) - s.files += %w( src/core/ext/client_channel/method_config.c ) s.files += %w( src/core/ext/client_channel/parse_address.c ) s.files += %w( src/core/ext/client_channel/resolver.c ) s.files += %w( src/core/ext/client_channel/resolver_factory.c ) diff --git a/package.xml b/package.xml index 5f637f816e0..27ec0ceffc4 100644 --- a/package.xml +++ b/package.xml @@ -263,6 +263,7 @@ + @@ -320,7 +321,6 @@ - @@ -451,6 +451,7 @@ + @@ -517,7 +518,6 @@ - diff --git a/src/core/ext/client_channel/client_channel.c b/src/core/ext/client_channel/client_channel.c index 55bb877576f..7c1212f8fa9 100644 --- a/src/core/ext/client_channel/client_channel.c +++ b/src/core/ext/client_channel/client_channel.c @@ -43,7 +43,6 @@ #include #include "src/core/ext/client_channel/lb_policy_registry.h" -#include "src/core/ext/client_channel/method_config.h" #include "src/core/ext/client_channel/subchannel.h" #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/connected_channel.h" @@ -56,6 +55,7 @@ #include "src/core/lib/transport/connectivity_state.h" #include "src/core/lib/transport/metadata.h" #include "src/core/lib/transport/metadata_batch.h" +#include "src/core/lib/transport/method_config.h" #include "src/core/lib/transport/static_metadata.h" /* Client channel implementation */ diff --git a/src/core/lib/channel/message_size_filter.c b/src/core/lib/channel/message_size_filter.c index b8b25460356..7dc5ae0df15 100644 --- a/src/core/lib/channel/message_size_filter.c +++ b/src/core/lib/channel/message_size_filter.c @@ -38,8 +38,8 @@ #include #include -#include "src/core/ext/client_channel/method_config.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/transport/method_config.h" #define DEFAULT_MAX_SEND_MESSAGE_LENGTH -1 // Unlimited. // The protobuf library will (by default) start warning at 100 megs. diff --git a/src/core/ext/client_channel/method_config.c b/src/core/lib/transport/method_config.c similarity index 99% rename from src/core/ext/client_channel/method_config.c rename to src/core/lib/transport/method_config.c index 4313ad5e0e6..57d97700bfe 100644 --- a/src/core/ext/client_channel/method_config.c +++ b/src/core/lib/transport/method_config.c @@ -29,7 +29,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -#include "src/core/ext/client_channel/method_config.h" +#include "src/core/lib/transport/method_config.h" #include diff --git a/src/core/ext/client_channel/method_config.h b/src/core/lib/transport/method_config.h similarity index 97% rename from src/core/ext/client_channel/method_config.h rename to src/core/lib/transport/method_config.h index 4cbeee56257..58fedd94366 100644 --- a/src/core/ext/client_channel/method_config.h +++ b/src/core/lib/transport/method_config.h @@ -29,8 +29,8 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_METHOD_CONFIG_H -#define GRPC_CORE_EXT_CLIENT_CHANNEL_METHOD_CONFIG_H +#ifndef GRPC_CORE_LIB_TRANSPORT_METHOD_CONFIG_H +#define GRPC_CORE_LIB_TRANSPORT_METHOD_CONFIG_H #include @@ -133,4 +133,4 @@ grpc_mdstr_hash_table* grpc_method_config_table_convert( void* (*convert_value)(const grpc_method_config* method_config), const grpc_mdstr_hash_table_vtable* vtable); -#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_METHOD_CONFIG_H */ +#endif /* GRPC_CORE_LIB_TRANSPORT_METHOD_CONFIG_H */ diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 0ffb0e351c3..484e34a1f4b 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -179,6 +179,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/transport/mdstr_hash_table.c', 'src/core/lib/transport/metadata.c', 'src/core/lib/transport/metadata_batch.c', + 'src/core/lib/transport/method_config.c', 'src/core/lib/transport/static_metadata.c', 'src/core/lib/transport/timeout_encoding.c', 'src/core/lib/transport/transport.c', @@ -245,7 +246,6 @@ CORE_SOURCE_FILES = [ 'src/core/ext/client_channel/lb_policy.c', 'src/core/ext/client_channel/lb_policy_factory.c', 'src/core/ext/client_channel/lb_policy_registry.c', - 'src/core/ext/client_channel/method_config.c', 'src/core/ext/client_channel/parse_address.c', 'src/core/ext/client_channel/resolver.c', 'src/core/ext/client_channel/resolver_factory.c', diff --git a/test/core/end2end/fake_resolver.c b/test/core/end2end/fake_resolver.c index ed972177507..e89e66674dd 100644 --- a/test/core/end2end/fake_resolver.c +++ b/test/core/end2end/fake_resolver.c @@ -42,13 +42,13 @@ #include #include -#include "src/core/ext/client_channel/method_config.h" #include "src/core/ext/client_channel/parse_address.h" #include "src/core/ext/client_channel/resolver_registry.h" #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/unix_sockets_posix.h" #include "src/core/lib/support/string.h" +#include "src/core/lib/transport/method_config.h" // // fake_resolver diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 827159ab3ee..6e8de9848ee 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -873,6 +873,7 @@ src/core/lib/transport/connectivity_state.h \ src/core/lib/transport/mdstr_hash_table.h \ src/core/lib/transport/metadata.h \ src/core/lib/transport/metadata_batch.h \ +src/core/lib/transport/method_config.h \ src/core/lib/transport/static_metadata.h \ src/core/lib/transport/timeout_encoding.h \ src/core/lib/transport/transport.h \ @@ -930,7 +931,6 @@ src/core/ext/client_channel/initial_connect_string.h \ src/core/ext/client_channel/lb_policy.h \ src/core/ext/client_channel/lb_policy_factory.h \ src/core/ext/client_channel/lb_policy_registry.h \ -src/core/ext/client_channel/method_config.h \ src/core/ext/client_channel/parse_address.h \ src/core/ext/client_channel/resolver.h \ src/core/ext/client_channel/resolver_factory.h \ @@ -1061,6 +1061,7 @@ src/core/lib/transport/connectivity_state.c \ src/core/lib/transport/mdstr_hash_table.c \ src/core/lib/transport/metadata.c \ src/core/lib/transport/metadata_batch.c \ +src/core/lib/transport/method_config.c \ src/core/lib/transport/static_metadata.c \ src/core/lib/transport/timeout_encoding.c \ src/core/lib/transport/transport.c \ @@ -1127,7 +1128,6 @@ src/core/ext/client_channel/initial_connect_string.c \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ -src/core/ext/client_channel/method_config.c \ src/core/ext/client_channel/parse_address.c \ src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 60138a49a2e..b77f4560fde 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6583,6 +6583,7 @@ "src/core/lib/transport/mdstr_hash_table.h", "src/core/lib/transport/metadata.h", "src/core/lib/transport/metadata_batch.h", + "src/core/lib/transport/method_config.h", "src/core/lib/transport/static_metadata.h", "src/core/lib/transport/timeout_encoding.h", "src/core/lib/transport/transport.h", @@ -6787,6 +6788,8 @@ "src/core/lib/transport/metadata.h", "src/core/lib/transport/metadata_batch.c", "src/core/lib/transport/metadata_batch.h", + "src/core/lib/transport/method_config.c", + "src/core/lib/transport/method_config.h", "src/core/lib/transport/static_metadata.c", "src/core/lib/transport/static_metadata.h", "src/core/lib/transport/timeout_encoding.c", @@ -6813,7 +6816,6 @@ "src/core/ext/client_channel/lb_policy.h", "src/core/ext/client_channel/lb_policy_factory.h", "src/core/ext/client_channel/lb_policy_registry.h", - "src/core/ext/client_channel/method_config.h", "src/core/ext/client_channel/parse_address.h", "src/core/ext/client_channel/resolver.h", "src/core/ext/client_channel/resolver_factory.h", @@ -6846,8 +6848,6 @@ "src/core/ext/client_channel/lb_policy_factory.h", "src/core/ext/client_channel/lb_policy_registry.c", "src/core/ext/client_channel/lb_policy_registry.h", - "src/core/ext/client_channel/method_config.c", - "src/core/ext/client_channel/method_config.h", "src/core/ext/client_channel/parse_address.c", "src/core/ext/client_channel/parse_address.h", "src/core/ext/client_channel/resolver.c", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index c86b14f63eb..5cb50cc999c 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -1306,6 +1306,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", @@ -1321,6 +1322,7 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, "gtest": false, "language": "c", diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 7870234aec2..7118a95273b 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -382,6 +382,7 @@ + @@ -439,7 +440,6 @@ - @@ -674,6 +674,8 @@ + + @@ -806,8 +808,6 @@ - - diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 760ac313bb8..d5056aa5ec4 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -307,6 +307,9 @@ src\core\lib\transport + + src\core\lib\transport + src\core\lib\transport @@ -505,9 +508,6 @@ src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel @@ -968,6 +968,9 @@ src\core\lib\transport + + src\core\lib\transport + src\core\lib\transport @@ -1139,9 +1142,6 @@ src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index 8eb4292e863..35ace6eabbd 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -275,6 +275,7 @@ + @@ -523,6 +524,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 90ea7bde6d5..4b104aeb9bf 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -364,6 +364,9 @@ src\core\lib\transport + + src\core\lib\transport + src\core\lib\transport @@ -758,6 +761,9 @@ src\core\lib\transport + + src\core\lib\transport + src\core\lib\transport diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 577264d3260..c8532d6c5bb 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -372,6 +372,7 @@ + @@ -405,7 +406,6 @@ - @@ -642,6 +642,8 @@ + + @@ -724,8 +726,6 @@ - - diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 9b3c6943633..032d2726bc2 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -310,6 +310,9 @@ src\core\lib\transport + + src\core\lib\transport + src\core\lib\transport @@ -433,9 +436,6 @@ src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel @@ -881,6 +881,9 @@ src\core\lib\transport + + src\core\lib\transport + src\core\lib\transport @@ -980,9 +983,6 @@ src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel From d7648feb225e8cefd26ff5a611f8ca733a755d6c Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 26 Oct 2016 13:40:50 -0700 Subject: [PATCH 237/286] Fix issue with pointers in udp_server_test --- test/core/iomgr/udp_server_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c index d9f9cd748b4..9bea2294668 100644 --- a/test/core/iomgr/udp_server_test.c +++ b/test/core/iomgr/udp_server_test.c @@ -185,7 +185,7 @@ static void test_receive(int number_of_clients) { /* Create a socket, send a packet to the UDP server. */ clifd = socket(addr->ss_family, SOCK_DGRAM, 0); GPR_ASSERT(clifd >= 0); - GPR_ASSERT(connect(clifd, (struct sockaddr *)&addr, + GPR_ASSERT(connect(clifd, (struct sockaddr *)addr, (socklen_t)resolved_addr.len) == 0); GPR_ASSERT(5 == write(clifd, "hello", 5)); while (g_number_of_reads == number_of_reads_before && From 5a3f862153cfbf0e0f49f17e598d8e70522bbe66 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 26 Oct 2016 13:45:04 -0700 Subject: [PATCH 238/286] Add missing comma in run_tests.py --- tools/run_tests/run_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 55092377a98..cd49dfa9075 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -933,7 +933,7 @@ argp.add_argument('--compiler', 'clang3.4', 'clang3.5', 'clang3.6', 'clang3.7', 'vs2010', 'vs2013', 'vs2015', 'python2.7', 'python3.4', - 'node0.12', 'node4', 'node5', 'node6', 'node7' + 'node0.12', 'node4', 'node5', 'node6', 'node7', 'coreclr'], default='default', help='Selects compiler to use. Allowed values depend on the platform and language.') From cad0908a2b5064d637036e892ca51ed2c2db57c6 Mon Sep 17 00:00:00 2001 From: Masood Malekghassemi Date: Wed, 26 Oct 2016 15:08:13 -0700 Subject: [PATCH 239/286] Break out of build process if in vanilla MSYS --- tools/run_tests/build_python.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/run_tests/build_python.sh b/tools/run_tests/build_python.sh index b786c479f36..54e2fe53478 100755 --- a/tools/run_tests/build_python.sh +++ b/tools/run_tests/build_python.sh @@ -39,6 +39,14 @@ cd $(dirname $0)/../.. PLATFORM=`uname -s` +function is_msys() { + if [ "${PLATFORM/MSYS}" != "$PLATFORM" ]; then + echo true + else + exit 1 + fi +} + function is_mingw() { if [ "${PLATFORM/MINGW}" != "$PLATFORM" ]; then echo true @@ -108,6 +116,12 @@ VENV=${2:-$(venv $PYTHON)} VENV_RELATIVE_PYTHON=${3:-$(venv_relative_python)} TOOLCHAIN=${4:-$(toolchain)} +if [ $(is_msys) ]; then + echo "MSYS doesn't directly provide the right compiler(s);" + echo "switch to a MinGW shell." + exit 1 +fi + ROOT=`pwd` export CFLAGS="-I$ROOT/include -std=gnu99 -fno-wrapv $CFLAGS" export GRPC_PYTHON_BUILD_WITH_CYTHON=1 From 2d056708fb6f417c4c937fad6e2e616e7ac27fa4 Mon Sep 17 00:00:00 2001 From: Alexander Polcyn Date: Wed, 26 Oct 2016 15:17:20 -0700 Subject: [PATCH 240/286] convert uint to int in generator --- src/compiler/ruby_generator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index ee2502e150a..14854cfa4ac 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -133,7 +133,7 @@ grpc::string PackageToModule(const grpc::string& name) { grpc::string result; result.reserve(name.size()); - for (uint i = 0; i < name.size(); i++) { + for (int i = 0; i < name.size(); i++) { if (name[i] == '_') { next_upper = true; } else { From ebf882070e710f66f0c622eb4fb4ae37d87c7926 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 26 Oct 2016 15:41:30 -0700 Subject: [PATCH 241/286] Decrease Node module cache time to avoid errors with out-of-date modules --- tools/run_tests/build_artifact_node.bat | 1 + tools/run_tests/build_artifact_node.sh | 1 + tools/run_tests/pre_build_node.bat | 5 ++--- tools/run_tests/pre_build_node.sh | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/run_tests/build_artifact_node.bat b/tools/run_tests/build_artifact_node.bat index 2e0ecd21d0f..890fb31a658 100644 --- a/tools/run_tests/build_artifact_node.bat +++ b/tools/run_tests/build_artifact_node.bat @@ -33,6 +33,7 @@ set PATH=%PATH%;C:\Program Files\nodejs\;%APPDATA%\npm del /f /q BUILD || rmdir build /s /q +call npm cache clean || goto :error call npm update || goto :error mkdir artifacts diff --git a/tools/run_tests/build_artifact_node.sh b/tools/run_tests/build_artifact_node.sh index 778a5c95d4a..326cf296133 100755 --- a/tools/run_tests/build_artifact_node.sh +++ b/tools/run_tests/build_artifact_node.sh @@ -40,6 +40,7 @@ rm -rf build || true mkdir -p artifacts +npm cache clean npm update node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 7.0.0 ) diff --git a/tools/run_tests/pre_build_node.bat b/tools/run_tests/pre_build_node.bat index a29456f9ed9..addb01a2a4d 100644 --- a/tools/run_tests/pre_build_node.bat +++ b/tools/run_tests/pre_build_node.bat @@ -29,6 +29,5 @@ set PATH=%PATH%;C:\Program Files\nodejs\;%APPDATA%\npm -@rem Expire cache after 1 week -call npm update --cache-min 604800 - +@rem Expire cache after 1 day +call npm update --cache-min 86400 diff --git a/tools/run_tests/pre_build_node.sh b/tools/run_tests/pre_build_node.sh index 4879e7ad9bd..e63be9da523 100755 --- a/tools/run_tests/pre_build_node.sh +++ b/tools/run_tests/pre_build_node.sh @@ -37,8 +37,8 @@ set -ex export GRPC_CONFIG=${CONFIG:-opt} -# Expire cache after 1 week -npm update --cache-min 604800 +# Expire cache after 1 day +npm update --cache-min 86400 npm install node-gyp-install ./node_modules/.bin/node-gyp-install From e3df5a0285fa9bf87dbeac6b1ad2c1d4427102f0 Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Thu, 27 Oct 2016 00:41:13 +0200 Subject: [PATCH 242/286] Reverting TSI's ntop change, to avoid dependency between TSI and gRPC. --- src/core/lib/tsi/ssl_transport_security.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core/lib/tsi/ssl_transport_security.c b/src/core/lib/tsi/ssl_transport_security.c index 749b46e19f4..366dca95077 100644 --- a/src/core/lib/tsi/ssl_transport_security.c +++ b/src/core/lib/tsi/ssl_transport_security.c @@ -31,9 +31,6 @@ * */ -#include "src/core/lib/iomgr/sockaddr.h" - -#include "src/core/lib/iomgr/socket_utils.h" #include "src/core/lib/tsi/ssl_transport_security.h" #include @@ -41,6 +38,15 @@ #include #include +/* TODO(jboeuf): refactor inet_ntop into a portability header. */ +/* Note: for whomever reads this and tries to refactor this, this + can't be in grpc, it has to be in gpr. */ +#ifdef GPR_WINDOWS +#include +#else +#include +#endif + #include #include #include @@ -349,8 +355,8 @@ static tsi_result add_subject_alt_names_properties_to_peer( result = TSI_INTERNAL_ERROR; break; } - const char *name = grpc_inet_ntop(af, subject_alt_name->d.iPAddress->data, - ntop_buf, INET6_ADDRSTRLEN); + const char *name = inet_ntop(af, subject_alt_name->d.iPAddress->data, + ntop_buf, INET6_ADDRSTRLEN); if (name == NULL) { gpr_log(GPR_ERROR, "Could not get IP string from asn1 octet."); result = TSI_INTERNAL_ERROR; From 06fbca03d0dba821b49f7e05860a0b43cd90d19a Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 26 Oct 2016 16:01:24 -0700 Subject: [PATCH 243/286] Don't try to build Node 7 artifacts yet --- tools/run_tests/build_artifact_node.bat | 2 +- tools/run_tests/build_artifact_node.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/run_tests/build_artifact_node.bat b/tools/run_tests/build_artifact_node.bat index 890fb31a658..2a1fe5fd92c 100644 --- a/tools/run_tests/build_artifact_node.bat +++ b/tools/run_tests/build_artifact_node.bat @@ -27,7 +27,7 @@ @rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -set node_versions=0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 7.0.0 +set node_versions=0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 set PATH=%PATH%;C:\Program Files\nodejs\;%APPDATA%\npm diff --git a/tools/run_tests/build_artifact_node.sh b/tools/run_tests/build_artifact_node.sh index 326cf296133..997085ccc93 100755 --- a/tools/run_tests/build_artifact_node.sh +++ b/tools/run_tests/build_artifact_node.sh @@ -43,7 +43,7 @@ mkdir -p artifacts npm cache clean npm update -node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 7.0.0 ) +node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 ) for version in ${node_versions[@]} do From a129adf13af4169b77e4917f08a595ee7d77a70b Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Wed, 26 Oct 2016 16:44:44 -0700 Subject: [PATCH 244/286] Remove fd from polling island before deleting it --- src/core/lib/iomgr/ev_epoll_linux.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/core/lib/iomgr/ev_epoll_linux.c b/src/core/lib/iomgr/ev_epoll_linux.c index 8381f4a63a4..4358020f9b2 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.c +++ b/src/core/lib/iomgr/ev_epoll_linux.c @@ -1711,6 +1711,12 @@ retry: "pollset_add_fd: Raced creating new polling island. pi_new: %p " "(fd: %d, pollset: %p)", (void *)pi_new, fd->fd, (void *)pollset); + + /* No need to lock 'pi_new' here since this is a new polling island and + no one has a reference to it yet */ + polling_island_remove_all_fds_locked(pi_new, true, &error); + + /* Ref and unref so that the polling island gets deleted during unref */ PI_ADD_REF(pi_new, "dance_of_destruction"); PI_UNREF(exec_ctx, pi_new, "dance_of_destruction"); goto retry; From 485a902264dc96bad9e257611662e429adc8cb75 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Wed, 26 Oct 2016 16:46:55 -0700 Subject: [PATCH 245/286] minor formatting fix --- src/core/lib/iomgr/ev_epoll_linux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/ev_epoll_linux.c b/src/core/lib/iomgr/ev_epoll_linux.c index 4358020f9b2..db51ec49392 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.c +++ b/src/core/lib/iomgr/ev_epoll_linux.c @@ -1713,7 +1713,7 @@ retry: (void *)pi_new, fd->fd, (void *)pollset); /* No need to lock 'pi_new' here since this is a new polling island and - no one has a reference to it yet */ + * no one has a reference to it yet */ polling_island_remove_all_fds_locked(pi_new, true, &error); /* Ref and unref so that the polling island gets deleted during unref */ From 8abc796ed796d1dc3489446bba66ec4a7c360809 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 26 Oct 2016 21:31:29 -0700 Subject: [PATCH 246/286] Review feedback --- .../chttp2/transport/chttp2_transport.c | 2 +- src/core/lib/iomgr/resource_quota.c | 26 +++++++------------ src/core/lib/iomgr/resource_quota.h | 19 +++++++------- .../end2end/tests/resource_quota_server.c | 5 ++-- test/core/iomgr/resource_quota_test.c | 10 ++++--- 5 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 56dd87c1cd6..57da5c5c1ea 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -2189,7 +2189,7 @@ static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, GRPC_ERROR_INT_HTTP2_ERROR, GRPC_CHTTP2_ENHANCE_YOUR_CALM)); if (n > 1) { - /* Since we cancel one stream per destructive reclaimation, if + /* Since we cancel one stream per destructive reclamation, if there are more streams left, we can immediately post a new reclaimer in case the resource quota needs to free more memory */ diff --git a/src/core/lib/iomgr/resource_quota.c b/src/core/lib/iomgr/resource_quota.c index 4f0d16ca7ee..bfc905845d6 100644 --- a/src/core/lib/iomgr/resource_quota.c +++ b/src/core/lib/iomgr/resource_quota.c @@ -89,6 +89,7 @@ static void rulist_add_head(grpc_resource_user *resource_user, resource_user->links[list].prev = (*root)->links[list].prev; resource_user->links[list].next->links[list].prev = resource_user->links[list].prev->links[list].next = resource_user; + *root = resource_user; } } @@ -105,7 +106,6 @@ static void rulist_add_tail(grpc_resource_user *resource_user, resource_user->links[list].prev = *root; resource_user->links[list].next->links[list].prev = resource_user->links[list].prev->links[list].next = resource_user; - *root = resource_user; } } @@ -114,7 +114,7 @@ static bool rulist_empty(grpc_resource_quota *resource_quota, return resource_quota->roots[list] == NULL; } -static grpc_resource_user *rulist_pop_tail(grpc_resource_quota *resource_quota, +static grpc_resource_user *rulist_pop_head(grpc_resource_quota *resource_quota, grpc_rulist list) { grpc_resource_user **root = &resource_quota->roots[list]; grpc_resource_user *resource_user = *root; @@ -186,7 +186,7 @@ static void rq_step_sched(grpc_exec_ctx *exec_ctx, static bool rq_alloc(grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota) { grpc_resource_user *resource_user; - while ((resource_user = rulist_pop_tail(resource_quota, + while ((resource_user = rulist_pop_head(resource_quota, GRPC_RULIST_AWAITING_ALLOCATION))) { gpr_mu_lock(&resource_user->mu); if (resource_user->free_pool < 0 && @@ -209,7 +209,7 @@ static bool rq_alloc(grpc_exec_ctx *exec_ctx, grpc_exec_ctx_enqueue_list(exec_ctx, &resource_user->on_allocated, NULL); gpr_mu_unlock(&resource_user->mu); } else { - rulist_add_tail(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); + rulist_add_head(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); gpr_mu_unlock(&resource_user->mu); return false; } @@ -221,7 +221,7 @@ static bool rq_alloc(grpc_exec_ctx *exec_ctx, static bool rq_reclaim_from_per_user_free_pool( grpc_exec_ctx *exec_ctx, grpc_resource_quota *resource_quota) { grpc_resource_user *resource_user; - while ((resource_user = rulist_pop_tail(resource_quota, + while ((resource_user = rulist_pop_head(resource_quota, GRPC_RULIST_NON_EMPTY_FREE_POOL))) { gpr_mu_lock(&resource_user->mu); if (resource_user->free_pool > 0) { @@ -249,7 +249,7 @@ static bool rq_reclaim(grpc_exec_ctx *exec_ctx, if (resource_quota->reclaiming) return true; grpc_rulist list = destructive ? GRPC_RULIST_RECLAIMER_DESTRUCTIVE : GRPC_RULIST_RECLAIMER_BENIGN; - grpc_resource_user *resource_user = rulist_pop_tail(resource_quota, list); + grpc_resource_user *resource_user = rulist_pop_head(resource_quota, list); if (resource_user == NULL) return false; if (grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, "RQ %s %s: initiate %s reclamation", @@ -325,7 +325,7 @@ static void ru_allocate(grpc_exec_ctx *exec_ctx, void *ru, grpc_error *error) { GRPC_RULIST_AWAITING_ALLOCATION)) { rq_step_sched(exec_ctx, resource_user->resource_quota); } - rulist_add_head(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); + rulist_add_tail(resource_user, GRPC_RULIST_AWAITING_ALLOCATION); } static void ru_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *ru, @@ -337,7 +337,7 @@ static void ru_add_to_free_pool(grpc_exec_ctx *exec_ctx, void *ru, GRPC_RULIST_NON_EMPTY_FREE_POOL)) { rq_step_sched(exec_ctx, resource_user->resource_quota); } - rulist_add_head(resource_user, GRPC_RULIST_NON_EMPTY_FREE_POOL); + rulist_add_tail(resource_user, GRPC_RULIST_NON_EMPTY_FREE_POOL); } static void ru_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *ru, @@ -351,7 +351,7 @@ static void ru_post_benign_reclaimer(grpc_exec_ctx *exec_ctx, void *ru, GRPC_RULIST_RECLAIMER_BENIGN)) { rq_step_sched(exec_ctx, resource_user->resource_quota); } - rulist_add_head(resource_user, GRPC_RULIST_RECLAIMER_BENIGN); + rulist_add_tail(resource_user, GRPC_RULIST_RECLAIMER_BENIGN); } static void ru_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *ru, @@ -367,7 +367,7 @@ static void ru_post_destructive_reclaimer(grpc_exec_ctx *exec_ctx, void *ru, GRPC_RULIST_RECLAIMER_DESTRUCTIVE)) { rq_step_sched(exec_ctx, resource_user->resource_quota); } - rulist_add_head(resource_user, GRPC_RULIST_RECLAIMER_DESTRUCTIVE); + rulist_add_tail(resource_user, GRPC_RULIST_RECLAIMER_DESTRUCTIVE); } static void ru_destroy(grpc_exec_ctx *exec_ctx, void *ru, grpc_error *error) { @@ -563,9 +563,6 @@ void grpc_resource_user_init(grpc_resource_user *resource_user, for (int i = 0; i < GRPC_RULIST_COUNT; i++) { resource_user->links[i].next = resource_user->links[i].prev = NULL; } -#ifndef NDEBUG - resource_user->asan_canary = gpr_malloc(1); -#endif if (name != NULL) { resource_user->name = gpr_strdup(name); } else { @@ -592,9 +589,6 @@ void grpc_resource_user_shutdown(grpc_exec_ctx *exec_ctx, void grpc_resource_user_destroy(grpc_exec_ctx *exec_ctx, grpc_resource_user *resource_user) { -#ifndef NDEBUG - gpr_free(resource_user->asan_canary); -#endif grpc_resource_quota_internal_unref(exec_ctx, resource_user->resource_quota); gpr_mu_destroy(&resource_user->mu); gpr_free(resource_user->name); diff --git a/src/core/lib/iomgr/resource_quota.h b/src/core/lib/iomgr/resource_quota.h index c15cb68310b..6dfac55f88c 100644 --- a/src/core/lib/iomgr/resource_quota.h +++ b/src/core/lib/iomgr/resource_quota.h @@ -49,7 +49,8 @@ resource constrained, grpc_resource_user instances are asked (in turn) to free up whatever they can so that the system as a whole can make progress. - There are three kinds of reclamation that take place: + There are three kinds of reclamation that take place, in order of increasing + invasiveness: - an internal reclamation, where cached resource at the resource user level is returned to the quota - a benign reclamation phase, whereby resources that are in use but are not @@ -58,9 +59,14 @@ make progress may be enacted so that at least one part of the system can complete. - These reclamations are tried in priority order, and only one reclamation - is outstanding for a quota at any given time (meaning that if a destructive - reclamation makes progress, we may follow up with a benign reclamation). + Only one reclamation will be outstanding for a given quota at a given time. + On each reclamation attempt, the kinds of reclamation are tried in order of + increasing invasiveness, stopping at the first one that succeeds. Thus, on a + given reclamation attempt, if internal and benign reclamation both fail, it + will wind up doing a destructive reclamation. However, the next reclamation + attempt may then be able to get what it needs via internal or benign + reclamation, due to resources that may have been freed up by the destructive + reclamation in the previous attempt. Future work will be to expose the current resource pressure so that back pressure can be applied to avoid reclamation phases starting. @@ -112,11 +118,6 @@ struct grpc_resource_user { lock */ grpc_closure add_to_free_pool_closure; -#ifndef NDEBUG - /* Canary object to detect leaked resource users with ASAN */ - void *asan_canary; -#endif - gpr_mu mu; /* Total allocated memory outstanding by this resource user in bytes; always positive */ diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c index 6170444373c..f594db3fbb8 100644 --- a/test/core/end2end/tests/resource_quota_server.c +++ b/test/core/end2end/tests/resource_quota_server.c @@ -339,9 +339,8 @@ void resource_quota_server(grpc_end2end_test_config config) { "Done. %d total calls: %d cancelled at server, %d cancelled at client.", NUM_CALLS, cancelled_calls_on_server, cancelled_calls_on_client); - /* The server call may be cancelled after it's received it's status, but - * before the client does: this means that we should see strictly more - * failures on the client than on the server */ + /* The call may be cancelled after the server has sent its status but before + * the client has received it. */ GPR_ASSERT(cancelled_calls_on_client >= cancelled_calls_on_server); /* However, we shouldn't see radically more... 0.9 is a guessed bound on what * we'd want that ratio to be... to at least trigger some investigation should diff --git a/test/core/iomgr/resource_quota_test.c b/test/core/iomgr/resource_quota_test.c index 5e2f9f8359f..34dee1aee19 100644 --- a/test/core/iomgr/resource_quota_test.c +++ b/test/core/iomgr/resource_quota_test.c @@ -553,9 +553,13 @@ static void test_resource_user_stays_allocated_until_memory_released(void) { static void test_resource_user_stays_allocated_and_reclaimers_unrun_until_memory_released( void) { - gpr_log(GPR_INFO, "** test_pools_merged_on_resource_user_deletion **"); - grpc_resource_quota *q = - grpc_resource_quota_create("test_pools_merged_on_resource_user_deletion"); + gpr_log(GPR_INFO, + "** " + "test_resource_user_stays_allocated_and_reclaimers_unrun_until_" + "memory_released **"); + grpc_resource_quota *q = grpc_resource_quota_create( + "test_resource_user_stays_allocated_and_reclaimers_unrun_until_memory_" + "released"); grpc_resource_quota_resize(q, 1024); for (int i = 0; i < 10; i++) { grpc_resource_user usr; From 1a47fd02f63671f246e146b7cb08839a4126ccea Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Thu, 27 Oct 2016 14:48:32 +0200 Subject: [PATCH 247/286] lazy initialize streamingResponseCallFinishedTcs --- src/csharp/Grpc.Core/Internal/AsyncCall.cs | 17 +++++++++-------- .../Grpc.Core/Internal/ClientResponseStream.cs | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/csharp/Grpc.Core/Internal/AsyncCall.cs b/src/csharp/Grpc.Core/Internal/AsyncCall.cs index 49d0a111efa..5e61e9ec129 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCall.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCall.cs @@ -52,9 +52,8 @@ namespace Grpc.Core.Internal // Completion of a pending unary response if not null. TaskCompletionSource unaryResponseTcs; - // TODO(jtattermusch): this field doesn't need to be initialized for unary response calls. - // Indicates that response streaming call has finished. - TaskCompletionSource streamingCallFinishedTcs = new TaskCompletionSource(); + // Completion of a streaming response call if not null. + TaskCompletionSource streamingResponseCallFinishedTcs; // TODO(jtattermusch): this field could be lazy-initialized (only if someone requests the response headers). // Response headers set here once received. @@ -198,6 +197,7 @@ namespace Grpc.Core.Internal byte[] payload = UnsafeSerialize(msg); + streamingResponseCallFinishedTcs = new TaskCompletionSource(); using (var metadataArray = MetadataArraySafeHandle.Create(details.Options.Headers)) { call.StartServerStreaming(HandleFinished, payload, metadataArray, GetWriteFlagsForCall()); @@ -219,6 +219,7 @@ namespace Grpc.Core.Internal Initialize(details.Channel.CompletionQueue); + streamingResponseCallFinishedTcs = new TaskCompletionSource(); using (var metadataArray = MetadataArraySafeHandle.Create(details.Options.Headers)) { call.StartDuplexStreaming(HandleFinished, metadataArray); @@ -276,13 +277,13 @@ namespace Grpc.Core.Internal } /// - /// Get the task that completes once if streaming call finishes with ok status and throws RpcException with given status otherwise. + /// Get the task that completes once if streaming response call finishes with ok status and throws RpcException with given status otherwise. /// - public Task StreamingCallFinishedTask + public Task StreamingResponseCallFinishedTask { get { - return streamingCallFinishedTcs.Task; + return streamingResponseCallFinishedTcs.Task; } } @@ -529,11 +530,11 @@ namespace Grpc.Core.Internal var status = receivedStatus.Status; if (status.StatusCode != StatusCode.OK) { - streamingCallFinishedTcs.SetException(new RpcException(status)); + streamingResponseCallFinishedTcs.SetException(new RpcException(status)); return; } - streamingCallFinishedTcs.SetResult(null); + streamingResponseCallFinishedTcs.SetResult(null); } } } diff --git a/src/csharp/Grpc.Core/Internal/ClientResponseStream.cs b/src/csharp/Grpc.Core/Internal/ClientResponseStream.cs index ad9423ff58c..65bf60269a5 100644 --- a/src/csharp/Grpc.Core/Internal/ClientResponseStream.cs +++ b/src/csharp/Grpc.Core/Internal/ClientResponseStream.cs @@ -73,7 +73,7 @@ namespace Grpc.Core.Internal if (result == null) { - await call.StreamingCallFinishedTask.ConfigureAwait(false); + await call.StreamingResponseCallFinishedTask.ConfigureAwait(false); return false; } return true; From 423efd5882228ba9d059811c95093cc757b8040f Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 27 Oct 2016 08:08:03 -0700 Subject: [PATCH 248/286] Update comment --- test/core/end2end/tests/resource_quota_server.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c index f594db3fbb8..76374d16a56 100644 --- a/test/core/end2end/tests/resource_quota_server.c +++ b/test/core/end2end/tests/resource_quota_server.c @@ -340,7 +340,8 @@ void resource_quota_server(grpc_end2end_test_config config) { NUM_CALLS, cancelled_calls_on_server, cancelled_calls_on_client); /* The call may be cancelled after the server has sent its status but before - * the client has received it. */ + * the client has received it. This means that we should see strictly more + * failures on the client than on the server. */ GPR_ASSERT(cancelled_calls_on_client >= cancelled_calls_on_server); /* However, we shouldn't see radically more... 0.9 is a guessed bound on what * we'd want that ratio to be... to at least trigger some investigation should From 6476170c4bf90c8e29e9d26049f0cffe15c51709 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 27 Oct 2016 10:16:11 -0700 Subject: [PATCH 249/286] Mark disappearing_server as flaky: this was always so, but is more pronounced now - and will be fixed with retries --- test/core/end2end/gen_build_yaml.py | 10 +++--- tools/run_tests/tests.json | 50 ++++++++++++++--------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index ade818db983..bdb3874c210 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -84,8 +84,8 @@ END2END_FIXTURES = { TestOptions = collections.namedtuple( 'TestOptions', - 'needs_fullstack needs_dns proxyable secure traceable cpu_cost exclude_iomgrs large_writes') -default_test_options = TestOptions(False, False, True, False, True, 1.0, [], False) + 'needs_fullstack needs_dns proxyable secure traceable cpu_cost exclude_iomgrs large_writes flaky') +default_test_options = TestOptions(False, False, True, False, True, 1.0, [], False, False) connectivity_test_options = default_test_options._replace(needs_fullstack=True) LOWCPU = 0.1 @@ -108,7 +108,7 @@ END2END_TESTS = { proxyable=False, cpu_cost=LOWCPU, exclude_iomgrs=['uv']), 'default_host': default_test_options._replace(needs_fullstack=True, needs_dns=True), - 'disappearing_server': connectivity_test_options, + 'disappearing_server': connectivity_test_options._replace(flaky=True), 'empty_batch': default_test_options, 'filter_causes_close': default_test_options, 'filter_call_init_fails': default_test_options, @@ -263,7 +263,7 @@ def main(): 'ci_platforms': (END2END_FIXTURES[f].platforms if END2END_FIXTURES[f].ci_mac else without( END2END_FIXTURES[f].platforms, 'mac')), - 'flaky': False, + 'flaky': END2END_TESTS[t].flaky, 'language': 'c', 'cpu_cost': END2END_TESTS[t].cpu_cost, } @@ -280,7 +280,7 @@ def main(): 'ci_platforms': (END2END_FIXTURES[f].platforms if END2END_FIXTURES[f].ci_mac else without( END2END_FIXTURES[f].platforms, 'mac')), - 'flaky': False, + 'flaky': END2END_TESTS[t].flaky, 'language': 'c', 'cpu_cost': END2END_TESTS[t].cpu_cost, } diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index bc357d27001..31386c0ad61 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -5134,7 +5134,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_census_test", "platforms": [ @@ -6171,7 +6171,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_compress_test", "platforms": [ @@ -7208,7 +7208,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_fake_resolver_test", "platforms": [ @@ -8232,7 +8232,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_fakesec_test", "platforms": [ @@ -10157,7 +10157,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_full_test", "platforms": [ @@ -11143,7 +11143,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_full+pipe_test", "platforms": [ @@ -12049,7 +12049,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_full+trace_test", "platforms": [ @@ -13051,7 +13051,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_http_proxy_test", "platforms": [ @@ -14120,7 +14120,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_load_reporting_test", "platforms": [ @@ -15168,7 +15168,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_oauth2_test", "platforms": [ @@ -16200,7 +16200,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_proxy_test", "platforms": [ @@ -20011,7 +20011,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_ssl_test", "platforms": [ @@ -21048,7 +21048,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_ssl_cert_test", "platforms": [ @@ -22048,7 +22048,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_ssl_proxy_test", "platforms": [ @@ -22973,7 +22973,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_uds_test", "platforms": [ @@ -23986,7 +23986,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_census_nosec_test", "platforms": [ @@ -25000,7 +25000,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_compress_nosec_test", "platforms": [ @@ -26014,7 +26014,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_fake_resolver_nosec_test", "platforms": [ @@ -27925,7 +27925,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_full_nosec_test", "platforms": [ @@ -28892,7 +28892,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_full+pipe_nosec_test", "platforms": [ @@ -29775,7 +29775,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_full+trace_nosec_test", "platforms": [ @@ -30753,7 +30753,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_http_proxy_nosec_test", "platforms": [ @@ -31799,7 +31799,7 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_load_reporting_nosec_test", "platforms": [ @@ -32775,7 +32775,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_proxy_nosec_test", "platforms": [ @@ -36465,7 +36465,7 @@ "exclude_iomgrs": [ "uv" ], - "flaky": false, + "flaky": true, "language": "c", "name": "h2_uds_nosec_test", "platforms": [ From 419934af6f2a92ead4928f1d256a3e807dd60ac6 Mon Sep 17 00:00:00 2001 From: Alex Polcyn Date: Thu, 27 Oct 2016 17:40:56 +0000 Subject: [PATCH 250/286] increase max thread pool size in benchmarks and fix shutdown ordering --- src/ruby/lib/grpc/generic/rpc_server.rb | 5 +++-- src/ruby/qps/server.rb | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ruby/lib/grpc/generic/rpc_server.rb b/src/ruby/lib/grpc/generic/rpc_server.rb index 7dbcb7d4796..1e70aba4037 100644 --- a/src/ruby/lib/grpc/generic/rpc_server.rb +++ b/src/ruby/lib/grpc/generic/rpc_server.rb @@ -54,6 +54,7 @@ module GRPC DEFAULT_MAX_WAITING_REQUESTS = 60 # Default poll period is 1s + # Used for grpc server shutdown and thread pool shutdown timeouts DEFAULT_POLL_PERIOD = 1 # Signal check period is 0.25s @@ -124,10 +125,10 @@ module GRPC return if @running_state != :running transition_running_state(:stopping) end + @pool.shutdown + @pool.wait_for_termination(@poll_period) deadline = from_relative_time(@poll_period) @server.close(deadline) - @pool.shutdown - @pool.wait_for_termination end def running_state diff --git a/src/ruby/qps/server.rb b/src/ruby/qps/server.rb index d0c2073dd1e..6175855cd94 100644 --- a/src/ruby/qps/server.rb +++ b/src/ruby/qps/server.rb @@ -63,7 +63,9 @@ class BenchmarkServer cred = :this_port_is_insecure end # Make sure server can handle the large number of calls in benchmarks - @server = GRPC::RpcServer.new(pool_size: 100, max_waiting_requests: 100) + # TODO: @apolcyn, if scenario config increases total outstanding + # calls then will need to increase the pool size too + @server = GRPC::RpcServer.new(pool_size: 1024, max_waiting_requests: 1024) @port = @server.add_http2_port("0.0.0.0:" + port.to_s, cred) @server.handle(BenchmarkServiceImpl.new) @start_time = Time.now From 24392f375f202a7001063488bdead6fdb5c86381 Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Thu, 27 Oct 2016 11:29:33 -0700 Subject: [PATCH 251/286] MAC and FreeBSD do not have IP_PKTINFO as a meaningful setsockopt --- src/core/lib/iomgr/port.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h index c0bb3b5a23e..f1897bb91f2 100644 --- a/src/core/lib/iomgr/port.h +++ b/src/core/lib/iomgr/port.h @@ -90,7 +90,6 @@ #define GRPC_POSIX_SOCKETUTILS #endif #elif defined(GPR_APPLE) -#define GRPC_HAVE_IP_PKTINFO 1 #define GRPC_HAVE_SO_NOSIGPIPE 1 #define GRPC_HAVE_UNIX_SOCKET 1 #define GRPC_MSG_IOVLEN_TYPE int @@ -102,7 +101,6 @@ #define GRPC_TIMER_USE_GENERIC 1 #elif defined(GPR_FREEBSD) #define GRPC_HAVE_IPV6_RECVPKTINFO 1 -#define GRPC_HAVE_IP_PKTINFO 1 #define GRPC_HAVE_SO_NOSIGPIPE 1 #define GRPC_HAVE_UNIX_SOCKET 1 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 From 50cc196a43155dafd01c12982e9c5f9c3f9d3ea7 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 27 Oct 2016 11:32:21 -0700 Subject: [PATCH 252/286] npm cache clean is not a good idea in the artifact build --- tools/run_tests/build_artifact_node.bat | 1 - tools/run_tests/build_artifact_node.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/tools/run_tests/build_artifact_node.bat b/tools/run_tests/build_artifact_node.bat index 2a1fe5fd92c..57d55ef19ec 100644 --- a/tools/run_tests/build_artifact_node.bat +++ b/tools/run_tests/build_artifact_node.bat @@ -33,7 +33,6 @@ set PATH=%PATH%;C:\Program Files\nodejs\;%APPDATA%\npm del /f /q BUILD || rmdir build /s /q -call npm cache clean || goto :error call npm update || goto :error mkdir artifacts diff --git a/tools/run_tests/build_artifact_node.sh b/tools/run_tests/build_artifact_node.sh index 997085ccc93..9d06472aa49 100755 --- a/tools/run_tests/build_artifact_node.sh +++ b/tools/run_tests/build_artifact_node.sh @@ -40,7 +40,6 @@ rm -rf build || true mkdir -p artifacts -npm cache clean npm update node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 ) From 79a1375f2a700784999ceed627e3131d169056cf Mon Sep 17 00:00:00 2001 From: Alexander Polcyn Date: Thu, 27 Oct 2016 14:02:38 -0700 Subject: [PATCH 253/286] fix type comparison in ruby plugin --- src/compiler/ruby_generator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index 14854cfa4ac..93bda92c918 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -133,7 +133,7 @@ grpc::string PackageToModule(const grpc::string& name) { grpc::string result; result.reserve(name.size()); - for (int i = 0; i < name.size(); i++) { + for (grpc::string::size_type i = 0; i < name.size(); i++) { if (name[i] == '_') { next_upper = true; } else { From 12e5775bd00b4b55f9a93d73de0f8b53f57eda54 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 27 Oct 2016 14:30:41 -0700 Subject: [PATCH 254/286] Disable Nagle's algorithm in libuv endpoints --- src/core/lib/iomgr/tcp_uv.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index 05d6eeb2408..0dd4beaae18 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -315,6 +315,8 @@ grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, char *peer_string) { gpr_log(GPR_DEBUG, "Creating TCP endpoint %p", tcp); } + uv_tcp_nodelay(handle, 1); + memset(tcp, 0, sizeof(grpc_tcp)); tcp->base.vtable = &vtable; tcp->handle = handle; From 04d2829fe60adbcead1efe1ff8b5da70898329d0 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 27 Oct 2016 14:36:57 -0700 Subject: [PATCH 255/286] Add comment --- src/core/lib/iomgr/tcp_uv.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index 0dd4beaae18..3860fe3e9b5 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -315,6 +315,7 @@ grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, char *peer_string) { gpr_log(GPR_DEBUG, "Creating TCP endpoint %p", tcp); } + /* Disable Nagle's Algorithm */ uv_tcp_nodelay(handle, 1); memset(tcp, 0, sizeof(grpc_tcp)); From 86cb138ee9c852839dfd33529e8634ffe09d896e Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 27 Oct 2016 15:29:49 -0700 Subject: [PATCH 256/286] Handle failed calls in sync client --- test/cpp/qps/client_sync.cc | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc index 0ccf4e270b6..f61e80d76be 100644 --- a/test/cpp/qps/client_sync.cc +++ b/test/cpp/qps/client_sync.cc @@ -130,11 +130,8 @@ class SynchronousUnaryClient GRPC_FINAL : public SynchronousClient { grpc::Status s = stub->UnaryCall(&context, request_, &responses_[thread_idx]); entry->set_value((UsageTimer::Now() - start) * 1e9); - if (!s.ok()) { - gpr_log(GPR_ERROR, "RPC error: %d: %s", s.error_code(), - s.error_message().c_str()); - } - return s.ok(); + entry->set_status(s.error_code()); + return true; } }; From 0f7eb30aecc279f439edbc8d12ea0da556865db1 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 27 Oct 2016 15:30:21 -0700 Subject: [PATCH 257/286] Handle calls that are started after transport closure --- .../ext/transport/chttp2/transport/chttp2_transport.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 57da5c5c1ea..4a9f806354c 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -1022,9 +1022,14 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op, } if (!s->write_closed) { if (t->is_client) { - GPR_ASSERT(s->id == 0); - grpc_chttp2_list_add_waiting_for_concurrency(t, s); - maybe_start_some_streams(exec_ctx, t); + if (!t->closed) { + GPR_ASSERT(s->id == 0); + grpc_chttp2_list_add_waiting_for_concurrency(t, s); + maybe_start_some_streams(exec_ctx, t); + } else { + grpc_chttp2_cancel_stream(exec_ctx, t, s, + GRPC_ERROR_CREATE("Transport closed")); + } } else { GPR_ASSERT(s->id != 0); grpc_chttp2_become_writable(exec_ctx, t, s, true, From 7a4089769db7af2d75a6e09708896746a3cc08bd Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 27 Oct 2016 16:50:57 -0700 Subject: [PATCH 258/286] Fix memory leak --- src/core/lib/surface/server.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c index be16162e7ff..3a90308058c 100644 --- a/src/core/lib/surface/server.c +++ b/src/core/lib/surface/server.c @@ -842,6 +842,7 @@ static void accept_stream(grpc_exec_ctx *exec_ctx, void *cd, grpc_call_stack_element(grpc_call_get_call_stack(call), 0); if (error != GRPC_ERROR_NONE) { got_initial_metadata(exec_ctx, elem, error); + GRPC_ERROR_UNREF(error); return; } call_data *calld = elem->call_data; From 693d3949b420aac2f4e9956eedaf4296b64c689f Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 27 Oct 2016 16:51:25 -0700 Subject: [PATCH 259/286] Fix potential use-after-free: connected subchannel gets destroyed after its been picked by an lbpolicy --- src/core/ext/client_channel/client_channel.c | 4 ++++ src/core/ext/client_channel/subchannel.c | 3 ++- src/core/ext/client_channel/subchannel.h | 2 +- src/core/ext/lb_policy/pick_first/pick_first.c | 6 +++--- src/core/ext/lb_policy/round_robin/round_robin.c | 13 +++++++++---- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/core/ext/client_channel/client_channel.c b/src/core/ext/client_channel/client_channel.c index 80b4f048c2f..ff773ac3348 100644 --- a/src/core/ext/client_channel/client_channel.c +++ b/src/core/ext/client_channel/client_channel.c @@ -1022,6 +1022,10 @@ static void cc_destroy_call_elem(grpc_exec_ctx *exec_ctx, GPR_ASSERT(calld->creation_phase == GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING); gpr_mu_destroy(&calld->mu); GPR_ASSERT(calld->waiting_ops_count == 0); + if (calld->connected_subchannel != NULL) { + GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, calld->connected_subchannel, + "picked"); + } gpr_free(calld->waiting_ops); gpr_free(and_free_memory); } diff --git a/src/core/ext/client_channel/subchannel.c b/src/core/ext/client_channel/subchannel.c index ab6aede23ac..789966cb693 100644 --- a/src/core/ext/client_channel/subchannel.c +++ b/src/core/ext/client_channel/subchannel.c @@ -183,9 +183,10 @@ static void connection_destroy(grpc_exec_ctx *exec_ctx, void *arg, gpr_free(c); } -void grpc_connected_subchannel_ref( +grpc_connected_subchannel *grpc_connected_subchannel_ref( grpc_connected_subchannel *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) { GRPC_CHANNEL_STACK_REF(CHANNEL_STACK_FROM_CONNECTION(c), REF_REASON); + return c; } void grpc_connected_subchannel_unref(grpc_exec_ctx *exec_ctx, diff --git a/src/core/ext/client_channel/subchannel.h b/src/core/ext/client_channel/subchannel.h index 56520740741..93bd72d20d5 100644 --- a/src/core/ext/client_channel/subchannel.h +++ b/src/core/ext/client_channel/subchannel.h @@ -97,7 +97,7 @@ grpc_subchannel *grpc_subchannel_weak_ref( void grpc_subchannel_weak_unref(grpc_exec_ctx *exec_ctx, grpc_subchannel *channel GRPC_SUBCHANNEL_REF_EXTRA_ARGS); -void grpc_connected_subchannel_ref( +grpc_connected_subchannel *grpc_connected_subchannel_ref( grpc_connected_subchannel *channel GRPC_SUBCHANNEL_REF_EXTRA_ARGS); void grpc_connected_subchannel_unref(grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *channel diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c index 5d3433df74a..ac3c6a305ac 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -209,7 +209,7 @@ static int pf_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, /* Check atomically for a selected channel */ grpc_connected_subchannel *selected = GET_SELECTED(p); if (selected != NULL) { - *target = selected; + *target = GRPC_CONNECTED_SUBCHANNEL_REF(selected, "picked"); return 1; } @@ -218,7 +218,7 @@ static int pf_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, selected = GET_SELECTED(p); if (selected) { gpr_mu_unlock(&p->mu); - *target = selected; + *target = GRPC_CONNECTED_SUBCHANNEL_REF(selected, "picked"); return 1; } else { if (!p->started_picking) { @@ -310,7 +310,7 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, /* update any calls that were waiting for a pick */ while ((pp = p->pending_picks)) { p->pending_picks = pp->next; - *pp->target = selected; + *pp->target = GRPC_CONNECTED_SUBCHANNEL_REF(selected, "picked"); grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, NULL); gpr_free(pp); } diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c index c0743b00e80..37a9b18b970 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -397,7 +397,9 @@ static int rr_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, gpr_mu_lock(&p->mu); if ((selected = peek_next_connected_locked(p))) { /* readily available, report right away */ - *target = grpc_subchannel_get_connected_subchannel(selected->subchannel); + *target = GRPC_CONNECTED_SUBCHANNEL_REF( + grpc_subchannel_get_connected_subchannel(selected->subchannel), + "picked"); if (user_data != NULL) { *user_data = selected->user_data; @@ -463,8 +465,9 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, while ((pp = p->pending_picks)) { p->pending_picks = pp->next; - *pp->target = - grpc_subchannel_get_connected_subchannel(selected->subchannel); + *pp->target = GRPC_CONNECTED_SUBCHANNEL_REF( + grpc_subchannel_get_connected_subchannel(selected->subchannel), + "picked"); if (pp->user_data != NULL) { *pp->user_data = selected->user_data; } @@ -578,7 +581,9 @@ static void rr_ping_one(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, gpr_mu_lock(&p->mu); if ((selected = peek_next_connected_locked(p))) { gpr_mu_unlock(&p->mu); - target = grpc_subchannel_get_connected_subchannel(selected->subchannel); + target = GRPC_CONNECTED_SUBCHANNEL_REF( + grpc_subchannel_get_connected_subchannel(selected->subchannel), + "picked"); grpc_connected_subchannel_ping(exec_ctx, target, closure); } else { gpr_mu_unlock(&p->mu); From ca5cdf454c246849991bc6561c9143ca0b270675 Mon Sep 17 00:00:00 2001 From: Noah Eisen Date: Thu, 27 Oct 2016 18:01:37 -0700 Subject: [PATCH 260/286] Add unimplemented_service test case for cpp interop client --- test/cpp/interop/client.cc | 9 +++++++-- test/cpp/interop/interop_client.cc | 26 ++++++++++++++++++++++++++ test/cpp/interop/interop_client.h | 2 ++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc index 4197ba8bab2..9e0e502d204 100644 --- a/test/cpp/interop/client.cc +++ b/test/cpp/interop/client.cc @@ -80,7 +80,8 @@ DEFINE_string(test_case, "large_unary", "slow client consumer;\n" "status_code_and_message: verify status code & message;\n" "timeout_on_sleeping_server: deadline exceeds on stream;\n" - "unimplemented_method: client calls an unimplemented method;\n"); + "unimplemented_method: client calls an unimplemented method;\n" + "unimplemented_service: client calls an unimplemented service;\n"); DEFINE_string(default_service_account, "", "Email of GCE default service account"); DEFINE_string(service_account_key_file, "", @@ -152,6 +153,8 @@ int main(int argc, char** argv) { client.DoCustomMetadata(); } else if (FLAGS_test_case == "unimplemented_method") { client.DoUnimplementedMethod(); + } else if (FLAGS_test_case == "unimplemented_service") { + client.DoUnimplementedService(); } else if (FLAGS_test_case == "cacheable_unary") { client.DoCacheableUnary(); } else if (FLAGS_test_case == "all") { @@ -172,6 +175,7 @@ int main(int argc, char** argv) { client.DoStatusWithMessage(); client.DoCustomMetadata(); client.DoUnimplementedMethod(); + client.DoUnimplementedService(); client.DoCacheableUnary(); // service_account_creds and jwt_token_creds can only run with ssl. if (FLAGS_use_tls) { @@ -207,7 +211,8 @@ int main(int argc, char** argv) { "server_streaming", "status_code_and_message", "timeout_on_sleeping_server", - "unimplemented_method"}; + "unimplemented_method", + "unimplemented_service"}; char* joined_testcases = gpr_strjoin_sep(testcases, GPR_ARRAY_SIZE(testcases), "\n", NULL); diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc index 1668589cc4a..d0dd0718aab 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -107,6 +107,11 @@ TestService::Stub* InteropClient::ServiceStub::Get() { return stub_.get(); } +UnimplementedService::Stub* +InteropClient::ServiceStub::GetUnimplementedServiceStub() { + return UnimplementedService::NewStub(channel_).get(); +} + void InteropClient::ServiceStub::Reset(std::shared_ptr channel) { channel_ = channel; @@ -1002,6 +1007,27 @@ bool InteropClient::DoCustomMetadata() { return true; } +bool InteropClient::DoUnimplementedService() { + gpr_log(GPR_DEBUG, "Sending a request for an unimplemented service..."); + + Empty request = Empty::default_instance(); + Empty response = Empty::default_instance(); + ClientContext context; + + UnimplementedService::Stub* stub = + serviceStub_.GetUnimplementedServiceStub(); + + Status s = + stub->UnimplementedCall(&context, request, &response); + + if (!AssertStatusCode(s, StatusCode::UNIMPLEMENTED)) { + return false; + } + + gpr_log(GPR_DEBUG, "unimplemented service done."); + return true; +} + bool InteropClient::DoUnimplementedMethod() { gpr_log(GPR_DEBUG, "Sending a request for an unimplemented rpc..."); diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h index 0a96e7734d8..7ec7ebee209 100644 --- a/test/cpp/interop/interop_client.h +++ b/test/cpp/interop/interop_client.h @@ -80,6 +80,7 @@ class InteropClient { bool DoStatusWithMessage(); bool DoCustomMetadata(); bool DoUnimplementedMethod(); + bool DoUnimplementedService(); bool DoCacheableUnary(); // Auth tests. // username is a string containing the user email @@ -100,6 +101,7 @@ class InteropClient { ServiceStub(std::shared_ptr channel, bool new_stub_every_call); TestService::Stub* Get(); + UnimplementedService::Stub* GetUnimplementedServiceStub(); void Reset(std::shared_ptr channel); From 7fc1d4e8d7c66b506e4b9e39ebac4dfd6001b4c1 Mon Sep 17 00:00:00 2001 From: Noah Eisen Date: Thu, 27 Oct 2016 18:17:03 -0700 Subject: [PATCH 261/286] Update infrastructure to call new unimplemented_service interop test --- tools/run_tests/run_interop_tests.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 0c6efda1f47..c73de6b7174 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -64,7 +64,9 @@ _SKIP_SERVER_COMPRESSION = ['server_compressed_unary', _SKIP_COMPRESSION = _SKIP_CLIENT_COMPRESSION + _SKIP_SERVER_COMPRESSION -_SKIP_ADVANCED_GO = ['custom_metadata', 'unimplemented_method'] +_SKIP_ADVANCED_GO = ['custom_metadata', + 'unimplemented_method', + 'unimplemented_service'] _SKIP_ADVANCED = _SKIP_ADVANCED_GO + ['status_code_and_message'] @@ -416,7 +418,8 @@ _TEST_CASES = ['large_unary', 'empty_unary', 'ping_pong', 'timeout_on_sleeping_server', 'custom_metadata', 'status_code_and_message', 'unimplemented_method', 'client_compressed_unary', 'server_compressed_unary', - 'client_compressed_streaming', 'server_compressed_streaming'] + 'client_compressed_streaming', 'server_compressed_streaming', + 'unimplemented_service'] _AUTH_TEST_CASES = ['compute_engine_creds', 'jwt_token_creds', 'oauth2_auth_token', 'per_rpc_creds'] From 287b760e9779270f675959eeded2ace029354217 Mon Sep 17 00:00:00 2001 From: Alexander Polcyn Date: Thu, 27 Oct 2016 19:15:14 -0700 Subject: [PATCH 262/286] revert change to shutdown ordering, but keep timer --- src/ruby/lib/grpc/generic/rpc_server.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ruby/lib/grpc/generic/rpc_server.rb b/src/ruby/lib/grpc/generic/rpc_server.rb index 1e70aba4037..57f99c8ce69 100644 --- a/src/ruby/lib/grpc/generic/rpc_server.rb +++ b/src/ruby/lib/grpc/generic/rpc_server.rb @@ -125,10 +125,10 @@ module GRPC return if @running_state != :running transition_running_state(:stopping) end - @pool.shutdown - @pool.wait_for_termination(@poll_period) deadline = from_relative_time(@poll_period) @server.close(deadline) + @pool.shutdown + @pool.wait_for_termination(@poll_period) end def running_state From 4407a948b156d3590465b314d6f94d90881e6e88 Mon Sep 17 00:00:00 2001 From: Stanislav Pavlovichev Date: Thu, 27 Oct 2016 10:35:08 +0700 Subject: [PATCH 263/286] phpdoc types --- src/php/lib/Grpc/BaseStub.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/php/lib/Grpc/BaseStub.php b/src/php/lib/Grpc/BaseStub.php index 8a7f6572a62..36d94cae2c9 100644 --- a/src/php/lib/Grpc/BaseStub.php +++ b/src/php/lib/Grpc/BaseStub.php @@ -116,7 +116,7 @@ class BaseStub } /** - * @param $timeout in microseconds + * @param int $timeout in microseconds * * @return bool true if channel is ready * @throw Exception if channel is in FATAL_ERROR state @@ -189,7 +189,7 @@ class BaseStub /** * validate and normalize the metadata array. * - * @param $metadata The metadata map + * @param array $metadata The metadata map * * @return $metadata Validated and key-normalized metadata map * @throw InvalidArgumentException if key contains invalid characters @@ -216,8 +216,8 @@ class BaseStub * Call a remote method that takes a single argument and has a * single output. * - * @param string $method The name of the method to call - * @param $argument The argument to the method + * @param string $method The name of the method to call + * @param mixed $argument The argument to the method * @param callable $deserialize A function that deserializes the response * @param array $metadata A metadata map to send to the server * @@ -250,8 +250,8 @@ class BaseStub * Call a remote method that takes a stream of arguments and has a single * output. * - * @param string $method The name of the method to call - * @param $arguments An array or Traversable of arguments to stream to the + * @param string $method The name of the method to call + * @param array $arguments An array or Traversable of arguments to stream to the * server * @param callable $deserialize A function that deserializes the response * @param array $metadata A metadata map to send to the server @@ -284,8 +284,8 @@ class BaseStub * Call a remote method that takes a single argument and returns a stream of * responses. * - * @param string $method The name of the method to call - * @param $argument The argument to the method + * @param string $method The name of the method to call + * @param mixed $argument The argument to the method * @param callable $deserialize A function that deserializes the responses * @param array $metadata A metadata map to send to the server * From 290e9a726d8764eb3c2deb239c4d689f4b3c4cf8 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 28 Oct 2016 08:17:00 -0700 Subject: [PATCH 264/286] Fix resource quotas on Windows --- src/core/lib/iomgr/endpoint_pair_windows.c | 6 ++-- src/core/lib/iomgr/tcp_client_windows.c | 26 ++++++++++++++--- src/core/lib/iomgr/tcp_server_windows.c | 22 +++++++++++++-- src/core/lib/iomgr/tcp_windows.c | 33 ++++++++++++++++++++-- src/core/lib/iomgr/tcp_windows.h | 2 +- 5 files changed, 77 insertions(+), 12 deletions(-) diff --git a/src/core/lib/iomgr/endpoint_pair_windows.c b/src/core/lib/iomgr/endpoint_pair_windows.c index 5c78c95492b..cb23e314cc7 100644 --- a/src/core/lib/iomgr/endpoint_pair_windows.c +++ b/src/core/lib/iomgr/endpoint_pair_windows.c @@ -82,14 +82,14 @@ static void create_sockets(SOCKET sv[2]) { sv[0] = svr_sock; } -grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, +grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, grpc_resource_quota *resource_quota, size_t read_slice_size) { SOCKET sv[2]; grpc_endpoint_pair p; create_sockets(sv); - p.client = grpc_tcp_create(grpc_winsocket_create(sv[1], "endpoint:client"), + p.client = grpc_tcp_create(grpc_winsocket_create(sv[1], "endpoint:client"),resource_quota, "endpoint:server"); - p.server = grpc_tcp_create(grpc_winsocket_create(sv[0], "endpoint:server"), + p.server = grpc_tcp_create(grpc_winsocket_create(sv[0], "endpoint:server"), resource_quota, "endpoint:client"); return p; } diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index fdd8c1a1f81..ef9e5d6f948 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -50,6 +50,7 @@ #include "src/core/lib/iomgr/tcp_client.h" #include "src/core/lib/iomgr/tcp_windows.h" #include "src/core/lib/iomgr/timer.h" +#include "src/core/lib/channel/channel_args.h" typedef struct { grpc_closure *on_done; @@ -61,13 +62,15 @@ typedef struct { int refs; grpc_closure on_connect; grpc_endpoint **endpoint; + grpc_resource_quota *resource_quota; } async_connect; -static void async_connect_unlock_and_cleanup(async_connect *ac, +static void async_connect_unlock_and_cleanup(grpc_exec_ctx *exec_ctx, async_connect *ac, grpc_winsocket *socket) { int done = (--ac->refs == 0); gpr_mu_unlock(&ac->mu); if (done) { + grpc_resource_quota_internal_unref(exec_ctx, ac->resource_quota); gpr_mu_destroy(&ac->mu); gpr_free(ac->addr_name); gpr_free(ac); @@ -83,7 +86,7 @@ static void on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { if (socket != NULL) { grpc_winsocket_shutdown(socket); } - async_connect_unlock_and_cleanup(ac, socket); + async_connect_unlock_and_cleanup(exec_ctx, ac, socket); } static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { @@ -113,12 +116,12 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { if (!wsa_success) { error = GRPC_WSA_ERROR(WSAGetLastError(), "ConnectEx"); } else { - *ep = grpc_tcp_create(socket, ac->addr_name); + *ep = grpc_tcp_create(socket, ac->resource_quota, ac->addr_name); socket = NULL; } } - async_connect_unlock_and_cleanup(ac, socket); + async_connect_unlock_and_cleanup(exec_ctx, ac, socket); /* If the connection was aborted, the callback was already called when the deadline was met. */ grpc_exec_ctx_sched(exec_ctx, on_done, error, NULL); @@ -129,6 +132,7 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_endpoint **endpoint, grpc_pollset_set *interested_parties, + const grpc_channel_args *channel_args, const grpc_resolved_address *addr, gpr_timespec deadline) { SOCKET sock = INVALID_SOCKET; @@ -144,6 +148,18 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_winsocket_callback_info *info; grpc_error *error = GRPC_ERROR_NONE; + grpc_resource_quota *resource_quota = grpc_resource_quota_create(NULL); + if (channel_args != NULL) { + for (size_t i = 0; i < channel_args->num_args; i++) { + if (0 == + strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) { + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); + resource_quota = grpc_resource_quota_internal_ref( + channel_args->args[i].value.pointer.p); + } + } + } + *endpoint = NULL; /* Use dualstack sockets where available. */ @@ -206,6 +222,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, ac->refs = 2; ac->addr_name = grpc_sockaddr_to_uri(addr); ac->endpoint = endpoint; + ac->resource_quota = resource_quota; grpc_closure_init(&ac->on_connect, on_connect, ac); grpc_timer_init(exec_ctx, &ac->alarm, deadline, on_alarm, ac, @@ -225,6 +242,7 @@ failure: } else if (sock != INVALID_SOCKET) { closesocket(sock); } + grpc_resource_quota_internal_unref(exec_ctx, resource_quota); grpc_exec_ctx_sched(exec_ctx, on_done, final_error, NULL); } diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index ad6769a6ba8..eb965c8ccf4 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -100,14 +100,31 @@ struct grpc_tcp_server { /* shutdown callback */ grpc_closure *shutdown_complete; + + grpc_resource_quota *resource_quota; }; /* Public function. Allocates the proper data structures to hold a grpc_tcp_server. */ -grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete, +grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, grpc_closure *shutdown_complete, const grpc_channel_args *args, grpc_tcp_server **server) { grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server)); + s->resource_quota = grpc_resource_quota_create(NULL); + for (size_t i = 0; i < (args == NULL ? 0 : args->num_args); i++) { + if (0 == strcmp(GRPC_ARG_RESOURCE_QUOTA, args->args[i].key)) { + if (args->args[i].type == GRPC_ARG_POINTER) { + grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); + s->resource_quota = + grpc_resource_quota_internal_ref(args->args[i].value.pointer.p); + } else { + grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); + gpr_free(s); + return GRPC_ERROR_CREATE(GRPC_ARG_RESOURCE_QUOTA + " must be a pointer to a buffer pool"); + } + } + } gpr_ref_init(&s->refs, 1); gpr_mu_init(&s->mu); s->active_ports = 0; @@ -137,6 +154,7 @@ static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { grpc_winsocket_destroy(sp->socket); gpr_free(sp); } + grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); gpr_free(s); } @@ -367,7 +385,7 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { gpr_free(utf8_message); } gpr_asprintf(&fd_name, "tcp_server:%s", peer_name_string); - ep = grpc_tcp_create(grpc_winsocket_create(sock, fd_name), + ep = grpc_tcp_create(grpc_winsocket_create(sock, fd_name), sp->server->resource_quota, peer_name_string); gpr_free(fd_name); gpr_free(peer_name_string); diff --git a/src/core/lib/iomgr/tcp_windows.c b/src/core/lib/iomgr/tcp_windows.c index a5f508a2c35..5782fe9bc3d 100644 --- a/src/core/lib/iomgr/tcp_windows.c +++ b/src/core/lib/iomgr/tcp_windows.c @@ -109,14 +109,29 @@ typedef struct grpc_tcp { gpr_slice_buffer *write_slices; gpr_slice_buffer *read_slices; + grpc_resource_user resource_user; + /* The IO Completion Port runs from another thread. We need some mechanism to protect ourselves when requesting a shutdown. */ gpr_mu mu; int shutting_down; + gpr_atm resource_user_shutdown_count; + char *peer_string; } grpc_tcp; +static void win_unref_closure(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, + grpc_error *error); + +static void win_maybe_shutdown_resource_user(grpc_exec_ctx *exec_ctx, + grpc_tcp *tcp) { + if (gpr_atm_full_fetch_add(&tcp->resource_user_shutdown_count, 1) == 0) { + grpc_resource_user_shutdown(exec_ctx, &tcp->resource_user, + grpc_closure_create(win_unref_closure, tcp)); + } +} + static void tcp_free(grpc_tcp *tcp) { grpc_winsocket_destroy(tcp->socket); gpr_mu_destroy(&tcp->mu); @@ -155,6 +170,11 @@ static void tcp_unref(grpc_tcp *tcp) { static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); } #endif +static void win_unref_closure(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + TCP_UNREF(arg, "resource_user"); +} + /* Asynchronous callback from the IOCP, or the background thread. */ static void on_read(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) { grpc_tcp *tcp = tcpp; @@ -376,12 +396,14 @@ static void win_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { callback. See the comments in on_read and on_write. */ tcp->shutting_down = 1; grpc_winsocket_shutdown(tcp->socket); + win_maybe_shutdown_resource_user(exec_ctx, tcp); gpr_mu_unlock(&tcp->mu); } static void win_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_network_status_unregister_endpoint(ep); grpc_tcp *tcp = (grpc_tcp *)ep; + win_maybe_shutdown_resource_user(exec_ctx, tcp); TCP_UNREF(tcp, "destroy"); } @@ -392,6 +414,11 @@ static char *win_get_peer(grpc_endpoint *ep) { static grpc_workqueue *win_get_workqueue(grpc_endpoint *ep) { return NULL; } +static grpc_resource_user *win_get_resource_user(grpc_endpoint *ep) { + grpc_tcp *tcp = (grpc_tcp *)ep; + return &tcp->resource_user; +} + static grpc_endpoint_vtable vtable = {win_read, win_write, win_get_workqueue, @@ -399,18 +426,20 @@ static grpc_endpoint_vtable vtable = {win_read, win_add_to_pollset_set, win_shutdown, win_destroy, + win_get_resource_user, win_get_peer}; -grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, char *peer_string) { +grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, grpc_resource_quota *resource_quota, char *peer_string) { grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp)); memset(tcp, 0, sizeof(grpc_tcp)); tcp->base.vtable = &vtable; tcp->socket = socket; gpr_mu_init(&tcp->mu); - gpr_ref_init(&tcp->refcount, 1); + gpr_ref_init(&tcp->refcount, 2); grpc_closure_init(&tcp->on_read, on_read, tcp); grpc_closure_init(&tcp->on_write, on_write, tcp); tcp->peer_string = gpr_strdup(peer_string); + grpc_resource_user_init(&tcp->resource_user, resource_quota, peer_string); /* Tell network status tracking code about the new endpoint */ grpc_network_status_register_endpoint(&tcp->base); diff --git a/src/core/lib/iomgr/tcp_windows.h b/src/core/lib/iomgr/tcp_windows.h index 86d777235ef..40dca729360 100644 --- a/src/core/lib/iomgr/tcp_windows.h +++ b/src/core/lib/iomgr/tcp_windows.h @@ -50,7 +50,7 @@ /* Create a tcp endpoint given a winsock handle. * Takes ownership of the handle. */ -grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, char *peer_string); +grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, grpc_resource_quota *resource_quota, char *peer_string); grpc_error *grpc_tcp_prepare_socket(SOCKET sock); From a5ea56b68f0159f03da8442469ac4341e284b275 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 28 Oct 2016 08:19:02 -0700 Subject: [PATCH 265/286] clang-format code --- src/core/lib/iomgr/endpoint_pair_windows.c | 13 +++++++------ src/core/lib/iomgr/tcp_client_windows.c | 10 +++++----- src/core/lib/iomgr/tcp_server_windows.c | 9 +++++---- src/core/lib/iomgr/tcp_windows.c | 4 +++- src/core/lib/iomgr/tcp_windows.h | 4 +++- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/core/lib/iomgr/endpoint_pair_windows.c b/src/core/lib/iomgr/endpoint_pair_windows.c index cb23e314cc7..93f71b745c6 100644 --- a/src/core/lib/iomgr/endpoint_pair_windows.c +++ b/src/core/lib/iomgr/endpoint_pair_windows.c @@ -82,15 +82,16 @@ static void create_sockets(SOCKET sv[2]) { sv[0] = svr_sock; } -grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, grpc_resource_quota *resource_quota, - size_t read_slice_size) { +grpc_endpoint_pair grpc_iomgr_create_endpoint_pair( + const char *name, grpc_resource_quota *resource_quota, + size_t read_slice_size) { SOCKET sv[2]; grpc_endpoint_pair p; create_sockets(sv); - p.client = grpc_tcp_create(grpc_winsocket_create(sv[1], "endpoint:client"),resource_quota, - "endpoint:server"); - p.server = grpc_tcp_create(grpc_winsocket_create(sv[0], "endpoint:server"), resource_quota, - "endpoint:client"); + p.client = grpc_tcp_create(grpc_winsocket_create(sv[1], "endpoint:client"), + resource_quota, "endpoint:server"); + p.server = grpc_tcp_create(grpc_winsocket_create(sv[0], "endpoint:server"), + resource_quota, "endpoint:client"); return p; } diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index ef9e5d6f948..620b38c8253 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -43,6 +43,7 @@ #include #include +#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/iomgr/iocp_windows.h" #include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr_utils.h" @@ -50,7 +51,6 @@ #include "src/core/lib/iomgr/tcp_client.h" #include "src/core/lib/iomgr/tcp_windows.h" #include "src/core/lib/iomgr/timer.h" -#include "src/core/lib/channel/channel_args.h" typedef struct { grpc_closure *on_done; @@ -65,7 +65,8 @@ typedef struct { grpc_resource_quota *resource_quota; } async_connect; -static void async_connect_unlock_and_cleanup(grpc_exec_ctx *exec_ctx, async_connect *ac, +static void async_connect_unlock_and_cleanup(grpc_exec_ctx *exec_ctx, + async_connect *ac, grpc_winsocket *socket) { int done = (--ac->refs == 0); gpr_mu_unlock(&ac->mu); @@ -151,11 +152,10 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_resource_quota *resource_quota = grpc_resource_quota_create(NULL); if (channel_args != NULL) { for (size_t i = 0; i < channel_args->num_args; i++) { - if (0 == - strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) { + if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) { grpc_resource_quota_internal_unref(exec_ctx, resource_quota); resource_quota = grpc_resource_quota_internal_ref( - channel_args->args[i].value.pointer.p); + channel_args->args[i].value.pointer.p); } } } diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index eb965c8ccf4..21d4f8bd716 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -106,7 +106,8 @@ struct grpc_tcp_server { /* Public function. Allocates the proper data structures to hold a grpc_tcp_server. */ -grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, grpc_closure *shutdown_complete, +grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, + grpc_closure *shutdown_complete, const grpc_channel_args *args, grpc_tcp_server **server) { grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server)); @@ -116,7 +117,7 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, grpc_closure *shutdo if (args->args[i].type == GRPC_ARG_POINTER) { grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); s->resource_quota = - grpc_resource_quota_internal_ref(args->args[i].value.pointer.p); + grpc_resource_quota_internal_ref(args->args[i].value.pointer.p); } else { grpc_resource_quota_internal_unref(exec_ctx, s->resource_quota); gpr_free(s); @@ -385,8 +386,8 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { gpr_free(utf8_message); } gpr_asprintf(&fd_name, "tcp_server:%s", peer_name_string); - ep = grpc_tcp_create(grpc_winsocket_create(sock, fd_name), sp->server->resource_quota, - peer_name_string); + ep = grpc_tcp_create(grpc_winsocket_create(sock, fd_name), + sp->server->resource_quota, peer_name_string); gpr_free(fd_name); gpr_free(peer_name_string); } else { diff --git a/src/core/lib/iomgr/tcp_windows.c b/src/core/lib/iomgr/tcp_windows.c index 5782fe9bc3d..46f0491d10a 100644 --- a/src/core/lib/iomgr/tcp_windows.c +++ b/src/core/lib/iomgr/tcp_windows.c @@ -429,7 +429,9 @@ static grpc_endpoint_vtable vtable = {win_read, win_get_resource_user, win_get_peer}; -grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, grpc_resource_quota *resource_quota, char *peer_string) { +grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, + grpc_resource_quota *resource_quota, + char *peer_string) { grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp)); memset(tcp, 0, sizeof(grpc_tcp)); tcp->base.vtable = &vtable; diff --git a/src/core/lib/iomgr/tcp_windows.h b/src/core/lib/iomgr/tcp_windows.h index 40dca729360..4402de1c385 100644 --- a/src/core/lib/iomgr/tcp_windows.h +++ b/src/core/lib/iomgr/tcp_windows.h @@ -50,7 +50,9 @@ /* Create a tcp endpoint given a winsock handle. * Takes ownership of the handle. */ -grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, grpc_resource_quota *resource_quota, char *peer_string); +grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, + grpc_resource_quota *resource_quota, + char *peer_string); grpc_error *grpc_tcp_prepare_socket(SOCKET sock); From 85fe038342d307ea69dfee5bc2f1a0ff778cd409 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 28 Oct 2016 08:43:01 -0700 Subject: [PATCH 266/286] Fix some other Windows bugs while we're here --- src/core/lib/iomgr/tcp_client_windows.c | 2 +- src/core/lib/iomgr/tcp_server_windows.c | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index 620b38c8253..f5145abdc50 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -194,7 +194,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_sockaddr_make_wildcard6(0, &local_address); status = - bind(sock, (struct sockaddr *)&local_address.addr, local_address.len); + bind(sock, (struct sockaddr *)&local_address.addr, (int)local_address.len); if (status != 0) { error = GRPC_WSA_ERROR(WSAGetLastError(), "bind"); goto failure; diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index 21d4f8bd716..4f04ecc03d4 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -226,12 +226,13 @@ static grpc_error *prepare_socket(SOCKET sock, goto failure; } - sockname_temp.len = sizeof(struct sockaddr_storage); + int sockname_temp_len = sizeof(struct sockaddr_storage); if (getsockname(sock, (struct sockaddr *)sockname_temp.addr, - &sockname_temp.len) == SOCKET_ERROR) { + &sockname_temp_len) == SOCKET_ERROR) { error = GRPC_WSA_ERROR(WSAGetLastError(), "getsockname"); goto failure; } + sockname_temp.len = sockname_temp_len; *port = grpc_sockaddr_get_port(&sockname_temp); return GRPC_ERROR_NONE; @@ -376,8 +377,10 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { gpr_log(GPR_ERROR, "setsockopt error: %s", utf8_message); gpr_free(utf8_message); } + int peer_name_len = (int) peer_name.len; err = - getpeername(sock, (struct sockaddr *)peer_name.addr, &peer_name.len); + getpeername(sock, (struct sockaddr *)peer_name.addr, &peer_name_len); + peer_name.len = peer_name_len; if (!err) { peer_name_string = grpc_sockaddr_to_uri(&peer_name); } else { @@ -485,10 +488,11 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, as some previously created listener. */ if (grpc_sockaddr_get_port(addr) == 0) { for (sp = s->head; sp; sp = sp->next) { - sockname_temp.len = sizeof(struct sockaddr_storage); + int sockname_temp_len = sizeof(struct sockaddr_storage); if (0 == getsockname(sp->socket->socket, (struct sockaddr *)sockname_temp.addr, - &sockname_temp.len)) { + &sockname_temp_len)) { + sockname_temp.len = sockname_temp_len; *port = grpc_sockaddr_get_port(&sockname_temp); if (*port > 0) { allocated_addr = gpr_malloc(sizeof(grpc_resolved_address)); From 6108d1fee3880ebce9c0f1234f51216ece036659 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 28 Oct 2016 08:43:21 -0700 Subject: [PATCH 267/286] clang-format code --- src/core/lib/iomgr/tcp_client_windows.c | 4 ++-- src/core/lib/iomgr/tcp_server_windows.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index f5145abdc50..30f7c66f159 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -193,8 +193,8 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_sockaddr_make_wildcard6(0, &local_address); - status = - bind(sock, (struct sockaddr *)&local_address.addr, (int)local_address.len); + status = bind(sock, (struct sockaddr *)&local_address.addr, + (int)local_address.len); if (status != 0) { error = GRPC_WSA_ERROR(WSAGetLastError(), "bind"); goto failure; diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index 4f04ecc03d4..ae54c70d2d0 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -377,7 +377,7 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { gpr_log(GPR_ERROR, "setsockopt error: %s", utf8_message); gpr_free(utf8_message); } - int peer_name_len = (int) peer_name.len; + int peer_name_len = (int)peer_name.len; err = getpeername(sock, (struct sockaddr *)peer_name.addr, &peer_name_len); peer_name.len = peer_name_len; From f405035002db148e6f3182d8b647e94e2686f337 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 28 Oct 2016 08:59:55 -0700 Subject: [PATCH 268/286] More Windows Fixes --- test/core/end2end/tests/resource_quota_server.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c index 76374d16a56..fbd4986dfba 100644 --- a/test/core/end2end/tests/resource_quota_server.c +++ b/test/core/end2end/tests/resource_quota_server.c @@ -99,12 +99,16 @@ static void end_test(grpc_end2end_test_fixture *f) { static gpr_slice generate_random_slice() { size_t i; static const char chars[] = "abcdefghijklmnopqrstuvwxyz1234567890"; - char output[1024 * 1024]; - for (i = 0; i < GPR_ARRAY_SIZE(output) - 1; ++i) { + char *output; + const size_t output_size = 1024 * 1024; + output = gpr_malloc(output_size); + for (i = 0; i < output_size - 1; ++i) { output[i] = chars[rand() % (int)(sizeof(chars) - 1)]; } - output[GPR_ARRAY_SIZE(output) - 1] = '\0'; - return gpr_slice_from_copied_string(output); + output[output_size - 1] = '\0'; + gpr_slice out = gpr_slice_from_copied_string(output); + gpr_free(output); + return out; } void resource_quota_server(grpc_end2end_test_config config) { From 2c88b4616a3a59ed82eadd3b5506fabfc61456b5 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 28 Oct 2016 10:47:25 -0700 Subject: [PATCH 269/286] Revert format changes of unrelated files --- .../GRPCClient/GRPCCall+ChannelArg.h | 17 +- .../GRPCClient/GRPCCall+ChannelCredentials.h | 16 +- src/objective-c/GRPCClient/GRPCCall+OAuth2.h | 14 +- src/objective-c/GRPCClient/GRPCCall+Tests.h | 25 +-- src/objective-c/GRPCClient/GRPCCall.h | 189 ++++++++---------- .../GRPCClient/private/GRPCCompletionQueue.h | 17 +- .../GRPCClient/private/GRPCRequestHeaders.m | 41 ++-- .../GRPCClient/private/GRPCWrappedCall.m | 86 ++++---- .../GRPCClient/private/NSError+GRPC.h | 7 +- 9 files changed, 180 insertions(+), 232 deletions(-) diff --git a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h index c1623a00687..4a3f3fa4a1a 100644 --- a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h +++ b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h @@ -40,18 +40,15 @@ @interface GRPCCall (ChannelArg) /** - * Use the provided @c userAgentPrefix at the beginning of the HTTP User Agent - * string for all calls to the specified @c host. + * Use the provided @c userAgentPrefix at the beginning of the HTTP User Agent string for all calls + * to the specified @c host. */ -+ (void)setUserAgentPrefix:(nonnull NSString *)userAgentPrefix - forHost:(nonnull NSString *)host; ++ (void)setUserAgentPrefix:(nonnull NSString *)userAgentPrefix forHost:(nonnull NSString *)host; -/** The default response size limit is 4MB. Set this to override that default. - */ +/** The default response size limit is 4MB. Set this to override that default. */ + (void)setResponseSizeLimit:(NSUInteger)limit forHost:(nonnull NSString *)host; -+ (void)closeOpenConnections DEPRECATED_MSG_ATTRIBUTE( - "The API for this feature is experimental, " - "and might be removed or modified at any " - "time."); ++ (void)closeOpenConnections DEPRECATED_MSG_ATTRIBUTE("The API for this feature is experimental, " + "and might be removed or modified at any " + "time."); @end diff --git a/src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h b/src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h index beae0d11a23..ac2a37d75f2 100644 --- a/src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h +++ b/src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h @@ -33,26 +33,24 @@ #import "GRPCCall.h" -/** Helpers for setting TLS Trusted Roots, Client Certificates, and Private Key - */ +/** Helpers for setting TLS Trusted Roots, Client Certificates, and Private Key */ @interface GRPCCall (ChannelCredentials) /** - * Use the provided @c pemRootCert as the set of trusted root Certificate - * Authorities for @c host. + * Use the provided @c pemRootCert as the set of trusted root Certificate Authorities for @c host. */ + (BOOL)setTLSPEMRootCerts:(nullable NSString *)pemRootCert forHost:(nonnull NSString *)host - error:(NSError *_Nullable *_Nullable)errorPtr; + error:(NSError * _Nullable * _Nullable)errorPtr; /** - * Configures @c host with TLS/SSL Client Credentials and optionally trusted - * root Certificate Authorities. If @c pemRootCerts is nil, the default CA - * Certificates bundled with gRPC will be used. + * Configures @c host with TLS/SSL Client Credentials and optionally trusted root Certificate + * Authorities. If @c pemRootCerts is nil, the default CA Certificates bundled with gRPC will be + * used. */ + (BOOL)setTLSPEMRootCerts:(nullable NSString *)pemRootCerts withPrivateKey:(nullable NSString *)pemPrivateKey withCertChain:(nullable NSString *)pemCertChain forHost:(nonnull NSString *)host - error:(NSError *_Nullable *_Nullable)errorPtr; + error:(NSError * _Nullable * _Nullable)errorPtr; @end diff --git a/src/objective-c/GRPCClient/GRPCCall+OAuth2.h b/src/objective-c/GRPCClient/GRPCCall+OAuth2.h index 467c6332c1e..6b443877e9b 100644 --- a/src/objective-c/GRPCClient/GRPCCall+OAuth2.h +++ b/src/objective-c/GRPCClient/GRPCCall+OAuth2.h @@ -37,17 +37,15 @@ @interface GRPCCall (OAuth2) /** - * Setting this property is equivalent to setting "Bearer " as the - * value of the request header with key "authorization" (the authorization - * header). Setting it to nil removes the authorization header from the request. - * The value obtained by getting the property is the OAuth2 bearer token if the - * authorization header of the request has the form "Bearer ", or nil - * otherwise. + * Setting this property is equivalent to setting "Bearer " as the value of the + * request header with key "authorization" (the authorization header). Setting it to nil removes the + * authorization header from the request. + * The value obtained by getting the property is the OAuth2 bearer token if the authorization header + * of the request has the form "Bearer ", or nil otherwise. */ @property(atomic, copy) NSString *oauth2AccessToken; -/** Returns the value (if any) of the "www-authenticate" response header (the - * challenge header). */ +/** Returns the value (if any) of the "www-authenticate" response header (the challenge header). */ @property(atomic, readonly) NSString *oauth2ChallengeHeader; @end diff --git a/src/objective-c/GRPCClient/GRPCCall+Tests.h b/src/objective-c/GRPCClient/GRPCCall+Tests.h index f517f3aac8a..184ad09c5c8 100644 --- a/src/objective-c/GRPCClient/GRPCCall+Tests.h +++ b/src/objective-c/GRPCClient/GRPCCall+Tests.h @@ -34,36 +34,33 @@ #import "GRPCCall.h" /** - * Methods to let tune down the security of gRPC connections for specific hosts. - * These shouldn't be used in releases, but are sometimes needed for testing. + * Methods to let tune down the security of gRPC connections for specific hosts. These shouldn't be + * used in releases, but are sometimes needed for testing. */ @interface GRPCCall (Tests) /** - * Establish all SSL connections to the provided host using the passed SSL - * target name and the root certificates found in the file at |certsPath|. + * Establish all SSL connections to the provided host using the passed SSL target name and the root + * certificates found in the file at |certsPath|. * - * Must be called before any gRPC call to that host is made. It's illegal to - * pass the same host to more than one invocation of the methods of this - * category. + * Must be called before any gRPC call to that host is made. It's illegal to pass the same host to + * more than one invocation of the methods of this category. */ + (void)useTestCertsPath:(NSString *)certsPath testName:(NSString *)testName forHost:(NSString *)host; /** - * Establish all connections to the provided host using cleartext instead of - * SSL. + * Establish all connections to the provided host using cleartext instead of SSL. * - * Must be called before any gRPC call to that host is made. It's illegal to - * pass the same host to more than one invocation of the methods of this - * category. + * Must be called before any gRPC call to that host is made. It's illegal to pass the same host to + * more than one invocation of the methods of this category. */ + (void)useInsecureConnectionsForHost:(NSString *)host; /** - * Resets all host configurations to their default values, and flushes all - * connections from the cache. + * Resets all host configurations to their default values, and flushes all connections from the + * cache. */ + (void)resetHostSettings; @end diff --git a/src/objective-c/GRPCClient/GRPCCall.h b/src/objective-c/GRPCClient/GRPCCall.h index 5ed160d7a01..7645bb1d34a 100644 --- a/src/objective-c/GRPCClient/GRPCCall.h +++ b/src/objective-c/GRPCClient/GRPCCall.h @@ -34,18 +34,17 @@ /** * The gRPC protocol is an RPC protocol on top of HTTP2. * - * While the most common type of RPC receives only one request message and - * returns only one response message, the protocol also supports RPCs that - * return multiple individual messages in a streaming fashion, RPCs that accept - * a stream of request messages, or RPCs with both streaming requests and + * While the most common type of RPC receives only one request message and returns only one response + * message, the protocol also supports RPCs that return multiple individual messages in a streaming + * fashion, RPCs that accept a stream of request messages, or RPCs with both streaming requests and * responses. * - * Conceptually, each gRPC call consists of a bidirectional stream of binary - * messages, with RPCs of the "non-streaming type" sending only one message in - * the corresponding direction (the protocol doesn't make any distinction). + * Conceptually, each gRPC call consists of a bidirectional stream of binary messages, with RPCs of + * the "non-streaming type" sending only one message in the corresponding direction (the protocol + * doesn't make any distinction). * - * Each RPC uses a different HTTP2 stream, and thus multiple simultaneous RPCs - * can be multiplexed transparently on the same TCP connection. + * Each RPC uses a different HTTP2 stream, and thus multiple simultaneous RPCs can be multiplexed + * transparently on the same TCP connection. */ #import @@ -60,56 +59,51 @@ extern NSString *const kGRPCErrorDomain; /** * gRPC error codes. - * Note that a few of these are never produced by the gRPC libraries, but are of - * general utility for server applications to produce. + * Note that a few of these are never produced by the gRPC libraries, but are of general utility for + * server applications to produce. */ typedef NS_ENUM(NSUInteger, GRPCErrorCode) { /** The operation was cancelled (typically by the caller). */ GRPCErrorCodeCancelled = 1, /** - * Unknown error. Errors raised by APIs that do not return enough error - * information may be + * Unknown error. Errors raised by APIs that do not return enough error information may be * converted to this error. */ GRPCErrorCodeUnknown = 2, /** - * The client specified an invalid argument. Note that this differs from - * FAILED_PRECONDITION. - * INVALID_ARGUMENT indicates arguments that are problematic regardless of the - * state of the server (e.g., a malformed file name). + * The client specified an invalid argument. Note that this differs from FAILED_PRECONDITION. + * INVALID_ARGUMENT indicates arguments that are problematic regardless of the state of the + * server (e.g., a malformed file name). */ GRPCErrorCodeInvalidArgument = 3, /** - * Deadline expired before operation could complete. For operations that - * change the state of the server, this error may be returned even if the - * operation has completed successfully. For example, a successful response - * from the server could have been delayed long enough for the deadline to - * expire. + * Deadline expired before operation could complete. For operations that change the state of the + * server, this error may be returned even if the operation has completed successfully. For + * example, a successful response from the server could have been delayed long enough for the + * deadline to expire. */ GRPCErrorCodeDeadlineExceeded = 4, /** Some requested entity (e.g., file or directory) was not found. */ GRPCErrorCodeNotFound = 5, - /** Some entity that we attempted to create (e.g., file or directory) already - exists. */ + /** Some entity that we attempted to create (e.g., file or directory) already exists. */ GRPCErrorCodeAlreadyExists = 6, /** - * The caller does not have permission to execute the specified operation. - * PERMISSION_DENIED isn't used for rejections caused by exhausting some - * resource (RESOURCE_EXHAUSTED is used instead for those errors). - * PERMISSION_DENIED doesn't indicate a failure to identify the caller + * The caller does not have permission to execute the specified operation. PERMISSION_DENIED isn't + * used for rejections caused by exhausting some resource (RESOURCE_EXHAUSTED is used instead for + * those errors). PERMISSION_DENIED doesn't indicate a failure to identify the caller * (UNAUTHENTICATED is used instead for those errors). */ GRPCErrorCodePermissionDenied = 7, /** - * The request does not have valid authentication credentials for the - * operation (e.g. the caller's identity can't be verified). + * The request does not have valid authentication credentials for the operation (e.g. the caller's + * identity can't be verified). */ GRPCErrorCodeUnauthenticated = 16, @@ -117,47 +111,42 @@ typedef NS_ENUM(NSUInteger, GRPCErrorCode) { GRPCErrorCodeResourceExhausted = 8, /** - * The RPC was rejected because the server is not in a state required for the - * procedure's + * The RPC was rejected because the server is not in a state required for the procedure's * execution. For example, a directory to be deleted may be non-empty, etc. - * The client should not retry until the server state has been explicitly - * fixed (e.g. by - * performing another RPC). The details depend on the service being called, - * and should be found in the NSError's userInfo. + * The client should not retry until the server state has been explicitly fixed (e.g. by + * performing another RPC). The details depend on the service being called, and should be found in + * the NSError's userInfo. */ GRPCErrorCodeFailedPrecondition = 9, /** - * The RPC was aborted, typically due to a concurrency issue like sequencer - * check failures, transaction aborts, etc. The client should retry at a - * higher-level (e.g., restarting a read-modify-write sequence). + * The RPC was aborted, typically due to a concurrency issue like sequencer check failures, + * transaction aborts, etc. The client should retry at a higher-level (e.g., restarting a read- + * modify-write sequence). */ GRPCErrorCodeAborted = 10, /** - * The RPC was attempted past the valid range. E.g., enumerating past the end - * of a list. - * Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed - * if the system state changes. For example, an RPC to get elements of a list - * will generate INVALID_ARGUMENT if asked to return the element at a negative - * index, but it will generate OUT_OF_RANGE if asked to return the element at - * an index past the current size of the list. + * The RPC was attempted past the valid range. E.g., enumerating past the end of a list. + * Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed if the system state + * changes. For example, an RPC to get elements of a list will generate INVALID_ARGUMENT if asked + * to return the element at a negative index, but it will generate OUT_OF_RANGE if asked to return + * the element at an index past the current size of the list. */ GRPCErrorCodeOutOfRange = 11, - /** The procedure is not implemented or not supported/enabled in this server. - */ + /** The procedure is not implemented or not supported/enabled in this server. */ GRPCErrorCodeUnimplemented = 12, /** - * Internal error. Means some invariant expected by the server application or - * the gRPC library has been broken. + * Internal error. Means some invariant expected by the server application or the gRPC library has + * been broken. */ GRPCErrorCodeInternal = 13, /** - * The server is currently unavailable. This is most likely a transient - * condition and may be corrected by retrying with a backoff. + * The server is currently unavailable. This is most likely a transient condition and may be + * corrected by retrying with a backoff. */ GRPCErrorCodeUnavailable = 14, @@ -169,19 +158,17 @@ typedef NS_ENUM(NSUInteger, GRPCErrorCode) { * Safety remark of a gRPC method as defined in RFC 2616 Section 9.1 */ typedef NS_ENUM(NSUInteger, GRPCCallSafety) { - /** Signal that there is no guarantees on how the call affects the server - state. */ + /** Signal that there is no guarantees on how the call affects the server state. */ GRPCCallSafetyDefault = 0, /** Signal that the call is idempotent. gRPC is free to use PUT verb. */ GRPCCallSafetyIdempotentRequest = 1, - /** Signal that the call is cacheable and will not affect server state. gRPC - is free to use GET verb. */ + /** Signal that the call is cacheable and will not affect server state. gRPC is free to use GET verb. */ GRPCCallSafetyCacheableRequest = 2, }; /** - * Keys used in |NSError|'s |userInfo| dictionary to store the response headers - * and trailers sent by the server. + * Keys used in |NSError|'s |userInfo| dictionary to store the response headers and trailers sent by + * the server. */ extern id const kGRPCHeadersKey; extern id const kGRPCTrailersKey; @@ -192,24 +179,20 @@ extern id const kGRPCTrailersKey; @interface GRPCCall : GRXWriter /** - * The container of the request headers of an RPC conforms to this protocol, - * which is a subset of NSMutableDictionary's interface. It will become a - * NSMutableDictionary later on. The keys of this container are the header - * names, which per the HTTP standard are case-insensitive. They are stored in - * lowercase (which is how HTTP/2 mandates them on the wire), and can only - * consist of ASCII characters. - * A header value is a NSString object (with only ASCII characters), unless the - * header name has the suffix "-bin", in which case the value has to be a NSData - * object. + * The container of the request headers of an RPC conforms to this protocol, which is a subset of + * NSMutableDictionary's interface. It will become a NSMutableDictionary later on. + * The keys of this container are the header names, which per the HTTP standard are case- + * insensitive. They are stored in lowercase (which is how HTTP/2 mandates them on the wire), and + * can only consist of ASCII characters. + * A header value is a NSString object (with only ASCII characters), unless the header name has the + * suffix "-bin", in which case the value has to be a NSData object. */ /** - * These HTTP headers will be passed to the server as part of this call. Each - * HTTP header is a name-value pair with string names and either string or - * binary values. + * These HTTP headers will be passed to the server as part of this call. Each HTTP header is a + * name-value pair with string names and either string or binary values. * - * The passed dictionary has to use NSString keys, corresponding to the header - * names. The value associated to each can be a NSString object or a NSData - * object. E.g.: + * The passed dictionary has to use NSString keys, corresponding to the header names. The value + * associated to each can be a NSString object or a NSData object. E.g.: * * call.requestHeaders = @{@"authorization": @"Bearer ..."}; * @@ -222,61 +205,53 @@ extern id const kGRPCTrailersKey; @property(atomic, readonly) NSMutableDictionary *requestHeaders; /** - * This dictionary is populated with the HTTP headers received from the server. - * This happens before any response message is received from the server. It has - * the same structure as the request headers dictionary: Keys are NSString - * header names; names ending with the suffix "-bin" have a NSData value; the - * others have a NSString value. + * This dictionary is populated with the HTTP headers received from the server. This happens before + * any response message is received from the server. It has the same structure as the request + * headers dictionary: Keys are NSString header names; names ending with the suffix "-bin" have a + * NSData value; the others have a NSString value. * - * The value of this property is nil until all response headers are received, - * and will change before any of -writeValue: or -writesFinishedWithError: are - * sent to the writeable. + * The value of this property is nil until all response headers are received, and will change before + * any of -writeValue: or -writesFinishedWithError: are sent to the writeable. */ @property(atomic, readonly) NSDictionary *responseHeaders; /** - * Same as responseHeaders, but populated with the HTTP trailers received from - * the server before the call finishes. + * Same as responseHeaders, but populated with the HTTP trailers received from the server before the + * call finishes. * - * The value of this property is nil until all response trailers are received, - * and will change before -writesFinishedWithError: is sent to the writeable. + * The value of this property is nil until all response trailers are received, and will change + * before -writesFinishedWithError: is sent to the writeable. */ @property(atomic, readonly) NSDictionary *responseTrailers; /** - * The request writer has to write NSData objects into the provided Writeable. - * The server will receive each of those separately and in order as distinct - * messages. - * A gRPC call might not complete until the request writer finishes. On the - * other hand, the request finishing doesn't necessarily make the call to - * finish, as the server might continue sending messages to the response side of - * the call indefinitely (depending on the semantics of the specific remote - * method called). + * The request writer has to write NSData objects into the provided Writeable. The server will + * receive each of those separately and in order as distinct messages. + * A gRPC call might not complete until the request writer finishes. On the other hand, the request + * finishing doesn't necessarily make the call to finish, as the server might continue sending + * messages to the response side of the call indefinitely (depending on the semantics of the + * specific remote method called). * To finish a call right away, invoke cancel. - * host parameter should not contain the scheme (http:// or https://), only the - * name or IP addr and the port number, for example @"localhost:5050". + * host parameter should not contain the scheme (http:// or https://), only the name or IP addr + * and the port number, for example @"localhost:5050". */ - (instancetype)initWithHost:(NSString *)host path:(NSString *)path - requestsWriter:(GRXWriter *)requestsWriter - NS_DESIGNATED_INITIALIZER; + requestsWriter:(GRXWriter *)requestsWriter NS_DESIGNATED_INITIALIZER; /** - * Finishes the request side of this call, notifies the server that the RPC - * should be cancelled, and finishes the response side of the call with an error - * of code CANCELED. + * Finishes the request side of this call, notifies the server that the RPC should be cancelled, and + * finishes the response side of the call with an error of code CANCELED. */ - (void)cancel; /** * Set the call flag for a specific host path. * - * Host parameter should not contain the scheme (http:// or https://), only the - * name or IP addr and the port number, for example @"localhost:5050". + * Host parameter should not contain the scheme (http:// or https://), only the name or IP addr + * and the port number, for example @"localhost:5050". */ -+ (void)setCallSafety:(GRPCCallSafety)callSafety - host:(NSString *)host - path:(NSString *)path; ++ (void)setCallSafety:(GRPCCallSafety)callSafety host:(NSString *)host path:(NSString *)path; // TODO(jcanizales): Let specify a deadline. As a category of GRXWriter? @end @@ -285,7 +260,7 @@ extern id const kGRPCTrailersKey; /** This protocol is kept for backwards compatibility with existing code. */ DEPRECATED_MSG_ATTRIBUTE("Use NSDictionary or NSMutableDictionary instead.") -@protocol GRPCRequestHeaders +@protocol GRPCRequestHeaders @property(nonatomic, readonly) NSUInteger count; - (id)objectForKeyedSubscript:(id)key; @@ -298,6 +273,6 @@ DEPRECATED_MSG_ATTRIBUTE("Use NSDictionary or NSMutableDictionary instead.") #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated" /** This is only needed for backwards-compatibility. */ -@interface NSMutableDictionary (GRPCRequestHeaders) +@interface NSMutableDictionary (GRPCRequestHeaders) @end #pragma clang diagnostic pop diff --git a/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h b/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h index c0bbf22c747..fe3b8f39d12 100644 --- a/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h +++ b/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h @@ -34,19 +34,18 @@ #import #include -typedef void (^GRPCQueueCompletionHandler)(bool success); +typedef void(^GRPCQueueCompletionHandler)(bool success); /** - * This class lets one more easily use |grpc_completion_queue|. To use it, pass - * the value of the |unmanagedQueue| property of an instance of this class to - * |grpc_channel_create_call|. Then for every |grpc_call_*| method that accepts - * a tag, you can pass a block of type |GRPCQueueCompletionHandler| (remembering - * to cast it using |__bridge_retained|). The block is guaranteed to eventually - * be called, by a concurrent queue, and then released. Each such block is + * This class lets one more easily use |grpc_completion_queue|. To use it, pass the value of the + * |unmanagedQueue| property of an instance of this class to |grpc_channel_create_call|. Then for + * every |grpc_call_*| method that accepts a tag, you can pass a block of type + * |GRPCQueueCompletionHandler| (remembering to cast it using |__bridge_retained|). The block is + * guaranteed to eventually be called, by a concurrent queue, and then released. Each such block is * passed a |bool| that tells if the operation was successful. * - * Release the GRPCCompletionQueue object only after you are not going to pass - * any more blocks to the |grpc_call| that's using it. + * Release the GRPCCompletionQueue object only after you are not going to pass any more blocks to + * the |grpc_call| that's using it. */ @interface GRPCCompletionQueue : NSObject @property(nonatomic, readonly) grpc_completion_queue *unmanagedQueue; diff --git a/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m b/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m index 58c6032e804..c6a03c145ea 100644 --- a/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m +++ b/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m @@ -38,10 +38,9 @@ #import "NSDictionary+GRPC.h" // Used by the setter. -static void CheckIsNonNilASCII(NSString *name, NSString *value) { +static void CheckIsNonNilASCII(NSString *name, NSString* value) { if (!value) { - [NSException raise:NSInvalidArgumentException - format:@"%@ cannot be nil", name]; + [NSException raise:NSInvalidArgumentException format:@"%@ cannot be nil", name]; } if (![value canBeConvertedToEncoding:NSASCIIStringEncoding]) { [NSException raise:NSInvalidArgumentException @@ -53,20 +52,15 @@ static void CheckIsNonNilASCII(NSString *name, NSString *value) { static void CheckKeyValuePairIsValid(NSString *key, id value) { if ([key hasSuffix:@"-bin"]) { if (![value isKindOfClass:NSData.class]) { - [NSException - raise:NSInvalidArgumentException - format:@"Expected NSData value for header %@ ending in \"-bin\", " - @"instead got %@", - key, value]; + [NSException raise:NSInvalidArgumentException + format:@"Expected NSData value for header %@ ending in \"-bin\", " + @"instead got %@", key, value]; } } else { if (![value isKindOfClass:NSString.class]) { - [NSException - raise:NSInvalidArgumentException - format: - @"Expected NSString value for header %@ not ending in \"-bin\", " - @"instead got %@", - key, value]; + [NSException raise:NSInvalidArgumentException + format:@"Expected NSString value for header %@ not ending in \"-bin\", " + @"instead got %@", key, value]; } CheckIsNonNilASCII(@"Text header value", (NSString *)value); } @@ -74,10 +68,9 @@ static void CheckKeyValuePairIsValid(NSString *key, id value) { @implementation GRPCRequestHeaders { __weak GRPCCall *_call; - // The NSMutableDictionary superclass doesn't hold any storage (so that people - // can implement their own in subclasses). As that's not the reason we're - // subclassing, we just delegate storage to the default NSMutableDictionary - // subclass returned by the cluster (e.g. __NSDictionaryM on iOS 9). + // The NSMutableDictionary superclass doesn't hold any storage (so that people can implement their + // own in subclasses). As that's not the reason we're subclassing, we just delegate storage to the + // default NSMutableDictionary subclass returned by the cluster (e.g. __NSDictionaryM on iOS 9). NSMutableDictionary *_delegate; } @@ -98,8 +91,7 @@ static void CheckKeyValuePairIsValid(NSString *key, id value) { } // Designated initializer -- (instancetype)initWithCall:(GRPCCall *)call - storage:(NSMutableDictionary *)storage { +- (instancetype)initWithCall:(GRPCCall *)call storage:(NSMutableDictionary *)storage { // TODO(jcanizales): Throw if call or storage are nil. if ((self = [super init])) { _call = call; @@ -108,10 +100,9 @@ static void CheckKeyValuePairIsValid(NSString *key, id value) { return self; } -- (instancetype) -initWithObjects:(const id _Nonnull __unsafe_unretained *)objects - forKeys:(const id _Nonnull __unsafe_unretained *)keys - count:(NSUInteger)cnt { +- (instancetype)initWithObjects:(const id _Nonnull __unsafe_unretained *)objects + forKeys:(const id _Nonnull __unsafe_unretained *)keys + count:(NSUInteger)cnt { return [self init]; } @@ -143,7 +134,7 @@ initWithObjects:(const id _Nonnull __unsafe_unretained *)objects return _delegate.count; } -- (NSEnumerator *_Nonnull)keyEnumerator { +- (NSEnumerator * _Nonnull)keyEnumerator { return [_delegate keyEnumerator]; } diff --git a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m index bbda9f2f647..627b6aa86dd 100644 --- a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m +++ b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m @@ -34,27 +34,27 @@ #import "GRPCWrappedCall.h" #import -#include #include +#include #include #import "GRPCCompletionQueue.h" #import "GRPCHost.h" -#import "NSData+GRPC.h" #import "NSDictionary+GRPC.h" +#import "NSData+GRPC.h" #import "NSError+GRPC.h" @implementation GRPCOperation { - @protected - // Most operation subclasses don't set any flags in the grpc_op, and rely on - // the flag member being initialized to zero. +@protected + // Most operation subclasses don't set any flags in the grpc_op, and rely on the flag member being + // initialized to zero. grpc_op _op; - void (^_handler)(); + void(^_handler)(); } - (void)finish { if (_handler) { - void (^handler)() = _handler; + void(^handler)() = _handler; _handler = nil; handler(); } @@ -101,8 +101,7 @@ - (instancetype)initWithMessage:(NSData *)message handler:(void (^)())handler { if (!message) { - [NSException raise:NSInvalidArgumentException - format:@"message cannot be nil"]; + [NSException raise:NSInvalidArgumentException format:@"message cannot be nil"]; } if (self = [super init]) { _op.op = GRPC_OP_SEND_MESSAGE; @@ -138,11 +137,11 @@ grpc_metadata_array _headers; } -- (instancetype)init { +- (instancetype) init { return [self initWithHandler:nil]; } -- (instancetype)initWithHandler:(void (^)(NSDictionary *))handler { +- (instancetype) initWithHandler:(void (^)(NSDictionary *))handler { if (self = [super init]) { _op.op = GRPC_OP_RECV_INITIAL_METADATA; grpc_metadata_array_init(&_headers); @@ -153,7 +152,7 @@ _handler = ^{ __strong typeof(self) strongSelf = weakSelf; NSDictionary *metadata = [NSDictionary - grpc_dictionaryFromMetadataArray:strongSelf->_headers]; + grpc_dictionaryFromMetadataArray:strongSelf->_headers]; handler(metadata); }; } @@ -167,7 +166,7 @@ @end -@implementation GRPCOpRecvMessage { +@implementation GRPCOpRecvMessage{ grpc_byte_buffer *_receivedMessage; } @@ -193,18 +192,18 @@ @end -@implementation GRPCOpRecvStatus { +@implementation GRPCOpRecvStatus{ grpc_status_code _statusCode; char *_details; size_t _detailsCapacity; grpc_metadata_array _trailers; } -- (instancetype)init { +- (instancetype) init { return [self initWithHandler:nil]; } -- (instancetype)initWithHandler:(void (^)(NSError *, NSDictionary *))handler { +- (instancetype) initWithHandler:(void (^)(NSError *, NSDictionary *))handler { if (self = [super init]) { _op.op = GRPC_OP_RECV_STATUS_ON_CLIENT; _op.data.recv_status_on_client.status = &_statusCode; @@ -217,11 +216,10 @@ __weak typeof(self) weakSelf = self; _handler = ^{ __strong typeof(self) strongSelf = weakSelf; - NSError *error = - [NSError grpc_errorFromStatusCode:strongSelf->_statusCode - details:strongSelf->_details]; + NSError *error = [NSError grpc_errorFromStatusCode:strongSelf->_statusCode + details:strongSelf->_details]; NSDictionary *trailers = [NSDictionary - grpc_dictionaryFromMetadataArray:strongSelf->_trailers]; + grpc_dictionaryFromMetadataArray:strongSelf->_trailers]; handler(error, trailers); }; } @@ -247,21 +245,20 @@ return [self initWithHost:nil path:nil]; } -- (instancetype)initWithHost:(NSString *)host path:(NSString *)path { +- (instancetype)initWithHost:(NSString *)host + path:(NSString *)path { if (!path || !host) { [NSException raise:NSInvalidArgumentException format:@"path and host cannot be nil."]; } if (self = [super init]) { - // Each completion queue consumes one thread. There's a trade to be made - // between creating and consuming too many threads and having contention of - // multiple calls in a single completion queue. Currently we use a singleton - // queue. + // Each completion queue consumes one thread. There's a trade to be made between creating and + // consuming too many threads and having contention of multiple calls in a single completion + // queue. Currently we use a singleton queue. _queue = [GRPCCompletionQueue completionQueue]; - _call = [[GRPCHost hostWithAddress:host] unmanagedCallWithPath:path - completionQueue:_queue]; + _call = [[GRPCHost hostWithAddress:host] unmanagedCallWithPath:path completionQueue:_queue]; if (_call == NULL) { return nil; } @@ -273,35 +270,32 @@ [self startBatchWithOperations:operations errorHandler:nil]; } -- (void)startBatchWithOperations:(NSArray *)operations - errorHandler:(void (^)())errorHandler { +- (void)startBatchWithOperations:(NSArray *)operations errorHandler:(void (^)())errorHandler { size_t nops = operations.count; grpc_op *ops_array = gpr_malloc(nops * sizeof(grpc_op)); size_t i = 0; for (GRPCOperation *operation in operations) { ops_array[i++] = operation.op; } - grpc_call_error error = grpc_call_start_batch( - _call, ops_array, nops, (__bridge_retained void *)(^(bool success) { - if (!success) { - if (errorHandler) { - errorHandler(); - } else { - return; - } - } - for (GRPCOperation *operation in operations) { - [operation finish]; - } - }), - NULL); + grpc_call_error error = grpc_call_start_batch(_call, ops_array, nops, + (__bridge_retained void *)(^(bool success){ + if (!success) { + if (errorHandler) { + errorHandler(); + } else { + return; + } + } + for (GRPCOperation *operation in operations) { + [operation finish]; + } + }), NULL); gpr_free(ops_array); if (error != GRPC_CALL_OK) { [NSException raise:NSInternalInconsistencyException - format:@"A precondition for calling grpc_call_start_batch " - @"wasn't met. Error %i", - error]; + format:@"A precondition for calling grpc_call_start_batch wasn't met. Error %i", + error]; } } diff --git a/src/objective-c/GRPCClient/private/NSError+GRPC.h b/src/objective-c/GRPCClient/private/NSError+GRPC.h index a9a321470c3..e0c1efc1f91 100644 --- a/src/objective-c/GRPCClient/private/NSError+GRPC.h +++ b/src/objective-c/GRPCClient/private/NSError+GRPC.h @@ -36,9 +36,8 @@ @interface NSError (GRPC) /** - * Returns nil if the status code is OK. Otherwise, a NSError whose code is one - * of |GRPCErrorCode| and whose domain is |kGRPCErrorDomain|. + * Returns nil if the status code is OK. Otherwise, a NSError whose code is one of |GRPCErrorCode| + * and whose domain is |kGRPCErrorDomain|. */ -+ (instancetype)grpc_errorFromStatusCode:(grpc_status_code)statusCode - details:(char *)details; ++ (instancetype)grpc_errorFromStatusCode:(grpc_status_code)statusCode details:(char *)details; @end From 61274cac9053878155dc0f00e85e1f5daa4fcfae Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 28 Oct 2016 12:09:59 -0700 Subject: [PATCH 270/286] Revert format changes in related files --- src/objective-c/GRPCClient/GRPCCall.m | 201 ++++------ .../private/GRPCConnectivityMonitor.h | 15 +- .../private/GRPCConnectivityMonitor.m | 68 ++-- src/objective-c/GRPCClient/private/GRPCHost.m | 81 ++-- .../tests/Tests.xcodeproj/project.pbxproj | 368 ++++++++++++++++++ 5 files changed, 515 insertions(+), 218 deletions(-) diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index 85d141aa097..003923fd9f8 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -33,9 +33,9 @@ #import "GRPCCall.h" -#import #include #include +#import #import "private/GRPCConnectivityMonitor.h" #import "private/GRPCHost.h" @@ -45,11 +45,11 @@ #import "private/NSDictionary+GRPC.h" #import "private/NSError+GRPC.h" -NSString *const kGRPCHeadersKey = @"io.grpc.HeadersKey"; -NSString *const kGRPCTrailersKey = @"io.grpc.TrailersKey"; +NSString * const kGRPCHeadersKey = @"io.grpc.HeadersKey"; +NSString * const kGRPCTrailersKey = @"io.grpc.TrailersKey"; static NSMutableDictionary *callFlags; -@interface GRPCCall () +@interface GRPCCall () // Make them read-write. @property(atomic, strong) NSDictionary *responseHeaders; @property(atomic, strong) NSDictionary *responseTrailers; @@ -85,21 +85,17 @@ static NSMutableDictionary *callFlags; // correct ordering. GRXConcurrentWriteable *_responseWriteable; - // The network thread wants the requestWriter to resume (when the server is - // ready for more input), or to stop (on errors), concurrently with user - // threads that want to start it, pause it or stop it. Because a writer isn't - // thread-safe, we'll synchronize those operations on it. - // We don't use a dispatch queue for that purpose, because the writer can call - // writeValue: or writesFinishedWithError: on this GRPCCall as part of those - // operations. We want to be able to pause the writer immediately on - // writeValue:, so we need our locking to be recursive. + // The network thread wants the requestWriter to resume (when the server is ready for more input), + // or to stop (on errors), concurrently with user threads that want to start it, pause it or stop + // it. Because a writer isn't thread-safe, we'll synchronize those operations on it. + // We don't use a dispatch queue for that purpose, because the writer can call writeValue: or + // writesFinishedWithError: on this GRPCCall as part of those operations. We want to be able to + // pause the writer immediately on writeValue:, so we need our locking to be recursive. GRXWriter *_requestWriter; // To create a retain cycle when a call is started, up until it finishes. See - // |startWithWriteable:| and |finishWithError:|. This saves users from having - // to retain a - // reference to the call object if all they're interested in is the handler - // being executed when + // |startWithWriteable:| and |finishWithError:|. This saves users from having to retain a + // reference to the call object if all they're interested in is the handler being executed when // the response arrives. GRPCCall *_retainSelf; @@ -108,16 +104,13 @@ static NSMutableDictionary *callFlags; @synthesize state = _state; -// TODO(jcanizales): If grpc_init is idempotent, this should be changed from -// load to initialize. +// TODO(jcanizales): If grpc_init is idempotent, this should be changed from load to initialize. + (void)load { grpc_init(); callFlags = [NSMutableDictionary dictionary]; } -+ (void)setCallSafety:(GRPCCallSafety)callSafety - host:(NSString *)host - path:(NSString *)path { ++ (void)setCallSafety:(GRPCCallSafety)callSafety host:(NSString *)host path:(NSString *)path { NSString *hostAndPath = [NSString stringWithFormat:@"%@/%@", host, path]; switch (callSafety) { case GRPCCallSafetyDefault: @@ -148,8 +141,7 @@ static NSMutableDictionary *callFlags; path:(NSString *)path requestsWriter:(GRXWriter *)requestWriter { if (!host || !path) { - [NSException raise:NSInvalidArgumentException - format:@"Neither host nor path can be nil."]; + [NSException raise:NSInvalidArgumentException format:@"Neither host nor path can be nil."]; } if (requestWriter.state != GRXWriterStateNotStarted) { [NSException raise:NSInvalidArgumentException @@ -199,10 +191,7 @@ static NSMutableDictionary *callFlags; - (void)cancel { [self finishWithError:[NSError errorWithDomain:kGRPCErrorDomain code:GRPCErrorCodeCancelled - userInfo:@{ - NSLocalizedDescriptionKey : - @"Canceled by app" - }]]; + userInfo:@{NSLocalizedDescriptionKey: @"Canceled by app"}]]; [self cancelCall]; } @@ -217,18 +206,15 @@ static NSMutableDictionary *callFlags; // Only called from the call queue. // The handler will be called from the network queue. -- (void)startReadWithHandler:(void (^)(grpc_byte_buffer *))handler { +- (void)startReadWithHandler:(void(^)(grpc_byte_buffer *))handler { // TODO(jcanizales): Add error handlers for async failures - [_wrappedCall startBatchWithOperations:@[ [[GRPCOpRecvMessage alloc] - initWithHandler:handler] ]]; + [_wrappedCall startBatchWithOperations:@[[[GRPCOpRecvMessage alloc] initWithHandler:handler]]]; } // Called initially from the network queue once response headers are received, -// then "recursively" from the responseWriteable queue after each response from -// the +// then "recursively" from the responseWriteable queue after each response from the // server has been written. -// If the call is currently paused, this is a noop. Restarting the call will -// invoke this +// If the call is currently paused, this is a noop. Restarting the call will invoke this // method. // TODO(jcanizales): Rename to readResponseIfNotPaused. - (void)startNextRead { @@ -251,23 +237,15 @@ static NSMutableDictionary *callFlags; // don't want to throw, because the app shouldn't crash for a behavior // that's on the hands of any server to have. Instead we finish and ask // the server to cancel. - [weakSelf - finishWithError:[NSError - errorWithDomain:kGRPCErrorDomain - code:GRPCErrorCodeResourceExhausted - userInfo:@{ - NSLocalizedDescriptionKey : - @"Client does not have enough " - @"memory to hold the server " - @"response." - }]]; + [weakSelf finishWithError:[NSError errorWithDomain:kGRPCErrorDomain + code:GRPCErrorCodeResourceExhausted + userInfo:@{NSLocalizedDescriptionKey: @"Client does not have enough memory to hold the server response."}]]; [weakSelf cancelCall]; return; } - [weakWriteable enqueueValue:data - completionHandler:^{ - [weakSelf startNextRead]; - }]; + [weakWriteable enqueueValue:data completionHandler:^{ + [weakSelf startNextRead]; + }]; }]; }); } @@ -276,22 +254,19 @@ static NSMutableDictionary *callFlags; - (void)sendHeaders:(NSDictionary *)headers { // TODO(jcanizales): Add error handlers for async failures - [_wrappedCall startBatchWithOperations:@[ - [[GRPCOpSendMetadata alloc] - initWithMetadata:headers - flags:[GRPCCall callFlagsForHost:_host path:_path] - handler:nil] - ]]; + [_wrappedCall startBatchWithOperations:@[[[GRPCOpSendMetadata alloc] initWithMetadata:headers + flags:[GRPCCall callFlagsForHost:_host path:_path] + handler:nil]]]; } #pragma mark GRXWriteable implementation // Only called from the call queue. The error handler will be called from the // network queue if the write didn't succeed. -- (void)writeMessage:(NSData *)message - withErrorHandler:(void (^)())errorHandler { +- (void)writeMessage:(NSData *)message withErrorHandler:(void (^)())errorHandler { + __weak GRPCCall *weakSelf = self; - void (^resumingHandler)(void) = ^{ + void(^resumingHandler)(void) = ^{ // Resume the request writer. GRPCCall *strongSelf = weakSelf; if (strongSelf) { @@ -300,9 +275,8 @@ static NSMutableDictionary *callFlags; } } }; - [_wrappedCall startBatchWithOperations:@[ [[GRPCOpSendMessage alloc] - initWithMessage:message - handler:resumingHandler] ] + [_wrappedCall startBatchWithOperations:@[[[GRPCOpSendMessage alloc] initWithMessage:message + handler:resumingHandler]] errorHandler:errorHandler]; } @@ -317,20 +291,18 @@ static NSMutableDictionary *callFlags; __weak GRPCCall *weakSelf = self; dispatch_async(_callQueue, ^{ - [weakSelf writeMessage:value - withErrorHandler:^{ - [weakSelf - finishWithError:[NSError errorWithDomain:kGRPCErrorDomain + [weakSelf writeMessage:value withErrorHandler:^{ + [weakSelf finishWithError:[NSError errorWithDomain:kGRPCErrorDomain code:GRPCErrorCodeInternal userInfo:nil]]; - }]; + }]; }); } // Only called from the call queue. The error handler will be called from the // network queue if the requests stream couldn't be closed successfully. - (void)finishRequestWithErrorHandler:(void (^)())errorHandler { - [_wrappedCall startBatchWithOperations:@[ [[GRPCOpSendClose alloc] init] ] + [_wrappedCall startBatchWithOperations:@[[[GRPCOpSendClose alloc] init]] errorHandler:errorHandler]; } @@ -351,19 +323,17 @@ static NSMutableDictionary *callFlags; #pragma mark Invoke -// Both handlers will eventually be called, from the network queue. Writes can -// start immediately after this. +// Both handlers will eventually be called, from the network queue. Writes can start immediately +// after this. // The first one (headersHandler), when the response headers are received. // The second one (completionHandler), whenever the RPC finishes for any reason. -- (void)invokeCallWithHeadersHandler:(void (^)(NSDictionary *))headersHandler - completionHandler: - (void (^)(NSError *, NSDictionary *))completionHandler { +- (void)invokeCallWithHeadersHandler:(void(^)(NSDictionary *))headersHandler + completionHandler:(void(^)(NSError *, NSDictionary *))completionHandler { // TODO(jcanizales): Add error handlers for async failures - [_wrappedCall startBatchWithOperations:@[ [[GRPCOpRecvMetadata alloc] - initWithHandler:headersHandler] ]]; - [_wrappedCall - startBatchWithOperations:@[ [[GRPCOpRecvStatus alloc] - initWithHandler:completionHandler] ]]; + [_wrappedCall startBatchWithOperations:@[[[GRPCOpRecvMetadata alloc] + initWithHandler:headersHandler]]]; + [_wrappedCall startBatchWithOperations:@[[[GRPCOpRecvStatus alloc] + initWithHandler:completionHandler]]]; } - (void)invokeCall { @@ -371,31 +341,27 @@ static NSMutableDictionary *callFlags; // Response headers received. self.responseHeaders = headers; [self startNextRead]; - } - completionHandler:^(NSError *error, NSDictionary *trailers) { - self.responseTrailers = trailers; - - if (error) { - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - if (error.userInfo) { - [userInfo addEntriesFromDictionary:error.userInfo]; - } - userInfo[kGRPCTrailersKey] = self.responseTrailers; - // TODO(jcanizales): The C gRPC library doesn't guarantee that the - // headers block will be called before this one, so an error might end - // up with trailers but no headers. We shouldn't call finishWithError - // until ater both blocks are called. It is also when this is done - // that we can provide a merged view of response headers and trailers - // in a thread-safe way. - if (self.responseHeaders) { - userInfo[kGRPCHeadersKey] = self.responseHeaders; - } - error = [NSError errorWithDomain:error.domain - code:error.code - userInfo:userInfo]; - } - [self finishWithError:error]; - }]; + } completionHandler:^(NSError *error, NSDictionary *trailers) { + self.responseTrailers = trailers; + + if (error) { + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + if (error.userInfo) { + [userInfo addEntriesFromDictionary:error.userInfo]; + } + userInfo[kGRPCTrailersKey] = self.responseTrailers; + // TODO(jcanizales): The C gRPC library doesn't guarantee that the headers block will be + // called before this one, so an error might end up with trailers but no headers. We + // shouldn't call finishWithError until ater both blocks are called. It is also when this is + // done that we can provide a merged view of response headers and trailers in a thread-safe + // way. + if (self.responseHeaders) { + userInfo[kGRPCHeadersKey] = self.responseHeaders; + } + error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo]; + } + [self finishWithError:error]; + }]; // Now that the RPC has been initiated, request writes can start. @synchronized(_requestWriter) { [_requestWriter startWithWriteable:self]; @@ -409,16 +375,14 @@ static NSMutableDictionary *callFlags; _state = GRXWriterStateStarted; } - // Create a retain cycle so that this instance lives until the RPC finishes - // (or is cancelled). This makes RPCs in which the call isn't externally - // retained possible (as long as it is started before being autoreleased). - // Care is taken not to retain self strongly in any of the blocks used in this - // implementation, so that the life of the instance is determined by this - // retain cycle. + // Create a retain cycle so that this instance lives until the RPC finishes (or is cancelled). + // This makes RPCs in which the call isn't externally retained possible (as long as it is started + // before being autoreleased). + // Care is taken not to retain self strongly in any of the blocks used in this implementation, so + // that the life of the instance is determined by this retain cycle. _retainSelf = self; - _responseWriteable = - [[GRXConcurrentWriteable alloc] initWithWriteable:writeable]; + _responseWriteable = [[GRXConcurrentWriteable alloc] initWithWriteable:writeable]; _wrappedCall = [[GRPCWrappedCall alloc] initWithHost:_host path:_path]; NSAssert(_wrappedCall, @"Error allocating RPC objects. Low memory?"); @@ -427,25 +391,19 @@ static NSMutableDictionary *callFlags; [self invokeCall]; // TODO(jcanizales): Extract this logic somewhere common. - NSString *host = - [NSURL URLWithString:[@"https://" stringByAppendingString:_host]].host; + NSString *host = [NSURL URLWithString:[@"https://" stringByAppendingString:_host]].host; if (!host) { // TODO(jcanizales): Check this on init. - [NSException raise:NSInvalidArgumentException - format:@"host of %@ is nil", _host]; + [NSException raise:NSInvalidArgumentException format:@"host of %@ is nil", _host]; } __weak typeof(self) weakSelf = self; _connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:host]; void (^handler)() = ^{ typeof(self) strongSelf = weakSelf; if (strongSelf) { - [strongSelf - finishWithError:[NSError errorWithDomain:kGRPCErrorDomain - code:GRPCErrorCodeUnavailable - userInfo:@{ - NSLocalizedDescriptionKey : - @"Connectivity lost." - }]]; + [strongSelf finishWithError:[NSError errorWithDomain:kGRPCErrorDomain + code:GRPCErrorCodeUnavailable + userInfo:@{ NSLocalizedDescriptionKey : @"Connectivity lost." }]]; } }; [_connectivityMonitor handleLossWithHandler:handler @@ -456,8 +414,7 @@ static NSMutableDictionary *callFlags; - (void)setState:(GRXWriterState)newState { @synchronized(self) { // Manual transitions are only allowed from the started or paused states. - if (_state == GRXWriterStateNotStarted || - _state == GRXWriterStateFinished) { + if (_state == GRXWriterStateNotStarted || _state == GRXWriterStateFinished) { return; } diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h index 941b596d2c8..54eaa271c0f 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h @@ -45,7 +45,7 @@ */ #define GRPC_XMACRO_ITEM(methodName, FlagName) \ - @property(nonatomic, readonly) BOOL methodName; +@property(nonatomic, readonly) BOOL methodName; #include "GRPCReachabilityFlagNames.xmacro.h" #undef GRPC_XMACRO_ITEM @@ -60,18 +60,17 @@ - (nonnull instancetype)init NS_UNAVAILABLE; /** - * Queue on which callbacks will be dispatched. Default is the main queue. Set - * it before calling handleLossWithHandler:. + * Queue on which callbacks will be dispatched. Default is the main queue. Set it before calling + * handleLossWithHandler:. */ // TODO(jcanizales): Default to a serial background queue instead. @property(nonatomic, strong, null_resettable) dispatch_queue_t queue; /** - * Calls handler every time the connectivity to this instance's host is lost. If - * this instance is released before that happens, the handler won't be called. - * Only one handler is active at a time, so if this method is called again - * before the previous handler has been called, it might never be called at all - * (or yes, if it has already been queued). + * Calls handler every time the connectivity to this instance's host is lost. If this instance is + * released before that happens, the handler won't be called. + * Only one handler is active at a time, so if this method is called again before the previous + * handler has been called, it might never be called at all (or yes, if it has already been queued). */ - (void)handleLossWithHandler:(nonnull void (^)())handler wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler; diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index fec6391d399..9cc53797ff2 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -58,20 +58,19 @@ } */ -#define GRPC_XMACRO_ITEM(methodName, FlagName) \ - -(BOOL)methodName { \ - return !!(_flags & kSCNetworkReachabilityFlags##FlagName); \ - } +#define GRPC_XMACRO_ITEM(methodName, FlagName) \ +- (BOOL)methodName { \ + return !!(_flags & kSCNetworkReachabilityFlags ## FlagName); \ +} #include "GRPCReachabilityFlagNames.xmacro.h" #undef GRPC_XMACRO_ITEM - (BOOL)isHostReachable { - // Note: connectionOnDemand means it'll be reachable only if using the - // CFSocketStream API or APIs on top of it. - // connectionRequired means we can't tell until a connection is attempted - // (e.g. for VPN on demand). - return self.reachable && !self.interventionRequired && - !self.connectionOnDemand; + // Note: connectionOnDemand means it'll be reachable only if using the CFSocketStream API or APIs + // on top of it. + // connectionRequired means we can't tell until a connection is attempted (e.g. for VPN on + // demand). + return self.reachable && !self.interventionRequired && !self.connectionOnDemand; } - (NSString *)description { @@ -80,9 +79,9 @@ /* * For each flag, add its name to the array if it's ON. Example: - if (self.isCell) { - [activeOptions addObject:@"isCell"]; - } + if (self.isCell) { + [activeOptions addObject:@"isCell"]; + } */ #define GRPC_XMACRO_ITEM(methodName, FlagName) \ @@ -92,14 +91,12 @@ #include "GRPCReachabilityFlagNames.xmacro.h" #undef GRPC_XMACRO_ITEM - return activeOptions.count == 0 - ? @"(none)" - : [activeOptions componentsJoinedByString:@", "]; + return activeOptions.count == 0 ? @"(none)" : [activeOptions componentsJoinedByString:@", "]; } - (BOOL)isEqual:(id)object { return [object isKindOfClass:[GRPCReachabilityFlags class]] && - _flags == ((GRPCReachabilityFlags *)object)->_flags; + _flags == ((GRPCReachabilityFlags *)object)->_flags; } - (NSUInteger)hash { @@ -109,16 +106,15 @@ #pragma mark Connectivity Monitor -// Assumes the third argument is a block that accepts a GRPCReachabilityFlags -// object, and passes the received ones to it. +// Assumes the third argument is a block that accepts a GRPCReachabilityFlags object, and passes the +// received ones to it. static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info) { -#pragma unused(target) - // This can be called many times with the same info. The info is retained by - // SCNetworkReachability while this function is being executed. - void (^handler)(GRPCReachabilityFlags *) = - (__bridge void (^)(GRPCReachabilityFlags *))info; + #pragma unused (target) + // This can be called many times with the same info. The info is retained by SCNetworkReachability + // while this function is being executed. + void (^handler)(GRPCReachabilityFlags *) = (__bridge void (^)(GRPCReachabilityFlags *))info; handler([[GRPCReachabilityFlags alloc] initWithFlags:flags]); } @@ -127,8 +123,7 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, GRPCReachabilityFlags *_previousReachabilityFlags; } -- (nullable instancetype)initWithReachability: - (nullable SCNetworkReachabilityRef)reachability { +- (nullable instancetype)initWithReachability:(nullable SCNetworkReachabilityRef)reachability { if (!reachability) { return nil; } @@ -149,8 +144,7 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, hostName); - GRPCConnectivityMonitor *returnValue = - [[self alloc] initWithReachability:reachability]; + GRPCConnectivityMonitor *returnValue = [[self alloc] initWithReachability:reachability]; if (reachability) { CFRelease(reachability); } @@ -176,19 +170,17 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, } - (void)startListeningWithHandler:(void (^)(GRPCReachabilityFlags *))handler { - // Copy to ensure the handler block is in the heap (and so can't be - // deallocated when this method returns). + // Copy to ensure the handler block is in the heap (and so can't be deallocated when this method + // returns). void (^copiedHandler)(GRPCReachabilityFlags *) = [handler copy]; SCNetworkReachabilityContext context = { - .version = 0, - .info = (__bridge void *)copiedHandler, - .retain = CFRetain, - .release = CFRelease, + .version = 0, + .info = (__bridge void *)copiedHandler, + .retain = CFRetain, + .release = CFRelease, }; - // The following will retain context.info, and release it when the callback is - // set to NULL. - SCNetworkReachabilitySetCallback(_reachabilityRef, - PassFlagsToContextInfoBlock, &context); + // The following will retain context.info, and release it when the callback is set to NULL. + SCNetworkReachabilitySetCallback(_reachabilityRef, PassFlagsToContextInfoBlock, &context); SCNetworkReachabilitySetDispatchQueue(_reachabilityRef, _queue); } diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index 0524472f530..3f9b024eaa8 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -33,9 +33,9 @@ #import "GRPCHost.h" -#import #include #include +#import #ifdef GRPC_COMPILE_WITH_CRONET #import #import @@ -48,8 +48,7 @@ NS_ASSUME_NONNULL_BEGIN -// TODO(jcanizales): Generate the version in a standalone header, from -// templates. Like +// TODO(jcanizales): Generate the version in a standalone header, from templates. Like // templates/src/core/surface/version.c.template . #define GRPC_OBJC_VERSION_STRING @"1.0.0" @@ -62,8 +61,7 @@ static NSMutableDictionary *kHostCache; static GRPCConnectivityMonitor *connectivityMonitor = nil; @implementation GRPCHost { - // TODO(mlumish): Investigate whether caching channels with strong links is a - // good idea. + // TODO(mlumish): Investigate whether caching channels with strong links is a good idea. GRPCChannel *_channel; } @@ -83,13 +81,11 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; return nil; } - // To provide a default port, we try to interpret the address. If it's just a - // host name without scheme and without port, we'll use port 443. If it has a - // scheme, we pass it untouched to the C gRPC library. - // TODO(jcanizales): Add unit tests for the types of addresses we want to let - // pass untouched. - NSURL *hostURL = - [NSURL URLWithString:[@"https://" stringByAppendingString:address]]; + // To provide a default port, we try to interpret the address. If it's just a host name without + // scheme and without port, we'll use port 443. If it has a scheme, we pass it untouched to the C + // gRPC library. + // TODO(jcanizales): Add unit tests for the types of addresses we want to let pass untouched. + NSURL *hostURL = [NSURL URLWithString:[@"https://" stringByAppendingString:address]]; if (hostURL.host && !hostURL.port) { address = [hostURL.host stringByAppendingString:@":443"]; } @@ -99,7 +95,6 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; dispatch_once(&cacheInitialization, ^{ kHostCache = [NSMutableDictionary dictionary]; }); - @synchronized(kHostCache) { GRPCHost *cachedHost = kHostCache[address]; if (cachedHost) { @@ -137,7 +132,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; } + (void)resetAllHostSettings { - @synchronized(kHostCache) { + @synchronized (kHostCache) { kHostCache = [NSMutableDictionary dictionary]; } } @@ -163,19 +158,16 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; static NSError *kDefaultRootsError; static dispatch_once_t loading; dispatch_once(&loading, ^{ - NSString *defaultPath = @"gRPCCertificates.bundle/roots"; // .pem - // Do not use NSBundle.mainBundle, as it's nil for tests of library - // projects. + NSString *defaultPath = @"gRPCCertificates.bundle/roots"; // .pem + // Do not use NSBundle.mainBundle, as it's nil for tests of library projects. NSBundle *bundle = [NSBundle bundleForClass:self.class]; NSString *path = [bundle pathForResource:defaultPath ofType:@"pem"]; NSError *error; - // Files in PEM format can have non-ASCII characters in their comments (e.g. - // for the name of the issuer). Load them as UTF8 and produce an ASCII - // equivalent. - NSString *contentInUTF8 = - [NSString stringWithContentsOfFile:path - encoding:NSUTF8StringEncoding - error:&error]; + // Files in PEM format can have non-ASCII characters in their comments (e.g. for the name of the + // issuer). Load them as UTF8 and produce an ASCII equivalent. + NSString *contentInUTF8 = [NSString stringWithContentsOfFile:path + encoding:NSUTF8StringEncoding + error:&error]; if (contentInUTF8 == nil) { kDefaultRootsError = error; return; @@ -193,15 +185,11 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; if (errorPtr) { *errorPtr = kDefaultRootsError; } - NSAssert(kDefaultRootsASCII, - @"Could not read gRPCCertificates.bundle/roots.pem. This file, " - "with the root certificates, is needed to establish secure " - "(TLS) connections. " - "Because the file is distributed with the gRPC library, this " - "error is usually a sign " - "that the library wasn't configured correctly for your " - "project. Error: %@", - kDefaultRootsError); + NSAssert(kDefaultRootsASCII, @"Could not read gRPCCertificates.bundle/roots.pem. This file, " + "with the root certificates, is needed to establish secure (TLS) connections. " + "Because the file is distributed with the gRPC library, this error is usually a sign " + "that the library wasn't configured correctly for your project. Error: %@", + kDefaultRootsError); return NO; } rootsASCII = kDefaultRootsASCII; @@ -212,12 +200,10 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; creds = grpc_ssl_credentials_create(rootsASCII.bytes, NULL, NULL); } else { grpc_ssl_pem_key_cert_pair key_cert_pair; - NSData *privateKeyASCII = - [pemPrivateKey dataUsingEncoding:NSASCIIStringEncoding - allowLossyConversion:YES]; - NSData *certChainASCII = - [pemCertChain dataUsingEncoding:NSASCIIStringEncoding - allowLossyConversion:YES]; + NSData *privateKeyASCII = [pemPrivateKey dataUsingEncoding:NSASCIIStringEncoding + allowLossyConversion:YES]; + NSData *certChainASCII = [pemCertChain dataUsingEncoding:NSASCIIStringEncoding + allowLossyConversion:YES]; key_cert_pair.private_key = privateKeyASCII.bytes; key_cert_pair.cert_chain = certChainASCII.bytes; creds = grpc_ssl_credentials_create(rootsASCII.bytes, &key_cert_pair, NULL); @@ -237,8 +223,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; NSMutableDictionary *args = [NSMutableDictionary dictionary]; // TODO(jcanizales): Add OS and device information (see - // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#user-agents - // ). + // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#user-agents ). NSString *userAgent = @"grpc-objc/" GRPC_OBJC_VERSION_STRING; if (_userAgentPrefix) { userAgent = [_userAgentPrefix stringByAppendingFormat:@" %@", userAgent]; @@ -252,7 +237,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; if (_responseSizeLimitOverride) { args[@GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH] = _responseSizeLimitOverride; } - // Use 10000ms initial backoff time for correct behavior on bad/slow networks + // Use 10000ms initial backoff time for correct behavior on bad/slow networks args[@GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS] = @10000; return args; } @@ -266,15 +251,12 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; GRPCChannel *channel; @synchronized(self) { if (_channelCreds == nil) { - [self setTLSPEMRootCerts:nil - withPrivateKey:nil - withCertChain:nil - error:nil]; + [self setTLSPEMRootCerts:nil withPrivateKey:nil withCertChain:nil error:nil]; } #ifdef GRPC_COMPILE_WITH_CRONET if (useCronet) { - channel = - [GRPCChannel secureCronetChannelWithHost:_address channelArgs:args]; + channel = [GRPCChannel secureCronetChannelWithHost:_address + channelArgs:args]; } else #endif { @@ -290,8 +272,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil; } - (NSString *)hostName { - // TODO(jcanizales): Default to nil instead of _address when Issue #2635 is - // clarified. + // TODO(jcanizales): Default to nil instead of _address when Issue #2635 is clarified. return _hostNameOverride ?: _address; } diff --git a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj index c4a6567ae0e..3764cde8fce 100644 --- a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj +++ b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj @@ -367,12 +367,15 @@ isa = PBXNativeTarget; buildConfigurationList = 5E8A5DAE1D3840B4000F8BC4 /* Build configuration list for PBXNativeTarget "CoreCronetEnd2EndTests" */; buildPhases = ( + 19087EB522BF2CB904F217C6 /* 📦 Check Pods Manifest.lock */, F58F17E425446B15028B9F74 /* [CP] Check Pods Manifest.lock */, 5E8A5DA01D3840B4000F8BC4 /* Sources */, 5E8A5DA11D3840B4000F8BC4 /* Frameworks */, 5E8A5DA21D3840B4000F8BC4 /* Resources */, E63468C760D0724F18861822 /* [CP] Embed Pods Frameworks */, 6DFE9E77CAB5760196D79E0F /* [CP] Copy Pods Resources */, + 39F149BCA768141AB2C9605E /* 📦 Embed Pods Frameworks */, + A7FFC1089E80998BD3D8A74A /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -388,12 +391,15 @@ isa = PBXNativeTarget; buildConfigurationList = 5EE84BFB1D4717E40050C6CC /* Build configuration list for PBXNativeTarget "InteropTestsRemoteWithCronet" */; buildPhases = ( + 0F063848BBC170233CB9174A /* 📦 Check Pods Manifest.lock */, C0F7B1FF6F88CC5FBF362F4C /* [CP] Check Pods Manifest.lock */, 5EE84BED1D4717E40050C6CC /* Sources */, 5EE84BEE1D4717E40050C6CC /* Frameworks */, 5EE84BEF1D4717E40050C6CC /* Resources */, 31F8D1C407195CBF0C02929B /* [CP] Embed Pods Frameworks */, DB4D0E73C229F2FF3B364AB3 /* [CP] Copy Pods Resources */, + 80E19E63650C69937C98132E /* 📦 Embed Pods Frameworks */, + 77F81F984F9E1A6D1980CE21 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -409,12 +415,15 @@ isa = PBXNativeTarget; buildConfigurationList = 63423F4D1B150A5F006CF63C /* Build configuration list for PBXNativeTarget "AllTests" */; buildPhases = ( + 15013B7EA3F1FC5E439C9FE4 /* 📦 Check Pods Manifest.lock */, 914ADDD7106BA9BB8A7E569F /* [CP] Check Pods Manifest.lock */, 63423F401B150A5F006CF63C /* Sources */, 63423F411B150A5F006CF63C /* Frameworks */, 63423F421B150A5F006CF63C /* Resources */, A441F71824DCB9D0CA297748 /* [CP] Copy Pods Resources */, 5F14F59509E10C2852014F9E /* [CP] Embed Pods Frameworks */, + 23D92EBBC256C129A46F7A84 /* 📦 Embed Pods Frameworks */, + 711CEB2D404D3DE6AF548461 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -430,11 +439,13 @@ isa = PBXNativeTarget; buildConfigurationList = 635697DB1B14FC11007A7283 /* Build configuration list for PBXNativeTarget "Tests" */; buildPhases = ( + 10292E33F3C86516707EEF7B /* 📦 Check Pods Manifest.lock */, 796680C7599CB4ED736DD62A /* [CP] Check Pods Manifest.lock */, 635697C31B14FC11007A7283 /* Sources */, 635697C41B14FC11007A7283 /* Frameworks */, 635697C51B14FC11007A7283 /* CopyFiles */, AEEBFC914CBAEE347382E8C4 /* [CP] Copy Pods Resources */, + 03DF64A98174687EB75C8E97 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -449,12 +460,15 @@ isa = PBXNativeTarget; buildConfigurationList = 63DC841B1BE15179000708E8 /* Build configuration list for PBXNativeTarget "RxLibraryUnitTests" */; buildPhases = ( + B43DE93E4F0303EF4EAEE11D /* 📦 Check Pods Manifest.lock */, B2986CEEE8CDD4901C97598B /* [CP] Check Pods Manifest.lock */, 63DC840F1BE15179000708E8 /* Sources */, 63DC84101BE15179000708E8 /* Frameworks */, 63DC84111BE15179000708E8 /* Resources */, 4F5690DC0E6AD6663FE78B8B /* [CP] Embed Pods Frameworks */, C977426A8727267BBAC7D48E /* [CP] Copy Pods Resources */, + 32B797E37F2930B455ACC451 /* 📦 Embed Pods Frameworks */, + A27B9173DCE3B597DF3A2DB3 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -470,12 +484,15 @@ isa = PBXNativeTarget; buildConfigurationList = 63DC842B1BE15267000708E8 /* Build configuration list for PBXNativeTarget "InteropTestsRemote" */; buildPhases = ( + 70A6CC12EA2EE59304D0AAFD /* 📦 Check Pods Manifest.lock */, 4C406327D3907A5E5FBA8AC9 /* [CP] Check Pods Manifest.lock */, 63DC841F1BE15267000708E8 /* Sources */, 63DC84201BE15267000708E8 /* Frameworks */, 63DC84211BE15267000708E8 /* Resources */, 900B6EDD4D16BE7D765C3885 /* [CP] Embed Pods Frameworks */, C2E09DC4BD239F71160F0CC1 /* [CP] Copy Pods Resources */, + 39ADC6D7DCA87D823CF3D846 /* 📦 Embed Pods Frameworks */, + D8308995758FFA86B3729094 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -491,12 +508,15 @@ isa = PBXNativeTarget; buildConfigurationList = 63DC843C1BE15294000708E8 /* Build configuration list for PBXNativeTarget "InteropTestsLocalSSL" */; buildPhases = ( + F14FCE3D40412E4FCC9724B2 /* 📦 Check Pods Manifest.lock */, 5C20DCCB71C3991E6FE78C22 /* [CP] Check Pods Manifest.lock */, 63DC84301BE15294000708E8 /* Sources */, 63DC84311BE15294000708E8 /* Frameworks */, 63DC84321BE15294000708E8 /* Resources */, C591129ACE9F6CC5EE03FCDE /* [CP] Embed Pods Frameworks */, 693DD0B453431D64EA24FD66 /* [CP] Copy Pods Resources */, + 38C9DA9978F7CEC5C1C948FD /* 📦 Embed Pods Frameworks */, + F44F7D1F73DABC8DFA879EBB /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -512,12 +532,15 @@ isa = PBXNativeTarget; buildConfigurationList = 63DC844B1BE152B5000708E8 /* Build configuration list for PBXNativeTarget "InteropTestsLocalCleartext" */; buildPhases = ( + 47F37D18E60280F28A8963E1 /* 📦 Check Pods Manifest.lock */, 7418AC7B3844B29E48D24FC7 /* [CP] Check Pods Manifest.lock */, 63DC843F1BE152B5000708E8 /* Sources */, 63DC84401BE152B5000708E8 /* Frameworks */, 63DC84411BE152B5000708E8 /* Resources */, A8E3AC66DF770B774114A30E /* [CP] Embed Pods Frameworks */, 8AD3130D3C58A0FB32FF2A36 /* [CP] Copy Pods Resources */, + 4FE4AE42DC5C550150618556 /* 📦 Embed Pods Frameworks */, + 3139677FA758B7AF69186BC0 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -643,6 +666,111 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 03DF64A98174687EB75C8E97 /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Tests/Pods-Tests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 0F063848BBC170233CB9174A /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 10292E33F3C86516707EEF7B /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 15013B7EA3F1FC5E439C9FE4 /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 19087EB522BF2CB904F217C6 /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 23D92EBBC256C129A46F7A84 /* 📦 Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AllTests/Pods-AllTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3139677FA758B7AF69186BC0 /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsLocalCleartext/Pods-InteropTestsLocalCleartext-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 31F8D1C407195CBF0C02929B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -658,6 +786,81 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemoteWithCronet/Pods-InteropTestsRemoteWithCronet-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 32B797E37F2930B455ACC451 /* 📦 Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxLibraryUnitTests/Pods-RxLibraryUnitTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 38C9DA9978F7CEC5C1C948FD /* 📦 Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsLocalSSL/Pods-InteropTestsLocalSSL-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 39ADC6D7DCA87D823CF3D846 /* 📦 Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemote/Pods-InteropTestsRemote-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 39F149BCA768141AB2C9605E /* 📦 Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 47F37D18E60280F28A8963E1 /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; 4C406327D3907A5E5FBA8AC9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -688,6 +891,21 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxLibraryUnitTests/Pods-RxLibraryUnitTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 4FE4AE42DC5C550150618556 /* 📦 Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsLocalCleartext/Pods-InteropTestsLocalCleartext-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 5C20DCCB71C3991E6FE78C22 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -748,6 +966,36 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; + 70A6CC12EA2EE59304D0AAFD /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 711CEB2D404D3DE6AF548461 /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AllTests/Pods-AllTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 7418AC7B3844B29E48D24FC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -763,6 +1011,21 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; + 77F81F984F9E1A6D1980CE21 /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemoteWithCronet/Pods-InteropTestsRemoteWithCronet-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 796680C7599CB4ED736DD62A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -778,6 +1041,21 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; + 80E19E63650C69937C98132E /* 📦 Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemoteWithCronet/Pods-InteropTestsRemoteWithCronet-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 8AD3130D3C58A0FB32FF2A36 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -823,6 +1101,21 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; + A27B9173DCE3B597DF3A2DB3 /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxLibraryUnitTests/Pods-RxLibraryUnitTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; A441F71824DCB9D0CA297748 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -838,6 +1131,21 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AllTests/Pods-AllTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; + A7FFC1089E80998BD3D8A74A /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; A8E3AC66DF770B774114A30E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -883,6 +1191,21 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; + B43DE93E4F0303EF4EAEE11D /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; C0F7B1FF6F88CC5FBF362F4C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -943,6 +1266,21 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxLibraryUnitTests/Pods-RxLibraryUnitTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; + D8308995758FFA86B3729094 /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemote/Pods-InteropTestsRemote-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; DB4D0E73C229F2FF3B364AB3 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -973,6 +1311,36 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + F14FCE3D40412E4FCC9724B2 /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + F44F7D1F73DABC8DFA879EBB /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsLocalSSL/Pods-InteropTestsLocalSSL-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; F58F17E425446B15028B9F74 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; From 45096614fe572470925d61fb65a87808ede89a6c Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 28 Oct 2016 12:53:59 -0700 Subject: [PATCH 271/286] Fix incorrect ruby_generator.cc merge --- src/compiler/ruby_generator.cc | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index 42ea3586dba..c85babf1b86 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -198,9 +198,6 @@ grpc::string GetServices(const FileDescriptor *file) { out.Print("\n"); std::vector modules = Split(file->package(), '.'); for (size_t i = 0; i < modules.size(); ++i) { - std::map module_vars = ListToDict({ - "module.name", CapitalizeFirst(modules[i]), - }); std::map module_vars = ListToDict({ "module.name", PackageToModule(modules[i]), }); From 2a25f3302572a05af05637f47bcef9bd8157fd3a Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Fri, 28 Oct 2016 13:27:04 -0700 Subject: [PATCH 272/286] Use nil function instead of empty function --- src/objective-c/GRPCClient/GRPCCall.m | 3 +-- .../GRPCClient/private/GRPCConnectivityMonitor.h | 4 ++-- .../GRPCClient/private/GRPCConnectivityMonitor.m | 6 +++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index 003923fd9f8..44393f6b999 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -407,8 +407,7 @@ static NSMutableDictionary *callFlags; } }; [_connectivityMonitor handleLossWithHandler:handler - wifiStatusChangeHandler:^{ - }]; + wifiStatusChangeHandler:nil]; } - (void)setState:(GRXWriterState)newState { diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h index 54eaa271c0f..be58138c785 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h @@ -72,6 +72,6 @@ * Only one handler is active at a time, so if this method is called again before the previous * handler has been called, it might never be called at all (or yes, if it has already been queued). */ -- (void)handleLossWithHandler:(nonnull void (^)())handler - wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler; +- (void)handleLossWithHandler:(void (^)())lossHandler + wifiStatusChangeHandler:(void (^)())wifiStatusChangeHandler; @end diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index 9cc53797ff2..c6f6b39b613 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -151,14 +151,14 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, return returnValue; } -- (void)handleLossWithHandler:(void (^)())handler - wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler { +- (void)handleLossWithHandler:(void (^)())lossHandler + wifiStatusChangeHandler:(void (^)())wifiStatusChangeHandler { __weak typeof(self) weakSelf = self; [self startListeningWithHandler:^(GRPCReachabilityFlags *flags) { typeof(self) strongSelf = weakSelf; if (strongSelf) { if (!flags.reachable) { - handler(); + lossHandler(); } else if (strongSelf->_previousReachabilityFlags && (flags.isWWAN ^ strongSelf->_previousReachabilityFlags.isWWAN)) { From e7223afdd5121cedb4f1971abac45146ffd3a477 Mon Sep 17 00:00:00 2001 From: Noah Eisen Date: Fri, 28 Oct 2016 13:39:06 -0700 Subject: [PATCH 273/286] Use default Empty ctor instead of Empty::default_instance --- test/cpp/interop/interop_client.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc index d0dd0718aab..9615a208b50 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -167,8 +167,8 @@ bool InteropClient::AssertStatusCode(const Status& s, bool InteropClient::DoEmpty() { gpr_log(GPR_DEBUG, "Sending an empty rpc..."); - Empty request = Empty::default_instance(); - Empty response = Empty::default_instance(); + Empty request; + Empty response; ClientContext context; Status s = serviceStub_.Get()->EmptyCall(&context, request, &response); @@ -1010,8 +1010,8 @@ bool InteropClient::DoCustomMetadata() { bool InteropClient::DoUnimplementedService() { gpr_log(GPR_DEBUG, "Sending a request for an unimplemented service..."); - Empty request = Empty::default_instance(); - Empty response = Empty::default_instance(); + Empty request; + Empty response; ClientContext context; UnimplementedService::Stub* stub = @@ -1031,8 +1031,8 @@ bool InteropClient::DoUnimplementedService() { bool InteropClient::DoUnimplementedMethod() { gpr_log(GPR_DEBUG, "Sending a request for an unimplemented rpc..."); - Empty request = Empty::default_instance(); - Empty response = Empty::default_instance(); + Empty request; + Empty response; ClientContext context; Status s = From 81cdf1e34e8501e3e0e50182dd6d13499b473868 Mon Sep 17 00:00:00 2001 From: Masood Malekghassemi Date: Thu, 20 Oct 2016 14:42:31 -0700 Subject: [PATCH 274/286] Fix Python tests' module loading behavior --- src/python/grpcio_tests/tests/_loader.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/python/grpcio_tests/tests/_loader.py b/src/python/grpcio_tests/tests/_loader.py index c2f097f6c61..621bedc7bb8 100644 --- a/src/python/grpcio_tests/tests/_loader.py +++ b/src/python/grpcio_tests/tests/_loader.py @@ -84,11 +84,9 @@ class Loader(object): along. """ for importer, module_name, is_package in ( - pkgutil.iter_modules(package_paths)): + pkgutil.walk_packages(package_paths)): module = importer.find_module(module_name).load_module(module_name) self.visit_module(module) - if is_package: - self.walk_packages(module.__path__) def visit_module(self, module): """Visits the module, adding discovered tests to the test suite. From d953959e2bafd645b6ed674861a310daba5f80ae Mon Sep 17 00:00:00 2001 From: Masood Malekghassemi Date: Thu, 20 Oct 2016 14:47:14 -0700 Subject: [PATCH 275/286] Enable split code generation To support magical internal build processes, the pb2 files need to be split into pure-proto and gRPC parts. This performs that split and further fixes bad module names in the test harness that interfered with the intended test implementation. An unfortunate side effect, due to limitations of protoc and holdover behavior we must support in major version 1.x, is that trash files are generated in split generation. This shouldn't be a problem in normal protoc plugin use. --- src/compiler/python_generator.cc | 386 +++++++++++------- src/compiler/python_generator.h | 4 - src/python/grpcio_health_checking/.gitignore | 1 + src/python/grpcio_tests/.gitignore | 1 + src/python/grpcio_tests/setup.py | 10 +- .../protoc_plugin/_split_definitions_test.py | 304 ++++++++++++++ .../protos/invocation_testing/__init__.py | 30 ++ .../protos/invocation_testing/same.proto | 39 ++ .../split_messages/__init__.py | 30 ++ .../split_messages/messages.proto | 35 ++ .../split_services/__init__.py | 30 ++ .../split_services/services.proto | 38 ++ src/python/grpcio_tests/tests/tests.json | 90 ++-- 13 files changed, 812 insertions(+), 186 deletions(-) create mode 100644 src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py create mode 100644 src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/__init__.py create mode 100644 src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/same.proto create mode 100644 src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_messages/__init__.py create mode 100644 src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_messages/messages.proto create mode 100644 src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_services/__init__.py create mode 100644 src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_services/services.proto diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc index 6830f49931d..270291ac33e 100644 --- a/src/compiler/python_generator.cc +++ b/src/compiler/python_generator.cc @@ -35,6 +35,8 @@ #include #include #include +#include +#include #include #include #include @@ -66,66 +68,7 @@ using std::vector; namespace grpc_python_generator { -GeneratorConfiguration::GeneratorConfiguration() - : grpc_package_root("grpc"), beta_package_root("grpc.beta") {} - -PythonGrpcGenerator::PythonGrpcGenerator(const GeneratorConfiguration& config) - : config_(config) {} - -PythonGrpcGenerator::~PythonGrpcGenerator() {} - -bool PythonGrpcGenerator::Generate(const FileDescriptor* file, - const grpc::string& parameter, - GeneratorContext* context, - grpc::string* error) const { - // Get output file name. - grpc::string file_name; - static const int proto_suffix_length = strlen(".proto"); - if (file->name().size() > static_cast(proto_suffix_length) && - file->name().find_last_of(".proto") == file->name().size() - 1) { - file_name = - file->name().substr(0, file->name().size() - proto_suffix_length) + - "_pb2.py"; - } else { - *error = "Invalid proto file name. Proto file must end with .proto"; - return false; - } - - std::unique_ptr output( - context->OpenForInsert(file_name, "module_scope")); - CodedOutputStream coded_out(output.get()); - bool success = false; - grpc::string code = ""; - tie(success, code) = grpc_python_generator::GetServices(file, config_); - if (success) { - coded_out.WriteRaw(code.data(), code.size()); - return true; - } else { - return false; - } -} - namespace { -////////////////////////////////// -// BEGIN FORMATTING BOILERPLATE // -////////////////////////////////// - -// Converts an initializer list of the form { key0, value0, key1, value1, ... } -// into a map of key* to value*. Is merely a readability helper for later code. -map ListToDict( - const initializer_list& values) { - assert(values.size() % 2 == 0); - map value_map; - auto value_iter = values.begin(); - for (unsigned i = 0; i < values.size() / 2; ++i) { - grpc::string key = *value_iter; - ++value_iter; - grpc::string value = *value_iter; - value_map[key] = value; - ++value_iter; - } - return value_map; -} // Provides RAII indentation handling. Use as: // { @@ -146,10 +89,6 @@ class IndentScope { Printer* printer_; }; -//////////////////////////////// -// END FORMATTING BOILERPLATE // -//////////////////////////////// - // TODO(https://github.com/google/protobuf/issues/888): // Export `ModuleName` from protobuf's // `src/google/protobuf/compiler/python/python_generator.cc` file. @@ -173,9 +112,61 @@ grpc::string ModuleAlias(const grpc::string& filename) { return module_name; } -bool GetModuleAndMessagePath(const Descriptor* type, - const ServiceDescriptor* service, - grpc::string* out) { +// Tucks all generator state in an anonymous namespace away from +// PythonGrpcGenerator and the header file, mostly to encourage future changes +// to not require updates to the grpcio-tools C++ code part. Assumes that it is +// only ever used from a single thread. +struct PrivateGenerator { + const GeneratorConfiguration& config; + const FileDescriptor *file; + + bool generate_in_pb2_grpc; + + Printer *out; + + PrivateGenerator(const GeneratorConfiguration& config, + const FileDescriptor *file); + + std::pair GetGrpcServices(); + + private: + bool PrintPreamble(); + bool PrintBetaPreamble(); + bool PrintGAServices(); + bool PrintBetaServices(); + + bool PrintAddServicerToServer( + const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service); + bool PrintServicer(const ServiceDescriptor* service); + bool PrintStub(const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service); + + bool PrintBetaServicer(const ServiceDescriptor* service); + bool PrintBetaServerFactory(const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service); + bool PrintBetaStub(const ServiceDescriptor* service); + bool PrintBetaStubFactory( + const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service); + + // Get all comments (leading, leading_detached, trailing) and print them as a + // docstring. Any leading space of a line will be removed, but the line + // wrapping will not be changed. + template + void PrintAllComments(const DescriptorType* descriptor); + + bool GetModuleAndMessagePath(const Descriptor* type, + grpc::string* out); +}; + + +PrivateGenerator::PrivateGenerator(const GeneratorConfiguration& config, + const FileDescriptor *file) + : config(config), file(file) {} + +bool PrivateGenerator::GetModuleAndMessagePath(const Descriptor* type, + grpc::string* out) { const Descriptor* path_elem_type = type; vector message_path; do { @@ -188,9 +179,13 @@ bool GetModuleAndMessagePath(const Descriptor* type, file_name.find_last_of(".proto") == file_name.size() - 1)) { return false; } - grpc::string service_file_name = service->file()->name(); - grpc::string module = - service_file_name == file_name ? "" : ModuleAlias(file_name) + "."; + grpc::string generator_file_name = file->name(); + grpc::string module; + if (generator_file_name != file_name || generate_in_pb2_grpc) { + module = ModuleAlias(file_name) + "."; + } else { + module = ""; + } grpc::string message_type; for (auto path_iter = message_path.rbegin(); path_iter != message_path.rend(); ++path_iter) { @@ -202,33 +197,30 @@ bool GetModuleAndMessagePath(const Descriptor* type, return true; } -// Get all comments (leading, leading_detached, trailing) and print them as a -// docstring. Any leading space of a line will be removed, but the line wrapping -// will not be changed. template -static void PrintAllComments(const DescriptorType* desc, Printer* printer) { - std::vector comments; - grpc_generator::GetComment(desc, grpc_generator::COMMENTTYPE_LEADING_DETACHED, +void PrivateGenerator::PrintAllComments(const DescriptorType* descriptor) { + vector comments; + grpc_generator::GetComment(descriptor, grpc_generator::COMMENTTYPE_LEADING_DETACHED, &comments); - grpc_generator::GetComment(desc, grpc_generator::COMMENTTYPE_LEADING, + grpc_generator::GetComment(descriptor, grpc_generator::COMMENTTYPE_LEADING, &comments); - grpc_generator::GetComment(desc, grpc_generator::COMMENTTYPE_TRAILING, + grpc_generator::GetComment(descriptor, grpc_generator::COMMENTTYPE_TRAILING, &comments); if (comments.empty()) { return; } - printer->Print("\"\"\""); + out->Print("\"\"\""); for (auto it = comments.begin(); it != comments.end(); ++it) { size_t start_pos = it->find_first_not_of(' '); if (start_pos != grpc::string::npos) { - printer->Print(it->c_str() + start_pos); + out->Print(it->c_str() + start_pos); } - printer->Print("\n"); + out->Print("\n"); } - printer->Print("\"\"\"\n"); + out->Print("\"\"\"\n"); } -bool PrintBetaServicer(const ServiceDescriptor* service, Printer* out) { +bool PrivateGenerator::PrintBetaServicer(const ServiceDescriptor* service) { out->Print("\n\n"); out->Print("class Beta$Service$Servicer(object):\n", "Service", service->name()); @@ -241,7 +233,7 @@ bool PrintBetaServicer(const ServiceDescriptor* service, Printer* out) { "generated\n" "only to ease transition from grpcio<0.15.0 to " "grpcio>=0.15.0.\"\"\"\n"); - PrintAllComments(service, out); + PrintAllComments(service); for (int i = 0; i < service->method_count(); ++i) { auto meth = service->method(i); grpc::string arg_name = @@ -250,7 +242,7 @@ bool PrintBetaServicer(const ServiceDescriptor* service, Printer* out) { meth->name(), "ArgName", arg_name); { IndentScope raii_method_indent(out); - PrintAllComments(meth, out); + PrintAllComments(meth); out->Print("context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)\n"); } } @@ -258,7 +250,7 @@ bool PrintBetaServicer(const ServiceDescriptor* service, Printer* out) { return true; } -bool PrintBetaStub(const ServiceDescriptor* service, Printer* out) { +bool PrivateGenerator::PrintBetaStub(const ServiceDescriptor* service) { out->Print("\n\n"); out->Print("class Beta$Service$Stub(object):\n", "Service", service->name()); { @@ -270,18 +262,20 @@ bool PrintBetaStub(const ServiceDescriptor* service, Printer* out) { "generated\n" "only to ease transition from grpcio<0.15.0 to " "grpcio>=0.15.0.\"\"\"\n"); - PrintAllComments(service, out); + PrintAllComments(service); for (int i = 0; i < service->method_count(); ++i) { const MethodDescriptor* meth = service->method(i); grpc::string arg_name = meth->client_streaming() ? "request_iterator" : "request"; - auto methdict = ListToDict({"Method", meth->name(), "ArgName", arg_name}); + auto methdict; + methdict["Method"] = meth->name(); + methdict["ArgName"] = arg_name; out->Print(methdict, "def $Method$(self, $ArgName$, timeout, metadata=None, " "with_call=False, protocol_options=None):\n"); { IndentScope raii_method_indent(out); - PrintAllComments(meth, out); + PrintAllComments(meth); out->Print("raise NotImplementedError()\n"); } if (!meth->server_streaming()) { @@ -292,8 +286,9 @@ bool PrintBetaStub(const ServiceDescriptor* service, Printer* out) { return true; } -bool PrintBetaServerFactory(const grpc::string& package_qualified_service_name, - const ServiceDescriptor* service, Printer* out) { +bool PrivateGenerator::PrintBetaServerFactory( + const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service) { out->Print("\n\n"); out->Print( "def beta_create_$Service$_server(servicer, pool=None, " @@ -317,12 +312,12 @@ bool PrintBetaServerFactory(const grpc::string& package_qualified_service_name, grpc::string(method->server_streaming() ? "stream_" : "unary_") + "inline"; grpc::string input_message_module_and_class; - if (!GetModuleAndMessagePath(method->input_type(), service, + if (!GetModuleAndMessagePath(method->input_type(), &input_message_module_and_class)) { return false; } grpc::string output_message_module_and_class; - if (!GetModuleAndMessagePath(method->output_type(), service, + if (!GetModuleAndMessagePath(method->output_type(), &output_message_module_and_class)) { return false; } @@ -395,11 +390,11 @@ bool PrintBetaServerFactory(const grpc::string& package_qualified_service_name, return true; } -bool PrintBetaStubFactory(const grpc::string& package_qualified_service_name, - const ServiceDescriptor* service, Printer* out) { - map dict = ListToDict({ - "Service", service->name(), - }); +bool PrivateGenerator::PrintBetaStubFactory( + const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service) { + map dict; + dict["Service"] = service->name(); out->Print("\n\n"); out->Print(dict, "def beta_create_$Service$_stub(channel, host=None," @@ -421,12 +416,12 @@ bool PrintBetaStubFactory(const grpc::string& package_qualified_service_name, grpc::string(method->client_streaming() ? "STREAM" : "UNARY") + "_" + grpc::string(method->server_streaming() ? "STREAM" : "UNARY"); grpc::string input_message_module_and_class; - if (!GetModuleAndMessagePath(method->input_type(), service, + if (!GetModuleAndMessagePath(method->input_type(), &input_message_module_and_class)) { return false; } grpc::string output_message_module_and_class; - if (!GetModuleAndMessagePath(method->output_type(), service, + if (!GetModuleAndMessagePath(method->output_type(), &output_message_module_and_class)) { return false; } @@ -493,13 +488,13 @@ bool PrintBetaStubFactory(const grpc::string& package_qualified_service_name, return true; } -bool PrintStub(const grpc::string& package_qualified_service_name, - const ServiceDescriptor* service, Printer* out) { +bool PrivateGenerator::PrintStub(const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service) { out->Print("\n\n"); out->Print("class $Service$Stub(object):\n", "Service", service->name()); { IndentScope raii_class_indent(out); - PrintAllComments(service, out); + PrintAllComments(service); out->Print("\n"); out->Print("def __init__(self, channel):\n"); { @@ -518,12 +513,12 @@ bool PrintStub(const grpc::string& package_qualified_service_name, grpc::string(method->client_streaming() ? "stream" : "unary") + "_" + grpc::string(method->server_streaming() ? "stream" : "unary"); grpc::string request_module_and_class; - if (!GetModuleAndMessagePath(method->input_type(), service, + if (!GetModuleAndMessagePath(method->input_type(), &request_module_and_class)) { return false; } grpc::string response_module_and_class; - if (!GetModuleAndMessagePath(method->output_type(), service, + if (!GetModuleAndMessagePath(method->output_type(), &response_module_and_class)) { return false; } @@ -550,12 +545,12 @@ bool PrintStub(const grpc::string& package_qualified_service_name, return true; } -bool PrintServicer(const ServiceDescriptor* service, Printer* out) { +bool PrivateGenerator::PrintServicer(const ServiceDescriptor* service) { out->Print("\n\n"); out->Print("class $Service$Servicer(object):\n", "Service", service->name()); { IndentScope raii_class_indent(out); - PrintAllComments(service, out); + PrintAllComments(service); for (int i = 0; i < service->method_count(); ++i) { auto method = service->method(i); grpc::string arg_name = @@ -565,7 +560,7 @@ bool PrintServicer(const ServiceDescriptor* service, Printer* out) { method->name(), "ArgName", arg_name); { IndentScope raii_method_indent(out); - PrintAllComments(method, out); + PrintAllComments(method); out->Print("context.set_code(grpc.StatusCode.UNIMPLEMENTED)\n"); out->Print("context.set_details('Method not implemented!')\n"); out->Print("raise NotImplementedError('Method not implemented!')\n"); @@ -575,9 +570,9 @@ bool PrintServicer(const ServiceDescriptor* service, Printer* out) { return true; } -bool PrintAddServicerToServer( +bool PrivateGenerator::PrintAddServicerToServer( const grpc::string& package_qualified_service_name, - const ServiceDescriptor* service, Printer* out) { + const ServiceDescriptor* service) { out->Print("\n\n"); out->Print("def add_$Service$Servicer_to_server(servicer, server):\n", "Service", service->name()); @@ -595,12 +590,12 @@ bool PrintAddServicerToServer( grpc::string(method->server_streaming() ? "stream" : "unary") + "_rpc_method_handler"; grpc::string request_module_and_class; - if (!GetModuleAndMessagePath(method->input_type(), service, + if (!GetModuleAndMessagePath(method->input_type(), &request_module_and_class)) { return false; } grpc::string response_module_and_class; - if (!GetModuleAndMessagePath(method->output_type(), service, + if (!GetModuleAndMessagePath(method->output_type(), &response_module_and_class)) { return false; } @@ -635,53 +630,170 @@ bool PrintAddServicerToServer( return true; } -bool PrintPreamble(const FileDescriptor* file, - const GeneratorConfiguration& config, Printer* out) { - out->Print("import $Package$\n", "Package", config.grpc_package_root); +bool PrivateGenerator::PrintBetaPreamble() { out->Print("from $Package$ import implementations as beta_implementations\n", "Package", config.beta_package_root); out->Print("from $Package$ import interfaces as beta_interfaces\n", "Package", config.beta_package_root); + return true; +} + +bool PrivateGenerator::PrintPreamble() { + out->Print("import $Package$\n", "Package", config.grpc_package_root); out->Print("from grpc.framework.common import cardinality\n"); out->Print( "from grpc.framework.interfaces.face import utilities as " "face_utilities\n"); + if (generate_in_pb2_grpc) { + out->Print("\n"); + for (int i = 0; i < file->service_count(); ++i) { + const ServiceDescriptor *service = file->service(i); + for (int j = 0; j < service->method_count(); ++j) { + auto method = service->method(j); + const Descriptor *types[2] = {method->input_type(), method->output_type()}; + for (int k = 0; k < 2; ++k) { + const Descriptor *type = types[k]; + grpc::string type_file_name = type->file()->name(); + grpc::string module_name = ModuleName(type_file_name); + grpc::string module_alias = ModuleAlias(type_file_name); + out->Print("import $ModuleName$ as $ModuleAlias$\n", "ModuleName", module_name, "ModuleAlias", module_alias); + } + } + } + } return true; } -} // namespace +bool PrivateGenerator::PrintGAServices() { + grpc::string package = file->package(); + if (!package.empty()) { + package = package.append("."); + } + for (int i = 0; i < file->service_count(); ++i) { + const ServiceDescriptor *service = file->service(i); + grpc::string package_qualified_service_name = package + service->name(); + if (!(PrintStub(package_qualified_service_name, service) && + PrintServicer(service) && + PrintAddServicerToServer(package_qualified_service_name, service))) { + return false; + } + } + return true; +} + +bool PrivateGenerator::PrintBetaServices() { + grpc::string package = file->package(); + if (!package.empty()) { + package = package.append("."); + } + for (int i = 0; i < file->service_count(); ++i) { + const ServiceDescriptor *service = file->service(i); + grpc::string package_qualified_service_name = package + service->name(); + if (!(PrintBetaServicer(service) && PrintBetaStub(service) && + PrintBetaServerFactory(package_qualified_service_name, service) && + PrintBetaStubFactory(package_qualified_service_name, service))) { + return false; + } + } + return true; +} -pair GetServices(const FileDescriptor* file, - const GeneratorConfiguration& config) { +pair PrivateGenerator::GetGrpcServices() { grpc::string output; { // Scope the output stream so it closes and finalizes output to the string. StringOutputStream output_stream(&output); - Printer out(&output_stream, '$'); - if (!PrintPreamble(file, config, &out)) { - return make_pair(false, ""); - } - auto package = file->package(); - if (!package.empty()) { - package = package.append("."); - } - for (int i = 0; i < file->service_count(); ++i) { - auto service = file->service(i); - auto package_qualified_service_name = package + service->name(); - if (!(PrintStub(package_qualified_service_name, service, &out) && - PrintServicer(service, &out) && - PrintAddServicerToServer(package_qualified_service_name, service, - &out) && - PrintBetaServicer(service, &out) && PrintBetaStub(service, &out) && - PrintBetaServerFactory(package_qualified_service_name, service, - &out) && - PrintBetaStubFactory(package_qualified_service_name, service, - &out))) { + Printer out_printer(&output_stream, '$'); + out = &out_printer; + + if (generate_in_pb2_grpc) { + if (!PrintPreamble()) { return make_pair(false, ""); } + if (!PrintGAServices()) { + return make_pair(false, ""); + } + } else { + out->Print("try:\n"); + { + IndentScope raii_dict_try_indent(out); + out->Print("# THESE ELEMENTS WILL BE DEPRECATED.\n" + "# Please use the generated *_pb2_grpc.py files instead.\n"); + if (!PrintPreamble()) { + return make_pair(false, ""); + } + if (!PrintBetaPreamble()) { + return make_pair(false, ""); + } + if (!PrintGAServices()) { + return make_pair(false, ""); + } + if (!PrintBetaServices()) { + return make_pair(false, ""); + } + } + out->Print("except ImportError:\n"); + { + IndentScope raii_dict_except_indent(out); + out->Print("pass"); + } } } return make_pair(true, std::move(output)); } +} // namespace + +GeneratorConfiguration::GeneratorConfiguration() + : grpc_package_root("grpc"), beta_package_root("grpc.beta") {} + +PythonGrpcGenerator::PythonGrpcGenerator(const GeneratorConfiguration& config) + : config_(config) {} + +PythonGrpcGenerator::~PythonGrpcGenerator() {} + +bool PythonGrpcGenerator::Generate(const FileDescriptor* file, + const grpc::string& parameter, + GeneratorContext* context, + grpc::string* error) const { + // Get output file name. + grpc::string pb2_file_name; + grpc::string pb2_grpc_file_name; + static const int proto_suffix_length = strlen(".proto"); + if (file->name().size() > static_cast(proto_suffix_length) && + file->name().find_last_of(".proto") == file->name().size() - 1) { + grpc::string base = file->name().substr( + 0, file->name().size() - proto_suffix_length); + pb2_file_name = base + "_pb2.py"; + pb2_grpc_file_name = base + "_pb2_grpc.py"; + } else { + *error = "Invalid proto file name. Proto file must end with .proto"; + return false; + } + + PrivateGenerator generator(config_, file); + + std::unique_ptr pb2_output( + context->OpenForAppend(pb2_file_name)); + std::unique_ptr grpc_output( + context->Open(pb2_grpc_file_name)); + CodedOutputStream pb2_coded_out(pb2_output.get()); + CodedOutputStream grpc_coded_out(grpc_output.get()); + bool success = false; + grpc::string pb2_code; + grpc::string grpc_code; + generator.generate_in_pb2_grpc = false; + tie(success, pb2_code) = generator.GetGrpcServices(); + if (success) { + generator.generate_in_pb2_grpc = true; + tie(success, grpc_code) = generator.GetGrpcServices(); + if (success) { + pb2_coded_out.WriteRaw(pb2_code.data(), pb2_code.size()); + grpc_coded_out.WriteRaw(grpc_code.data(), grpc_code.size()); + return true; + } + } + return false; +} + } // namespace grpc_python_generator diff --git a/src/compiler/python_generator.h b/src/compiler/python_generator.h index 9bbb83bca6e..6a95255d40e 100644 --- a/src/compiler/python_generator.h +++ b/src/compiler/python_generator.h @@ -62,10 +62,6 @@ class PythonGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { GeneratorConfiguration config_; }; -std::pair GetServices( - const grpc::protobuf::FileDescriptor* file, - const GeneratorConfiguration& config); - } // namespace grpc_python_generator #endif // GRPC_INTERNAL_COMPILER_PYTHON_GENERATOR_H diff --git a/src/python/grpcio_health_checking/.gitignore b/src/python/grpcio_health_checking/.gitignore index 85af4668866..432c3194f04 100644 --- a/src/python/grpcio_health_checking/.gitignore +++ b/src/python/grpcio_health_checking/.gitignore @@ -1,5 +1,6 @@ *.proto *_pb2.py +*_pb2_grpc.py build/ grpcio_health_checking.egg-info/ dist/ diff --git a/src/python/grpcio_tests/.gitignore b/src/python/grpcio_tests/.gitignore index fc620135dc7..dcba283a8ca 100644 --- a/src/python/grpcio_tests/.gitignore +++ b/src/python/grpcio_tests/.gitignore @@ -1,4 +1,5 @@ proto/ src/ *_pb2.py +*_pb2_grpc.py *.egg-info/ diff --git a/src/python/grpcio_tests/setup.py b/src/python/grpcio_tests/setup.py index 73842066020..01d5fa875b9 100644 --- a/src/python/grpcio_tests/setup.py +++ b/src/python/grpcio_tests/setup.py @@ -80,8 +80,14 @@ PACKAGE_DATA = { 'credentials/server1.key', 'credentials/server1.pem', ], - 'tests.protoc_plugin': [ - 'protoc_plugin_test.proto', + 'tests.protoc_plugin.protos.invocation_testing': [ + 'same.proto', + ], + 'tests.protoc_plugin.protos.invocation_testing.split_messages': [ + 'messages.proto', + ], + 'tests.protoc_plugin.protos.invocation_testing.split_services': [ + 'services.proto', ], 'tests.unit': [ 'credentials/ca.pem', diff --git a/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py b/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py new file mode 100644 index 00000000000..089366a8c72 --- /dev/null +++ b/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py @@ -0,0 +1,304 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import collections +from concurrent import futures +import contextlib +import distutils.spawn +import errno +import importlib +import os +import os.path +import pkgutil +import shutil +import subprocess +import sys +import tempfile +import threading +import unittest + +import grpc +from grpc.tools import protoc +from tests.unit.framework.common import test_constants + +_MESSAGES_IMPORT = b'import "messages.proto";' + +@contextlib.contextmanager +def _system_path(path): + old_system_path = sys.path[:] + sys.path = sys.path[0:1] + path + sys.path[1:] + yield + sys.path = old_system_path + + +class DummySplitServicer(object): + + def __init__(self, request_class, response_class): + self.request_class = request_class + self.response_class = response_class + + def Call(self, request, context): + return self.response_class() + + +class SeparateTestMixin(object): + + def testImportAttributes(self): + with _system_path([self.python_out_directory]): + pb2 = importlib.import_module(self.pb2_import) + pb2.Request + pb2.Response + if self.should_find_services_in_pb2: + pb2.TestServiceServicer + else: + with self.assertRaises(AttributeError): + pb2.TestServiceServicer + + with _system_path([self.grpc_python_out_directory]): + pb2_grpc = importlib.import_module(self.pb2_grpc_import) + pb2_grpc.TestServiceServicer + with self.assertRaises(AttributeError): + pb2_grpc.Request + with self.assertRaises(AttributeError): + pb2_grpc.Response + + def testCall(self): + with _system_path([self.python_out_directory]): + pb2 = importlib.import_module(self.pb2_import) + with _system_path([self.grpc_python_out_directory]): + pb2_grpc = importlib.import_module(self.pb2_grpc_import) + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=test_constants.POOL_SIZE)) + pb2_grpc.add_TestServiceServicer_to_server( + DummySplitServicer( + pb2.Request, pb2.Response), server) + port = server.add_insecure_port('[::]:0') + server.start() + channel = grpc.insecure_channel('localhost:{}'.format(port)) + stub = pb2_grpc.TestServiceStub(channel) + request = pb2.Request() + expected_response = pb2.Response() + response = stub.Call(request) + self.assertEqual(expected_response, response) + + +class CommonTestMixin(object): + + def testImportAttributes(self): + with _system_path([self.python_out_directory]): + pb2 = importlib.import_module(self.pb2_import) + pb2.Request + pb2.Response + if self.should_find_services_in_pb2: + pb2.TestServiceServicer + else: + with self.assertRaises(AttributeError): + pb2.TestServiceServicer + + with _system_path([self.grpc_python_out_directory]): + pb2_grpc = importlib.import_module(self.pb2_grpc_import) + pb2_grpc.TestServiceServicer + with self.assertRaises(AttributeError): + pb2_grpc.Request + with self.assertRaises(AttributeError): + pb2_grpc.Response + + def testCall(self): + with _system_path([self.python_out_directory]): + pb2 = importlib.import_module(self.pb2_import) + with _system_path([self.grpc_python_out_directory]): + pb2_grpc = importlib.import_module(self.pb2_grpc_import) + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=test_constants.POOL_SIZE)) + pb2_grpc.add_TestServiceServicer_to_server( + DummySplitServicer( + pb2.Request, pb2.Response), server) + port = server.add_insecure_port('[::]:0') + server.start() + channel = grpc.insecure_channel('localhost:{}'.format(port)) + stub = pb2_grpc.TestServiceStub(channel) + request = pb2.Request() + expected_response = pb2.Response() + response = stub.Call(request) + self.assertEqual(expected_response, response) + + +class SameSeparateTest(unittest.TestCase, SeparateTestMixin): + + def setUp(self): + same_proto_contents = pkgutil.get_data( + 'tests.protoc_plugin.protos.invocation_testing', 'same.proto') + self.directory = tempfile.mkdtemp(suffix='same_separate', dir='.') + self.proto_directory = os.path.join(self.directory, 'proto_path') + self.python_out_directory = os.path.join(self.directory, 'python_out') + self.grpc_python_out_directory = os.path.join(self.directory, 'grpc_python_out') + os.makedirs(self.proto_directory) + os.makedirs(self.python_out_directory) + os.makedirs(self.grpc_python_out_directory) + same_proto_file = os.path.join(self.proto_directory, 'same_separate.proto') + open(same_proto_file, 'wb').write(same_proto_contents) + protoc_result = protoc.main([ + '', + '--proto_path={}'.format(self.proto_directory), + '--python_out={}'.format(self.python_out_directory), + '--grpc_python_out={}'.format(self.grpc_python_out_directory), + same_proto_file, + ]) + if protoc_result != 0: + raise Exception("unexpected protoc error") + open(os.path.join(self.grpc_python_out_directory, '__init__.py'), 'w').write('') + open(os.path.join(self.python_out_directory, '__init__.py'), 'w').write('') + self.pb2_import = 'same_separate_pb2' + self.pb2_grpc_import = 'same_separate_pb2_grpc' + self.should_find_services_in_pb2 = False + + def tearDown(self): + shutil.rmtree(self.directory) + + +class SameCommonTest(unittest.TestCase, CommonTestMixin): + + def setUp(self): + same_proto_contents = pkgutil.get_data( + 'tests.protoc_plugin.protos.invocation_testing', 'same.proto') + self.directory = tempfile.mkdtemp(suffix='same_common', dir='.') + self.proto_directory = os.path.join(self.directory, 'proto_path') + self.python_out_directory = os.path.join(self.directory, 'python_out') + self.grpc_python_out_directory = self.python_out_directory + os.makedirs(self.proto_directory) + os.makedirs(self.python_out_directory) + same_proto_file = os.path.join(self.proto_directory, 'same_common.proto') + open(same_proto_file, 'wb').write(same_proto_contents) + protoc_result = protoc.main([ + '', + '--proto_path={}'.format(self.proto_directory), + '--python_out={}'.format(self.python_out_directory), + '--grpc_python_out={}'.format(self.grpc_python_out_directory), + same_proto_file, + ]) + if protoc_result != 0: + raise Exception("unexpected protoc error") + open(os.path.join(self.python_out_directory, '__init__.py'), 'w').write('') + self.pb2_import = 'same_common_pb2' + self.pb2_grpc_import = 'same_common_pb2_grpc' + self.should_find_services_in_pb2 = True + + def tearDown(self): + shutil.rmtree(self.directory) + + +class SplitCommonTest(unittest.TestCase, CommonTestMixin): + + def setUp(self): + services_proto_contents = pkgutil.get_data( + 'tests.protoc_plugin.protos.invocation_testing.split_services', + 'services.proto') + messages_proto_contents = pkgutil.get_data( + 'tests.protoc_plugin.protos.invocation_testing.split_messages', + 'messages.proto') + self.directory = tempfile.mkdtemp(suffix='split_common', dir='.') + self.proto_directory = os.path.join(self.directory, 'proto_path') + self.python_out_directory = os.path.join(self.directory, 'python_out') + self.grpc_python_out_directory = self.python_out_directory + os.makedirs(self.proto_directory) + os.makedirs(self.python_out_directory) + services_proto_file = os.path.join(self.proto_directory, + 'split_common_services.proto') + messages_proto_file = os.path.join(self.proto_directory, + 'split_common_messages.proto') + open(services_proto_file, 'wb').write(services_proto_contents.replace( + _MESSAGES_IMPORT, + b'import "split_common_messages.proto";' + )) + open(messages_proto_file, 'wb').write(messages_proto_contents) + protoc_result = protoc.main([ + '', + '--proto_path={}'.format(self.proto_directory), + '--python_out={}'.format(self.python_out_directory), + '--grpc_python_out={}'.format(self.python_out_directory), + services_proto_file, + messages_proto_file, + ]) + if protoc_result != 0: + raise Exception("unexpected protoc error") + open(os.path.join(self.python_out_directory, '__init__.py'), 'w').write('') + self.pb2_import = 'split_common_messages_pb2' + self.pb2_grpc_import = 'split_common_services_pb2_grpc' + self.should_find_services_in_pb2 = False + + def tearDown(self): + shutil.rmtree(self.directory) + + +class SplitSeparateTest(unittest.TestCase, SeparateTestMixin): + + def setUp(self): + services_proto_contents = pkgutil.get_data( + 'tests.protoc_plugin.protos.invocation_testing.split_services', + 'services.proto') + messages_proto_contents = pkgutil.get_data( + 'tests.protoc_plugin.protos.invocation_testing.split_messages', + 'messages.proto') + self.directory = tempfile.mkdtemp(suffix='split_separate', dir='.') + self.proto_directory = os.path.join(self.directory, 'proto_path') + self.python_out_directory = os.path.join(self.directory, 'python_out') + self.grpc_python_out_directory = os.path.join(self.directory, 'grpc_python_out') + os.makedirs(self.proto_directory) + os.makedirs(self.python_out_directory) + os.makedirs(self.grpc_python_out_directory) + services_proto_file = os.path.join(self.proto_directory, + 'split_separate_services.proto') + messages_proto_file = os.path.join(self.proto_directory, + 'split_separate_messages.proto') + open(services_proto_file, 'wb').write(services_proto_contents.replace( + _MESSAGES_IMPORT, + b'import "split_separate_messages.proto";' + )) + open(messages_proto_file, 'wb').write(messages_proto_contents) + protoc_result = protoc.main([ + '', + '--proto_path={}'.format(self.proto_directory), + '--python_out={}'.format(self.python_out_directory), + '--grpc_python_out={}'.format(self.grpc_python_out_directory), + services_proto_file, + messages_proto_file, + ]) + if protoc_result != 0: + raise Exception("unexpected protoc error") + open(os.path.join(self.python_out_directory, '__init__.py'), 'w').write('') + self.pb2_import = 'split_separate_messages_pb2' + self.pb2_grpc_import = 'split_separate_services_pb2_grpc' + self.should_find_services_in_pb2 = False + + def tearDown(self): + shutil.rmtree(self.directory) + + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/__init__.py b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/__init__.py new file mode 100644 index 00000000000..2f88fa04122 --- /dev/null +++ b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/__init__.py @@ -0,0 +1,30 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + diff --git a/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/same.proto b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/same.proto new file mode 100644 index 00000000000..269e2fd2c7e --- /dev/null +++ b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/same.proto @@ -0,0 +1,39 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package grpc_protoc_plugin.invocation_testing; + +message Request {} +message Response {} + +service TestService { + rpc Call(Request) returns (Response); +} diff --git a/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_messages/__init__.py b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_messages/__init__.py new file mode 100644 index 00000000000..2f88fa04122 --- /dev/null +++ b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_messages/__init__.py @@ -0,0 +1,30 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + diff --git a/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_messages/messages.proto b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_messages/messages.proto new file mode 100644 index 00000000000..de22dae0492 --- /dev/null +++ b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_messages/messages.proto @@ -0,0 +1,35 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package grpc_protoc_plugin.invocation_testing.split; + +message Request {} +message Response {} diff --git a/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_services/__init__.py b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_services/__init__.py new file mode 100644 index 00000000000..2f88fa04122 --- /dev/null +++ b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_services/__init__.py @@ -0,0 +1,30 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + diff --git a/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_services/services.proto b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_services/services.proto new file mode 100644 index 00000000000..af999cd48db --- /dev/null +++ b/src/python/grpcio_tests/tests/protoc_plugin/protos/invocation_testing/split_services/services.proto @@ -0,0 +1,38 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +import "messages.proto"; + +package grpc_protoc_plugin.invocation_testing.split; + +service TestService { + rpc Call(Request) returns (Response); +} diff --git a/src/python/grpcio_tests/tests/tests.json b/src/python/grpcio_tests/tests/tests.json index 2e85f1f397b..dd4a0257f54 100644 --- a/src/python/grpcio_tests/tests/tests.json +++ b/src/python/grpcio_tests/tests/tests.json @@ -1,45 +1,49 @@ [ - "_api_test.AllTest", - "_api_test.ChannelConnectivityTest", - "_api_test.ChannelTest", - "_auth_test.AccessTokenCallCredentialsTest", - "_auth_test.GoogleCallCredentialsTest", - "_beta_features_test.BetaFeaturesTest", - "_beta_features_test.ContextManagementAndLifecycleTest", - "_cancel_many_calls_test.CancelManyCallsTest", - "_channel_args_test.ChannelArgsTest", - "_channel_connectivity_test.ChannelConnectivityTest", - "_channel_ready_future_test.ChannelReadyFutureTest", - "_channel_test.ChannelTest", - "_compression_test.CompressionTest", - "_connectivity_channel_test.ConnectivityStatesTest", - "_credentials_test.CredentialsTest", - "_empty_message_test.EmptyMessageTest", - "_exit_test.ExitTest", - "_face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", - "_face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", - "_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", - "_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", - "_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", - "_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", - "_health_servicer_test.HealthServicerTest", - "_implementations_test.CallCredentialsTest", - "_implementations_test.ChannelCredentialsTest", - "_insecure_interop_test.InsecureInteropTest", - "_logging_pool_test.LoggingPoolTest", - "_metadata_code_details_test.MetadataCodeDetailsTest", - "_metadata_test.MetadataTest", - "_not_found_test.NotFoundTest", - "_python_plugin_test.PythonPluginTest", - "_read_some_but_not_all_responses_test.ReadSomeButNotAllResponsesTest", - "_reflection_servicer_test.ReflectionServicerTest", - "_rpc_test.RPCTest", - "_sanity_test.Sanity", - "_secure_interop_test.SecureInteropTest", - "_thread_cleanup_test.CleanupThreadTest", - "_utilities_test.ChannelConnectivityTest", - "beta_python_plugin_test.PythonPluginTest", - "cygrpc_test.InsecureServerInsecureClient", - "cygrpc_test.SecureServerSecureClient", - "cygrpc_test.TypeSmokeTest" + "health_check._health_servicer_test.HealthServicerTest", + "interop._insecure_interop_test.InsecureInteropTest", + "interop._secure_interop_test.SecureInteropTest", + "protoc_plugin._python_plugin_test.PythonPluginTest", + "protoc_plugin._split_definitions_test.SameCommonTest", + "protoc_plugin._split_definitions_test.SameSeparateTest", + "protoc_plugin._split_definitions_test.SplitCommonTest", + "protoc_plugin._split_definitions_test.SplitSeparateTest", + "protoc_plugin.beta_python_plugin_test.PythonPluginTest", + "reflection._reflection_servicer_test.ReflectionServicerTest", + "unit._api_test.AllTest", + "unit._api_test.ChannelConnectivityTest", + "unit._api_test.ChannelTest", + "unit._auth_test.AccessTokenCallCredentialsTest", + "unit._auth_test.GoogleCallCredentialsTest", + "unit._channel_args_test.ChannelArgsTest", + "unit._channel_connectivity_test.ChannelConnectivityTest", + "unit._channel_ready_future_test.ChannelReadyFutureTest", + "unit._compression_test.CompressionTest", + "unit._credentials_test.CredentialsTest", + "unit._cython._cancel_many_calls_test.CancelManyCallsTest", + "unit._cython._channel_test.ChannelTest", + "unit._cython._read_some_but_not_all_responses_test.ReadSomeButNotAllResponsesTest", + "unit._cython.cygrpc_test.InsecureServerInsecureClient", + "unit._cython.cygrpc_test.SecureServerSecureClient", + "unit._cython.cygrpc_test.TypeSmokeTest", + "unit._empty_message_test.EmptyMessageTest", + "unit._exit_test.ExitTest", + "unit._metadata_code_details_test.MetadataCodeDetailsTest", + "unit._metadata_test.MetadataTest", + "unit._rpc_test.RPCTest", + "unit._sanity._sanity_test.Sanity", + "unit._thread_cleanup_test.CleanupThreadTest", + "unit.beta._beta_features_test.BetaFeaturesTest", + "unit.beta._beta_features_test.ContextManagementAndLifecycleTest", + "unit.beta._connectivity_channel_test.ConnectivityStatesTest", + "unit.beta._face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", + "unit.beta._face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", + "unit.beta._face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", + "unit.beta._face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", + "unit.beta._face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", + "unit.beta._face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", + "unit.beta._implementations_test.CallCredentialsTest", + "unit.beta._implementations_test.ChannelCredentialsTest", + "unit.beta._not_found_test.NotFoundTest", + "unit.beta._utilities_test.ChannelConnectivityTest", + "unit.framework.foundation._logging_pool_test.LoggingPoolTest" ] From 4a051ccca6629ce59af589594a36c046e7d4bbd7 Mon Sep 17 00:00:00 2001 From: Masood Malekghassemi Date: Thu, 20 Oct 2016 14:50:49 -0700 Subject: [PATCH 276/286] Clean-up types in Python generator --- src/compiler/python_generator.cc | 77 +++++++++++++++++--------------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc index 270291ac33e..9480bcc97b9 100644 --- a/src/compiler/python_generator.cc +++ b/src/compiler/python_generator.cc @@ -70,6 +70,10 @@ namespace grpc_python_generator { namespace { +typedef vector DescriptorVector; +typedef map StringMap; +typedef vector StringVector; + // Provides RAII indentation handling. Use as: // { // IndentScope raii_my_indent_var_name_here(my_py_printer); @@ -168,7 +172,7 @@ PrivateGenerator::PrivateGenerator(const GeneratorConfiguration& config, bool PrivateGenerator::GetModuleAndMessagePath(const Descriptor* type, grpc::string* out) { const Descriptor* path_elem_type = type; - vector message_path; + DescriptorVector message_path; do { message_path.push_back(path_elem_type); path_elem_type = path_elem_type->containing_type(); @@ -187,7 +191,8 @@ bool PrivateGenerator::GetModuleAndMessagePath(const Descriptor* type, module = ""; } grpc::string message_type; - for (auto path_iter = message_path.rbegin(); path_iter != message_path.rend(); + for (DescriptorVector::reverse_iterator path_iter = message_path.rbegin(); + path_iter != message_path.rend(); ++path_iter) { message_type += (*path_iter)->name() + "."; } @@ -199,7 +204,7 @@ bool PrivateGenerator::GetModuleAndMessagePath(const Descriptor* type, template void PrivateGenerator::PrintAllComments(const DescriptorType* descriptor) { - vector comments; + StringVector comments; grpc_generator::GetComment(descriptor, grpc_generator::COMMENTTYPE_LEADING_DETACHED, &comments); grpc_generator::GetComment(descriptor, grpc_generator::COMMENTTYPE_LEADING, @@ -210,7 +215,7 @@ void PrivateGenerator::PrintAllComments(const DescriptorType* descriptor) { return; } out->Print("\"\"\""); - for (auto it = comments.begin(); it != comments.end(); ++it) { + for (StringVector::iterator it = comments.begin(); it != comments.end(); ++it) { size_t start_pos = it->find_first_not_of(' '); if (start_pos != grpc::string::npos) { out->Print(it->c_str() + start_pos); @@ -235,14 +240,14 @@ bool PrivateGenerator::PrintBetaServicer(const ServiceDescriptor* service) { "grpcio>=0.15.0.\"\"\"\n"); PrintAllComments(service); for (int i = 0; i < service->method_count(); ++i) { - auto meth = service->method(i); + const MethodDescriptor *method = service->method(i); grpc::string arg_name = - meth->client_streaming() ? "request_iterator" : "request"; + method->client_streaming() ? "request_iterator" : "request"; out->Print("def $Method$(self, $ArgName$, context):\n", "Method", - meth->name(), "ArgName", arg_name); + method->name(), "ArgName", arg_name); { IndentScope raii_method_indent(out); - PrintAllComments(meth); + PrintAllComments(method); out->Print("context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)\n"); } } @@ -264,22 +269,22 @@ bool PrivateGenerator::PrintBetaStub(const ServiceDescriptor* service) { "grpcio>=0.15.0.\"\"\"\n"); PrintAllComments(service); for (int i = 0; i < service->method_count(); ++i) { - const MethodDescriptor* meth = service->method(i); + const MethodDescriptor* method = service->method(i); grpc::string arg_name = - meth->client_streaming() ? "request_iterator" : "request"; - auto methdict; - methdict["Method"] = meth->name(); - methdict["ArgName"] = arg_name; - out->Print(methdict, + method->client_streaming() ? "request_iterator" : "request"; + StringMap method_dict; + method_dict["Method"] = method->name(); + method_dict["ArgName"] = arg_name; + out->Print(method_dict, "def $Method$(self, $ArgName$, timeout, metadata=None, " "with_call=False, protocol_options=None):\n"); { IndentScope raii_method_indent(out); - PrintAllComments(meth); + PrintAllComments(method); out->Print("raise NotImplementedError()\n"); } - if (!meth->server_streaming()) { - out->Print(methdict, "$Method$.future = None\n"); + if (!method->server_streaming()) { + out->Print(method_dict, "$Method$.future = None\n"); } } } @@ -302,9 +307,9 @@ bool PrivateGenerator::PrintBetaServerFactory( "file not marked beta) for all further purposes. This function was\n" "generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0" "\"\"\"\n"); - map method_implementation_constructors; - map input_message_modules_and_classes; - map output_message_modules_and_classes; + StringMap method_implementation_constructors; + StringMap input_message_modules_and_classes; + StringMap output_message_modules_and_classes; for (int i = 0; i < service->method_count(); ++i) { const MethodDescriptor* method = service->method(i); const grpc::string method_implementation_constructor = @@ -329,7 +334,7 @@ bool PrivateGenerator::PrintBetaServerFactory( make_pair(method->name(), output_message_module_and_class)); } out->Print("request_deserializers = {\n"); - for (auto name_and_input_module_class_pair = + for (StringMap::iterator name_and_input_module_class_pair = input_message_modules_and_classes.begin(); name_and_input_module_class_pair != input_message_modules_and_classes.end(); @@ -344,7 +349,7 @@ bool PrivateGenerator::PrintBetaServerFactory( } out->Print("}\n"); out->Print("response_serializers = {\n"); - for (auto name_and_output_module_class_pair = + for (StringMap::iterator name_and_output_module_class_pair = output_message_modules_and_classes.begin(); name_and_output_module_class_pair != output_message_modules_and_classes.end(); @@ -360,7 +365,7 @@ bool PrivateGenerator::PrintBetaServerFactory( } out->Print("}\n"); out->Print("method_implementations = {\n"); - for (auto name_and_implementation_constructor = + for (StringMap::iterator name_and_implementation_constructor = method_implementation_constructors.begin(); name_and_implementation_constructor != method_implementation_constructors.end(); @@ -393,7 +398,7 @@ bool PrivateGenerator::PrintBetaServerFactory( bool PrivateGenerator::PrintBetaStubFactory( const grpc::string& package_qualified_service_name, const ServiceDescriptor* service) { - map dict; + StringMap dict; dict["Service"] = service->name(); out->Print("\n\n"); out->Print(dict, @@ -407,9 +412,9 @@ bool PrivateGenerator::PrintBetaStubFactory( "file not marked beta) for all further purposes. This function was\n" "generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0" "\"\"\"\n"); - map method_cardinalities; - map input_message_modules_and_classes; - map output_message_modules_and_classes; + StringMap method_cardinalities; + StringMap input_message_modules_and_classes; + StringMap output_message_modules_and_classes; for (int i = 0; i < service->method_count(); ++i) { const MethodDescriptor* method = service->method(i); const grpc::string method_cardinality = @@ -433,7 +438,7 @@ bool PrivateGenerator::PrintBetaStubFactory( make_pair(method->name(), output_message_module_and_class)); } out->Print("request_serializers = {\n"); - for (auto name_and_input_module_class_pair = + for (StringMap::iterator name_and_input_module_class_pair = input_message_modules_and_classes.begin(); name_and_input_module_class_pair != input_message_modules_and_classes.end(); @@ -448,7 +453,7 @@ bool PrivateGenerator::PrintBetaStubFactory( } out->Print("}\n"); out->Print("response_deserializers = {\n"); - for (auto name_and_output_module_class_pair = + for (StringMap::iterator name_and_output_module_class_pair = output_message_modules_and_classes.begin(); name_and_output_module_class_pair != output_message_modules_and_classes.end(); @@ -464,7 +469,7 @@ bool PrivateGenerator::PrintBetaStubFactory( } out->Print("}\n"); out->Print("cardinalities = {\n"); - for (auto name_and_cardinality = method_cardinalities.begin(); + for (StringMap::iterator name_and_cardinality = method_cardinalities.begin(); name_and_cardinality != method_cardinalities.end(); name_and_cardinality++) { IndentScope raii_descriptions_indent(out); @@ -508,8 +513,8 @@ bool PrivateGenerator::PrintStub(const grpc::string& package_qualified_service_n } out->Print("\"\"\"\n"); for (int i = 0; i < service->method_count(); ++i) { - auto method = service->method(i); - auto multi_callable_constructor = + const MethodDescriptor *method = service->method(i); + grpc::string multi_callable_constructor = grpc::string(method->client_streaming() ? "stream" : "unary") + "_" + grpc::string(method->server_streaming() ? "stream" : "unary"); grpc::string request_module_and_class; @@ -552,7 +557,7 @@ bool PrivateGenerator::PrintServicer(const ServiceDescriptor* service) { IndentScope raii_class_indent(out); PrintAllComments(service); for (int i = 0; i < service->method_count(); ++i) { - auto method = service->method(i); + const MethodDescriptor *method = service->method(i); grpc::string arg_name = method->client_streaming() ? "request_iterator" : "request"; out->Print("\n"); @@ -583,8 +588,8 @@ bool PrivateGenerator::PrintAddServicerToServer( IndentScope raii_dict_first_indent(out); IndentScope raii_dict_second_indent(out); for (int i = 0; i < service->method_count(); ++i) { - auto method = service->method(i); - auto method_handler_constructor = + const MethodDescriptor *method = service->method(i); + grpc::string method_handler_constructor = grpc::string(method->client_streaming() ? "stream" : "unary") + "_" + grpc::string(method->server_streaming() ? "stream" : "unary") + @@ -649,7 +654,7 @@ bool PrivateGenerator::PrintPreamble() { for (int i = 0; i < file->service_count(); ++i) { const ServiceDescriptor *service = file->service(i); for (int j = 0; j < service->method_count(); ++j) { - auto method = service->method(j); + const MethodDescriptor *method = service->method(j); const Descriptor *types[2] = {method->input_type(), method->output_type()}; for (int k = 0; k < 2; ++k) { const Descriptor *type = types[k]; From 7780cc018aaf5b01bdb8836903249308b9c3d142 Mon Sep 17 00:00:00 2001 From: Masood Malekghassemi Date: Mon, 24 Oct 2016 15:30:05 -0700 Subject: [PATCH 277/286] Clang-format python_generator.cc --- src/compiler/python_generator.cc | 77 +++++++++++++++++--------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc index 9480bcc97b9..febaf135b6f 100644 --- a/src/compiler/python_generator.cc +++ b/src/compiler/python_generator.cc @@ -122,14 +122,14 @@ grpc::string ModuleAlias(const grpc::string& filename) { // only ever used from a single thread. struct PrivateGenerator { const GeneratorConfiguration& config; - const FileDescriptor *file; + const FileDescriptor* file; bool generate_in_pb2_grpc; - Printer *out; + Printer* out; PrivateGenerator(const GeneratorConfiguration& config, - const FileDescriptor *file); + const FileDescriptor* file); std::pair GetGrpcServices(); @@ -140,19 +140,19 @@ struct PrivateGenerator { bool PrintBetaServices(); bool PrintAddServicerToServer( - const grpc::string& package_qualified_service_name, - const ServiceDescriptor* service); + const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service); bool PrintServicer(const ServiceDescriptor* service); bool PrintStub(const grpc::string& package_qualified_service_name, const ServiceDescriptor* service); bool PrintBetaServicer(const ServiceDescriptor* service); - bool PrintBetaServerFactory(const grpc::string& package_qualified_service_name, - const ServiceDescriptor* service); - bool PrintBetaStub(const ServiceDescriptor* service); - bool PrintBetaStubFactory( + bool PrintBetaServerFactory( const grpc::string& package_qualified_service_name, const ServiceDescriptor* service); + bool PrintBetaStub(const ServiceDescriptor* service); + bool PrintBetaStubFactory(const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service); // Get all comments (leading, leading_detached, trailing) and print them as a // docstring. Any leading space of a line will be removed, but the line @@ -160,14 +160,12 @@ struct PrivateGenerator { template void PrintAllComments(const DescriptorType* descriptor); - bool GetModuleAndMessagePath(const Descriptor* type, - grpc::string* out); + bool GetModuleAndMessagePath(const Descriptor* type, grpc::string* out); }; - PrivateGenerator::PrivateGenerator(const GeneratorConfiguration& config, - const FileDescriptor *file) - : config(config), file(file) {} + const FileDescriptor* file) + : config(config), file(file) {} bool PrivateGenerator::GetModuleAndMessagePath(const Descriptor* type, grpc::string* out) { @@ -192,8 +190,7 @@ bool PrivateGenerator::GetModuleAndMessagePath(const Descriptor* type, } grpc::string message_type; for (DescriptorVector::reverse_iterator path_iter = message_path.rbegin(); - path_iter != message_path.rend(); - ++path_iter) { + path_iter != message_path.rend(); ++path_iter) { message_type += (*path_iter)->name() + "."; } // no pop_back prior to C++11 @@ -205,8 +202,8 @@ bool PrivateGenerator::GetModuleAndMessagePath(const Descriptor* type, template void PrivateGenerator::PrintAllComments(const DescriptorType* descriptor) { StringVector comments; - grpc_generator::GetComment(descriptor, grpc_generator::COMMENTTYPE_LEADING_DETACHED, - &comments); + grpc_generator::GetComment( + descriptor, grpc_generator::COMMENTTYPE_LEADING_DETACHED, &comments); grpc_generator::GetComment(descriptor, grpc_generator::COMMENTTYPE_LEADING, &comments); grpc_generator::GetComment(descriptor, grpc_generator::COMMENTTYPE_TRAILING, @@ -215,7 +212,8 @@ void PrivateGenerator::PrintAllComments(const DescriptorType* descriptor) { return; } out->Print("\"\"\""); - for (StringVector::iterator it = comments.begin(); it != comments.end(); ++it) { + for (StringVector::iterator it = comments.begin(); it != comments.end(); + ++it) { size_t start_pos = it->find_first_not_of(' '); if (start_pos != grpc::string::npos) { out->Print(it->c_str() + start_pos); @@ -240,7 +238,7 @@ bool PrivateGenerator::PrintBetaServicer(const ServiceDescriptor* service) { "grpcio>=0.15.0.\"\"\"\n"); PrintAllComments(service); for (int i = 0; i < service->method_count(); ++i) { - const MethodDescriptor *method = service->method(i); + const MethodDescriptor* method = service->method(i); grpc::string arg_name = method->client_streaming() ? "request_iterator" : "request"; out->Print("def $Method$(self, $ArgName$, context):\n", "Method", @@ -469,7 +467,8 @@ bool PrivateGenerator::PrintBetaStubFactory( } out->Print("}\n"); out->Print("cardinalities = {\n"); - for (StringMap::iterator name_and_cardinality = method_cardinalities.begin(); + for (StringMap::iterator name_and_cardinality = + method_cardinalities.begin(); name_and_cardinality != method_cardinalities.end(); name_and_cardinality++) { IndentScope raii_descriptions_indent(out); @@ -493,8 +492,9 @@ bool PrivateGenerator::PrintBetaStubFactory( return true; } -bool PrivateGenerator::PrintStub(const grpc::string& package_qualified_service_name, - const ServiceDescriptor* service) { +bool PrivateGenerator::PrintStub( + const grpc::string& package_qualified_service_name, + const ServiceDescriptor* service) { out->Print("\n\n"); out->Print("class $Service$Stub(object):\n", "Service", service->name()); { @@ -513,7 +513,7 @@ bool PrivateGenerator::PrintStub(const grpc::string& package_qualified_service_n } out->Print("\"\"\"\n"); for (int i = 0; i < service->method_count(); ++i) { - const MethodDescriptor *method = service->method(i); + const MethodDescriptor* method = service->method(i); grpc::string multi_callable_constructor = grpc::string(method->client_streaming() ? "stream" : "unary") + "_" + grpc::string(method->server_streaming() ? "stream" : "unary"); @@ -557,7 +557,7 @@ bool PrivateGenerator::PrintServicer(const ServiceDescriptor* service) { IndentScope raii_class_indent(out); PrintAllComments(service); for (int i = 0; i < service->method_count(); ++i) { - const MethodDescriptor *method = service->method(i); + const MethodDescriptor* method = service->method(i); grpc::string arg_name = method->client_streaming() ? "request_iterator" : "request"; out->Print("\n"); @@ -588,7 +588,7 @@ bool PrivateGenerator::PrintAddServicerToServer( IndentScope raii_dict_first_indent(out); IndentScope raii_dict_second_indent(out); for (int i = 0; i < service->method_count(); ++i) { - const MethodDescriptor *method = service->method(i); + const MethodDescriptor* method = service->method(i); grpc::string method_handler_constructor = grpc::string(method->client_streaming() ? "stream" : "unary") + "_" + @@ -652,16 +652,18 @@ bool PrivateGenerator::PrintPreamble() { if (generate_in_pb2_grpc) { out->Print("\n"); for (int i = 0; i < file->service_count(); ++i) { - const ServiceDescriptor *service = file->service(i); + const ServiceDescriptor* service = file->service(i); for (int j = 0; j < service->method_count(); ++j) { - const MethodDescriptor *method = service->method(j); - const Descriptor *types[2] = {method->input_type(), method->output_type()}; + const MethodDescriptor* method = service->method(j); + const Descriptor* types[2] = {method->input_type(), + method->output_type()}; for (int k = 0; k < 2; ++k) { - const Descriptor *type = types[k]; + const Descriptor* type = types[k]; grpc::string type_file_name = type->file()->name(); grpc::string module_name = ModuleName(type_file_name); grpc::string module_alias = ModuleAlias(type_file_name); - out->Print("import $ModuleName$ as $ModuleAlias$\n", "ModuleName", module_name, "ModuleAlias", module_alias); + out->Print("import $ModuleName$ as $ModuleAlias$\n", "ModuleName", + module_name, "ModuleAlias", module_alias); } } } @@ -675,7 +677,7 @@ bool PrivateGenerator::PrintGAServices() { package = package.append("."); } for (int i = 0; i < file->service_count(); ++i) { - const ServiceDescriptor *service = file->service(i); + const ServiceDescriptor* service = file->service(i); grpc::string package_qualified_service_name = package + service->name(); if (!(PrintStub(package_qualified_service_name, service) && PrintServicer(service) && @@ -692,7 +694,7 @@ bool PrivateGenerator::PrintBetaServices() { package = package.append("."); } for (int i = 0; i < file->service_count(); ++i) { - const ServiceDescriptor *service = file->service(i); + const ServiceDescriptor* service = file->service(i); grpc::string package_qualified_service_name = package + service->name(); if (!(PrintBetaServicer(service) && PrintBetaStub(service) && PrintBetaServerFactory(package_qualified_service_name, service) && @@ -722,8 +724,9 @@ pair PrivateGenerator::GetGrpcServices() { out->Print("try:\n"); { IndentScope raii_dict_try_indent(out); - out->Print("# THESE ELEMENTS WILL BE DEPRECATED.\n" - "# Please use the generated *_pb2_grpc.py files instead.\n"); + out->Print( + "# THESE ELEMENTS WILL BE DEPRECATED.\n" + "# Please use the generated *_pb2_grpc.py files instead.\n"); if (!PrintPreamble()) { return make_pair(false, ""); } @@ -767,8 +770,8 @@ bool PythonGrpcGenerator::Generate(const FileDescriptor* file, static const int proto_suffix_length = strlen(".proto"); if (file->name().size() > static_cast(proto_suffix_length) && file->name().find_last_of(".proto") == file->name().size() - 1) { - grpc::string base = file->name().substr( - 0, file->name().size() - proto_suffix_length); + grpc::string base = + file->name().substr(0, file->name().size() - proto_suffix_length); pb2_file_name = base + "_pb2.py"; pb2_grpc_file_name = base + "_pb2_grpc.py"; } else { From 45ebd355cde0be8cb121af8b82f75d208c4efbdf Mon Sep 17 00:00:00 2001 From: Noah Eisen Date: Fri, 28 Oct 2016 16:08:04 -0700 Subject: [PATCH 278/286] Fix clang format --- test/cpp/interop/client.cc | 57 +++++++++++++++--------------- test/cpp/interop/interop_client.cc | 6 ++-- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc index 9e0e502d204..c58910abc3f 100644 --- a/test/cpp/interop/client.cc +++ b/test/cpp/interop/client.cc @@ -54,34 +54,35 @@ DEFINE_int32(server_port, 0, "Server port."); DEFINE_string(server_host, "127.0.0.1", "Server host to connect to"); DEFINE_string(server_host_override, "foo.test.google.fr", "Override the server host which is sent in HTTP header"); -DEFINE_string(test_case, "large_unary", - "Configure different test cases. Valid options are:\n\n" - "all : all test cases;\n" - "cancel_after_begin : cancel stream after starting it;\n" - "cancel_after_first_response: cancel on first response;\n" - "client_compressed_streaming : compressed request streaming with " - "client_compressed_unary : single compressed request;\n" - "client_streaming : request streaming with single response;\n" - "compute_engine_creds: large_unary with compute engine auth;\n" - "custom_metadata: server will echo custom metadata;\n" - "empty_stream : bi-di stream with no request/response;\n" - "empty_unary : empty (zero bytes) request and response;\n" - "half_duplex : half-duplex streaming;\n" - "jwt_token_creds: large_unary with JWT token auth;\n" - "large_unary : single request and (large) response;\n" - "oauth2_auth_token: raw oauth2 access token auth;\n" - "per_rpc_creds: raw oauth2 access token on a single rpc;\n" - "ping_pong : full-duplex streaming;\n" - "response streaming;\n" - "server_compressed_streaming : single request with compressed " - "server_compressed_unary : single compressed response;\n" - "server_streaming : single request with response streaming;\n" - "slow_consumer : single request with response streaming with " - "slow client consumer;\n" - "status_code_and_message: verify status code & message;\n" - "timeout_on_sleeping_server: deadline exceeds on stream;\n" - "unimplemented_method: client calls an unimplemented method;\n" - "unimplemented_service: client calls an unimplemented service;\n"); +DEFINE_string( + test_case, "large_unary", + "Configure different test cases. Valid options are:\n\n" + "all : all test cases;\n" + "cancel_after_begin : cancel stream after starting it;\n" + "cancel_after_first_response: cancel on first response;\n" + "client_compressed_streaming : compressed request streaming with " + "client_compressed_unary : single compressed request;\n" + "client_streaming : request streaming with single response;\n" + "compute_engine_creds: large_unary with compute engine auth;\n" + "custom_metadata: server will echo custom metadata;\n" + "empty_stream : bi-di stream with no request/response;\n" + "empty_unary : empty (zero bytes) request and response;\n" + "half_duplex : half-duplex streaming;\n" + "jwt_token_creds: large_unary with JWT token auth;\n" + "large_unary : single request and (large) response;\n" + "oauth2_auth_token: raw oauth2 access token auth;\n" + "per_rpc_creds: raw oauth2 access token on a single rpc;\n" + "ping_pong : full-duplex streaming;\n" + "response streaming;\n" + "server_compressed_streaming : single request with compressed " + "server_compressed_unary : single compressed response;\n" + "server_streaming : single request with response streaming;\n" + "slow_consumer : single request with response streaming with " + "slow client consumer;\n" + "status_code_and_message: verify status code & message;\n" + "timeout_on_sleeping_server: deadline exceeds on stream;\n" + "unimplemented_method: client calls an unimplemented method;\n" + "unimplemented_service: client calls an unimplemented service;\n"); DEFINE_string(default_service_account, "", "Email of GCE default service account"); DEFINE_string(service_account_key_file, "", diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc index 9615a208b50..d1242627ef3 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -1014,11 +1014,9 @@ bool InteropClient::DoUnimplementedService() { Empty response; ClientContext context; - UnimplementedService::Stub* stub = - serviceStub_.GetUnimplementedServiceStub(); + UnimplementedService::Stub* stub = serviceStub_.GetUnimplementedServiceStub(); - Status s = - stub->UnimplementedCall(&context, request, &response); + Status s = stub->UnimplementedCall(&context, request, &response); if (!AssertStatusCode(s, StatusCode::UNIMPLEMENTED)) { return false; From a0d2468b57b39de0855832db336130000a08cced Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Fri, 28 Oct 2016 18:18:07 -0700 Subject: [PATCH 279/286] Fix compilation bug when GRPC_UV is defined --- src/core/lib/iomgr/endpoint_pair_uv.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/lib/iomgr/endpoint_pair_uv.c b/src/core/lib/iomgr/endpoint_pair_uv.c index 7941e203886..ff24894c6db 100644 --- a/src/core/lib/iomgr/endpoint_pair_uv.c +++ b/src/core/lib/iomgr/endpoint_pair_uv.c @@ -41,8 +41,9 @@ #include "src/core/lib/iomgr/endpoint_pair.h" -grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, - size_t read_slice_size) { +grpc_endpoint_pair grpc_iomgr_create_endpoint_pair( + const char *name, grpc_resource_quota *resource_quota, + size_t read_slice_size) { grpc_endpoint_pair endpoint_pair; // TODO(mlumish): implement this properly under libuv GPR_ASSERT(false && From 894db55ab97aac8ea97602af0c06ba0031c3af97 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Fri, 28 Oct 2016 18:25:24 -0700 Subject: [PATCH 280/286] Fix compiler errors in gcc4.4 and 4.6 --- src/core/lib/iomgr/resource_quota.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/lib/iomgr/resource_quota.c b/src/core/lib/iomgr/resource_quota.c index bfc905845d6..e39cf28e356 100644 --- a/src/core/lib/iomgr/resource_quota.c +++ b/src/core/lib/iomgr/resource_quota.c @@ -166,8 +166,11 @@ static void rq_step(grpc_exec_ctx *exec_ctx, void *rq, grpc_error *error) { do { if (rq_alloc(exec_ctx, resource_quota)) goto done; } while (rq_reclaim_from_per_user_free_pool(exec_ctx, resource_quota)); - rq_reclaim(exec_ctx, resource_quota, false) || - rq_reclaim(exec_ctx, resource_quota, true); + + if (!rq_reclaim(exec_ctx, resource_quota, false)) { + rq_reclaim(exec_ctx, resource_quota, true); + } + done: grpc_resource_quota_internal_unref(exec_ctx, resource_quota); } From aea7d313943da4bcf7f6acb0957975645f951644 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Sun, 30 Oct 2016 21:05:53 -0700 Subject: [PATCH 281/286] Undo the modification in project.pbxproj --- .../tests/Tests.xcodeproj/project.pbxproj | 368 ------------------ 1 file changed, 368 deletions(-) diff --git a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj index 3764cde8fce..c4a6567ae0e 100644 --- a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj +++ b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj @@ -367,15 +367,12 @@ isa = PBXNativeTarget; buildConfigurationList = 5E8A5DAE1D3840B4000F8BC4 /* Build configuration list for PBXNativeTarget "CoreCronetEnd2EndTests" */; buildPhases = ( - 19087EB522BF2CB904F217C6 /* 📦 Check Pods Manifest.lock */, F58F17E425446B15028B9F74 /* [CP] Check Pods Manifest.lock */, 5E8A5DA01D3840B4000F8BC4 /* Sources */, 5E8A5DA11D3840B4000F8BC4 /* Frameworks */, 5E8A5DA21D3840B4000F8BC4 /* Resources */, E63468C760D0724F18861822 /* [CP] Embed Pods Frameworks */, 6DFE9E77CAB5760196D79E0F /* [CP] Copy Pods Resources */, - 39F149BCA768141AB2C9605E /* 📦 Embed Pods Frameworks */, - A7FFC1089E80998BD3D8A74A /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -391,15 +388,12 @@ isa = PBXNativeTarget; buildConfigurationList = 5EE84BFB1D4717E40050C6CC /* Build configuration list for PBXNativeTarget "InteropTestsRemoteWithCronet" */; buildPhases = ( - 0F063848BBC170233CB9174A /* 📦 Check Pods Manifest.lock */, C0F7B1FF6F88CC5FBF362F4C /* [CP] Check Pods Manifest.lock */, 5EE84BED1D4717E40050C6CC /* Sources */, 5EE84BEE1D4717E40050C6CC /* Frameworks */, 5EE84BEF1D4717E40050C6CC /* Resources */, 31F8D1C407195CBF0C02929B /* [CP] Embed Pods Frameworks */, DB4D0E73C229F2FF3B364AB3 /* [CP] Copy Pods Resources */, - 80E19E63650C69937C98132E /* 📦 Embed Pods Frameworks */, - 77F81F984F9E1A6D1980CE21 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -415,15 +409,12 @@ isa = PBXNativeTarget; buildConfigurationList = 63423F4D1B150A5F006CF63C /* Build configuration list for PBXNativeTarget "AllTests" */; buildPhases = ( - 15013B7EA3F1FC5E439C9FE4 /* 📦 Check Pods Manifest.lock */, 914ADDD7106BA9BB8A7E569F /* [CP] Check Pods Manifest.lock */, 63423F401B150A5F006CF63C /* Sources */, 63423F411B150A5F006CF63C /* Frameworks */, 63423F421B150A5F006CF63C /* Resources */, A441F71824DCB9D0CA297748 /* [CP] Copy Pods Resources */, 5F14F59509E10C2852014F9E /* [CP] Embed Pods Frameworks */, - 23D92EBBC256C129A46F7A84 /* 📦 Embed Pods Frameworks */, - 711CEB2D404D3DE6AF548461 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -439,13 +430,11 @@ isa = PBXNativeTarget; buildConfigurationList = 635697DB1B14FC11007A7283 /* Build configuration list for PBXNativeTarget "Tests" */; buildPhases = ( - 10292E33F3C86516707EEF7B /* 📦 Check Pods Manifest.lock */, 796680C7599CB4ED736DD62A /* [CP] Check Pods Manifest.lock */, 635697C31B14FC11007A7283 /* Sources */, 635697C41B14FC11007A7283 /* Frameworks */, 635697C51B14FC11007A7283 /* CopyFiles */, AEEBFC914CBAEE347382E8C4 /* [CP] Copy Pods Resources */, - 03DF64A98174687EB75C8E97 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -460,15 +449,12 @@ isa = PBXNativeTarget; buildConfigurationList = 63DC841B1BE15179000708E8 /* Build configuration list for PBXNativeTarget "RxLibraryUnitTests" */; buildPhases = ( - B43DE93E4F0303EF4EAEE11D /* 📦 Check Pods Manifest.lock */, B2986CEEE8CDD4901C97598B /* [CP] Check Pods Manifest.lock */, 63DC840F1BE15179000708E8 /* Sources */, 63DC84101BE15179000708E8 /* Frameworks */, 63DC84111BE15179000708E8 /* Resources */, 4F5690DC0E6AD6663FE78B8B /* [CP] Embed Pods Frameworks */, C977426A8727267BBAC7D48E /* [CP] Copy Pods Resources */, - 32B797E37F2930B455ACC451 /* 📦 Embed Pods Frameworks */, - A27B9173DCE3B597DF3A2DB3 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -484,15 +470,12 @@ isa = PBXNativeTarget; buildConfigurationList = 63DC842B1BE15267000708E8 /* Build configuration list for PBXNativeTarget "InteropTestsRemote" */; buildPhases = ( - 70A6CC12EA2EE59304D0AAFD /* 📦 Check Pods Manifest.lock */, 4C406327D3907A5E5FBA8AC9 /* [CP] Check Pods Manifest.lock */, 63DC841F1BE15267000708E8 /* Sources */, 63DC84201BE15267000708E8 /* Frameworks */, 63DC84211BE15267000708E8 /* Resources */, 900B6EDD4D16BE7D765C3885 /* [CP] Embed Pods Frameworks */, C2E09DC4BD239F71160F0CC1 /* [CP] Copy Pods Resources */, - 39ADC6D7DCA87D823CF3D846 /* 📦 Embed Pods Frameworks */, - D8308995758FFA86B3729094 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -508,15 +491,12 @@ isa = PBXNativeTarget; buildConfigurationList = 63DC843C1BE15294000708E8 /* Build configuration list for PBXNativeTarget "InteropTestsLocalSSL" */; buildPhases = ( - F14FCE3D40412E4FCC9724B2 /* 📦 Check Pods Manifest.lock */, 5C20DCCB71C3991E6FE78C22 /* [CP] Check Pods Manifest.lock */, 63DC84301BE15294000708E8 /* Sources */, 63DC84311BE15294000708E8 /* Frameworks */, 63DC84321BE15294000708E8 /* Resources */, C591129ACE9F6CC5EE03FCDE /* [CP] Embed Pods Frameworks */, 693DD0B453431D64EA24FD66 /* [CP] Copy Pods Resources */, - 38C9DA9978F7CEC5C1C948FD /* 📦 Embed Pods Frameworks */, - F44F7D1F73DABC8DFA879EBB /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -532,15 +512,12 @@ isa = PBXNativeTarget; buildConfigurationList = 63DC844B1BE152B5000708E8 /* Build configuration list for PBXNativeTarget "InteropTestsLocalCleartext" */; buildPhases = ( - 47F37D18E60280F28A8963E1 /* 📦 Check Pods Manifest.lock */, 7418AC7B3844B29E48D24FC7 /* [CP] Check Pods Manifest.lock */, 63DC843F1BE152B5000708E8 /* Sources */, 63DC84401BE152B5000708E8 /* Frameworks */, 63DC84411BE152B5000708E8 /* Resources */, A8E3AC66DF770B774114A30E /* [CP] Embed Pods Frameworks */, 8AD3130D3C58A0FB32FF2A36 /* [CP] Copy Pods Resources */, - 4FE4AE42DC5C550150618556 /* 📦 Embed Pods Frameworks */, - 3139677FA758B7AF69186BC0 /* 📦 Copy Pods Resources */, ); buildRules = ( ); @@ -666,111 +643,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 03DF64A98174687EB75C8E97 /* 📦 Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Tests/Pods-Tests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 0F063848BBC170233CB9174A /* 📦 Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - 10292E33F3C86516707EEF7B /* 📦 Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - 15013B7EA3F1FC5E439C9FE4 /* 📦 Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - 19087EB522BF2CB904F217C6 /* 📦 Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - 23D92EBBC256C129A46F7A84 /* 📦 Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AllTests/Pods-AllTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 3139677FA758B7AF69186BC0 /* 📦 Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsLocalCleartext/Pods-InteropTestsLocalCleartext-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 31F8D1C407195CBF0C02929B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -786,81 +658,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemoteWithCronet/Pods-InteropTestsRemoteWithCronet-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 32B797E37F2930B455ACC451 /* 📦 Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxLibraryUnitTests/Pods-RxLibraryUnitTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 38C9DA9978F7CEC5C1C948FD /* 📦 Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsLocalSSL/Pods-InteropTestsLocalSSL-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 39ADC6D7DCA87D823CF3D846 /* 📦 Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemote/Pods-InteropTestsRemote-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 39F149BCA768141AB2C9605E /* 📦 Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 47F37D18E60280F28A8963E1 /* 📦 Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; 4C406327D3907A5E5FBA8AC9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -891,21 +688,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxLibraryUnitTests/Pods-RxLibraryUnitTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 4FE4AE42DC5C550150618556 /* 📦 Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsLocalCleartext/Pods-InteropTestsLocalCleartext-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 5C20DCCB71C3991E6FE78C22 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -966,36 +748,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 70A6CC12EA2EE59304D0AAFD /* 📦 Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - 711CEB2D404D3DE6AF548461 /* 📦 Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AllTests/Pods-AllTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 7418AC7B3844B29E48D24FC7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1011,21 +763,6 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - 77F81F984F9E1A6D1980CE21 /* 📦 Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemoteWithCronet/Pods-InteropTestsRemoteWithCronet-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 796680C7599CB4ED736DD62A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1041,21 +778,6 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - 80E19E63650C69937C98132E /* 📦 Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemoteWithCronet/Pods-InteropTestsRemoteWithCronet-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 8AD3130D3C58A0FB32FF2A36 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1101,21 +823,6 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - A27B9173DCE3B597DF3A2DB3 /* 📦 Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxLibraryUnitTests/Pods-RxLibraryUnitTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; A441F71824DCB9D0CA297748 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1131,21 +838,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AllTests/Pods-AllTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - A7FFC1089E80998BD3D8A74A /* 📦 Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; A8E3AC66DF770B774114A30E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1191,21 +883,6 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - B43DE93E4F0303EF4EAEE11D /* 📦 Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; C0F7B1FF6F88CC5FBF362F4C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1266,21 +943,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxLibraryUnitTests/Pods-RxLibraryUnitTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - D8308995758FFA86B3729094 /* 📦 Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsRemote/Pods-InteropTestsRemote-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; DB4D0E73C229F2FF3B364AB3 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1311,36 +973,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F14FCE3D40412E4FCC9724B2 /* 📦 Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - F44F7D1F73DABC8DFA879EBB /* 📦 Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-InteropTestsLocalSSL/Pods-InteropTestsLocalSSL-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; F58F17E425446B15028B9F74 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; From 411969a67cc34c6ce822c7a76f476698fc4eb353 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Sun, 30 Oct 2016 21:10:57 -0700 Subject: [PATCH 282/286] Mark connectivity closures as nullable and check null when invoking them --- .../GRPCClient/private/GRPCConnectivityMonitor.h | 4 ++-- .../GRPCClient/private/GRPCConnectivityMonitor.m | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h index be58138c785..e341b6ef6c3 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.h @@ -72,6 +72,6 @@ * Only one handler is active at a time, so if this method is called again before the previous * handler has been called, it might never be called at all (or yes, if it has already been queued). */ -- (void)handleLossWithHandler:(void (^)())lossHandler - wifiStatusChangeHandler:(void (^)())wifiStatusChangeHandler; +- (void)handleLossWithHandler:(nullable void (^)())lossHandler + wifiStatusChangeHandler:(nullable void (^)())wifiStatusChangeHandler; @end diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index c6f6b39b613..40afca2d3d6 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -151,15 +151,16 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, return returnValue; } -- (void)handleLossWithHandler:(void (^)())lossHandler - wifiStatusChangeHandler:(void (^)())wifiStatusChangeHandler { +- (void)handleLossWithHandler:(nullable void (^)())lossHandler + wifiStatusChangeHandler:(nullable void (^)())wifiStatusChangeHandler { __weak typeof(self) weakSelf = self; [self startListeningWithHandler:^(GRPCReachabilityFlags *flags) { typeof(self) strongSelf = weakSelf; if (strongSelf) { - if (!flags.reachable) { + if (lossHandler && !flags.reachable) { lossHandler(); - } else if (strongSelf->_previousReachabilityFlags && + } else if (wifiStatusChangeHandler && + strongSelf->_previousReachabilityFlags && (flags.isWWAN ^ strongSelf->_previousReachabilityFlags.isWWAN)) { wifiStatusChangeHandler(); From fef9896c82377d278406af5c5bbde651b31e1eb2 Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Thu, 27 Oct 2016 10:45:47 -0700 Subject: [PATCH 283/286] Add --inner_jobs args to run_tests_matrix.py --- tools/run_tests/run_tests_matrix.py | 67 ++++++++++++++++++----------- 1 file changed, 43 insertions(+), 24 deletions(-) diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index b65010ad8b4..2656f1ac5dc 100755 --- a/tools/run_tests/run_tests_matrix.py +++ b/tools/run_tests/run_tests_matrix.py @@ -46,16 +46,16 @@ os.chdir(_ROOT) _RUNTESTS_TIMEOUT = 4*60*60 # Number of jobs assigned to each run_tests.py instance -_INNER_JOBS = 2 +_DEFAULT_INNER_JOBS = 2 -def _docker_jobspec(name, runtests_args=[]): +def _docker_jobspec(name, runtests_args=[], inner_jobs=_DEFAULT_INNER_JOBS): """Run a single instance of run_tests.py in a docker container""" test_job = jobset.JobSpec( cmdline=['python', 'tools/run_tests/run_tests.py', '--use_docker', '-t', - '-j', str(_INNER_JOBS), + '-j', str(inner_jobs), '-x', 'report_%s.xml' % name, '--report_suite_name', '%s' % name] + runtests_args, shortname='run_tests_%s' % name, @@ -63,7 +63,7 @@ def _docker_jobspec(name, runtests_args=[]): return test_job -def _workspace_jobspec(name, runtests_args=[], workspace_name=None): +def _workspace_jobspec(name, runtests_args=[], workspace_name=None, inner_jobs=_DEFAULT_INNER_JOBS): """Run a single instance of run_tests.py in a separate workspace""" if not workspace_name: workspace_name = 'workspace_%s' % name @@ -71,7 +71,7 @@ def _workspace_jobspec(name, runtests_args=[], workspace_name=None): test_job = jobset.JobSpec( cmdline=['tools/run_tests/run_tests_in_workspace.sh', '-t', - '-j', str(_INNER_JOBS), + '-j', str(inner_jobs), '-x', '../report_%s.xml' % name, '--report_suite_name', '%s' % name] + runtests_args, environ=env, @@ -82,7 +82,8 @@ def _workspace_jobspec(name, runtests_args=[], workspace_name=None): def _generate_jobs(languages, configs, platforms, arch=None, compiler=None, - labels=[], extra_args=[]): + labels=[], extra_args=[], + inner_jobs=_DEFAULT_INNER_JOBS): result = [] for language in languages: for platform in platforms: @@ -97,68 +98,75 @@ def _generate_jobs(languages, configs, platforms, runtests_args += extra_args if platform == 'linux': - job = _docker_jobspec(name=name, runtests_args=runtests_args) + job = _docker_jobspec(name=name, runtests_args=runtests_args, inner_jobs=inner_jobs) else: - job = _workspace_jobspec(name=name, runtests_args=runtests_args) + job = _workspace_jobspec(name=name, runtests_args=runtests_args, inner_jobs=inner_jobs) job.labels = [platform, config, language] + labels result.append(job) return result -def _create_test_jobs(extra_args=[]): +def _create_test_jobs(extra_args=[], inner_jobs=_DEFAULT_INNER_JOBS): test_jobs = [] # supported on linux only test_jobs += _generate_jobs(languages=['sanity', 'php7'], configs=['dbg', 'opt'], platforms=['linux'], labels=['basictests'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) # supported on all platforms. test_jobs += _generate_jobs(languages=['c', 'csharp', 'node', 'python'], configs=['dbg', 'opt'], platforms=['linux', 'macos', 'windows'], labels=['basictests'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) # supported on linux and mac. test_jobs += _generate_jobs(languages=['c++', 'ruby', 'php'], configs=['dbg', 'opt'], platforms=['linux', 'macos'], labels=['basictests'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) # supported on mac only. test_jobs += _generate_jobs(languages=['objc'], configs=['dbg', 'opt'], platforms=['macos'], labels=['basictests'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) # sanitizers test_jobs += _generate_jobs(languages=['c'], configs=['msan', 'asan', 'tsan'], platforms=['linux'], labels=['sanitizers'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) test_jobs += _generate_jobs(languages=['c++'], configs=['asan', 'tsan'], platforms=['linux'], labels=['sanitizers'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) # libuv tests test_jobs += _generate_jobs(languages=['c'], configs=['dbg', 'opt'], platforms=['linux'], labels=['libuv'], - extra_args=extra_args + ['--iomgr_platform=uv']) + extra_args=extra_args + ['--iomgr_platform=uv'], + inner_jobs=inner_jobs) return test_jobs -def _create_portability_test_jobs(extra_args=[]): +def _create_portability_test_jobs(extra_args=[], inner_jobs=_DEFAULT_INNER_JOBS): test_jobs = [] # portability C x86 test_jobs += _generate_jobs(languages=['c'], @@ -167,7 +175,8 @@ def _create_portability_test_jobs(extra_args=[]): arch='x86', compiler='default', labels=['portability'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) # portability C and C++ on x64 for compiler in ['gcc4.4', 'gcc4.6', 'gcc5.3', @@ -178,7 +187,8 @@ def _create_portability_test_jobs(extra_args=[]): arch='x64', compiler=compiler, labels=['portability'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) # portability C on Windows for arch in ['x86', 'x64']: @@ -189,7 +199,8 @@ def _create_portability_test_jobs(extra_args=[]): arch=arch, compiler=compiler, labels=['portability'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) test_jobs += _generate_jobs(languages=['python'], configs=['dbg'], @@ -197,7 +208,8 @@ def _create_portability_test_jobs(extra_args=[]): arch='default', compiler='python3.4', labels=['portability'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) test_jobs += _generate_jobs(languages=['csharp'], configs=['dbg'], @@ -205,7 +217,8 @@ def _create_portability_test_jobs(extra_args=[]): arch='default', compiler='coreclr', labels=['portability'], - extra_args=extra_args) + extra_args=extra_args, + inner_jobs=inner_jobs) return test_jobs @@ -220,7 +233,7 @@ def _allowed_labels(): argp = argparse.ArgumentParser(description='Run a matrix of run_tests.py tests.') argp.add_argument('-j', '--jobs', - default=multiprocessing.cpu_count()/_INNER_JOBS, + default=multiprocessing.cpu_count()/_DEFAULT_INNER_JOBS, type=int, help='Number of concurrent run_tests.py instances.') argp.add_argument('-f', '--filter', @@ -249,15 +262,21 @@ argp.add_argument('--base_branch', default='origin/master', type=str, help='Branch that pull request is requesting to merge into') +argp.add_argument('--inner_jobs', + default=_DEFAULT_INNER_JOBS, + type=int, + help='Number of jobs in each run_tests.py instance') args = argp.parse_args() + extra_args = [] if args.build_only: extra_args.append('--build_only') if args.force_default_poller: extra_args.append('--force_default_poller') -all_jobs = _create_test_jobs(extra_args=extra_args) + _create_portability_test_jobs(extra_args=extra_args) +all_jobs = _create_test_jobs(extra_args=extra_args, inner_jobs=args.inner_jobs) + \ + _create_portability_test_jobs(extra_args=extra_args, inner_jobs=args.inner_jobs) jobs = [] for job in all_jobs: From bd3ab19a95472f10093892eca450b0686b486b78 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 31 Oct 2016 12:53:40 -0700 Subject: [PATCH 284/286] Add some fields to bigquery --- tools/run_tests/performance/bq_upload_result.py | 1 + tools/run_tests/performance/scenario_result_schema.json | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py index 2a99499843a..5158b22c607 100755 --- a/tools/run_tests/performance/bq_upload_result.py +++ b/tools/run_tests/performance/bq_upload_result.py @@ -120,6 +120,7 @@ def _flatten_result_inplace(scenario_result): scenario_result['serverCores'] = json.dumps(scenario_result['serverCores']) scenario_result['clientSuccess'] = json.dumps(scenario_result['clientSuccess']) scenario_result['serverSuccess'] = json.dumps(scenario_result['serverSuccess']) + scenario_result['requestResults'] = json.dumps(scenario_result['requestResults']) def _populate_metadata_inplace(scenario_result): diff --git a/tools/run_tests/performance/scenario_result_schema.json b/tools/run_tests/performance/scenario_result_schema.json index 6bec21df397..d32d979fe51 100644 --- a/tools/run_tests/performance/scenario_result_schema.json +++ b/tools/run_tests/performance/scenario_result_schema.json @@ -208,5 +208,10 @@ "name": "serverSuccess", "type": "STRING", "mode": "NULLABLE" + }, + { + "name": "request_results", + "type": "STRING", + "mode": "NULLABLE" } ] From 77fbc1ca2a430e36a9bae80b2bd419d1a8b8e6c0 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 31 Oct 2016 14:04:03 -0700 Subject: [PATCH 285/286] Fix some typos --- tools/run_tests/performance/bq_upload_result.py | 2 +- tools/run_tests/performance/scenario_result_schema.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py index 5158b22c607..9b817b5896b 100755 --- a/tools/run_tests/performance/bq_upload_result.py +++ b/tools/run_tests/performance/bq_upload_result.py @@ -120,7 +120,7 @@ def _flatten_result_inplace(scenario_result): scenario_result['serverCores'] = json.dumps(scenario_result['serverCores']) scenario_result['clientSuccess'] = json.dumps(scenario_result['clientSuccess']) scenario_result['serverSuccess'] = json.dumps(scenario_result['serverSuccess']) - scenario_result['requestResults'] = json.dumps(scenario_result['requestResults']) + scenario_result['requestResults'] = json.dumps(scenario_result.get('requestResults', [])) def _populate_metadata_inplace(scenario_result): diff --git a/tools/run_tests/performance/scenario_result_schema.json b/tools/run_tests/performance/scenario_result_schema.json index d32d979fe51..3285f212d77 100644 --- a/tools/run_tests/performance/scenario_result_schema.json +++ b/tools/run_tests/performance/scenario_result_schema.json @@ -210,7 +210,7 @@ "mode": "NULLABLE" }, { - "name": "request_results", + "name": "requestResults", "type": "STRING", "mode": "NULLABLE" } From ed531b8e82d095255a64e5307c3bf32e803ae222 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 1 Nov 2016 10:27:18 -0700 Subject: [PATCH 286/286] More data massaging --- tools/run_tests/performance/bq_upload_result.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py index 9b817b5896b..3a3c4ae7003 100755 --- a/tools/run_tests/performance/bq_upload_result.py +++ b/tools/run_tests/performance/bq_upload_result.py @@ -117,6 +117,7 @@ def _flatten_result_inplace(scenario_result): scenario_result['latencies'] = json.dumps(scenario_result['latencies']) for stats in scenario_result['clientStats']: stats['latencies'] = json.dumps(stats['latencies']) + stats.pop('requestResults', None) scenario_result['serverCores'] = json.dumps(scenario_result['serverCores']) scenario_result['clientSuccess'] = json.dumps(scenario_result['clientSuccess']) scenario_result['serverSuccess'] = json.dumps(scenario_result['serverSuccess'])