Merge pull request #7 from grpc/master

Sync with grpc
pull/22032/head
Zhanghui Mao 5 years ago committed by GitHub
commit 8072fcb231
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      BUILD
  2. 11
      BUILDING.md
  3. 89
      Makefile
  4. 2
      README.md
  5. 4
      examples/cpp/compression/README.md
  6. 6
      examples/cpp/helloworld/README.md
  7. 5
      examples/cpp/load_balancing/README.md
  8. 5
      examples/cpp/metadata/README.md
  9. 2
      examples/node/README.md
  10. 4
      examples/objective-c/helloworld/README.md
  11. 2
      examples/php/README.md
  12. 28
      include/grpc++/impl/sync_cxx11.h
  13. 28
      include/grpc++/impl/sync_no_cxx11.h
  14. 2
      include/grpcpp/impl/codegen/completion_queue_impl.h
  15. 14
      include/grpcpp/impl/codegen/time.h
  16. 24
      include/grpcpp/impl/sync_cxx11.h
  17. 24
      include/grpcpp/impl/sync_no_cxx11.h
  18. 1
      src/abseil-cpp/gen_build_yaml.py
  19. 16
      src/core/ext/filters/client_channel/xds/xds_client.cc
  20. 3
      src/core/lib/iomgr/tcp_posix.cc
  21. 7
      src/core/lib/security/security_connector/local/local_security_connector.cc
  22. 2
      src/core/tsi/alts/handshaker/alts_handshaker_client.cc
  23. 2
      src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc
  24. 8
      src/php/README.md
  25. 2
      src/python/grpcio/README.rst
  26. 2
      src/python/grpcio/grpc/_cython/_cygrpc/aio/call.pxd.pxi
  27. 132
      src/python/grpcio/grpc/experimental/aio/_channel.py
  28. 4
      src/python/grpcio_tests/tests/unit/_metadata_code_details_test.py
  29. 1
      src/python/grpcio_tests/tests_aio/tests.json
  30. 70
      src/python/grpcio_tests/tests_aio/unit/close_channel_test.py
  31. 10
      src/upb/gen_build_yaml.py
  32. 3
      templates/Makefile.template
  33. 4
      templates/tools/doxygen/Doxyfile.include
  34. 4
      templates/tools/doxygen/Doxyfile.objc.include
  35. 5
      test/core/iomgr/BUILD
  36. 5
      test/core/iomgr/resolve_address_posix_test.cc
  37. 5
      test/core/iomgr/resolve_address_test.cc
  38. 36
      test/core/security/credentials_test.cc
  39. 19
      test/core/security/oauth2_utils.cc
  40. 17
      test/cpp/interop/BUILD
  41. 1
      test/cpp/interop/xds_interop_client.cc
  42. 185
      test/cpp/microbenchmarks/BUILD
  43. 3
      test/cpp/microbenchmarks/bm_call_create.cc
  44. 10
      test/cpp/microbenchmarks/bm_opencensus_plugin.cc
  45. 2
      test/cpp/microbenchmarks/bm_timer.cc
  46. 5
      tools/bazel
  47. 2
      tools/distrib/python/grpcio_tools/README.rst
  48. 6
      tools/dockerfile/distribtest/ruby_jessie_x64_ruby_2_4/Dockerfile
  49. 6
      tools/dockerfile/distribtest/ruby_jessie_x64_ruby_2_5/Dockerfile
  50. 6
      tools/dockerfile/distribtest/ruby_jessie_x64_ruby_2_6/Dockerfile
  51. 40
      tools/dockerfile/distribtest/ruby_jessie_x64_ruby_2_7/Dockerfile
  52. 2
      tools/doxygen/Doxyfile.c++.internal
  53. 15
      tools/doxygen/Doxyfile.core
  54. 15
      tools/doxygen/Doxyfile.core.internal
  55. 4
      tools/remote_build/rbe_common.bazelrc
  56. 1
      tools/run_tests/artifacts/distribtest_targets.py
  57. 2
      tools/run_tests/sanity/check_deprecated_grpc++.py

@ -200,8 +200,6 @@ GRPCXX_PUBLIC_HDRS = [
"include/grpc++/impl/server_builder_plugin.h",
"include/grpc++/impl/server_initializer.h",
"include/grpc++/impl/service_type.h",
"include/grpc++/impl/sync_cxx11.h",
"include/grpc++/impl/sync_no_cxx11.h",
"include/grpc++/security/auth_context.h",
"include/grpc++/resource_quota.h",
"include/grpc++/security/auth_metadata_processor.h",
@ -256,8 +254,6 @@ GRPCXX_PUBLIC_HDRS = [
"include/grpcpp/impl/server_initializer.h",
"include/grpcpp/impl/server_initializer_impl.h",
"include/grpcpp/impl/service_type.h",
"include/grpcpp/impl/sync_cxx11.h",
"include/grpcpp/impl/sync_no_cxx11.h",
"include/grpcpp/resource_quota.h",
"include/grpcpp/resource_quota_impl.h",
"include/grpcpp/security/auth_context.h",
@ -750,6 +746,7 @@ grpc_cc_library(
"src/core/lib/iomgr/iomgr_internal.cc",
"src/core/lib/iomgr/iomgr_posix.cc",
"src/core/lib/iomgr/iomgr_posix_cfstream.cc",
"src/core/lib/iomgr/iomgr_uv.cc",
"src/core/lib/iomgr/iomgr_windows.cc",
"src/core/lib/iomgr/is_epollexclusive_available.cc",
"src/core/lib/iomgr/load_file.cc",
@ -773,6 +770,7 @@ grpc_cc_library(
"src/core/lib/iomgr/socket_utils_common_posix.cc",
"src/core/lib/iomgr/socket_utils_linux.cc",
"src/core/lib/iomgr/socket_utils_posix.cc",
"src/core/lib/iomgr/socket_utils_uv.cc",
"src/core/lib/iomgr/socket_utils_windows.cc",
"src/core/lib/iomgr/socket_windows.cc",
"src/core/lib/iomgr/tcp_client.cc",
@ -992,6 +990,7 @@ grpc_cc_library(
public_hdrs = GRPC_PUBLIC_HDRS,
use_cfstream = True,
deps = [
"eventmanager_libuv",
"gpr_base",
"grpc_codegen",
"grpc_trace",

@ -72,13 +72,13 @@ To prepare for cmake + Microsoft Visual C++ compiler build
# Clone the repository (including submodules)
Before building, you need to clone the gRPC github repository and download submodules containing source code
for gRPC's dependencies (that's done by the `submodule` command or `--recursive` flag). The following commands will clone the gRPC
repository at the latest stable version.
for gRPC's dependencies (that's done by the `submodule` command or `--recursive` flag). Use following commands
to clone the gRPC repository at the [latest stable release tag](https://github.com/grpc/grpc/releases)
## Unix
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
$ cd grpc
$ git submodule update --init
```
@ -86,10 +86,9 @@ repository at the latest stable version.
## Windows
```
> @rem You can also do just "git clone --recursive -b THE_BRANCH_YOU_WANT https://github.com/grpc/grpc"
> powershell git clone --recursive -b ((New-Object System.Net.WebClient).DownloadString(\"https://grpc.io/release\").Trim()) https://github.com/grpc/grpc
> git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
> cd grpc
> @rem To update submodules at later time, run "git submodule update --init"
> git submodule update --init
```
NOTE: The `bazel` build tool uses a different model for dependencies. You only need to worry about downloading submodules if you're building

@ -3944,7 +3944,7 @@ PUBLIC_HEADERS_C += \
LIBGPR_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGPR_SRC))))
$(LIBDIR)/$(CONFIG)/libgpr.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(LIBGRPC_ABSEIL_DEP) $(LIBGPR_OBJS)
$(LIBDIR)/$(CONFIG)/libgpr.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGPR_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr.a
@ -5479,7 +5479,7 @@ PUBLIC_HEADERS_C += \
LIBGRPC_TEST_UTIL_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_TEST_UTIL_UNSECURE_SRC))))
$(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(LIBGRPC_ABSEIL_DEP) $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS)
$(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a
@ -5846,7 +5846,7 @@ PUBLIC_HEADERS_C += \
LIBGRPC_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_UNSECURE_SRC))))
$(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(LIBGRPC_ABSEIL_DEP) $(LIBGRPC_UNSECURE_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS)
$(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGRPC_UNSECURE_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a
@ -7493,7 +7493,7 @@ $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARE
else
$(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(LIBGRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_UNSECURE_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS)
$(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_UNSECURE_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a
@ -7665,7 +7665,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: protobuf_dep_error
else
$(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(LIBGRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC_PLUGIN_SUPPORT_OBJS)
$(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC_PLUGIN_SUPPORT_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a
@ -8480,7 +8480,7 @@ $(LIBBORINGSSL_OBJS): CPPFLAGS += -Ithird_party/boringssl-with-bazel/src/include
$(LIBBORINGSSL_OBJS): CXXFLAGS += -fno-exceptions
$(LIBBORINGSSL_OBJS): CFLAGS += -g
$(LIBDIR)/$(CONFIG)/libboringssl.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(LIBGRPC_ABSEIL_DEP) $(LIBBORINGSSL_OBJS)
$(LIBDIR)/$(CONFIG)/libboringssl.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBBORINGSSL_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl.a
@ -8520,7 +8520,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: protobuf_dep_error
else
$(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(LIBGRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_TEST_UTIL_OBJS)
$(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_TEST_UTIL_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a
@ -8575,7 +8575,7 @@ $(LIBDIR)/$(CONFIG)/libbenchmark.a: protobuf_dep_error
else
$(LIBDIR)/$(CONFIG)/libbenchmark.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(LIBGRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBBENCHMARK_OBJS)
$(LIBDIR)/$(CONFIG)/libbenchmark.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBBENCHMARK_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libbenchmark.a
@ -8607,18 +8607,7 @@ PUBLIC_HEADERS_C += \
LIBUPB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBUPB_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure libraries if you don't have OpenSSL.
$(LIBDIR)/$(CONFIG)/libupb.a: openssl_dep_error
$(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): openssl_dep_error
else
$(LIBDIR)/$(CONFIG)/libupb.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBUPB_OBJS)
$(LIBDIR)/$(CONFIG)/libupb.a: $(LIBUPB_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libupb.a
@ -8630,12 +8619,12 @@ endif
ifeq ($(SYSTEM),MINGW32)
$(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBUPB_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(OPENSSL_DEP)
$(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBUPB_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP)
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBUPB_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS)
else
$(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBUPB_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(OPENSSL_DEP)
$(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBUPB_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP)
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
ifeq ($(SYSTEM),Darwin)
@ -8647,13 +8636,9 @@ else
endif
endif
endif
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(LIBUPB_OBJS:.o=.dep)
endif
endif
LIBZ_SRC = \
@ -9064,7 +9049,7 @@ PUBLIC_HEADERS_C += \
LIBEND2END_NOSEC_TESTS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_NOSEC_TESTS_SRC))))
$(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(LIBGRPC_ABSEIL_DEP) $(LIBEND2END_NOSEC_TESTS_OBJS)
$(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBEND2END_NOSEC_TESTS_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a
@ -9118,17 +9103,7 @@ LIBGRPC_ABSEIL_SRC = \
LIBGRPC_ABSEIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_ABSEIL_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure libraries if you don't have OpenSSL.
$(LIBDIR)/$(CONFIG)/libgrpc_abseil.a: openssl_dep_error
else
$(LIBDIR)/$(CONFIG)/libgrpc_abseil.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGRPC_ABSEIL_OBJS)
$(LIBDIR)/$(CONFIG)/libgrpc_abseil.a: $(LIBGRPC_ABSEIL_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a
@ -9140,13 +9115,9 @@ endif
endif
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(LIBGRPC_ABSEIL_OBJS:.o=.dep)
endif
endif
# All of the test targets, and protoc plugins
@ -23548,40 +23519,6 @@ test/cpp/util/string_ref_helper.cc: $(OPENSSL_DEP)
test/cpp/util/subprocess.cc: $(OPENSSL_DEP)
test/cpp/util/test_config_cc.cc: $(OPENSSL_DEP)
test/cpp/util/test_credentials_provider.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/dynamic_annotations.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/internal/cycleclock.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/internal/raw_logging.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/internal/spinlock.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/internal/sysinfo.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/internal/thread_identity.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/internal/throw_delegate.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/base/log_severity.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/numeric/int128.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/ascii.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/charconv.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/escaping.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/internal/escaping.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/internal/memutil.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/internal/ostringstream.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/internal/utf8.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/match.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/numbers.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/str_cat.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/str_replace.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/str_split.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/string_view.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/strings/substitute.cc: $(OPENSSL_DEP)
third_party/abseil-cpp/absl/types/bad_optional_access.cc: $(OPENSSL_DEP)
third_party/upb/upb/decode.c: $(OPENSSL_DEP)
third_party/upb/upb/encode.c: $(OPENSSL_DEP)
third_party/upb/upb/msg.c: $(OPENSSL_DEP)
third_party/upb/upb/port.c: $(OPENSSL_DEP)
third_party/upb/upb/table.c: $(OPENSSL_DEP)
third_party/upb/upb/upb.c: $(OPENSSL_DEP)
endif
.PHONY: all strip tools dep_error openssl_dep_error openssl_dep_message git_update stop buildtests buildtests_c buildtests_cxx test test_c test_cxx install install_c install_cxx install-headers install-headers_c install-headers_cxx install-shared install-shared_c install-shared_cxx install-static install-static_c install-static_cxx strip strip-shared strip-static strip_c strip-shared_c strip-static_c strip_cxx strip-shared_cxx strip-static_cxx dep_c dep_cxx bins_dep_c bins_dep_cxx clean

@ -53,7 +53,7 @@ Sometimes things go wrong. Please check out the [Troubleshooting guide](TROUBLES
# Performance
See the [Performance dashboard](http://performance-dot-grpc-testing.appspot.com/explore?dashboard=5636470266134528) for performance numbers of the latest released version.
See the [Performance dashboard](https://performance-dot-grpc-testing.appspot.com/explore?dashboard=5652536396611584) for performance numbers of master branch daily builds.
# Concepts

@ -5,11 +5,11 @@ Make sure you have run the [hello world example](../helloworld) or understood th
### Get the tutorial source code
The example code for this and our other examples lives in the `examples` directory. Clone this repository to your local machine by running the following command:
The example code for this and our other examples lives in the `examples` directory. Clone this repository at the [latest stable release tag](https://github.com/grpc/grpc/releases) to your local machine by running the following command:
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
```
Change your current directory to examples/cpp/compression

@ -7,12 +7,12 @@ Make sure you have installed gRPC on your system. Follow the
### Get the tutorial source code
The example code for this and our other examples lives in the `examples`
directory. Clone this repository to your local machine by running the
following command:
directory. Clone this repository at the [latest stable release tag](https://github.com/grpc/grpc/releases)
to your local machine by running the following command:
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
```
Change your current directory to examples/cpp/helloworld

@ -5,11 +5,12 @@ Make sure you have run the [hello world example](../helloworld) or understood th
### Get the tutorial source code
The example code for this and our other examples lives in the `examples` directory. Clone this repository to your local machine by running the following command:
The example code for this and our other examples lives in the `examples` directory. Clone this repository
at the [latest stable release tag](https://github.com/grpc/grpc/releases) to your local machine by running the following command:
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
```
Change your current directory to examples/cpp/load_balancing

@ -10,9 +10,10 @@ https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md, with the
exception of binary headers, which don't have to be base64 encoded.
### Get the tutorial source code
The example code for this and our other examples lives in the `examples` directory. Clone this repository to your local machine by running the following command:
The example code for this and our other examples lives in the `examples` directory. Clone this repository
at the [latest stable release tag](https://github.com/grpc/grpc/releases) to your local machine by running the following command:
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
```
Change your current directory to examples/cpp/metadata
```sh

@ -12,7 +12,7 @@ INSTALL
```sh
$ # Get the gRPC repository
$ export REPO_ROOT=grpc # REPO root can be any directory of your choice
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc $REPO_ROOT
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc $REPO_ROOT
$ cd $REPO_ROOT
$ cd examples/node

@ -18,11 +18,11 @@ Here's how to build and run the Objective-C implementation of the [Hello World](
example used in [Getting started](https://github.com/grpc/grpc/tree/master/examples).
The example code for this and our other examples lives in the `examples` directory. Clone
this repository to your local machine by running the following commands:
this repository at the [latest stable release tag](https://github.com/grpc/grpc/releases) to your local machine by running the following commands:
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
$ cd grpc
$ git submodule update --init
```

@ -16,7 +16,7 @@ This requires `php` >= 5.5, `pecl`, `composer`
- Install the `protoc` compiler plugin `grpc_php_plugin`
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
$ cd grpc
$ make grpc_php_plugin
```

@ -1,28 +0,0 @@
/*
*
* Copyright 2018 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
// DEPRECATED: The headers in include/grpc++ are deprecated. Please include the
// headers in include/grpcpp instead. This header exists only for backwards
// compatibility.
#ifndef GRPCXX_IMPL_SYNC_CXX11_H
#define GRPCXX_IMPL_SYNC_CXX11_H
#include <grpcpp/impl/sync_cxx11.h>
#endif // GRPCXX_IMPL_SYNC_CXX11_H

@ -1,28 +0,0 @@
/*
*
* Copyright 2018 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
// DEPRECATED: The headers in include/grpc++ are deprecated. Please include the
// headers in include/grpcpp instead. This header exists only for backwards
// compatibility.
#ifndef GRPCXX_IMPL_SYNC_NO_CXX11_H
#define GRPCXX_IMPL_SYNC_NO_CXX11_H
#include <grpcpp/impl/sync_no_cxx11.h>
#endif // GRPCXX_IMPL_SYNC_NO_CXX11_H

@ -387,12 +387,14 @@ class CompletionQueue : private ::grpc::GrpcLibraryCodegen {
}
void RegisterServer(const Server* server) {
(void)server;
#ifndef NDEBUG
grpc::internal::MutexLock l(&server_list_mutex_);
server_list_.push_back(server);
#endif
}
void UnregisterServer(const Server* server) {
(void)server;
#ifndef NDEBUG
grpc::internal::MutexLock l(&server_list_mutex_);
server_list_.remove(server);

@ -39,14 +39,12 @@ namespace grpc {
template <typename T>
class TimePoint {
public:
TimePoint(const T& /*time*/) { you_need_a_specialization_of_TimePoint(); }
gpr_timespec raw_time() {
gpr_timespec t;
return t;
}
private:
void you_need_a_specialization_of_TimePoint();
// If you see the error with methods below, you may need either
// i) using the existing types having a conversion class such as
// gpr_timespec and std::chrono::system_clock::time_point or
// ii) writing a new TimePoint<YourType> to address your case.
TimePoint(const T& /*time*/) = delete;
gpr_timespec raw_time() = delete;
};
template <>

@ -1,24 +0,0 @@
/*
*
* Copyright 2015 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef GRPCPP_IMPL_SYNC_CXX11_H
#define GRPCPP_IMPL_SYNC_CXX11_H
#include <grpcpp/impl/codegen/sync_cxx11.h>
#endif // GRPCPP_IMPL_SYNC_CXX11_H

@ -1,24 +0,0 @@
/*
*
* Copyright 2015 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef GRPCPP_IMPL_SYNC_NO_CXX11_H
#define GRPCPP_IMPL_SYNC_NO_CXX11_H
#include <grpcpp/impl/codegen/sync_no_cxx11.h>
#endif // GRPCPP_IMPL_SYNC_NO_CXX11_H

@ -26,4 +26,5 @@ for build in builds:
build['build'] = 'private'
build['build_system'] = []
build['language'] = 'c'
build['secure'] = False
print(yaml.dump({'libs': builds}))

@ -1751,8 +1751,16 @@ XdsClient::~XdsClient() { GRPC_COMBINER_UNREF(combiner_, "xds_client"); }
void XdsClient::Orphan() {
shutting_down_ = true;
chand_.reset();
cluster_map_.clear();
endpoint_map_.clear();
// We do not clear cluster_map_ and endpoint_map_ if the xds client was
// created by the XdsResolver because the maps contain refs for watchers which
// in turn hold refs to the loadbalancing policies. At this point, it is
// possible for ADS calls to be in progress. Unreffing the loadbalancing
// policies before those calls are done would lead to issues such as
// https://github.com/grpc/grpc/issues/20928.
if (service_config_watcher_ != nullptr) {
cluster_map_.clear();
endpoint_map_.clear();
}
Unref(DEBUG_LOCATION, "XdsClient::Orphan()");
}
@ -1902,13 +1910,13 @@ void XdsClient::NotifyOnError(grpc_error* error) {
void* XdsClient::ChannelArgCopy(void* p) {
XdsClient* xds_client = static_cast<XdsClient*>(p);
xds_client->Ref().release();
xds_client->Ref(DEBUG_LOCATION, "channel arg").release();
return p;
}
void XdsClient::ChannelArgDestroy(void* p) {
XdsClient* xds_client = static_cast<XdsClient*>(p);
xds_client->Unref();
xds_client->Unref(DEBUG_LOCATION, "channel arg");
}
int XdsClient::ChannelArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }

@ -1385,7 +1385,8 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
static void UnrefMaybePutZerocopySendRecord(grpc_tcp* tcp,
TcpZerocopySendRecord* record,
uint32_t seq, const char* tag) {
uint32_t seq,
const char* /* tag */) {
if (record->Unref()) {
tcp->tcp_zerocopy_send_ctx.PutSendRecord(record);
}

@ -66,8 +66,7 @@ grpc_core::RefCountedPtr<grpc_auth_context> local_auth_context_create(
return ctx;
}
void local_check_peer(grpc_security_connector* sc, tsi_peer peer,
grpc_endpoint* ep,
void local_check_peer(tsi_peer peer, grpc_endpoint* ep,
grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
grpc_closure* on_peer_checked,
grpc_local_connect_type type) {
@ -178,7 +177,7 @@ class grpc_local_channel_security_connector final
grpc_closure* on_peer_checked) override {
grpc_local_credentials* creds =
reinterpret_cast<grpc_local_credentials*>(mutable_channel_creds());
local_check_peer(this, peer, ep, auth_context, on_peer_checked,
local_check_peer(peer, ep, auth_context, on_peer_checked,
creds->connect_type());
}
@ -227,7 +226,7 @@ class grpc_local_server_security_connector final
grpc_closure* on_peer_checked) override {
grpc_local_server_credentials* creds =
static_cast<grpc_local_server_credentials*>(mutable_server_creds());
local_check_peer(this, peer, ep, auth_context, on_peer_checked,
local_check_peer(peer, ep, auth_context, on_peer_checked,
creds->connect_type());
}

@ -637,7 +637,7 @@ static void handshaker_client_shutdown(alts_handshaker_client* c) {
}
}
static void handshaker_call_unref(void* arg, grpc_error* error) {
static void handshaker_call_unref(void* arg, grpc_error* /* error */) {
grpc_call* call = static_cast<grpc_call*>(arg);
grpc_call_unref(call);
}

@ -430,7 +430,7 @@ struct alts_tsi_handshaker_continue_handshaker_next_args {
};
static void alts_tsi_handshaker_create_channel(void* arg,
grpc_error* unused_error) {
grpc_error* /* unused_error */) {
alts_tsi_handshaker_continue_handshaker_next_args* next_args =
static_cast<alts_tsi_handshaker_continue_handshaker_next_args*>(arg);
alts_tsi_handshaker* handshaker = next_args->handshaker;

@ -47,10 +47,10 @@ You can download the pre-compiled `grpc.dll` extension from the PECL
### Build from source
Clone this repository
Clone this repository at the [latest stable release tag](https://github.com/grpc/grpc/releases)
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
```
#### Build and install the gRPC C core library
@ -184,7 +184,7 @@ in the future.
You can also just build the `grpc_php_plugin` by running:
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
$ cd grpc
$ git submodule update --init
$ make grpc_php_plugin
@ -246,7 +246,7 @@ $ protoc -I=. echo.proto --php_out=. --grpc_out=. \
You will need the source code to run tests
```sh
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
$ cd grpc
$ git submodule update --init
```

@ -59,7 +59,7 @@ package named :code:`python-dev`).
::
$ export REPO_ROOT=grpc # REPO_ROOT can be any directory of your choice
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc $REPO_ROOT
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc $REPO_ROOT
$ cd $REPO_ROOT
$ git submodule update --init

@ -15,7 +15,7 @@
cdef class _AioCall(GrpcCallWrapper):
cdef:
AioChannel _channel
readonly AioChannel _channel
list _references
object _deadline
list _done_callbacks

@ -12,16 +12,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
"""Invocation-side implementation of gRPC Asyncio Python."""
import asyncio
from typing import Any, AsyncIterable, Optional, Sequence, AbstractSet
from weakref import WeakSet
import sys
from typing import Any, AsyncIterable, Iterable, Optional, Sequence
import logging
import grpc
from grpc import _common
from grpc import _common, _compression, _grpcio_metadata
from grpc._cython import cygrpc
from grpc import _compression
from grpc import _grpcio_metadata
from . import _base_call
from ._call import (StreamStreamCall, StreamUnaryCall, UnaryStreamCall,
@ -35,6 +33,15 @@ from ._utils import _timeout_to_deadline
_IMMUTABLE_EMPTY_TUPLE = tuple()
_USER_AGENT = 'grpc-python-asyncio/{}'.format(_grpcio_metadata.__version__)
if sys.version_info[1] < 7:
def _all_tasks() -> Iterable[asyncio.Task]:
return asyncio.Task.all_tasks()
else:
def _all_tasks() -> Iterable[asyncio.Task]:
return asyncio.all_tasks()
def _augment_channel_arguments(base_options: ChannelArgumentType,
compression: Optional[grpc.Compression]):
@ -48,50 +55,12 @@ def _augment_channel_arguments(base_options: ChannelArgumentType,
) + compression_channel_argument + user_agent_channel_argument
_LOGGER = logging.getLogger(__name__)
class _OngoingCalls:
"""Internal class used for have visibility of the ongoing calls."""
_calls: AbstractSet[_base_call.RpcContext]
def __init__(self):
self._calls = WeakSet()
def _remove_call(self, call: _base_call.RpcContext):
try:
self._calls.remove(call)
except KeyError:
pass
@property
def calls(self) -> AbstractSet[_base_call.RpcContext]:
"""Returns the set of ongoing calls."""
return self._calls
def size(self) -> int:
"""Returns the number of ongoing calls."""
return len(self._calls)
def trace_call(self, call: _base_call.RpcContext):
"""Adds and manages a new ongoing call."""
self._calls.add(call)
call.add_done_callback(self._remove_call)
class _BaseMultiCallable:
"""Base class of all multi callable objects.
Handles the initialization logic and stores common attributes.
"""
_loop: asyncio.AbstractEventLoop
_channel: cygrpc.AioChannel
_ongoing_calls: _OngoingCalls
_method: bytes
_request_serializer: SerializingFunction
_response_deserializer: DeserializingFunction
_channel: cygrpc.AioChannel
_method: bytes
_request_serializer: SerializingFunction
@ -103,7 +72,6 @@ class _BaseMultiCallable:
def __init__(
self,
channel: cygrpc.AioChannel,
ongoing_calls: _OngoingCalls,
method: bytes,
request_serializer: SerializingFunction,
response_deserializer: DeserializingFunction,
@ -112,7 +80,6 @@ class _BaseMultiCallable:
) -> None:
self._loop = loop
self._channel = channel
self._ongoing_calls = ongoing_calls
self._method = method
self._request_serializer = request_serializer
self._response_deserializer = response_deserializer
@ -170,7 +137,6 @@ class UnaryUnaryMultiCallable(_BaseMultiCallable):
self._request_serializer, self._response_deserializer,
self._loop)
self._ongoing_calls.trace_call(call)
return call
@ -213,7 +179,7 @@ class UnaryStreamMultiCallable(_BaseMultiCallable):
wait_for_ready, self._channel, self._method,
self._request_serializer,
self._response_deserializer, self._loop)
self._ongoing_calls.trace_call(call)
return call
@ -260,7 +226,7 @@ class StreamUnaryMultiCallable(_BaseMultiCallable):
credentials, wait_for_ready, self._channel,
self._method, self._request_serializer,
self._response_deserializer, self._loop)
self._ongoing_calls.trace_call(call)
return call
@ -307,7 +273,7 @@ class StreamStreamMultiCallable(_BaseMultiCallable):
credentials, wait_for_ready, self._channel,
self._method, self._request_serializer,
self._response_deserializer, self._loop)
self._ongoing_calls.trace_call(call)
return call
@ -319,7 +285,6 @@ class Channel:
_loop: asyncio.AbstractEventLoop
_channel: cygrpc.AioChannel
_unary_unary_interceptors: Optional[Sequence[UnaryUnaryClientInterceptor]]
_ongoing_calls: _OngoingCalls
def __init__(self, target: str, options: ChannelArgumentType,
credentials: Optional[grpc.ChannelCredentials],
@ -359,7 +324,6 @@ class Channel:
_common.encode(target),
_augment_channel_arguments(options, compression), credentials,
self._loop)
self._ongoing_calls = _OngoingCalls()
async def __aenter__(self):
"""Starts an asynchronous context manager.
@ -383,22 +347,48 @@ class Channel:
# No new calls will be accepted by the Cython channel.
self._channel.closing()
if grace:
# pylint: disable=unused-variable
_, pending = await asyncio.wait(self._ongoing_calls.calls,
timeout=grace,
loop=self._loop)
if not pending:
return
# A new set is created acting as a shallow copy because
# when cancellation happens the calls are automatically
# removed from the originally set.
calls = WeakSet(data=self._ongoing_calls.calls)
# Iterate through running tasks
tasks = _all_tasks()
calls = []
call_tasks = []
for task in tasks:
stack = task.get_stack(limit=1)
# If the Task is created by a C-extension, the stack will be empty.
if not stack:
continue
# Locate ones created by `aio.Call`.
frame = stack[0]
candidate = frame.f_locals.get('self')
if candidate:
if isinstance(candidate, _base_call.Call):
if hasattr(candidate, '_channel'):
# For intercepted Call object
if candidate._channel is not self._channel:
continue
elif hasattr(candidate, '_cython_call'):
# For normal Call object
if candidate._cython_call._channel is not self._channel:
continue
else:
# Unidentified Call object
raise cygrpc.InternalError(
f'Unrecognized call object: {candidate}')
calls.append(candidate)
call_tasks.append(task)
# If needed, try to wait for them to finish.
# Call objects are not always awaitables.
if grace and call_tasks:
await asyncio.wait(call_tasks, timeout=grace, loop=self._loop)
# Time to cancel existing calls.
for call in calls:
call.cancel()
# Destroy the channel
self._channel.close()
async def close(self, grace: Optional[float] = None):
@ -487,8 +477,7 @@ class Channel:
Returns:
A UnaryUnaryMultiCallable value for the named unary-unary method.
"""
return UnaryUnaryMultiCallable(self._channel, self._ongoing_calls,
_common.encode(method),
return UnaryUnaryMultiCallable(self._channel, _common.encode(method),
request_serializer,
response_deserializer,
self._unary_unary_interceptors,
@ -500,8 +489,7 @@ class Channel:
request_serializer: Optional[SerializingFunction] = None,
response_deserializer: Optional[DeserializingFunction] = None
) -> UnaryStreamMultiCallable:
return UnaryStreamMultiCallable(self._channel, self._ongoing_calls,
_common.encode(method),
return UnaryStreamMultiCallable(self._channel, _common.encode(method),
request_serializer,
response_deserializer, None, self._loop)
@ -511,8 +499,7 @@ class Channel:
request_serializer: Optional[SerializingFunction] = None,
response_deserializer: Optional[DeserializingFunction] = None
) -> StreamUnaryMultiCallable:
return StreamUnaryMultiCallable(self._channel, self._ongoing_calls,
_common.encode(method),
return StreamUnaryMultiCallable(self._channel, _common.encode(method),
request_serializer,
response_deserializer, None, self._loop)
@ -522,8 +509,7 @@ class Channel:
request_serializer: Optional[SerializingFunction] = None,
response_deserializer: Optional[DeserializingFunction] = None
) -> StreamStreamMultiCallable:
return StreamStreamMultiCallable(self._channel, self._ongoing_calls,
_common.encode(method),
return StreamStreamMultiCallable(self._channel, _common.encode(method),
request_serializer,
response_deserializer, None,
self._loop)

@ -250,7 +250,6 @@ class MetadataCodeDetailsTest(unittest.TestCase):
test_common.metadata_transmitted(_SERVER_TRAILING_METADATA,
call.trailing_metadata()))
self.assertIs(grpc.StatusCode.OK, call.code())
self.assertEqual(_DETAILS, call.details())
def testSuccessfulUnaryStream(self):
self._servicer.set_details(_DETAILS)
@ -271,7 +270,6 @@ class MetadataCodeDetailsTest(unittest.TestCase):
_SERVER_TRAILING_METADATA,
response_iterator_call.trailing_metadata()))
self.assertIs(grpc.StatusCode.OK, response_iterator_call.code())
self.assertEqual(_DETAILS, response_iterator_call.details())
def testSuccessfulStreamUnary(self):
self._servicer.set_details(_DETAILS)
@ -290,7 +288,6 @@ class MetadataCodeDetailsTest(unittest.TestCase):
test_common.metadata_transmitted(_SERVER_TRAILING_METADATA,
call.trailing_metadata()))
self.assertIs(grpc.StatusCode.OK, call.code())
self.assertEqual(_DETAILS, call.details())
def testSuccessfulStreamStream(self):
self._servicer.set_details(_DETAILS)
@ -312,7 +309,6 @@ class MetadataCodeDetailsTest(unittest.TestCase):
_SERVER_TRAILING_METADATA,
response_iterator_call.trailing_metadata()))
self.assertIs(grpc.StatusCode.OK, response_iterator_call.code())
self.assertEqual(_DETAILS, response_iterator_call.details())
def testAbortedUnaryUnary(self):
test_cases = zip(_ABORT_CODES, _EXPECTED_CLIENT_CODES,

@ -12,7 +12,6 @@
"unit.channel_ready_test.TestChannelReady",
"unit.channel_test.TestChannel",
"unit.close_channel_test.TestCloseChannel",
"unit.close_channel_test.TestOngoingCalls",
"unit.compression_test.TestCompression",
"unit.connectivity_test.TestConnectivityState",
"unit.done_callback_test.TestDoneCallback",

@ -16,12 +16,10 @@
import asyncio
import logging
import unittest
from weakref import WeakSet
import grpc
from grpc.experimental import aio
from grpc.experimental.aio import _base_call
from grpc.experimental.aio._channel import _OngoingCalls
from src.proto.grpc.testing import messages_pb2, test_pb2_grpc
from tests_aio.unit._test_base import AioTestBase
@ -31,47 +29,6 @@ _UNARY_CALL_METHOD_WITH_SLEEP = '/grpc.testing.TestService/UnaryCallWithSleep'
_LONG_TIMEOUT_THAT_SHOULD_NOT_EXPIRE = 60
class TestOngoingCalls(unittest.TestCase):
class FakeCall(_base_call.RpcContext):
def add_done_callback(self, callback):
self.callback = callback
def cancel(self):
raise NotImplementedError
def cancelled(self):
raise NotImplementedError
def done(self):
raise NotImplementedError
def time_remaining(self):
raise NotImplementedError
def test_trace_call(self):
ongoing_calls = _OngoingCalls()
self.assertEqual(ongoing_calls.size(), 0)
call = TestOngoingCalls.FakeCall()
ongoing_calls.trace_call(call)
self.assertEqual(ongoing_calls.size(), 1)
self.assertEqual(ongoing_calls.calls, WeakSet([call]))
call.callback(call)
self.assertEqual(ongoing_calls.size(), 0)
self.assertEqual(ongoing_calls.calls, WeakSet())
def test_deleted_call(self):
ongoing_calls = _OngoingCalls()
call = TestOngoingCalls.FakeCall()
ongoing_calls.trace_call(call)
del (call)
self.assertEqual(ongoing_calls.size(), 0)
class TestCloseChannel(AioTestBase):
async def setUp(self):
@ -114,15 +71,11 @@ class TestCloseChannel(AioTestBase):
calls = [stub.UnaryCall(messages_pb2.SimpleRequest()) for _ in range(2)]
self.assertEqual(channel._ongoing_calls.size(), 2)
await channel.close()
for call in calls:
self.assertTrue(call.cancelled())
self.assertEqual(channel._ongoing_calls.size(), 0)
async def test_close_unary_stream(self):
channel = aio.insecure_channel(self._server_target)
stub = test_pb2_grpc.TestServiceStub(channel)
@ -130,15 +83,11 @@ class TestCloseChannel(AioTestBase):
request = messages_pb2.StreamingOutputCallRequest()
calls = [stub.StreamingOutputCall(request) for _ in range(2)]
self.assertEqual(channel._ongoing_calls.size(), 2)
await channel.close()
for call in calls:
self.assertTrue(call.cancelled())
self.assertEqual(channel._ongoing_calls.size(), 0)
async def test_close_stream_unary(self):
channel = aio.insecure_channel(self._server_target)
stub = test_pb2_grpc.TestServiceStub(channel)
@ -150,35 +99,38 @@ class TestCloseChannel(AioTestBase):
for call in calls:
self.assertTrue(call.cancelled())
self.assertEqual(channel._ongoing_calls.size(), 0)
async def test_close_stream_stream(self):
channel = aio.insecure_channel(self._server_target)
stub = test_pb2_grpc.TestServiceStub(channel)
calls = [stub.FullDuplexCall() for _ in range(2)]
self.assertEqual(channel._ongoing_calls.size(), 2)
await channel.close()
for call in calls:
self.assertTrue(call.cancelled())
self.assertEqual(channel._ongoing_calls.size(), 0)
async def test_close_async_context(self):
async with aio.insecure_channel(self._server_target) as channel:
stub = test_pb2_grpc.TestServiceStub(channel)
calls = [
stub.UnaryCall(messages_pb2.SimpleRequest()) for _ in range(2)
]
self.assertEqual(channel._ongoing_calls.size(), 2)
for call in calls:
self.assertTrue(call.cancelled())
self.assertEqual(channel._ongoing_calls.size(), 0)
async def test_channel_isolation(self):
async with aio.insecure_channel(self._server_target) as channel1:
async with aio.insecure_channel(self._server_target) as channel2:
stub1 = test_pb2_grpc.TestServiceStub(channel1)
stub2 = test_pb2_grpc.TestServiceStub(channel2)
call1 = stub1.UnaryCall(messages_pb2.SimpleRequest())
call2 = stub2.UnaryCall(messages_pb2.SimpleRequest())
self.assertFalse(call1.cancelled())
self.assertTrue(call2.cancelled())
if __name__ == '__main__':

@ -26,12 +26,9 @@ out = {}
try:
out['libs'] = [{
'name':
'upb',
'build':
'all',
'language':
'c',
'name': 'upb',
'build': 'all',
'language': 'c',
'src': [
"third_party/upb/upb/decode.c",
"third_party/upb/upb/encode.c",
@ -50,6 +47,7 @@ try:
"third_party/upb/upb/table.int.h",
"third_party/upb/upb/upb.h",
],
'secure': False,
}]
except:
pass

@ -1493,6 +1493,7 @@
"language": "c",
"src": sorted(used_abseil_srcs),
"hdr": sorted(used_abseil_hdrs),
"secure": False,
})
%>
${makelib(grpc_abseil_lib)}
@ -1584,7 +1585,7 @@
$(CARES_DEP) \
$(ADDRESS_SORTING_DEP) \
$(UPB_DEP) \
$(LIBGRPC_ABSEIL_DEP) \
$(GRPC_ABSEIL_DEP) \
% endif
% endif
% if lib.language == 'c++':

@ -787,7 +787,7 @@ WARN_LOGFILE =
# Note: If this tag is empty the current directory is searched.
INPUT = ${
' \\\n'.join(sorted(
' \\\n'.join(sorted(set(
itertools.chain(
itertools.chain.from_iterable(
target.public_headers +
@ -798,7 +798,7 @@ INPUT = ${
glob.glob('doc/*.md'),
glob.glob('doc/%s/*.md' % docpackage),
[] if not internal else srcdoc)
))
)))
}
# This tag can be used to specify the character encoding of the source files

@ -784,13 +784,13 @@ WARN_LOGFILE =
# Note: If this tag is empty the current directory is searched.
INPUT = ${
' \\\n'.join(sorted(
' \\\n'.join(sorted(set(
itertools.chain(
glob.glob('src/objective-c/GRPCClient/*.h') if not internal else glob_recursive('src/objective-c/GRPCClient', '*.h'),
glob.glob('src/objective-c/ProtoRPC/*.h'),
glob.glob('src/objective-c/RxLibrary/*.h') if not internal else glob_recursive('src/objective-c/RxLibrary', '*.h'),
glob.glob('doc/*.md'),
srcdoc)))
srcdoc))))
}
# This tag can be used to specify the character encoding of the source files

@ -142,7 +142,10 @@ grpc_cc_test(
"gtest",
],
language = "C++",
tags = ["no_windows"], # LARGE_MACHINE is not configured for windows RBE
tags = [
"no_windows", # LARGE_MACHINE is not configured for windows RBE
"notap", # TODO(yashykt@): TSAN on TAP runs very slow. Fix it for TAP.
],
deps = [
"//:gpr",
"//:grpc",

@ -231,9 +231,10 @@ int main(int argc, char** argv) {
gpr_log(GPR_INFO, "Warning: overriding resolver setting of %s",
resolver.get());
}
if (gpr_stricmp(resolver_type, "native") == 0) {
if (resolver_type != nullptr && gpr_stricmp(resolver_type, "native") == 0) {
GPR_GLOBAL_CONFIG_SET(grpc_dns_resolver, "native");
} else if (gpr_stricmp(resolver_type, "ares") == 0) {
} else if (resolver_type != nullptr &&
gpr_stricmp(resolver_type, "ares") == 0) {
GPR_GLOBAL_CONFIG_SET(grpc_dns_resolver, "ares");
} else {
gpr_log(GPR_ERROR, "--resolver_type was not set to ares or native");

@ -353,9 +353,10 @@ int main(int argc, char** argv) {
gpr_log(GPR_INFO, "Warning: overriding resolver setting of %s",
resolver.get());
}
if (gpr_stricmp(resolver_type, "native") == 0) {
if (resolver_type != nullptr && gpr_stricmp(resolver_type, "native") == 0) {
GPR_GLOBAL_CONFIG_SET(grpc_dns_resolver, "native");
} else if (gpr_stricmp(resolver_type, "ares") == 0) {
} else if (resolver_type != nullptr &&
gpr_stricmp(resolver_type, "ares") == 0) {
#ifndef GRPC_UV
GPR_GLOBAL_CONFIG_SET(grpc_dns_resolver, "ares");
#endif

@ -982,6 +982,41 @@ static void test_sts_creds_success(void) {
gpr_free(actor_token_path);
}
static void test_sts_creds_token_file_not_found(void) {
grpc_core::ExecCtx exec_ctx;
grpc_auth_metadata_context auth_md_ctx = {test_service_url, test_method,
nullptr, nullptr};
grpc_sts_credentials_options valid_options = {
test_sts_endpoint_url, // sts_endpoint_url
"resource", // resource
"audience", // audience
"scope", // scope
"requested_token_type", // requested_token_type
"/some/completely/random/path", // subject_token_path
test_signed_jwt_token_type, // subject_token_type
"", // actor_token_path
"" // actor_token_type
};
grpc_call_credentials* creds =
grpc_sts_credentials_create(&valid_options, nullptr);
/* Check security level. */
GPR_ASSERT(creds->min_security_level() == GRPC_PRIVACY_AND_INTEGRITY);
request_metadata_state* state = make_request_metadata_state(
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
"Error occurred when fetching oauth2 token."),
nullptr, 0);
grpc_httpcli_set_override(httpcli_get_should_not_be_called,
httpcli_post_should_not_be_called);
run_request_metadata_test(creds, auth_md_ctx, state);
grpc_core::ExecCtx::Get()->Flush();
/* Cleanup. */
creds->Unref();
grpc_httpcli_set_override(nullptr, nullptr);
}
static void test_sts_creds_no_actor_token_success(void) {
grpc_core::ExecCtx exec_ctx;
expected_md emd[] = {
@ -1687,6 +1722,7 @@ int main(int argc, char** argv) {
test_sts_creds_no_actor_token_success();
test_sts_creds_load_token_failure();
test_sts_creds_http_failure();
test_sts_creds_token_file_not_found();
test_jwt_creds_lifetime();
test_jwt_creds_success();
test_jwt_creds_signing_failure();

@ -27,6 +27,7 @@
#include <grpc/support/log.h>
#include <grpc/support/sync.h>
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/security/credentials/credentials.h"
typedef struct {
@ -63,17 +64,14 @@ static void on_oauth2_response(void* arg, grpc_error* error) {
gpr_mu_unlock(request->mu);
}
static void destroy_after_shutdown(void* pollset, grpc_error* /*error*/) {
grpc_pollset_destroy(reinterpret_cast<grpc_pollset*>(pollset));
gpr_free(pollset);
}
static void do_nothing(void* /*arg*/, grpc_error* /*error*/) {}
char* grpc_test_fetch_oauth2_token_with_credentials(
grpc_call_credentials* creds) {
oauth2_request request;
request = {};
memset(&request, 0, sizeof(request));
grpc_core::ExecCtx exec_ctx;
grpc_closure destroy_after_shutdown_closure;
grpc_closure do_nothing_closure;
grpc_auth_metadata_context null_ctx = {"", "", nullptr, nullptr};
grpc_pollset* pollset =
@ -82,8 +80,8 @@ char* grpc_test_fetch_oauth2_token_with_credentials(
request.pops = grpc_polling_entity_create_from_pollset(pollset);
request.is_done = false;
GRPC_CLOSURE_INIT(&destroy_after_shutdown_closure, destroy_after_shutdown,
pollset, grpc_schedule_on_exec_ctx);
GRPC_CLOSURE_INIT(&do_nothing_closure, do_nothing, nullptr,
grpc_schedule_on_exec_ctx);
GRPC_CLOSURE_INIT(&request.closure, on_oauth2_response, &request,
grpc_schedule_on_exec_ctx);
@ -110,6 +108,9 @@ char* grpc_test_fetch_oauth2_token_with_credentials(
gpr_mu_unlock(request.mu);
grpc_pollset_shutdown(grpc_polling_entity_pollset(&request.pops),
&destroy_after_shutdown_closure);
&do_nothing_closure);
grpc_core::ExecCtx::Get()->Flush();
grpc_pollset_destroy(grpc_polling_entity_pollset(&request.pops));
gpr_free(pollset);
return request.token;
}

@ -227,3 +227,20 @@ grpc_cc_binary(
"//test/cpp/util:test_config",
],
)
grpc_cc_binary(
name = "http2_client",
srcs = [
"http2_client.cc",
"http2_client.h",
],
deps = [
"//:grpc++",
"//src/proto/grpc/testing:empty_proto",
"//src/proto/grpc/testing:messages_proto",
"//src/proto/grpc/testing:test_proto",
"//test/core/util:grpc_test_util",
"//test/cpp/util:test_config",
"//test/cpp/util:test_util",
],
)

@ -227,6 +227,7 @@ int main(int argc, char** argv) {
std::vector<std::thread> test_threads;
test_threads.reserve(FLAGS_num_channels);
for (int i = 0; i < FLAGS_num_channels; i++) {
test_threads.emplace_back(
std::thread(&RunTestLoop, FLAGS_server, duration_per_query));

@ -14,7 +14,7 @@
licenses(["notice"]) # Apache v2
load("//bazel:grpc_build_system.bzl", "grpc_cc_binary", "grpc_cc_library", "grpc_cc_test", "grpc_package")
load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_package")
grpc_package(name = "test/cpp/microbenchmarks")
@ -39,7 +39,6 @@ grpc_cc_library(
external_deps = [
"benchmark",
],
tags = ["no_windows"],
deps = [
"//:grpc++_unsecure",
"//src/proto/grpc/testing:echo_proto",
@ -48,75 +47,121 @@ grpc_cc_library(
],
)
grpc_cc_binary(
name = "bm_closure",
# Need a secure version of helpers to benchmark opencensus
grpc_cc_library(
name = "helpers_secure",
testonly = 1,
srcs = ["helpers.cc"],
hdrs = [
"fullstack_context_mutators.h",
"fullstack_fixtures.h",
"helpers.h",
],
external_deps = [
"benchmark",
],
deps = [
"//:grpc++",
"//src/proto/grpc/testing:echo_proto",
"//test/core/util:grpc_test_util",
"//test/cpp/util:test_config",
],
)
grpc_cc_test(
name = "bm_closure",
srcs = ["bm_closure.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_alarm",
testonly = 1,
srcs = ["bm_alarm.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_arena",
testonly = 1,
srcs = ["bm_arena.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
"notsan",
],
uses_polling = False,
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_byte_buffer",
testonly = 1,
srcs = ["bm_byte_buffer.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
uses_polling = False,
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_channel",
testonly = 1,
srcs = ["bm_channel.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
uses_polling = False,
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_call_create",
testonly = 1,
srcs = ["bm_call_create.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
uses_polling = False,
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_cq",
testonly = 1,
srcs = ["bm_cq.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_cq_multiple_threads",
testonly = 1,
srcs = ["bm_cq_multiple_threads.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
uses_polling = False,
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_error",
testonly = 1,
srcs = ["bm_error.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
uses_polling = False,
deps = [":helpers"],
)
@ -126,13 +171,16 @@ grpc_cc_library(
hdrs = [
"fullstack_streaming_ping_pong.h",
],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_fullstack_streaming_ping_pong",
testonly = 1,
size = "large",
srcs = [
"bm_fullstack_streaming_ping_pong.cc",
],
@ -152,9 +200,8 @@ grpc_cc_library(
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_fullstack_streaming_pump",
testonly = 1,
srcs = [
"bm_fullstack_streaming_pump.cc",
],
@ -165,14 +212,11 @@ grpc_cc_binary(
deps = [":fullstack_streaming_pump_h"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_fullstack_trickle",
testonly = 1,
size = "large",
srcs = ["bm_fullstack_trickle.cc"],
tags = [
"no_mac", # to emulate "excluded_poll_engines: poll"
"no_windows",
],
tags = ["manual"],
deps = [":helpers"],
)
@ -185,9 +229,8 @@ grpc_cc_library(
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_fullstack_unary_ping_pong",
testonly = 1,
srcs = [
"bm_fullstack_unary_ping_pong.cc",
],
@ -198,47 +241,56 @@ grpc_cc_binary(
deps = [":fullstack_unary_ping_pong_h"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_metadata",
testonly = 1,
srcs = ["bm_metadata.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
uses_polling = False,
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_chttp2_hpack",
testonly = 1,
srcs = ["bm_chttp2_hpack.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
uses_polling = False,
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_opencensus_plugin",
testonly = 1,
srcs = ["bm_opencensus_plugin.cc"],
language = "C++",
deps = [
":helpers",
":helpers_secure",
"//:grpc_opencensus_plugin",
"//src/proto/grpc/testing:echo_proto",
],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_timer",
testonly = 1,
srcs = ["bm_timer.cc"],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
uses_polling = False,
deps = [":helpers"],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_threadpool",
testonly = 1,
size = "large",
srcs = ["bm_threadpool.cc"],
tags = ["no_windows"],
tags = ["manual"],
uses_polling = False,
deps = [":helpers"],
)
@ -253,7 +305,7 @@ grpc_cc_library(
deps = [
":helpers",
"//src/proto/grpc/testing:echo_proto",
"//test/cpp/util:test_util",
"//test/cpp/util:test_util_unsecure",
],
)
@ -269,13 +321,15 @@ grpc_cc_library(
],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_callback_unary_ping_pong",
testonly = 1,
srcs = [
"bm_callback_unary_ping_pong.cc",
],
tags = ["no_windows"],
tags = [
"no_mac",
"no_windows",
],
deps = [":callback_unary_ping_pong_h"],
)
@ -291,12 +345,15 @@ grpc_cc_library(
],
)
grpc_cc_binary(
grpc_cc_test(
name = "bm_callback_streaming_ping_pong",
testonly = 1,
size = "large",
srcs = [
"bm_callback_streaming_ping_pong.cc",
],
tags = ["no_windows"],
tags = [
"no_mac", # to emulate "excluded_poll_engines: poll"
"no_windows",
],
deps = [":callback_streaming_ping_pong_h"],
)

@ -513,7 +513,8 @@ static void BM_IsolatedFilter(benchmark::State& state) {
static_cast<grpc_channel_stack*>(gpr_zalloc(channel_size));
GPR_ASSERT(GRPC_LOG_IF_ERROR(
"channel_stack_init",
grpc_channel_stack_init(1, FilterDestroy, channel_stack, &filters[0],
grpc_channel_stack_init(1, FilterDestroy, channel_stack,
filters.size() == 0 ? nullptr : &filters[0],
filters.size(), &channel_args,
fixture.flags & REQUIRES_TRANSPORT
? &dummy_transport::dummy_transport

@ -22,7 +22,8 @@
#include "absl/base/call_once.h"
#include "absl/strings/str_cat.h"
#include "include/grpc++/grpc++.h"
#include "include/grpc/grpc.h"
#include "include/grpcpp/grpcpp.h"
#include "include/grpcpp/opencensus.h"
#include "opencensus/stats/stats.h"
#include "src/cpp/ext/filters/census/grpc_plugin.h"
@ -100,6 +101,13 @@ static void BM_E2eLatencyCensusDisabled(benchmark::State& state) {
BENCHMARK(BM_E2eLatencyCensusDisabled);
static void BM_E2eLatencyCensusEnabled(benchmark::State& state) {
// Avoid a data race between registering plugin and shutdown of previous
// test (order-dependent) by doing an init/shutdown so that any previous
// shutdowns are fully complete first.
grpc_init();
grpc_shutdown_blocking();
// Now start the test by registering the plugin (once in the execution)
RegisterOnce();
// This we can safely repeat, and doing so clears accumulated data to avoid
// initialization costs varying between runs.

@ -81,7 +81,7 @@ static void BM_TimerBatch(benchmark::State& state) {
grpc_timer_init(&timer_closure->timer, deadline, &timer_closure->closure);
}
if (check) {
grpc_millis next;
grpc_millis next = GRPC_MILLIS_INF_FUTURE;
grpc_timer_check(&next);
}
for (grpc_millis deadline = start; deadline != end; deadline += increment) {

@ -33,8 +33,7 @@ then
fi
VERSION=1.0.0
echo "INFO: Running bazel wrapper (see //tools/bazel for details), bazel version $VERSION will be used instead of system-wide bazel installation."
echo "INFO: Running bazel wrapper (see //tools/bazel for details), bazel version $VERSION will be used instead of system-wide bazel installation." >&2
BASEURL=https://github.com/bazelbuild/bazel/releases/download/
pushd "$(dirname "$0")" >/dev/null
@ -48,7 +47,7 @@ case $(uname -sm) in
suffix=darwin-x86_64
;;
*)
echo "Unsupported architecture: $(uname -sm)"
echo "Unsupported architecture: $(uname -sm)" >&2
exit 1
;;
esac

@ -61,7 +61,7 @@ GCC-like stuff, but you may end up having a bad time.
::
$ export REPO_ROOT=grpc # REPO_ROOT can be any directory of your choice
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc $REPO_ROOT
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc $REPO_ROOT
$ cd $REPO_ROOT
$ git submodule update --init

@ -27,11 +27,11 @@ RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A170311380
RUN \curl -sSL https://get.rvm.io | bash -s stable
# Install Ruby 2.4
RUN /bin/bash -l -c "rvm install ruby-2.4.5"
RUN /bin/bash -l -c "rvm use --default ruby-2.4.5"
RUN /bin/bash -l -c "rvm install ruby-2.4.9"
RUN /bin/bash -l -c "rvm use --default ruby-2.4.9"
RUN /bin/bash -l -c "echo 'gem: --no-document' > ~/.gemrc"
RUN /bin/bash -l -c "echo 'export PATH=/usr/local/rvm/bin:$PATH' >> ~/.bashrc"
RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.4.5' >> ~/.bashrc"
RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.4.9' >> ~/.bashrc"
RUN /bin/bash -l -c "gem install bundler -v 1.17.3 --no-document"
RUN mkdir /var/local/jenkins

@ -27,11 +27,11 @@ RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A170311380
RUN \curl -sSL https://get.rvm.io | bash -s stable
# Install Ruby 2.5
RUN /bin/bash -l -c "rvm install ruby-2.5.3"
RUN /bin/bash -l -c "rvm use --default ruby-2.5.3"
RUN /bin/bash -l -c "rvm install ruby-2.5.7"
RUN /bin/bash -l -c "rvm use --default ruby-2.5.7"
RUN /bin/bash -l -c "echo 'gem: --no-document' > ~/.gemrc"
RUN /bin/bash -l -c "echo 'export PATH=/usr/local/rvm/bin:$PATH' >> ~/.bashrc"
RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.5.3' >> ~/.bashrc"
RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.5.7' >> ~/.bashrc"
RUN /bin/bash -l -c "gem install bundler -v 1.17.3 --no-document"
RUN mkdir /var/local/jenkins

@ -27,11 +27,11 @@ RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A170311380
RUN \curl -sSL https://get.rvm.io | bash -s stable
# Install Ruby 2.6
RUN /bin/bash -l -c "rvm install ruby-2.6.0"
RUN /bin/bash -l -c "rvm use --default ruby-2.6.0"
RUN /bin/bash -l -c "rvm install ruby-2.6.5"
RUN /bin/bash -l -c "rvm use --default ruby-2.6.5"
RUN /bin/bash -l -c "echo 'gem: --no-document' > ~/.gemrc"
RUN /bin/bash -l -c "echo 'export PATH=/usr/local/rvm/bin:$PATH' >> ~/.bashrc"
RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.6.0' >> ~/.bashrc"
RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.6.5' >> ~/.bashrc"
RUN /bin/bash -l -c "gem install bundler --no-document"
RUN mkdir /var/local/jenkins

@ -0,0 +1,40 @@
# Copyright 2020 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
FROM debian:jessie
# Install Git and basic packages.
RUN apt-get update && apt-get install -y \
curl \
gcc && apt-get clean
#==================
# Ruby dependencies
# Install rvm
RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
RUN \curl -sSL https://get.rvm.io | bash -s stable
# Install Ruby 2.7
RUN /bin/bash -l -c "rvm install ruby-2.7.0"
RUN /bin/bash -l -c "rvm use --default ruby-2.7.0"
RUN /bin/bash -l -c "echo 'gem: --no-document' > ~/.gemrc"
RUN /bin/bash -l -c "echo 'export PATH=/usr/local/rvm/bin:$PATH' >> ~/.bashrc"
RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.7.0' >> ~/.bashrc"
RUN /bin/bash -l -c "gem install bundler --no-document"
RUN mkdir /var/local/jenkins
# Define the default command.
CMD ["bash"]

@ -826,7 +826,6 @@ include/grpc++/impl/codegen/completion_queue_tag.h \
include/grpc++/impl/codegen/config.h \
include/grpc++/impl/codegen/config_protobuf.h \
include/grpc++/impl/codegen/core_codegen.h \
include/grpc++/impl/codegen/core_codegen.h \
include/grpc++/impl/codegen/core_codegen_interface.h \
include/grpc++/impl/codegen/create_auth_context.h \
include/grpc++/impl/codegen/grpc_library.h \
@ -975,7 +974,6 @@ include/grpcpp/impl/codegen/completion_queue_tag.h \
include/grpcpp/impl/codegen/config.h \
include/grpcpp/impl/codegen/config_protobuf.h \
include/grpcpp/impl/codegen/core_codegen.h \
include/grpcpp/impl/codegen/core_codegen.h \
include/grpcpp/impl/codegen/core_codegen_interface.h \
include/grpcpp/impl/codegen/create_auth_context.h \
include/grpcpp/impl/codegen/delegating_channel.h \

@ -816,43 +816,28 @@ include/grpc/grpc_posix.h \
include/grpc/grpc_security.h \
include/grpc/grpc_security_constants.h \
include/grpc/impl/codegen/atm.h \
include/grpc/impl/codegen/atm.h \
include/grpc/impl/codegen/atm_gcc_atomic.h \
include/grpc/impl/codegen/atm_gcc_atomic.h \
include/grpc/impl/codegen/atm_gcc_sync.h \
include/grpc/impl/codegen/atm_gcc_sync.h \
include/grpc/impl/codegen/atm_windows.h \
include/grpc/impl/codegen/atm_windows.h \
include/grpc/impl/codegen/byte_buffer.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/fork.h \
include/grpc/impl/codegen/fork.h \
include/grpc/impl/codegen/gpr_slice.h \
include/grpc/impl/codegen/gpr_slice.h \
include/grpc/impl/codegen/gpr_types.h \
include/grpc/impl/codegen/gpr_types.h \
include/grpc/impl/codegen/grpc_types.h \
include/grpc/impl/codegen/log.h \
include/grpc/impl/codegen/log.h \
include/grpc/impl/codegen/port_platform.h \
include/grpc/impl/codegen/port_platform.h \
include/grpc/impl/codegen/propagation_bits.h \
include/grpc/impl/codegen/slice.h \
include/grpc/impl/codegen/status.h \
include/grpc/impl/codegen/sync.h \
include/grpc/impl/codegen/sync.h \
include/grpc/impl/codegen/sync_abseil.h \
include/grpc/impl/codegen/sync_abseil.h \
include/grpc/impl/codegen/sync_custom.h \
include/grpc/impl/codegen/sync_custom.h \
include/grpc/impl/codegen/sync_generic.h \
include/grpc/impl/codegen/sync_generic.h \
include/grpc/impl/codegen/sync_posix.h \
include/grpc/impl/codegen/sync_posix.h \
include/grpc/impl/codegen/sync_windows.h \
include/grpc/impl/codegen/sync_windows.h \
include/grpc/load_reporting.h \
include/grpc/slice.h \
include/grpc/slice_buffer.h \

@ -816,43 +816,28 @@ include/grpc/grpc_posix.h \
include/grpc/grpc_security.h \
include/grpc/grpc_security_constants.h \
include/grpc/impl/codegen/atm.h \
include/grpc/impl/codegen/atm.h \
include/grpc/impl/codegen/atm_gcc_atomic.h \
include/grpc/impl/codegen/atm_gcc_atomic.h \
include/grpc/impl/codegen/atm_gcc_sync.h \
include/grpc/impl/codegen/atm_gcc_sync.h \
include/grpc/impl/codegen/atm_windows.h \
include/grpc/impl/codegen/atm_windows.h \
include/grpc/impl/codegen/byte_buffer.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/fork.h \
include/grpc/impl/codegen/fork.h \
include/grpc/impl/codegen/gpr_slice.h \
include/grpc/impl/codegen/gpr_slice.h \
include/grpc/impl/codegen/gpr_types.h \
include/grpc/impl/codegen/gpr_types.h \
include/grpc/impl/codegen/grpc_types.h \
include/grpc/impl/codegen/log.h \
include/grpc/impl/codegen/log.h \
include/grpc/impl/codegen/port_platform.h \
include/grpc/impl/codegen/port_platform.h \
include/grpc/impl/codegen/propagation_bits.h \
include/grpc/impl/codegen/slice.h \
include/grpc/impl/codegen/status.h \
include/grpc/impl/codegen/sync.h \
include/grpc/impl/codegen/sync.h \
include/grpc/impl/codegen/sync_abseil.h \
include/grpc/impl/codegen/sync_abseil.h \
include/grpc/impl/codegen/sync_custom.h \
include/grpc/impl/codegen/sync_custom.h \
include/grpc/impl/codegen/sync_generic.h \
include/grpc/impl/codegen/sync_generic.h \
include/grpc/impl/codegen/sync_posix.h \
include/grpc/impl/codegen/sync_posix.h \
include/grpc/impl/codegen/sync_windows.h \
include/grpc/impl/codegen/sync_windows.h \
include/grpc/load_reporting.h \
include/grpc/slice.h \
include/grpc/slice_buffer.h \

@ -55,7 +55,7 @@ build:asan --copt=-gmlt
# use double the default value for "moderate" and "long" timeout as sanitizer
# tests tend to be slower
build:asan --test_timeout=60,600,1800,3600
build:asan --test_tag_filters=-no_linux,-qps_json_driver
build:asan --test_tag_filters=-no_linux,-noasan,-qps_json_driver
# memory sanitizer: most settings are already in %workspace%/.bazelrc
# we only need a few additional ones that are Foundry specific
@ -78,7 +78,7 @@ build:tsan --copt=-gmlt
# use double the default value for "moderate" and "long" timeout as sanitizer
# tests tend to be slower
build:tsan --test_timeout=60,600,1800,3600
build:tsan --test_tag_filters=-no_linux,-qps_json_driver
build:tsan --test_tag_filters=-no_linux,-notsan,-qps_json_driver
build:tsan --extra_execution_platforms=@rbe_default//config:platform
# undefined behavior sanitizer: most settings are already in %workspace%/.bazelrc

@ -340,6 +340,7 @@ def targets():
RubyDistribTest('linux', 'x64', 'jessie', ruby_version='ruby_2_4'),
RubyDistribTest('linux', 'x64', 'jessie', ruby_version='ruby_2_5'),
RubyDistribTest('linux', 'x64', 'jessie', ruby_version='ruby_2_6'),
# RubyDistribTest('linux', 'x64', 'jessie', ruby_version='ruby_2_7'),
RubyDistribTest('linux', 'x64', 'centos6'),
RubyDistribTest('linux', 'x64', 'centos7'),
RubyDistribTest('linux', 'x64', 'fedora23'),

@ -51,10 +51,8 @@ expected_files = [
"include/grpc++/impl/rpc_service_method.h",
"include/grpc++/impl/method_handler_impl.h",
"include/grpc++/impl/server_builder_plugin.h",
"include/grpc++/impl/sync_cxx11.h",
"include/grpc++/impl/server_initializer.h",
"include/grpc++/impl/serialization_traits.h",
"include/grpc++/impl/sync_no_cxx11.h",
"include/grpc++/impl/codegen/sync_stream.h",
"include/grpc++/impl/codegen/channel_interface.h",
"include/grpc++/impl/codegen/config_protobuf.h",

Loading…
Cancel
Save