Merge remote-tracking branch 'upstream/master' into isolate-call-implementation-2

pull/19704/head
Muxi Yan 6 years ago
commit 43b17bff17
  1. 23
      .clang_complete
  2. 333
      BUILD
  3. 139
      BUILD.gn
  4. 4638
      CMakeLists.txt
  5. 288
      Makefile
  6. 3
      PYTHON-MANIFEST.in
  7. 40
      WORKSPACE
  8. 5
      bazel/grpc_build_system.bzl
  9. 14
      bazel/grpc_deps.bzl
  10. 69
      bazel/grpc_python_deps.bzl
  11. 60
      bazel/protobuf.bzl
  12. 246
      bazel/python_rules.bzl
  13. 2
      bazel/test/python_test_repo/.gitignore
  14. 62
      bazel/test/python_test_repo/BUILD
  15. 5
      bazel/test/python_test_repo/README.md
  16. 17
      bazel/test/python_test_repo/WORKSPACE
  17. 43
      bazel/test/python_test_repo/helloworld.proto
  18. 73
      bazel/test/python_test_repo/helloworld.py
  19. 1
      bazel/test/python_test_repo/tools/bazel
  20. 181
      build.yaml
  21. 18
      cmake/upb.cmake
  22. 77
      config.m4
  23. 98
      config.w32
  24. 15
      examples/BUILD
  25. 9
      examples/python/auth/BUILD.bazel
  26. 2
      examples/python/auth/customized_auth_client.py
  27. 13
      examples/python/auth/customized_auth_server.py
  28. 6
      examples/python/auth/test/_auth_example_test.py
  29. 24
      examples/python/cancellation/BUILD.bazel
  30. 16
      examples/python/cancellation/server.py
  31. 6
      examples/python/compression/BUILD.bazel
  32. 8
      examples/python/compression/server.py
  33. 11
      examples/python/debug/BUILD.bazel
  34. 8
      examples/python/debug/debug_server.py
  35. 10
      examples/python/debug/get_stats.py
  36. 6
      examples/python/errors/BUILD.bazel
  37. 9
      examples/python/errors/server.py
  38. 9
      examples/python/helloworld/greeter_server.py
  39. 9
      examples/python/helloworld/greeter_server_with_reflection.py
  40. 9
      examples/python/interceptors/headers/greeter_server.py
  41. 9
      examples/python/metadata/metadata_server.py
  42. 8
      examples/python/multiplex/multiplex_server.py
  43. 18
      examples/python/multiprocessing/BUILD
  44. 8
      examples/python/route_guide/route_guide_server.py
  45. 3
      examples/python/wait_for_ready/BUILD.bazel
  46. 2
      examples/python/wait_for_ready/wait_for_ready_example.py
  47. 72
      gRPC-C++.podspec
  48. 177
      gRPC-Core.podspec
  49. 1
      gRPC-ProtoRPC.podspec
  50. 1
      gRPC-RxLibrary.podspec
  51. 1
      gRPC.podspec
  52. 109
      grpc.gemspec
  53. 202
      grpc.gyp
  54. 17
      include/grpc/impl/codegen/port_platform.h
  55. 109
      package.xml
  56. 21
      setup.py
  57. 18
      src/core/ext/filters/client_channel/channel_connectivity.cc
  58. 23
      src/core/ext/filters/client_channel/health/health.pb.c
  59. 73
      src/core/ext/filters/client_channel/health/health.pb.h
  60. 48
      src/core/ext/filters/client_channel/health/health_check_client.cc
  61. 73
      src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc
  62. 345
      src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc
  63. 55
      src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h
  64. 19
      src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c
  65. 54
      src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h
  66. 19
      src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c
  67. 54
      src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h
  68. 89
      src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c
  69. 164
      src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h
  70. 438
      src/core/ext/filters/client_channel/lb_policy/xds/xds.cc
  71. 463
      src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc
  72. 143
      src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h
  73. 4
      src/core/ext/filters/client_channel/server_address.cc
  74. 2
      src/core/ext/filters/client_channel/server_address.h
  75. 11
      src/core/ext/transport/chttp2/transport/chttp2_transport.cc
  76. 1
      src/core/ext/transport/chttp2/transport/chttp2_transport.h
  77. 7
      src/core/ext/transport/chttp2/transport/hpack_parser.cc
  78. 4
      src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c
  79. 8
      src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h
  80. 4
      src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c
  81. 8
      src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h
  82. 4
      src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c
  83. 8
      src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h
  84. 4
      src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c
  85. 8
      src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h
  86. 4
      src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c
  87. 8
      src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h
  88. 2
      src/core/lib/channel/channel_args.cc
  89. 110
      src/core/lib/channel/channelz.cc
  90. 38
      src/core/lib/channel/channelz.h
  91. 143
      src/core/lib/gpr/time_precise.cc
  92. 36
      src/core/lib/gpr/time_precise.h
  93. 24
      src/core/lib/gprpp/inlined_vector.h
  94. 79
      src/core/lib/iomgr/ev_epollex_linux.cc
  95. 4
      src/core/lib/iomgr/sockaddr_utils.cc
  96. 36
      src/core/lib/iomgr/tcp_posix.cc
  97. 26
      src/core/lib/surface/completion_queue.cc
  98. 10
      src/core/lib/surface/server.cc
  99. 607
      src/core/lib/transport/static_metadata.cc
  100. 149
      src/core/lib/transport/static_metadata.h
  101. Some files were not shown because too many files have changed in this diff Show More

@ -1,18 +1,19 @@
-Wall -Wall
-Wc++-compat -Wc++-compat
-Ithird_party/googletest/include
-Ithird_party/googletest
-Iinclude
-Igens
-I. -I.
-Ithird_party/boringssl/include -Igens
-Ithird_party/benchmark/include -Iinclude
-Ithird_party/zlib -Isrc/core/ext/upb-generated
-Ithird_party/protobuf/src
-Ithird_party/abseil-cpp -Ithird_party/abseil-cpp
-Ithird_party/cares/cares -Ithird_party/benchmark/include
-Ithird_party/boringssl/include
-Ithird_party/cares -Ithird_party/cares
-Ithird_party/googletest/googletest/include -Ithird_party/cares/cares
-Ithird_party/googletest
-Ithird_party/googletest/googlemock/include -Ithird_party/googletest/googlemock/include
-Ithird_party/googletest/googletest/include
-Ithird_party/googletest/include
-Ithird_party/nanopb -Ithird_party/nanopb
-Ithird_party/protobuf/src
-Ithird_party/upb
-Ithird_party/zlib

333
BUILD

@ -342,7 +342,6 @@ grpc_cc_library(
], ],
) )
grpc_cc_library( grpc_cc_library(
name = "grpc++_public_hdrs", name = "grpc++_public_hdrs",
hdrs = GRPCXX_PUBLIC_HDRS, hdrs = GRPCXX_PUBLIC_HDRS,
@ -1065,7 +1064,7 @@ grpc_cc_library(
"grpc_base", "grpc_base",
"grpc_client_authority_filter", "grpc_client_authority_filter",
"grpc_deadline_filter", "grpc_deadline_filter",
"health_proto", "grpc_health_upb",
"inlined_vector", "inlined_vector",
"orphanable", "orphanable",
"ref_counted", "ref_counted",
@ -1193,38 +1192,6 @@ grpc_cc_library(
], ],
) )
grpc_cc_library(
name = "health_proto",
srcs = [
"src/core/ext/filters/client_channel/health/health.pb.c",
],
hdrs = [
"src/core/ext/filters/client_channel/health/health.pb.h",
],
external_deps = [
"nanopb",
],
language = "c++",
)
grpc_cc_library(
name = "grpclb_proto",
srcs = [
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c",
],
hdrs = [
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h",
],
external_deps = [
"nanopb",
],
language = "c++",
)
grpc_cc_library( grpc_cc_library(
name = "grpc_lb_policy_grpclb", name = "grpc_lb_policy_grpclb",
srcs = [ srcs = [
@ -1241,15 +1208,12 @@ grpc_cc_library(
"src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h",
"src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h",
], ],
external_deps = [
"nanopb",
],
language = "c++", language = "c++",
deps = [ deps = [
"grpc_base", "grpc_base",
"grpc_client_channel", "grpc_client_channel",
"grpc_lb_upb",
"grpc_resolver_fake", "grpc_resolver_fake",
"grpclb_proto",
], ],
) )
@ -1269,16 +1233,13 @@ grpc_cc_library(
"src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h",
"src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h",
], ],
external_deps = [
"nanopb",
],
language = "c++", language = "c++",
deps = [ deps = [
"grpc_base", "grpc_base",
"grpc_client_channel", "grpc_client_channel",
"grpc_lb_upb",
"grpc_resolver_fake", "grpc_resolver_fake",
"grpc_secure", "grpc_secure",
"grpclb_proto",
], ],
) )
@ -1296,15 +1257,13 @@ grpc_cc_library(
"src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h", "src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h",
"src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h", "src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h",
], ],
external_deps = [
"nanopb",
],
language = "c++", language = "c++",
deps = [ deps = [
"envoy_ads_upb",
"grpc_base", "grpc_base",
"grpc_client_channel", "grpc_client_channel",
"grpc_lb_upb",
"grpc_resolver_fake", "grpc_resolver_fake",
"grpclb_proto",
], ],
) )
@ -1322,16 +1281,14 @@ grpc_cc_library(
"src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h", "src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h",
"src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h", "src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h",
], ],
external_deps = [
"nanopb",
],
language = "c++", language = "c++",
deps = [ deps = [
"envoy_ads_upb",
"grpc_base", "grpc_base",
"grpc_client_channel", "grpc_client_channel",
"grpc_lb_upb",
"grpc_resolver_fake", "grpc_resolver_fake",
"grpc_secure", "grpc_secure",
"grpclb_proto",
], ],
) )
@ -1898,24 +1855,6 @@ grpc_cc_library(
], ],
) )
grpc_cc_library(
name = "alts_proto",
srcs = [
"src/core/tsi/alts/handshaker/altscontext.pb.c",
"src/core/tsi/alts/handshaker/handshaker.pb.c",
"src/core/tsi/alts/handshaker/transport_security_common.pb.c",
],
hdrs = [
"src/core/tsi/alts/handshaker/altscontext.pb.h",
"src/core/tsi/alts/handshaker/handshaker.pb.h",
"src/core/tsi/alts/handshaker/transport_security_common.pb.h",
],
external_deps = [
"nanopb",
],
language = "c++",
)
grpc_cc_library( grpc_cc_library(
name = "alts_util", name = "alts_util",
srcs = [ srcs = [
@ -1926,24 +1865,17 @@ grpc_cc_library(
"src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc", "src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc",
"src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc", "src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc",
"src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc", "src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc",
"src/core/tsi/alts/handshaker/transport_security_common_api.cc", "src/core/tsi/alts/handshaker/transport_security_common_api.cc",
], ],
hdrs = [ hdrs = [
"src/core/lib/security/credentials/alts/check_gcp_environment.h", "src/core/lib/security/credentials/alts/check_gcp_environment.h",
"src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h", "src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h",
"src/core/tsi/alts/handshaker/transport_security_common_api.h", "src/core/tsi/alts/handshaker/transport_security_common_api.h",
], ],
external_deps = [
"nanopb",
],
language = "c++", language = "c++",
public_hdrs = GRPC_SECURE_PUBLIC_HDRS, public_hdrs = GRPC_SECURE_PUBLIC_HDRS,
deps = [ deps = [
"alts_proto", "alts_upb",
"gpr", "gpr",
"grpc_base", "grpc_base",
], ],
@ -2002,7 +1934,7 @@ grpc_cc_library(
deps = [ deps = [
"grpc", "grpc",
"grpc++_codegen_base", "grpc++_codegen_base",
"health_proto", "grpc_health_upb",
], ],
) )
@ -2014,8 +1946,8 @@ grpc_cc_library(
public_hdrs = GRPCXX_PUBLIC_HDRS, public_hdrs = GRPCXX_PUBLIC_HDRS,
deps = [ deps = [
"grpc++_codegen_base", "grpc++_codegen_base",
"grpc_health_upb",
"grpc_unsecure", "grpc_unsecure",
"health_proto",
], ],
) )
@ -2077,7 +2009,7 @@ grpc_cc_library(
"include/grpcpp/impl/codegen/config.h", "include/grpcpp/impl/codegen/config.h",
"include/grpcpp/impl/codegen/core_codegen_interface.h", "include/grpcpp/impl/codegen/core_codegen_interface.h",
"include/grpcpp/impl/codegen/create_auth_context.h", "include/grpcpp/impl/codegen/create_auth_context.h",
"include/grpcpp/impl/codegen/delegating_channel.h", "include/grpcpp/impl/codegen/delegating_channel.h",
"include/grpcpp/impl/codegen/grpc_library.h", "include/grpcpp/impl/codegen/grpc_library.h",
"include/grpcpp/impl/codegen/intercepted_channel.h", "include/grpcpp/impl/codegen/intercepted_channel.h",
"include/grpcpp/impl/codegen/interceptor.h", "include/grpcpp/impl/codegen/interceptor.h",
@ -2277,60 +2209,253 @@ grpc_cc_library(
], ],
) )
grpc_upb_proto_library( # Once upb code-gen issue is resolved, use the targets commented below to replace the ones using
name = "upb_load_report", # upb-generated files.
deps = ["@envoy_api//envoy/api/v2/endpoint:load_report_export"]
)
grpc_upb_proto_library( # grpc_upb_proto_library(
name = "upb_lrs", # name = "upb_load_report",
deps = ["@envoy_api//envoy/service/load_stats/v2:lrs_export"] # deps = ["@envoy_api//envoy/api/v2/endpoint:load_report_export"],
) # )
#
# grpc_upb_proto_library(
# name = "upb_lrs",
# deps = ["@envoy_api//envoy/service/load_stats/v2:lrs_export"],
# )
#
# grpc_upb_proto_library(
# name = "upb_cds",
# deps = ["@envoy_api//envoy/api/v2:cds_export"],
# )
# grpc_cc_library(
# name = "envoy_lrs_upb",
# external_deps = [
# "upb_lib",
# ],
# language = "c++",
# tags = ["no_windows"],
# deps = [
# ":upb_load_report",
# ":upb_lrs",
# ],
# )
# grpc_cc_library(
# name = "envoy_ads_upb",
# external_deps = [
# "upb_lib",
# ],
# language = "c++",
# tags = ["no_windows"],
# deps = [
# ":upb_cds",
# ],
# )
grpc_upb_proto_library( grpc_cc_library(
name = "upb_cds", name = "envoy_ads_upb",
deps = ["@envoy_api//envoy/api/v2:cds_export"] srcs = [
"src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/cds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/eds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c",
"src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c",
"src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c",
],
hdrs = [
"src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/cds.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/eds.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h",
"src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h",
"src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h",
],
external_deps = [
"upb_lib",
],
language = "c++",
deps = [
":envoy_core_upb",
":envoy_type_upb",
":google_api_upb",
":proto_gen_validate_upb",
],
) )
#TODO: Get this into build.yaml once we start using it.
grpc_cc_library( grpc_cc_library(
name = "envoy_lrs_upb", name = "envoy_core_upb",
srcs = [
"src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c",
],
hdrs = [
"src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h",
],
external_deps = [
"upb_lib",
],
language = "c++", language = "c++",
deps = [
":envoy_type_upb",
":google_api_upb",
":proto_gen_validate_upb",
],
)
grpc_cc_library(
name = "envoy_type_upb",
srcs = [
"src/core/ext/upb-generated/envoy/type/percent.upb.c",
"src/core/ext/upb-generated/envoy/type/range.upb.c",
],
hdrs = [
"src/core/ext/upb-generated/envoy/type/percent.upb.h",
"src/core/ext/upb-generated/envoy/type/range.upb.h",
],
external_deps = [ external_deps = [
"upb_lib", "upb_lib",
], ],
language = "c++",
deps = [ deps = [
":upb_load_report", ":google_api_upb",
":upb_lrs" ":proto_gen_validate_upb",
], ],
tags = ["no_windows"],
) )
grpc_cc_library( grpc_cc_library(
name = "envoy_ads_upb", name = "proto_gen_validate_upb",
srcs = [
"src/core/ext/upb-generated/gogoproto/gogo.upb.c",
"src/core/ext/upb-generated/validate/validate.upb.c",
],
hdrs = [
"src/core/ext/upb-generated/gogoproto/gogo.upb.h",
"src/core/ext/upb-generated/validate/validate.upb.h",
],
external_deps = [ external_deps = [
"upb_lib", "upb_lib",
], ],
language = "c++", language = "c++",
deps = [ deps = [
":upb_cds", ":google_api_upb",
], ],
tags = ["no_windows"],
) )
grpc_upb_proto_library( # Once upb code-gen issue is resolved, replace grpc_health_upb with this.
# grpc_upb_proto_library(
# name = "grpc_health_upb",
# deps = ["//src/proto/grpc/health/v1:health_proto_descriptor"],
# )
grpc_cc_library(
name = "grpc_health_upb", name = "grpc_health_upb",
deps = ["//src/proto/grpc/health/v1:health_proto_descriptor"] srcs = [
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c",
],
hdrs = [
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h",
],
external_deps = [
"upb_lib",
],
language = "c++",
) )
grpc_upb_proto_library( # Once upb code-gen issue is resolved, remove this.
grpc_cc_library(
name = "google_api_upb",
srcs = [
"src/core/ext/upb-generated/google/api/annotations.upb.c",
"src/core/ext/upb-generated/google/api/http.upb.c",
"src/core/ext/upb-generated/google/protobuf/any.upb.c",
"src/core/ext/upb-generated/google/protobuf/descriptor.upb.c",
"src/core/ext/upb-generated/google/protobuf/duration.upb.c",
"src/core/ext/upb-generated/google/protobuf/empty.upb.c",
"src/core/ext/upb-generated/google/protobuf/struct.upb.c",
"src/core/ext/upb-generated/google/protobuf/timestamp.upb.c",
"src/core/ext/upb-generated/google/protobuf/wrappers.upb.c",
"src/core/ext/upb-generated/google/rpc/status.upb.c",
],
hdrs = [
"src/core/ext/upb-generated/google/api/annotations.upb.h",
"src/core/ext/upb-generated/google/api/http.upb.h",
"src/core/ext/upb-generated/google/protobuf/any.upb.h",
"src/core/ext/upb-generated/google/protobuf/descriptor.upb.h",
"src/core/ext/upb-generated/google/protobuf/duration.upb.h",
"src/core/ext/upb-generated/google/protobuf/empty.upb.h",
"src/core/ext/upb-generated/google/protobuf/struct.upb.h",
"src/core/ext/upb-generated/google/protobuf/timestamp.upb.h",
"src/core/ext/upb-generated/google/protobuf/wrappers.upb.h",
"src/core/ext/upb-generated/google/rpc/status.upb.h",
],
external_deps = [
"upb_lib",
],
language = "c++",
)
# Once upb code-gen issue is resolved, replace grpc_lb_upb with this.
# grpc_upb_proto_library(
# name = "grpc_lb_upb",
# deps = ["//src/proto/grpc/lb/v1:load_balancer_proto_descriptor"],
# )
grpc_cc_library(
name = "grpc_lb_upb", name = "grpc_lb_upb",
deps = ["//src/proto/grpc/lb/v1:load_balancer_proto_descriptor"] srcs = [
"src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c",
],
hdrs = [
"src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h",
],
external_deps = [
"upb_lib",
],
language = "c++",
deps = [
"google_api_upb",
],
) )
grpc_upb_proto_library( # Once upb code-gen issue is resolved, replace alts_upb with this.
# grpc_upb_proto_library(
# name = "alts_upb",
# deps = ["//src/proto/grpc/gcp:alts_handshaker_proto"],
# )
grpc_cc_library(
name = "alts_upb", name = "alts_upb",
deps = ["//src/proto/grpc/gcp:alts_handshaker_proto"] srcs = [
"src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c",
],
hdrs = [
"src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h",
],
external_deps = [
"upb_lib",
],
language = "c++",
) )
grpc_generate_one_off_targets() grpc_generate_one_off_targets()

@ -33,25 +33,6 @@ config("grpc_config") {
source_set("health_proto") {
sources = [
"src/core/ext/filters/client_channel/health/health.pb.c",
"src/core/ext/filters/client_channel/health/health.pb.h",
]
deps = [
":nanopb",
]
public_configs = [
":grpc_config",
]
include_dirs = [
"third_party/nanopb",
]
}
source_set("nanopb") { source_set("nanopb") {
sources = [ sources = [
"third_party/nanopb/pb.h", "third_party/nanopb/pb.h",
@ -282,12 +263,6 @@ config("grpc_config") {
"src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h",
"src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc",
"src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c",
"src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h",
"src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc", "src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc",
"src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc", "src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc",
"src/core/ext/filters/client_channel/lb_policy/subchannel_list.h", "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h",
@ -429,6 +404,76 @@ config("grpc_config") {
"src/core/ext/transport/inproc/inproc_plugin.cc", "src/core/ext/transport/inproc/inproc_plugin.cc",
"src/core/ext/transport/inproc/inproc_transport.cc", "src/core/ext/transport/inproc/inproc_transport.cc",
"src/core/ext/transport/inproc/inproc_transport.h", "src/core/ext/transport/inproc/inproc_transport.h",
"src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/cds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/cds.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/eds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/eds.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h",
"src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c",
"src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h",
"src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c",
"src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h",
"src/core/ext/upb-generated/envoy/type/percent.upb.c",
"src/core/ext/upb-generated/envoy/type/percent.upb.h",
"src/core/ext/upb-generated/envoy/type/range.upb.c",
"src/core/ext/upb-generated/envoy/type/range.upb.h",
"src/core/ext/upb-generated/gogoproto/gogo.upb.c",
"src/core/ext/upb-generated/gogoproto/gogo.upb.h",
"src/core/ext/upb-generated/google/api/annotations.upb.c",
"src/core/ext/upb-generated/google/api/annotations.upb.h",
"src/core/ext/upb-generated/google/api/http.upb.c",
"src/core/ext/upb-generated/google/api/http.upb.h",
"src/core/ext/upb-generated/google/protobuf/any.upb.c",
"src/core/ext/upb-generated/google/protobuf/any.upb.h",
"src/core/ext/upb-generated/google/protobuf/descriptor.upb.c",
"src/core/ext/upb-generated/google/protobuf/descriptor.upb.h",
"src/core/ext/upb-generated/google/protobuf/duration.upb.c",
"src/core/ext/upb-generated/google/protobuf/duration.upb.h",
"src/core/ext/upb-generated/google/protobuf/empty.upb.c",
"src/core/ext/upb-generated/google/protobuf/empty.upb.h",
"src/core/ext/upb-generated/google/protobuf/struct.upb.c",
"src/core/ext/upb-generated/google/protobuf/struct.upb.h",
"src/core/ext/upb-generated/google/protobuf/timestamp.upb.c",
"src/core/ext/upb-generated/google/protobuf/timestamp.upb.h",
"src/core/ext/upb-generated/google/protobuf/wrappers.upb.c",
"src/core/ext/upb-generated/google/protobuf/wrappers.upb.h",
"src/core/ext/upb-generated/google/rpc/status.upb.c",
"src/core/ext/upb-generated/google/rpc/status.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h",
"src/core/ext/upb-generated/validate/validate.upb.c",
"src/core/ext/upb-generated/validate/validate.upb.h",
"src/core/lib/avl/avl.cc", "src/core/lib/avl/avl.cc",
"src/core/lib/avl/avl.h", "src/core/lib/avl/avl.h",
"src/core/lib/backoff/backoff.cc", "src/core/lib/backoff/backoff.cc",
@ -826,10 +871,6 @@ config("grpc_config") {
"src/core/tsi/alts/frame_protector/frame_handler.h", "src/core/tsi/alts/frame_protector/frame_handler.h",
"src/core/tsi/alts/handshaker/alts_handshaker_client.cc", "src/core/tsi/alts/handshaker/alts_handshaker_client.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_client.h", "src/core/tsi/alts/handshaker/alts_handshaker_client.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h",
"src/core/tsi/alts/handshaker/alts_shared_resource.cc", "src/core/tsi/alts/handshaker/alts_shared_resource.cc",
"src/core/tsi/alts/handshaker/alts_shared_resource.h", "src/core/tsi/alts/handshaker/alts_shared_resource.h",
"src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc", "src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc",
@ -837,12 +878,6 @@ config("grpc_config") {
"src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h", "src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h",
"src/core/tsi/alts/handshaker/alts_tsi_utils.cc", "src/core/tsi/alts/handshaker/alts_tsi_utils.cc",
"src/core/tsi/alts/handshaker/alts_tsi_utils.h", "src/core/tsi/alts/handshaker/alts_tsi_utils.h",
"src/core/tsi/alts/handshaker/altscontext.pb.c",
"src/core/tsi/alts/handshaker/altscontext.pb.h",
"src/core/tsi/alts/handshaker/handshaker.pb.c",
"src/core/tsi/alts/handshaker/handshaker.pb.h",
"src/core/tsi/alts/handshaker/transport_security_common.pb.c",
"src/core/tsi/alts/handshaker/transport_security_common.pb.h",
"src/core/tsi/alts/handshaker/transport_security_common_api.cc", "src/core/tsi/alts/handshaker/transport_security_common_api.cc",
"src/core/tsi/alts/handshaker/transport_security_common_api.h", "src/core/tsi/alts/handshaker/transport_security_common_api.h",
"src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc",
@ -874,6 +909,20 @@ config("grpc_config") {
"src/core/tsi/transport_security_grpc.cc", "src/core/tsi/transport_security_grpc.cc",
"src/core/tsi/transport_security_grpc.h", "src/core/tsi/transport_security_grpc.h",
"src/core/tsi/transport_security_interface.h", "src/core/tsi/transport_security_interface.h",
"third_party/upb/upb/decode.c",
"third_party/upb/upb/decode.h",
"third_party/upb/upb/encode.c",
"third_party/upb/upb/encode.h",
"third_party/upb/upb/generated_util.h",
"third_party/upb/upb/msg.c",
"third_party/upb/upb/msg.h",
"third_party/upb/upb/port.c",
"third_party/upb/upb/port_def.inc",
"third_party/upb/upb/port_undef.inc",
"third_party/upb/upb/table.c",
"third_party/upb/upb/table.int.h",
"third_party/upb/upb/upb.c",
"third_party/upb/upb/upb.h",
] ]
deps = [ deps = [
"//third_party/boringssl", "//third_party/boringssl",
@ -881,8 +930,6 @@ config("grpc_config") {
":gpr", ":gpr",
"//third_party/cares", "//third_party/cares",
":address_sorting", ":address_sorting",
":nanopb",
":health_proto",
] ]
public_configs = [ public_configs = [
@ -1162,6 +1209,8 @@ config("grpc_config") {
"include/grpcpp/support/time.h", "include/grpcpp/support/time.h",
"include/grpcpp/support/validate_service_config.h", "include/grpcpp/support/validate_service_config.h",
"src/core/ext/transport/inproc/inproc_transport.h", "src/core/ext/transport/inproc/inproc_transport.h",
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h",
"src/core/lib/avl/avl.h", "src/core/lib/avl/avl.h",
"src/core/lib/backoff/backoff.h", "src/core/lib/backoff/backoff.h",
"src/core/lib/channel/channel_args.h", "src/core/lib/channel/channel_args.h",
@ -1391,14 +1440,26 @@ config("grpc_config") {
"src/cpp/util/status.cc", "src/cpp/util/status.cc",
"src/cpp/util/string_ref.cc", "src/cpp/util/string_ref.cc",
"src/cpp/util/time_cc.cc", "src/cpp/util/time_cc.cc",
"third_party/upb/upb/decode.c",
"third_party/upb/upb/decode.h",
"third_party/upb/upb/encode.c",
"third_party/upb/upb/encode.h",
"third_party/upb/upb/generated_util.h",
"third_party/upb/upb/msg.c",
"third_party/upb/upb/msg.h",
"third_party/upb/upb/port.c",
"third_party/upb/upb/port_def.inc",
"third_party/upb/upb/port_undef.inc",
"third_party/upb/upb/table.c",
"third_party/upb/upb/table.int.h",
"third_party/upb/upb/upb.c",
"third_party/upb/upb/upb.h",
] ]
deps = [ deps = [
"//third_party/boringssl", "//third_party/boringssl",
"//third_party/protobuf:protobuf_lite", "//third_party/protobuf:protobuf_lite",
":grpc", ":grpc",
":gpr", ":gpr",
":nanopb",
":health_proto",
] ]
public_configs = [ public_configs = [

File diff suppressed because it is too large Load Diff

@ -306,12 +306,6 @@ ifeq ($(HAS_WORKING_NO_CXX14_COMPAT),true)
W_NO_CXX14_COMPAT=-Wno-c++14-compat W_NO_CXX14_COMPAT=-Wno-c++14-compat
endif endif
CHECK_SHADOW_WORKS_CMD = $(CC) -std=c99 -Werror -Wshadow -o $(TMPOUT) -c test/build/shadow.c
HAS_WORKING_SHADOW = $(shell $(CHECK_SHADOW_WORKS_CMD) 2> /dev/null && echo true || echo false)
ifeq ($(HAS_WORKING_SHADOW),true)
W_SHADOW=-Wshadow
NO_W_SHADOW=-Wno-shadow
endif
CHECK_EXTRA_SEMI_WORKS_CMD = $(CC) -std=c99 -Werror -Wextra-semi -o $(TMPOUT) -c test/build/extra-semi.c CHECK_EXTRA_SEMI_WORKS_CMD = $(CC) -std=c99 -Werror -Wextra-semi -o $(TMPOUT) -c test/build/extra-semi.c
HAS_WORKING_EXTRA_SEMI = $(shell $(CHECK_EXTRA_SEMI_WORKS_CMD) 2> /dev/null && echo true || echo false) HAS_WORKING_EXTRA_SEMI = $(shell $(CHECK_EXTRA_SEMI_WORKS_CMD) 2> /dev/null && echo true || echo false)
ifeq ($(HAS_WORKING_EXTRA_SEMI),true) ifeq ($(HAS_WORKING_EXTRA_SEMI),true)
@ -347,14 +341,14 @@ HOST_CXX ?= $(CXX)
HOST_LD ?= $(LD) HOST_LD ?= $(LD)
HOST_LDXX ?= $(LDXX) HOST_LDXX ?= $(LDXX)
CFLAGS += -std=c99 -Wsign-conversion -Wconversion $(W_SHADOW) $(W_EXTRA_SEMI) CFLAGS += -std=c99 $(W_EXTRA_SEMI)
CXXFLAGS += -std=c++11 CXXFLAGS += -std=c++11
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
CXXFLAGS += -stdlib=libc++ CXXFLAGS += -stdlib=libc++
LDFLAGS += -framework CoreFoundation LDFLAGS += -framework CoreFoundation
endif endif
CXXFLAGS += -Wnon-virtual-dtor CXXFLAGS += -Wnon-virtual-dtor
CPPFLAGS += -g -Wall -Wextra -Werror -Wno-long-long -Wno-unused-parameter -DOSATOMIC_USE_INLINED=1 -Wno-deprecated-declarations -Ithird_party/nanopb -DPB_FIELD_32BIT CPPFLAGS += -g -Wall -Wextra -Werror -Wno-unknown-warning-option -Wno-long-long -Wno-unused-parameter -Wno-deprecated-declarations -Wno-sign-conversion -Wno-shadow -Wno-conversion -Wno-implicit-fallthrough -Wno-sign-compare -Wno-missing-field-initializers -Wno-maybe-uninitialized -DPB_FIELD_32BIT -DOSATOMIC_USE_INLINED=1 -Ithird_party/nanopb -Ithird_party/upb -Isrc/core/ext/upb-generated
COREFLAGS += -fno-rtti -fno-exceptions COREFLAGS += -fno-rtti -fno-exceptions
LDFLAGS += -g LDFLAGS += -g
@ -370,7 +364,7 @@ CPPFLAGS += -fPIC
LDFLAGS += -fPIC LDFLAGS += -fPIC
endif endif
INCLUDES = . include $(GENDIR) third_party/upb third_party/upb/generated_for_cmake INCLUDES = . include $(GENDIR)
LDFLAGS += -Llibs/$(CONFIG) LDFLAGS += -Llibs/$(CONFIG)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
@ -1152,7 +1146,6 @@ alts_frame_handler_test: $(BINDIR)/$(CONFIG)/alts_frame_handler_test
alts_frame_protector_test: $(BINDIR)/$(CONFIG)/alts_frame_protector_test alts_frame_protector_test: $(BINDIR)/$(CONFIG)/alts_frame_protector_test
alts_grpc_record_protocol_test: $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test alts_grpc_record_protocol_test: $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test
alts_handshaker_client_test: $(BINDIR)/$(CONFIG)/alts_handshaker_client_test alts_handshaker_client_test: $(BINDIR)/$(CONFIG)/alts_handshaker_client_test
alts_handshaker_service_api_test: $(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test
alts_iovec_record_protocol_test: $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test alts_iovec_record_protocol_test: $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test
alts_security_connector_test: $(BINDIR)/$(CONFIG)/alts_security_connector_test alts_security_connector_test: $(BINDIR)/$(CONFIG)/alts_security_connector_test
alts_tsi_handshaker_test: $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test alts_tsi_handshaker_test: $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test
@ -1416,7 +1409,7 @@ plugins: $(PROTOC_PLUGINS)
privatelibs: privatelibs_c privatelibs_cxx privatelibs: privatelibs_c privatelibs_cxx
privatelibs_c: $(LIBDIR)/$(CONFIG)/libalts_test_util.a $(LIBDIR)/$(CONFIG)/libcxxabi.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libz.a $(LIBDIR)/$(CONFIG)/libares.a $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a privatelibs_c: $(LIBDIR)/$(CONFIG)/libalts_test_util.a $(LIBDIR)/$(CONFIG)/libcxxabi.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBDIR)/$(CONFIG)/libz.a $(LIBDIR)/$(CONFIG)/libares.a $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a
pc_c: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc $(LIBDIR)/$(CONFIG)/pkgconfig/gpr.pc pc_c: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc $(LIBDIR)/$(CONFIG)/pkgconfig/gpr.pc
pc_c_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc_unsecure.pc $(LIBDIR)/$(CONFIG)/pkgconfig/gpr.pc pc_c_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc_unsecure.pc $(LIBDIR)/$(CONFIG)/pkgconfig/gpr.pc
@ -1633,7 +1626,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/alts_frame_protector_test \ $(BINDIR)/$(CONFIG)/alts_frame_protector_test \
$(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test \ $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test \
$(BINDIR)/$(CONFIG)/alts_handshaker_client_test \ $(BINDIR)/$(CONFIG)/alts_handshaker_client_test \
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test \
$(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test \ $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test \
$(BINDIR)/$(CONFIG)/alts_security_connector_test \ $(BINDIR)/$(CONFIG)/alts_security_connector_test \
$(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test \ $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test \
@ -1801,7 +1793,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/alts_frame_protector_test \ $(BINDIR)/$(CONFIG)/alts_frame_protector_test \
$(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test \ $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test \
$(BINDIR)/$(CONFIG)/alts_handshaker_client_test \ $(BINDIR)/$(CONFIG)/alts_handshaker_client_test \
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test \
$(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test \ $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test \
$(BINDIR)/$(CONFIG)/alts_security_connector_test \ $(BINDIR)/$(CONFIG)/alts_security_connector_test \
$(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test \ $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test \
@ -2247,8 +2238,6 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test || ( echo test alts_grpc_record_protocol_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test || ( echo test alts_grpc_record_protocol_test failed ; exit 1 )
$(E) "[RUN] Testing alts_handshaker_client_test" $(E) "[RUN] Testing alts_handshaker_client_test"
$(Q) $(BINDIR)/$(CONFIG)/alts_handshaker_client_test || ( echo test alts_handshaker_client_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/alts_handshaker_client_test || ( echo test alts_handshaker_client_test failed ; exit 1 )
$(E) "[RUN] Testing alts_handshaker_service_api_test"
$(Q) $(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test || ( echo test alts_handshaker_service_api_test failed ; exit 1 )
$(E) "[RUN] Testing alts_iovec_record_protocol_test" $(E) "[RUN] Testing alts_iovec_record_protocol_test"
$(Q) $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test || ( echo test alts_iovec_record_protocol_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test || ( echo test alts_iovec_record_protocol_test failed ; exit 1 )
$(E) "[RUN] Testing alts_security_connector_test" $(E) "[RUN] Testing alts_security_connector_test"
@ -2710,6 +2699,22 @@ $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc: src/proto/grpc/lb/v1/lo
$(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $<
endif endif
ifeq ($(NO_PROTOC),true)
$(GENDIR)/src/proto/grpc/lb/v2/xds_for_test.pb.cc: protoc_dep_error
$(GENDIR)/src/proto/grpc/lb/v2/xds_for_test.grpc.pb.cc: protoc_dep_error
else
$(GENDIR)/src/proto/grpc/lb/v2/xds_for_test.pb.cc: src/proto/grpc/lb/v2/xds_for_test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
$(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $<
$(GENDIR)/src/proto/grpc/lb/v2/xds_for_test.grpc.pb.cc: src/proto/grpc/lb/v2/xds_for_test.proto $(GENDIR)/src/proto/grpc/lb/v2/xds_for_test.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[GRPC] Generating gRPC's protobuf service CC file from $<"
$(Q) mkdir -p `dirname $@`
$(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $<
endif
ifeq ($(NO_PROTOC),true) ifeq ($(NO_PROTOC),true)
$(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc: protoc_dep_error
$(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc: protoc_dep_error
@ -3752,16 +3757,17 @@ LIBGRPC_SRC = \
src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc \
src/core/tsi/alts/handshaker/alts_tsi_utils.cc \ src/core/tsi/alts/handshaker/alts_tsi_utils.cc \
src/core/tsi/alts/handshaker/transport_security_common_api.cc \ src/core/tsi/alts/handshaker/transport_security_common_api.cc \
src/core/tsi/alts/handshaker/altscontext.pb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \
src/core/tsi/alts/handshaker/handshaker.pb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \
src/core/tsi/alts/handshaker/transport_security_common.pb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \
third_party/nanopb/pb_common.c \ third_party/upb/upb/decode.c \
third_party/nanopb/pb_decode.c \ third_party/upb/upb/encode.c \
third_party/nanopb/pb_encode.c \ third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/core/tsi/transport_security.cc \ src/core/tsi/transport_security.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \
@ -3794,7 +3800,7 @@ LIBGRPC_SRC = \
src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel.cc \
src/core/ext/filters/client_channel/subchannel_pool_interface.cc \ src/core/ext/filters/client_channel/subchannel_pool_interface.cc \
src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \
src/core/ext/filters/client_channel/health/health.pb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
src/core/tsi/fake_transport_security.cc \ src/core/tsi/fake_transport_security.cc \
src/core/tsi/local_transport_security.cc \ src/core/tsi/local_transport_security.cc \
src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc \ src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc \
@ -3813,14 +3819,42 @@ LIBGRPC_SRC = \
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc \
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc \
src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc \
src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c \
src/core/ext/upb-generated/google/api/annotations.upb.c \
src/core/ext/upb-generated/google/api/http.upb.c \
src/core/ext/upb-generated/google/protobuf/any.upb.c \
src/core/ext/upb-generated/google/protobuf/descriptor.upb.c \
src/core/ext/upb-generated/google/protobuf/duration.upb.c \
src/core/ext/upb-generated/google/protobuf/empty.upb.c \
src/core/ext/upb-generated/google/protobuf/struct.upb.c \
src/core/ext/upb-generated/google/protobuf/timestamp.upb.c \
src/core/ext/upb-generated/google/protobuf/wrappers.upb.c \
src/core/ext/upb-generated/google/rpc/status.upb.c \
src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc \ src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc \
src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c \
src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c \
src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \
src/core/ext/filters/client_channel/lb_policy/xds/xds.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds.cc \
src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc \
src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc \
src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc \
src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c \
src/core/ext/upb-generated/envoy/api/v2/cds.upb.c \
src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c \
src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c \
src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c \
src/core/ext/upb-generated/envoy/api/v2/eds.upb.c \
src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c \
src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c \
src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c \
src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c \
src/core/ext/upb-generated/envoy/type/percent.upb.c \
src/core/ext/upb-generated/envoy/type/range.upb.c \
src/core/ext/upb-generated/gogoproto/gogo.upb.c \
src/core/ext/upb-generated/validate/validate.upb.c \
src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc \ src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc \
src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc \ src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc \
src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc \
@ -4155,10 +4189,13 @@ LIBGRPC_CRONET_SRC = \
src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel.cc \
src/core/ext/filters/client_channel/subchannel_pool_interface.cc \ src/core/ext/filters/client_channel/subchannel_pool_interface.cc \
src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \
src/core/ext/filters/client_channel/health/health.pb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
third_party/nanopb/pb_common.c \ third_party/upb/upb/decode.c \
third_party/nanopb/pb_decode.c \ third_party/upb/upb/encode.c \
third_party/nanopb/pb_encode.c \ third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/core/lib/http/httpcli_security_connector.cc \ src/core/lib/http/httpcli_security_connector.cc \
src/core/lib/security/context/security_context.cc \ src/core/lib/security/context/security_context.cc \
src/core/lib/security/credentials/alts/alts_credentials.cc \ src/core/lib/security/credentials/alts/alts_credentials.cc \
@ -4219,13 +4256,11 @@ LIBGRPC_CRONET_SRC = \
src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc \
src/core/tsi/alts/handshaker/alts_tsi_utils.cc \ src/core/tsi/alts/handshaker/alts_tsi_utils.cc \
src/core/tsi/alts/handshaker/transport_security_common_api.cc \ src/core/tsi/alts/handshaker/transport_security_common_api.cc \
src/core/tsi/alts/handshaker/altscontext.pb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \
src/core/tsi/alts/handshaker/handshaker.pb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \
src/core/tsi/alts/handshaker/transport_security_common.pb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \
src/core/tsi/transport_security.cc \ src/core/tsi/transport_security.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \
@ -4534,10 +4569,13 @@ LIBGRPC_TEST_UTIL_SRC = \
src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel.cc \
src/core/ext/filters/client_channel/subchannel_pool_interface.cc \ src/core/ext/filters/client_channel/subchannel_pool_interface.cc \
src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \
src/core/ext/filters/client_channel/health/health.pb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
third_party/nanopb/pb_common.c \ third_party/upb/upb/decode.c \
third_party/nanopb/pb_decode.c \ third_party/upb/upb/encode.c \
third_party/nanopb/pb_encode.c \ third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/core/ext/transport/chttp2/transport/bin_decoder.cc \ src/core/ext/transport/chttp2/transport/bin_decoder.cc \
src/core/ext/transport/chttp2/transport/bin_encoder.cc \ src/core/ext/transport/chttp2/transport/bin_encoder.cc \
src/core/ext/transport/chttp2/transport/chttp2_plugin.cc \ src/core/ext/transport/chttp2/transport/chttp2_plugin.cc \
@ -4853,10 +4891,13 @@ LIBGRPC_TEST_UTIL_UNSECURE_SRC = \
src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel.cc \
src/core/ext/filters/client_channel/subchannel_pool_interface.cc \ src/core/ext/filters/client_channel/subchannel_pool_interface.cc \
src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \
src/core/ext/filters/client_channel/health/health.pb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
third_party/nanopb/pb_common.c \ third_party/upb/upb/decode.c \
third_party/nanopb/pb_decode.c \ third_party/upb/upb/encode.c \
third_party/nanopb/pb_encode.c \ third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/core/ext/transport/chttp2/transport/bin_decoder.cc \ src/core/ext/transport/chttp2/transport/bin_decoder.cc \
src/core/ext/transport/chttp2/transport/bin_encoder.cc \ src/core/ext/transport/chttp2/transport/bin_encoder.cc \
src/core/ext/transport/chttp2/transport/chttp2_plugin.cc \ src/core/ext/transport/chttp2/transport/chttp2_plugin.cc \
@ -5170,10 +5211,13 @@ LIBGRPC_UNSECURE_SRC = \
src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel.cc \
src/core/ext/filters/client_channel/subchannel_pool_interface.cc \ src/core/ext/filters/client_channel/subchannel_pool_interface.cc \
src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \
src/core/ext/filters/client_channel/health/health.pb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
third_party/nanopb/pb_common.c \ third_party/upb/upb/decode.c \
third_party/nanopb/pb_decode.c \ third_party/upb/upb/encode.c \
third_party/nanopb/pb_encode.c \ third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/core/ext/transport/inproc/inproc_plugin.cc \ src/core/ext/transport/inproc/inproc_plugin.cc \
src/core/ext/transport/inproc/inproc_transport.cc \ src/core/ext/transport/inproc/inproc_transport.cc \
src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc \
@ -5195,13 +5239,41 @@ LIBGRPC_UNSECURE_SRC = \
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc \
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc \
src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc \
src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c \ src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c \
src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c \ src/core/ext/upb-generated/google/api/annotations.upb.c \
src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \ src/core/ext/upb-generated/google/api/http.upb.c \
src/core/ext/upb-generated/google/protobuf/any.upb.c \
src/core/ext/upb-generated/google/protobuf/descriptor.upb.c \
src/core/ext/upb-generated/google/protobuf/duration.upb.c \
src/core/ext/upb-generated/google/protobuf/empty.upb.c \
src/core/ext/upb-generated/google/protobuf/struct.upb.c \
src/core/ext/upb-generated/google/protobuf/timestamp.upb.c \
src/core/ext/upb-generated/google/protobuf/wrappers.upb.c \
src/core/ext/upb-generated/google/rpc/status.upb.c \
src/core/ext/filters/client_channel/lb_policy/xds/xds.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds.cc \
src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.cc \
src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc \
src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc \
src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c \
src/core/ext/upb-generated/envoy/api/v2/cds.upb.c \
src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c \
src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c \
src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c \
src/core/ext/upb-generated/envoy/api/v2/eds.upb.c \
src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c \
src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c \
src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c \
src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c \
src/core/ext/upb-generated/envoy/type/percent.upb.c \
src/core/ext/upb-generated/envoy/type/range.upb.c \
src/core/ext/upb-generated/gogoproto/gogo.upb.c \
src/core/ext/upb-generated/validate/validate.upb.c \
src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc \ src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc \
src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc \ src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc \
src/core/ext/filters/census/grpc_context.cc \ src/core/ext/filters/census/grpc_context.cc \
@ -5510,10 +5582,13 @@ LIBGRPC++_SRC = \
src/cpp/util/status.cc \ src/cpp/util/status.cc \
src/cpp/util/string_ref.cc \ src/cpp/util/string_ref.cc \
src/cpp/util/time_cc.cc \ src/cpp/util/time_cc.cc \
src/core/ext/filters/client_channel/health/health.pb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
third_party/nanopb/pb_common.c \ third_party/upb/upb/decode.c \
third_party/nanopb/pb_decode.c \ third_party/upb/upb/encode.c \
third_party/nanopb/pb_encode.c \ third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/cpp/codegen/codegen_init.cc \ src/cpp/codegen/codegen_init.cc \
PUBLIC_HEADERS_CXX += \ PUBLIC_HEADERS_CXX += \
@ -6538,10 +6613,13 @@ LIBGRPC++_UNSECURE_SRC = \
src/cpp/util/status.cc \ src/cpp/util/status.cc \
src/cpp/util/string_ref.cc \ src/cpp/util/string_ref.cc \
src/cpp/util/time_cc.cc \ src/cpp/util/time_cc.cc \
src/core/ext/filters/client_channel/health/health.pb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
third_party/nanopb/pb_common.c \ third_party/upb/upb/decode.c \
third_party/nanopb/pb_decode.c \ third_party/upb/upb/encode.c \
third_party/nanopb/pb_encode.c \ third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/cpp/codegen/codegen_init.cc \ src/cpp/codegen/codegen_init.cc \
PUBLIC_HEADERS_CXX += \ PUBLIC_HEADERS_CXX += \
@ -7903,41 +7981,6 @@ ifneq ($(NO_DEPS),true)
endif endif
LIBUPB_SRC = \
third_party/upb/generated_for_cmake/google/protobuf/descriptor.upb.c \
third_party/upb/upb/decode.c \
third_party/upb/upb/def.c \
third_party/upb/upb/encode.c \
third_party/upb/upb/handlers.c \
third_party/upb/upb/msg.c \
third_party/upb/upb/msgfactory.c \
third_party/upb/upb/sink.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
PUBLIC_HEADERS_C += \
LIBUPB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBUPB_SRC))))
$(LIBUPB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-shadow -Wno-conversion -Wno-implicit-fallthrough -Wno-sign-compare -Wno-missing-field-initializers
$(LIBDIR)/$(CONFIG)/libupb.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(LIBUPB_OBJS)
$(E) "[AR] Creating $@"
$(Q) mkdir -p `dirname $@`
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libupb.a
$(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libupb.a $(LIBUPB_OBJS)
ifeq ($(SYSTEM),Darwin)
$(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libupb.a
endif
ifneq ($(NO_DEPS),true)
-include $(LIBUPB_OBJS:.o=.dep)
endif
LIBZ_SRC = \ LIBZ_SRC = \
third_party/zlib/adler32.c \ third_party/zlib/adler32.c \
third_party/zlib/compress.c \ third_party/zlib/compress.c \
@ -13599,49 +13642,6 @@ endif
endif endif
ALTS_HANDSHAKER_SERVICE_API_TEST_SRC = \
test/core/tsi/alts/handshaker/alts_handshaker_service_api_test.cc \
ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_HANDSHAKER_SERVICE_API_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_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.5.0+.
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test: protobuf_dep_error
else
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test: $(PROTOBUF_DEP) $(ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libalts_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LDXX) $(LDFLAGS) $(ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libalts_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test
endif
endif
$(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_handshaker_service_api_test.o: $(LIBDIR)/$(CONFIG)/libalts_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc.a
deps_alts_handshaker_service_api_test: $(ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS:.o=.dep)
endif
endif
ALTS_IOVEC_RECORD_PROTOCOL_TEST_SRC = \ ALTS_IOVEC_RECORD_PROTOCOL_TEST_SRC = \
test/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol_test.cc \ test/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol_test.cc \
@ -19744,7 +19744,7 @@ endif
XDS_END2END_TEST_SRC = \ XDS_END2END_TEST_SRC = \
$(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/lb/v2/xds_for_test.pb.cc $(GENDIR)/src/proto/grpc/lb/v2/xds_for_test.grpc.pb.cc \
test/cpp/end2end/xds_end2end_test.cc \ test/cpp/end2end/xds_end2end_test.cc \
XDS_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(XDS_END2END_TEST_SRC)))) XDS_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(XDS_END2END_TEST_SRC))))
@ -19776,7 +19776,7 @@ endif
endif endif
$(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v1/load_balancer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v2/xds_for_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(OBJDIR)/$(CONFIG)/test/cpp/end2end/xds_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/xds_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
@ -19787,7 +19787,7 @@ ifneq ($(NO_DEPS),true)
-include $(XDS_END2END_TEST_OBJS:.o=.dep) -include $(XDS_END2END_TEST_OBJS:.o=.dep)
endif endif
endif endif
$(OBJDIR)/$(CONFIG)/test/cpp/end2end/xds_end2end_test.o: $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/xds_end2end_test.o: $(GENDIR)/src/proto/grpc/lb/v2/xds_for_test.pb.cc $(GENDIR)/src/proto/grpc/lb/v2/xds_for_test.grpc.pb.cc
PUBLIC_HEADERS_MUST_BE_C89_SRC = \ PUBLIC_HEADERS_MUST_BE_C89_SRC = \
@ -22422,6 +22422,9 @@ src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc: $(OPENSSL_
src/core/ext/transport/cronet/plugin_registry/grpc_cronet_plugin_registry.cc: $(OPENSSL_DEP) src/core/ext/transport/cronet/plugin_registry/grpc_cronet_plugin_registry.cc: $(OPENSSL_DEP)
src/core/ext/transport/cronet/transport/cronet_api_dummy.cc: $(OPENSSL_DEP) src/core/ext/transport/cronet/transport/cronet_api_dummy.cc: $(OPENSSL_DEP)
src/core/ext/transport/cronet/transport/cronet_transport.cc: $(OPENSSL_DEP) src/core/ext/transport/cronet/transport/cronet_transport.cc: $(OPENSSL_DEP)
src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c: $(OPENSSL_DEP)
src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c: $(OPENSSL_DEP)
src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c: $(OPENSSL_DEP)
src/core/lib/http/httpcli_security_connector.cc: $(OPENSSL_DEP) src/core/lib/http/httpcli_security_connector.cc: $(OPENSSL_DEP)
src/core/lib/security/context/security_context.cc: $(OPENSSL_DEP) src/core/lib/security/context/security_context.cc: $(OPENSSL_DEP)
src/core/lib/security/credentials/alts/alts_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/alts/alts_credentials.cc: $(OPENSSL_DEP)
@ -22476,14 +22479,9 @@ src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc: $(OPEN
src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc: $(OPENSSL_DEP) src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc: $(OPENSSL_DEP)
src/core/tsi/alts/frame_protector/frame_handler.cc: $(OPENSSL_DEP) src/core/tsi/alts/frame_protector/frame_handler.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_handshaker_client.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/alts_handshaker_client.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_shared_resource.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/alts_shared_resource.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_tsi_utils.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/alts_tsi_utils.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/altscontext.pb.c: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/handshaker.pb.c: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/transport_security_common.pb.c: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/transport_security_common_api.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/transport_security_common_api.cc: $(OPENSSL_DEP)
src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc: $(OPENSSL_DEP) src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc: $(OPENSSL_DEP)
src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc: $(OPENSSL_DEP) src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc: $(OPENSSL_DEP)

@ -1,4 +1,4 @@
recursive-include src/python/grpcio/grpc *.c *.h *.py *.pyx *.pxd *.pxi *.python *.pem recursive-include src/python/grpcio/grpc *.c *.h *.inc *.py *.pyx *.pxd *.pxi *.python *.pem
recursive-exclude src/python/grpcio/grpc/_cython *.so *.pyd recursive-exclude src/python/grpcio/grpc/_cython *.so *.pyd
graft src/python/grpcio/grpcio.egg-info graft src/python/grpcio/grpcio.egg-info
graft src/core graft src/core
@ -8,6 +8,7 @@ graft third_party/address_sorting
graft third_party/boringssl graft third_party/boringssl
graft third_party/cares graft third_party/cares
graft third_party/nanopb graft third_party/nanopb
graft third_party/upb
graft third_party/zlib graft third_party/zlib
include src/python/grpcio/_parallel_compile_patch.py include src/python/grpcio/_parallel_compile_patch.py
include src/python/grpcio/_spawn_patch.py include src/python/grpcio/_spawn_patch.py

@ -18,33 +18,6 @@ register_toolchains(
"//third_party/toolchains/bazel_0.26.0_rbe_windows:cc-toolchain-x64_windows", "//third_party/toolchains/bazel_0.26.0_rbe_windows:cc-toolchain-x64_windows",
) )
git_repository(
name = "io_bazel_rules_python",
commit = "fdbb17a4118a1728d19e638a5291b4c4266ea5b8",
remote = "https://github.com/bazelbuild/rules_python.git",
)
load("@io_bazel_rules_python//python:pip.bzl", "pip_repositories", "pip_import")
pip_import(
name = "grpc_python_dependencies",
requirements = "//:requirements.bazel.txt",
)
http_archive(
name = "cython",
build_file = "//third_party:cython.BUILD",
sha256 = "d68138a2381afbdd0876c3cb2a22389043fa01c4badede1228ee073032b07a27",
strip_prefix = "cython-c2b80d87658a8525ce091cbe146cb7eaa29fed5c",
urls = [
"https://github.com/cython/cython/archive/c2b80d87658a8525ce091cbe146cb7eaa29fed5c.tar.gz",
],
)
load("//bazel:grpc_python_deps.bzl", "grpc_python_deps")
grpc_python_deps()
load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig") load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
# Create toolchain configuration for remote execution. # Create toolchain configuration for remote execution.
@ -66,6 +39,17 @@ rbe_autoconfig(
), ),
) )
load("@io_bazel_rules_python//python:pip.bzl", "pip_repositories", "pip_import")
pip_import(
name = "grpc_python_dependencies",
requirements = "@com_github_grpc_grpc//:requirements.bazel.txt",
)
load("@io_bazel_rules_python//python:pip.bzl", "pip_repositories")
load("@grpc_python_dependencies//:requirements.bzl", "pip_install")
pip_repositories()
pip_install()
load("@upb//bazel:workspace_deps.bzl", "upb_deps") load("@upb//bazel:workspace_deps.bzl", "upb_deps")
upb_deps() upb_deps()
@ -82,4 +66,4 @@ load("@build_bazel_rules_apple//apple:repositories.bzl", "apple_rules_dependenci
apple_rules_dependencies() apple_rules_dependencies()
load("@build_bazel_apple_support//lib:repositories.bzl", "apple_support_dependencies") load("@build_bazel_apple_support//lib:repositories.bzl", "apple_support_dependencies")
apple_support_dependencies() apple_support_dependencies()

@ -103,7 +103,10 @@ def grpc_cc_library(
visibility = visibility, visibility = visibility,
testonly = testonly, testonly = testonly,
linkopts = linkopts, linkopts = linkopts,
includes = ["include"] + if_not_windows(["src/core/ext/upb-generated"]), includes = [
"include",
"src/core/ext/upb-generated", # Once upb code-gen issue is resolved, remove this.
],
alwayslink = alwayslink, alwayslink = alwayslink,
data = data, data = data,
tags = tags, tags = tags,

@ -2,6 +2,8 @@
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("@com_github_grpc_grpc//bazel:grpc_python_deps.bzl", "grpc_python_deps")
def grpc_deps(): def grpc_deps():
"""Loads dependencies need to compile and test the grpc library.""" """Loads dependencies need to compile and test the grpc library."""
@ -206,9 +208,9 @@ def grpc_deps():
if "upb" not in native.existing_rules(): if "upb" not in native.existing_rules():
http_archive( http_archive(
name = "upb", name = "upb",
sha256 = "73deded75313f80779eba109c32f3c59a813addf5064bf6e7c213fca1e7d8e32", sha256 = "6e3c81c9e6c609d918b399110a88d10efeab73b2c8eb3131de15658b1ec86141",
strip_prefix = "upb-423ea5ca9ce8da69611e6e95559efcb3a1ba8ad8", strip_prefix = "upb-b70f68269a7d51c5ce372a93742bf6960215ffef",
url = "https://github.com/protocolbuffers/upb/archive/423ea5ca9ce8da69611e6e95559efcb3a1ba8ad8.tar.gz", url = "https://github.com/protocolbuffers/upb/archive/b70f68269a7d51c5ce372a93742bf6960215ffef.tar.gz",
) )
if "envoy_api" not in native.existing_rules(): if "envoy_api" not in native.existing_rules():
http_archive( http_archive(
@ -231,7 +233,10 @@ def grpc_deps():
remote = "https://github.com/bazelbuild/rules_apple.git", remote = "https://github.com/bazelbuild/rules_apple.git",
tag = "0.17.2", tag = "0.17.2",
) )
grpc_python_deps()
# TODO: move some dependencies from "grpc_deps" here? # TODO: move some dependencies from "grpc_deps" here?
def grpc_test_only_deps(): def grpc_test_only_deps():
"""Internal, not intended for use by packages that are consuming grpc. """Internal, not intended for use by packages that are consuming grpc.
@ -290,3 +295,4 @@ def grpc_test_only_deps():
url = "https://github.com/twisted/constantly/archive/15.1.0.zip", url = "https://github.com/twisted/constantly/archive/15.1.0.zip",
build_file = "@com_github_grpc_grpc//third_party:constantly.BUILD", build_file = "@com_github_grpc_grpc//third_party:constantly.BUILD",
) )

@ -1,8 +1,67 @@
load("//third_party/py:python_configure.bzl", "python_configure") """Load dependencies needed to compile and test the grpc python library as a 3rd-party consumer."""
load("@io_bazel_rules_python//python:pip.bzl", "pip_repositories")
load("@grpc_python_dependencies//:requirements.bzl", "pip_install") load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("@com_github_grpc_grpc//third_party/py:python_configure.bzl", "python_configure")
def grpc_python_deps(): def grpc_python_deps():
native.bind(
name = "six",
actual = "@six_archive//:six",
)
# protobuf binds to the name "six", so we can't use it here.
# See https://github.com/bazelbuild/bazel/issues/1952 for why bind is
# horrible.
if "six_archive" not in native.existing_rules():
http_archive(
name = "six_archive",
strip_prefix = "six-1.12.0",
build_file = "@com_github_grpc_grpc//third_party:six.BUILD",
sha256 = "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73",
urls = ["https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz"],
)
if "enum34" not in native.existing_rules():
http_archive(
name = "enum34",
build_file = "@com_github_grpc_grpc//third_party:enum34.BUILD",
strip_prefix = "enum34-1.1.6",
sha256 = "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1",
urls = ["https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz"],
)
if "futures" not in native.existing_rules():
http_archive(
name = "futures",
build_file = "@com_github_grpc_grpc//third_party:futures.BUILD",
strip_prefix = "futures-3.3.0",
sha256 = "7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794",
urls = ["https://files.pythonhosted.org/packages/47/04/5fc6c74ad114032cd2c544c575bffc17582295e9cd6a851d6026ab4b2c00/futures-3.3.0.tar.gz"],
)
if "io_bazel_rules_python" not in native.existing_rules():
git_repository(
name = "io_bazel_rules_python",
commit = "fdbb17a4118a1728d19e638a5291b4c4266ea5b8",
remote = "https://github.com/bazelbuild/rules_python.git",
)
python_configure(name = "local_config_python") python_configure(name = "local_config_python")
pip_repositories()
pip_install() native.bind(
name = "python_headers",
actual = "@local_config_python//:python_headers",
)
if "cython" not in native.existing_rules():
http_archive(
name = "cython",
build_file = "@com_github_grpc_grpc//third_party:cython.BUILD",
sha256 = "d68138a2381afbdd0876c3cb2a22389043fa01c4badede1228ee073032b07a27",
strip_prefix = "cython-c2b80d87658a8525ce091cbe146cb7eaa29fed5c",
urls = [
"https://github.com/cython/cython/archive/c2b80d87658a8525ce091cbe146cb7eaa29fed5c.tar.gz",
],
)

@ -102,3 +102,63 @@ def get_plugin_args(plugin, flags, dir_out, generate_mocks):
"--plugin=protoc-gen-PLUGIN=" + plugin.path, "--plugin=protoc-gen-PLUGIN=" + plugin.path,
"--PLUGIN_out=" + ",".join(augmented_flags) + ":" + dir_out, "--PLUGIN_out=" + ",".join(augmented_flags) + ":" + dir_out,
] ]
def _get_staged_proto_file(context, source_file):
if source_file.dirname == context.label.package:
return source_file
else:
copied_proto = context.actions.declare_file(source_file.basename)
context.actions.run_shell(
inputs = [source_file],
outputs = [copied_proto],
command = "cp {} {}".format(source_file.path, copied_proto.path),
mnemonic = "CopySourceProto",
)
return copied_proto
def protos_from_context(context):
"""Copies proto files to the appropriate location.
Args:
context: The ctx object for the rule.
Returns:
A list of the protos.
"""
protos = []
for src in context.attr.deps:
for file in src[ProtoInfo].direct_sources:
protos.append(_get_staged_proto_file(context, file))
return protos
def includes_from_deps(deps):
"""Get includes from rule dependencies."""
return [
file
for src in deps
for file in src[ProtoInfo].transitive_imports.to_list()
]
def get_proto_arguments(protos, genfiles_dir_path):
"""Get the protoc arguments specifying which protos to compile."""
arguments = []
for proto in protos:
massaged_path = proto.path
if massaged_path.startswith(genfiles_dir_path):
massaged_path = proto.path[len(genfiles_dir_path) + 1:]
arguments.append(massaged_path)
return arguments
def declare_out_files(protos, context, generated_file_format):
"""Declares and returns the files to be generated."""
return [
context.actions.declare_file(
proto_path_to_generated_filename(
proto.basename,
generated_file_format,
),
)
for proto in protos
]

@ -1,91 +1,116 @@
"""Generates and compiles Python gRPC stubs from proto_library rules.""" """Generates and compiles Python gRPC stubs from proto_library rules."""
load("@grpc_python_dependencies//:requirements.bzl", "requirement")
load( load(
"//bazel:protobuf.bzl", "//bazel:protobuf.bzl",
"get_include_protoc_args", "get_include_protoc_args",
"get_plugin_args", "get_plugin_args",
"get_proto_root", "get_proto_root",
"proto_path_to_generated_filename", "proto_path_to_generated_filename",
"protos_from_context",
"includes_from_deps",
"get_proto_arguments",
"declare_out_files",
) )
_GENERATED_PROTO_FORMAT = "{}_pb2.py" _GENERATED_PROTO_FORMAT = "{}_pb2.py"
_GENERATED_GRPC_PROTO_FORMAT = "{}_pb2_grpc.py" _GENERATED_GRPC_PROTO_FORMAT = "{}_pb2_grpc.py"
def _get_staged_proto_file(context, source_file):
if source_file.dirname == context.label.package:
return source_file
else:
copied_proto = context.actions.declare_file(source_file.basename)
context.actions.run_shell(
inputs = [source_file],
outputs = [copied_proto],
command = "cp {} {}".format(source_file.path, copied_proto.path),
mnemonic = "CopySourceProto",
)
return copied_proto
def _generate_py_impl(context): def _generate_py_impl(context):
protos = [] protos = protos_from_context(context)
for src in context.attr.deps: includes = includes_from_deps(context.attr.deps)
for file in src[ProtoInfo].direct_sources:
protos.append(_get_staged_proto_file(context, file))
includes = [
file
for src in context.attr.deps
for file in src[ProtoInfo].transitive_imports.to_list()
]
proto_root = get_proto_root(context.label.workspace_root) proto_root = get_proto_root(context.label.workspace_root)
format_str = (_GENERATED_GRPC_PROTO_FORMAT if context.executable.plugin else _GENERATED_PROTO_FORMAT) out_files = declare_out_files(protos, context, _GENERATED_PROTO_FORMAT)
out_files = [
context.actions.declare_file(
proto_path_to_generated_filename(
proto.basename,
format_str,
),
)
for proto in protos
]
arguments = []
tools = [context.executable._protoc] tools = [context.executable._protoc]
if context.executable.plugin: arguments = ([
arguments += get_plugin_args( "--python_out={}".format(
context.executable.plugin,
context.attr.flags,
context.genfiles_dir.path, context.genfiles_dir.path,
False, ),
) ] + get_include_protoc_args(includes) + [
tools += [context.executable.plugin] "--proto_path={}".format(context.genfiles_dir.path)
else: for proto in protos
arguments += [ ])
"--python_out={}:{}".format( arguments += get_proto_arguments(protos, context.genfiles_dir.path)
",".join(context.attr.flags),
context.genfiles_dir.path, context.actions.run(
), inputs = protos + includes,
] tools = tools,
outputs = out_files,
executable = context.executable._protoc,
arguments = arguments,
mnemonic = "ProtocInvocation",
)
return struct(files = depset(out_files))
_generate_pb2_src = rule(
attrs = {
"deps": attr.label_list(
mandatory = True,
allow_empty = False,
providers = [ProtoInfo],
),
"_protoc": attr.label(
default = Label("//external:protocol_compiler"),
providers = ["files_to_run"],
executable = True,
cfg = "host",
),
},
implementation = _generate_py_impl,
)
def py_proto_library(
name,
srcs,
**kwargs):
"""Generate python code for a protobuf.
Args:
name: The name of the target.
srcs: A list of proto_library dependencies. Must contain a single element.
"""
codegen_target = "_{}_codegen".format(name)
if len(srcs) != 1:
fail("Can only compile a single proto at a time.")
_generate_pb2_src(
name = codegen_target,
deps = srcs,
**kwargs
)
native.py_library(
name = name,
srcs = [":{}".format(codegen_target)],
deps = ["@com_google_protobuf//:protobuf_python"],
**kwargs
)
def _generate_pb2_grpc_src_impl(context):
protos = protos_from_context(context)
includes = includes_from_deps(context.attr.deps)
proto_root = get_proto_root(context.label.workspace_root)
out_files = declare_out_files(protos, context, _GENERATED_GRPC_PROTO_FORMAT)
arguments = []
tools = [context.executable._protoc, context.executable._plugin]
arguments += get_plugin_args(
context.executable._plugin,
[],
context.genfiles_dir.path,
False,
)
arguments += get_include_protoc_args(includes) arguments += get_include_protoc_args(includes)
arguments += [ arguments += [
"--proto_path={}".format(context.genfiles_dir.path) "--proto_path={}".format(context.genfiles_dir.path)
for proto in protos for proto in protos
] ]
for proto in protos: arguments += get_proto_arguments(protos, context.genfiles_dir.path)
massaged_path = proto.path
if massaged_path.startswith(context.genfiles_dir.path):
massaged_path = proto.path[len(context.genfiles_dir.path) + 1:]
arguments.append(massaged_path)
well_known_proto_files = []
if context.attr.well_known_protos:
well_known_proto_directory = context.attr.well_known_protos.files.to_list(
)[0].dirname
arguments += ["-I{}".format(well_known_proto_directory + "/../..")]
well_known_proto_files = context.attr.well_known_protos.files.to_list()
context.actions.run( context.actions.run(
inputs = protos + includes + well_known_proto_files, inputs = protos + includes,
tools = tools, tools = tools,
outputs = out_files, outputs = out_files,
executable = context.executable._protoc, executable = context.executable._protoc,
@ -94,93 +119,62 @@ def _generate_py_impl(context):
) )
return struct(files = depset(out_files)) return struct(files = depset(out_files))
__generate_py = rule(
_generate_pb2_grpc_src = rule(
attrs = { attrs = {
"deps": attr.label_list( "deps": attr.label_list(
mandatory = True, mandatory = True,
allow_empty = False, allow_empty = False,
providers = [ProtoInfo], providers = [ProtoInfo],
), ),
"plugin": attr.label( "_plugin": attr.label(
executable = True, executable = True,
providers = ["files_to_run"], providers = ["files_to_run"],
cfg = "host", cfg = "host",
default = Label("//src/compiler:grpc_python_plugin"),
), ),
"flags": attr.string_list(
mandatory = False,
allow_empty = True,
),
"well_known_protos": attr.label(mandatory = False),
"_protoc": attr.label( "_protoc": attr.label(
default = Label("//external:protocol_compiler"),
executable = True, executable = True,
providers = ["files_to_run"],
cfg = "host", cfg = "host",
default = Label("//external:protocol_compiler"),
), ),
}, },
output_to_genfiles = True, implementation = _generate_pb2_grpc_src_impl,
implementation = _generate_py_impl,
) )
def _generate_py(well_known_protos, **kwargs): def py_grpc_library(
if well_known_protos: name,
__generate_py( srcs,
well_known_protos = "@com_google_protobuf//:well_known_protos", deps,
**kwargs **kwargs):
) """Generate python code for gRPC services defined in a protobuf.
else:
__generate_py(**kwargs)
def py_proto_library(
name,
deps,
well_known_protos = True,
proto_only = False,
**kwargs):
"""Generate python code for a protobuf.
Args: Args:
name: The name of the target. name: The name of the target.
deps: A list of dependencies. Must contain a single element. srcs: (List of `labels`) a single proto_library target containing the
well_known_protos: A bool indicating whether or not to include well-known schema of the service.
protos. deps: (List of `labels`) a single py_proto_library target for the
proto_only: A bool indicating whether to generate vanilla protobuf code proto_library in `srcs`.
or to also generate gRPC code.
""" """
if len(deps) > 1:
fail("The supported length of 'deps' is 1.")
codegen_target = "_{}_codegen".format(name)
codegen_grpc_target = "_{}_grpc_codegen".format(name) codegen_grpc_target = "_{}_grpc_codegen".format(name)
if len(srcs) != 1:
fail("Can only compile a single proto at a time.")
_generate_py( if len(deps) != 1:
name = codegen_target, fail("Deps must have length 1.")
deps = deps,
well_known_protos = well_known_protos, _generate_pb2_grpc_src(
name = codegen_grpc_target,
deps = srcs,
**kwargs **kwargs
) )
if not proto_only: native.py_library(
_generate_py( name = name,
name = codegen_grpc_target, srcs = [
deps = deps, ":{}".format(codegen_grpc_target),
plugin = "//src/compiler:grpc_python_plugin", ],
well_known_protos = well_known_protos, deps = [Label("//src/python/grpcio/grpc:grpcio")] + deps,
**kwargs **kwargs
) )
native.py_library(
name = name,
srcs = [
":{}".format(codegen_grpc_target),
":{}".format(codegen_target),
],
deps = [requirement("protobuf")],
**kwargs
)
else:
native.py_library(
name = name,
srcs = [":{}".format(codegen_target), ":{}".format(codegen_target)],
deps = [requirement("protobuf")],
**kwargs
)

@ -0,0 +1,2 @@
bazel-*
tools/bazel-*

@ -0,0 +1,62 @@
# gRPC Bazel BUILD file.
#
# Copyright 2019 The 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.
load("@com_github_grpc_grpc//bazel:python_rules.bzl", "py_proto_library", "py_grpc_library")
package(default_testonly = 1)
proto_library(
name = "helloworld_proto",
srcs = ["helloworld.proto"],
deps = [
"@com_google_protobuf//:duration_proto",
"@com_google_protobuf//:timestamp_proto",
],
)
py_proto_library(
name = "helloworld_py_pb2",
srcs = [":helloworld_proto"],
)
py_grpc_library(
name = "helloworld_py_pb2_grpc",
srcs = [":helloworld_proto"],
deps = [":helloworld_py_pb2"],
)
py_proto_library(
name = "duration_py_pb2",
srcs = ["@com_google_protobuf//:duration_proto"],
)
py_proto_library(
name = "timestamp_py_pb2",
srcs = ["@com_google_protobuf//:timestamp_proto"],
)
py_test(
name = "import_test",
main = "helloworld.py",
srcs = ["helloworld.py"],
deps = [
":helloworld_py_pb2",
":helloworld_py_pb2_grpc",
":duration_py_pb2",
":timestamp_py_pb2",
],
python_version = "PY3",
)

@ -0,0 +1,5 @@
## Bazel Workspace Test
This directory houses a test ensuring that downstream projects can use
`@com_github_grpc_grpc//src/python/grpcio:grpcio`, `py_proto_library`, and
`py_grpc_library`.

@ -0,0 +1,17 @@
local_repository(
name = "com_github_grpc_grpc",
path = "../../..",
)
load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")
grpc_deps()
# TODO(https://github.com/grpc/grpc/issues/19835): Remove.
load("@upb//bazel:workspace_deps.bzl", "upb_deps")
upb_deps()
load("@build_bazel_rules_apple//apple:repositories.bzl", "apple_rules_dependencies")
apple_rules_dependencies()
load("@build_bazel_apple_support//lib:repositories.bzl", "apple_support_dependencies")
apple_support_dependencies()

@ -0,0 +1,43 @@
// Copyright 2019 The 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.
syntax = "proto3";
option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";
package helloworld;
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
google.protobuf.Timestamp request_initiation = 2;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
google.protobuf.Duration request_duration = 2;
}

@ -0,0 +1,73 @@
# Copyright 2019 the 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.
"""The Python implementation of the GRPC helloworld.Greeter client."""
import contextlib
import datetime
import logging
import unittest
import grpc
import duration_pb2
import helloworld_pb2
import helloworld_pb2_grpc
_HOST = 'localhost'
_SERVER_ADDRESS = '{}:0'.format(_HOST)
class Greeter(helloworld_pb2_grpc.GreeterServicer):
def SayHello(self, request, context):
request_in_flight = datetime.now() - request.request_initation.ToDatetime()
request_duration = duration_pb2.Duration()
request_duration.FromTimedelta(request_in_flight)
return helloworld_pb2.HelloReply(
message='Hello, %s!' % request.name,
request_duration=request_duration,
)
@contextlib.contextmanager
def _listening_server():
server = grpc.server(futures.ThreadPoolExecutor())
helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
port = server.add_insecure_port(_SERVER_ADDRESS)
server.start()
try:
yield port
finally:
server.stop(0)
class ImportTest(unittest.TestCase):
def run():
with _listening_server() as port:
with grpc.insecure_channel('{}:{}'.format(_HOST, port)) as channel:
stub = helloworld_pb2_grpc.GreeterStub(channel)
request_timestamp = timestamp_pb2.Timestamp()
request_timestamp.GetCurrentTime()
response = stub.SayHello(helloworld_pb2.HelloRequest(
name='you',
request_initiation=request_timestamp,
),
wait_for_ready=True)
self.assertEqual(response.message, "Hello, you!")
self.assertGreater(response.request_duration.microseconds, 0)
if __name__ == '__main__':
logging.basicConfig()
unittest.main()

@ -0,0 +1 @@
../../../../tools/bazel

@ -17,17 +17,6 @@ settings:
g_stands_for: ganges g_stands_for: ganges
version: 1.24.0-dev version: 1.24.0-dev
filegroups: filegroups:
- name: alts_proto
headers:
- src/core/tsi/alts/handshaker/altscontext.pb.h
- src/core/tsi/alts/handshaker/handshaker.pb.h
- src/core/tsi/alts/handshaker/transport_security_common.pb.h
src:
- src/core/tsi/alts/handshaker/altscontext.pb.c
- src/core/tsi/alts/handshaker/handshaker.pb.c
- src/core/tsi/alts/handshaker/transport_security_common.pb.c
uses:
- nanopb
- name: alts_tsi - name: alts_tsi
headers: headers:
- src/core/tsi/alts/crypt/gsec.h - src/core/tsi/alts/crypt/gsec.h
@ -73,21 +62,21 @@ filegroups:
- grpc_shadow_boringssl - grpc_shadow_boringssl
- name: alts_upb - name: alts_upb
headers: headers:
- src/core/ext/upb-generated/altscontext.upb.h - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h
- src/core/ext/upb-generated/handshaker.upb.h - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h
- src/core/ext/upb-generated/transport_security_common.upb.h - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h
src: src:
- src/core/ext/upb-generated/altscontext.upb.c - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c
- src/core/ext/upb-generated/handshaker.upb.c - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c
- src/core/ext/upb-generated/transport_security_common.upb.c - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c
uses:
- upb
- name: alts_util - name: alts_util
public_headers: public_headers:
- include/grpc/grpc_security.h - include/grpc/grpc_security.h
headers: headers:
- src/core/lib/security/credentials/alts/check_gcp_environment.h - src/core/lib/security/credentials/alts/check_gcp_environment.h
- src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h - src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h
- src/core/tsi/alts/handshaker/alts_handshaker_service_api.h
- src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h
- src/core/tsi/alts/handshaker/alts_tsi_utils.h - src/core/tsi/alts/handshaker/alts_tsi_utils.h
- src/core/tsi/alts/handshaker/transport_security_common_api.h - src/core/tsi/alts/handshaker/transport_security_common_api.h
src: src:
@ -98,15 +87,13 @@ filegroups:
- src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc - src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc
- src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc - src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc
- src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc - src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc
- src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc
- src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc
- src/core/tsi/alts/handshaker/alts_tsi_utils.cc - src/core/tsi/alts/handshaker/alts_tsi_utils.cc
- src/core/tsi/alts/handshaker/transport_security_common_api.cc - src/core/tsi/alts/handshaker/transport_security_common_api.cc
uses: uses:
- alts_proto - alts_upb
- grpc_base - grpc_base
- tsi_interface - tsi_interface
- nanopb - upb
- name: census - name: census
public_headers: public_headers:
- include/grpc/census.h - include/grpc/census.h
@ -121,8 +108,67 @@ filegroups:
- test/core/util/cmdline.cc - test/core/util/cmdline.cc
uses: uses:
- gpr_base_headers - gpr_base_headers
- name: envoy_ads_upb
headers:
- src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h
- src/core/ext/upb-generated/envoy/api/v2/cds.upb.h
- src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h
- src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h
- src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h
- src/core/ext/upb-generated/envoy/api/v2/eds.upb.h
- src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h
- src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h
- src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h
- src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h
src:
- src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c
- src/core/ext/upb-generated/envoy/api/v2/cds.upb.c
- src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c
- src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c
- src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c
- src/core/ext/upb-generated/envoy/api/v2/eds.upb.c
- src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c
- src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c
- src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c
- src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c
uses:
- envoy_core_upb
- envoy_type_upb
- google_api_upb
- proto_gen_validate_upb
- name: envoy_core_upb
headers:
- src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h
- src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h
- src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h
- src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h
- src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h
- src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h
src:
- src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c
- src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c
- src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c
- src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c
- src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c
- src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c
uses:
- envoy_type_upb
- google_api_upb
- proto_gen_validate_upb
- name: envoy_type_upb
headers:
- src/core/ext/upb-generated/envoy/type/percent.upb.h
- src/core/ext/upb-generated/envoy/type/range.upb.h
src:
- src/core/ext/upb-generated/envoy/type/percent.upb.c
- src/core/ext/upb-generated/envoy/type/range.upb.c
uses:
- google_api_upb
- proto_gen_validate_upb
- name: google_api_upb - name: google_api_upb
headers: headers:
- src/core/ext/upb-generated/google/api/annotations.upb.h
- src/core/ext/upb-generated/google/api/http.upb.h
- src/core/ext/upb-generated/google/protobuf/any.upb.h - src/core/ext/upb-generated/google/protobuf/any.upb.h
- src/core/ext/upb-generated/google/protobuf/descriptor.upb.h - src/core/ext/upb-generated/google/protobuf/descriptor.upb.h
- src/core/ext/upb-generated/google/protobuf/duration.upb.h - src/core/ext/upb-generated/google/protobuf/duration.upb.h
@ -130,7 +176,10 @@ filegroups:
- src/core/ext/upb-generated/google/protobuf/struct.upb.h - src/core/ext/upb-generated/google/protobuf/struct.upb.h
- src/core/ext/upb-generated/google/protobuf/timestamp.upb.h - src/core/ext/upb-generated/google/protobuf/timestamp.upb.h
- src/core/ext/upb-generated/google/protobuf/wrappers.upb.h - src/core/ext/upb-generated/google/protobuf/wrappers.upb.h
- src/core/ext/upb-generated/google/rpc/status.upb.h
src: src:
- src/core/ext/upb-generated/google/api/annotations.upb.c
- src/core/ext/upb-generated/google/api/http.upb.c
- src/core/ext/upb-generated/google/protobuf/any.upb.c - src/core/ext/upb-generated/google/protobuf/any.upb.c
- src/core/ext/upb-generated/google/protobuf/descriptor.upb.c - src/core/ext/upb-generated/google/protobuf/descriptor.upb.c
- src/core/ext/upb-generated/google/protobuf/duration.upb.c - src/core/ext/upb-generated/google/protobuf/duration.upb.c
@ -138,6 +187,9 @@ filegroups:
- src/core/ext/upb-generated/google/protobuf/struct.upb.c - src/core/ext/upb-generated/google/protobuf/struct.upb.c
- src/core/ext/upb-generated/google/protobuf/timestamp.upb.c - src/core/ext/upb-generated/google/protobuf/timestamp.upb.c
- src/core/ext/upb-generated/google/protobuf/wrappers.upb.c - src/core/ext/upb-generated/google/protobuf/wrappers.upb.c
- src/core/ext/upb-generated/google/rpc/status.upb.c
uses:
- upb
- name: gpr_base - name: gpr_base
src: src:
- src/core/lib/gpr/alloc.cc - src/core/lib/gpr/alloc.cc
@ -660,7 +712,7 @@ filegroups:
uses: uses:
- grpc_base - grpc_base
- grpc_deadline_filter - grpc_deadline_filter
- health_proto - grpc_health_upb
- name: grpc_client_idle_filter - name: grpc_client_idle_filter
src: src:
- src/core/ext/filters/client_idle/client_idle_filter.cc - src/core/ext/filters/client_idle/client_idle_filter.cc
@ -689,9 +741,11 @@ filegroups:
- grpc_base - grpc_base
- name: grpc_health_upb - name: grpc_health_upb
headers: headers:
- src/core/ext/upb-generated/grpc/health/v1/health.upb.c - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h
src: src:
- src/core/ext/upb-generated/grpc/health/v1/health.upb.h - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c
uses:
- upb
- name: grpc_http_filters - name: grpc_http_filters
headers: headers:
- src/core/ext/filters/http/client/http_client_filter.h - src/core/ext/filters/http/client/http_client_filter.h
@ -722,9 +776,9 @@ filegroups:
uses: uses:
- grpc_base - grpc_base
- grpc_client_channel - grpc_client_channel
- nanopb - grpc_lb_upb
- grpc_resolver_fake - grpc_resolver_fake
- grpclb_proto - upb
- name: grpc_lb_policy_grpclb_secure - name: grpc_lb_policy_grpclb_secure
headers: headers:
- src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h - src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h
@ -741,11 +795,11 @@ filegroups:
plugin: grpc_lb_policy_grpclb plugin: grpc_lb_policy_grpclb
uses: uses:
- grpc_base - grpc_base
- grpc_secure
- grpc_client_channel - grpc_client_channel
- nanopb - grpc_lb_upb
- grpc_resolver_fake - grpc_resolver_fake
- grpclb_proto - grpc_secure
- upb
- name: grpc_lb_policy_pick_first - name: grpc_lb_policy_pick_first
src: src:
- src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc - src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
@ -775,11 +829,11 @@ filegroups:
- src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc - src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc
plugin: grpc_lb_policy_xds plugin: grpc_lb_policy_xds
uses: uses:
- envoy_ads_upb
- grpc_base - grpc_base
- grpc_client_channel - grpc_client_channel
- nanopb
- grpc_resolver_fake - grpc_resolver_fake
- grpclb_proto - grpc_lb_upb
- name: grpc_lb_policy_xds_secure - name: grpc_lb_policy_xds_secure
headers: headers:
- src/core/ext/filters/client_channel/lb_policy/xds/xds.h - src/core/ext/filters/client_channel/lb_policy/xds/xds.h
@ -793,12 +847,12 @@ filegroups:
- src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc - src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc
plugin: grpc_lb_policy_xds plugin: grpc_lb_policy_xds
uses: uses:
- envoy_ads_upb
- grpc_base - grpc_base
- grpc_secure
- grpc_client_channel - grpc_client_channel
- nanopb
- grpc_resolver_fake - grpc_resolver_fake
- grpclb_proto - grpc_secure
- grpc_lb_upb
- name: grpc_lb_subchannel_list - name: grpc_lb_subchannel_list
headers: headers:
- src/core/ext/filters/client_channel/lb_policy/subchannel_list.h - src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
@ -807,11 +861,12 @@ filegroups:
- grpc_client_channel - grpc_client_channel
- name: grpc_lb_upb - name: grpc_lb_upb
headers: headers:
- src/core/ext/upb-generated/grpc/lb/v1/load_balancer.upb.h - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h
src: src:
- src/core/ext/upb-generated/grpc/lb/v1/load_balancer.upb.c - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c
uses: uses:
- google_api_upb - google_api_upb
- upb
- name: grpc_max_age_filter - name: grpc_max_age_filter
headers: headers:
- src/core/ext/filters/max_age/max_age_filter.h - src/core/ext/filters/max_age/max_age_filter.h
@ -1191,24 +1246,6 @@ filegroups:
uses: uses:
- grpc_base - grpc_base
- grpc_server_backward_compatibility - grpc_server_backward_compatibility
- name: grpclb_proto
headers:
- src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h
- src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h
- src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h
src:
- src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c
- src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c
- src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c
uses:
- nanopb
- name: health_proto
headers:
- src/core/ext/filters/client_channel/health/health.pb.h
src:
- src/core/ext/filters/client_channel/health/health.pb.c
uses:
- nanopb
- name: nanopb - name: nanopb
src: src:
- third_party/nanopb/pb_common.c - third_party/nanopb/pb_common.c
@ -1222,6 +1259,15 @@ filegroups:
- third_party/nanopb/pb_common.h - third_party/nanopb/pb_common.h
- third_party/nanopb/pb_decode.h - third_party/nanopb/pb_decode.h
- third_party/nanopb/pb_encode.h - third_party/nanopb/pb_encode.h
- name: proto_gen_validate_upb
headers:
- src/core/ext/upb-generated/gogoproto/gogo.upb.h
- src/core/ext/upb-generated/validate/validate.upb.h
src:
- src/core/ext/upb-generated/gogoproto/gogo.upb.c
- src/core/ext/upb-generated/validate/validate.upb.c
uses:
- google_api_upb
- name: transport_security_test_lib - name: transport_security_test_lib
build: test build: test
headers: headers:
@ -1540,11 +1586,11 @@ filegroups:
uses: uses:
- gpr_base_headers - gpr_base_headers
- grpc_base_headers - grpc_base_headers
- grpc_health_upb
- grpc_transport_inproc_headers - grpc_transport_inproc_headers
- grpc++_codegen_base - grpc++_codegen_base
- grpc++_internal_hdrs_only - grpc++_internal_hdrs_only
- nanopb_headers - nanopb_headers
- health_proto
- name: grpc++_config_proto - name: grpc++_config_proto
language: c++ language: c++
public_headers: public_headers:
@ -3970,15 +4016,6 @@ targets:
- alts_test_util - alts_test_util
- gpr - gpr
- grpc - grpc
- name: alts_handshaker_service_api_test
build: test
language: c++
src:
- test/core/tsi/alts/handshaker/alts_handshaker_service_api_test.cc
deps:
- alts_test_util
- gpr
- grpc
- name: alts_iovec_record_protocol_test - name: alts_iovec_record_protocol_test
build: test build: test
language: c++ language: c++
@ -5990,7 +6027,7 @@ targets:
build: test build: test
language: c++ language: c++
src: src:
- src/proto/grpc/lb/v1/load_balancer.proto - src/proto/grpc/lb/v2/xds_for_test.proto
- test/cpp/end2end/xds_end2end_test.cc - test/cpp/end2end/xds_end2end_test.cc
deps: deps:
- grpc++_test_util - grpc++_test_util
@ -6195,13 +6232,13 @@ defaults:
CXXFLAGS: $(W_NO_CXX14_COMPAT) CXXFLAGS: $(W_NO_CXX14_COMPAT)
global: global:
COREFLAGS: -fno-rtti -fno-exceptions COREFLAGS: -fno-rtti -fno-exceptions
CPPFLAGS: -g -Wall -Wextra -Werror -Wno-long-long -Wno-unused-parameter -DOSATOMIC_USE_INLINED=1 CPPFLAGS: -g -Wall -Wextra -Werror -Wno-unknown-warning-option -Wno-long-long
-Wno-deprecated-declarations -Ithird_party/nanopb -DPB_FIELD_32BIT -Wno-unused-parameter -Wno-deprecated-declarations -Wno-sign-conversion -Wno-shadow
-Wno-conversion -Wno-implicit-fallthrough -Wno-sign-compare -Wno-missing-field-initializers
-Wno-maybe-uninitialized -DPB_FIELD_32BIT -DOSATOMIC_USE_INLINED=1 -Ithird_party/nanopb
-Ithird_party/upb -Isrc/core/ext/upb-generated
CXXFLAGS: -Wnon-virtual-dtor CXXFLAGS: -Wnon-virtual-dtor
LDFLAGS: -g LDFLAGS: -g
upb:
CFLAGS: -Wno-sign-conversion -Wno-shadow -Wno-conversion -Wno-implicit-fallthrough
-Wno-sign-compare -Wno-missing-field-initializers
zlib: zlib:
CFLAGS: -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-implicit-function-declaration CFLAGS: -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-implicit-function-declaration
-Wno-implicit-fallthrough $(W_NO_SHIFT_NEGATIVE_VALUE) -fvisibility=hidden -Wno-implicit-fallthrough $(W_NO_SHIFT_NEGATIVE_VALUE) -fvisibility=hidden

@ -0,0 +1,18 @@
# Copyright 2019 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.
set(UPB_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/upb)
set(_gRPC_UPB_INCLUDE_DIR "${UPB_ROOT_DIR}")
set(_gRPC_UPB_GRPC_GENERATED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/core/ext/upb-generated")

@ -6,10 +6,12 @@ if test "$PHP_GRPC" != "no"; then
dnl # --with-grpc -> add include path dnl # --with-grpc -> add include path
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/include) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/core/ext/upb-generated)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/php/ext/grpc) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/php/ext/grpc)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/address_sorting/include) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/address_sorting/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/nanopb) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/nanopb)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/upb)
LIBS="-lpthread $LIBS" LIBS="-lpthread $LIBS"
@ -332,16 +334,17 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc \
src/core/tsi/alts/handshaker/alts_tsi_utils.cc \ src/core/tsi/alts/handshaker/alts_tsi_utils.cc \
src/core/tsi/alts/handshaker/transport_security_common_api.cc \ src/core/tsi/alts/handshaker/transport_security_common_api.cc \
src/core/tsi/alts/handshaker/altscontext.pb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \
src/core/tsi/alts/handshaker/handshaker.pb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \
src/core/tsi/alts/handshaker/transport_security_common.pb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \
third_party/nanopb/pb_common.c \ third_party/upb/upb/decode.c \
third_party/nanopb/pb_decode.c \ third_party/upb/upb/encode.c \
third_party/nanopb/pb_encode.c \ third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/core/tsi/transport_security.cc \ src/core/tsi/transport_security.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \
@ -374,7 +377,7 @@ if test "$PHP_GRPC" != "no"; then
src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel.cc \
src/core/ext/filters/client_channel/subchannel_pool_interface.cc \ src/core/ext/filters/client_channel/subchannel_pool_interface.cc \
src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \
src/core/ext/filters/client_channel/health/health.pb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
src/core/tsi/fake_transport_security.cc \ src/core/tsi/fake_transport_security.cc \
src/core/tsi/local_transport_security.cc \ src/core/tsi/local_transport_security.cc \
src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc \ src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc \
@ -393,14 +396,42 @@ if test "$PHP_GRPC" != "no"; then
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc \
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc \
src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc \
src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c \
src/core/ext/upb-generated/google/api/annotations.upb.c \
src/core/ext/upb-generated/google/api/http.upb.c \
src/core/ext/upb-generated/google/protobuf/any.upb.c \
src/core/ext/upb-generated/google/protobuf/descriptor.upb.c \
src/core/ext/upb-generated/google/protobuf/duration.upb.c \
src/core/ext/upb-generated/google/protobuf/empty.upb.c \
src/core/ext/upb-generated/google/protobuf/struct.upb.c \
src/core/ext/upb-generated/google/protobuf/timestamp.upb.c \
src/core/ext/upb-generated/google/protobuf/wrappers.upb.c \
src/core/ext/upb-generated/google/rpc/status.upb.c \
src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc \ src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc \
src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c \
src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c \
src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \
src/core/ext/filters/client_channel/lb_policy/xds/xds.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds.cc \
src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc \
src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc \
src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc \
src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c \
src/core/ext/upb-generated/envoy/api/v2/cds.upb.c \
src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c \
src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c \
src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c \
src/core/ext/upb-generated/envoy/api/v2/eds.upb.c \
src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c \
src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c \
src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c \
src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c \
src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c \
src/core/ext/upb-generated/envoy/type/percent.upb.c \
src/core/ext/upb-generated/envoy/type/range.upb.c \
src/core/ext/upb-generated/gogoproto/gogo.upb.c \
src/core/ext/upb-generated/validate/validate.upb.c \
src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc \ src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc \
src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc \ src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc \
src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc \
@ -693,8 +724,6 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/health) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/health)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/grpclb) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/grpclb)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/pick_first) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/pick_first)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/round_robin) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/round_robin)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/xds) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/xds)
@ -721,6 +750,22 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server/secure) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server/secure)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/transport) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/transport)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/inproc) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/inproc)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/auth)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/cluster)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/core)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/endpoint)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/discovery/v2)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/load_stats/v2)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/gogoproto)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/api)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/protobuf)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/rpc)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/src/proto/grpc/gcp)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/src/proto/grpc/health/v1)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/src/proto/grpc/lb/v1)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/validate)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/avl) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/avl)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/backoff) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/backoff)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/channel) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/channel)
@ -804,5 +849,5 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/x509v3) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/x509v3)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/ssl) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/ssl)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/third_party/fiat) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/third_party/fiat)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/nanopb) PHP_ADD_BUILD_DIR($ext_builddir/third_party/upb/upb)
fi fi

@ -307,16 +307,17 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_client_options.cc " + "src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_client_options.cc " +
"src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_options.cc " + "src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_options.cc " +
"src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_server_options.cc " + "src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_server_options.cc " +
"src\\core\\tsi\\alts\\handshaker\\alts_handshaker_service_api.cc " +
"src\\core\\tsi\\alts\\handshaker\\alts_handshaker_service_api_util.cc " +
"src\\core\\tsi\\alts\\handshaker\\alts_tsi_utils.cc " + "src\\core\\tsi\\alts\\handshaker\\alts_tsi_utils.cc " +
"src\\core\\tsi\\alts\\handshaker\\transport_security_common_api.cc " + "src\\core\\tsi\\alts\\handshaker\\transport_security_common_api.cc " +
"src\\core\\tsi\\alts\\handshaker\\altscontext.pb.c " + "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\altscontext.upb.c " +
"src\\core\\tsi\\alts\\handshaker\\handshaker.pb.c " + "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\handshaker.upb.c " +
"src\\core\\tsi\\alts\\handshaker\\transport_security_common.pb.c " + "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\transport_security_common.upb.c " +
"third_party\\nanopb\\pb_common.c " + "third_party\\upb\\upb\\decode.c " +
"third_party\\nanopb\\pb_decode.c " + "third_party\\upb\\upb\\encode.c " +
"third_party\\nanopb\\pb_encode.c " + "third_party\\upb\\upb\\msg.c " +
"third_party\\upb\\upb\\port.c " +
"third_party\\upb\\upb\\table.c " +
"third_party\\upb\\upb\\upb.c " +
"src\\core\\tsi\\transport_security.cc " + "src\\core\\tsi\\transport_security.cc " +
"src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create.cc " + "src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create.cc " +
"src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create_posix.cc " + "src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create_posix.cc " +
@ -349,7 +350,7 @@ if (PHP_GRPC != "no") {
"src\\core\\ext\\filters\\client_channel\\subchannel.cc " + "src\\core\\ext\\filters\\client_channel\\subchannel.cc " +
"src\\core\\ext\\filters\\client_channel\\subchannel_pool_interface.cc " + "src\\core\\ext\\filters\\client_channel\\subchannel_pool_interface.cc " +
"src\\core\\ext\\filters\\deadline\\deadline_filter.cc " + "src\\core\\ext\\filters\\deadline\\deadline_filter.cc " +
"src\\core\\ext\\filters\\client_channel\\health\\health.pb.c " + "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\health\\v1\\health.upb.c " +
"src\\core\\tsi\\fake_transport_security.cc " + "src\\core\\tsi\\fake_transport_security.cc " +
"src\\core\\tsi\\local_transport_security.cc " + "src\\core\\tsi\\local_transport_security.cc " +
"src\\core\\tsi\\ssl\\session_cache\\ssl_session_boringssl.cc " + "src\\core\\tsi\\ssl\\session_cache\\ssl_session_boringssl.cc " +
@ -368,14 +369,42 @@ if (PHP_GRPC != "no") {
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb_channel_secure.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb_channel_secure.cc " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb_client_stats.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb_client_stats.cc " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\load_balancer_api.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\load_balancer_api.cc " +
"src\\core\\ext\\upb-generated\\src\\proto\\grpc\\lb\\v1\\load_balancer.upb.c " +
"src\\core\\ext\\upb-generated\\google\\api\\annotations.upb.c " +
"src\\core\\ext\\upb-generated\\google\\api\\http.upb.c " +
"src\\core\\ext\\upb-generated\\google\\protobuf\\any.upb.c " +
"src\\core\\ext\\upb-generated\\google\\protobuf\\descriptor.upb.c " +
"src\\core\\ext\\upb-generated\\google\\protobuf\\duration.upb.c " +
"src\\core\\ext\\upb-generated\\google\\protobuf\\empty.upb.c " +
"src\\core\\ext\\upb-generated\\google\\protobuf\\struct.upb.c " +
"src\\core\\ext\\upb-generated\\google\\protobuf\\timestamp.upb.c " +
"src\\core\\ext\\upb-generated\\google\\protobuf\\wrappers.upb.c " +
"src\\core\\ext\\upb-generated\\google\\rpc\\status.upb.c " +
"src\\core\\ext\\filters\\client_channel\\resolver\\fake\\fake_resolver.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\fake\\fake_resolver.cc " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto\\grpc\\lb\\v1\\google\\protobuf\\duration.pb.c " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto\\grpc\\lb\\v1\\google\\protobuf\\timestamp.pb.c " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto\\grpc\\lb\\v1\\load_balancer.pb.c " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\xds.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\xds.cc " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\xds_channel_secure.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\xds_channel_secure.cc " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\xds_client_stats.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\xds_client_stats.cc " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\xds_load_balancer_api.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\xds_load_balancer_api.cc " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\cert.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cds.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\circuit_breaker.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\outlier_detection.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\discovery.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\eds.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\endpoint.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\load_report.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v2\\ads.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v2\\lrs.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\address.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\base.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\config_source.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\grpc_service.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\health_check.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\protocol.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\type\\percent.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\type\\range.upb.c " +
"src\\core\\ext\\upb-generated\\gogoproto\\gogo.upb.c " +
"src\\core\\ext\\upb-generated\\validate\\validate.upb.c " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\pick_first\\pick_first.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\pick_first\\pick_first.cc " +
"src\\core\\ext\\filters\\client_channel\\lb_policy\\round_robin\\round_robin.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\round_robin\\round_robin.cc " +
"src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\dns_resolver_ares.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\dns_resolver_ares.cc " +
@ -679,11 +708,13 @@ if (PHP_GRPC != "no") {
"/DPB_FIELD_32BIT "+ "/DPB_FIELD_32BIT "+
"/I"+configure_module_dirname+" "+ "/I"+configure_module_dirname+" "+
"/I"+configure_module_dirname+"\\include "+ "/I"+configure_module_dirname+"\\include "+
"/I"+configure_module_dirname+"\\src\\core\\ext\\upb-generated "+
"/I"+configure_module_dirname+"\\src\\php\\ext\\grpc "+ "/I"+configure_module_dirname+"\\src\\php\\ext\\grpc "+
"/I"+configure_module_dirname+"\\third_party\\boringssl\\include "+
"/I"+configure_module_dirname+"\\third_party\\zlib "+
"/I"+configure_module_dirname+"\\third_party\\address_sorting\\include "+ "/I"+configure_module_dirname+"\\third_party\\address_sorting\\include "+
"/I"+configure_module_dirname+"\\third_party\\nanopb"); "/I"+configure_module_dirname+"\\third_party\\boringssl\\include "+
"/I"+configure_module_dirname+"\\third_party\\nanopb "+
"/I"+configure_module_dirname+"\\third_party\\upb "+
"/I"+configure_module_dirname+"\\third_party\\zlib ");
base_dir = get_define('BUILD_DIR'); base_dir = get_define('BUILD_DIR');
FSO.CreateFolder(base_dir+"\\ext"); FSO.CreateFolder(base_dir+"\\ext");
@ -698,12 +729,6 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\health"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\health");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto\\grpc");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto\\grpc\\lb");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto\\grpc\\lb\\v1");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto\\grpc\\lb\\v1\\google");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto\\grpc\\lb\\v1\\google\\protobuf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\pick_first"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\pick_first");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\round_robin"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\round_robin");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\xds"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\xds");
@ -733,6 +758,34 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\server\\secure"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\server\\secure");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\transport"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\transport");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\inproc"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\inproc");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\discovery");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v2");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\load_stats");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v2");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\gogoproto");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google\\api");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google\\protobuf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google\\rpc");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\health");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\health\\v1");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\lb");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\lb\\v1");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\validate");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\avl"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\avl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\backoff"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\backoff");
@ -826,7 +879,8 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\ssl"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\ssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\third_party"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\third_party");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\third_party\\fiat"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\third_party\\fiat");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\nanopb"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb\\upb");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\zlib"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\zlib");
_build_dirs = new Array(); _build_dirs = new Array();
for (i = 0; i < build_dirs.length; i++) { for (i = 0; i < build_dirs.length; i++) {

@ -18,7 +18,8 @@ package(default_visibility = ["//visibility:public"])
load("//bazel:grpc_build_system.bzl", "grpc_proto_library") load("//bazel:grpc_build_system.bzl", "grpc_proto_library")
load("//bazel:cc_grpc_library.bzl", "cc_grpc_library") load("//bazel:cc_grpc_library.bzl", "cc_grpc_library")
load("//bazel:python_rules.bzl", "py_proto_library") load("//bazel:python_rules.bzl", "py_proto_library", "py_grpc_library")
load("@grpc_python_dependencies//:requirements.bzl", "requirement")
grpc_proto_library( grpc_proto_library(
name = "auth_sample", name = "auth_sample",
@ -60,13 +61,19 @@ grpc_proto_library(
) )
proto_library( proto_library(
name = "helloworld_proto_descriptor", name = "protos/helloworld_proto",
srcs = ["protos/helloworld.proto"], srcs = ["protos/helloworld.proto"],
) )
py_proto_library( py_proto_library(
name = "py_helloworld", name = "helloworld_py_pb2",
deps = [":helloworld_proto_descriptor"], srcs = [":protos/helloworld_proto"],
)
py_grpc_library(
name = "helloworld_py_pb2_grpc",
srcs = [":protos/helloworld_proto"],
deps = [":helloworld_py_pb2"],
) )
cc_binary( cc_binary(

@ -36,7 +36,8 @@ py_binary(
deps = [ deps = [
":_credentials", ":_credentials",
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
], ],
) )
@ -47,8 +48,8 @@ py_binary(
deps = [ deps = [
":_credentials", ":_credentials",
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
], ],
) )
@ -57,7 +58,7 @@ py_test(
srcs = ["test/_auth_example_test.py"], srcs = ["test/_auth_example_test.py"],
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
":customized_auth_client", ":customized_auth_client",
":customized_auth_server", ":customized_auth_server",
":_credentials", ":_credentials",

@ -29,8 +29,6 @@ from examples.python.auth import _credentials
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
_LOGGER.setLevel(logging.INFO) _LOGGER.setLevel(logging.INFO)
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
_SERVER_ADDR_TEMPLATE = 'localhost:%d' _SERVER_ADDR_TEMPLATE = 'localhost:%d'
_SIGNATURE_HEADER_KEY = 'x-signature' _SIGNATURE_HEADER_KEY = 'x-signature'

@ -20,7 +20,6 @@ from __future__ import print_function
import argparse import argparse
import contextlib import contextlib
import logging import logging
import time
from concurrent import futures from concurrent import futures
import grpc import grpc
@ -31,8 +30,6 @@ from examples.python.auth import _credentials
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
_LOGGER.setLevel(logging.INFO) _LOGGER.setLevel(logging.INFO)
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
_LISTEN_ADDRESS_TEMPLATE = 'localhost:%d' _LISTEN_ADDRESS_TEMPLATE = 'localhost:%d'
_SIGNATURE_HEADER_KEY = 'x-signature' _SIGNATURE_HEADER_KEY = 'x-signature'
@ -85,7 +82,7 @@ def run_server(port):
server.start() server.start()
try: try:
yield port yield server, port
finally: finally:
server.stop(0) server.stop(0)
@ -96,13 +93,9 @@ def main():
'--port', nargs='?', type=int, default=50051, help='the listening port') '--port', nargs='?', type=int, default=50051, help='the listening port')
args = parser.parse_args() args = parser.parse_args()
with run_server(args.port) as port: with run_server(args.port) as (server, port):
logging.info('Server is listening at port :%d', port) logging.info('Server is listening at port :%d', port)
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
pass
if __name__ == '__main__': if __name__ == '__main__':

@ -30,20 +30,20 @@ _SERVER_ADDR_TEMPLATE = 'localhost:%d'
class AuthExampleTest(unittest.TestCase): class AuthExampleTest(unittest.TestCase):
def test_successful_call(self): def test_successful_call(self):
with customized_auth_server.run_server(0) as port: with customized_auth_server.run_server(0) as (_, port):
with customized_auth_client.create_client_channel( with customized_auth_client.create_client_channel(
_SERVER_ADDR_TEMPLATE % port) as channel: _SERVER_ADDR_TEMPLATE % port) as channel:
customized_auth_client.send_rpc(channel) customized_auth_client.send_rpc(channel)
# No unhandled exception raised, test passed! # No unhandled exception raised, test passed!
def test_no_channel_credential(self): def test_no_channel_credential(self):
with customized_auth_server.run_server(0) as port: with customized_auth_server.run_server(0) as (_, port):
with grpc.insecure_channel(_SERVER_ADDR_TEMPLATE % port) as channel: with grpc.insecure_channel(_SERVER_ADDR_TEMPLATE % port) as channel:
resp = customized_auth_client.send_rpc(channel) resp = customized_auth_client.send_rpc(channel)
self.assertEqual(resp.code(), grpc.StatusCode.UNAVAILABLE) self.assertEqual(resp.code(), grpc.StatusCode.UNAVAILABLE)
def test_no_call_credential(self): def test_no_call_credential(self):
with customized_auth_server.run_server(0) as port: with customized_auth_server.run_server(0) as (_, port):
channel_credential = grpc.ssl_channel_credentials( channel_credential = grpc.ssl_channel_credentials(
_credentials.ROOT_CERTIFICATE) _credentials.ROOT_CERTIFICATE)
with grpc.secure_channel(_SERVER_ADDR_TEMPLATE % port, with grpc.secure_channel(_SERVER_ADDR_TEMPLATE % port,

@ -15,7 +15,7 @@
# limitations under the License. # limitations under the License.
load("@grpc_python_dependencies//:requirements.bzl", "requirement") load("@grpc_python_dependencies//:requirements.bzl", "requirement")
load("//bazel:python_rules.bzl", "py_proto_library") load("//bazel:python_rules.bzl", "py_proto_library", "py_grpc_library")
package(default_testonly = 1) package(default_testonly = 1)
@ -25,9 +25,14 @@ proto_library(
) )
py_proto_library( py_proto_library(
name = "hash_name_proto_pb2", name = "hash_name_py_pb2",
deps = [":hash_name_proto"], srcs = [":hash_name_proto"],
well_known_protos = False, )
py_grpc_library(
name = "hash_name_py_pb2_grpc",
srcs = [":hash_name_proto"],
deps = [":hash_name_py_pb2"],
) )
py_binary( py_binary(
@ -35,8 +40,9 @@ py_binary(
srcs = ["client.py"], srcs = ["client.py"],
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
":hash_name_proto_pb2", ":hash_name_py_pb2",
requirement("six"), ":hash_name_py_pb2_grpc",
"//external:six"
], ],
srcs_version = "PY2AND3", srcs_version = "PY2AND3",
) )
@ -46,7 +52,7 @@ py_library(
srcs = ["search.py"], srcs = ["search.py"],
srcs_version = "PY2AND3", srcs_version = "PY2AND3",
deps = [ deps = [
":hash_name_proto_pb2", ":hash_name_py_pb2",
], ],
) )
@ -55,10 +61,10 @@ py_binary(
srcs = ["server.py"], srcs = ["server.py"],
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
":hash_name_proto_pb2", ":hash_name_py_pb2",
":search", ":search",
] + select({ ] + select({
"//conditions:default": [requirement("futures")], "//conditions:default": ["@futures//:futures"],
"//:python3": [], "//:python3": [],
}), }),
srcs_version = "PY2AND3", srcs_version = "PY2AND3",

@ -19,9 +19,7 @@ from __future__ import print_function
from concurrent import futures from concurrent import futures
import argparse import argparse
import contextlib
import logging import logging
import time
import threading import threading
import grpc import grpc
@ -32,7 +30,6 @@ from examples.python.cancellation import hash_name_pb2_grpc
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
_SERVER_HOST = 'localhost' _SERVER_HOST = 'localhost'
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
_DESCRIPTION = "A server for finding hashes similar to names." _DESCRIPTION = "A server for finding hashes similar to names."
@ -88,7 +85,6 @@ class HashFinder(hash_name_pb2_grpc.HashFinderServicer):
_LOGGER.debug("Regained servicer thread.") _LOGGER.debug("Regained servicer thread.")
@contextlib.contextmanager
def _running_server(port, maximum_hashes): def _running_server(port, maximum_hashes):
# We use only a single servicer thread here to demonstrate that, if managed # We use only a single servicer thread here to demonstrate that, if managed
# carefully, cancelled RPCs can need not continue occupying servicers # carefully, cancelled RPCs can need not continue occupying servicers
@ -101,12 +97,7 @@ def _running_server(port, maximum_hashes):
actual_port = server.add_insecure_port(address) actual_port = server.add_insecure_port(address)
server.start() server.start()
print("Server listening at '{}'".format(address)) print("Server listening at '{}'".format(address))
try: return server
yield actual_port
except KeyboardInterrupt:
pass
finally:
server.stop(None)
def main(): def main():
@ -124,9 +115,8 @@ def main():
nargs='?', nargs='?',
help='The maximum number of hashes to search before cancelling.') help='The maximum number of hashes to search before cancelling.')
args = parser.parse_args() args = parser.parse_args()
with _running_server(args.port, args.maximum_hashes): server = _running_server(args.port, args.maximum_hashes)
while True: server.wait_for_termination()
time.sleep(_ONE_DAY_IN_SECONDS)
if __name__ == "__main__": if __name__ == "__main__":

@ -17,7 +17,8 @@ py_binary(
srcs = ["server.py"], srcs = ["server.py"],
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
], ],
srcs_version = "PY2AND3", srcs_version = "PY2AND3",
) )
@ -27,7 +28,8 @@ py_binary(
srcs = ["client.py"], srcs = ["client.py"],
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
], ],
srcs_version = "PY2AND3", srcs_version = "PY2AND3",
) )

@ -21,7 +21,6 @@ from concurrent import futures
import argparse import argparse
import logging import logging
import threading import threading
import time
import grpc import grpc
from examples import helloworld_pb2 from examples import helloworld_pb2
@ -36,7 +35,6 @@ _COMPRESSION_OPTIONS = {
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
_SERVER_HOST = 'localhost' _SERVER_HOST = 'localhost'
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
class Greeter(helloworld_pb2_grpc.GreeterServicer): class Greeter(helloworld_pb2_grpc.GreeterServicer):
@ -72,11 +70,7 @@ def run_server(server_compression, no_compress_every_n, port):
server.add_insecure_port(address) server.add_insecure_port(address)
server.start() server.start()
print("Server listening at '{}'".format(address)) print("Server listening at '{}'".format(address))
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(None)
def main(): def main():

@ -21,7 +21,8 @@ py_binary(
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//src/python/grpcio_channelz/grpc_channelz/v1:grpc_channelz", "//src/python/grpcio_channelz/grpc_channelz/v1:grpc_channelz",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
], ],
) )
@ -31,7 +32,8 @@ py_binary(
srcs = ["send_message.py"], srcs = ["send_message.py"],
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
], ],
) )
@ -51,9 +53,10 @@ py_test(
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//src/python/grpcio_channelz/grpc_channelz/v1:grpc_channelz", "//src/python/grpcio_channelz/grpc_channelz/v1:grpc_channelz",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
":debug_server", ":debug_server",
":send_message", ":send_message",
":get_stats", ":get_stats",
], ],
) )

@ -19,7 +19,6 @@ from __future__ import print_function
import argparse import argparse
import logging import logging
import time
from concurrent import futures from concurrent import futures
import random import random
@ -32,7 +31,6 @@ from examples import helloworld_pb2_grpc
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
_LOGGER.setLevel(logging.INFO) _LOGGER.setLevel(logging.INFO)
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
_RANDOM_FAILURE_RATE = 0.3 _RANDOM_FAILURE_RATE = 0.3
@ -78,11 +76,7 @@ def main():
server = create_server(addr=args.addr, failure_rate=args.failure_rate) server = create_server(addr=args.addr, failure_rate=args.failure_rate)
server.start() server.start()
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__': if __name__ == '__main__':

@ -20,8 +20,14 @@ from __future__ import print_function
import logging import logging
import argparse import argparse
import grpc import grpc
from grpc_channelz.v1 import channelz_pb2
from grpc_channelz.v1 import channelz_pb2_grpc # TODO(https://github.com/grpc/grpc/issues/19863): Remove.
try:
from src.python.grpcio_channelz.grpc_channelz.v1 import channelz_pb2
from src.python.grpcio_channelz.grpc_channelz.v1 import channelz_pb2_grpc
except ImportError:
from grpc_channelz.v1 import channelz_pb2
from grpc_channelz.v1 import channelz_pb2_grpc
def run(addr): def run(addr):

@ -21,7 +21,8 @@ py_library(
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//src/python/grpcio_status/grpc_status:grpc_status", "//src/python/grpcio_status/grpc_status:grpc_status",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
requirement('googleapis-common-protos'), requirement('googleapis-common-protos'),
], ],
) )
@ -33,7 +34,8 @@ py_library(
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//src/python/grpcio_status/grpc_status:grpc_status", "//src/python/grpcio_status/grpc_status:grpc_status",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
] + select({ ] + select({
"//conditions:default": [requirement("futures")], "//conditions:default": [requirement("futures")],
"//:python3": [], "//:python3": [],

@ -14,7 +14,6 @@
"""This example sends out rich error status from server-side.""" """This example sends out rich error status from server-side."""
from concurrent import futures from concurrent import futures
import time
import logging import logging
import threading import threading
@ -27,8 +26,6 @@ from google.rpc import code_pb2, status_pb2, error_details_pb2
from examples import helloworld_pb2 from examples import helloworld_pb2
from examples import helloworld_pb2_grpc from examples import helloworld_pb2_grpc
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
def create_greet_limit_exceed_error_status(name): def create_greet_limit_exceed_error_status(name):
detail = any_pb2.Any() detail = any_pb2.Any()
@ -73,11 +70,7 @@ def create_server(server_address):
def serve(server): def serve(server):
server.start() server.start()
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(None)
def main(): def main():

@ -14,7 +14,6 @@
"""The Python implementation of the GRPC helloworld.Greeter server.""" """The Python implementation of the GRPC helloworld.Greeter server."""
from concurrent import futures from concurrent import futures
import time
import logging import logging
import grpc import grpc
@ -22,8 +21,6 @@ import grpc
import helloworld_pb2 import helloworld_pb2
import helloworld_pb2_grpc import helloworld_pb2_grpc
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
class Greeter(helloworld_pb2_grpc.GreeterServicer): class Greeter(helloworld_pb2_grpc.GreeterServicer):
@ -36,11 +33,7 @@ def serve():
helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port('[::]:50051') server.add_insecure_port('[::]:50051')
server.start() server.start()
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__': if __name__ == '__main__':

@ -14,7 +14,6 @@
"""The reflection-enabled version of gRPC helloworld.Greeter server.""" """The reflection-enabled version of gRPC helloworld.Greeter server."""
from concurrent import futures from concurrent import futures
import time
import logging import logging
import grpc import grpc
@ -23,8 +22,6 @@ from grpc_reflection.v1alpha import reflection
import helloworld_pb2 import helloworld_pb2
import helloworld_pb2_grpc import helloworld_pb2_grpc
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
class Greeter(helloworld_pb2_grpc.GreeterServicer): class Greeter(helloworld_pb2_grpc.GreeterServicer):
@ -42,11 +39,7 @@ def serve():
reflection.enable_server_reflection(SERVICE_NAMES, server) reflection.enable_server_reflection(SERVICE_NAMES, server)
server.add_insecure_port('[::]:50051') server.add_insecure_port('[::]:50051')
server.start() server.start()
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__': if __name__ == '__main__':

@ -14,7 +14,6 @@
"""The Python implementation of the GRPC helloworld.Greeter server.""" """The Python implementation of the GRPC helloworld.Greeter server."""
from concurrent import futures from concurrent import futures
import time
import logging import logging
import grpc import grpc
@ -23,8 +22,6 @@ import helloworld_pb2
import helloworld_pb2_grpc import helloworld_pb2_grpc
from request_header_validator_interceptor import RequestHeaderValidatorInterceptor from request_header_validator_interceptor import RequestHeaderValidatorInterceptor
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
class Greeter(helloworld_pb2_grpc.GreeterServicer): class Greeter(helloworld_pb2_grpc.GreeterServicer):
@ -42,11 +39,7 @@ def serve():
helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port('[::]:50051') server.add_insecure_port('[::]:50051')
server.start() server.start()
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__': if __name__ == '__main__':

@ -15,7 +15,6 @@
from __future__ import print_function from __future__ import print_function
from concurrent import futures from concurrent import futures
import time
import logging import logging
import grpc import grpc
@ -23,8 +22,6 @@ import grpc
import helloworld_pb2 import helloworld_pb2
import helloworld_pb2_grpc import helloworld_pb2_grpc
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
class Greeter(helloworld_pb2_grpc.GreeterServicer): class Greeter(helloworld_pb2_grpc.GreeterServicer):
@ -44,11 +41,7 @@ def serve():
helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port('[::]:50051') server.add_insecure_port('[::]:50051')
server.start() server.start()
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__': if __name__ == '__main__':

@ -26,8 +26,6 @@ import route_guide_pb2
import route_guide_pb2_grpc import route_guide_pb2_grpc
import route_guide_resources import route_guide_resources
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
def _get_feature(feature_db, point): def _get_feature(feature_db, point):
"""Returns Feature at given location or None.""" """Returns Feature at given location or None."""
@ -129,11 +127,7 @@ def serve():
_RouteGuideServicer(), server) _RouteGuideServicer(), server)
server.add_insecure_port('[::]:50051') server.add_insecure_port('[::]:50051')
server.start() server.start()
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__': if __name__ == '__main__':

@ -14,8 +14,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
load("@grpc_python_dependencies//:requirements.bzl", "requirement") load("//bazel:python_rules.bzl", "py_proto_library", "py_grpc_library")
load("//bazel:python_rules.bzl", "py_proto_library")
proto_library( proto_library(
name = "prime_proto", name = "prime_proto",
@ -24,8 +23,13 @@ proto_library(
py_proto_library( py_proto_library(
name = "prime_proto_pb2", name = "prime_proto_pb2",
deps = [":prime_proto"], srcs = [":prime_proto"],
well_known_protos = False, )
py_grpc_library(
name = "prime_proto_pb2_grpc",
srcs = [":prime_proto"],
deps = [":prime_proto_pb2"],
) )
py_binary( py_binary(
@ -35,6 +39,7 @@ py_binary(
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
":prime_proto_pb2", ":prime_proto_pb2",
":prime_proto_pb2_grpc",
], ],
srcs_version = "PY3", srcs_version = "PY3",
) )
@ -45,9 +50,10 @@ py_binary(
srcs = ["server.py"], srcs = ["server.py"],
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
":prime_proto_pb2" ":prime_proto_pb2",
":prime_proto_pb2_grpc",
] + select({ ] + select({
"//conditions:default": [requirement("futures")], "//conditions:default": ["@futures//:futures"],
"//:python3": [], "//:python3": [],
}), }),
srcs_version = "PY3", srcs_version = "PY3",

@ -24,8 +24,6 @@ import route_guide_pb2
import route_guide_pb2_grpc import route_guide_pb2_grpc
import route_guide_resources import route_guide_resources
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
def get_feature(feature_db, point): def get_feature(feature_db, point):
"""Returns Feature at given location or None.""" """Returns Feature at given location or None."""
@ -119,11 +117,7 @@ def serve():
RouteGuideServicer(), server) RouteGuideServicer(), server)
server.add_insecure_port('[::]:50051') server.add_insecure_port('[::]:50051')
server.start() server.start()
try: server.wait_for_termination()
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__': if __name__ == '__main__':

@ -20,7 +20,8 @@ py_library(
srcs = ["wait_for_ready_example.py"], srcs = ["wait_for_ready_example.py"],
deps = [ deps = [
"//src/python/grpcio/grpc:grpcio", "//src/python/grpcio/grpc:grpcio",
"//examples:py_helloworld", "//examples:helloworld_py_pb2",
"//examples:helloworld_py_pb2_grpc",
], ],
) )

@ -28,8 +28,6 @@ from examples import helloworld_pb2_grpc
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
_LOGGER.setLevel(logging.INFO) _LOGGER.setLevel(logging.INFO)
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
@contextmanager @contextmanager
def get_free_loopback_tcp_port(): def get_free_loopback_tcp_port():

@ -228,6 +228,10 @@ Pod::Spec.new do |s|
'src/cpp/server/health/default_health_check_service.h', 'src/cpp/server/health/default_health_check_service.h',
'src/cpp/server/thread_pool_interface.h', 'src/cpp/server/thread_pool_interface.h',
'src/cpp/thread_manager/thread_manager.h', 'src/cpp/thread_manager/thread_manager.h',
'third_party/nanopb/pb.h',
'third_party/nanopb/pb_common.h',
'third_party/nanopb/pb_decode.h',
'third_party/nanopb/pb_encode.h',
'src/cpp/client/insecure_credentials.cc', 'src/cpp/client/insecure_credentials.cc',
'src/cpp/client/secure_credentials.cc', 'src/cpp/client/secure_credentials.cc',
'src/cpp/common/auth_property_iterator.cc', 'src/cpp/common/auth_property_iterator.cc',
@ -380,13 +384,19 @@ Pod::Spec.new do |s|
'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h',
'src/core/lib/security/credentials/alts/check_gcp_environment.h', 'src/core/lib/security/credentials/alts/check_gcp_environment.h',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h',
'src/core/tsi/alts/handshaker/alts_tsi_utils.h', 'src/core/tsi/alts/handshaker/alts_tsi_utils.h',
'src/core/tsi/alts/handshaker/transport_security_common_api.h', 'src/core/tsi/alts/handshaker/transport_security_common_api.h',
'src/core/tsi/alts/handshaker/altscontext.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
'src/core/tsi/alts/handshaker/handshaker.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h',
'src/core/tsi/alts/handshaker/transport_security_common.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h',
'third_party/upb/upb/decode.h',
'third_party/upb/upb/encode.h',
'third_party/upb/upb/generated_util.h',
'third_party/upb/upb/msg.h',
'third_party/upb/upb/port_def.inc',
'third_party/upb/upb/port_undef.inc',
'third_party/upb/upb/table.int.h',
'third_party/upb/upb/upb.h',
'src/core/tsi/transport_security.h', 'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h', 'src/core/tsi/transport_security_interface.h',
'src/core/ext/transport/chttp2/client/authority.h', 'src/core/ext/transport/chttp2/client/authority.h',
@ -419,7 +429,7 @@ Pod::Spec.new do |s|
'src/core/ext/filters/client_channel/subchannel_interface.h', 'src/core/ext/filters/client_channel/subchannel_interface.h',
'src/core/ext/filters/client_channel/subchannel_pool_interface.h', 'src/core/ext/filters/client_channel/subchannel_pool_interface.h',
'src/core/ext/filters/deadline/deadline_filter.h', 'src/core/ext/filters/deadline/deadline_filter.h',
'src/core/ext/filters/client_channel/health/health.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h',
'src/core/tsi/fake_transport_security.h', 'src/core/tsi/fake_transport_security.h',
'src/core/tsi/local_transport_security.h', 'src/core/tsi/local_transport_security.h',
'src/core/tsi/ssl/session_cache/ssl_session.h', 'src/core/tsi/ssl/session_cache/ssl_session.h',
@ -578,13 +588,41 @@ Pod::Spec.new do |s|
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h',
'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h',
'src/core/ext/upb-generated/google/api/annotations.upb.h',
'src/core/ext/upb-generated/google/api/http.upb.h',
'src/core/ext/upb-generated/google/protobuf/any.upb.h',
'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h',
'src/core/ext/upb-generated/google/protobuf/duration.upb.h',
'src/core/ext/upb-generated/google/protobuf/empty.upb.h',
'src/core/ext/upb-generated/google/protobuf/struct.upb.h',
'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h',
'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h',
'src/core/ext/upb-generated/google/rpc/status.upb.h',
'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h',
'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h',
'src/core/ext/upb-generated/envoy/type/percent.upb.h',
'src/core/ext/upb-generated/envoy/type/range.upb.h',
'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
'src/core/ext/upb-generated/validate/validate.upb.h',
'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h', 'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h',
'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h',
'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h',
@ -781,8 +819,16 @@ Pod::Spec.new do |s|
'src/core/lib/transport/transport_impl.h', 'src/core/lib/transport/transport_impl.h',
'src/core/lib/uri/uri_parser.h', 'src/core/lib/uri/uri_parser.h',
'src/core/lib/debug/trace.h', 'src/core/lib/debug/trace.h',
'src/core/ext/transport/inproc/inproc_transport.h', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h',
'src/core/ext/filters/client_channel/health/health.pb.h' 'third_party/upb/upb/decode.h',
'third_party/upb/upb/encode.h',
'third_party/upb/upb/generated_util.h',
'third_party/upb/upb/msg.h',
'third_party/upb/upb/port_def.inc',
'third_party/upb/upb/port_undef.inc',
'third_party/upb/upb/table.int.h',
'third_party/upb/upb/upb.h',
'src/core/ext/transport/inproc/inproc_transport.h'
end end
s.subspec 'Protobuf' do |ss| s.subspec 'Protobuf' do |ss|
@ -801,5 +847,9 @@ Pod::Spec.new do |s|
find src/cpp/ -type f -path '*.grpc_back' -print0 | xargs -0 rm find src/cpp/ -type f -path '*.grpc_back' -print0 | xargs -0 rm
find src/core/ -type f ! -path '*.grpc_back' -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "(pb(_.*)?\\.h)";#include <nanopb/\\1>;g' find src/core/ -type f ! -path '*.grpc_back' -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "(pb(_.*)?\\.h)";#include <nanopb/\\1>;g'
find src/core/ -type f -path '*.grpc_back' -print0 | xargs -0 rm find src/core/ -type f -path '*.grpc_back' -print0 | xargs -0 rm
find src/core/ third_party/upb/ -type f \\( -name '*.h' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "upb/(.*)";#if COCOAPODS==1\\\n #include "third_party/upb/upb/\\1"\\\n#else\\\n #include "upb/\\1"\\\n#endif;g'
find src/core/ third_party/upb/ -type f -name '*.grpc_back' -print0 | xargs -0 rm
find src/core/ src/cpp/ -type f \\( -name '*.h' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "(.*).upb.h";#if COCOAPODS==1\\\n #include "src/core/ext/upb-generated/\\1.upb.h"\\\n#else\\\n #include "\\1.upb.h"\\\n#endif;g'
find src/core/ src/cpp/ -type f -name '*.grpc_back' -print0 | xargs -0 rm
END_OF_COMMAND END_OF_COMMAND
end end

@ -41,7 +41,8 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0' s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9' s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0' s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
s.requires_arc = false s.requires_arc = false
name = 'grpc' name = 'grpc'
@ -335,13 +336,19 @@ Pod::Spec.new do |s|
'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h',
'src/core/lib/security/credentials/alts/check_gcp_environment.h', 'src/core/lib/security/credentials/alts/check_gcp_environment.h',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h',
'src/core/tsi/alts/handshaker/alts_tsi_utils.h', 'src/core/tsi/alts/handshaker/alts_tsi_utils.h',
'src/core/tsi/alts/handshaker/transport_security_common_api.h', 'src/core/tsi/alts/handshaker/transport_security_common_api.h',
'src/core/tsi/alts/handshaker/altscontext.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
'src/core/tsi/alts/handshaker/handshaker.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h',
'src/core/tsi/alts/handshaker/transport_security_common.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h',
'third_party/upb/upb/decode.h',
'third_party/upb/upb/encode.h',
'third_party/upb/upb/generated_util.h',
'third_party/upb/upb/msg.h',
'third_party/upb/upb/port_def.inc',
'third_party/upb/upb/port_undef.inc',
'third_party/upb/upb/table.int.h',
'third_party/upb/upb/upb.h',
'src/core/tsi/transport_security.h', 'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h', 'src/core/tsi/transport_security_interface.h',
'src/core/ext/transport/chttp2/client/authority.h', 'src/core/ext/transport/chttp2/client/authority.h',
@ -374,7 +381,7 @@ Pod::Spec.new do |s|
'src/core/ext/filters/client_channel/subchannel_interface.h', 'src/core/ext/filters/client_channel/subchannel_interface.h',
'src/core/ext/filters/client_channel/subchannel_pool_interface.h', 'src/core/ext/filters/client_channel/subchannel_pool_interface.h',
'src/core/ext/filters/deadline/deadline_filter.h', 'src/core/ext/filters/deadline/deadline_filter.h',
'src/core/ext/filters/client_channel/health/health.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h',
'src/core/tsi/fake_transport_security.h', 'src/core/tsi/fake_transport_security.h',
'src/core/tsi/local_transport_security.h', 'src/core/tsi/local_transport_security.h',
'src/core/tsi/ssl/session_cache/ssl_session.h', 'src/core/tsi/ssl/session_cache/ssl_session.h',
@ -533,13 +540,41 @@ Pod::Spec.new do |s|
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h',
'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h',
'src/core/ext/upb-generated/google/api/annotations.upb.h',
'src/core/ext/upb-generated/google/api/http.upb.h',
'src/core/ext/upb-generated/google/protobuf/any.upb.h',
'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h',
'src/core/ext/upb-generated/google/protobuf/duration.upb.h',
'src/core/ext/upb-generated/google/protobuf/empty.upb.h',
'src/core/ext/upb-generated/google/protobuf/struct.upb.h',
'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h',
'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h',
'src/core/ext/upb-generated/google/rpc/status.upb.h',
'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h',
'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h',
'src/core/ext/upb-generated/envoy/type/percent.upb.h',
'src/core/ext/upb-generated/envoy/type/range.upb.h',
'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
'src/core/ext/upb-generated/validate/validate.upb.h',
'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h', 'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h',
'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h',
'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h',
@ -797,13 +832,17 @@ Pod::Spec.new do |s|
'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc',
'src/core/tsi/alts/handshaker/alts_tsi_utils.cc', 'src/core/tsi/alts/handshaker/alts_tsi_utils.cc',
'src/core/tsi/alts/handshaker/transport_security_common_api.cc', 'src/core/tsi/alts/handshaker/transport_security_common_api.cc',
'src/core/tsi/alts/handshaker/altscontext.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c',
'src/core/tsi/alts/handshaker/handshaker.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c',
'src/core/tsi/alts/handshaker/transport_security_common.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c',
'third_party/upb/upb/decode.c',
'third_party/upb/upb/encode.c',
'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/core/tsi/transport_security.cc', 'src/core/tsi/transport_security.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create.cc', 'src/core/ext/transport/chttp2/client/insecure/channel_create.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc', 'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc',
@ -836,7 +875,7 @@ Pod::Spec.new do |s|
'src/core/ext/filters/client_channel/subchannel.cc', 'src/core/ext/filters/client_channel/subchannel.cc',
'src/core/ext/filters/client_channel/subchannel_pool_interface.cc', 'src/core/ext/filters/client_channel/subchannel_pool_interface.cc',
'src/core/ext/filters/deadline/deadline_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.cc',
'src/core/ext/filters/client_channel/health/health.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c',
'src/core/tsi/fake_transport_security.cc', 'src/core/tsi/fake_transport_security.cc',
'src/core/tsi/local_transport_security.cc', 'src/core/tsi/local_transport_security.cc',
'src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc', 'src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc',
@ -855,14 +894,42 @@ Pod::Spec.new do |s|
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc',
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc',
'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc',
'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c',
'src/core/ext/upb-generated/google/api/annotations.upb.c',
'src/core/ext/upb-generated/google/api/http.upb.c',
'src/core/ext/upb-generated/google/protobuf/any.upb.c',
'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c',
'src/core/ext/upb-generated/google/protobuf/duration.upb.c',
'src/core/ext/upb-generated/google/protobuf/empty.upb.c',
'src/core/ext/upb-generated/google/protobuf/struct.upb.c',
'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c',
'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c',
'src/core/ext/upb-generated/google/rpc/status.upb.c',
'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c',
'src/core/ext/filters/client_channel/lb_policy/xds/xds.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds.cc',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc',
'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/cds.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/eds.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c',
'src/core/ext/upb-generated/envoy/type/percent.upb.c',
'src/core/ext/upb-generated/envoy/type/range.upb.c',
'src/core/ext/upb-generated/gogoproto/gogo.upb.c',
'src/core/ext/upb-generated/validate/validate.upb.c',
'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc', 'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc',
'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc', 'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc',
'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc',
@ -994,13 +1061,19 @@ Pod::Spec.new do |s|
'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h',
'src/core/lib/security/credentials/alts/check_gcp_environment.h', 'src/core/lib/security/credentials/alts/check_gcp_environment.h',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h',
'src/core/tsi/alts/handshaker/alts_tsi_utils.h', 'src/core/tsi/alts/handshaker/alts_tsi_utils.h',
'src/core/tsi/alts/handshaker/transport_security_common_api.h', 'src/core/tsi/alts/handshaker/transport_security_common_api.h',
'src/core/tsi/alts/handshaker/altscontext.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
'src/core/tsi/alts/handshaker/handshaker.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h',
'src/core/tsi/alts/handshaker/transport_security_common.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h',
'third_party/upb/upb/decode.h',
'third_party/upb/upb/encode.h',
'third_party/upb/upb/generated_util.h',
'third_party/upb/upb/msg.h',
'third_party/upb/upb/port_def.inc',
'third_party/upb/upb/port_undef.inc',
'third_party/upb/upb/table.int.h',
'third_party/upb/upb/upb.h',
'src/core/tsi/transport_security.h', 'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h', 'src/core/tsi/transport_security_interface.h',
'src/core/ext/transport/chttp2/client/authority.h', 'src/core/ext/transport/chttp2/client/authority.h',
@ -1033,7 +1106,7 @@ Pod::Spec.new do |s|
'src/core/ext/filters/client_channel/subchannel_interface.h', 'src/core/ext/filters/client_channel/subchannel_interface.h',
'src/core/ext/filters/client_channel/subchannel_pool_interface.h', 'src/core/ext/filters/client_channel/subchannel_pool_interface.h',
'src/core/ext/filters/deadline/deadline_filter.h', 'src/core/ext/filters/deadline/deadline_filter.h',
'src/core/ext/filters/client_channel/health/health.pb.h', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h',
'src/core/tsi/fake_transport_security.h', 'src/core/tsi/fake_transport_security.h',
'src/core/tsi/local_transport_security.h', 'src/core/tsi/local_transport_security.h',
'src/core/tsi/ssl/session_cache/ssl_session.h', 'src/core/tsi/ssl/session_cache/ssl_session.h',
@ -1192,13 +1265,41 @@ Pod::Spec.new do |s|
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h',
'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h',
'src/core/ext/upb-generated/google/api/annotations.upb.h',
'src/core/ext/upb-generated/google/api/http.upb.h',
'src/core/ext/upb-generated/google/protobuf/any.upb.h',
'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h',
'src/core/ext/upb-generated/google/protobuf/duration.upb.h',
'src/core/ext/upb-generated/google/protobuf/empty.upb.h',
'src/core/ext/upb-generated/google/protobuf/struct.upb.h',
'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h',
'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h',
'src/core/ext/upb-generated/google/rpc/status.upb.h',
'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h',
'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h',
'src/core/ext/upb-generated/envoy/type/percent.upb.h',
'src/core/ext/upb-generated/envoy/type/range.upb.h',
'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
'src/core/ext/upb-generated/validate/validate.upb.h',
'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h', 'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h',
'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h',
'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h',
@ -1229,16 +1330,9 @@ Pod::Spec.new do |s|
ss.source_files = 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc', ss.source_files = 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc',
'src/core/ext/transport/cronet/transport/cronet_transport.cc', 'src/core/ext/transport/cronet/transport/cronet_transport.cc',
'third_party/nanopb/pb_common.c',
'third_party/nanopb/pb_decode.c',
'third_party/nanopb/pb_encode.c',
'src/core/ext/transport/cronet/client/secure/cronet_channel_create.h', 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.h',
'src/core/ext/transport/cronet/transport/cronet_transport.h', 'src/core/ext/transport/cronet/transport/cronet_transport.h',
'third_party/objective_c/Cronet/bidirectional_stream_c.h', 'third_party/objective_c/Cronet/bidirectional_stream_c.h'
'third_party/nanopb/pb.h',
'third_party/nanopb/pb_common.h',
'third_party/nanopb/pb_decode.h',
'third_party/nanopb/pb_encode.h'
end end
s.subspec 'Tests' do |ss| s.subspec 'Tests' do |ss|
@ -1275,9 +1369,6 @@ Pod::Spec.new do |s|
'test/core/util/tracer_util.cc', 'test/core/util/tracer_util.cc',
'test/core/util/trickle_endpoint.cc', 'test/core/util/trickle_endpoint.cc',
'test/core/util/cmdline.cc', 'test/core/util/cmdline.cc',
'third_party/nanopb/pb_common.c',
'third_party/nanopb/pb_decode.c',
'third_party/nanopb/pb_encode.c',
'test/core/end2end/data/ssl_test_data.h', 'test/core/end2end/data/ssl_test_data.h',
'test/core/security/oauth2_utils.h', 'test/core/security/oauth2_utils.h',
'test/core/end2end/cq_verifier.h', 'test/core/end2end/cq_verifier.h',
@ -1302,10 +1393,6 @@ Pod::Spec.new do |s|
'test/core/util/tracer_util.h', 'test/core/util/tracer_util.h',
'test/core/util/trickle_endpoint.h', 'test/core/util/trickle_endpoint.h',
'test/core/util/cmdline.h', 'test/core/util/cmdline.h',
'third_party/nanopb/pb.h',
'third_party/nanopb/pb_common.h',
'third_party/nanopb/pb_decode.h',
'third_party/nanopb/pb_encode.h',
'test/core/end2end/end2end_tests.cc', 'test/core/end2end/end2end_tests.cc',
'test/core/end2end/end2end_test_utils.cc', 'test/core/end2end/end2end_test_utils.cc',
'test/core/end2end/tests/authority_not_supported.cc', 'test/core/end2end/tests/authority_not_supported.cc',
@ -1394,5 +1481,9 @@ Pod::Spec.new do |s|
s.prepare_command = <<-END_OF_COMMAND s.prepare_command = <<-END_OF_COMMAND
sed -E -i '' 's;#include "(pb(_.*)?\\.h)";#if COCOAPODS==1\\\n #include <nanopb/\\1>\\\n#else\\\n #include "\\1"\\\n#endif;g' $(find src/core -type f -print | xargs grep -H -c '#include <nanopb/' | grep 0$ | cut -d':' -f1) sed -E -i '' 's;#include "(pb(_.*)?\\.h)";#if COCOAPODS==1\\\n #include <nanopb/\\1>\\\n#else\\\n #include "\\1"\\\n#endif;g' $(find src/core -type f -print | xargs grep -H -c '#include <nanopb/' | grep 0$ | cut -d':' -f1)
sed -E -i '' 's;#include <openssl/(.*)>;#if COCOAPODS==1\\\n #include <openssl_grpc/\\1>\\\n#else\\\n #include <openssl/\\1>\\\n#endif;g' $(find src/core -type f \\( -path '*.h' -or -path '*.cc' \\) -print | xargs grep -H -c '#include <openssl_grpc/' | grep 0$ | cut -d':' -f1) sed -E -i '' 's;#include <openssl/(.*)>;#if COCOAPODS==1\\\n #include <openssl_grpc/\\1>\\\n#else\\\n #include <openssl/\\1>\\\n#endif;g' $(find src/core -type f \\( -path '*.h' -or -path '*.cc' \\) -print | xargs grep -H -c '#include <openssl_grpc/' | grep 0$ | cut -d':' -f1)
find src/core/ third_party/upb/ -type f \\( -name '*.h' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "upb/(.*)";#if COCOAPODS==1\\\n #include "third_party/upb/upb/\\1"\\\n#else\\\n #include "upb/\\1"\\\n#endif;g'
find src/core/ third_party/upb/ -type f -name '*.grpc_back' -print0 | xargs -0 rm
find src/core/ src/cpp/ -type f \\( -name '*.h' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "(.*).upb.h";#if COCOAPODS==1\\\n #include "src/core/ext/upb-generated/\\1.upb.h"\\\n#else\\\n #include "\\1.upb.h"\\\n#endif;g'
find src/core/ src/cpp/ -type f -name '*.grpc_back' -print0 | xargs -0 rm
END_OF_COMMAND END_OF_COMMAND
end end

@ -36,6 +36,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0' s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9' s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0' s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
name = 'ProtoRPC' name = 'ProtoRPC'
s.module_name = name s.module_name = name

@ -36,6 +36,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0' s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9' s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0' s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
name = 'RxLibrary' name = 'RxLibrary'
s.module_name = name s.module_name = name

@ -35,6 +35,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0' s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9' s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0' s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
name = 'GRPCClient' name = 'GRPCClient'
s.module_name = name s.module_name = name

@ -265,17 +265,19 @@ Gem::Specification.new do |s|
s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h )
s.files += %w( src/core/lib/security/credentials/alts/check_gcp_environment.h ) s.files += %w( src/core/lib/security/credentials/alts/check_gcp_environment.h )
s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h ) s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h )
s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_service_api.h )
s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h )
s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_utils.h ) s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_utils.h )
s.files += %w( src/core/tsi/alts/handshaker/transport_security_common_api.h ) s.files += %w( src/core/tsi/alts/handshaker/transport_security_common_api.h )
s.files += %w( src/core/tsi/alts/handshaker/altscontext.pb.h ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h )
s.files += %w( src/core/tsi/alts/handshaker/handshaker.pb.h ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h )
s.files += %w( src/core/tsi/alts/handshaker/transport_security_common.pb.h ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h )
s.files += %w( third_party/nanopb/pb.h ) s.files += %w( third_party/upb/upb/decode.h )
s.files += %w( third_party/nanopb/pb_common.h ) s.files += %w( third_party/upb/upb/encode.h )
s.files += %w( third_party/nanopb/pb_decode.h ) s.files += %w( third_party/upb/upb/generated_util.h )
s.files += %w( third_party/nanopb/pb_encode.h ) s.files += %w( third_party/upb/upb/msg.h )
s.files += %w( third_party/upb/upb/port_def.inc )
s.files += %w( third_party/upb/upb/port_undef.inc )
s.files += %w( third_party/upb/upb/table.int.h )
s.files += %w( third_party/upb/upb/upb.h )
s.files += %w( src/core/tsi/transport_security.h ) s.files += %w( src/core/tsi/transport_security.h )
s.files += %w( src/core/tsi/transport_security_interface.h ) s.files += %w( src/core/tsi/transport_security_interface.h )
s.files += %w( src/core/ext/transport/chttp2/client/authority.h ) s.files += %w( src/core/ext/transport/chttp2/client/authority.h )
@ -308,7 +310,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/ext/filters/client_channel/subchannel_interface.h ) s.files += %w( src/core/ext/filters/client_channel/subchannel_interface.h )
s.files += %w( src/core/ext/filters/client_channel/subchannel_pool_interface.h ) s.files += %w( src/core/ext/filters/client_channel/subchannel_pool_interface.h )
s.files += %w( src/core/ext/filters/deadline/deadline_filter.h ) s.files += %w( src/core/ext/filters/deadline/deadline_filter.h )
s.files += %w( src/core/ext/filters/client_channel/health/health.pb.h ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h )
s.files += %w( src/core/tsi/fake_transport_security.h ) s.files += %w( src/core/tsi/fake_transport_security.h )
s.files += %w( src/core/tsi/local_transport_security.h ) s.files += %w( src/core/tsi/local_transport_security.h )
s.files += %w( src/core/tsi/ssl/session_cache/ssl_session.h ) s.files += %w( src/core/tsi/ssl/session_cache/ssl_session.h )
@ -467,13 +469,41 @@ Gem::Specification.new do |s|
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h )
s.files += %w( src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h )
s.files += %w( src/core/ext/upb-generated/google/api/annotations.upb.h )
s.files += %w( src/core/ext/upb-generated/google/api/http.upb.h )
s.files += %w( src/core/ext/upb-generated/google/protobuf/any.upb.h )
s.files += %w( src/core/ext/upb-generated/google/protobuf/descriptor.upb.h )
s.files += %w( src/core/ext/upb-generated/google/protobuf/duration.upb.h )
s.files += %w( src/core/ext/upb-generated/google/protobuf/empty.upb.h )
s.files += %w( src/core/ext/upb-generated/google/protobuf/struct.upb.h )
s.files += %w( src/core/ext/upb-generated/google/protobuf/timestamp.upb.h )
s.files += %w( src/core/ext/upb-generated/google/protobuf/wrappers.upb.h )
s.files += %w( src/core/ext/upb-generated/google/rpc/status.upb.h )
s.files += %w( src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h ) s.files += %w( src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cds.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/eds.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/type/percent.upb.h )
s.files += %w( src/core/ext/upb-generated/envoy/type/range.upb.h )
s.files += %w( src/core/ext/upb-generated/gogoproto/gogo.upb.h )
s.files += %w( src/core/ext/upb-generated/validate/validate.upb.h )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/subchannel_list.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/subchannel_list.h )
s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h )
s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h )
@ -731,16 +761,17 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc ) s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc )
s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc ) s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc )
s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc ) s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc )
s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc )
s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc )
s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_utils.cc ) s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_utils.cc )
s.files += %w( src/core/tsi/alts/handshaker/transport_security_common_api.cc ) s.files += %w( src/core/tsi/alts/handshaker/transport_security_common_api.cc )
s.files += %w( src/core/tsi/alts/handshaker/altscontext.pb.c ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c )
s.files += %w( src/core/tsi/alts/handshaker/handshaker.pb.c ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c )
s.files += %w( src/core/tsi/alts/handshaker/transport_security_common.pb.c ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c )
s.files += %w( third_party/nanopb/pb_common.c ) s.files += %w( third_party/upb/upb/decode.c )
s.files += %w( third_party/nanopb/pb_decode.c ) s.files += %w( third_party/upb/upb/encode.c )
s.files += %w( third_party/nanopb/pb_encode.c ) s.files += %w( third_party/upb/upb/msg.c )
s.files += %w( third_party/upb/upb/port.c )
s.files += %w( third_party/upb/upb/table.c )
s.files += %w( third_party/upb/upb/upb.c )
s.files += %w( src/core/tsi/transport_security.cc ) s.files += %w( src/core/tsi/transport_security.cc )
s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create.cc ) s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create.cc )
s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc ) s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc )
@ -773,7 +804,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/ext/filters/client_channel/subchannel.cc ) s.files += %w( src/core/ext/filters/client_channel/subchannel.cc )
s.files += %w( src/core/ext/filters/client_channel/subchannel_pool_interface.cc ) s.files += %w( src/core/ext/filters/client_channel/subchannel_pool_interface.cc )
s.files += %w( src/core/ext/filters/deadline/deadline_filter.cc ) s.files += %w( src/core/ext/filters/deadline/deadline_filter.cc )
s.files += %w( src/core/ext/filters/client_channel/health/health.pb.c ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c )
s.files += %w( src/core/tsi/fake_transport_security.cc ) s.files += %w( src/core/tsi/fake_transport_security.cc )
s.files += %w( src/core/tsi/local_transport_security.cc ) s.files += %w( src/core/tsi/local_transport_security.cc )
s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc ) s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc )
@ -792,14 +823,42 @@ Gem::Specification.new do |s|
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc )
s.files += %w( src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c )
s.files += %w( src/core/ext/upb-generated/google/api/annotations.upb.c )
s.files += %w( src/core/ext/upb-generated/google/api/http.upb.c )
s.files += %w( src/core/ext/upb-generated/google/protobuf/any.upb.c )
s.files += %w( src/core/ext/upb-generated/google/protobuf/descriptor.upb.c )
s.files += %w( src/core/ext/upb-generated/google/protobuf/duration.upb.c )
s.files += %w( src/core/ext/upb-generated/google/protobuf/empty.upb.c )
s.files += %w( src/core/ext/upb-generated/google/protobuf/struct.upb.c )
s.files += %w( src/core/ext/upb-generated/google/protobuf/timestamp.upb.c )
s.files += %w( src/core/ext/upb-generated/google/protobuf/wrappers.upb.c )
s.files += %w( src/core/ext/upb-generated/google/rpc/status.upb.c )
s.files += %w( src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds.cc )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cds.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/eds.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/type/percent.upb.c )
s.files += %w( src/core/ext/upb-generated/envoy/type/range.upb.c )
s.files += %w( src/core/ext/upb-generated/gogoproto/gogo.upb.c )
s.files += %w( src/core/ext/upb-generated/validate/validate.upb.c )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc )
s.files += %w( src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc )
s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc )

@ -55,12 +55,22 @@
'-Wall', '-Wall',
'-Wextra', '-Wextra',
'-Werror', '-Werror',
'-Wno-unknown-warning-option',
'-Wno-long-long', '-Wno-long-long',
'-Wno-unused-parameter', '-Wno-unused-parameter',
'-DOSATOMIC_USE_INLINED=1',
'-Wno-deprecated-declarations', '-Wno-deprecated-declarations',
'-Ithird_party/nanopb', '-Wno-sign-conversion',
'-Wno-shadow',
'-Wno-conversion',
'-Wno-implicit-fallthrough',
'-Wno-sign-compare',
'-Wno-missing-field-initializers',
'-Wno-maybe-uninitialized',
'-DPB_FIELD_32BIT', '-DPB_FIELD_32BIT',
'-DOSATOMIC_USE_INLINED=1',
'-Ithird_party/nanopb',
'-Ithird_party/upb',
'-Isrc/core/ext/upb-generated',
], ],
'ldflags': [ 'ldflags': [
'-g', '-g',
@ -136,24 +146,44 @@
'-Wall', '-Wall',
'-Wextra', '-Wextra',
'-Werror', '-Werror',
'-Wno-unknown-warning-option',
'-Wno-long-long', '-Wno-long-long',
'-Wno-unused-parameter', '-Wno-unused-parameter',
'-DOSATOMIC_USE_INLINED=1',
'-Wno-deprecated-declarations', '-Wno-deprecated-declarations',
'-Ithird_party/nanopb', '-Wno-sign-conversion',
'-Wno-shadow',
'-Wno-conversion',
'-Wno-implicit-fallthrough',
'-Wno-sign-compare',
'-Wno-missing-field-initializers',
'-Wno-maybe-uninitialized',
'-DPB_FIELD_32BIT', '-DPB_FIELD_32BIT',
'-DOSATOMIC_USE_INLINED=1',
'-Ithird_party/nanopb',
'-Ithird_party/upb',
'-Isrc/core/ext/upb-generated',
], ],
'OTHER_CPLUSPLUSFLAGS': [ 'OTHER_CPLUSPLUSFLAGS': [
'-g', '-g',
'-Wall', '-Wall',
'-Wextra', '-Wextra',
'-Werror', '-Werror',
'-Wno-unknown-warning-option',
'-Wno-long-long', '-Wno-long-long',
'-Wno-unused-parameter', '-Wno-unused-parameter',
'-DOSATOMIC_USE_INLINED=1',
'-Wno-deprecated-declarations', '-Wno-deprecated-declarations',
'-Ithird_party/nanopb', '-Wno-sign-conversion',
'-Wno-shadow',
'-Wno-conversion',
'-Wno-implicit-fallthrough',
'-Wno-sign-compare',
'-Wno-missing-field-initializers',
'-Wno-maybe-uninitialized',
'-DPB_FIELD_32BIT', '-DPB_FIELD_32BIT',
'-DOSATOMIC_USE_INLINED=1',
'-Ithird_party/nanopb',
'-Ithird_party/upb',
'-Isrc/core/ext/upb-generated',
'-stdlib=libc++', '-stdlib=libc++',
'-std=c++11', '-std=c++11',
'-Wno-error=deprecated-declarations', '-Wno-error=deprecated-declarations',
@ -514,16 +544,17 @@
'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc',
'src/core/tsi/alts/handshaker/alts_tsi_utils.cc', 'src/core/tsi/alts/handshaker/alts_tsi_utils.cc',
'src/core/tsi/alts/handshaker/transport_security_common_api.cc', 'src/core/tsi/alts/handshaker/transport_security_common_api.cc',
'src/core/tsi/alts/handshaker/altscontext.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c',
'src/core/tsi/alts/handshaker/handshaker.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c',
'src/core/tsi/alts/handshaker/transport_security_common.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c',
'third_party/nanopb/pb_common.c', 'third_party/upb/upb/decode.c',
'third_party/nanopb/pb_decode.c', 'third_party/upb/upb/encode.c',
'third_party/nanopb/pb_encode.c', 'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/core/tsi/transport_security.cc', 'src/core/tsi/transport_security.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create.cc', 'src/core/ext/transport/chttp2/client/insecure/channel_create.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc', 'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc',
@ -556,7 +587,7 @@
'src/core/ext/filters/client_channel/subchannel.cc', 'src/core/ext/filters/client_channel/subchannel.cc',
'src/core/ext/filters/client_channel/subchannel_pool_interface.cc', 'src/core/ext/filters/client_channel/subchannel_pool_interface.cc',
'src/core/ext/filters/deadline/deadline_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.cc',
'src/core/ext/filters/client_channel/health/health.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c',
'src/core/tsi/fake_transport_security.cc', 'src/core/tsi/fake_transport_security.cc',
'src/core/tsi/local_transport_security.cc', 'src/core/tsi/local_transport_security.cc',
'src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc', 'src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc',
@ -575,14 +606,42 @@
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc',
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc',
'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc',
'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c',
'src/core/ext/upb-generated/google/api/annotations.upb.c',
'src/core/ext/upb-generated/google/api/http.upb.c',
'src/core/ext/upb-generated/google/protobuf/any.upb.c',
'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c',
'src/core/ext/upb-generated/google/protobuf/duration.upb.c',
'src/core/ext/upb-generated/google/protobuf/empty.upb.c',
'src/core/ext/upb-generated/google/protobuf/struct.upb.c',
'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c',
'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c',
'src/core/ext/upb-generated/google/rpc/status.upb.c',
'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c',
'src/core/ext/filters/client_channel/lb_policy/xds/xds.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds.cc',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc',
'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/cds.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/eds.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c',
'src/core/ext/upb-generated/envoy/type/percent.upb.c',
'src/core/ext/upb-generated/envoy/type/range.upb.c',
'src/core/ext/upb-generated/gogoproto/gogo.upb.c',
'src/core/ext/upb-generated/validate/validate.upb.c',
'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc', 'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc',
'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc', 'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc',
'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc',
@ -831,10 +890,13 @@
'src/core/ext/filters/client_channel/subchannel.cc', 'src/core/ext/filters/client_channel/subchannel.cc',
'src/core/ext/filters/client_channel/subchannel_pool_interface.cc', 'src/core/ext/filters/client_channel/subchannel_pool_interface.cc',
'src/core/ext/filters/deadline/deadline_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.cc',
'src/core/ext/filters/client_channel/health/health.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c',
'third_party/nanopb/pb_common.c', 'third_party/upb/upb/decode.c',
'third_party/nanopb/pb_decode.c', 'third_party/upb/upb/encode.c',
'third_party/nanopb/pb_encode.c', 'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/core/ext/transport/chttp2/transport/bin_decoder.cc', 'src/core/ext/transport/chttp2/transport/bin_decoder.cc',
'src/core/ext/transport/chttp2/transport/bin_encoder.cc', 'src/core/ext/transport/chttp2/transport/bin_encoder.cc',
'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc', 'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc',
@ -1083,10 +1145,13 @@
'src/core/ext/filters/client_channel/subchannel.cc', 'src/core/ext/filters/client_channel/subchannel.cc',
'src/core/ext/filters/client_channel/subchannel_pool_interface.cc', 'src/core/ext/filters/client_channel/subchannel_pool_interface.cc',
'src/core/ext/filters/deadline/deadline_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.cc',
'src/core/ext/filters/client_channel/health/health.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c',
'third_party/nanopb/pb_common.c', 'third_party/upb/upb/decode.c',
'third_party/nanopb/pb_decode.c', 'third_party/upb/upb/encode.c',
'third_party/nanopb/pb_encode.c', 'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/core/ext/transport/chttp2/transport/bin_decoder.cc', 'src/core/ext/transport/chttp2/transport/bin_decoder.cc',
'src/core/ext/transport/chttp2/transport/bin_encoder.cc', 'src/core/ext/transport/chttp2/transport/bin_encoder.cc',
'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc', 'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc',
@ -1346,10 +1411,13 @@
'src/core/ext/filters/client_channel/subchannel.cc', 'src/core/ext/filters/client_channel/subchannel.cc',
'src/core/ext/filters/client_channel/subchannel_pool_interface.cc', 'src/core/ext/filters/client_channel/subchannel_pool_interface.cc',
'src/core/ext/filters/deadline/deadline_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.cc',
'src/core/ext/filters/client_channel/health/health.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c',
'third_party/nanopb/pb_common.c', 'third_party/upb/upb/decode.c',
'third_party/nanopb/pb_decode.c', 'third_party/upb/upb/encode.c',
'third_party/nanopb/pb_encode.c', 'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/core/ext/transport/inproc/inproc_plugin.cc', 'src/core/ext/transport/inproc/inproc_plugin.cc',
'src/core/ext/transport/inproc/inproc_transport.cc', 'src/core/ext/transport/inproc/inproc_transport.cc',
'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc',
@ -1371,13 +1439,41 @@
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc',
'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc',
'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c', 'src/core/ext/upb-generated/google/api/annotations.upb.c',
'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c', 'src/core/ext/upb-generated/google/api/http.upb.c',
'src/core/ext/upb-generated/google/protobuf/any.upb.c',
'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c',
'src/core/ext/upb-generated/google/protobuf/duration.upb.c',
'src/core/ext/upb-generated/google/protobuf/empty.upb.c',
'src/core/ext/upb-generated/google/protobuf/struct.upb.c',
'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c',
'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c',
'src/core/ext/upb-generated/google/rpc/status.upb.c',
'src/core/ext/filters/client_channel/lb_policy/xds/xds.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds.cc',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.cc',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc',
'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc',
'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/cds.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/eds.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c',
'src/core/ext/upb-generated/envoy/type/percent.upb.c',
'src/core/ext/upb-generated/envoy/type/range.upb.c',
'src/core/ext/upb-generated/gogoproto/gogo.upb.c',
'src/core/ext/upb-generated/validate/validate.upb.c',
'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc', 'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc',
'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc', 'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc',
'src/core/ext/filters/census/grpc_context.cc', 'src/core/ext/filters/census/grpc_context.cc',
@ -1493,10 +1589,13 @@
'src/cpp/util/status.cc', 'src/cpp/util/status.cc',
'src/cpp/util/string_ref.cc', 'src/cpp/util/string_ref.cc',
'src/cpp/util/time_cc.cc', 'src/cpp/util/time_cc.cc',
'src/core/ext/filters/client_channel/health/health.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c',
'third_party/nanopb/pb_common.c', 'third_party/upb/upb/decode.c',
'third_party/nanopb/pb_decode.c', 'third_party/upb/upb/encode.c',
'third_party/nanopb/pb_encode.c', 'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/cpp/codegen/codegen_init.cc', 'src/cpp/codegen/codegen_init.cc',
], ],
}, },
@ -1650,10 +1749,13 @@
'src/cpp/util/status.cc', 'src/cpp/util/status.cc',
'src/cpp/util/string_ref.cc', 'src/cpp/util/string_ref.cc',
'src/cpp/util/time_cc.cc', 'src/cpp/util/time_cc.cc',
'src/core/ext/filters/client_channel/health/health.pb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c',
'third_party/nanopb/pb_common.c', 'third_party/upb/upb/decode.c',
'third_party/nanopb/pb_decode.c', 'third_party/upb/upb/encode.c',
'third_party/nanopb/pb_encode.c', 'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/cpp/codegen/codegen_init.cc', 'src/cpp/codegen/codegen_init.cc',
], ],
}, },
@ -2154,24 +2256,6 @@
'third_party/benchmark/src/timers.cc', 'third_party/benchmark/src/timers.cc',
], ],
}, },
{
'target_name': 'upb',
'type': 'static_library',
'dependencies': [
],
'sources': [
'third_party/upb/generated_for_cmake/google/protobuf/descriptor.upb.c',
'third_party/upb/upb/decode.c',
'third_party/upb/upb/def.c',
'third_party/upb/upb/encode.c',
'third_party/upb/upb/handlers.c',
'third_party/upb/upb/msg.c',
'third_party/upb/upb/msgfactory.c',
'third_party/upb/upb/sink.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
],
},
{ {
'target_name': 'z', 'target_name': 'z',
'type': 'static_library', 'type': 'static_library',

@ -463,6 +463,23 @@ typedef unsigned __int64 uint64_t;
#include <stdint.h> #include <stdint.h>
#endif /* _MSC_VER */ #endif /* _MSC_VER */
/* Type of cycle clock implementation */
#ifdef GPR_LINUX
/* Disable cycle clock by default.
TODO(soheil): enable when we support fallback for unstable cycle clocks.
#if defined(__i386__)
#define GPR_CYCLE_COUNTER_RDTSC_32 1
#elif defined(__x86_64__) || defined(__amd64__)
#define GPR_CYCLE_COUNTER_RDTSC_64 1
#else
#define GPR_CYCLE_COUNTER_FALLBACK 1
#endif
*/
#define GPR_CYCLE_COUNTER_FALLBACK 1
#else
#define GPR_CYCLE_COUNTER_FALLBACK 1
#endif /* GPR_LINUX */
/* Cache line alignment */ /* Cache line alignment */
#ifndef GPR_CACHELINE_SIZE_LOG #ifndef GPR_CACHELINE_SIZE_LOG
#if defined(__i386__) || defined(__x86_64__) #if defined(__i386__) || defined(__x86_64__)

@ -270,17 +270,19 @@
<file baseinstalldir="/" name="src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/check_gcp_environment.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials/alts/check_gcp_environment.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_handshaker_service_api.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_tsi_utils.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_tsi_utils.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common_api.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common_api.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/altscontext.pb.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/handshaker.pb.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common.pb.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb.h" role="src" /> <file baseinstalldir="/" name="third_party/upb/upb/decode.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_common.h" role="src" /> <file baseinstalldir="/" name="third_party/upb/upb/encode.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_decode.h" role="src" /> <file baseinstalldir="/" name="third_party/upb/upb/generated_util.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_encode.h" role="src" /> <file baseinstalldir="/" name="third_party/upb/upb/msg.h" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/port_def.inc" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/port_undef.inc" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/table.int.h" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/upb.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security_interface.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/transport_security_interface.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/authority.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/authority.h" role="src" />
@ -313,7 +315,7 @@
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/subchannel_interface.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/subchannel_interface.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/subchannel_pool_interface.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/subchannel_pool_interface.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/deadline/deadline_filter.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/deadline/deadline_filter.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/health/health.pb.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/fake_transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/fake_transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/local_transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/local_transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl/session_cache/ssl_session.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/ssl/session_cache/ssl_session.h" role="src" />
@ -472,13 +474,41 @@
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/annotations.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/http.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/any.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/descriptor.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/duration.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/empty.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/struct.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/timestamp.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/wrappers.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/rpc/status.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cds.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/eds.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/percent.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/range.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/gogoproto/gogo.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/validate/validate.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/subchannel_list.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/subchannel_list.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h" role="src" />
@ -736,16 +766,17 @@
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_tsi_utils.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_tsi_utils.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common_api.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common_api.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/altscontext.pb.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/handshaker.pb.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common.pb.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_common.c" role="src" /> <file baseinstalldir="/" name="third_party/upb/upb/decode.c" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_decode.c" role="src" /> <file baseinstalldir="/" name="third_party/upb/upb/encode.c" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_encode.c" role="src" /> <file baseinstalldir="/" name="third_party/upb/upb/msg.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/port.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/table.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/upb.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/transport_security.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc" role="src" />
@ -778,7 +809,7 @@
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/subchannel.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/subchannel.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/subchannel_pool_interface.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/subchannel_pool_interface.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/deadline/deadline_filter.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/deadline/deadline_filter.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/health/health.pb.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/fake_transport_security.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/fake_transport_security.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/local_transport_security.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/local_transport_security.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc" role="src" />
@ -797,14 +828,42 @@
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/annotations.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/http.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/any.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/descriptor.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/duration.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/empty.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/struct.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/timestamp.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/wrappers.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/google/rpc/status.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cds.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/eds.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/percent.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/range.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/gogoproto/gogo.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/validate/validate.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc" role="src" />

@ -35,9 +35,7 @@ egg_info.manifest_maker.template = 'PYTHON-MANIFEST.in'
PY3 = sys.version_info.major == 3 PY3 = sys.version_info.major == 3
PYTHON_STEM = os.path.join('src', 'python', 'grpcio') PYTHON_STEM = os.path.join('src', 'python', 'grpcio')
CORE_INCLUDE = ('include', '.',) CORE_INCLUDE = ('include', '.',)
SSL_INCLUDE = (os.path.join('third_party', 'boringssl', 'include'),) ADDRESS_SORTING_INCLUDE = (os.path.join('third_party', 'address_sorting', 'include'),)
ZLIB_INCLUDE = (os.path.join('third_party', 'zlib'),)
NANOPB_INCLUDE = (os.path.join('third_party', 'nanopb'),)
CARES_INCLUDE = ( CARES_INCLUDE = (
os.path.join('third_party', 'cares'), os.path.join('third_party', 'cares'),
os.path.join('third_party', 'cares', 'cares'),) os.path.join('third_party', 'cares', 'cares'),)
@ -49,7 +47,11 @@ if 'linux' in sys.platform:
CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_linux'),) CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_linux'),)
if 'openbsd' in sys.platform: if 'openbsd' in sys.platform:
CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_openbsd'),) CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_openbsd'),)
ADDRESS_SORTING_INCLUDE = (os.path.join('third_party', 'address_sorting', 'include'),) NANOPB_INCLUDE = (os.path.join('third_party', 'nanopb'),)
SSL_INCLUDE = (os.path.join('third_party', 'boringssl', 'include'),)
UPB_INCLUDE = (os.path.join('third_party', 'upb'),)
UPB_GRPC_GENERATED_INCLUDE = (os.path.join('src', 'core', 'ext', 'upb-generated'),)
ZLIB_INCLUDE = (os.path.join('third_party', 'zlib'),)
README = os.path.join(PYTHON_STEM, 'README.rst') README = os.path.join(PYTHON_STEM, 'README.rst')
# Ensure we're in the proper directory whether or not we're being used by pip. # Ensure we're in the proper directory whether or not we're being used by pip.
@ -203,8 +205,15 @@ if BUILD_WITH_SYSTEM_CARES:
CARES_INCLUDE = (os.path.join('/usr', 'include'),) CARES_INCLUDE = (os.path.join('/usr', 'include'),)
EXTENSION_INCLUDE_DIRECTORIES = ( EXTENSION_INCLUDE_DIRECTORIES = (
(PYTHON_STEM,) + CORE_INCLUDE + SSL_INCLUDE + ZLIB_INCLUDE + (PYTHON_STEM,) +
NANOPB_INCLUDE + CARES_INCLUDE + ADDRESS_SORTING_INCLUDE) CORE_INCLUDE +
ADDRESS_SORTING_INCLUDE +
CARES_INCLUDE +
NANOPB_INCLUDE +
SSL_INCLUDE +
UPB_INCLUDE +
UPB_GRPC_GENERATED_INCLUDE +
ZLIB_INCLUDE)
EXTENSION_LIBRARIES = () EXTENSION_LIBRARIES = ()
if "linux" in sys.platform: if "linux" in sys.platform:

@ -111,6 +111,12 @@ static void finished_completion(void* pw, grpc_cq_completion* ignored) {
static void partly_done(state_watcher* w, bool due_to_completion, static void partly_done(state_watcher* w, bool due_to_completion,
grpc_error* error) { grpc_error* error) {
bool end_op = false;
void* end_op_tag = nullptr;
grpc_error* end_op_error = nullptr;
grpc_completion_queue* end_op_cq = nullptr;
grpc_cq_completion* end_op_completion_storage = nullptr;
if (due_to_completion) { if (due_to_completion) {
grpc_timer_cancel(&w->alarm); grpc_timer_cancel(&w->alarm);
} else { } else {
@ -152,8 +158,11 @@ static void partly_done(state_watcher* w, bool due_to_completion,
w->error = error; w->error = error;
} }
w->phase = CALLING_BACK_AND_FINISHED; w->phase = CALLING_BACK_AND_FINISHED;
grpc_cq_end_op(w->cq, w->tag, w->error, finished_completion, w, end_op = true;
&w->completion_storage); end_op_cq = w->cq;
end_op_tag = w->tag;
end_op_error = w->error;
end_op_completion_storage = &w->completion_storage;
break; break;
case CALLING_BACK_AND_FINISHED: case CALLING_BACK_AND_FINISHED:
GPR_UNREACHABLE_CODE(return ); GPR_UNREACHABLE_CODE(return );
@ -161,6 +170,11 @@ static void partly_done(state_watcher* w, bool due_to_completion,
} }
gpr_mu_unlock(&w->mu); gpr_mu_unlock(&w->mu);
if (end_op) {
grpc_cq_end_op(end_op_cq, end_op_tag, end_op_error, finished_completion, w,
end_op_completion_storage);
}
GRPC_ERROR_UNREF(error); GRPC_ERROR_UNREF(error);
} }

@ -1,23 +0,0 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.3.7-dev */
#include "src/core/ext/filters/client_channel/health/health.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
const pb_field_t grpc_health_v1_HealthCheckRequest_fields[2] = {
PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_health_v1_HealthCheckRequest, service, service, 0),
PB_LAST_FIELD
};
const pb_field_t grpc_health_v1_HealthCheckResponse_fields[2] = {
PB_FIELD( 1, UENUM , OPTIONAL, STATIC , FIRST, grpc_health_v1_HealthCheckResponse, status, status, 0),
PB_LAST_FIELD
};
/* @@protoc_insertion_point(eof) */

@ -1,73 +0,0 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.3.7-dev */
#ifndef PB_GRPC_HEALTH_V1_HEALTH_PB_H_INCLUDED
#define PB_GRPC_HEALTH_V1_HEALTH_PB_H_INCLUDED
#include "pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Enum definitions */
typedef enum _grpc_health_v1_HealthCheckResponse_ServingStatus {
grpc_health_v1_HealthCheckResponse_ServingStatus_UNKNOWN = 0,
grpc_health_v1_HealthCheckResponse_ServingStatus_SERVING = 1,
grpc_health_v1_HealthCheckResponse_ServingStatus_NOT_SERVING = 2,
grpc_health_v1_HealthCheckResponse_ServingStatus_SERVICE_UNKNOWN = 3
} grpc_health_v1_HealthCheckResponse_ServingStatus;
#define _grpc_health_v1_HealthCheckResponse_ServingStatus_MIN grpc_health_v1_HealthCheckResponse_ServingStatus_UNKNOWN
#define _grpc_health_v1_HealthCheckResponse_ServingStatus_MAX grpc_health_v1_HealthCheckResponse_ServingStatus_SERVICE_UNKNOWN
#define _grpc_health_v1_HealthCheckResponse_ServingStatus_ARRAYSIZE ((grpc_health_v1_HealthCheckResponse_ServingStatus)(grpc_health_v1_HealthCheckResponse_ServingStatus_SERVICE_UNKNOWN+1))
/* Struct definitions */
typedef struct _grpc_health_v1_HealthCheckRequest {
bool has_service;
char service[200];
/* @@protoc_insertion_point(struct:grpc_health_v1_HealthCheckRequest) */
} grpc_health_v1_HealthCheckRequest;
typedef struct _grpc_health_v1_HealthCheckResponse {
bool has_status;
grpc_health_v1_HealthCheckResponse_ServingStatus status;
/* @@protoc_insertion_point(struct:grpc_health_v1_HealthCheckResponse) */
} grpc_health_v1_HealthCheckResponse;
/* Default values for struct fields */
/* Initializer values for message structs */
#define grpc_health_v1_HealthCheckRequest_init_default {false, ""}
#define grpc_health_v1_HealthCheckResponse_init_default {false, (grpc_health_v1_HealthCheckResponse_ServingStatus)0}
#define grpc_health_v1_HealthCheckRequest_init_zero {false, ""}
#define grpc_health_v1_HealthCheckResponse_init_zero {false, (grpc_health_v1_HealthCheckResponse_ServingStatus)0}
/* Field tags (for use in manual encoding/decoding) */
#define grpc_health_v1_HealthCheckRequest_service_tag 1
#define grpc_health_v1_HealthCheckResponse_status_tag 1
/* Struct field encoding specification for nanopb */
extern const pb_field_t grpc_health_v1_HealthCheckRequest_fields[2];
extern const pb_field_t grpc_health_v1_HealthCheckResponse_fields[2];
/* Maximum encoded size of messages (where known) */
#define grpc_health_v1_HealthCheckRequest_size 203
#define grpc_health_v1_HealthCheckResponse_size 2
/* Message IDs (where set with "msgid" option) */
#ifdef PB_MSGID
#define HEALTH_MESSAGES \
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* @@protoc_insertion_point(eof) */
#endif

@ -23,14 +23,12 @@
#include "src/core/ext/filters/client_channel/health/health_check_client.h" #include "src/core/ext/filters/client_channel/health/health_check_client.h"
#include "pb_decode.h"
#include "pb_encode.h"
#include "src/core/ext/filters/client_channel/health/health.pb.h"
#include "src/core/lib/debug/trace.h" #include "src/core/lib/debug/trace.h"
#include "src/core/lib/gprpp/sync.h" #include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/transport/error_utils.h" #include "src/core/lib/transport/error_utils.h"
#include "src/core/lib/transport/status_metadata.h" #include "src/core/lib/transport/status_metadata.h"
#include "src/proto/grpc/health/v1/health.upb.h"
#define HEALTH_CHECK_INITIAL_CONNECT_BACKOFF_SECONDS 1 #define HEALTH_CHECK_INITIAL_CONNECT_BACKOFF_SECONDS 1
#define HEALTH_CHECK_RECONNECT_BACKOFF_MULTIPLIER 1.6 #define HEALTH_CHECK_RECONNECT_BACKOFF_MULTIPLIER 1.6
@ -202,19 +200,16 @@ namespace {
void EncodeRequest(const char* service_name, void EncodeRequest(const char* service_name,
ManualConstructor<SliceBufferByteStream>* send_message) { ManualConstructor<SliceBufferByteStream>* send_message) {
grpc_health_v1_HealthCheckRequest request_struct; upb::Arena arena;
request_struct.has_service = true; grpc_health_v1_HealthCheckRequest* request_struct =
snprintf(request_struct.service, sizeof(request_struct.service), "%s", grpc_health_v1_HealthCheckRequest_new(arena.ptr());
service_name); grpc_health_v1_HealthCheckRequest_set_service(
pb_ostream_t ostream; request_struct, upb_strview_makez(service_name));
memset(&ostream, 0, sizeof(ostream)); size_t buf_length;
pb_encode(&ostream, grpc_health_v1_HealthCheckRequest_fields, char* buf = grpc_health_v1_HealthCheckRequest_serialize(
&request_struct); request_struct, arena.ptr(), &buf_length);
grpc_slice request_slice = GRPC_SLICE_MALLOC(ostream.bytes_written); grpc_slice request_slice = GRPC_SLICE_MALLOC(buf_length);
ostream = pb_ostream_from_buffer(GRPC_SLICE_START_PTR(request_slice), memcpy(GRPC_SLICE_START_PTR(request_slice), buf, buf_length);
GRPC_SLICE_LENGTH(request_slice));
GPR_ASSERT(pb_encode(&ostream, grpc_health_v1_HealthCheckRequest_fields,
&request_struct) != 0);
grpc_slice_buffer slice_buffer; grpc_slice_buffer slice_buffer;
grpc_slice_buffer_init(&slice_buffer); grpc_slice_buffer_init(&slice_buffer);
grpc_slice_buffer_add(&slice_buffer, request_slice); grpc_slice_buffer_add(&slice_buffer, request_slice);
@ -248,24 +243,19 @@ bool DecodeResponse(grpc_slice_buffer* slice_buffer, grpc_error** error) {
} }
} }
// Deserialize message. // Deserialize message.
grpc_health_v1_HealthCheckResponse response_struct; upb::Arena arena;
pb_istream_t istream = grpc_health_v1_HealthCheckResponse* response_struct =
pb_istream_from_buffer(recv_message, slice_buffer->length); grpc_health_v1_HealthCheckResponse_parse(
if (!pb_decode(&istream, grpc_health_v1_HealthCheckResponse_fields, reinterpret_cast<char*>(recv_message), slice_buffer->length,
&response_struct)) { arena.ptr());
if (response_struct == nullptr) {
// Can't parse message; assume unhealthy. // Can't parse message; assume unhealthy.
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
"cannot parse health check response"); "cannot parse health check response");
return false; return false;
} }
if (!response_struct.has_status) { int32_t status = grpc_health_v1_HealthCheckResponse_status(response_struct);
// Field not present; assume unhealthy. return status == grpc_health_v1_HealthCheckResponse_SERVING;
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
"status field not present in health check response");
return false;
}
return response_struct.status ==
grpc_health_v1_HealthCheckResponse_ServingStatus_SERVING;
} }
} // namespace } // namespace

@ -409,18 +409,18 @@ void ParseServer(const grpc_grpclb_server* server,
const uint16_t netorder_port = grpc_htons((uint16_t)server->port); const uint16_t netorder_port = grpc_htons((uint16_t)server->port);
/* the addresses are given in binary format (a in(6)_addr struct) in /* the addresses are given in binary format (a in(6)_addr struct) in
* server->ip_address.bytes. */ * server->ip_address.bytes. */
const grpc_grpclb_ip_address* ip = &server->ip_address; const grpc_grpclb_server_ip_address& ip = server->ip_address;
if (ip->size == 4) { if (ip.size == 4) {
addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in)); addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
grpc_sockaddr_in* addr4 = reinterpret_cast<grpc_sockaddr_in*>(&addr->addr); grpc_sockaddr_in* addr4 = reinterpret_cast<grpc_sockaddr_in*>(&addr->addr);
addr4->sin_family = GRPC_AF_INET; addr4->sin_family = GRPC_AF_INET;
memcpy(&addr4->sin_addr, ip->bytes, ip->size); memcpy(&addr4->sin_addr, ip.data, ip.size);
addr4->sin_port = netorder_port; addr4->sin_port = netorder_port;
} else if (ip->size == 16) { } else if (ip.size == 16) {
addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6)); addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)&addr->addr; grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)&addr->addr;
addr6->sin6_family = GRPC_AF_INET6; addr6->sin6_family = GRPC_AF_INET6;
memcpy(&addr6->sin6_addr, ip->bytes, ip->size); memcpy(&addr6->sin6_addr, ip.data, ip.size);
addr6->sin6_port = netorder_port; addr6->sin6_port = netorder_port;
} }
} }
@ -490,7 +490,7 @@ const grpc_arg_pointer_vtable client_stats_arg_vtable = {
bool IsServerValid(const grpc_grpclb_server* server, size_t idx, bool log) { bool IsServerValid(const grpc_grpclb_server* server, size_t idx, bool log) {
if (server->drop) return false; if (server->drop) return false;
const grpc_grpclb_ip_address* ip = &server->ip_address; const grpc_grpclb_server_ip_address& ip = server->ip_address;
if (GPR_UNLIKELY(server->port >> 16 != 0)) { if (GPR_UNLIKELY(server->port >> 16 != 0)) {
if (log) { if (log) {
gpr_log(GPR_ERROR, gpr_log(GPR_ERROR,
@ -499,12 +499,12 @@ bool IsServerValid(const grpc_grpclb_server* server, size_t idx, bool log) {
} }
return false; return false;
} }
if (GPR_UNLIKELY(ip->size != 4 && ip->size != 16)) { if (GPR_UNLIKELY(ip.size != 4 && ip.size != 16)) {
if (log) { if (log) {
gpr_log(GPR_ERROR, gpr_log(GPR_ERROR,
"Expected IP to be 4 or 16 bytes, got %d at index %lu of " "Expected IP to be 4 or 16 bytes, got %d at index %lu of "
"serverlist. Ignoring", "serverlist. Ignoring",
ip->size, (unsigned long)idx); ip.size, (unsigned long)idx);
} }
return false; return false;
} }
@ -523,7 +523,7 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
ParseServer(server, &addr); ParseServer(server, &addr);
// LB token processing. // LB token processing.
char lb_token[GPR_ARRAY_SIZE(server->load_balance_token) + 1]; char lb_token[GPR_ARRAY_SIZE(server->load_balance_token) + 1];
if (server->has_load_balance_token) { if (server->load_balance_token[0] != 0) {
const size_t lb_token_max_length = const size_t lb_token_max_length =
GPR_ARRAY_SIZE(server->load_balance_token); GPR_ARRAY_SIZE(server->load_balance_token);
const size_t lb_token_length = const size_t lb_token_length =
@ -790,13 +790,14 @@ GrpcLb::BalancerCallState::BalancerCallState(
GRPC_MDSTR_SLASH_GRPC_DOT_LB_DOT_V1_DOT_LOADBALANCER_SLASH_BALANCELOAD, GRPC_MDSTR_SLASH_GRPC_DOT_LB_DOT_V1_DOT_LOADBALANCER_SLASH_BALANCELOAD,
nullptr, deadline, nullptr); nullptr, deadline, nullptr);
// Init the LB call request payload. // Init the LB call request payload.
upb::Arena arena;
grpc_grpclb_request* request = grpc_grpclb_request* request =
grpc_grpclb_request_create(grpclb_policy()->server_name_); grpc_grpclb_request_create(grpclb_policy()->server_name_, arena.ptr());
grpc_slice request_payload_slice = grpc_grpclb_request_encode(request); grpc_slice request_payload_slice =
grpc_grpclb_request_encode(request, arena.ptr());
send_message_payload_ = send_message_payload_ =
grpc_raw_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_slice_unref_internal(request_payload_slice); grpc_slice_unref_internal(request_payload_slice);
grpc_grpclb_request_destroy(request);
// Init other data associated with the LB call. // Init other data associated with the LB call.
grpc_metadata_array_init(&lb_initial_metadata_recv_); grpc_metadata_array_init(&lb_initial_metadata_recv_);
grpc_metadata_array_init(&lb_trailing_metadata_recv_); grpc_metadata_array_init(&lb_trailing_metadata_recv_);
@ -940,27 +941,32 @@ void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
bool GrpcLb::BalancerCallState::LoadReportCountersAreZero( bool GrpcLb::BalancerCallState::LoadReportCountersAreZero(
grpc_grpclb_request* request) { grpc_grpclb_request* request) {
GrpcLbClientStats::DroppedCallCounts* drop_entries = const grpc_lb_v1_ClientStats* cstats =
static_cast<GrpcLbClientStats::DroppedCallCounts*>( grpc_lb_v1_LoadBalanceRequest_client_stats(request);
request->client_stats.calls_finished_with_drop.arg); if (cstats == nullptr) {
return request->client_stats.num_calls_started == 0 && return true;
request->client_stats.num_calls_finished == 0 && }
request->client_stats.num_calls_finished_with_client_failed_to_send == size_t drop_count;
grpc_lb_v1_ClientStats_calls_finished_with_drop(cstats, &drop_count);
return grpc_lb_v1_ClientStats_num_calls_started(cstats) == 0 &&
grpc_lb_v1_ClientStats_num_calls_finished(cstats) == 0 &&
grpc_lb_v1_ClientStats_num_calls_finished_with_client_failed_to_send(
cstats) == 0 &&
grpc_lb_v1_ClientStats_num_calls_finished_known_received(cstats) ==
0 && 0 &&
request->client_stats.num_calls_finished_known_received == 0 && drop_count == 0;
(drop_entries == nullptr || drop_entries->size() == 0);
} }
void GrpcLb::BalancerCallState::SendClientLoadReportLocked() { void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
// Construct message payload. // Construct message payload.
GPR_ASSERT(send_message_payload_ == nullptr); GPR_ASSERT(send_message_payload_ == nullptr);
upb::Arena arena;
grpc_grpclb_request* request = grpc_grpclb_request* request =
grpc_grpclb_load_report_request_create(client_stats_.get()); grpc_grpclb_load_report_request_create(client_stats_.get(), arena.ptr());
// Skip client load report if the counters were all zero in the last // Skip client load report if the counters were all zero in the last
// report and they are still zero in this one. // report and they are still zero in this one.
if (LoadReportCountersAreZero(request)) { if (LoadReportCountersAreZero(request)) {
if (last_client_load_report_counters_were_zero_) { if (last_client_load_report_counters_were_zero_) {
grpc_grpclb_request_destroy(request);
ScheduleNextClientLoadReportLocked(); ScheduleNextClientLoadReportLocked();
return; return;
} }
@ -968,11 +974,11 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
} else { } else {
last_client_load_report_counters_were_zero_ = false; last_client_load_report_counters_were_zero_ = false;
} }
grpc_slice request_payload_slice = grpc_grpclb_request_encode(request); grpc_slice request_payload_slice =
grpc_grpclb_request_encode(request, arena.ptr());
send_message_payload_ = send_message_payload_ =
grpc_raw_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_slice_unref_internal(request_payload_slice); grpc_slice_unref_internal(request_payload_slice);
grpc_grpclb_request_destroy(request);
// Send the report. // Send the report.
grpc_op op; grpc_op op;
memset(&op, 0, sizeof(op)); memset(&op, 0, sizeof(op));
@ -1034,16 +1040,20 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
grpc_byte_buffer_reader_destroy(&bbr); grpc_byte_buffer_reader_destroy(&bbr);
grpc_byte_buffer_destroy(lb_calld->recv_message_payload_); grpc_byte_buffer_destroy(lb_calld->recv_message_payload_);
lb_calld->recv_message_payload_ = nullptr; lb_calld->recv_message_payload_ = nullptr;
grpc_grpclb_initial_response* initial_response; const grpc_grpclb_initial_response* initial_response;
grpc_grpclb_serverlist* serverlist; grpc_grpclb_serverlist* serverlist;
upb::Arena arena;
if (!lb_calld->seen_initial_response_ && if (!lb_calld->seen_initial_response_ &&
(initial_response = grpc_grpclb_initial_response_parse(response_slice)) != (initial_response = grpc_grpclb_initial_response_parse(
nullptr) { response_slice, arena.ptr())) != nullptr) {
// Have NOT seen initial response, look for initial response. // Have NOT seen initial response, look for initial response.
if (initial_response->has_client_stats_report_interval) { const google_protobuf_Duration* client_stats_report_interval =
lb_calld->client_stats_report_interval_ = GPR_MAX( grpc_lb_v1_InitialLoadBalanceResponse_client_stats_report_interval(
GPR_MS_PER_SEC, grpc_grpclb_duration_to_millis( initial_response);
&initial_response->client_stats_report_interval)); if (client_stats_report_interval != nullptr) {
lb_calld->client_stats_report_interval_ =
GPR_MAX(GPR_MS_PER_SEC,
grpc_grpclb_duration_to_millis(client_stats_report_interval));
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) { if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
gpr_log(GPR_INFO, gpr_log(GPR_INFO,
"[grpclb %p] lb_calld=%p: Received initial LB response " "[grpclb %p] lb_calld=%p: Received initial LB response "
@ -1058,7 +1068,6 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
"client load reporting NOT enabled", "client load reporting NOT enabled",
grpclb_policy, lb_calld); grpclb_policy, lb_calld);
} }
grpc_grpclb_initial_response_destroy(initial_response);
lb_calld->seen_initial_response_ = true; lb_calld->seen_initial_response_ = true;
} else if ((serverlist = grpc_grpclb_response_parse_serverlist( } else if ((serverlist = grpc_grpclb_response_parse_serverlist(
response_slice)) != nullptr) { response_slice)) != nullptr) {

@ -18,213 +18,154 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include "pb_decode.h"
#include "pb_encode.h"
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h" #include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
#include "src/core/lib/gpr/useful.h"
#include <grpc/support/alloc.h> #include "google/protobuf/duration.upb.h"
#include "google/protobuf/timestamp.upb.h"
/* invoked once for every Server in ServerList */
static bool count_serverlist(pb_istream_t* stream, const pb_field_t* field,
void** arg) {
grpc_grpclb_serverlist* sl = static_cast<grpc_grpclb_serverlist*>(*arg);
grpc_grpclb_server server;
if (GPR_UNLIKELY(!pb_decode(stream, grpc_lb_v1_Server_fields, &server))) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(stream));
return false;
}
++sl->num_servers;
return true;
}
typedef struct decode_serverlist_arg {
/* The decoding callback is invoked once per server in serverlist. Remember
* which index of the serverlist are we currently decoding */
size_t decoding_idx;
/* The decoded serverlist */
grpc_grpclb_serverlist* serverlist;
} decode_serverlist_arg;
/* invoked once for every Server in ServerList */ #include <grpc/support/alloc.h>
static bool decode_serverlist(pb_istream_t* stream, const pb_field_t* field,
void** arg) {
decode_serverlist_arg* dec_arg = static_cast<decode_serverlist_arg*>(*arg);
GPR_ASSERT(dec_arg->serverlist->num_servers >= dec_arg->decoding_idx);
grpc_grpclb_server* server =
static_cast<grpc_grpclb_server*>(gpr_zalloc(sizeof(grpc_grpclb_server)));
if (GPR_UNLIKELY(!pb_decode(stream, grpc_lb_v1_Server_fields, server))) {
gpr_free(server);
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(stream));
return false;
}
dec_arg->serverlist->servers[dec_arg->decoding_idx++] = server;
return true;
}
grpc_grpclb_request* grpc_grpclb_request_create(const char* lb_service_name) { namespace grpc_core {
grpc_grpclb_request* req = static_cast<grpc_grpclb_request*>(
gpr_malloc(sizeof(grpc_grpclb_request))); grpc_grpclb_request* grpc_grpclb_request_create(const char* lb_service_name,
req->has_client_stats = false; upb_arena* arena) {
req->has_initial_request = true; grpc_grpclb_request* req = grpc_lb_v1_LoadBalanceRequest_new(arena);
req->initial_request.has_name = true; grpc_lb_v1_InitialLoadBalanceRequest* initial_request =
// GCC warns (-Wstringop-truncation) because the destination grpc_lb_v1_LoadBalanceRequest_mutable_initial_request(req, arena);
// buffer size is identical to max-size, leading to a potential size_t name_len =
// char[] with no null terminator. nanopb can handle it fine, GPR_MIN(strlen(lb_service_name), GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH);
// and parantheses around strncpy silence that compiler warning. grpc_lb_v1_InitialLoadBalanceRequest_set_name(
(strncpy(req->initial_request.name, lb_service_name, initial_request, upb_strview_make(lb_service_name, name_len));
GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH));
return req; return req;
} }
static void populate_timestamp(gpr_timespec timestamp, namespace {
grpc_grpclb_timestamp* timestamp_pb) {
timestamp_pb->has_seconds = true;
timestamp_pb->seconds = timestamp.tv_sec;
timestamp_pb->has_nanos = true;
timestamp_pb->nanos = timestamp.tv_nsec;
}
static bool encode_string(pb_ostream_t* stream, const pb_field_t* field, void google_protobuf_Timestamp_assign(google_protobuf_Timestamp* timestamp,
void* const* arg) { const gpr_timespec& value) {
char* str = static_cast<char*>(*arg); google_protobuf_Timestamp_set_seconds(timestamp, value.tv_sec);
if (!pb_encode_tag_for_field(stream, field)) return false; google_protobuf_Timestamp_set_nanos(timestamp, value.tv_nsec);
return pb_encode_string(stream, reinterpret_cast<uint8_t*>(str), strlen(str));
} }
static bool encode_drops(pb_ostream_t* stream, const pb_field_t* field, } // namespace
void* const* arg) {
grpc_core::GrpcLbClientStats::DroppedCallCounts* drop_entries =
static_cast<grpc_core::GrpcLbClientStats::DroppedCallCounts*>(*arg);
if (drop_entries == nullptr) return true;
for (size_t i = 0; i < drop_entries->size(); ++i) {
if (!pb_encode_tag_for_field(stream, field)) return false;
grpc_lb_v1_ClientStatsPerToken drop_message;
drop_message.load_balance_token.funcs.encode = encode_string;
drop_message.load_balance_token.arg = (*drop_entries)[i].token.get();
drop_message.has_num_calls = true;
drop_message.num_calls = (*drop_entries)[i].count;
if (!pb_encode_submessage(stream, grpc_lb_v1_ClientStatsPerToken_fields,
&drop_message)) {
return false;
}
}
return true;
}
grpc_grpclb_request* grpc_grpclb_load_report_request_create( grpc_grpclb_request* grpc_grpclb_load_report_request_create(
grpc_core::GrpcLbClientStats* client_stats) { GrpcLbClientStats* client_stats, upb_arena* arena) {
grpc_grpclb_request* req = static_cast<grpc_grpclb_request*>( grpc_grpclb_request* req = grpc_lb_v1_LoadBalanceRequest_new(arena);
gpr_zalloc(sizeof(grpc_grpclb_request))); grpc_lb_v1_ClientStats* req_stats =
req->has_client_stats = true; grpc_lb_v1_LoadBalanceRequest_mutable_client_stats(req, arena);
req->client_stats.has_timestamp = true; google_protobuf_Timestamp_assign(
populate_timestamp(gpr_now(GPR_CLOCK_REALTIME), &req->client_stats.timestamp); grpc_lb_v1_ClientStats_mutable_timestamp(req_stats, arena),
req->client_stats.has_num_calls_started = true; gpr_now(GPR_CLOCK_REALTIME));
req->client_stats.has_num_calls_finished = true;
req->client_stats.has_num_calls_finished_with_client_failed_to_send = true; int64_t num_calls_started;
req->client_stats.has_num_calls_finished_with_client_failed_to_send = true; int64_t num_calls_finished;
req->client_stats.has_num_calls_finished_known_received = true; int64_t num_calls_finished_with_client_failed_to_send;
req->client_stats.calls_finished_with_drop.funcs.encode = encode_drops; int64_t num_calls_finished_known_received;
grpc_core::UniquePtr<grpc_core::GrpcLbClientStats::DroppedCallCounts> UniquePtr<GrpcLbClientStats::DroppedCallCounts> drop_token_counts;
drop_counts; client_stats->Get(&num_calls_started, &num_calls_finished,
client_stats->Get( &num_calls_finished_with_client_failed_to_send,
&req->client_stats.num_calls_started, &num_calls_finished_known_received, &drop_token_counts);
&req->client_stats.num_calls_finished, grpc_lb_v1_ClientStats_set_num_calls_started(req_stats, num_calls_started);
&req->client_stats.num_calls_finished_with_client_failed_to_send, grpc_lb_v1_ClientStats_set_num_calls_finished(req_stats, num_calls_finished);
&req->client_stats.num_calls_finished_known_received, &drop_counts); grpc_lb_v1_ClientStats_set_num_calls_finished_with_client_failed_to_send(
// Will be deleted in grpc_grpclb_request_destroy(). req_stats, num_calls_finished_with_client_failed_to_send);
req->client_stats.calls_finished_with_drop.arg = drop_counts.release(); grpc_lb_v1_ClientStats_set_num_calls_finished_known_received(
req_stats, num_calls_finished_known_received);
if (drop_token_counts != nullptr) {
for (size_t i = 0; i < drop_token_counts->size(); ++i) {
GrpcLbClientStats::DropTokenCount& cur = (*drop_token_counts)[i];
grpc_lb_v1_ClientStatsPerToken* cur_msg =
grpc_lb_v1_ClientStats_add_calls_finished_with_drop(req_stats, arena);
const size_t token_len = strlen(cur.token.get());
char* token = reinterpret_cast<char*>(upb_arena_malloc(arena, token_len));
memcpy(token, cur.token.get(), token_len);
grpc_lb_v1_ClientStatsPerToken_set_load_balance_token(
cur_msg, upb_strview_make(token, token_len));
grpc_lb_v1_ClientStatsPerToken_set_num_calls(cur_msg, cur.count);
}
}
return req; return req;
} }
grpc_slice grpc_grpclb_request_encode(const grpc_grpclb_request* request) { grpc_slice grpc_grpclb_request_encode(const grpc_grpclb_request* request,
size_t encoded_length; upb_arena* arena) {
pb_ostream_t sizestream; size_t buf_length;
pb_ostream_t outputstream; char* buf =
grpc_slice slice; grpc_lb_v1_LoadBalanceRequest_serialize(request, arena, &buf_length);
memset(&sizestream, 0, sizeof(pb_ostream_t)); return grpc_slice_from_copied_buffer(buf, buf_length);
pb_encode(&sizestream, grpc_lb_v1_LoadBalanceRequest_fields, request);
encoded_length = sizestream.bytes_written;
slice = GRPC_SLICE_MALLOC(encoded_length);
outputstream =
pb_ostream_from_buffer(GRPC_SLICE_START_PTR(slice), encoded_length);
GPR_ASSERT(pb_encode(&outputstream, grpc_lb_v1_LoadBalanceRequest_fields,
request) != 0);
return slice;
}
void grpc_grpclb_request_destroy(grpc_grpclb_request* request) {
if (request->has_client_stats) {
grpc_core::GrpcLbClientStats::DroppedCallCounts* drop_entries =
static_cast<grpc_core::GrpcLbClientStats::DroppedCallCounts*>(
request->client_stats.calls_finished_with_drop.arg);
grpc_core::Delete(drop_entries);
}
gpr_free(request);
} }
typedef grpc_lb_v1_LoadBalanceResponse grpc_grpclb_response; const grpc_grpclb_initial_response* grpc_grpclb_initial_response_parse(
grpc_grpclb_initial_response* grpc_grpclb_initial_response_parse( const grpc_slice& encoded_grpc_grpclb_response, upb_arena* arena) {
const grpc_slice& encoded_grpc_grpclb_response) { grpc_lb_v1_LoadBalanceResponse* response =
pb_istream_t stream = pb_istream_from_buffer( grpc_lb_v1_LoadBalanceResponse_parse(
const_cast<uint8_t*>(GRPC_SLICE_START_PTR(encoded_grpc_grpclb_response)), reinterpret_cast<const char*>(
GRPC_SLICE_LENGTH(encoded_grpc_grpclb_response)); GRPC_SLICE_START_PTR(encoded_grpc_grpclb_response)),
grpc_grpclb_response res; GRPC_SLICE_LENGTH(encoded_grpc_grpclb_response), arena);
memset(&res, 0, sizeof(grpc_grpclb_response)); if (response == nullptr) {
if (GPR_UNLIKELY( gpr_log(GPR_ERROR, "grpc_lb_v1_LoadBalanceResponse parse error");
!pb_decode(&stream, grpc_lb_v1_LoadBalanceResponse_fields, &res))) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&stream));
return nullptr; return nullptr;
} }
return grpc_lb_v1_LoadBalanceResponse_initial_response(response);
if (!res.has_initial_response) return nullptr;
grpc_grpclb_initial_response* initial_res =
static_cast<grpc_grpclb_initial_response*>(
gpr_malloc(sizeof(grpc_grpclb_initial_response)));
memcpy(initial_res, &res.initial_response,
sizeof(grpc_grpclb_initial_response));
return initial_res;
} }
grpc_grpclb_serverlist* grpc_grpclb_response_parse_serverlist( grpc_grpclb_serverlist* grpc_grpclb_response_parse_serverlist(
const grpc_slice& encoded_grpc_grpclb_response) { const grpc_slice& encoded_grpc_grpclb_response) {
pb_istream_t stream = pb_istream_from_buffer( upb::Arena arena;
const_cast<uint8_t*>(GRPC_SLICE_START_PTR(encoded_grpc_grpclb_response)), grpc_lb_v1_LoadBalanceResponse* response =
GRPC_SLICE_LENGTH(encoded_grpc_grpclb_response)); grpc_lb_v1_LoadBalanceResponse_parse(
pb_istream_t stream_at_start = stream; reinterpret_cast<const char*>(
grpc_grpclb_serverlist* sl = static_cast<grpc_grpclb_serverlist*>( GRPC_SLICE_START_PTR(encoded_grpc_grpclb_response)),
GRPC_SLICE_LENGTH(encoded_grpc_grpclb_response), arena.ptr());
if (response == nullptr) {
gpr_log(GPR_ERROR, "grpc_lb_v1_LoadBalanceResponse parse error");
return nullptr;
}
grpc_grpclb_serverlist* server_list = static_cast<grpc_grpclb_serverlist*>(
gpr_zalloc(sizeof(grpc_grpclb_serverlist))); gpr_zalloc(sizeof(grpc_grpclb_serverlist)));
grpc_grpclb_response res;
memset(&res, 0, sizeof(grpc_grpclb_response));
// First pass: count number of servers. // First pass: count number of servers.
res.server_list.servers.funcs.decode = count_serverlist; const grpc_lb_v1_ServerList* server_list_msg =
res.server_list.servers.arg = sl; grpc_lb_v1_LoadBalanceResponse_server_list(response);
bool status = pb_decode(&stream, grpc_lb_v1_LoadBalanceResponse_fields, &res); size_t server_count = 0;
if (GPR_UNLIKELY(!status)) { const grpc_lb_v1_Server* const* servers = nullptr;
gpr_free(sl); if (server_list_msg != nullptr) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&stream)); servers = grpc_lb_v1_ServerList_servers(server_list_msg, &server_count);
return nullptr;
} }
// Second pass: populate servers. // Second pass: populate servers.
if (sl->num_servers > 0) { if (server_count > 0) {
sl->servers = static_cast<grpc_grpclb_server**>( server_list->servers = static_cast<grpc_grpclb_server**>(
gpr_zalloc(sizeof(grpc_grpclb_server*) * sl->num_servers)); gpr_zalloc(sizeof(grpc_grpclb_server*) * server_count));
decode_serverlist_arg decode_arg; server_list->num_servers = server_count;
memset(&decode_arg, 0, sizeof(decode_arg)); for (size_t i = 0; i < server_count; ++i) {
decode_arg.serverlist = sl; grpc_grpclb_server* cur = server_list->servers[i] =
res.server_list.servers.funcs.decode = decode_serverlist; static_cast<grpc_grpclb_server*>(
res.server_list.servers.arg = &decode_arg; gpr_zalloc(sizeof(grpc_grpclb_server)));
status = pb_decode(&stream_at_start, grpc_lb_v1_LoadBalanceResponse_fields, upb_strview address = grpc_lb_v1_Server_ip_address(servers[i]);
&res); if (address.size == 0) {
if (GPR_UNLIKELY(!status)) { ; // Nothing to do because cur->ip_address is an empty string.
grpc_grpclb_destroy_serverlist(sl); } else if (address.size <= GRPC_GRPCLB_SERVER_IP_ADDRESS_MAX_SIZE) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&stream)); cur->ip_address.size = static_cast<int32_t>(address.size);
return nullptr; memcpy(cur->ip_address.data, address.data, address.size);
}
cur->port = grpc_lb_v1_Server_port(servers[i]);
upb_strview token = grpc_lb_v1_Server_load_balance_token(servers[i]);
if (token.size == 0) {
; // Nothing to do because cur->load_balance_token is an empty string.
} else if (token.size <= GRPC_GRPCLB_SERVER_LOAD_BALANCE_TOKEN_MAX_SIZE) {
memcpy(cur->load_balance_token, token.data, token.size);
} else {
gpr_log(GPR_ERROR,
"grpc_lb_v1_LoadBalanceResponse has too long token. len=%zu",
token.size);
}
cur->drop = grpc_lb_v1_Server_drop(servers[i]);
} }
} }
return sl; return server_list;
} }
void grpc_grpclb_destroy_serverlist(grpc_grpclb_serverlist* serverlist) { void grpc_grpclb_destroy_serverlist(grpc_grpclb_serverlist* serverlist) {
@ -239,16 +180,17 @@ void grpc_grpclb_destroy_serverlist(grpc_grpclb_serverlist* serverlist) {
} }
grpc_grpclb_serverlist* grpc_grpclb_serverlist_copy( grpc_grpclb_serverlist* grpc_grpclb_serverlist_copy(
const grpc_grpclb_serverlist* sl) { const grpc_grpclb_serverlist* server_list) {
grpc_grpclb_serverlist* copy = static_cast<grpc_grpclb_serverlist*>( grpc_grpclb_serverlist* copy = static_cast<grpc_grpclb_serverlist*>(
gpr_zalloc(sizeof(grpc_grpclb_serverlist))); gpr_zalloc(sizeof(grpc_grpclb_serverlist)));
copy->num_servers = sl->num_servers; copy->num_servers = server_list->num_servers;
copy->servers = static_cast<grpc_grpclb_server**>( copy->servers = static_cast<grpc_grpclb_server**>(
gpr_malloc(sizeof(grpc_grpclb_server*) * sl->num_servers)); gpr_malloc(sizeof(grpc_grpclb_server*) * server_list->num_servers));
for (size_t i = 0; i < sl->num_servers; i++) { for (size_t i = 0; i < server_list->num_servers; i++) {
copy->servers[i] = static_cast<grpc_grpclb_server*>( copy->servers[i] = static_cast<grpc_grpclb_server*>(
gpr_malloc(sizeof(grpc_grpclb_server))); gpr_malloc(sizeof(grpc_grpclb_server)));
memcpy(copy->servers[i], sl->servers[i], sizeof(grpc_grpclb_server)); memcpy(copy->servers[i], server_list->servers[i],
sizeof(grpc_grpclb_server));
} }
return copy; return copy;
} }
@ -274,38 +216,11 @@ bool grpc_grpclb_server_equals(const grpc_grpclb_server* lhs,
return memcmp(lhs, rhs, sizeof(grpc_grpclb_server)) == 0; return memcmp(lhs, rhs, sizeof(grpc_grpclb_server)) == 0;
} }
int grpc_grpclb_duration_compare(const grpc_grpclb_duration* lhs, grpc_millis grpc_grpclb_duration_to_millis(
const grpc_grpclb_duration* rhs) { const grpc_grpclb_duration* duration_pb) {
GPR_ASSERT(lhs && rhs);
if (lhs->has_seconds && rhs->has_seconds) {
if (lhs->seconds < rhs->seconds) return -1;
if (lhs->seconds > rhs->seconds) return 1;
} else if (lhs->has_seconds) {
return 1;
} else if (rhs->has_seconds) {
return -1;
}
GPR_ASSERT(lhs->seconds == rhs->seconds);
if (lhs->has_nanos && rhs->has_nanos) {
if (lhs->nanos < rhs->nanos) return -1;
if (lhs->nanos > rhs->nanos) return 1;
} else if (lhs->has_nanos) {
return 1;
} else if (rhs->has_nanos) {
return -1;
}
return 0;
}
grpc_millis grpc_grpclb_duration_to_millis(grpc_grpclb_duration* duration_pb) {
return static_cast<grpc_millis>( return static_cast<grpc_millis>(
(duration_pb->has_seconds ? duration_pb->seconds : 0) * GPR_MS_PER_SEC + google_protobuf_Duration_seconds(duration_pb) * GPR_MS_PER_SEC +
(duration_pb->has_nanos ? duration_pb->nanos : 0) / GPR_NS_PER_MS); google_protobuf_Duration_nanos(duration_pb) / GPR_NS_PER_MS);
} }
void grpc_grpclb_initial_response_destroy( } // namespace grpc_core
grpc_grpclb_initial_response* response) {
gpr_free(response);
}

@ -24,38 +24,57 @@
#include <grpc/slice_buffer.h> #include <grpc/slice_buffer.h>
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h" #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/exec_ctx.h"
#include "src/proto/grpc/lb/v1/load_balancer.upb.h"
#define GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH 128 #define GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH 128
#define GRPC_GRPCLB_SERVER_IP_ADDRESS_MAX_SIZE 16
#define GRPC_GRPCLB_SERVER_LOAD_BALANCE_TOKEN_MAX_SIZE 50
namespace grpc_core {
typedef grpc_lb_v1_Server_ip_address_t grpc_grpclb_ip_address;
typedef grpc_lb_v1_LoadBalanceRequest grpc_grpclb_request; typedef grpc_lb_v1_LoadBalanceRequest grpc_grpclb_request;
typedef grpc_lb_v1_LoadBalanceResponse grpc_grpclb_response;
typedef grpc_lb_v1_InitialLoadBalanceResponse grpc_grpclb_initial_response; typedef grpc_lb_v1_InitialLoadBalanceResponse grpc_grpclb_initial_response;
typedef grpc_lb_v1_Server grpc_grpclb_server;
typedef google_protobuf_Duration grpc_grpclb_duration; typedef google_protobuf_Duration grpc_grpclb_duration;
typedef google_protobuf_Timestamp grpc_grpclb_timestamp; typedef google_protobuf_Timestamp grpc_grpclb_timestamp;
typedef struct {
int32_t size;
char data[GRPC_GRPCLB_SERVER_IP_ADDRESS_MAX_SIZE];
} grpc_grpclb_server_ip_address;
// Contains server information. When the drop field is not true, use the other
// fields.
typedef struct {
grpc_grpclb_server_ip_address ip_address;
int32_t port;
char load_balance_token[GRPC_GRPCLB_SERVER_LOAD_BALANCE_TOKEN_MAX_SIZE];
bool drop;
} grpc_grpclb_server;
typedef struct { typedef struct {
grpc_grpclb_server** servers; grpc_grpclb_server** servers;
size_t num_servers; size_t num_servers;
} grpc_grpclb_serverlist; } grpc_grpclb_serverlist;
/** Create a request for a gRPC LB service under \a lb_service_name */ /**
grpc_grpclb_request* grpc_grpclb_request_create(const char* lb_service_name); * Create a request for a gRPC LB service under \a lb_service_name.
* \a lb_service_name should be alive when returned request is being used.
*/
grpc_grpclb_request* grpc_grpclb_request_create(const char* lb_service_name,
upb_arena* arena);
grpc_grpclb_request* grpc_grpclb_load_report_request_create( grpc_grpclb_request* grpc_grpclb_load_report_request_create(
grpc_core::GrpcLbClientStats* client_stats); grpc_core::GrpcLbClientStats* client_stats, upb_arena* arena);
/** Protocol Buffers v3-encode \a request */ /** Protocol Buffers v3-encode \a request */
grpc_slice grpc_grpclb_request_encode(const grpc_grpclb_request* request); grpc_slice grpc_grpclb_request_encode(const grpc_grpclb_request* request,
upb_arena* arena);
/** Destroy \a request */
void grpc_grpclb_request_destroy(grpc_grpclb_request* request);
/** Parse (ie, decode) the bytes in \a encoded_grpc_grpclb_response as a \a /** Parse (ie, decode) the bytes in \a encoded_grpc_grpclb_response as a \a
* grpc_grpclb_initial_response */ * grpc_grpclb_initial_response */
grpc_grpclb_initial_response* grpc_grpclb_initial_response_parse( const grpc_grpclb_initial_response* grpc_grpclb_initial_response_parse(
const grpc_slice& encoded_grpc_grpclb_response); const grpc_slice& encoded_grpc_grpclb_response, upb_arena* arena);
/** Parse the list of servers from an encoded \a grpc_grpclb_response */ /** Parse the list of servers from an encoded \a grpc_grpclb_response */
grpc_grpclb_serverlist* grpc_grpclb_response_parse_serverlist( grpc_grpclb_serverlist* grpc_grpclb_response_parse_serverlist(
@ -75,16 +94,10 @@ bool grpc_grpclb_server_equals(const grpc_grpclb_server* lhs,
/** Destroy \a serverlist */ /** Destroy \a serverlist */
void grpc_grpclb_destroy_serverlist(grpc_grpclb_serverlist* serverlist); void grpc_grpclb_destroy_serverlist(grpc_grpclb_serverlist* serverlist);
/** Compare \a lhs against \a rhs and return 0 if \a lhs and \a rhs are equal, grpc_millis grpc_grpclb_duration_to_millis(
* < 0 if \a lhs represents a duration shorter than \a rhs and > 0 otherwise */ const grpc_grpclb_duration* duration_pb);
int grpc_grpclb_duration_compare(const grpc_grpclb_duration* lhs,
const grpc_grpclb_duration* rhs);
grpc_millis grpc_grpclb_duration_to_millis(grpc_grpclb_duration* duration_pb);
/** Destroy \a initial_response */ } // namespace grpc_core
void grpc_grpclb_initial_response_destroy(
grpc_grpclb_initial_response* response);
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_LOAD_BALANCER_API_H \ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_LOAD_BALANCER_API_H \
*/ */

@ -1,19 +0,0 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.3.7-dev */
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
const pb_field_t google_protobuf_Duration_fields[3] = {
PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, google_protobuf_Duration, seconds, seconds, 0),
PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, google_protobuf_Duration, nanos, seconds, 0),
PB_LAST_FIELD
};
/* @@protoc_insertion_point(eof) */

@ -1,54 +0,0 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.3.7-dev */
#ifndef PB_GOOGLE_PROTOBUF_DURATION_PB_H_INCLUDED
#define PB_GOOGLE_PROTOBUF_DURATION_PB_H_INCLUDED
#include "pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Struct definitions */
typedef struct _google_protobuf_Duration {
bool has_seconds;
int64_t seconds;
bool has_nanos;
int32_t nanos;
/* @@protoc_insertion_point(struct:google_protobuf_Duration) */
} google_protobuf_Duration;
/* Default values for struct fields */
/* Initializer values for message structs */
#define google_protobuf_Duration_init_default {false, 0, false, 0}
#define google_protobuf_Duration_init_zero {false, 0, false, 0}
/* Field tags (for use in manual encoding/decoding) */
#define google_protobuf_Duration_seconds_tag 1
#define google_protobuf_Duration_nanos_tag 2
/* Struct field encoding specification for nanopb */
extern const pb_field_t google_protobuf_Duration_fields[3];
/* Maximum encoded size of messages (where known) */
#define google_protobuf_Duration_size 22
/* Message IDs (where set with "msgid" option) */
#ifdef PB_MSGID
#define DURATION_MESSAGES \
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* @@protoc_insertion_point(eof) */
#endif

@ -1,19 +0,0 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.3.7-dev */
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
const pb_field_t google_protobuf_Timestamp_fields[3] = {
PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, google_protobuf_Timestamp, seconds, seconds, 0),
PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, google_protobuf_Timestamp, nanos, seconds, 0),
PB_LAST_FIELD
};
/* @@protoc_insertion_point(eof) */

@ -1,54 +0,0 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.3.7-dev */
#ifndef PB_GOOGLE_PROTOBUF_TIMESTAMP_PB_H_INCLUDED
#define PB_GOOGLE_PROTOBUF_TIMESTAMP_PB_H_INCLUDED
#include "pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Struct definitions */
typedef struct _google_protobuf_Timestamp {
bool has_seconds;
int64_t seconds;
bool has_nanos;
int32_t nanos;
/* @@protoc_insertion_point(struct:google_protobuf_Timestamp) */
} google_protobuf_Timestamp;
/* Default values for struct fields */
/* Initializer values for message structs */
#define google_protobuf_Timestamp_init_default {false, 0, false, 0}
#define google_protobuf_Timestamp_init_zero {false, 0, false, 0}
/* Field tags (for use in manual encoding/decoding) */
#define google_protobuf_Timestamp_seconds_tag 1
#define google_protobuf_Timestamp_nanos_tag 2
/* Struct field encoding specification for nanopb */
extern const pb_field_t google_protobuf_Timestamp_fields[3];
/* Maximum encoded size of messages (where known) */
#define google_protobuf_Timestamp_size 22
/* Message IDs (where set with "msgid" option) */
#ifdef PB_MSGID
#define TIMESTAMP_MESSAGES \
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* @@protoc_insertion_point(eof) */
#endif

@ -1,89 +0,0 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.3.7-dev */
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
const pb_field_t grpc_lb_v1_LoadBalanceRequest_fields[3] = {
PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_lb_v1_LoadBalanceRequest, initial_request, initial_request, &grpc_lb_v1_InitialLoadBalanceRequest_fields),
PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v1_LoadBalanceRequest, client_stats, initial_request, &grpc_lb_v1_ClientStats_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_lb_v1_InitialLoadBalanceRequest_fields[2] = {
PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v1_InitialLoadBalanceRequest, name, name, 0),
PB_LAST_FIELD
};
const pb_field_t grpc_lb_v1_ClientStatsPerToken_fields[3] = {
PB_FIELD( 1, STRING , OPTIONAL, CALLBACK, FIRST, grpc_lb_v1_ClientStatsPerToken, load_balance_token, load_balance_token, 0),
PB_FIELD( 2, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_ClientStatsPerToken, num_calls, load_balance_token, 0),
PB_LAST_FIELD
};
const pb_field_t grpc_lb_v1_ClientStats_fields[7] = {
PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_lb_v1_ClientStats, timestamp, timestamp, &google_protobuf_Timestamp_fields),
PB_FIELD( 2, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_ClientStats, num_calls_started, timestamp, 0),
PB_FIELD( 3, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_ClientStats, num_calls_finished, num_calls_started, 0),
PB_FIELD( 6, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_ClientStats, num_calls_finished_with_client_failed_to_send, num_calls_finished, 0),
PB_FIELD( 7, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_ClientStats, num_calls_finished_known_received, num_calls_finished_with_client_failed_to_send, 0),
PB_FIELD( 8, MESSAGE , REPEATED, CALLBACK, OTHER, grpc_lb_v1_ClientStats, calls_finished_with_drop, num_calls_finished_known_received, &grpc_lb_v1_ClientStatsPerToken_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_lb_v1_LoadBalanceResponse_fields[3] = {
PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_lb_v1_LoadBalanceResponse, initial_response, initial_response, &grpc_lb_v1_InitialLoadBalanceResponse_fields),
PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v1_LoadBalanceResponse, server_list, initial_response, &grpc_lb_v1_ServerList_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_lb_v1_InitialLoadBalanceResponse_fields[3] = {
PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v1_InitialLoadBalanceResponse, load_balancer_delegate, load_balancer_delegate, 0),
PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval, load_balancer_delegate, &google_protobuf_Duration_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_lb_v1_ServerList_fields[2] = {
PB_FIELD( 1, MESSAGE , REPEATED, CALLBACK, FIRST, grpc_lb_v1_ServerList, servers, servers, &grpc_lb_v1_Server_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_lb_v1_Server_fields[5] = {
PB_FIELD( 1, BYTES , OPTIONAL, STATIC , FIRST, grpc_lb_v1_Server, ip_address, ip_address, 0),
PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_Server, port, ip_address, 0),
PB_FIELD( 3, STRING , OPTIONAL, STATIC , OTHER, grpc_lb_v1_Server, load_balance_token, port, 0),
PB_FIELD( 4, BOOL , OPTIONAL, STATIC , OTHER, grpc_lb_v1_Server, drop, load_balance_token, 0),
PB_LAST_FIELD
};
/* Check that field information fits in pb_field_t */
#if !defined(PB_FIELD_32BIT)
/* If you get an error here, it means that you need to define PB_FIELD_32BIT
* compile-time option. You can do that in pb.h or on compiler command line.
*
* The reason you need to do this is that some of your messages contain tag
* numbers or field sizes that are larger than what can fit in 8 or 16 bit
* field descriptors.
*/
PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 65536 && pb_membersize(grpc_lb_v1_ClientStats, timestamp) < 65536 && pb_membersize(grpc_lb_v1_ClientStats, calls_finished_with_drop) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 65536 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 65536 && pb_membersize(grpc_lb_v1_ServerList, servers) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_lb_v1_LoadBalanceRequest_grpc_lb_v1_InitialLoadBalanceRequest_grpc_lb_v1_ClientStatsPerToken_grpc_lb_v1_ClientStats_grpc_lb_v1_LoadBalanceResponse_grpc_lb_v1_InitialLoadBalanceResponse_grpc_lb_v1_ServerList_grpc_lb_v1_Server)
#endif
#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
/* If you get an error here, it means that you need to define PB_FIELD_16BIT
* compile-time option. You can do that in pb.h or on compiler command line.
*
* The reason you need to do this is that some of your messages contain tag
* numbers or field sizes that are larger than what can fit in the default
* 8 bit descriptors.
*/
PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 256 && pb_membersize(grpc_lb_v1_ClientStats, timestamp) < 256 && pb_membersize(grpc_lb_v1_ClientStats, calls_finished_with_drop) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 256 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 256 && pb_membersize(grpc_lb_v1_ServerList, servers) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_lb_v1_LoadBalanceRequest_grpc_lb_v1_InitialLoadBalanceRequest_grpc_lb_v1_ClientStatsPerToken_grpc_lb_v1_ClientStats_grpc_lb_v1_LoadBalanceResponse_grpc_lb_v1_InitialLoadBalanceResponse_grpc_lb_v1_ServerList_grpc_lb_v1_Server)
#endif
/* @@protoc_insertion_point(eof) */

@ -1,164 +0,0 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.3.7-dev */
#ifndef PB_GRPC_LB_V1_LOAD_BALANCER_PB_H_INCLUDED
#define PB_GRPC_LB_V1_LOAD_BALANCER_PB_H_INCLUDED
#include "pb.h"
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h"
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Struct definitions */
typedef struct _grpc_lb_v1_ServerList {
pb_callback_t servers;
/* @@protoc_insertion_point(struct:grpc_lb_v1_ServerList) */
} grpc_lb_v1_ServerList;
typedef struct _grpc_lb_v1_ClientStats {
bool has_timestamp;
google_protobuf_Timestamp timestamp;
bool has_num_calls_started;
int64_t num_calls_started;
bool has_num_calls_finished;
int64_t num_calls_finished;
bool has_num_calls_finished_with_client_failed_to_send;
int64_t num_calls_finished_with_client_failed_to_send;
bool has_num_calls_finished_known_received;
int64_t num_calls_finished_known_received;
pb_callback_t calls_finished_with_drop;
/* @@protoc_insertion_point(struct:grpc_lb_v1_ClientStats) */
} grpc_lb_v1_ClientStats;
typedef struct _grpc_lb_v1_ClientStatsPerToken {
pb_callback_t load_balance_token;
bool has_num_calls;
int64_t num_calls;
/* @@protoc_insertion_point(struct:grpc_lb_v1_ClientStatsPerToken) */
} grpc_lb_v1_ClientStatsPerToken;
typedef struct _grpc_lb_v1_InitialLoadBalanceRequest {
bool has_name;
char name[128];
/* @@protoc_insertion_point(struct:grpc_lb_v1_InitialLoadBalanceRequest) */
} grpc_lb_v1_InitialLoadBalanceRequest;
typedef struct _grpc_lb_v1_InitialLoadBalanceResponse {
bool has_load_balancer_delegate;
char load_balancer_delegate[64];
bool has_client_stats_report_interval;
google_protobuf_Duration client_stats_report_interval;
/* @@protoc_insertion_point(struct:grpc_lb_v1_InitialLoadBalanceResponse) */
} grpc_lb_v1_InitialLoadBalanceResponse;
typedef PB_BYTES_ARRAY_T(16) grpc_lb_v1_Server_ip_address_t;
typedef struct _grpc_lb_v1_Server {
bool has_ip_address;
grpc_lb_v1_Server_ip_address_t ip_address;
bool has_port;
int32_t port;
bool has_load_balance_token;
char load_balance_token[50];
bool has_drop;
bool drop;
/* @@protoc_insertion_point(struct:grpc_lb_v1_Server) */
} grpc_lb_v1_Server;
typedef struct _grpc_lb_v1_LoadBalanceRequest {
bool has_initial_request;
grpc_lb_v1_InitialLoadBalanceRequest initial_request;
bool has_client_stats;
grpc_lb_v1_ClientStats client_stats;
/* @@protoc_insertion_point(struct:grpc_lb_v1_LoadBalanceRequest) */
} grpc_lb_v1_LoadBalanceRequest;
typedef struct _grpc_lb_v1_LoadBalanceResponse {
bool has_initial_response;
grpc_lb_v1_InitialLoadBalanceResponse initial_response;
bool has_server_list;
grpc_lb_v1_ServerList server_list;
/* @@protoc_insertion_point(struct:grpc_lb_v1_LoadBalanceResponse) */
} grpc_lb_v1_LoadBalanceResponse;
/* Default values for struct fields */
/* Initializer values for message structs */
#define grpc_lb_v1_LoadBalanceRequest_init_default {false, grpc_lb_v1_InitialLoadBalanceRequest_init_default, false, grpc_lb_v1_ClientStats_init_default}
#define grpc_lb_v1_InitialLoadBalanceRequest_init_default {false, ""}
#define grpc_lb_v1_ClientStatsPerToken_init_default {{{NULL}, NULL}, false, 0}
#define grpc_lb_v1_ClientStats_init_default {false, google_protobuf_Timestamp_init_default, false, 0, false, 0, false, 0, false, 0, {{NULL}, NULL}}
#define grpc_lb_v1_LoadBalanceResponse_init_default {false, grpc_lb_v1_InitialLoadBalanceResponse_init_default, false, grpc_lb_v1_ServerList_init_default}
#define grpc_lb_v1_InitialLoadBalanceResponse_init_default {false, "", false, google_protobuf_Duration_init_default}
#define grpc_lb_v1_ServerList_init_default {{{NULL}, NULL}}
#define grpc_lb_v1_Server_init_default {false, {0, {0}}, false, 0, false, "", false, 0}
#define grpc_lb_v1_LoadBalanceRequest_init_zero {false, grpc_lb_v1_InitialLoadBalanceRequest_init_zero, false, grpc_lb_v1_ClientStats_init_zero}
#define grpc_lb_v1_InitialLoadBalanceRequest_init_zero {false, ""}
#define grpc_lb_v1_ClientStatsPerToken_init_zero {{{NULL}, NULL}, false, 0}
#define grpc_lb_v1_ClientStats_init_zero {false, google_protobuf_Timestamp_init_zero, false, 0, false, 0, false, 0, false, 0, {{NULL}, NULL}}
#define grpc_lb_v1_LoadBalanceResponse_init_zero {false, grpc_lb_v1_InitialLoadBalanceResponse_init_zero, false, grpc_lb_v1_ServerList_init_zero}
#define grpc_lb_v1_InitialLoadBalanceResponse_init_zero {false, "", false, google_protobuf_Duration_init_zero}
#define grpc_lb_v1_ServerList_init_zero {{{NULL}, NULL}}
#define grpc_lb_v1_Server_init_zero {false, {0, {0}}, false, 0, false, "", false, 0}
/* Field tags (for use in manual encoding/decoding) */
#define grpc_lb_v1_ServerList_servers_tag 1
#define grpc_lb_v1_ClientStats_timestamp_tag 1
#define grpc_lb_v1_ClientStats_num_calls_started_tag 2
#define grpc_lb_v1_ClientStats_num_calls_finished_tag 3
#define grpc_lb_v1_ClientStats_num_calls_finished_with_client_failed_to_send_tag 6
#define grpc_lb_v1_ClientStats_num_calls_finished_known_received_tag 7
#define grpc_lb_v1_ClientStats_calls_finished_with_drop_tag 8
#define grpc_lb_v1_ClientStatsPerToken_load_balance_token_tag 1
#define grpc_lb_v1_ClientStatsPerToken_num_calls_tag 2
#define grpc_lb_v1_InitialLoadBalanceRequest_name_tag 1
#define grpc_lb_v1_InitialLoadBalanceResponse_load_balancer_delegate_tag 1
#define grpc_lb_v1_InitialLoadBalanceResponse_client_stats_report_interval_tag 2
#define grpc_lb_v1_Server_ip_address_tag 1
#define grpc_lb_v1_Server_port_tag 2
#define grpc_lb_v1_Server_load_balance_token_tag 3
#define grpc_lb_v1_Server_drop_tag 4
#define grpc_lb_v1_LoadBalanceRequest_initial_request_tag 1
#define grpc_lb_v1_LoadBalanceRequest_client_stats_tag 2
#define grpc_lb_v1_LoadBalanceResponse_initial_response_tag 1
#define grpc_lb_v1_LoadBalanceResponse_server_list_tag 2
/* Struct field encoding specification for nanopb */
extern const pb_field_t grpc_lb_v1_LoadBalanceRequest_fields[3];
extern const pb_field_t grpc_lb_v1_InitialLoadBalanceRequest_fields[2];
extern const pb_field_t grpc_lb_v1_ClientStatsPerToken_fields[3];
extern const pb_field_t grpc_lb_v1_ClientStats_fields[7];
extern const pb_field_t grpc_lb_v1_LoadBalanceResponse_fields[3];
extern const pb_field_t grpc_lb_v1_InitialLoadBalanceResponse_fields[3];
extern const pb_field_t grpc_lb_v1_ServerList_fields[2];
extern const pb_field_t grpc_lb_v1_Server_fields[5];
/* Maximum encoded size of messages (where known) */
#define grpc_lb_v1_LoadBalanceRequest_size (140 + grpc_lb_v1_ClientStats_size)
#define grpc_lb_v1_InitialLoadBalanceRequest_size 131
/* grpc_lb_v1_ClientStatsPerToken_size depends on runtime parameters */
/* grpc_lb_v1_ClientStats_size depends on runtime parameters */
#define grpc_lb_v1_LoadBalanceResponse_size (98 + grpc_lb_v1_ServerList_size)
#define grpc_lb_v1_InitialLoadBalanceResponse_size 90
/* grpc_lb_v1_ServerList_size depends on runtime parameters */
#define grpc_lb_v1_Server_size 83
/* Message IDs (where set with "msgid" option) */
#ifdef PB_MSGID
#define LOAD_BALANCER_MESSAGES \
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* @@protoc_insertion_point(eof) */
#endif

@ -116,10 +116,6 @@ TraceFlag grpc_lb_xds_trace(false, "xds");
namespace { namespace {
constexpr char kXds[] = "xds_experimental"; constexpr char kXds[] = "xds_experimental";
constexpr char kDefaultLocalityRegion[] = "xds_default_locality_region";
constexpr char kDefaultLocalityZone[] = "xds_default_locality_zone";
constexpr char kDefaultLocalitySubzone[] = "xds_default_locality_subzone";
constexpr uint32_t kDefaultLocalityWeight = 3;
class ParsedXdsConfig : public LoadBalancingPolicy::Config { class ParsedXdsConfig : public LoadBalancingPolicy::Config {
public: public:
@ -158,9 +154,6 @@ class XdsLb : public LoadBalancingPolicy {
void ResetBackoffLocked() override; void ResetBackoffLocked() override;
private: private:
struct LocalityServerlistEntry;
using LocalityList = InlinedVector<UniquePtr<LocalityServerlistEntry>, 1>;
/// Contains a channel to the LB server and all the data related to the /// Contains a channel to the LB server and all the data related to the
/// channel. /// channel.
class BalancerChannelState class BalancerChannelState
@ -181,7 +174,7 @@ class XdsLb : public LoadBalancingPolicy {
return client_stats_; return client_stats_;
} }
bool seen_initial_response() const { return seen_initial_response_; } bool seen_response() const { return seen_response_; }
private: private:
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
@ -220,7 +213,7 @@ class XdsLb : public LoadBalancingPolicy {
// recv_message // recv_message
grpc_byte_buffer* recv_message_payload_ = nullptr; grpc_byte_buffer* recv_message_payload_ = nullptr;
grpc_closure lb_on_balancer_message_received_; grpc_closure lb_on_balancer_message_received_;
bool seen_initial_response_ = false; bool seen_response_ = false;
// recv_trailing_metadata // recv_trailing_metadata
grpc_closure lb_on_balancer_status_received_; grpc_closure lb_on_balancer_status_received_;
@ -351,57 +344,16 @@ class XdsLb : public LoadBalancingPolicy {
LoadBalancingPolicy* child_ = nullptr; LoadBalancingPolicy* child_ = nullptr;
}; };
class LocalityName : public RefCounted<LocalityName> {
public:
struct Less {
bool operator()(const RefCountedPtr<LocalityName>& lhs,
const RefCountedPtr<LocalityName>& rhs) {
int cmp_result = strcmp(lhs->region_.get(), rhs->region_.get());
if (cmp_result != 0) return cmp_result < 0;
cmp_result = strcmp(lhs->zone_.get(), rhs->zone_.get());
if (cmp_result != 0) return cmp_result < 0;
return strcmp(lhs->subzone_.get(), rhs->subzone_.get()) < 0;
}
};
LocalityName(UniquePtr<char> region, UniquePtr<char> zone,
UniquePtr<char> subzone)
: region_(std::move(region)),
zone_(std::move(zone)),
subzone_(std::move(subzone)) {}
bool operator==(const LocalityName& other) const {
return strcmp(region_.get(), other.region_.get()) == 0 &&
strcmp(zone_.get(), other.zone_.get()) == 0 &&
strcmp(subzone_.get(), other.subzone_.get()) == 0;
}
const char* AsHumanReadableString() {
if (human_readable_string_ == nullptr) {
char* tmp;
gpr_asprintf(&tmp, "{region=\"%s\", zone=\"%s\", subzone=\"%s\"}",
region_.get(), zone_.get(), subzone_.get());
human_readable_string_.reset(tmp);
}
return human_readable_string_.get();
}
private:
UniquePtr<char> region_;
UniquePtr<char> zone_;
UniquePtr<char> subzone_;
UniquePtr<char> human_readable_string_;
};
class LocalityMap { class LocalityMap {
public: public:
class LocalityEntry : public InternallyRefCounted<LocalityEntry> { class LocalityEntry : public InternallyRefCounted<LocalityEntry> {
public: public:
LocalityEntry(RefCountedPtr<XdsLb> parent, LocalityEntry(RefCountedPtr<XdsLb> parent,
RefCountedPtr<LocalityName> name, uint32_t locality_weight); RefCountedPtr<XdsLocalityName> name,
uint32_t locality_weight);
~LocalityEntry(); ~LocalityEntry();
void UpdateLocked(xds_grpclb_serverlist* serverlist, void UpdateLocked(ServerAddressList serverlist,
LoadBalancingPolicy::Config* child_policy_config, LoadBalancingPolicy::Config* child_policy_config,
const grpc_channel_args* args); const grpc_channel_args* args);
void ShutdownLocked(); void ShutdownLocked();
@ -441,7 +393,7 @@ class XdsLb : public LoadBalancingPolicy {
const grpc_channel_args* args); const grpc_channel_args* args);
RefCountedPtr<XdsLb> parent_; RefCountedPtr<XdsLb> parent_;
RefCountedPtr<LocalityName> name_; RefCountedPtr<XdsLocalityName> name_;
OrphanablePtr<LoadBalancingPolicy> child_policy_; OrphanablePtr<LoadBalancingPolicy> child_policy_;
OrphanablePtr<LoadBalancingPolicy> pending_child_policy_; OrphanablePtr<LoadBalancingPolicy> pending_child_policy_;
RefCountedPtr<PickerRef> picker_ref_; RefCountedPtr<PickerRef> picker_ref_;
@ -449,35 +401,25 @@ class XdsLb : public LoadBalancingPolicy {
uint32_t locality_weight_; uint32_t locality_weight_;
}; };
void UpdateLocked(const LocalityList& locality_list, void UpdateLocked(const XdsLocalityList& locality_list,
LoadBalancingPolicy::Config* child_policy_config, LoadBalancingPolicy::Config* child_policy_config,
const grpc_channel_args* args, XdsLb* parent); const grpc_channel_args* args, XdsLb* parent);
void ShutdownLocked(); void ShutdownLocked();
void ResetBackoffLocked(); void ResetBackoffLocked();
private: private:
void PruneLocalities(const LocalityList& locality_list); void PruneLocalities(const XdsLocalityList& locality_list);
Map<RefCountedPtr<LocalityName>, OrphanablePtr<LocalityEntry>, Map<RefCountedPtr<XdsLocalityName>, OrphanablePtr<LocalityEntry>,
LocalityName::Less> XdsLocalityName::Less>
map_; map_;
}; };
struct LocalityServerlistEntry {
~LocalityServerlistEntry() { xds_grpclb_destroy_serverlist(serverlist); }
RefCountedPtr<LocalityName> locality_name;
uint32_t locality_weight;
// The deserialized response from the balancer. May be nullptr until one
// such response has arrived.
xds_grpclb_serverlist* serverlist;
};
~XdsLb(); ~XdsLb();
void ShutdownLocked() override; void ShutdownLocked() override;
// Helper function used in UpdateLocked(). // Helper function used in UpdateLocked().
void ProcessAddressesAndChannelArgsLocked(const ServerAddressList& addresses, void ProcessAddressesAndChannelArgsLocked(ServerAddressList addresses,
const grpc_channel_args& args); const grpc_channel_args& args);
// Parses the xds config given the JSON node of the first child of XdsConfig. // Parses the xds config given the JSON node of the first child of XdsConfig.
@ -499,7 +441,7 @@ class XdsLb : public LoadBalancingPolicy {
const char* name, const grpc_channel_args* args); const char* name, const grpc_channel_args* args);
void MaybeExitFallbackMode(); void MaybeExitFallbackMode();
// Who the client is trying to communicate with. // Name of the backend server to connect to.
const char* server_name_ = nullptr; const char* server_name_ = nullptr;
// Name of the balancer to connect to. // Name of the balancer to connect to.
@ -547,7 +489,7 @@ class XdsLb : public LoadBalancingPolicy {
LocalityMap locality_map_; LocalityMap locality_map_;
// TODO(mhaidry) : Add support for multiple maps of localities // TODO(mhaidry) : Add support for multiple maps of localities
// with different priorities // with different priorities
LocalityList locality_serverlist_; XdsLocalityList locality_list_;
// TODO(mhaidry) : Add a pending locality map that may be swapped with the // TODO(mhaidry) : Add a pending locality map that may be swapped with the
// the current one when new localities in the pending map are ready // the current one when new localities in the pending map are ready
// to accept connections // to accept connections
@ -677,79 +619,6 @@ void XdsLb::FallbackHelper::AddTraceEvent(TraceSeverity severity,
parent_->channel_control_helper()->AddTraceEvent(severity, message); parent_->channel_control_helper()->AddTraceEvent(severity, message);
} }
//
// serverlist parsing code
//
// Returns the backend addresses extracted from the given addresses.
ServerAddressList ExtractBackendAddresses(const ServerAddressList& addresses) {
ServerAddressList backend_addresses;
for (size_t i = 0; i < addresses.size(); ++i) {
if (!addresses[i].IsBalancer()) {
backend_addresses.emplace_back(addresses[i]);
}
}
return backend_addresses;
}
bool IsServerValid(const xds_grpclb_server* server, size_t idx, bool log) {
if (server->drop) return false;
const xds_grpclb_ip_address* ip = &server->ip_address;
if (GPR_UNLIKELY(server->port >> 16 != 0)) {
if (log) {
gpr_log(GPR_ERROR,
"Invalid port '%d' at index %lu of serverlist. Ignoring.",
server->port, (unsigned long)idx);
}
return false;
}
if (GPR_UNLIKELY(ip->size != 4 && ip->size != 16)) {
if (log) {
gpr_log(GPR_ERROR,
"Expected IP to be 4 or 16 bytes, got %d at index %lu of "
"serverlist. Ignoring",
ip->size, (unsigned long)idx);
}
return false;
}
return true;
}
void ParseServer(const xds_grpclb_server* server, grpc_resolved_address* addr) {
memset(addr, 0, sizeof(*addr));
if (server->drop) return;
const uint16_t netorder_port = grpc_htons((uint16_t)server->port);
/* the addresses are given in binary format (a in(6)_addr struct) in
* server->ip_address.bytes. */
const xds_grpclb_ip_address* ip = &server->ip_address;
if (ip->size == 4) {
addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
grpc_sockaddr_in* addr4 = reinterpret_cast<grpc_sockaddr_in*>(&addr->addr);
addr4->sin_family = GRPC_AF_INET;
memcpy(&addr4->sin_addr, ip->bytes, ip->size);
addr4->sin_port = netorder_port;
} else if (ip->size == 16) {
addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)&addr->addr;
addr6->sin6_family = GRPC_AF_INET6;
memcpy(&addr6->sin6_addr, ip->bytes, ip->size);
addr6->sin6_port = netorder_port;
}
}
// Returns addresses extracted from \a serverlist.
ServerAddressList ProcessServerlist(const xds_grpclb_serverlist* serverlist) {
ServerAddressList addresses;
for (size_t i = 0; i < serverlist->num_servers; ++i) {
const xds_grpclb_server* server = serverlist->servers[i];
if (!IsServerValid(serverlist->servers[i], i, false)) continue;
grpc_resolved_address addr;
ParseServer(server, &addr);
addresses.emplace_back(addr, nullptr);
}
return addresses;
}
// //
// XdsLb::BalancerChannelState // XdsLb::BalancerChannelState
// //
@ -913,19 +782,18 @@ XdsLb::BalancerChannelState::BalancerCallState::BalancerCallState(
xdslb_policy()->lb_call_timeout_ms_ == 0 xdslb_policy()->lb_call_timeout_ms_ == 0
? GRPC_MILLIS_INF_FUTURE ? GRPC_MILLIS_INF_FUTURE
: ExecCtx::Get()->Now() + xdslb_policy()->lb_call_timeout_ms_; : ExecCtx::Get()->Now() + xdslb_policy()->lb_call_timeout_ms_;
// Create an LB call with the specified method name.
lb_call_ = grpc_channel_create_pollset_set_call( lb_call_ = grpc_channel_create_pollset_set_call(
lb_chand_->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS, lb_chand_->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
xdslb_policy()->interested_parties(), xdslb_policy()->interested_parties(),
GRPC_MDSTR_SLASH_GRPC_DOT_LB_DOT_V1_DOT_LOADBALANCER_SLASH_BALANCELOAD, GRPC_MDSTR_SLASH_ENVOY_DOT_API_DOT_V2_DOT_ENDPOINTDISCOVERYSERVICE_SLASH_STREAMENDPOINTS,
nullptr, deadline, nullptr); nullptr, deadline, nullptr);
// Init the LB call request payload. // Init the LB call request payload.
xds_grpclb_request* request = grpc_slice request_payload_slice =
xds_grpclb_request_create(xdslb_policy()->server_name_); XdsEdsRequestCreateAndEncode(xdslb_policy()->server_name_);
grpc_slice request_payload_slice = xds_grpclb_request_encode(request);
send_message_payload_ = send_message_payload_ =
grpc_raw_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_slice_unref_internal(request_payload_slice); grpc_slice_unref_internal(request_payload_slice);
xds_grpclb_request_destroy(request);
// Init other data associated with the LB call. // Init other data associated with the LB call.
grpc_metadata_array_init(&lb_initial_metadata_recv_); grpc_metadata_array_init(&lb_initial_metadata_recv_);
grpc_metadata_array_init(&lb_trailing_metadata_recv_); grpc_metadata_array_init(&lb_trailing_metadata_recv_);
@ -1068,15 +936,20 @@ void XdsLb::BalancerChannelState::BalancerCallState::
bool XdsLb::BalancerChannelState::BalancerCallState::LoadReportCountersAreZero( bool XdsLb::BalancerChannelState::BalancerCallState::LoadReportCountersAreZero(
xds_grpclb_request* request) { xds_grpclb_request* request) {
XdsLbClientStats::DroppedCallCounts* drop_entries = const grpc_lb_v1_ClientStats* cstats =
static_cast<XdsLbClientStats::DroppedCallCounts*>( grpc_lb_v1_LoadBalanceRequest_client_stats(request);
request->client_stats.calls_finished_with_drop.arg); if (cstats == nullptr) {
return request->client_stats.num_calls_started == 0 && return true;
request->client_stats.num_calls_finished == 0 && }
request->client_stats.num_calls_finished_with_client_failed_to_send == size_t drop_count;
grpc_lb_v1_ClientStats_calls_finished_with_drop(cstats, &drop_count);
return grpc_lb_v1_ClientStats_num_calls_started(cstats) == 0 &&
grpc_lb_v1_ClientStats_num_calls_finished(cstats) == 0 &&
grpc_lb_v1_ClientStats_num_calls_finished_with_client_failed_to_send(
cstats) == 0 &&
grpc_lb_v1_ClientStats_num_calls_finished_known_received(cstats) ==
0 && 0 &&
request->client_stats.num_calls_finished_known_received == 0 && drop_count == 0;
(drop_entries == nullptr || drop_entries->empty());
} }
// TODO(vpowar): Use LRS to send the client Load Report. // TODO(vpowar): Use LRS to send the client Load Report.
@ -1084,13 +957,13 @@ void XdsLb::BalancerChannelState::BalancerCallState::
SendClientLoadReportLocked() { SendClientLoadReportLocked() {
// Construct message payload. // Construct message payload.
GPR_ASSERT(send_message_payload_ == nullptr); GPR_ASSERT(send_message_payload_ == nullptr);
xds_grpclb_request* request = upb::Arena arena;
xds_grpclb_load_report_request_create_locked(client_stats_.get()); xds_grpclb_request* request = xds_grpclb_load_report_request_create_locked(
client_stats_.get(), arena.ptr());
// Skip client load report if the counters were all zero in the last // Skip client load report if the counters were all zero in the last
// report and they are still zero in this one. // report and they are still zero in this one.
if (LoadReportCountersAreZero(request)) { if (LoadReportCountersAreZero(request)) {
if (last_client_load_report_counters_were_zero_) { if (last_client_load_report_counters_were_zero_) {
xds_grpclb_request_destroy(request);
ScheduleNextClientLoadReportLocked(); ScheduleNextClientLoadReportLocked();
return; return;
} }
@ -1099,7 +972,6 @@ void XdsLb::BalancerChannelState::BalancerCallState::
last_client_load_report_counters_were_zero_ = false; last_client_load_report_counters_were_zero_ = false;
} }
// TODO(vpowar): Send the report on LRS stream. // TODO(vpowar): Send the report on LRS stream.
xds_grpclb_request_destroy(request);
} }
void XdsLb::BalancerChannelState::BalancerCallState::OnInitialRequestSentLocked( void XdsLb::BalancerChannelState::BalancerCallState::OnInitialRequestSentLocked(
@ -1127,65 +999,67 @@ void XdsLb::BalancerChannelState::BalancerCallState::
lb_calld->Unref(DEBUG_LOCATION, "on_message_received"); lb_calld->Unref(DEBUG_LOCATION, "on_message_received");
return; return;
} }
lb_calld->seen_response_ = true;
// Read the response.
grpc_byte_buffer_reader bbr; grpc_byte_buffer_reader bbr;
grpc_byte_buffer_reader_init(&bbr, lb_calld->recv_message_payload_); grpc_byte_buffer_reader_init(&bbr, lb_calld->recv_message_payload_);
grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr); grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
grpc_byte_buffer_reader_destroy(&bbr); grpc_byte_buffer_reader_destroy(&bbr);
grpc_byte_buffer_destroy(lb_calld->recv_message_payload_); grpc_byte_buffer_destroy(lb_calld->recv_message_payload_);
lb_calld->recv_message_payload_ = nullptr; lb_calld->recv_message_payload_ = nullptr;
xds_grpclb_initial_response* initial_response; // TODO(juanlishen): When we convert this to use the xds protocol, the
xds_grpclb_serverlist* serverlist; // balancer will send us a fallback timeout such that we should go into
if (!lb_calld->seen_initial_response_ && // fallback mode if we have lost contact with the balancer after a certain
(initial_response = xds_grpclb_initial_response_parse(response_slice)) != // period of time. We will need to save the timeout value here, and then
nullptr) { // when the balancer call ends, we will need to start a timer for the
// Have NOT seen initial response, look for initial response. // specified period of time, and if the timer fires, we go into fallback
// TODO(juanlishen): When we convert this to use the xds protocol, the // mode. We will also need to cancel the timer when we receive a serverlist
// balancer will send us a fallback timeout such that we should go into // from the balancer.
// fallback mode if we have lost contact with the balancer after a certain // This anonymous lambda is a hack to avoid the usage of goto.
// period of time. We will need to save the timeout value here, and then [&]() {
// when the balancer call ends, we will need to start a timer for the // Parse the response.
// specified period of time, and if the timer fires, we go into fallback XdsUpdate update;
// mode. We will also need to cancel the timer when we receive a serverlist grpc_error* parse_error =
// from the balancer. XdsEdsResponseDecodeAndParse(response_slice, &update);
if (initial_response->has_client_stats_report_interval) { if (parse_error != GRPC_ERROR_NONE) {
const grpc_millis interval = xds_grpclb_duration_to_millis( gpr_log(GPR_ERROR, "[xdslb %p] EDS response parsing failed. error=%s",
&initial_response->client_stats_report_interval); xdslb_policy, grpc_error_string(parse_error));
if (interval > 0) { GRPC_ERROR_UNREF(parse_error);
lb_calld->client_stats_report_interval_ = return;
GPR_MAX(GPR_MS_PER_SEC, interval);
}
} }
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) { if (update.locality_list.empty()) {
if (lb_calld->client_stats_report_interval_ != 0) { char* response_slice_str =
gpr_log(GPR_INFO, grpc_dump_slice(response_slice, GPR_DUMP_ASCII | GPR_DUMP_HEX);
"[xdslb %p] Received initial LB response message; " gpr_log(GPR_ERROR,
"client load reporting interval = %" PRId64 " milliseconds", "[xdslb %p] EDS response '%s' doesn't contain any valid locality "
xdslb_policy, lb_calld->client_stats_report_interval_); "update. Ignoring.",
} else { xdslb_policy, response_slice_str);
gpr_log(GPR_INFO, gpr_free(response_slice_str);
"[xdslb %p] Received initial LB response message; client load " return;
"reporting NOT enabled",
xdslb_policy);
}
} }
xds_grpclb_initial_response_destroy(initial_response);
lb_calld->seen_initial_response_ = true;
} else if ((serverlist = xds_grpclb_response_parse_serverlist(
response_slice)) != nullptr) {
// Have seen initial response, look for serverlist.
GPR_ASSERT(lb_calld->lb_call_ != nullptr);
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) { if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
gpr_log(GPR_INFO, gpr_log(GPR_INFO,
"[xdslb %p] Serverlist with %" PRIuPTR " servers received", "[xdslb %p] EDS response with %" PRIuPTR " localities received",
xdslb_policy, serverlist->num_servers); xdslb_policy, update.locality_list.size());
for (size_t i = 0; i < serverlist->num_servers; ++i) { for (size_t i = 0; i < update.locality_list.size(); ++i) {
grpc_resolved_address addr; const XdsLocalityInfo& locality = update.locality_list[i];
ParseServer(serverlist->servers[i], &addr); gpr_log(GPR_INFO,
char* ipport; "[xdslb %p] Locality %" PRIuPTR " %s contains %" PRIuPTR
grpc_sockaddr_to_string(&ipport, &addr, false); " server addresses",
gpr_log(GPR_INFO, "[xdslb %p] Serverlist[%" PRIuPTR "]: %s", xdslb_policy, i,
xdslb_policy, i, ipport); locality.locality_name->AsHumanReadableString(),
gpr_free(ipport); locality.serverlist.size());
for (size_t j = 0; j < locality.serverlist.size(); ++j) {
char* ipport;
grpc_sockaddr_to_string(&ipport, &locality.serverlist[j].address(),
false);
gpr_log(GPR_INFO,
"[xdslb %p] Locality %" PRIuPTR
" %s, server address %" PRIuPTR ": %s",
xdslb_policy, i,
locality.locality_name->AsHumanReadableString(), j, ipport);
gpr_free(ipport);
}
} }
} }
// Pending LB channel receives a serverlist; promote it. // Pending LB channel receives a serverlist; promote it.
@ -1211,73 +1085,47 @@ void XdsLb::BalancerChannelState::BalancerCallState::
lb_calld->Ref(DEBUG_LOCATION, "client_load_report").release(); lb_calld->Ref(DEBUG_LOCATION, "client_load_report").release();
lb_calld->ScheduleNextClientLoadReportLocked(); lb_calld->ScheduleNextClientLoadReportLocked();
} }
if (!xdslb_policy->locality_serverlist_.empty() && // Ignore identical update.
xds_grpclb_serverlist_equals( if (xdslb_policy->locality_list_ == update.locality_list) {
xdslb_policy->locality_serverlist_[0]->serverlist, serverlist)) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) { if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
gpr_log(GPR_INFO, gpr_log(GPR_INFO,
"[xdslb %p] Incoming server list identical to current, " "[xdslb %p] Incoming server list identical to current, "
"ignoring.", "ignoring.",
xdslb_policy); xdslb_policy);
} }
xds_grpclb_destroy_serverlist(serverlist); return;
} else { // New serverlist.
// If the balancer tells us to drop all the calls, we should exit fallback
// mode immediately.
// TODO(juanlishen): When we add EDS drop, we should change to check
// drop_percentage.
if (serverlist->num_servers == 0) xdslb_policy->MaybeExitFallbackMode();
if (!xdslb_policy->locality_serverlist_.empty()) {
xds_grpclb_destroy_serverlist(
xdslb_policy->locality_serverlist_[0]->serverlist);
} else {
// Initialize locality serverlist, currently the list only handles
// one child.
xdslb_policy->locality_serverlist_.emplace_back(
MakeUnique<LocalityServerlistEntry>());
xdslb_policy->locality_serverlist_[0]->locality_name =
MakeRefCounted<LocalityName>(
UniquePtr<char>(gpr_strdup(kDefaultLocalityRegion)),
UniquePtr<char>(gpr_strdup(kDefaultLocalityZone)),
UniquePtr<char>(gpr_strdup(kDefaultLocalitySubzone)));
xdslb_policy->locality_serverlist_[0]->locality_weight =
kDefaultLocalityWeight;
}
// Update the serverlist in the XdsLb instance. This serverlist
// instance will be destroyed either upon the next update or when the
// XdsLb instance is destroyed.
xdslb_policy->locality_serverlist_[0]->serverlist = serverlist;
xdslb_policy->locality_map_.UpdateLocked(
xdslb_policy->locality_serverlist_,
xdslb_policy->child_policy_config_.get(), xdslb_policy->args_,
xdslb_policy);
} }
} else { // If the balancer tells us to drop all the calls, we should exit fallback
// No valid initial response or serverlist found. // mode immediately.
char* response_slice_str = // TODO(juanlishen): When we add EDS drop, we should change to check
grpc_dump_slice(response_slice, GPR_DUMP_ASCII | GPR_DUMP_HEX); // drop_percentage.
gpr_log(GPR_ERROR, if (update.locality_list[0].serverlist.empty()) {
"[xdslb %p] Invalid LB response received: '%s'. Ignoring.", xdslb_policy->MaybeExitFallbackMode();
xdslb_policy, response_slice_str); }
gpr_free(response_slice_str); // Update the locality list.
} xdslb_policy->locality_list_ = std::move(update.locality_list);
// Update the locality map.
xdslb_policy->locality_map_.UpdateLocked(
xdslb_policy->locality_list_, xdslb_policy->child_policy_config_.get(),
xdslb_policy->args_, xdslb_policy);
}();
grpc_slice_unref_internal(response_slice); grpc_slice_unref_internal(response_slice);
if (!xdslb_policy->shutting_down_) { if (xdslb_policy->shutting_down_) {
// Keep listening for serverlist updates.
grpc_op op;
memset(&op, 0, sizeof(op));
op.op = GRPC_OP_RECV_MESSAGE;
op.data.recv_message.recv_message = &lb_calld->recv_message_payload_;
op.flags = 0;
op.reserved = nullptr;
// Reuse the "OnBalancerMessageReceivedLocked" ref taken in StartQuery().
const grpc_call_error call_error = grpc_call_start_batch_and_execute(
lb_calld->lb_call_, &op, 1,
&lb_calld->lb_on_balancer_message_received_);
GPR_ASSERT(GRPC_CALL_OK == call_error);
} else {
lb_calld->Unref(DEBUG_LOCATION, "on_message_received+xds_shutdown"); lb_calld->Unref(DEBUG_LOCATION, "on_message_received+xds_shutdown");
return;
} }
// Keep listening for serverlist updates.
grpc_op op;
memset(&op, 0, sizeof(op));
op.op = GRPC_OP_RECV_MESSAGE;
op.data.recv_message.recv_message = &lb_calld->recv_message_payload_;
op.flags = 0;
op.reserved = nullptr;
GPR_ASSERT(lb_calld->lb_call_ != nullptr);
// Reuse the "OnBalancerMessageReceivedLocked" ref taken in StartQuery().
const grpc_call_error call_error = grpc_call_start_batch_and_execute(
lb_calld->lb_call_, &op, 1, &lb_calld->lb_on_balancer_message_received_);
GPR_ASSERT(GRPC_CALL_OK == call_error);
} }
void XdsLb::BalancerChannelState::BalancerCallState:: void XdsLb::BalancerChannelState::BalancerCallState::
@ -1317,7 +1165,7 @@ void XdsLb::BalancerChannelState::BalancerCallState::
// This channel is the most recently created one. Try to restart the call // This channel is the most recently created one. Try to restart the call
// and reresolve. // and reresolve.
lb_chand->lb_calld_.reset(); lb_chand->lb_calld_.reset();
if (lb_calld->seen_initial_response_) { if (lb_calld->seen_response_) {
// If we lost connection to the LB server, reset the backoff and restart // If we lost connection to the LB server, reset the backoff and restart
// the LB call immediately. // the LB call immediately.
lb_chand->lb_call_backoff_.Reset(); lb_chand->lb_call_backoff_.Reset();
@ -1402,9 +1250,7 @@ grpc_channel_args* BuildBalancerChannelArgs(const grpc_channel_args* args) {
// //
XdsLb::XdsLb(Args args) XdsLb::XdsLb(Args args)
: LoadBalancingPolicy(std::move(args)), : LoadBalancingPolicy(std::move(args)), locality_map_(), locality_list_() {
locality_map_(),
locality_serverlist_() {
// Record server name. // Record server name.
const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI); const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
const char* server_uri = grpc_channel_arg_get_string(arg); const char* server_uri = grpc_channel_arg_get_string(arg);
@ -1433,7 +1279,7 @@ XdsLb::~XdsLb() {
} }
gpr_free((void*)server_name_); gpr_free((void*)server_name_);
grpc_channel_args_destroy(args_); grpc_channel_args_destroy(args_);
locality_serverlist_.clear(); locality_list_.clear();
} }
void XdsLb::ShutdownLocked() { void XdsLb::ShutdownLocked() {
@ -1482,9 +1328,9 @@ void XdsLb::ResetBackoffLocked() {
} }
void XdsLb::ProcessAddressesAndChannelArgsLocked( void XdsLb::ProcessAddressesAndChannelArgsLocked(
const ServerAddressList& addresses, const grpc_channel_args& args) { ServerAddressList addresses, const grpc_channel_args& args) {
// Update fallback address list. // Update fallback address list.
fallback_backend_addresses_ = ExtractBackendAddresses(addresses); fallback_backend_addresses_ = std::move(addresses);
// Make sure that GRPC_ARG_LB_POLICY_NAME is set in channel args, // Make sure that GRPC_ARG_LB_POLICY_NAME is set in channel args,
// since we use this to trigger the client_load_reporting filter. // since we use this to trigger the client_load_reporting filter.
static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME}; static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME};
@ -1536,9 +1382,9 @@ void XdsLb::UpdateLocked(UpdateArgs args) {
gpr_log(GPR_ERROR, "[xdslb %p] LB config parsing fails.", this); gpr_log(GPR_ERROR, "[xdslb %p] LB config parsing fails.", this);
return; return;
} }
ProcessAddressesAndChannelArgsLocked(args.addresses, *args.args); ProcessAddressesAndChannelArgsLocked(std::move(args.addresses), *args.args);
locality_map_.UpdateLocked(locality_serverlist_, child_policy_config_.get(), locality_map_.UpdateLocked(locality_list_, child_policy_config_.get(), args_,
args_, this); this);
// Update the existing fallback policy. The fallback policy config and/or the // Update the existing fallback policy. The fallback policy config and/or the
// fallback addresses may be new. // fallback addresses may be new.
if (fallback_policy_ != nullptr) UpdateFallbackPolicyLocked(); if (fallback_policy_ != nullptr) UpdateFallbackPolicyLocked();
@ -1736,16 +1582,16 @@ void XdsLb::MaybeExitFallbackMode() {
// XdsLb::LocalityMap // XdsLb::LocalityMap
// //
void XdsLb::LocalityMap::PruneLocalities(const LocalityList& locality_list) { void XdsLb::LocalityMap::PruneLocalities(const XdsLocalityList& locality_list) {
for (auto iter = map_.begin(); iter != map_.end();) { for (auto iter = map_.begin(); iter != map_.end();) {
bool found = false; bool found = false;
for (size_t i = 0; i < locality_list.size(); i++) { for (size_t i = 0; i < locality_list.size(); i++) {
if (*locality_list[i]->locality_name == *iter->first) { if (*locality_list[i].locality_name == *iter->first) {
found = true; found = true;
break; break;
} }
} }
if (!found) { // Remove entries not present in the locality list if (!found) { // Remove entries not present in the locality list.
iter = map_.erase(iter); iter = map_.erase(iter);
} else } else
iter++; iter++;
@ -1753,27 +1599,27 @@ void XdsLb::LocalityMap::PruneLocalities(const LocalityList& locality_list) {
} }
void XdsLb::LocalityMap::UpdateLocked( void XdsLb::LocalityMap::UpdateLocked(
const LocalityList& locality_serverlist, const XdsLocalityList& locality_list,
LoadBalancingPolicy::Config* child_policy_config, LoadBalancingPolicy::Config* child_policy_config,
const grpc_channel_args* args, XdsLb* parent) { const grpc_channel_args* args, XdsLb* parent) {
if (parent->shutting_down_) return; if (parent->shutting_down_) return;
for (size_t i = 0; i < locality_serverlist.size(); i++) { for (size_t i = 0; i < locality_list.size(); i++) {
auto iter = map_.find(locality_serverlist[i]->locality_name); auto iter = map_.find(locality_list[i].locality_name);
// Add a new entry in the locality map if a new locality is received in the
// locality list.
if (iter == map_.end()) { if (iter == map_.end()) {
OrphanablePtr<LocalityEntry> new_entry = MakeOrphanable<LocalityEntry>( OrphanablePtr<LocalityEntry> new_entry = MakeOrphanable<LocalityEntry>(
parent->Ref(DEBUG_LOCATION, "LocalityEntry"), parent->Ref(DEBUG_LOCATION, "LocalityEntry"),
locality_serverlist[i]->locality_name, locality_list[i].locality_name, locality_list[i].lb_weight);
locality_serverlist[i]->locality_weight); iter = map_.emplace(locality_list[i].locality_name, std::move(new_entry))
iter = map_.emplace(locality_serverlist[i]->locality_name,
std::move(new_entry))
.first; .first;
} }
// Don't create new child policies if not directed to // Keep a copy of serverlist in locality_list_ so that we can compare it
xds_grpclb_serverlist* serverlist = // with the future ones.
parent->locality_serverlist_[i]->serverlist; iter->second->UpdateLocked(locality_list[i].serverlist, child_policy_config,
iter->second->UpdateLocked(serverlist, child_policy_config, args); args);
} }
PruneLocalities(locality_serverlist); PruneLocalities(locality_list);
} }
void XdsLb::LocalityMap::ShutdownLocked() { map_.clear(); } void XdsLb::LocalityMap::ShutdownLocked() { map_.clear(); }
@ -1789,7 +1635,7 @@ void XdsLb::LocalityMap::ResetBackoffLocked() {
// //
XdsLb::LocalityMap::LocalityEntry::LocalityEntry( XdsLb::LocalityMap::LocalityEntry::LocalityEntry(
RefCountedPtr<XdsLb> parent, RefCountedPtr<LocalityName> name, RefCountedPtr<XdsLb> parent, RefCountedPtr<XdsLocalityName> name,
uint32_t locality_weight) uint32_t locality_weight)
: parent_(std::move(parent)), : parent_(std::move(parent)),
name_(std::move(name)), name_(std::move(name)),
@ -1861,13 +1707,13 @@ XdsLb::LocalityMap::LocalityEntry::CreateChildPolicyLocked(
} }
void XdsLb::LocalityMap::LocalityEntry::UpdateLocked( void XdsLb::LocalityMap::LocalityEntry::UpdateLocked(
xds_grpclb_serverlist* serverlist, ServerAddressList serverlist,
LoadBalancingPolicy::Config* child_policy_config, LoadBalancingPolicy::Config* child_policy_config,
const grpc_channel_args* args_in) { const grpc_channel_args* args_in) {
if (parent_->shutting_down_) return; if (parent_->shutting_down_) return;
// Construct update args. // Construct update args.
UpdateArgs update_args; UpdateArgs update_args;
update_args.addresses = ProcessServerlist(serverlist); update_args.addresses = std::move(serverlist);
update_args.config = update_args.config =
child_policy_config == nullptr ? nullptr : child_policy_config->Ref(); child_policy_config == nullptr ? nullptr : child_policy_config->Ref();
update_args.args = CreateChildPolicyArgsLocked(args_in); update_args.args = CreateChildPolicyArgsLocked(args_in);
@ -2158,7 +2004,7 @@ void XdsLb::LocalityMap::LocalityEntry::Helper::RequestReresolution() {
// the child policy. Otherwise, pass the re-resolution request up to the // the child policy. Otherwise, pass the re-resolution request up to the
// channel. // channel.
if (entry_->parent_->lb_chand_->lb_calld() == nullptr || if (entry_->parent_->lb_chand_->lb_calld() == nullptr ||
!entry_->parent_->lb_chand_->lb_calld()->seen_initial_response()) { !entry_->parent_->lb_chand_->lb_calld()->seen_response()) {
entry_->parent_->channel_control_helper()->RequestReresolution(); entry_->parent_->channel_control_helper()->RequestReresolution();
} }
} }

@ -18,294 +18,245 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include "pb_decode.h" #include <algorithm>
#include "pb_encode.h"
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h"
#include <grpc/impl/codegen/log.h>
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/string_util.h>
/* invoked once for every Server in ServerList */ #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h"
static bool count_serverlist(pb_istream_t* stream, const pb_field_t* field, #include "src/core/lib/iomgr/error.h"
void** arg) { #include "src/core/lib/iomgr/sockaddr_utils.h"
xds_grpclb_serverlist* sl = static_cast<xds_grpclb_serverlist*>(*arg);
xds_grpclb_server server;
if (GPR_UNLIKELY(!pb_decode(stream, grpc_lb_v1_Server_fields, &server))) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(stream));
return false;
}
++sl->num_servers;
return true;
}
typedef struct decode_serverlist_arg { #include "envoy/api/v2/core/address.upb.h"
/* The decoding callback is invoked once per server in serverlist. Remember #include "envoy/api/v2/core/base.upb.h"
* which index of the serverlist are we currently decoding */ #include "envoy/api/v2/discovery.upb.h"
size_t decoding_idx; #include "envoy/api/v2/eds.upb.h"
/* The decoded serverlist */ #include "envoy/api/v2/endpoint/endpoint.upb.h"
xds_grpclb_serverlist* serverlist; #include "google/protobuf/any.upb.h"
} decode_serverlist_arg; #include "google/protobuf/struct.upb.h"
#include "google/protobuf/timestamp.upb.h"
#include "google/protobuf/wrappers.upb.h"
#include "upb/upb.h"
/* invoked once for every Server in ServerList */ namespace grpc_core {
static bool decode_serverlist(pb_istream_t* stream, const pb_field_t* field,
void** arg) {
decode_serverlist_arg* dec_arg = static_cast<decode_serverlist_arg*>(*arg);
GPR_ASSERT(dec_arg->serverlist->num_servers >= dec_arg->decoding_idx);
xds_grpclb_server* server =
static_cast<xds_grpclb_server*>(gpr_zalloc(sizeof(xds_grpclb_server)));
if (GPR_UNLIKELY(!pb_decode(stream, grpc_lb_v1_Server_fields, server))) {
gpr_free(server);
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(stream));
return false;
}
dec_arg->serverlist->servers[dec_arg->decoding_idx++] = server;
return true;
}
xds_grpclb_request* xds_grpclb_request_create(const char* lb_service_name) { namespace {
xds_grpclb_request* req =
static_cast<xds_grpclb_request*>(gpr_malloc(sizeof(xds_grpclb_request)));
req->has_client_stats = false;
req->has_initial_request = true;
req->initial_request.has_name = true;
// GCC warns (-Wstringop-truncation) because the destination
// buffer size is identical to max-size, leading to a potential
// char[] with no null terminator. nanopb can handle it fine,
// and parantheses around strncpy silence that compiler warning.
(strncpy(req->initial_request.name, lb_service_name,
XDS_SERVICE_NAME_MAX_LENGTH));
return req;
}
static void populate_timestamp(gpr_timespec timestamp, constexpr char kEdsTypeUrl[] =
xds_grpclb_timestamp* timestamp_pb) { "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
timestamp_pb->has_seconds = true; constexpr char kEndpointRequired[] = "endpointRequired";
timestamp_pb->seconds = timestamp.tv_sec;
timestamp_pb->has_nanos = true;
timestamp_pb->nanos = timestamp.tv_nsec;
}
static bool encode_string(pb_ostream_t* stream, const pb_field_t* field, } // namespace
void* const* arg) {
char* str = static_cast<char*>(*arg);
if (!pb_encode_tag_for_field(stream, field)) return false;
return pb_encode_string(stream, reinterpret_cast<uint8_t*>(str), strlen(str));
}
static bool encode_drops(pb_ostream_t* stream, const pb_field_t* field, grpc_slice XdsEdsRequestCreateAndEncode(const char* service_name) {
void* const* arg) { upb::Arena arena;
grpc_core::XdsLbClientStats::DroppedCallCounts* drop_entries = // Create a request.
static_cast<grpc_core::XdsLbClientStats::DroppedCallCounts*>(*arg); envoy_api_v2_DiscoveryRequest* request =
if (drop_entries == nullptr) return true; envoy_api_v2_DiscoveryRequest_new(arena.ptr());
for (size_t i = 0; i < drop_entries->size(); ++i) { envoy_api_v2_core_Node* node =
if (!pb_encode_tag_for_field(stream, field)) return false; envoy_api_v2_DiscoveryRequest_mutable_node(request, arena.ptr());
grpc_lb_v1_ClientStatsPerToken drop_message; google_protobuf_Struct* metadata =
drop_message.load_balance_token.funcs.encode = encode_string; envoy_api_v2_core_Node_mutable_metadata(node, arena.ptr());
drop_message.load_balance_token.arg = (*drop_entries)[i].token.get(); google_protobuf_Struct_FieldsEntry* field =
drop_message.has_num_calls = true; google_protobuf_Struct_add_fields(metadata, arena.ptr());
drop_message.num_calls = (*drop_entries)[i].count; google_protobuf_Struct_FieldsEntry_set_key(
if (!pb_encode_submessage(stream, grpc_lb_v1_ClientStatsPerToken_fields, field, upb_strview_makez(kEndpointRequired));
&drop_message)) { google_protobuf_Value* value =
return false; google_protobuf_Struct_FieldsEntry_mutable_value(field, arena.ptr());
} google_protobuf_Value_set_bool_value(value, true);
} envoy_api_v2_DiscoveryRequest_add_resource_names(
return true; request, upb_strview_makez(service_name), arena.ptr());
} envoy_api_v2_DiscoveryRequest_set_type_url(request,
upb_strview_makez(kEdsTypeUrl));
xds_grpclb_request* xds_grpclb_load_report_request_create_locked( // Encode the request.
grpc_core::XdsLbClientStats* client_stats) { size_t output_length;
xds_grpclb_request* req = char* output = envoy_api_v2_DiscoveryRequest_serialize(request, arena.ptr(),
static_cast<xds_grpclb_request*>(gpr_zalloc(sizeof(xds_grpclb_request))); &output_length);
req->has_client_stats = true; return grpc_slice_from_copied_buffer(output, output_length);
req->client_stats.has_timestamp = true;
populate_timestamp(gpr_now(GPR_CLOCK_REALTIME), &req->client_stats.timestamp);
req->client_stats.has_num_calls_started = true;
req->client_stats.has_num_calls_finished = true;
req->client_stats.has_num_calls_finished_with_client_failed_to_send = true;
req->client_stats.has_num_calls_finished_with_client_failed_to_send = true;
req->client_stats.has_num_calls_finished_known_received = true;
req->client_stats.calls_finished_with_drop.funcs.encode = encode_drops;
grpc_core::UniquePtr<grpc_core::XdsLbClientStats::DroppedCallCounts>
drop_counts;
client_stats->GetLocked(
&req->client_stats.num_calls_started,
&req->client_stats.num_calls_finished,
&req->client_stats.num_calls_finished_with_client_failed_to_send,
&req->client_stats.num_calls_finished_known_received, &drop_counts);
// Will be deleted in xds_grpclb_request_destroy().
req->client_stats.calls_finished_with_drop.arg = drop_counts.release();
return req;
} }
grpc_slice xds_grpclb_request_encode(const xds_grpclb_request* request) { namespace {
size_t encoded_length;
pb_ostream_t sizestream;
pb_ostream_t outputstream;
grpc_slice slice;
memset(&sizestream, 0, sizeof(pb_ostream_t));
pb_encode(&sizestream, grpc_lb_v1_LoadBalanceRequest_fields, request);
encoded_length = sizestream.bytes_written;
slice = GRPC_SLICE_MALLOC(encoded_length); grpc_error* ServerAddressParseAndAppend(
outputstream = const envoy_api_v2_endpoint_LbEndpoint* lb_endpoint,
pb_ostream_from_buffer(GRPC_SLICE_START_PTR(slice), encoded_length); ServerAddressList* list) {
GPR_ASSERT(pb_encode(&outputstream, grpc_lb_v1_LoadBalanceRequest_fields, // Find the ip:port.
request) != 0); const envoy_api_v2_endpoint_Endpoint* endpoint =
return slice; envoy_api_v2_endpoint_LbEndpoint_endpoint(lb_endpoint);
} const envoy_api_v2_core_Address* address =
envoy_api_v2_endpoint_Endpoint_address(endpoint);
void xds_grpclb_request_destroy(xds_grpclb_request* request) { const envoy_api_v2_core_SocketAddress* socket_address =
if (request->has_client_stats) { envoy_api_v2_core_Address_socket_address(address);
grpc_core::XdsLbClientStats::DroppedCallCounts* drop_entries = upb_strview address_strview =
static_cast<grpc_core::XdsLbClientStats::DroppedCallCounts*>( envoy_api_v2_core_SocketAddress_address(socket_address);
request->client_stats.calls_finished_with_drop.arg); uint32_t port = envoy_api_v2_core_SocketAddress_port_value(socket_address);
grpc_core::Delete(drop_entries); if (GPR_UNLIKELY(port >> 16) != 0) {
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port.");
} }
gpr_free(request); // Populate grpc_resolved_address.
grpc_resolved_address addr;
char* address_str = static_cast<char*>(gpr_malloc(address_strview.size + 1));
memcpy(address_str, address_strview.data, address_strview.size);
address_str[address_strview.size] = '\0';
grpc_string_to_sockaddr(&addr, address_str, port);
gpr_free(address_str);
// Append the address to the list.
list->emplace_back(addr, nullptr);
return GRPC_ERROR_NONE;
} }
typedef grpc_lb_v1_LoadBalanceResponse xds_grpclb_response; namespace {
xds_grpclb_initial_response* xds_grpclb_initial_response_parse(
const grpc_slice& encoded_xds_grpclb_response) {
pb_istream_t stream = pb_istream_from_buffer(
const_cast<uint8_t*>(GRPC_SLICE_START_PTR(encoded_xds_grpclb_response)),
GRPC_SLICE_LENGTH(encoded_xds_grpclb_response));
xds_grpclb_response res;
memset(&res, 0, sizeof(xds_grpclb_response));
if (GPR_UNLIKELY(
!pb_decode(&stream, grpc_lb_v1_LoadBalanceResponse_fields, &res))) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&stream));
return nullptr;
}
if (!res.has_initial_response) return nullptr;
xds_grpclb_initial_response* initial_res =
static_cast<xds_grpclb_initial_response*>(
gpr_malloc(sizeof(xds_grpclb_initial_response)));
memcpy(initial_res, &res.initial_response,
sizeof(xds_grpclb_initial_response));
return initial_res; UniquePtr<char> StringCopy(const upb_strview& strview) {
char* str = static_cast<char*>(gpr_malloc(strview.size + 1));
memcpy(str, strview.data, strview.size);
str[strview.size] = '\0';
return UniquePtr<char>(str);
} }
xds_grpclb_serverlist* xds_grpclb_response_parse_serverlist( } // namespace
const grpc_slice& encoded_xds_grpclb_response) {
pb_istream_t stream = pb_istream_from_buffer(
const_cast<uint8_t*>(GRPC_SLICE_START_PTR(encoded_xds_grpclb_response)),
GRPC_SLICE_LENGTH(encoded_xds_grpclb_response));
pb_istream_t stream_at_start = stream;
xds_grpclb_serverlist* sl = static_cast<xds_grpclb_serverlist*>(
gpr_zalloc(sizeof(xds_grpclb_serverlist)));
xds_grpclb_response res;
memset(&res, 0, sizeof(xds_grpclb_response));
// First pass: count number of servers.
res.server_list.servers.funcs.decode = count_serverlist;
res.server_list.servers.arg = sl;
bool status = pb_decode(&stream, grpc_lb_v1_LoadBalanceResponse_fields, &res);
if (GPR_UNLIKELY(!status)) {
gpr_free(sl);
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&stream));
return nullptr;
}
// Second pass: populate servers.
if (sl->num_servers > 0) {
sl->servers = static_cast<xds_grpclb_server**>(
gpr_zalloc(sizeof(xds_grpclb_server*) * sl->num_servers));
decode_serverlist_arg decode_arg;
memset(&decode_arg, 0, sizeof(decode_arg));
decode_arg.serverlist = sl;
res.server_list.servers.funcs.decode = decode_serverlist;
res.server_list.servers.arg = &decode_arg;
status = pb_decode(&stream_at_start, grpc_lb_v1_LoadBalanceResponse_fields,
&res);
if (GPR_UNLIKELY(!status)) {
xds_grpclb_destroy_serverlist(sl);
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&stream));
return nullptr;
}
}
return sl;
}
void xds_grpclb_destroy_serverlist(xds_grpclb_serverlist* serverlist) { grpc_error* LocalityParse(
if (serverlist == nullptr) { const envoy_api_v2_endpoint_LocalityLbEndpoints* locality_lb_endpoints,
return; XdsLocalityInfo* locality_info) {
} // Parse locality name.
for (size_t i = 0; i < serverlist->num_servers; i++) { const envoy_api_v2_core_Locality* locality =
gpr_free(serverlist->servers[i]); envoy_api_v2_endpoint_LocalityLbEndpoints_locality(locality_lb_endpoints);
locality_info->locality_name = MakeRefCounted<XdsLocalityName>(
StringCopy(envoy_api_v2_core_Locality_region(locality)),
StringCopy(envoy_api_v2_core_Locality_zone(locality)),
StringCopy(envoy_api_v2_core_Locality_sub_zone(locality)));
// Parse the addresses.
size_t size;
const envoy_api_v2_endpoint_LbEndpoint* const* lb_endpoints =
envoy_api_v2_endpoint_LocalityLbEndpoints_lb_endpoints(
locality_lb_endpoints, &size);
for (size_t i = 0; i < size; ++i) {
grpc_error* error = ServerAddressParseAndAppend(lb_endpoints[i],
&locality_info->serverlist);
if (error != GRPC_ERROR_NONE) return error;
} }
gpr_free(serverlist->servers); // Parse the lb_weight and priority.
gpr_free(serverlist); const google_protobuf_UInt32Value* lb_weight =
envoy_api_v2_endpoint_LocalityLbEndpoints_load_balancing_weight(
locality_lb_endpoints);
// If LB weight is not specified, the default weight 0 is used, which means
// this locality is assigned no load.
locality_info->lb_weight =
lb_weight != nullptr ? google_protobuf_UInt32Value_value(lb_weight) : 0;
locality_info->priority =
envoy_api_v2_endpoint_LocalityLbEndpoints_priority(locality_lb_endpoints);
return GRPC_ERROR_NONE;
} }
xds_grpclb_serverlist* xds_grpclb_serverlist_copy( } // namespace
const xds_grpclb_serverlist* sl) {
xds_grpclb_serverlist* copy = static_cast<xds_grpclb_serverlist*>(
gpr_zalloc(sizeof(xds_grpclb_serverlist)));
copy->num_servers = sl->num_servers;
copy->servers = static_cast<xds_grpclb_server**>(
gpr_malloc(sizeof(xds_grpclb_server*) * sl->num_servers));
for (size_t i = 0; i < sl->num_servers; i++) {
copy->servers[i] =
static_cast<xds_grpclb_server*>(gpr_malloc(sizeof(xds_grpclb_server)));
memcpy(copy->servers[i], sl->servers[i], sizeof(xds_grpclb_server));
}
return copy;
}
bool xds_grpclb_serverlist_equals(const xds_grpclb_serverlist* lhs, grpc_error* XdsEdsResponseDecodeAndParse(const grpc_slice& encoded_response,
const xds_grpclb_serverlist* rhs) { XdsUpdate* update) {
if (lhs == nullptr || rhs == nullptr) { upb::Arena arena;
return false; // Decode the response.
const envoy_api_v2_DiscoveryResponse* response =
envoy_api_v2_DiscoveryResponse_parse(
reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(encoded_response)),
GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
// Parse the response.
if (response == nullptr) {
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No response found.");
} }
if (lhs->num_servers != rhs->num_servers) { // Check the type_url of the response.
return false; upb_strview type_url = envoy_api_v2_DiscoveryResponse_type_url(response);
upb_strview expected_type_url = upb_strview_makez(kEdsTypeUrl);
if (!upb_strview_eql(type_url, expected_type_url)) {
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not EDS.");
} }
for (size_t i = 0; i < lhs->num_servers; i++) { // Get the resources from the response.
if (!xds_grpclb_server_equals(lhs->servers[i], rhs->servers[i])) { size_t size;
return false; const google_protobuf_Any* const* resources =
} envoy_api_v2_DiscoveryResponse_resources(response, &size);
if (size < 1) {
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
"EDS response contains 0 resource.");
}
// Check the type_url of the resource.
type_url = google_protobuf_Any_type_url(resources[0]);
if (!upb_strview_eql(type_url, expected_type_url)) {
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not EDS.");
}
// Get the cluster_load_assignment.
upb_strview encoded_cluster_load_assignment =
google_protobuf_Any_value(resources[0]);
envoy_api_v2_ClusterLoadAssignment* cluster_load_assignment =
envoy_api_v2_ClusterLoadAssignment_parse(
encoded_cluster_load_assignment.data,
encoded_cluster_load_assignment.size, arena.ptr());
const envoy_api_v2_endpoint_LocalityLbEndpoints* const* endpoints =
envoy_api_v2_ClusterLoadAssignment_endpoints(cluster_load_assignment,
&size);
for (size_t i = 0; i < size; ++i) {
XdsLocalityInfo locality_info;
grpc_error* error = LocalityParse(endpoints[i], &locality_info);
if (error != GRPC_ERROR_NONE) return error;
update->locality_list.push_back(std::move(locality_info));
} }
return true; // The locality list is sorted here into deterministic order so that it's
// easier to check if two locality lists contain the same set of localities.
std::sort(update->locality_list.data(),
update->locality_list.data() + update->locality_list.size(),
XdsLocalityInfo::Less());
return GRPC_ERROR_NONE;
} }
bool xds_grpclb_server_equals(const xds_grpclb_server* lhs, namespace {
const xds_grpclb_server* rhs) {
return memcmp(lhs, rhs, sizeof(xds_grpclb_server)) == 0; void google_protobuf_Timestamp_assign(google_protobuf_Timestamp* timestamp,
const gpr_timespec& value) {
google_protobuf_Timestamp_set_seconds(timestamp, value.tv_sec);
google_protobuf_Timestamp_set_nanos(timestamp, value.tv_nsec);
} }
int xds_grpclb_duration_compare(const xds_grpclb_duration* lhs, } // namespace
const xds_grpclb_duration* rhs) {
GPR_ASSERT(lhs && rhs);
if (lhs->has_seconds && rhs->has_seconds) {
if (lhs->seconds < rhs->seconds) return -1;
if (lhs->seconds > rhs->seconds) return 1;
} else if (lhs->has_seconds) {
return 1;
} else if (rhs->has_seconds) {
return -1;
}
GPR_ASSERT(lhs->seconds == rhs->seconds); xds_grpclb_request* xds_grpclb_load_report_request_create_locked(
if (lhs->has_nanos && rhs->has_nanos) { grpc_core::XdsLbClientStats* client_stats, upb_arena* arena) {
if (lhs->nanos < rhs->nanos) return -1; xds_grpclb_request* req = grpc_lb_v1_LoadBalanceRequest_new(arena);
if (lhs->nanos > rhs->nanos) return 1; grpc_lb_v1_ClientStats* req_stats =
} else if (lhs->has_nanos) { grpc_lb_v1_LoadBalanceRequest_mutable_client_stats(req, arena);
return 1; google_protobuf_Timestamp_assign(
} else if (rhs->has_nanos) { grpc_lb_v1_ClientStats_mutable_timestamp(req_stats, arena),
return -1; gpr_now(GPR_CLOCK_REALTIME));
}
return 0; int64_t num_calls_started;
} int64_t num_calls_finished;
int64_t num_calls_finished_with_client_failed_to_send;
int64_t num_calls_finished_known_received;
UniquePtr<XdsLbClientStats::DroppedCallCounts> drop_token_counts;
client_stats->GetLocked(&num_calls_started, &num_calls_finished,
&num_calls_finished_with_client_failed_to_send,
&num_calls_finished_known_received,
&drop_token_counts);
grpc_lb_v1_ClientStats_set_num_calls_started(req_stats, num_calls_started);
grpc_lb_v1_ClientStats_set_num_calls_finished(req_stats, num_calls_finished);
grpc_lb_v1_ClientStats_set_num_calls_finished_with_client_failed_to_send(
req_stats, num_calls_finished_with_client_failed_to_send);
grpc_lb_v1_ClientStats_set_num_calls_finished_known_received(
req_stats, num_calls_finished_known_received);
if (drop_token_counts != nullptr) {
for (size_t i = 0; i < drop_token_counts->size(); ++i) {
XdsLbClientStats::DropTokenCount& cur = (*drop_token_counts)[i];
grpc_lb_v1_ClientStatsPerToken* cur_msg =
grpc_lb_v1_ClientStats_add_calls_finished_with_drop(req_stats, arena);
grpc_millis xds_grpclb_duration_to_millis(xds_grpclb_duration* duration_pb) { const size_t token_len = strlen(cur.token.get());
return static_cast<grpc_millis>( char* token = reinterpret_cast<char*>(upb_arena_malloc(arena, token_len));
(duration_pb->has_seconds ? duration_pb->seconds : 0) * GPR_MS_PER_SEC + memcpy(token, cur.token.get(), token_len);
(duration_pb->has_nanos ? duration_pb->nanos : 0) / GPR_NS_PER_MS);
}
void xds_grpclb_initial_response_destroy( grpc_lb_v1_ClientStatsPerToken_set_load_balance_token(
xds_grpclb_initial_response* response) { cur_msg, upb_strview_make(token, token_len));
gpr_free(response); grpc_lb_v1_ClientStatsPerToken_set_num_calls(cur_msg, cur.count);
}
}
return req;
} }
} // namespace grpc_core

@ -23,67 +23,100 @@
#include <grpc/slice_buffer.h> #include <grpc/slice_buffer.h>
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h" #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h"
#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/ext/filters/client_channel/server_address.h"
#include "src/proto/grpc/lb/v1/load_balancer.upb.h"
#define XDS_SERVICE_NAME_MAX_LENGTH 128 namespace grpc_core {
typedef grpc_lb_v1_Server_ip_address_t xds_grpclb_ip_address;
typedef grpc_lb_v1_LoadBalanceRequest xds_grpclb_request; typedef grpc_lb_v1_LoadBalanceRequest xds_grpclb_request;
typedef grpc_lb_v1_InitialLoadBalanceResponse xds_grpclb_initial_response;
typedef grpc_lb_v1_Server xds_grpclb_server;
typedef google_protobuf_Duration xds_grpclb_duration;
typedef google_protobuf_Timestamp xds_grpclb_timestamp;
typedef struct {
xds_grpclb_server** servers;
size_t num_servers;
} xds_grpclb_serverlist;
/** Create a request for a gRPC LB service under \a lb_service_name */
xds_grpclb_request* xds_grpclb_request_create(const char* lb_service_name);
xds_grpclb_request* xds_grpclb_load_report_request_create_locked(
grpc_core::XdsLbClientStats* client_stats);
/** Protocol Buffers v3-encode \a request */
grpc_slice xds_grpclb_request_encode(const xds_grpclb_request* request);
/** Destroy \a request */
void xds_grpclb_request_destroy(xds_grpclb_request* request);
/** Parse (ie, decode) the bytes in \a encoded_xds_grpclb_response as a \a
* xds_grpclb_initial_response */
xds_grpclb_initial_response* xds_grpclb_initial_response_parse(
const grpc_slice& encoded_xds_grpclb_response);
/** Parse the list of servers from an encoded \a xds_grpclb_response */
xds_grpclb_serverlist* xds_grpclb_response_parse_serverlist(
const grpc_slice& encoded_xds_grpclb_response);
/** Return a copy of \a sl. The caller is responsible for calling \a
* xds_grpclb_destroy_serverlist on the returned copy. */
xds_grpclb_serverlist* xds_grpclb_serverlist_copy(
const xds_grpclb_serverlist* sl);
bool xds_grpclb_serverlist_equals(const xds_grpclb_serverlist* lhs, class XdsLocalityName : public RefCounted<XdsLocalityName> {
const xds_grpclb_serverlist* rhs); public:
struct Less {
bool xds_grpclb_server_equals(const xds_grpclb_server* lhs, bool operator()(const RefCountedPtr<XdsLocalityName>& lhs,
const xds_grpclb_server* rhs); const RefCountedPtr<XdsLocalityName>& rhs) {
int cmp_result = strcmp(lhs->region_.get(), rhs->region_.get());
/** Destroy \a serverlist */ if (cmp_result != 0) return cmp_result < 0;
void xds_grpclb_destroy_serverlist(xds_grpclb_serverlist* serverlist); cmp_result = strcmp(lhs->zone_.get(), rhs->zone_.get());
if (cmp_result != 0) return cmp_result < 0;
/** Compare \a lhs against \a rhs and return 0 if \a lhs and \a rhs are equal, return strcmp(lhs->sub_zone_.get(), rhs->sub_zone_.get()) < 0;
* < 0 if \a lhs represents a duration shorter than \a rhs and > 0 otherwise */ }
int xds_grpclb_duration_compare(const xds_grpclb_duration* lhs, };
const xds_grpclb_duration* rhs);
XdsLocalityName(UniquePtr<char> region, UniquePtr<char> zone,
grpc_millis xds_grpclb_duration_to_millis(xds_grpclb_duration* duration_pb); UniquePtr<char> sub_zone)
: region_(std::move(region)),
zone_(std::move(zone)),
sub_zone_(std::move(sub_zone)) {}
bool operator==(const XdsLocalityName& other) const {
return strcmp(region_.get(), other.region_.get()) == 0 &&
strcmp(zone_.get(), other.zone_.get()) == 0 &&
strcmp(sub_zone_.get(), other.sub_zone_.get()) == 0;
}
const char* region() const { return region_.get(); }
const char* zone() const { return zone_.get(); }
const char* sub_zone() const { return sub_zone_.get(); }
const char* AsHumanReadableString() {
if (human_readable_string_ == nullptr) {
char* tmp;
gpr_asprintf(&tmp, "{region=\"%s\", zone=\"%s\", sub_zone=\"%s\"}",
region_.get(), zone_.get(), sub_zone_.get());
human_readable_string_.reset(tmp);
}
return human_readable_string_.get();
}
private:
UniquePtr<char> region_;
UniquePtr<char> zone_;
UniquePtr<char> sub_zone_;
UniquePtr<char> human_readable_string_;
};
struct XdsLocalityInfo {
bool operator==(const XdsLocalityInfo& other) const {
return *locality_name == *other.locality_name &&
serverlist == other.serverlist && lb_weight == other.lb_weight &&
priority == other.priority;
}
// This comparator only compares the locality names.
struct Less {
bool operator()(const XdsLocalityInfo& lhs, const XdsLocalityInfo& rhs) {
return XdsLocalityName::Less()(lhs.locality_name, rhs.locality_name);
}
};
RefCountedPtr<XdsLocalityName> locality_name;
ServerAddressList serverlist;
uint32_t lb_weight;
uint32_t priority;
};
using XdsLocalityList = InlinedVector<XdsLocalityInfo, 1>;
struct XdsUpdate {
XdsLocalityList locality_list;
// TODO(juanlishen): Pass drop_per_million when adding drop support.
};
// Creates an EDS request querying \a service_name.
grpc_slice XdsEdsRequestCreateAndEncode(const char* service_name);
// Parses the EDS response and returns the args to update locality map. If there
// is any error, the output update is invalid.
grpc_error* XdsEdsResponseDecodeAndParse(const grpc_slice& encoded_response,
XdsUpdate* update);
// TODO(juanlishen): Delete these when LRS is added.
xds_grpclb_request* xds_grpclb_load_report_request_create_locked(
grpc_core::XdsLbClientStats* client_stats, upb_arena* arena);
/** Destroy \a initial_response */ } // namespace grpc_core
void xds_grpclb_initial_response_destroy(xds_grpclb_initial_response* response);
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_LOAD_BALANCER_API_H \ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_LOAD_BALANCER_API_H \
*/ */

@ -20,8 +20,6 @@
#include "src/core/ext/filters/client_channel/server_address.h" #include "src/core/ext/filters/client_channel/server_address.h"
#include <string.h>
namespace grpc_core { namespace grpc_core {
// //
@ -39,7 +37,7 @@ ServerAddress::ServerAddress(const void* address, size_t address_len,
address_.len = static_cast<socklen_t>(address_len); address_.len = static_cast<socklen_t>(address_len);
} }
bool ServerAddress::operator==(const grpc_core::ServerAddress& other) const { bool ServerAddress::operator==(const ServerAddress& other) const {
return address_.len == other.address_.len && return address_.len == other.address_.len &&
memcmp(address_.addr, other.address_.addr, address_.len) == 0 && memcmp(address_.addr, other.address_.addr, address_.len) == 0 &&
grpc_channel_args_compare(args_, other.args_) == 0; grpc_channel_args_compare(args_, other.args_) == 0;

@ -24,7 +24,6 @@
#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/gprpp/inlined_vector.h" #include "src/core/lib/gprpp/inlined_vector.h"
#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/resolve_address.h"
#include "src/core/lib/uri/uri_parser.h"
// Channel arg key for a bool indicating whether an address is a grpclb // Channel arg key for a bool indicating whether an address is a grpclb
// load balancer (as opposed to a backend). // load balancer (as opposed to a backend).
@ -68,6 +67,7 @@ class ServerAddress {
} }
ServerAddress& operator=(ServerAddress&& other) { ServerAddress& operator=(ServerAddress&& other) {
address_ = other.address_; address_ = other.address_;
grpc_channel_args_destroy(args_);
args_ = other.args_; args_ = other.args_;
other.args_ = nullptr; other.args_ = nullptr;
return *this; return *this;

@ -1154,9 +1154,12 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
GRPC_CHTTP2_IF_TRACING( GRPC_CHTTP2_IF_TRACING(
gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t, gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
last_stream_id)); last_stream_id));
/* We want to log this irrespective of whether http tracing is enabled */ /* We want to log this irrespective of whether http tracing is enabled if we
gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string, goaway_error, * received a GOAWAY with a non NO_ERROR code. */
grpc_error_string(t->goaway_error)); if (goaway_error != GRPC_HTTP2_NO_ERROR) {
gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string,
goaway_error, grpc_error_string(t->goaway_error));
}
/* When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug /* When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
* data equal to "too_many_pings", it should log the occurrence at a log level * data equal to "too_many_pings", it should log the occurrence at a log level
@ -2591,7 +2594,6 @@ static void read_action_locked(void* tp, grpc_error* error) {
t->endpoint_reading = 0; t->endpoint_reading = 0;
} else if (t->closed_with_error == GRPC_ERROR_NONE) { } else if (t->closed_with_error == GRPC_ERROR_NONE) {
keep_reading = true; keep_reading = true;
GRPC_CHTTP2_REF_TRANSPORT(t, "keep_reading");
/* Since we have read a byte, reset the keepalive timer */ /* Since we have read a byte, reset the keepalive timer */
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) { if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
grpc_timer_cancel(&t->keepalive_ping_timer); grpc_timer_cancel(&t->keepalive_ping_timer);
@ -2604,7 +2606,6 @@ static void read_action_locked(void* tp, grpc_error* error) {
grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent); grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent);
grpc_chttp2_act_on_flowctl_action(t->flow_control->MakeAction(), t, grpc_chttp2_act_on_flowctl_action(t->flow_control->MakeAction(), t,
nullptr); nullptr);
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keep_reading");
} else { } else {
GRPC_CHTTP2_UNREF_TRANSPORT(t, "reading_action"); GRPC_CHTTP2_UNREF_TRANSPORT(t, "reading_action");
} }

@ -29,6 +29,7 @@
extern grpc_core::TraceFlag grpc_http_trace; extern grpc_core::TraceFlag grpc_http_trace;
extern grpc_core::TraceFlag grpc_trace_http2_stream_state; extern grpc_core::TraceFlag grpc_trace_http2_stream_state;
extern grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount; extern grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount;
extern grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_hpack_parser;
extern bool g_flow_control_enabled; extern bool g_flow_control_enabled;

@ -38,6 +38,9 @@
#include "src/core/lib/surface/validate_metadata.h" #include "src/core/lib/surface/validate_metadata.h"
#include "src/core/lib/transport/http2_errors.h" #include "src/core/lib/transport/http2_errors.h"
grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_hpack_parser(
false, "chttp2_hpack_parser");
typedef enum { typedef enum {
NOT_BINARY, NOT_BINARY,
BINARY_BEGIN, BINARY_BEGIN,
@ -643,7 +646,7 @@ static void GPR_ATTRIBUTE_NOINLINE on_hdr_log(grpc_mdelem md) {
/* emission helpers */ /* emission helpers */
template <bool do_add> template <bool do_add>
static grpc_error* on_hdr(grpc_chttp2_hpack_parser* p, grpc_mdelem md) { static grpc_error* on_hdr(grpc_chttp2_hpack_parser* p, grpc_mdelem md) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) { if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
on_hdr_log(md); on_hdr_log(md);
} }
if (do_add) { if (do_add) {
@ -1021,7 +1024,7 @@ static grpc_error* parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
/* finish parsing a max table size change */ /* finish parsing a max table size change */
static grpc_error* finish_max_tbl_size(grpc_chttp2_hpack_parser* p, static grpc_error* finish_max_tbl_size(grpc_chttp2_hpack_parser* p,
const uint8_t* cur, const uint8_t* end) { const uint8_t* cur, const uint8_t* end) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) { if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index); gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index);
} }
grpc_error* err = grpc_error* err =

@ -1,14 +1,14 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/gcp/altscontext.proto * src/proto/grpc/gcp/altscontext.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#include <stddef.h> #include <stddef.h>
#include "upb/msg.h" #include "upb/msg.h"
#include "grpc/gcp/altscontext.upb.h" #include "src/proto/grpc/gcp/altscontext.upb.h"
#include "src/proto/grpc/gcp/transport_security_common.upb.h" #include "src/proto/grpc/gcp/transport_security_common.upb.h"
#include "upb/port_def.inc" #include "upb/port_def.inc"

@ -1,13 +1,13 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/gcp/altscontext.proto * src/proto/grpc/gcp/altscontext.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#ifndef GRPC_GCP_ALTSCONTEXT_PROTO_UPB_H_ #ifndef SRC_PROTO_GRPC_GCP_ALTSCONTEXT_PROTO_UPB_H_
#define GRPC_GCP_ALTSCONTEXT_PROTO_UPB_H_ #define SRC_PROTO_GRPC_GCP_ALTSCONTEXT_PROTO_UPB_H_
#include "upb/generated_util.h" #include "upb/generated_util.h"
#include "upb/msg.h" #include "upb/msg.h"
@ -123,4 +123,4 @@ UPB_INLINE void grpc_gcp_AltsContext_PeerAttributesEntry_set_value(grpc_gcp_Alts
#include "upb/port_undef.inc" #include "upb/port_undef.inc"
#endif /* GRPC_GCP_ALTSCONTEXT_PROTO_UPB_H_ */ #endif /* SRC_PROTO_GRPC_GCP_ALTSCONTEXT_PROTO_UPB_H_ */

@ -1,14 +1,14 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/gcp/handshaker.proto * src/proto/grpc/gcp/handshaker.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#include <stddef.h> #include <stddef.h>
#include "upb/msg.h" #include "upb/msg.h"
#include "grpc/gcp/handshaker.upb.h" #include "src/proto/grpc/gcp/handshaker.upb.h"
#include "src/proto/grpc/gcp/transport_security_common.upb.h" #include "src/proto/grpc/gcp/transport_security_common.upb.h"
#include "upb/port_def.inc" #include "upb/port_def.inc"

@ -1,13 +1,13 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/gcp/handshaker.proto * src/proto/grpc/gcp/handshaker.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#ifndef GRPC_GCP_HANDSHAKER_PROTO_UPB_H_ #ifndef SRC_PROTO_GRPC_GCP_HANDSHAKER_PROTO_UPB_H_
#define GRPC_GCP_HANDSHAKER_PROTO_UPB_H_ #define SRC_PROTO_GRPC_GCP_HANDSHAKER_PROTO_UPB_H_
#include "upb/generated_util.h" #include "upb/generated_util.h"
#include "upb/msg.h" #include "upb/msg.h"
@ -678,4 +678,4 @@ UPB_INLINE struct grpc_gcp_HandshakerStatus* grpc_gcp_HandshakerResp_mutable_sta
#include "upb/port_undef.inc" #include "upb/port_undef.inc"
#endif /* GRPC_GCP_HANDSHAKER_PROTO_UPB_H_ */ #endif /* SRC_PROTO_GRPC_GCP_HANDSHAKER_PROTO_UPB_H_ */

@ -1,14 +1,14 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/gcp/transport_security_common.proto * src/proto/grpc/gcp/transport_security_common.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#include <stddef.h> #include <stddef.h>
#include "upb/msg.h" #include "upb/msg.h"
#include "grpc/gcp/transport_security_common.upb.h" #include "src/proto/grpc/gcp/transport_security_common.upb.h"
#include "upb/port_def.inc" #include "upb/port_def.inc"

@ -1,13 +1,13 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/gcp/transport_security_common.proto * src/proto/grpc/gcp/transport_security_common.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#ifndef GRPC_GCP_TRANSPORT_SECURITY_COMMON_PROTO_UPB_H_ #ifndef SRC_PROTO_GRPC_GCP_TRANSPORT_SECURITY_COMMON_PROTO_UPB_H_
#define GRPC_GCP_TRANSPORT_SECURITY_COMMON_PROTO_UPB_H_ #define SRC_PROTO_GRPC_GCP_TRANSPORT_SECURITY_COMMON_PROTO_UPB_H_
#include "upb/generated_util.h" #include "upb/generated_util.h"
#include "upb/msg.h" #include "upb/msg.h"
@ -106,4 +106,4 @@ UPB_INLINE void grpc_gcp_RpcProtocolVersions_Version_set_minor(grpc_gcp_RpcProto
#include "upb/port_undef.inc" #include "upb/port_undef.inc"
#endif /* GRPC_GCP_TRANSPORT_SECURITY_COMMON_PROTO_UPB_H_ */ #endif /* SRC_PROTO_GRPC_GCP_TRANSPORT_SECURITY_COMMON_PROTO_UPB_H_ */

@ -1,14 +1,14 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/health/v1/health.proto * src/proto/grpc/health/v1/health.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#include <stddef.h> #include <stddef.h>
#include "upb/msg.h" #include "upb/msg.h"
#include "grpc/health/v1/health.upb.h" #include "src/proto/grpc/health/v1/health.upb.h"
#include "upb/port_def.inc" #include "upb/port_def.inc"

@ -1,13 +1,13 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/health/v1/health.proto * src/proto/grpc/health/v1/health.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#ifndef GRPC_HEALTH_V1_HEALTH_PROTO_UPB_H_ #ifndef SRC_PROTO_GRPC_HEALTH_V1_HEALTH_PROTO_UPB_H_
#define GRPC_HEALTH_V1_HEALTH_PROTO_UPB_H_ #define SRC_PROTO_GRPC_HEALTH_V1_HEALTH_PROTO_UPB_H_
#include "upb/generated_util.h" #include "upb/generated_util.h"
#include "upb/msg.h" #include "upb/msg.h"
@ -81,4 +81,4 @@ UPB_INLINE void grpc_health_v1_HealthCheckResponse_set_status(grpc_health_v1_Hea
#include "upb/port_undef.inc" #include "upb/port_undef.inc"
#endif /* GRPC_HEALTH_V1_HEALTH_PROTO_UPB_H_ */ #endif /* SRC_PROTO_GRPC_HEALTH_V1_HEALTH_PROTO_UPB_H_ */

@ -1,14 +1,14 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/lb/v1/load_balancer.proto * src/proto/grpc/lb/v1/load_balancer.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#include <stddef.h> #include <stddef.h>
#include "upb/msg.h" #include "upb/msg.h"
#include "grpc/lb/v1/load_balancer.upb.h" #include "src/proto/grpc/lb/v1/load_balancer.upb.h"
#include "google/protobuf/duration.upb.h" #include "google/protobuf/duration.upb.h"
#include "google/protobuf/timestamp.upb.h" #include "google/protobuf/timestamp.upb.h"

@ -1,13 +1,13 @@
/* This file was generated by upbc (the upb compiler) from the input /* This file was generated by upbc (the upb compiler) from the input
* file: * file:
* *
* grpc/lb/v1/load_balancer.proto * src/proto/grpc/lb/v1/load_balancer.proto
* *
* Do not edit -- your changes will be discarded when the file is * Do not edit -- your changes will be discarded when the file is
* regenerated. */ * regenerated. */
#ifndef GRPC_LB_V1_LOAD_BALANCER_PROTO_UPB_H_ #ifndef SRC_PROTO_GRPC_LB_V1_LOAD_BALANCER_PROTO_UPB_H_
#define GRPC_LB_V1_LOAD_BALANCER_PROTO_UPB_H_ #define SRC_PROTO_GRPC_LB_V1_LOAD_BALANCER_PROTO_UPB_H_
#include "upb/generated_util.h" #include "upb/generated_util.h"
#include "upb/msg.h" #include "upb/msg.h"
@ -356,4 +356,4 @@ UPB_INLINE void grpc_lb_v1_Server_set_drop(grpc_lb_v1_Server *msg, bool value) {
#include "upb/port_undef.inc" #include "upb/port_undef.inc"
#endif /* GRPC_LB_V1_LOAD_BALANCER_PROTO_UPB_H_ */ #endif /* SRC_PROTO_GRPC_LB_V1_LOAD_BALANCER_PROTO_UPB_H_ */

@ -214,6 +214,8 @@ void grpc_channel_args_destroy(grpc_channel_args* a) {
int grpc_channel_args_compare(const grpc_channel_args* a, int grpc_channel_args_compare(const grpc_channel_args* a,
const grpc_channel_args* b) { const grpc_channel_args* b) {
if (a == nullptr && b == nullptr) return 0;
if (a == nullptr || b == nullptr) return a == nullptr ? -1 : 1;
int c = GPR_ICMP(a->num_args, b->num_args); int c = GPR_ICMP(a->num_args, b->num_args);
if (c != 0) return c; if (c != 0) return c;
for (size_t i = 0; i < a->num_args; i++) { for (size_t i = 0; i < a->num_args; i++) {

@ -107,51 +107,45 @@ char* BaseNode::RenderJsonString() {
CallCountingHelper::CallCountingHelper() { CallCountingHelper::CallCountingHelper() {
num_cores_ = GPR_MAX(1, gpr_cpu_num_cores()); num_cores_ = GPR_MAX(1, gpr_cpu_num_cores());
per_cpu_counter_data_storage_ = static_cast<AtomicCounterData*>( per_cpu_counter_data_storage_.reserve(num_cores_);
gpr_zalloc(sizeof(AtomicCounterData) * num_cores_)); for (size_t i = 0; i < num_cores_; ++i) {
} per_cpu_counter_data_storage_.emplace_back();
}
CallCountingHelper::~CallCountingHelper() {
gpr_free(per_cpu_counter_data_storage_);
} }
void CallCountingHelper::RecordCallStarted() { void CallCountingHelper::RecordCallStarted() {
gpr_atm_no_barrier_fetch_add( AtomicCounterData& data =
&per_cpu_counter_data_storage_[grpc_core::ExecCtx::Get()->starting_cpu()] per_cpu_counter_data_storage_[ExecCtx::Get()->starting_cpu()];
.calls_started, data.calls_started.FetchAdd(1, MemoryOrder::RELAXED);
static_cast<gpr_atm>(1)); data.last_call_started_cycle.Store(gpr_get_cycle_counter(),
gpr_atm_no_barrier_store( MemoryOrder::RELAXED);
&per_cpu_counter_data_storage_[grpc_core::ExecCtx::Get()->starting_cpu()]
.last_call_started_millis,
(gpr_atm)ExecCtx::Get()->Now());
} }
void CallCountingHelper::RecordCallFailed() { void CallCountingHelper::RecordCallFailed() {
gpr_atm_no_barrier_fetch_add( per_cpu_counter_data_storage_[ExecCtx::Get()->starting_cpu()]
&per_cpu_counter_data_storage_[grpc_core::ExecCtx::Get()->starting_cpu()] .calls_failed.FetchAdd(1, MemoryOrder::RELAXED);
.calls_failed,
static_cast<gpr_atm>(1));
} }
void CallCountingHelper::RecordCallSucceeded() { void CallCountingHelper::RecordCallSucceeded() {
gpr_atm_no_barrier_fetch_add( per_cpu_counter_data_storage_[ExecCtx::Get()->starting_cpu()]
&per_cpu_counter_data_storage_[grpc_core::ExecCtx::Get()->starting_cpu()] .calls_succeeded.FetchAdd(1, MemoryOrder::RELAXED);
.calls_succeeded,
static_cast<gpr_atm>(1));
} }
void CallCountingHelper::CollectData(CounterData* out) { void CallCountingHelper::CollectData(CounterData* out) {
for (size_t core = 0; core < num_cores_; ++core) { for (size_t core = 0; core < num_cores_; ++core) {
out->calls_started += gpr_atm_no_barrier_load( AtomicCounterData& data = per_cpu_counter_data_storage_[core];
&per_cpu_counter_data_storage_[core].calls_started);
out->calls_succeeded += gpr_atm_no_barrier_load( out->calls_started += data.calls_started.Load(MemoryOrder::RELAXED);
&per_cpu_counter_data_storage_[core].calls_succeeded); out->calls_succeeded +=
out->calls_failed += gpr_atm_no_barrier_load( per_cpu_counter_data_storage_[core].calls_succeeded.Load(
&per_cpu_counter_data_storage_[core].calls_failed); MemoryOrder::RELAXED);
gpr_atm last_call = gpr_atm_no_barrier_load( out->calls_failed += per_cpu_counter_data_storage_[core].calls_failed.Load(
&per_cpu_counter_data_storage_[core].last_call_started_millis); MemoryOrder::RELAXED);
if (last_call > out->last_call_started_millis) { const gpr_cycle_counter last_call =
out->last_call_started_millis = last_call; per_cpu_counter_data_storage_[core].last_call_started_cycle.Load(
MemoryOrder::RELAXED);
if (last_call > out->last_call_started_cycle) {
out->last_call_started_cycle = last_call;
} }
} }
} }
@ -173,8 +167,9 @@ void CallCountingHelper::PopulateCallCounts(grpc_json* json) {
json, json_iterator, "callsFailed", data.calls_failed); json, json_iterator, "callsFailed", data.calls_failed);
} }
if (data.calls_started != 0) { if (data.calls_started != 0) {
gpr_timespec ts = grpc_millis_to_timespec(data.last_call_started_millis, gpr_timespec ts = gpr_convert_clock_type(
GPR_CLOCK_REALTIME); gpr_cycle_counter_to_time(data.last_call_started_cycle),
GPR_CLOCK_REALTIME);
json_iterator = json_iterator =
grpc_json_create_child(json_iterator, json, "lastCallStartedTimestamp", grpc_json_create_child(json_iterator, json, "lastCallStartedTimestamp",
gpr_format_timespec(ts), GRPC_JSON_STRING, true); gpr_format_timespec(ts), GRPC_JSON_STRING, true);
@ -493,26 +488,25 @@ SocketNode::SocketNode(UniquePtr<char> local, UniquePtr<char> remote,
void SocketNode::RecordStreamStartedFromLocal() { void SocketNode::RecordStreamStartedFromLocal() {
gpr_atm_no_barrier_fetch_add(&streams_started_, static_cast<gpr_atm>(1)); gpr_atm_no_barrier_fetch_add(&streams_started_, static_cast<gpr_atm>(1));
gpr_atm_no_barrier_store(&last_local_stream_created_millis_, gpr_atm_no_barrier_store(&last_local_stream_created_cycle_,
(gpr_atm)ExecCtx::Get()->Now()); gpr_get_cycle_counter());
} }
void SocketNode::RecordStreamStartedFromRemote() { void SocketNode::RecordStreamStartedFromRemote() {
gpr_atm_no_barrier_fetch_add(&streams_started_, static_cast<gpr_atm>(1)); gpr_atm_no_barrier_fetch_add(&streams_started_, static_cast<gpr_atm>(1));
gpr_atm_no_barrier_store(&last_remote_stream_created_millis_, gpr_atm_no_barrier_store(&last_remote_stream_created_cycle_,
(gpr_atm)ExecCtx::Get()->Now()); gpr_get_cycle_counter());
} }
void SocketNode::RecordMessagesSent(uint32_t num_sent) { void SocketNode::RecordMessagesSent(uint32_t num_sent) {
gpr_atm_no_barrier_fetch_add(&messages_sent_, static_cast<gpr_atm>(num_sent)); gpr_atm_no_barrier_fetch_add(&messages_sent_, static_cast<gpr_atm>(num_sent));
gpr_atm_no_barrier_store(&last_message_sent_millis_, gpr_atm_no_barrier_store(&last_message_sent_cycle_, gpr_get_cycle_counter());
(gpr_atm)ExecCtx::Get()->Now());
} }
void SocketNode::RecordMessageReceived() { void SocketNode::RecordMessageReceived() {
gpr_atm_no_barrier_fetch_add(&messages_received_, static_cast<gpr_atm>(1)); gpr_atm_no_barrier_fetch_add(&messages_received_, static_cast<gpr_atm>(1));
gpr_atm_no_barrier_store(&last_message_received_millis_, gpr_atm_no_barrier_store(&last_message_received_cycle_,
(gpr_atm)ExecCtx::Get()->Now()); gpr_get_cycle_counter());
} }
grpc_json* SocketNode::RenderJson() { grpc_json* SocketNode::RenderJson() {
@ -545,20 +539,22 @@ grpc_json* SocketNode::RenderJson() {
if (streams_started != 0) { if (streams_started != 0) {
json_iterator = grpc_json_add_number_string_child( json_iterator = grpc_json_add_number_string_child(
json, json_iterator, "streamsStarted", streams_started); json, json_iterator, "streamsStarted", streams_started);
gpr_atm last_local_stream_created_millis = gpr_cycle_counter last_local_stream_created_cycle =
gpr_atm_no_barrier_load(&last_local_stream_created_millis_); gpr_atm_no_barrier_load(&last_local_stream_created_cycle_);
if (last_local_stream_created_millis != 0) { if (last_local_stream_created_cycle != 0) {
ts = grpc_millis_to_timespec(last_local_stream_created_millis, ts = gpr_convert_clock_type(
GPR_CLOCK_REALTIME); gpr_cycle_counter_to_time(last_local_stream_created_cycle),
GPR_CLOCK_REALTIME);
json_iterator = grpc_json_create_child( json_iterator = grpc_json_create_child(
json_iterator, json, "lastLocalStreamCreatedTimestamp", json_iterator, json, "lastLocalStreamCreatedTimestamp",
gpr_format_timespec(ts), GRPC_JSON_STRING, true); gpr_format_timespec(ts), GRPC_JSON_STRING, true);
} }
gpr_atm last_remote_stream_created_millis = gpr_cycle_counter last_remote_stream_created_cycle =
gpr_atm_no_barrier_load(&last_remote_stream_created_millis_); gpr_atm_no_barrier_load(&last_remote_stream_created_cycle_);
if (last_remote_stream_created_millis != 0) { if (last_remote_stream_created_cycle != 0) {
ts = grpc_millis_to_timespec(last_remote_stream_created_millis, ts = gpr_convert_clock_type(
GPR_CLOCK_REALTIME); gpr_cycle_counter_to_time(last_remote_stream_created_cycle),
GPR_CLOCK_REALTIME);
json_iterator = grpc_json_create_child( json_iterator = grpc_json_create_child(
json_iterator, json, "lastRemoteStreamCreatedTimestamp", json_iterator, json, "lastRemoteStreamCreatedTimestamp",
gpr_format_timespec(ts), GRPC_JSON_STRING, true); gpr_format_timespec(ts), GRPC_JSON_STRING, true);
@ -578,8 +574,9 @@ grpc_json* SocketNode::RenderJson() {
if (messages_sent != 0) { if (messages_sent != 0) {
json_iterator = grpc_json_add_number_string_child( json_iterator = grpc_json_add_number_string_child(
json, json_iterator, "messagesSent", messages_sent); json, json_iterator, "messagesSent", messages_sent);
ts = grpc_millis_to_timespec( ts = gpr_convert_clock_type(
gpr_atm_no_barrier_load(&last_message_sent_millis_), gpr_cycle_counter_to_time(
gpr_atm_no_barrier_load(&last_message_sent_cycle_)),
GPR_CLOCK_REALTIME); GPR_CLOCK_REALTIME);
json_iterator = json_iterator =
grpc_json_create_child(json_iterator, json, "lastMessageSentTimestamp", grpc_json_create_child(json_iterator, json, "lastMessageSentTimestamp",
@ -589,8 +586,9 @@ grpc_json* SocketNode::RenderJson() {
if (messages_received != 0) { if (messages_received != 0) {
json_iterator = grpc_json_add_number_string_child( json_iterator = grpc_json_add_number_string_child(
json, json_iterator, "messagesReceived", messages_received); json, json_iterator, "messagesReceived", messages_received);
ts = grpc_millis_to_timespec( ts = gpr_convert_clock_type(
gpr_atm_no_barrier_load(&last_message_received_millis_), gpr_cycle_counter_to_time(
gpr_atm_no_barrier_load(&last_message_received_cycle_)),
GPR_CLOCK_REALTIME); GPR_CLOCK_REALTIME);
json_iterator = grpc_json_create_child( json_iterator = grpc_json_create_child(
json_iterator, json, "lastMessageReceivedTimestamp", json_iterator, json, "lastMessageReceivedTimestamp",

@ -24,6 +24,7 @@
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include "src/core/lib/channel/channel_trace.h" #include "src/core/lib/channel/channel_trace.h"
#include "src/core/lib/gpr/time_precise.h"
#include "src/core/lib/gprpp/inlined_vector.h" #include "src/core/lib/gprpp/inlined_vector.h"
#include "src/core/lib/gprpp/manual_constructor.h" #include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/gprpp/map.h" #include "src/core/lib/gprpp/map.h"
@ -111,7 +112,6 @@ class BaseNode : public RefCounted<BaseNode> {
class CallCountingHelper { class CallCountingHelper {
public: public:
CallCountingHelper(); CallCountingHelper();
~CallCountingHelper();
void RecordCallStarted(); void RecordCallStarted();
void RecordCallFailed(); void RecordCallFailed();
@ -124,24 +124,38 @@ class CallCountingHelper {
// testing peer friend. // testing peer friend.
friend class testing::CallCountingHelperPeer; friend class testing::CallCountingHelperPeer;
// TODO(soheil): add a proper PerCPU helper and use it here.
struct AtomicCounterData { struct AtomicCounterData {
gpr_atm calls_started = 0; // Define the ctors so that we can use this structure in InlinedVector.
gpr_atm calls_succeeded = 0; AtomicCounterData() = default;
gpr_atm calls_failed = 0; AtomicCounterData(const AtomicCounterData& that)
gpr_atm last_call_started_millis = 0; : calls_started(that.calls_started.Load(MemoryOrder::RELAXED)),
}; calls_succeeded(that.calls_succeeded.Load(MemoryOrder::RELAXED)),
calls_failed(that.calls_failed.Load(MemoryOrder::RELAXED)),
last_call_started_cycle(
that.last_call_started_cycle.Load(MemoryOrder::RELAXED)) {}
Atomic<intptr_t> calls_started{0};
Atomic<intptr_t> calls_succeeded{0};
Atomic<intptr_t> calls_failed{0};
Atomic<gpr_cycle_counter> last_call_started_cycle{0};
// Make sure the size is exactly one cache line.
uint8_t padding[GPR_CACHELINE_SIZE - 3 * sizeof(Atomic<intptr_t>) -
sizeof(Atomic<gpr_cycle_counter>)];
} GPR_ALIGN_STRUCT(GPR_CACHELINE_SIZE);
struct CounterData { struct CounterData {
intptr_t calls_started = 0; intptr_t calls_started = 0;
intptr_t calls_succeeded = 0; intptr_t calls_succeeded = 0;
intptr_t calls_failed = 0; intptr_t calls_failed = 0;
intptr_t last_call_started_millis = 0; gpr_cycle_counter last_call_started_cycle = 0;
}; };
// collects the sharded data into one CounterData struct. // collects the sharded data into one CounterData struct.
void CollectData(CounterData* out); void CollectData(CounterData* out);
AtomicCounterData* per_cpu_counter_data_storage_ = nullptr; // Really zero-sized, but 0-sized arrays are illegal on MSVC.
InlinedVector<AtomicCounterData, 1> per_cpu_counter_data_storage_;
size_t num_cores_ = 0; size_t num_cores_ = 0;
}; };
@ -281,10 +295,10 @@ class SocketNode : public BaseNode {
gpr_atm messages_sent_ = 0; gpr_atm messages_sent_ = 0;
gpr_atm messages_received_ = 0; gpr_atm messages_received_ = 0;
gpr_atm keepalives_sent_ = 0; gpr_atm keepalives_sent_ = 0;
gpr_atm last_local_stream_created_millis_ = 0; gpr_atm last_local_stream_created_cycle_ = 0;
gpr_atm last_remote_stream_created_millis_ = 0; gpr_atm last_remote_stream_created_cycle_ = 0;
gpr_atm last_message_sent_millis_ = 0; gpr_atm last_message_sent_cycle_ = 0;
gpr_atm last_message_received_millis_ = 0; gpr_atm last_message_received_cycle_ = 0;
UniquePtr<char> local_; UniquePtr<char> local_;
UniquePtr<char> remote_; UniquePtr<char> remote_;
}; };

@ -18,61 +18,132 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#if GPR_LINUX
#include <fcntl.h>
#include <unistd.h>
#endif
#include <algorithm>
#include <grpc/impl/codegen/gpr_types.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/time.h> #include <grpc/support/time.h>
#include <stdio.h>
#include "src/core/lib/gpr/time_precise.h" #include "src/core/lib/gpr/time_precise.h"
#ifdef GRPC_TIMERS_RDTSC #if GPR_CYCLE_COUNTER_RDTSC_32 or GPR_CYCLE_COUNTER_RDTSC_64
#if defined(__i386__) #if GPR_LINUX
static void gpr_get_cycle_counter(int64_t int* clk) { static bool read_freq_from_kernel(double* freq) {
int64_t int ret; // Google production kernel export the frequency for us in kHz.
__asm__ volatile("rdtsc" : "=A"(ret)); int fd = open("/sys/devices/system/cpu/cpu0/tsc_freq_khz", O_RDONLY);
*clk = ret; if (fd == -1) {
return false;
}
char line[1024] = {};
char* err;
bool ret = false;
int len = read(fd, line, sizeof(line) - 1);
if (len > 0) {
const long val = strtol(line, &err, 10);
if (line[0] != '\0' && (*err == '\n' || *err == '\0')) {
*freq = val * 1e3; // Value is kHz.
ret = true;
}
}
close(fd);
return ret;
} }
#endif /* GPR_LINUX */
static double cycles_per_second = 0;
static gpr_cycle_counter start_cycle;
// ---------------------------------------------------------------- static bool is_fake_clock() {
#elif defined(__x86_64__) || defined(__amd64__) gpr_timespec start = gpr_now(GPR_CLOCK_MONOTONIC);
static void gpr_get_cycle_counter(int64_t* clk) { int64_t sum = 0;
uint64_t low, high; for (int i = 0; i < 8; ++i) {
__asm__ volatile("rdtsc" : "=a"(low), "=d"(high)); gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
*clk = (int64_t)(high << 32) | (int64_t)low; gpr_timespec delta = gpr_time_sub(now, start);
sum += delta.tv_sec * GPR_NS_PER_SEC + delta.tv_nsec;
}
// If the clock doesn't move even a nano after 8 tries, it's a fake one.
return sum == 0;
} }
#endif
static double cycles_per_second = 0;
static int64_t start_cycle;
void gpr_precise_clock_init(void) { void gpr_precise_clock_init(void) {
time_t start;
int64_t end_cycle;
gpr_log(GPR_DEBUG, "Calibrating timers"); gpr_log(GPR_DEBUG, "Calibrating timers");
start = time(NULL);
while (time(NULL) == start) #if GPR_LINUX
; if (read_freq_from_kernel(&cycles_per_second)) {
gpr_get_cycle_counter(&start_cycle); start_cycle = gpr_get_cycle_counter();
while (time(NULL) <= start + 10) return;
; }
gpr_get_cycle_counter(&end_cycle); #endif /* GPR_LINUX */
cycles_per_second = (double)(end_cycle - start_cycle) / 10.0;
if (is_fake_clock()) {
cycles_per_second = 1;
start_cycle = 0;
return;
}
// Start from a loop of 1ms, and gradually increase the loop duration
// until we either converge or we have passed 255ms (1ms+2ms+...+128ms).
int64_t measurement_ns = GPR_NS_PER_MS;
double last_freq = -1;
bool converged = false;
for (int i = 0; i < 8 && !converged; ++i, measurement_ns *= 2) {
start_cycle = gpr_get_cycle_counter();
int64_t loop_ns;
gpr_timespec start = gpr_now(GPR_CLOCK_MONOTONIC);
do {
// TODO(soheil): Maybe sleep instead of busy polling.
gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
gpr_timespec delta = gpr_time_sub(now, start);
loop_ns = delta.tv_sec * GPR_NS_PER_SEC + delta.tv_nsec;
} while (loop_ns < measurement_ns);
gpr_cycle_counter end_cycle = gpr_get_cycle_counter();
// Frequency should be in Hz.
const double freq =
static_cast<double>(end_cycle - start_cycle) / loop_ns * GPR_NS_PER_SEC;
converged =
last_freq != -1 && (freq * 0.99 < last_freq && last_freq < freq * 1.01);
last_freq = freq;
}
cycles_per_second = last_freq;
gpr_log(GPR_DEBUG, "... cycles_per_second = %f\n", cycles_per_second); gpr_log(GPR_DEBUG, "... cycles_per_second = %f\n", cycles_per_second);
} }
void gpr_precise_clock_now(gpr_timespec* clk) { gpr_timespec gpr_cycle_counter_to_time(gpr_cycle_counter cycles) {
int64_t counter; double secs = static_cast<double>(cycles - start_cycle) / cycles_per_second;
double secs; gpr_timespec ts;
gpr_get_cycle_counter(&counter); ts.tv_sec = static_cast<int64_t>(secs);
secs = (double)(counter - start_cycle) / cycles_per_second; ts.tv_nsec = static_cast<int32_t>(GPR_NS_PER_SEC *
clk->clock_type = GPR_CLOCK_PRECISE; (secs - static_cast<double>(ts.tv_sec)));
clk->tv_sec = (int64_t)secs; ts.clock_type = GPR_CLOCK_PRECISE;
clk->tv_nsec = (int32_t)(1e9 * (secs - (double)clk->tv_sec)); return ts;
} }
#else /* GRPC_TIMERS_RDTSC */ void gpr_precise_clock_now(gpr_timespec* clk) {
int64_t counter = gpr_get_cycle_counter();
*clk = gpr_cycle_counter_to_time(counter);
}
#elif GPR_CYCLE_COUNTER_FALLBACK
void gpr_precise_clock_init(void) {} void gpr_precise_clock_init(void) {}
gpr_cycle_counter gpr_get_cycle_counter() {
gpr_timespec ts = gpr_now(GPR_CLOCK_REALTIME);
return gpr_timespec_to_micros(ts);
}
gpr_timespec gpr_cycle_counter_to_time(gpr_cycle_counter cycles) {
gpr_timespec ts;
ts.tv_sec = cycles / GPR_US_PER_SEC;
ts.tv_nsec = (cycles - ts.tv_sec * GPR_US_PER_SEC) * GPR_NS_PER_US;
ts.clock_type = GPR_CLOCK_PRECISE;
return ts;
}
void gpr_precise_clock_now(gpr_timespec* clk) { void gpr_precise_clock_now(gpr_timespec* clk) {
*clk = gpr_now(GPR_CLOCK_REALTIME); *clk = gpr_now(GPR_CLOCK_REALTIME);
clk->clock_type = GPR_CLOCK_PRECISE; clk->clock_type = GPR_CLOCK_PRECISE;
} }
#endif /* GRPC_TIMERS_RDTSC */ #endif /* GPR_CYCLE_COUNTER_FALLBACK */

@ -21,9 +21,45 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include <grpc/impl/codegen/gpr_types.h>
#include <grpc/support/time.h> #include <grpc/support/time.h>
// Depending on the platform gpr_get_cycle_counter() can have a resolution as
// low as a usec. Use other clock sources or gpr_precise_clock_now(),
// where you need high resolution clocks.
//
// Using gpr_get_cycle_counter() is preferred to using ExecCtx::Get()->Now()
// whenever possible.
#if GPR_CYCLE_COUNTER_RDTSC_32
typedef int64_t gpr_cycle_counter;
inline gpr_cycle_counter gpr_get_cycle_counter() {
int64_t ret;
__asm__ volatile("rdtsc" : "=A"(ret));
return ret;
}
#elif GPR_CYCLE_COUNTER_RDTSC_64
typedef int64_t gpr_cycle_counter;
inline gpr_cycle_counter gpr_get_cycle_counter() {
uint64_t low, high;
__asm__ volatile("rdtsc" : "=a"(low), "=d"(high));
return (high << 32) | low;
}
#elif GPR_CYCLE_COUNTER_FALLBACK
// TODO(soheil): add support for mrs on Arm.
// Real time in micros.
typedef double gpr_cycle_counter;
gpr_cycle_counter gpr_get_cycle_counter();
#else
#error Must define exactly one of \
GPR_CYCLE_COUNTER_RDTSC_32, \
GPR_CYCLE_COUNTER_RDTSC_64, or \
GPR_CYCLE_COUNTER_FALLBACK
#endif
void gpr_precise_clock_init(void); void gpr_precise_clock_init(void);
void gpr_precise_clock_now(gpr_timespec* clk); void gpr_precise_clock_now(gpr_timespec* clk);
gpr_timespec gpr_cycle_counter_to_time(gpr_cycle_counter cycles);
#endif /* GRPC_CORE_LIB_GPR_TIME_PRECISE_H */ #endif /* GRPC_CORE_LIB_GPR_TIME_PRECISE_H */

@ -100,16 +100,22 @@ class InlinedVector {
bool operator==(const InlinedVector& other) const { bool operator==(const InlinedVector& other) const {
if (size_ != other.size_) return false; if (size_ != other.size_) return false;
for (size_t i = 0; i < size_; ++i) { for (size_t i = 0; i < size_; ++i) {
if (data()[i] != other.data()[i]) return false; // Note that this uses == instead of != so that the data class doesn't
// have to implement !=.
if (!(data()[i] == other.data()[i])) return false;
} }
return true; return true;
} }
void reserve(size_t capacity) { void reserve(size_t capacity) {
if (capacity > capacity_) { if (capacity > capacity_) {
T* new_dynamic = static_cast<T*>(gpr_malloc(sizeof(T) * capacity)); T* new_dynamic =
std::alignment_of<T>::value == 0
? static_cast<T*>(gpr_malloc(sizeof(T) * capacity))
: static_cast<T*>(gpr_malloc_aligned(
sizeof(T) * capacity, std::alignment_of<T>::value));
move_elements(data(), new_dynamic, size_); move_elements(data(), new_dynamic, size_);
gpr_free(dynamic_); free_dynamic();
dynamic_ = new_dynamic; dynamic_ = new_dynamic;
capacity_ = capacity; capacity_ = capacity;
} }
@ -194,7 +200,17 @@ class InlinedVector {
T& value = data()[i]; T& value = data()[i];
value.~T(); value.~T();
} }
gpr_free(dynamic_); free_dynamic();
}
void free_dynamic() {
if (dynamic_ != nullptr) {
if (std::alignment_of<T>::value == 0) {
gpr_free(dynamic_);
} else {
gpr_free_aligned(dynamic_);
}
}
} }
typename std::aligned_storage<sizeof(T)>::type inline_[N]; typename std::aligned_storage<sizeof(T)>::type inline_[N];

@ -47,6 +47,7 @@
#include "src/core/lib/gpr/useful.h" #include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/inlined_vector.h" #include "src/core/lib/gprpp/inlined_vector.h"
#include "src/core/lib/gprpp/manual_constructor.h" #include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/gprpp/ref_counted.h"
#include "src/core/lib/gprpp/sync.h" #include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/iomgr/block_annotate.h" #include "src/core/lib/iomgr/block_annotate.h"
#include "src/core/lib/iomgr/iomgr_internal.h" #include "src/core/lib/iomgr/iomgr_internal.h"
@ -89,7 +90,7 @@ typedef struct pollable pollable;
/// - PO_MULTI - a pollable containing many fds /// - PO_MULTI - a pollable containing many fds
struct pollable { struct pollable {
pollable_type type; // immutable pollable_type type; // immutable
gpr_refcount refs; grpc_core::RefCount refs;
int epfd; int epfd;
grpc_wakeup_fd wakeup; grpc_wakeup_fd wakeup;
@ -135,17 +136,26 @@ static char* pollable_desc(pollable* p) {
static pollable* g_empty_pollable; static pollable* g_empty_pollable;
static grpc_error* pollable_create(pollable_type type, pollable** p); static grpc_error* pollable_create(pollable_type type, pollable** p);
#ifdef NDEBUG static pollable* pollable_ref(pollable* p,
static pollable* pollable_ref(pollable* p); const grpc_core::DebugLocation& dbg_loc,
static void pollable_unref(pollable* p); const char* reason) {
#define POLLABLE_REF(p, r) pollable_ref(p) p->refs.Ref(dbg_loc, reason);
#define POLLABLE_UNREF(p, r) pollable_unref(p) return p;
#else }
static pollable* pollable_ref(pollable* p, int line, const char* reason); static void pollable_unref(pollable* p, const grpc_core::DebugLocation& dbg_loc,
static void pollable_unref(pollable* p, int line, const char* reason); const char* reason) {
#define POLLABLE_REF(p, r) pollable_ref((p), __LINE__, (r)) if (p == nullptr) return;
#define POLLABLE_UNREF(p, r) pollable_unref((p), __LINE__, (r)) if (GPR_UNLIKELY(p != nullptr && p->refs.Unref(dbg_loc, reason))) {
#endif GRPC_FD_TRACE("pollable_unref: Closing epfd: %d", p->epfd);
close(p->epfd);
grpc_wakeup_fd_destroy(&p->wakeup);
gpr_mu_destroy(&p->owner_orphan_mu);
gpr_mu_destroy(&p->mu);
gpr_free(p);
}
}
#define POLLABLE_REF(p, r) pollable_ref((p), DEBUG_LOCATION, (r))
#define POLLABLE_UNREF(p, r) pollable_unref((p), DEBUG_LOCATION, (r))
/******************************************************************************* /*******************************************************************************
* Fd Declarations * Fd Declarations
@ -283,7 +293,7 @@ struct grpc_pollset {
*/ */
struct grpc_pollset_set { struct grpc_pollset_set {
gpr_refcount refs; grpc_core::RefCount refs;
gpr_mu mu; gpr_mu mu;
grpc_pollset_set* parent; grpc_pollset_set* parent;
@ -568,7 +578,7 @@ static grpc_error* pollable_create(pollable_type type, pollable** p) {
} }
(*p)->type = type; (*p)->type = type;
gpr_ref_init(&(*p)->refs, 1); new (&(*p)->refs) grpc_core::RefCount(1, &grpc_trace_pollable_refcount);
gpr_mu_init(&(*p)->mu); gpr_mu_init(&(*p)->mu);
(*p)->epfd = epfd; (*p)->epfd = epfd;
(*p)->owner_fd = nullptr; (*p)->owner_fd = nullptr;
@ -582,41 +592,6 @@ static grpc_error* pollable_create(pollable_type type, pollable** p) {
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
} }
#ifdef NDEBUG
static pollable* pollable_ref(pollable* p) {
#else
static pollable* pollable_ref(pollable* p, int line, const char* reason) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_pollable_refcount)) {
int r = static_cast<int> gpr_atm_no_barrier_load(&p->refs.count);
gpr_log(__FILE__, line, GPR_LOG_SEVERITY_DEBUG,
"POLLABLE:%p ref %d->%d %s", p, r, r + 1, reason);
}
#endif
gpr_ref(&p->refs);
return p;
}
#ifdef NDEBUG
static void pollable_unref(pollable* p) {
#else
static void pollable_unref(pollable* p, int line, const char* reason) {
if (p == nullptr) return;
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_pollable_refcount)) {
int r = static_cast<int> gpr_atm_no_barrier_load(&p->refs.count);
gpr_log(__FILE__, line, GPR_LOG_SEVERITY_DEBUG,
"POLLABLE:%p unref %d->%d %s", p, r, r - 1, reason);
}
#endif
if (p != nullptr && gpr_unref(&p->refs)) {
GRPC_FD_TRACE("pollable_unref: Closing epfd: %d", p->epfd);
close(p->epfd);
grpc_wakeup_fd_destroy(&p->wakeup);
gpr_mu_destroy(&p->owner_orphan_mu);
gpr_mu_destroy(&p->mu);
gpr_free(p);
}
}
static grpc_error* pollable_add_fd(pollable* p, grpc_fd* fd) { static grpc_error* pollable_add_fd(pollable* p, grpc_fd* fd) {
grpc_error* error = GRPC_ERROR_NONE; grpc_error* error = GRPC_ERROR_NONE;
static const char* err_desc = "pollable_add_fd"; static const char* err_desc = "pollable_add_fd";
@ -1331,13 +1306,13 @@ static grpc_pollset_set* pollset_set_create(void) {
grpc_pollset_set* pss = grpc_pollset_set* pss =
static_cast<grpc_pollset_set*>(gpr_zalloc(sizeof(*pss))); static_cast<grpc_pollset_set*>(gpr_zalloc(sizeof(*pss)));
gpr_mu_init(&pss->mu); gpr_mu_init(&pss->mu);
gpr_ref_init(&pss->refs, 1); new (&pss->refs) grpc_core::RefCount();
return pss; return pss;
} }
static void pollset_set_unref(grpc_pollset_set* pss) { static void pollset_set_unref(grpc_pollset_set* pss) {
if (pss == nullptr) return; if (pss == nullptr) return;
if (!gpr_unref(&pss->refs)) return; if (GPR_LIKELY(!pss->refs.Unref())) return;
pollset_set_unref(pss->parent); pollset_set_unref(pss->parent);
gpr_mu_destroy(&pss->mu); gpr_mu_destroy(&pss->mu);
for (size_t i = 0; i < pss->pollset_count; i++) { for (size_t i = 0; i < pss->pollset_count; i++) {
@ -1528,7 +1503,7 @@ static void pollset_set_add_pollset_set(grpc_pollset_set* a,
if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) { if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
gpr_log(GPR_INFO, "PSS: parent %p to %p", b, a); gpr_log(GPR_INFO, "PSS: parent %p to %p", b, a);
} }
gpr_ref(&a->refs); a->refs.Ref();
b->parent = a; b->parent = a;
if (a->fd_capacity < a->fd_count + b->fd_count) { if (a->fd_capacity < a->fd_count + b->fd_count) {
a->fd_capacity = GPR_MAX(2 * a->fd_capacity, a->fd_count + b->fd_count); a->fd_capacity = GPR_MAX(2 * a->fd_capacity, a->fd_count + b->fd_count);

@ -201,13 +201,11 @@ int grpc_sockaddr_to_string(char** out,
} }
void grpc_string_to_sockaddr(grpc_resolved_address* out, char* addr, int port) { void grpc_string_to_sockaddr(grpc_resolved_address* out, char* addr, int port) {
memset(out, 0, sizeof(grpc_resolved_address));
grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)out->addr; grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)out->addr;
grpc_sockaddr_in* addr4 = (grpc_sockaddr_in*)out->addr; grpc_sockaddr_in* addr4 = (grpc_sockaddr_in*)out->addr;
if (grpc_inet_pton(GRPC_AF_INET6, addr, &addr6->sin6_addr) == 1) { if (grpc_inet_pton(GRPC_AF_INET6, addr, &addr6->sin6_addr) == 1) {
addr6->sin6_family = GRPC_AF_INET6; addr6->sin6_family = GRPC_AF_INET6;
addr6->sin6_flowinfo = 0;
addr6->sin6_scope_id = 0;
out->len = sizeof(grpc_sockaddr_in6); out->len = sizeof(grpc_sockaddr_in6);
} else if (grpc_inet_pton(GRPC_AF_INET, addr, &addr4->sin_addr) == 1) { } else if (grpc_inet_pton(GRPC_AF_INET, addr, &addr4->sin_addr) == 1) {
addr4->sin_family = GRPC_AF_INET; addr4->sin_family = GRPC_AF_INET;

@ -89,7 +89,7 @@ struct grpc_tcp {
bool is_first_read; bool is_first_read;
double target_length; double target_length;
double bytes_read_this_round; double bytes_read_this_round;
gpr_refcount refcount; grpc_core::RefCount refcount;
gpr_atm shutdown_count; gpr_atm shutdown_count;
int min_read_chunk_size; int min_read_chunk_size;
@ -359,41 +359,29 @@ static void tcp_free(grpc_tcp* tcp) {
} }
#ifndef NDEBUG #ifndef NDEBUG
#define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), __FILE__, __LINE__) #define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), DEBUG_LOCATION)
#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__) #define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), DEBUG_LOCATION)
static void tcp_unref(grpc_tcp* tcp, const char* reason, const char* file, static void tcp_unref(grpc_tcp* tcp, const char* reason,
int line) { const grpc_core::DebugLocation& debug_location) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) { if (GPR_UNLIKELY(tcp->refcount.Unref(debug_location, reason))) {
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
"TCP unref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
val - 1);
}
if (gpr_unref(&tcp->refcount)) {
tcp_free(tcp); tcp_free(tcp);
} }
} }
static void tcp_ref(grpc_tcp* tcp, const char* reason, const char* file, static void tcp_ref(grpc_tcp* tcp, const char* reason,
int line) { const grpc_core::DebugLocation& debug_location) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) { tcp->refcount.Ref(debug_location, reason);
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
"TCP ref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
val + 1);
}
gpr_ref(&tcp->refcount);
} }
#else #else
#define TCP_UNREF(tcp, reason) tcp_unref((tcp)) #define TCP_UNREF(tcp, reason) tcp_unref((tcp))
#define TCP_REF(tcp, reason) tcp_ref((tcp)) #define TCP_REF(tcp, reason) tcp_ref((tcp))
static void tcp_unref(grpc_tcp* tcp) { static void tcp_unref(grpc_tcp* tcp) {
if (gpr_unref(&tcp->refcount)) { if (GPR_UNLIKELY(tcp->refcount.Unref())) {
tcp_free(tcp); tcp_free(tcp);
} }
} }
static void tcp_ref(grpc_tcp* tcp) { gpr_ref(&tcp->refcount); } static void tcp_ref(grpc_tcp* tcp) { tcp->refcount.Ref(); }
#endif #endif
static void tcp_destroy(grpc_endpoint* ep) { static void tcp_destroy(grpc_endpoint* ep) {
@ -1230,7 +1218,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
tcp->ts_capable = true; tcp->ts_capable = true;
tcp->outgoing_buffer_arg = nullptr; tcp->outgoing_buffer_arg = nullptr;
/* paired with unref in grpc_tcp_destroy */ /* paired with unref in grpc_tcp_destroy */
gpr_ref_init(&tcp->refcount, 1); new (&tcp->refcount) grpc_core::RefCount(1, &grpc_tcp_trace);
gpr_atm_no_barrier_store(&tcp->shutdown_count, 0); gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
tcp->em_fd = em_fd; tcp->em_fd = em_fd;
grpc_slice_buffer_init(&tcp->last_read_buffer); grpc_slice_buffer_init(&tcp->last_read_buffer);

@ -320,7 +320,7 @@ struct cq_callback_data {
/* Completion queue structure */ /* Completion queue structure */
struct grpc_completion_queue { struct grpc_completion_queue {
/** Once owning_refs drops to zero, we will destroy the cq */ /** Once owning_refs drops to zero, we will destroy the cq */
gpr_refcount owning_refs; grpc_core::RefCount owning_refs;
gpr_mu* mu; gpr_mu* mu;
@ -518,7 +518,7 @@ grpc_completion_queue* grpc_completion_queue_create_internal(
cq->poller_vtable = poller_vtable; cq->poller_vtable = poller_vtable;
/* One for destroy(), one for pollset_shutdown */ /* One for destroy(), one for pollset_shutdown */
gpr_ref_init(&cq->owning_refs, 2); new (&cq->owning_refs) grpc_core::RefCount(2);
poller_vtable->init(POLLSET_FROM_CQ(cq), &cq->mu); poller_vtable->init(POLLSET_FROM_CQ(cq), &cq->mu);
vtable->init(DATA_FROM_CQ(cq), shutdown_callback); vtable->init(DATA_FROM_CQ(cq), shutdown_callback);
@ -573,16 +573,13 @@ int grpc_get_cq_poll_num(grpc_completion_queue* cq) {
#ifndef NDEBUG #ifndef NDEBUG
void grpc_cq_internal_ref(grpc_completion_queue* cq, const char* reason, void grpc_cq_internal_ref(grpc_completion_queue* cq, const char* reason,
const char* file, int line) { const char* file, int line) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cq_refcount)) { grpc_core::DebugLocation debug_location(file, line);
gpr_atm val = gpr_atm_no_barrier_load(&cq->owning_refs.count);
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
"CQ:%p ref %" PRIdPTR " -> %" PRIdPTR " %s", cq, val, val + 1,
reason);
}
#else #else
void grpc_cq_internal_ref(grpc_completion_queue* cq) { void grpc_cq_internal_ref(grpc_completion_queue* cq) {
grpc_core::DebugLocation debug_location;
const char* reason = nullptr;
#endif #endif
gpr_ref(&cq->owning_refs); cq->owning_refs.Ref(debug_location, reason);
} }
static void on_pollset_shutdown_done(void* arg, grpc_error* error) { static void on_pollset_shutdown_done(void* arg, grpc_error* error) {
@ -593,16 +590,13 @@ static void on_pollset_shutdown_done(void* arg, grpc_error* error) {
#ifndef NDEBUG #ifndef NDEBUG
void grpc_cq_internal_unref(grpc_completion_queue* cq, const char* reason, void grpc_cq_internal_unref(grpc_completion_queue* cq, const char* reason,
const char* file, int line) { const char* file, int line) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cq_refcount)) { grpc_core::DebugLocation debug_location(file, line);
gpr_atm val = gpr_atm_no_barrier_load(&cq->owning_refs.count);
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
"CQ:%p unref %" PRIdPTR " -> %" PRIdPTR " %s", cq, val, val - 1,
reason);
}
#else #else
void grpc_cq_internal_unref(grpc_completion_queue* cq) { void grpc_cq_internal_unref(grpc_completion_queue* cq) {
grpc_core::DebugLocation debug_location;
const char* reason = nullptr;
#endif #endif
if (gpr_unref(&cq->owning_refs)) { if (GPR_UNLIKELY(cq->owning_refs.Unref(debug_location, reason))) {
cq->vtable->destroy(DATA_FROM_CQ(cq)); cq->vtable->destroy(DATA_FROM_CQ(cq));
cq->poller_vtable->destroy(POLLSET_FROM_CQ(cq)); cq->poller_vtable->destroy(POLLSET_FROM_CQ(cq));
#ifndef NDEBUG #ifndef NDEBUG

@ -256,7 +256,7 @@ struct grpc_server {
listener* listeners; listener* listeners;
int listeners_destroyed; int listeners_destroyed;
gpr_refcount internal_refcount; grpc_core::RefCount internal_refcount;
/** when did we print the last shutdown progress message */ /** when did we print the last shutdown progress message */
gpr_timespec last_shutdown_message_time; gpr_timespec last_shutdown_message_time;
@ -400,9 +400,7 @@ static void request_matcher_kill_requests(grpc_server* server,
* server proper * server proper
*/ */
static void server_ref(grpc_server* server) { static void server_ref(grpc_server* server) { server->internal_refcount.Ref(); }
gpr_ref(&server->internal_refcount);
}
static void server_delete(grpc_server* server) { static void server_delete(grpc_server* server) {
registered_method* rm; registered_method* rm;
@ -434,7 +432,7 @@ static void server_delete(grpc_server* server) {
} }
static void server_unref(grpc_server* server) { static void server_unref(grpc_server* server) {
if (gpr_unref(&server->internal_refcount)) { if (GPR_UNLIKELY(server->internal_refcount.Unref())) {
server_delete(server); server_delete(server);
} }
} }
@ -1031,7 +1029,7 @@ grpc_server* grpc_server_create(const grpc_channel_args* args, void* reserved) {
gpr_cv_init(&server->starting_cv); gpr_cv_init(&server->starting_cv);
/* decremented by grpc_server_destroy */ /* decremented by grpc_server_destroy */
gpr_ref_init(&server->internal_refcount, 1); new (&server->internal_refcount) grpc_core::RefCount();
server->root_channel_data.next = server->root_channel_data.prev = server->root_channel_data.next = server->root_channel_data.prev =
&server->root_channel_data; &server->root_channel_data;

File diff suppressed because it is too large Load Diff

@ -36,7 +36,7 @@
static_assert( static_assert(
std::is_trivially_destructible<grpc_core::StaticMetadataSlice>::value, std::is_trivially_destructible<grpc_core::StaticMetadataSlice>::value,
"grpc_core::StaticMetadataSlice must be trivially destructible."); "grpc_core::StaticMetadataSlice must be trivially destructible.");
#define GRPC_STATIC_MDSTR_COUNT 106 #define GRPC_STATIC_MDSTR_COUNT 107
extern const grpc_core::StaticMetadataSlice extern const grpc_core::StaticMetadataSlice
grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT]; grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT];
/* ":path" */ /* ":path" */
@ -111,154 +111,157 @@ extern const grpc_core::StaticMetadataSlice
/* "/grpc.lb.v1.LoadBalancer/BalanceLoad" */ /* "/grpc.lb.v1.LoadBalancer/BalanceLoad" */
#define GRPC_MDSTR_SLASH_GRPC_DOT_LB_DOT_V1_DOT_LOADBALANCER_SLASH_BALANCELOAD \ #define GRPC_MDSTR_SLASH_GRPC_DOT_LB_DOT_V1_DOT_LOADBALANCER_SLASH_BALANCELOAD \
(grpc_static_slice_table[33]) (grpc_static_slice_table[33])
/* "/envoy.api.v2.EndpointDiscoveryService/StreamEndpoints" */
#define GRPC_MDSTR_SLASH_ENVOY_DOT_API_DOT_V2_DOT_ENDPOINTDISCOVERYSERVICE_SLASH_STREAMENDPOINTS \
(grpc_static_slice_table[34])
/* "/grpc.health.v1.Health/Watch" */ /* "/grpc.health.v1.Health/Watch" */
#define GRPC_MDSTR_SLASH_GRPC_DOT_HEALTH_DOT_V1_DOT_HEALTH_SLASH_WATCH \ #define GRPC_MDSTR_SLASH_GRPC_DOT_HEALTH_DOT_V1_DOT_HEALTH_SLASH_WATCH \
(grpc_static_slice_table[34]) (grpc_static_slice_table[35])
/* "/envoy.service.discovery.v2.AggregatedDiscoveryService/StreamAggregatedResources" /* "/envoy.service.discovery.v2.AggregatedDiscoveryService/StreamAggregatedResources"
*/ */
#define GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES \ #define GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES \
(grpc_static_slice_table[35]) (grpc_static_slice_table[36])
/* "deflate" */ /* "deflate" */
#define GRPC_MDSTR_DEFLATE (grpc_static_slice_table[36]) #define GRPC_MDSTR_DEFLATE (grpc_static_slice_table[37])
/* "gzip" */ /* "gzip" */
#define GRPC_MDSTR_GZIP (grpc_static_slice_table[37]) #define GRPC_MDSTR_GZIP (grpc_static_slice_table[38])
/* "stream/gzip" */ /* "stream/gzip" */
#define GRPC_MDSTR_STREAM_SLASH_GZIP (grpc_static_slice_table[38]) #define GRPC_MDSTR_STREAM_SLASH_GZIP (grpc_static_slice_table[39])
/* "GET" */ /* "GET" */
#define GRPC_MDSTR_GET (grpc_static_slice_table[39]) #define GRPC_MDSTR_GET (grpc_static_slice_table[40])
/* "POST" */ /* "POST" */
#define GRPC_MDSTR_POST (grpc_static_slice_table[40]) #define GRPC_MDSTR_POST (grpc_static_slice_table[41])
/* "/" */ /* "/" */
#define GRPC_MDSTR_SLASH (grpc_static_slice_table[41]) #define GRPC_MDSTR_SLASH (grpc_static_slice_table[42])
/* "/index.html" */ /* "/index.html" */
#define GRPC_MDSTR_SLASH_INDEX_DOT_HTML (grpc_static_slice_table[42]) #define GRPC_MDSTR_SLASH_INDEX_DOT_HTML (grpc_static_slice_table[43])
/* "http" */ /* "http" */
#define GRPC_MDSTR_HTTP (grpc_static_slice_table[43]) #define GRPC_MDSTR_HTTP (grpc_static_slice_table[44])
/* "https" */ /* "https" */
#define GRPC_MDSTR_HTTPS (grpc_static_slice_table[44]) #define GRPC_MDSTR_HTTPS (grpc_static_slice_table[45])
/* "200" */ /* "200" */
#define GRPC_MDSTR_200 (grpc_static_slice_table[45]) #define GRPC_MDSTR_200 (grpc_static_slice_table[46])
/* "204" */ /* "204" */
#define GRPC_MDSTR_204 (grpc_static_slice_table[46]) #define GRPC_MDSTR_204 (grpc_static_slice_table[47])
/* "206" */ /* "206" */
#define GRPC_MDSTR_206 (grpc_static_slice_table[47]) #define GRPC_MDSTR_206 (grpc_static_slice_table[48])
/* "304" */ /* "304" */
#define GRPC_MDSTR_304 (grpc_static_slice_table[48]) #define GRPC_MDSTR_304 (grpc_static_slice_table[49])
/* "400" */ /* "400" */
#define GRPC_MDSTR_400 (grpc_static_slice_table[49]) #define GRPC_MDSTR_400 (grpc_static_slice_table[50])
/* "404" */ /* "404" */
#define GRPC_MDSTR_404 (grpc_static_slice_table[50]) #define GRPC_MDSTR_404 (grpc_static_slice_table[51])
/* "500" */ /* "500" */
#define GRPC_MDSTR_500 (grpc_static_slice_table[51]) #define GRPC_MDSTR_500 (grpc_static_slice_table[52])
/* "accept-charset" */ /* "accept-charset" */
#define GRPC_MDSTR_ACCEPT_CHARSET (grpc_static_slice_table[52]) #define GRPC_MDSTR_ACCEPT_CHARSET (grpc_static_slice_table[53])
/* "gzip, deflate" */ /* "gzip, deflate" */
#define GRPC_MDSTR_GZIP_COMMA_DEFLATE (grpc_static_slice_table[53]) #define GRPC_MDSTR_GZIP_COMMA_DEFLATE (grpc_static_slice_table[54])
/* "accept-language" */ /* "accept-language" */
#define GRPC_MDSTR_ACCEPT_LANGUAGE (grpc_static_slice_table[54]) #define GRPC_MDSTR_ACCEPT_LANGUAGE (grpc_static_slice_table[55])
/* "accept-ranges" */ /* "accept-ranges" */
#define GRPC_MDSTR_ACCEPT_RANGES (grpc_static_slice_table[55]) #define GRPC_MDSTR_ACCEPT_RANGES (grpc_static_slice_table[56])
/* "accept" */ /* "accept" */
#define GRPC_MDSTR_ACCEPT (grpc_static_slice_table[56]) #define GRPC_MDSTR_ACCEPT (grpc_static_slice_table[57])
/* "access-control-allow-origin" */ /* "access-control-allow-origin" */
#define GRPC_MDSTR_ACCESS_CONTROL_ALLOW_ORIGIN (grpc_static_slice_table[57]) #define GRPC_MDSTR_ACCESS_CONTROL_ALLOW_ORIGIN (grpc_static_slice_table[58])
/* "age" */ /* "age" */
#define GRPC_MDSTR_AGE (grpc_static_slice_table[58]) #define GRPC_MDSTR_AGE (grpc_static_slice_table[59])
/* "allow" */ /* "allow" */
#define GRPC_MDSTR_ALLOW (grpc_static_slice_table[59]) #define GRPC_MDSTR_ALLOW (grpc_static_slice_table[60])
/* "authorization" */ /* "authorization" */
#define GRPC_MDSTR_AUTHORIZATION (grpc_static_slice_table[60]) #define GRPC_MDSTR_AUTHORIZATION (grpc_static_slice_table[61])
/* "cache-control" */ /* "cache-control" */
#define GRPC_MDSTR_CACHE_CONTROL (grpc_static_slice_table[61]) #define GRPC_MDSTR_CACHE_CONTROL (grpc_static_slice_table[62])
/* "content-disposition" */ /* "content-disposition" */
#define GRPC_MDSTR_CONTENT_DISPOSITION (grpc_static_slice_table[62]) #define GRPC_MDSTR_CONTENT_DISPOSITION (grpc_static_slice_table[63])
/* "content-language" */ /* "content-language" */
#define GRPC_MDSTR_CONTENT_LANGUAGE (grpc_static_slice_table[63]) #define GRPC_MDSTR_CONTENT_LANGUAGE (grpc_static_slice_table[64])
/* "content-length" */ /* "content-length" */
#define GRPC_MDSTR_CONTENT_LENGTH (grpc_static_slice_table[64]) #define GRPC_MDSTR_CONTENT_LENGTH (grpc_static_slice_table[65])
/* "content-location" */ /* "content-location" */
#define GRPC_MDSTR_CONTENT_LOCATION (grpc_static_slice_table[65]) #define GRPC_MDSTR_CONTENT_LOCATION (grpc_static_slice_table[66])
/* "content-range" */ /* "content-range" */
#define GRPC_MDSTR_CONTENT_RANGE (grpc_static_slice_table[66]) #define GRPC_MDSTR_CONTENT_RANGE (grpc_static_slice_table[67])
/* "cookie" */ /* "cookie" */
#define GRPC_MDSTR_COOKIE (grpc_static_slice_table[67]) #define GRPC_MDSTR_COOKIE (grpc_static_slice_table[68])
/* "date" */ /* "date" */
#define GRPC_MDSTR_DATE (grpc_static_slice_table[68]) #define GRPC_MDSTR_DATE (grpc_static_slice_table[69])
/* "etag" */ /* "etag" */
#define GRPC_MDSTR_ETAG (grpc_static_slice_table[69]) #define GRPC_MDSTR_ETAG (grpc_static_slice_table[70])
/* "expect" */ /* "expect" */
#define GRPC_MDSTR_EXPECT (grpc_static_slice_table[70]) #define GRPC_MDSTR_EXPECT (grpc_static_slice_table[71])
/* "expires" */ /* "expires" */
#define GRPC_MDSTR_EXPIRES (grpc_static_slice_table[71]) #define GRPC_MDSTR_EXPIRES (grpc_static_slice_table[72])
/* "from" */ /* "from" */
#define GRPC_MDSTR_FROM (grpc_static_slice_table[72]) #define GRPC_MDSTR_FROM (grpc_static_slice_table[73])
/* "if-match" */ /* "if-match" */
#define GRPC_MDSTR_IF_MATCH (grpc_static_slice_table[73]) #define GRPC_MDSTR_IF_MATCH (grpc_static_slice_table[74])
/* "if-modified-since" */ /* "if-modified-since" */
#define GRPC_MDSTR_IF_MODIFIED_SINCE (grpc_static_slice_table[74]) #define GRPC_MDSTR_IF_MODIFIED_SINCE (grpc_static_slice_table[75])
/* "if-none-match" */ /* "if-none-match" */
#define GRPC_MDSTR_IF_NONE_MATCH (grpc_static_slice_table[75]) #define GRPC_MDSTR_IF_NONE_MATCH (grpc_static_slice_table[76])
/* "if-range" */ /* "if-range" */
#define GRPC_MDSTR_IF_RANGE (grpc_static_slice_table[76]) #define GRPC_MDSTR_IF_RANGE (grpc_static_slice_table[77])
/* "if-unmodified-since" */ /* "if-unmodified-since" */
#define GRPC_MDSTR_IF_UNMODIFIED_SINCE (grpc_static_slice_table[77]) #define GRPC_MDSTR_IF_UNMODIFIED_SINCE (grpc_static_slice_table[78])
/* "last-modified" */ /* "last-modified" */
#define GRPC_MDSTR_LAST_MODIFIED (grpc_static_slice_table[78]) #define GRPC_MDSTR_LAST_MODIFIED (grpc_static_slice_table[79])
/* "link" */ /* "link" */
#define GRPC_MDSTR_LINK (grpc_static_slice_table[79]) #define GRPC_MDSTR_LINK (grpc_static_slice_table[80])
/* "location" */ /* "location" */
#define GRPC_MDSTR_LOCATION (grpc_static_slice_table[80]) #define GRPC_MDSTR_LOCATION (grpc_static_slice_table[81])
/* "max-forwards" */ /* "max-forwards" */
#define GRPC_MDSTR_MAX_FORWARDS (grpc_static_slice_table[81]) #define GRPC_MDSTR_MAX_FORWARDS (grpc_static_slice_table[82])
/* "proxy-authenticate" */ /* "proxy-authenticate" */
#define GRPC_MDSTR_PROXY_AUTHENTICATE (grpc_static_slice_table[82]) #define GRPC_MDSTR_PROXY_AUTHENTICATE (grpc_static_slice_table[83])
/* "proxy-authorization" */ /* "proxy-authorization" */
#define GRPC_MDSTR_PROXY_AUTHORIZATION (grpc_static_slice_table[83]) #define GRPC_MDSTR_PROXY_AUTHORIZATION (grpc_static_slice_table[84])
/* "range" */ /* "range" */
#define GRPC_MDSTR_RANGE (grpc_static_slice_table[84]) #define GRPC_MDSTR_RANGE (grpc_static_slice_table[85])
/* "referer" */ /* "referer" */
#define GRPC_MDSTR_REFERER (grpc_static_slice_table[85]) #define GRPC_MDSTR_REFERER (grpc_static_slice_table[86])
/* "refresh" */ /* "refresh" */
#define GRPC_MDSTR_REFRESH (grpc_static_slice_table[86]) #define GRPC_MDSTR_REFRESH (grpc_static_slice_table[87])
/* "retry-after" */ /* "retry-after" */
#define GRPC_MDSTR_RETRY_AFTER (grpc_static_slice_table[87]) #define GRPC_MDSTR_RETRY_AFTER (grpc_static_slice_table[88])
/* "server" */ /* "server" */
#define GRPC_MDSTR_SERVER (grpc_static_slice_table[88]) #define GRPC_MDSTR_SERVER (grpc_static_slice_table[89])
/* "set-cookie" */ /* "set-cookie" */
#define GRPC_MDSTR_SET_COOKIE (grpc_static_slice_table[89]) #define GRPC_MDSTR_SET_COOKIE (grpc_static_slice_table[90])
/* "strict-transport-security" */ /* "strict-transport-security" */
#define GRPC_MDSTR_STRICT_TRANSPORT_SECURITY (grpc_static_slice_table[90]) #define GRPC_MDSTR_STRICT_TRANSPORT_SECURITY (grpc_static_slice_table[91])
/* "transfer-encoding" */ /* "transfer-encoding" */
#define GRPC_MDSTR_TRANSFER_ENCODING (grpc_static_slice_table[91]) #define GRPC_MDSTR_TRANSFER_ENCODING (grpc_static_slice_table[92])
/* "vary" */ /* "vary" */
#define GRPC_MDSTR_VARY (grpc_static_slice_table[92]) #define GRPC_MDSTR_VARY (grpc_static_slice_table[93])
/* "via" */ /* "via" */
#define GRPC_MDSTR_VIA (grpc_static_slice_table[93]) #define GRPC_MDSTR_VIA (grpc_static_slice_table[94])
/* "www-authenticate" */ /* "www-authenticate" */
#define GRPC_MDSTR_WWW_AUTHENTICATE (grpc_static_slice_table[94]) #define GRPC_MDSTR_WWW_AUTHENTICATE (grpc_static_slice_table[95])
/* "0" */ /* "0" */
#define GRPC_MDSTR_0 (grpc_static_slice_table[95]) #define GRPC_MDSTR_0 (grpc_static_slice_table[96])
/* "identity" */ /* "identity" */
#define GRPC_MDSTR_IDENTITY (grpc_static_slice_table[96]) #define GRPC_MDSTR_IDENTITY (grpc_static_slice_table[97])
/* "trailers" */ /* "trailers" */
#define GRPC_MDSTR_TRAILERS (grpc_static_slice_table[97]) #define GRPC_MDSTR_TRAILERS (grpc_static_slice_table[98])
/* "application/grpc" */ /* "application/grpc" */
#define GRPC_MDSTR_APPLICATION_SLASH_GRPC (grpc_static_slice_table[98]) #define GRPC_MDSTR_APPLICATION_SLASH_GRPC (grpc_static_slice_table[99])
/* "grpc" */ /* "grpc" */
#define GRPC_MDSTR_GRPC (grpc_static_slice_table[99]) #define GRPC_MDSTR_GRPC (grpc_static_slice_table[100])
/* "PUT" */ /* "PUT" */
#define GRPC_MDSTR_PUT (grpc_static_slice_table[100]) #define GRPC_MDSTR_PUT (grpc_static_slice_table[101])
/* "lb-cost-bin" */ /* "lb-cost-bin" */
#define GRPC_MDSTR_LB_COST_BIN (grpc_static_slice_table[101]) #define GRPC_MDSTR_LB_COST_BIN (grpc_static_slice_table[102])
/* "identity,deflate" */ /* "identity,deflate" */
#define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE (grpc_static_slice_table[102]) #define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE (grpc_static_slice_table[103])
/* "identity,gzip" */ /* "identity,gzip" */
#define GRPC_MDSTR_IDENTITY_COMMA_GZIP (grpc_static_slice_table[103]) #define GRPC_MDSTR_IDENTITY_COMMA_GZIP (grpc_static_slice_table[104])
/* "deflate,gzip" */ /* "deflate,gzip" */
#define GRPC_MDSTR_DEFLATE_COMMA_GZIP (grpc_static_slice_table[104]) #define GRPC_MDSTR_DEFLATE_COMMA_GZIP (grpc_static_slice_table[105])
/* "identity,deflate,gzip" */ /* "identity,deflate,gzip" */
#define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE_COMMA_GZIP \ #define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE_COMMA_GZIP \
(grpc_static_slice_table[105]) (grpc_static_slice_table[106])
namespace grpc_core { namespace grpc_core {
struct StaticSliceRefcount; struct StaticSliceRefcount;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save