grpc 1.30.2 → 1.31.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (317) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +560 -619
  3. data/include/grpc/grpc_security_constants.h +3 -0
  4. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  5. data/include/grpc/impl/codegen/port_platform.h +0 -32
  6. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  7. data/src/core/ext/filters/client_channel/client_channel.cc +406 -265
  8. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  9. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  10. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  11. data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
  12. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  13. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  14. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
  16. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  17. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +376 -68
  18. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  19. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  20. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  23. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
  25. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  26. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
  27. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  28. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  29. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
  30. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  31. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  32. data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
  33. data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
  34. data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
  35. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
  36. data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
  37. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
  38. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  39. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  40. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  41. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  42. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  43. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  44. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
  45. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  46. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  47. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  48. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  49. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
  50. data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
  51. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  52. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  53. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  54. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  55. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  56. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  57. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  59. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  60. data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
  61. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  62. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
  63. data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
  64. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  65. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  66. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
  67. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
  68. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
  69. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
  70. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  71. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
  72. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
  73. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  74. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  75. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  76. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  77. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
  78. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
  79. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
  80. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  81. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
  82. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  83. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
  84. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  85. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
  86. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
  87. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
  88. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  89. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  90. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
  91. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  92. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  93. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
  94. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  95. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  96. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
  97. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  98. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
  99. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  100. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  101. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  102. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  103. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  104. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
  105. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
  106. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  107. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  108. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
  109. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  110. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
  111. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  112. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
  113. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  114. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
  115. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  116. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
  117. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  118. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  119. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  120. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  121. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  122. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  123. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  124. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  125. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  126. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  127. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
  128. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  129. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  130. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  131. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  132. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  133. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  134. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  135. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  136. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  137. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  138. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  139. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  140. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  141. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  142. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  143. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  144. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  145. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  146. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  147. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  148. data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
  149. data/src/core/lib/channel/channel_trace.cc +2 -6
  150. data/src/core/lib/channel/channelz.cc +5 -15
  151. data/src/core/lib/gpr/log_linux.cc +6 -8
  152. data/src/core/lib/gpr/log_posix.cc +6 -8
  153. data/src/core/lib/gpr/string.cc +10 -9
  154. data/src/core/lib/gpr/string.h +4 -2
  155. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  156. data/src/core/lib/http/httpcli.cc +13 -10
  157. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  158. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  159. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  160. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  161. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  162. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  163. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  164. data/src/core/lib/iomgr/ev_posix.cc +2 -0
  165. data/src/core/lib/iomgr/iomgr.cc +10 -0
  166. data/src/core/lib/iomgr/iomgr.h +10 -0
  167. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  168. data/src/core/lib/iomgr/port.h +1 -21
  169. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  170. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  171. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  172. data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
  173. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  174. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  175. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  176. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  177. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  178. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  179. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  180. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  181. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  182. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  183. data/src/core/lib/iomgr/tcp_server.h +7 -5
  184. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  185. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  186. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  187. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  188. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  189. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  190. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  191. data/src/core/lib/iomgr/udp_server.cc +24 -23
  192. data/src/core/lib/iomgr/udp_server.h +5 -2
  193. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  194. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  195. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  196. data/src/core/lib/json/json_reader.cc +20 -21
  197. data/src/core/lib/security/credentials/credentials.h +5 -3
  198. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  199. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
  200. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  201. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  202. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  203. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  204. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  205. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  206. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
  207. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  208. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  209. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  210. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  211. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  212. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  213. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  214. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  215. data/src/core/lib/security/util/json_util.cc +12 -13
  216. data/src/core/lib/slice/slice.cc +38 -1
  217. data/src/core/lib/slice/slice_internal.h +1 -0
  218. data/src/core/lib/surface/call.cc +40 -41
  219. data/src/core/lib/surface/completion_queue.cc +271 -14
  220. data/src/core/lib/surface/completion_queue.h +8 -0
  221. data/src/core/lib/surface/init.cc +2 -0
  222. data/src/core/lib/surface/server.cc +565 -632
  223. data/src/core/lib/surface/server.h +34 -12
  224. data/src/core/lib/surface/version.cc +2 -2
  225. data/src/core/lib/transport/transport.h +6 -0
  226. data/src/core/lib/uri/uri_parser.cc +8 -15
  227. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  228. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  229. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
  230. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  231. data/src/core/tsi/ssl_transport_security.cc +102 -11
  232. data/src/core/tsi/ssl_transport_security.h +14 -2
  233. data/src/core/tsi/transport_security_interface.h +5 -0
  234. data/src/ruby/ext/grpc/extconf.rb +5 -2
  235. data/src/ruby/ext/grpc/rb_call.c +3 -2
  236. data/src/ruby/ext/grpc/rb_call.h +4 -0
  237. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  238. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  239. data/src/ruby/lib/grpc/version.rb +1 -1
  240. data/third_party/boringssl-with-bazel/err_data.c +89 -83
  241. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  242. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  243. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  244. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  245. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  246. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  247. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  248. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  249. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  251. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  252. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  253. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  254. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  255. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  265. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  266. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  267. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  268. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  269. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  270. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  271. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  272. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  273. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  275. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  276. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  279. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  280. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  281. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  283. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  286. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  287. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  288. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  289. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  290. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
  291. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  292. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
  293. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  294. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  295. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  296. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  297. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
  298. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  299. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
  300. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  301. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  302. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  303. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  304. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
  305. data/third_party/upb/upb/decode.c +467 -504
  306. data/third_party/upb/upb/encode.c +163 -121
  307. data/third_party/upb/upb/msg.c +130 -64
  308. data/third_party/upb/upb/msg.h +418 -14
  309. data/third_party/upb/upb/port_def.inc +35 -6
  310. data/third_party/upb/upb/port_undef.inc +8 -1
  311. data/third_party/upb/upb/table.c +53 -75
  312. data/third_party/upb/upb/table.int.h +11 -43
  313. data/third_party/upb/upb/upb.c +148 -124
  314. data/third_party/upb/upb/upb.h +65 -147
  315. data/third_party/upb/upb/upb.hpp +86 -0
  316. metadata +40 -37
  317. data/third_party/upb/upb/generated_util.h +0 -105
@@ -0,0 +1,62 @@
1
+ //
2
+ // Copyright 2020 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/filters/client_channel/config_selector.h"
20
+
21
+ #include "src/core/lib/channel/channel_args.h"
22
+
23
+ // Channel arg key for ConfigSelector.
24
+ #define GRPC_ARG_CONFIG_SELECTOR "grpc.internal.config_selector"
25
+
26
+ namespace grpc_core {
27
+
28
+ namespace {
29
+
30
+ void* ConfigSelectorArgCopy(void* p) {
31
+ ConfigSelector* config_selector = static_cast<ConfigSelector*>(p);
32
+ config_selector->Ref().release();
33
+ return p;
34
+ }
35
+
36
+ void ConfigSelectorArgDestroy(void* p) {
37
+ ConfigSelector* config_selector = static_cast<ConfigSelector*>(p);
38
+ config_selector->Unref();
39
+ }
40
+
41
+ int ConfigSelectorArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
42
+
43
+ const grpc_arg_pointer_vtable kChannelArgVtable = {
44
+ ConfigSelectorArgCopy, ConfigSelectorArgDestroy, ConfigSelectorArgCmp};
45
+
46
+ } // namespace
47
+
48
+ grpc_arg ConfigSelector::MakeChannelArg() const {
49
+ return grpc_channel_arg_pointer_create(
50
+ const_cast<char*>(GRPC_ARG_CONFIG_SELECTOR),
51
+ const_cast<ConfigSelector*>(this), &kChannelArgVtable);
52
+ }
53
+
54
+ RefCountedPtr<ConfigSelector> ConfigSelector::GetFromChannelArgs(
55
+ const grpc_channel_args& args) {
56
+ ConfigSelector* config_selector =
57
+ grpc_channel_args_find_pointer<ConfigSelector>(&args,
58
+ GRPC_ARG_CONFIG_SELECTOR);
59
+ return config_selector != nullptr ? config_selector->Ref() : nullptr;
60
+ }
61
+
62
+ } // namespace grpc_core
@@ -0,0 +1,93 @@
1
+ //
2
+ // Copyright 2020 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONFIG_SELECTOR_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONFIG_SELECTOR_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <functional>
23
+ #include <map>
24
+
25
+ #include "absl/strings/string_view.h"
26
+
27
+ #include <grpc/impl/codegen/grpc_types.h>
28
+ #include <grpc/impl/codegen/slice.h>
29
+
30
+ #include "src/core/ext/filters/client_channel/service_config.h"
31
+ #include "src/core/ext/filters/client_channel/service_config_parser.h"
32
+ #include "src/core/lib/gprpp/arena.h"
33
+ #include "src/core/lib/gprpp/ref_counted.h"
34
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
35
+ #include "src/core/lib/transport/metadata_batch.h"
36
+
37
+ namespace grpc_core {
38
+
39
+ // Internal API used to allow resolver implementations to override
40
+ // MethodConfig and provide input to LB policies on a per-call basis.
41
+ class ConfigSelector : public RefCounted<ConfigSelector> {
42
+ public:
43
+ struct GetCallConfigArgs {
44
+ grpc_slice* path;
45
+ grpc_metadata_batch* initial_metadata;
46
+ Arena* arena;
47
+ };
48
+
49
+ struct CallConfig {
50
+ // Can be set to indicate the call should be failed.
51
+ grpc_error* error = GRPC_ERROR_NONE;
52
+ // The per-method parsed configs that will be passed to
53
+ // ServiceConfigCallData.
54
+ const ServiceConfigParser::ParsedConfigVector* method_configs = nullptr;
55
+ // Call attributes that will be accessible to LB policy implementations.
56
+ std::map<const char*, absl::string_view> call_attributes;
57
+ // A callback that, if set, will be invoked when the call is
58
+ // committed (i.e., when we know that we will never again need to
59
+ // ask the picker for a subchannel for this call).
60
+ std::function<void()> on_call_committed;
61
+ };
62
+
63
+ virtual ~ConfigSelector() = default;
64
+
65
+ virtual CallConfig GetCallConfig(GetCallConfigArgs args) = 0;
66
+
67
+ grpc_arg MakeChannelArg() const;
68
+ static RefCountedPtr<ConfigSelector> GetFromChannelArgs(
69
+ const grpc_channel_args& args);
70
+ };
71
+
72
+ // Default ConfigSelector that gets the MethodConfig from the service config.
73
+ class DefaultConfigSelector : public ConfigSelector {
74
+ public:
75
+ explicit DefaultConfigSelector(RefCountedPtr<ServiceConfig> service_config)
76
+ : service_config_(std::move(service_config)) {}
77
+
78
+ CallConfig GetCallConfig(GetCallConfigArgs args) override {
79
+ CallConfig call_config;
80
+ if (service_config_ != nullptr) {
81
+ call_config.method_configs =
82
+ service_config_->GetMethodParsedConfigVector(*args.path);
83
+ }
84
+ return call_config;
85
+ }
86
+
87
+ private:
88
+ RefCountedPtr<ServiceConfig> service_config_;
89
+ };
90
+
91
+ } // namespace grpc_core
92
+
93
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONFIG_SELECTOR_H */
@@ -24,6 +24,9 @@
24
24
 
25
25
  namespace grpc_core {
26
26
 
27
+ #define GRPC_REGISTER_SUBCHANNEL_CALM_DOWN_AFTER_ATTEMPTS 100
28
+ #define GRPC_REGISTER_SUBCHANNEL_CALM_DOWN_MICROS 10
29
+
27
30
  GlobalSubchannelPool::GlobalSubchannelPool() {
28
31
  subchannel_map_ = grpc_avl_create(&subchannel_avl_vtable_);
29
32
  gpr_mu_init(&mu_);
@@ -58,7 +61,7 @@ Subchannel* GlobalSubchannelPool::RegisterSubchannel(SubchannelKey* key,
58
61
  Subchannel* constructed) {
59
62
  Subchannel* c = nullptr;
60
63
  // Compare and swap (CAS) loop:
61
- while (c == nullptr) {
64
+ for (int attempt_count = 0; c == nullptr; attempt_count++) {
62
65
  // Ref the shared map to have a local copy.
63
66
  gpr_mu_lock(&mu_);
64
67
  grpc_avl old_map = grpc_avl_ref(subchannel_map_, nullptr);
@@ -72,7 +75,26 @@ Subchannel* GlobalSubchannelPool::RegisterSubchannel(SubchannelKey* key,
72
75
  GRPC_SUBCHANNEL_UNREF(constructed,
73
76
  "subchannel_register+found_existing");
74
77
  // Exit the CAS loop without modifying the shared map.
75
- } // Else, reuse failed, so retry CAS loop.
78
+ } else {
79
+ // Reuse of the subchannel failed, so retry CAS loop
80
+ if (attempt_count >=
81
+ GRPC_REGISTER_SUBCHANNEL_CALM_DOWN_AFTER_ATTEMPTS) {
82
+ // GRPC_SUBCHANNEL_REF_FROM_WEAK_REF returning nullptr means that the
83
+ // subchannel we got is no longer valid and it's going to be removed
84
+ // from the AVL tree soon. Spinning here excesively here can actually
85
+ // prevent another thread from removing the subchannel, basically
86
+ // resulting in a live lock. See b/157516542 for more details.
87
+ // TODO(jtattermusch): the entire ref-counting mechanism for
88
+ // subchannels should be overhaulded, but the current workaround
89
+ // is fine for short-term.
90
+ // TODO(jtattermusch): gpr does not support thread yield operation,
91
+ // so a very short wait is the best we can do.
92
+ gpr_sleep_until(gpr_time_add(
93
+ gpr_now(GPR_CLOCK_REALTIME),
94
+ gpr_time_from_micros(GRPC_REGISTER_SUBCHANNEL_CALM_DOWN_MICROS,
95
+ GPR_TIMESPAN)));
96
+ }
97
+ }
76
98
  } else {
77
99
  // There hasn't been such subchannel. Add one.
78
100
  // Note that we should ref the old map first because grpc_avl_add() will
@@ -23,6 +23,8 @@
23
23
 
24
24
  #include "src/core/ext/filters/client_channel/health/health_check_client.h"
25
25
 
26
+ #include "upb/upb.hpp"
27
+
26
28
  #include "src/core/lib/debug/trace.h"
27
29
  #include "src/core/lib/gprpp/sync.h"
28
30
  #include "src/core/lib/slice/slice_internal.h"
@@ -22,6 +22,8 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include "absl/strings/str_cat.h"
26
+
25
27
  #include <grpc/slice_buffer.h>
26
28
  #include <grpc/support/alloc.h>
27
29
  #include <grpc/support/log.h>
@@ -241,11 +243,10 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error* error) {
241
243
  // Make sure we got a 2xx response.
242
244
  if (handshaker->http_response_.status < 200 ||
243
245
  handshaker->http_response_.status >= 300) {
244
- char* msg;
245
- gpr_asprintf(&msg, "HTTP proxy returned response code %d",
246
- handshaker->http_response_.status);
247
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
248
- gpr_free(msg);
246
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
247
+ absl::StrCat("HTTP proxy returned response code ",
248
+ handshaker->http_response_.status)
249
+ .c_str());
249
250
  handshaker->HandshakeFailedLocked(error);
250
251
  goto done;
251
252
  }
@@ -23,6 +23,8 @@
23
23
  #include <stdbool.h>
24
24
  #include <string.h>
25
25
 
26
+ #include "absl/strings/str_cat.h"
27
+
26
28
  #include <grpc/support/alloc.h>
27
29
  #include <grpc/support/log.h>
28
30
  #include <grpc/support/string_util.h>
@@ -176,13 +178,13 @@ class HttpProxyMapper : public ProxyMapperInterface {
176
178
  /* Use base64 encoding for user credentials as stated in RFC 7617 */
177
179
  char* encoded_user_cred =
178
180
  grpc_base64_encode(user_cred, strlen(user_cred), 0, 0);
179
- char* header;
180
- gpr_asprintf(&header, "Proxy-Authorization:Basic %s", encoded_user_cred);
181
+ std::string header =
182
+ absl::StrCat("Proxy-Authorization:Basic ", encoded_user_cred);
181
183
  gpr_free(encoded_user_cred);
182
184
  args_to_add[1] = grpc_channel_arg_string_create(
183
- (char*)GRPC_ARG_HTTP_CONNECT_HEADERS, header);
185
+ const_cast<char*>(GRPC_ARG_HTTP_CONNECT_HEADERS),
186
+ const_cast<char*>(header.c_str()));
184
187
  *new_args = grpc_channel_args_copy_and_add(args, args_to_add, 2);
185
- gpr_free(header);
186
188
  } else {
187
189
  *new_args = grpc_channel_args_copy_and_add(args, args_to_add, 1);
188
190
  }
@@ -190,6 +190,8 @@ class LoadBalancingPolicy : public InternallyRefCounted {
190
190
 
191
191
  /// Arguments used when picking a subchannel for a call.
192
192
  struct PickArgs {
193
+ /// The path of the call. Indicates the RPC service and method name.
194
+ absl::string_view path;
193
195
  /// Initial metadata associated with the picking call.
194
196
  /// The LB policy may use the existing metadata to influence its routing
195
197
  /// decision, and it may add new metadata elements to be sent with the
@@ -65,9 +65,12 @@
65
65
  #include <string.h>
66
66
 
67
67
  #include "absl/container/inlined_vector.h"
68
+ #include "absl/strings/str_cat.h"
68
69
  #include "absl/strings/str_format.h"
69
70
  #include "absl/strings/str_join.h"
70
71
 
72
+ #include "upb/upb.hpp"
73
+
71
74
  #include <grpc/byte_buffer_reader.h>
72
75
  #include <grpc/grpc.h>
73
76
  #include <grpc/support/alloc.h>
@@ -128,16 +131,21 @@ constexpr char kGrpclb[] = "grpclb";
128
131
 
129
132
  class GrpcLbConfig : public LoadBalancingPolicy::Config {
130
133
  public:
131
- explicit GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy)
132
- : child_policy_(std::move(child_policy)) {}
134
+ GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
135
+ std::string service_name)
136
+ : child_policy_(std::move(child_policy)),
137
+ service_name_(std::move(service_name)) {}
133
138
  const char* name() const override { return kGrpclb; }
134
139
 
135
140
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
136
141
  return child_policy_;
137
142
  }
138
143
 
144
+ const std::string& service_name() const { return service_name_; }
145
+
139
146
  private:
140
147
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
148
+ std::string service_name_;
141
149
  };
142
150
 
143
151
  class GrpcLb : public LoadBalancingPolicy {
@@ -367,6 +375,8 @@ class GrpcLb : public LoadBalancingPolicy {
367
375
 
368
376
  // Who the client is trying to communicate with.
369
377
  const char* server_name_ = nullptr;
378
+ // Configurations for the policy.
379
+ RefCountedPtr<GrpcLbConfig> config_;
370
380
 
371
381
  // Current channel args from the resolver.
372
382
  grpc_channel_args* args_ = nullptr;
@@ -412,8 +422,6 @@ class GrpcLb : public LoadBalancingPolicy {
412
422
 
413
423
  // The child policy to use for the backends.
414
424
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
415
- // The child policy config.
416
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config_;
417
425
  // Child policy in state READY.
418
426
  bool child_policy_ready_ = false;
419
427
  };
@@ -545,12 +553,10 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
545
553
  memcpy(lb_token, server.load_balance_token, lb_token_length);
546
554
  lb_token[lb_token_length] = '\0';
547
555
  } else {
548
- char* uri = grpc_sockaddr_to_uri(&addr);
549
556
  gpr_log(GPR_INFO,
550
557
  "Missing LB token for backend address '%s'. The empty token will "
551
558
  "be used instead",
552
- uri);
553
- gpr_free(uri);
559
+ grpc_sockaddr_to_uri(&addr).c_str());
554
560
  lb_token[0] = '\0';
555
561
  }
556
562
  // Add address.
@@ -759,8 +765,11 @@ GrpcLb::BalancerCallState::BalancerCallState(
759
765
  nullptr, deadline, nullptr);
760
766
  // Init the LB call request payload.
761
767
  upb::Arena arena;
762
- grpc_slice request_payload_slice =
763
- GrpcLbRequestCreate(grpclb_policy()->server_name_, arena.ptr());
768
+ grpc_slice request_payload_slice = GrpcLbRequestCreate(
769
+ grpclb_policy()->config_->service_name().empty()
770
+ ? grpclb_policy()->server_name_
771
+ : grpclb_policy()->config_->service_name().c_str(),
772
+ arena.ptr());
764
773
  send_message_payload_ =
765
774
  grpc_raw_byte_buffer_create(&request_payload_slice, 1);
766
775
  grpc_slice_unref_internal(request_payload_slice);
@@ -1386,12 +1395,8 @@ void GrpcLb::ResetBackoffLocked() {
1386
1395
 
1387
1396
  void GrpcLb::UpdateLocked(UpdateArgs args) {
1388
1397
  const bool is_initial_update = lb_channel_ == nullptr;
1389
- auto* grpclb_config = static_cast<const GrpcLbConfig*>(args.config.get());
1390
- if (grpclb_config != nullptr) {
1391
- child_policy_config_ = grpclb_config->child_policy();
1392
- } else {
1393
- child_policy_config_ = nullptr;
1394
- }
1398
+ config_ = args.config;
1399
+ GPR_ASSERT(config_ != nullptr);
1395
1400
  ProcessAddressesAndChannelArgsLocked(args.addresses, *args.args);
1396
1401
  // Update the existing child policy.
1397
1402
  if (child_policy_ != nullptr) CreateOrUpdateChildPolicyLocked();
@@ -1456,11 +1461,10 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1456
1461
  balancer_addresses, response_generator_.get(), &args);
1457
1462
  // Create balancer channel if needed.
1458
1463
  if (lb_channel_ == nullptr) {
1459
- char* uri_str;
1460
- gpr_asprintf(&uri_str, "fake:///%s", server_name_);
1461
- lb_channel_ = CreateGrpclbBalancerChannel(uri_str, *lb_channel_args);
1464
+ std::string uri_str = absl::StrCat("fake:///", server_name_);
1465
+ lb_channel_ =
1466
+ CreateGrpclbBalancerChannel(uri_str.c_str(), *lb_channel_args);
1462
1467
  GPR_ASSERT(lb_channel_ != nullptr);
1463
- gpr_free(uri_str);
1464
1468
  }
1465
1469
  // Propagate updates to the LB channel (pick_first) through the fake
1466
1470
  // resolver.
@@ -1646,7 +1650,7 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1646
1650
  update_args.args =
1647
1651
  CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
1648
1652
  GPR_ASSERT(update_args.args != nullptr);
1649
- update_args.config = child_policy_config_;
1653
+ update_args.config = config_->child_policy();
1650
1654
  // Create child policy if needed.
1651
1655
  if (child_policy_ == nullptr) {
1652
1656
  child_policy_ = CreateChildPolicyLocked(update_args.args);
@@ -1676,12 +1680,23 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1676
1680
  const Json& json, grpc_error** error) const override {
1677
1681
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1678
1682
  if (json.type() == Json::Type::JSON_NULL) {
1679
- return MakeRefCounted<GrpcLbConfig>(nullptr);
1683
+ return MakeRefCounted<GrpcLbConfig>(nullptr, "");
1680
1684
  }
1681
1685
  std::vector<grpc_error*> error_list;
1682
1686
  Json child_policy_config_json_tmp;
1683
1687
  const Json* child_policy_config_json;
1684
- auto it = json.object_value().find("childPolicy");
1688
+ std::string service_name;
1689
+ auto it = json.object_value().find("serviceName");
1690
+ if (it != json.object_value().end()) {
1691
+ const Json& service_name_json = it->second;
1692
+ if (service_name_json.type() != Json::Type::STRING) {
1693
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1694
+ "field:serviceName error:type should be string"));
1695
+ } else {
1696
+ service_name = service_name_json.string_value();
1697
+ }
1698
+ }
1699
+ it = json.object_value().find("childPolicy");
1685
1700
  if (it == json.object_value().end()) {
1686
1701
  child_policy_config_json_tmp = Json::Array{Json::Object{
1687
1702
  {"round_robin", Json::Object()},
@@ -1701,7 +1716,8 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1701
1716
  GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
1702
1717
  }
1703
1718
  if (error_list.empty()) {
1704
- return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config));
1719
+ return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config),
1720
+ std::move(service_name));
1705
1721
  } else {
1706
1722
  *error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
1707
1723
  return nullptr;
@@ -390,23 +390,21 @@ SubchannelList::SubchannelList(
390
390
  if (subchannel == nullptr) {
391
391
  // Subchannel could not be created.
392
392
  if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
393
- char* address_uri = grpc_sockaddr_to_uri(&addresses[i].address());
394
393
  gpr_log(GPR_INFO,
395
394
  "[%s %p] could not create subchannel for address uri %s, "
396
395
  "ignoring",
397
- tracer_->name(), policy_, address_uri);
398
- gpr_free(address_uri);
396
+ tracer_->name(), policy_,
397
+ grpc_sockaddr_to_uri(&addresses[i].address()).c_str());
399
398
  }
400
399
  continue;
401
400
  }
402
401
  if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
403
- char* address_uri = grpc_sockaddr_to_uri(&addresses[i].address());
404
402
  gpr_log(GPR_INFO,
405
403
  "[%s %p] subchannel list %p index %" PRIuPTR
406
404
  ": Created subchannel %p for address uri %s",
407
405
  tracer_->name(), policy_, this, subchannels_.size(),
408
- subchannel.get(), address_uri);
409
- gpr_free(address_uri);
406
+ subchannel.get(),
407
+ grpc_sockaddr_to_uri(&addresses[i].address()).c_str());
410
408
  }
411
409
  subchannels_.emplace_back(this, addresses[i], std::move(subchannel));
412
410
  }